- Vorlagen + Ketten: Partei-Dropdown-Filter mit Badges (#9) - Vorlagen-Detail: Ketten-Klassifikation mit Begründung anzeigen - Vorlagen-Detail: Umsetzungsbewertungen mit Score + Begründung - SPA-Routing: Catch-All für direkten URL-Zugriff - Status-Engine: Begründungen für alle Ketten-Status generieren - Kurze Beschlusstexte (<=5 Zeichen) nicht mehr als Beschluss werten - POST /api/bewertung/vorlagen/{id} + /ketten/{id} für KI-Neubewertung - Frontend: 'Neu bewerten' Button + Kommentarfeld auf beiden Detailseiten - Job-Status-Polling mit Spinner - ALLRIS-Rescrape vor Bewertung noch offen (#10) Closes #9
2 lines
10 KiB
JavaScript
2 lines
10 KiB
JavaScript
import{a as d,f as u,c as ye,t as He}from"../chunks/Bkzsmr9I.js";import{o as Ie}from"../chunks/trpXq522.js";import{d as Ke,c as r,r as t,b as a,g as e,t as f,h as Te,u as O,s as P,n as R,a as $,am as Je,K as Oe,$ as Pe,f as ue}from"../chunks/Cjw4vZKn.js";import{s as o,e as $e,d as Re,a as ce}from"../chunks/DfJQ0EIT.js";import{s as Se,a as We}from"../chunks/DjXdyWBG.js";import{i as A}from"../chunks/kjB3f-xG.js";import{h as je,e as I,i as J}from"../chunks/DaCWmHjB.js";import{s as Ae}from"../chunks/RVjQLo13.js";import{s as qe}from"../chunks/CWOupeSg.js";import{s as ae}from"../chunks/QfvBL-nR.js";import{b as Ce}from"../chunks/qS6hbb4Y.js";import{p as Ge}from"../chunks/OvWQM58r.js";import{e as Qe}from"../chunks/Cgke0YGN.js";import{p as Be}from"../chunks/fSdafo1a.js";import{f as Xe}from"../chunks/utcFFRIM.js";const ge={erfuellt:{label:"Erfüllt",farbe:"#22c55e",icon:"✅",beschreibung:"Forderung vollständig oder weitgehend umgesetzt. Konkreter Beschluss liegt vor, der die Kernpunkte des Antrags aufgreift.",beispiel:"Antrag auf Zuschuss → Zuschuss in beantragter Höhe einstimmig bewilligt.",score_range:[.8,1]},teilweise:{label:"Teilweise",farbe:"#eab308",icon:"⚠️",beschreibung:"Kernpunkt wurde adressiert, aber mit Abstrichen. Verwaltung greift Teile auf, lässt andere fallen oder verwässert die Forderung.",beispiel:"Antrag auf Radweg → Prüfauftrag für Machbarkeitsstudie statt direktem Baubeschluss.",score_range:[.5,.7]},abgewiegelt:{label:"Abgewiegelt",farbe:"#f97316",icon:"🚫",beschreibung:"Verwaltung weicht aus. Kündigt Prüfung an, verweist auf Zuständigkeiten oder beantwortet die Frage nicht substantiell.",beispiel:'Anfrage zu Missständen → „Wird geprüft" ohne Zeitrahmen oder konkrete Zusagen.',score_range:[.2,.4]},nebelkerze:{label:"Nebelkerze",farbe:"#ef4444",icon:"💨",beschreibung:"Thema komplett ignoriert, Diskussion auf Nebenschauplatz verlagert oder Antrag ohne Behandlung von der Tagesordnung genommen.",beispiel:'Antrag zu Sauberkeit → „Ohne Beschlussfassung" oder keine Wortmeldung.',score_range:[0,.1]},vertagt:{label:"Vertagt",farbe:"#8b5cf6",icon:"⏳",beschreibung:"Antrag explizit verschoben, ruhend gestellt oder in einen anderen Ausschuss verwiesen. Kein inhaltliches Ergebnis, aber formal nicht abgelehnt.",beispiel:"Antrag wird zur weiteren Beratung in den Fachausschuss überwiesen.",score_range:null},unklar:{label:"Unklar",farbe:"#6b7280",icon:"❓",beschreibung:"Beschlusslage nicht eindeutig zuordenbar. Möglicherweise fehlen Dokumente oder der Beschlusstext ist nicht aussagekräftig genug.",beispiel:'Nur „Kenntnisnahme" ohne weitere Erläuterung.',score_range:null}},Fe={label:"Unbekannt",farbe:"#9ca3af",icon:"❓",beschreibung:"Keine Bewertung vorhanden.",beispiel:"",score_range:null};function Ye(N){return N?ge[N]??Fe:Fe}var et=u('<span class="ml-1 opacity-60"> </span>'),tt=u('<div class="mt-1 text-gray-400"> </div>'),rt=u('<div class="absolute z-50 bottom-full left-1/2 -translate-x-1/2 mb-2 w-72 p-3 bg-gray-900 text-white text-xs rounded-lg shadow-lg pointer-events-none"><div class="font-bold mb-1"> </div> <div class="mb-2 leading-relaxed"> </div> <div class="text-gray-400 italic"> </div> <!> <div class="absolute top-full left-1/2 -translate-x-1/2 -mt-1 w-2 h-2 bg-gray-900 rotate-45"></div></div>'),at=u('<span class="relative inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium cursor-help"><span class="mr-1"> </span> <!> <!></span>');function st(N,Z){Ke(Z,!0);let S=Be(Z,"score",3,null),se=Be(Z,"showTooltip",3,!0);const c=O(()=>Ye(Z.kategorie));let n=P(!1);var w=at(),T=r(w),W=r(T,!0);t(T);var _=a(T),V=a(_);{var j=B=>{var F=et(),U=r(F);t(F),f(C=>o(U,`(${C??""}%)`),[()=>(S()*100).toFixed(0)]),d(B,F)};A(V,B=>{S()!==null&&S()!==void 0&&B(j)})}var ee=a(V,2);{var q=B=>{var F=rt(),U=r(F),C=r(U);t(U);var v=a(U,2),k=r(v,!0);t(v);var K=a(v,2),te=r(K);t(K);var re=a(K,2);{var G=Q=>{var L=tt(),ne=r(L);t(L),f(()=>o(ne,`Score: ${e(c).score_range[0]??""}–${e(c).score_range[1]??""}`)),d(Q,L)};A(re,Q=>{e(c).score_range&&Q(G)})}R(2),t(F),f(()=>{o(C,`${e(c).icon??""} ${e(c).label??""}`),o(k,e(c).beschreibung),o(te,`Beispiel: ${e(c).beispiel??""}`)}),d(B,F)};A(ee,B=>{se()&&e(n)&&B(q)})}t(w),f(()=>{ae(w,`background-color: ${e(c).farbe??""}20; color: ${e(c).farbe??""}; border: 1px solid ${e(c).farbe??""}40;`),o(W,e(c).icon),o(_,` ${e(c).label??""} `)}),$e("mouseenter",w,()=>$(n,!0)),$e("mouseleave",w,()=>$(n,!1)),d(N,w),Te()}var nt=u('<div class="text-gray-500">Laden...</div>'),it=u('<div class="text-red-600"> </div>'),lt=u('<div class="bg-green-50 rounded-lg border border-green-200 p-4"><div class="text-3xl font-bold text-green-700"> </div> <div class="text-sm text-green-600">Erfüllt</div></div>'),ot=u('<div class="bg-red-50 rounded-lg border border-red-200 p-4"><div class="text-3xl font-bold text-red-700"> </div> <div class="text-sm text-red-600">Nebelkerzen</div></div>'),dt=u('<div class="flex items-center justify-center text-xs font-medium text-white transition-all"><!></div>'),vt=u('<button><span class="w-3 h-3 rounded-full inline-block"></span> </button>'),ut=u('<div class="bg-white rounded-lg border p-6 mb-8"><h2 class="font-bold mb-4">Umsetzungsquote</h2> <div class="flex rounded-full overflow-hidden h-8 mb-4"></div> <div class="flex flex-wrap gap-4 text-sm"></div></div>'),ct=u("<option> </option>"),gt=u('<button class="text-sm text-blue-600 hover:underline">Filter zurücksetzen</button>'),bt=u('<span class="text-gray-400 text-xs">–</span>'),ft=u('<tr class="hover:bg-gray-50"><td class="px-4 py-3"><a class="text-blue-600 hover:underline font-mono text-xs"> </a></td><td class="px-4 py-3 max-w-md truncate"> </td><td class="px-4 py-3 text-gray-500 whitespace-nowrap"> </td><td class="px-4 py-3"><!></td></tr>'),mt=u('<div class="flex items-center gap-4 mb-6"><div class="w-3 h-12 rounded"></div> <div><h1 class="text-2xl font-bold"> </h1> <span class="text-sm text-gray-500"> </span></div> <a href="/fraktionen" class="ml-auto text-sm text-blue-600 hover:underline">← Alle Fraktionen</a></div> <div class="grid grid-cols-2 sm:grid-cols-4 gap-4 mb-8"><div class="bg-white rounded-lg border p-4"><div class="text-3xl font-bold"> </div> <div class="text-sm text-gray-500">Anträge gesamt</div></div> <div class="bg-white rounded-lg border p-4"><div class="text-3xl font-bold"> </div> <div class="text-sm text-gray-500">Mit Umsetzungsbewertung</div></div> <!> <!></div> <!> <div class="flex gap-4 mb-4"><select class="border rounded px-3 py-1.5 text-sm"><option>Alle Jahre</option><!></select> <!> <span class="text-sm text-gray-500 ml-auto"> </span></div> <div class="bg-white rounded-lg border overflow-hidden"><table class="w-full text-sm"><thead class="bg-gray-50 text-left"><tr><th class="px-4 py-3 font-medium">Aktenzeichen</th><th class="px-4 py-3 font-medium">Betreff</th><th class="px-4 py-3 font-medium">Datum</th><th class="px-4 py-3 font-medium">Umsetzung</th></tr></thead><tbody class="divide-y"></tbody></table></div>',1),pt=u('<div class="max-w-6xl mx-auto p-6"><!></div>');function Ut(N,Z){Ke(Z,!0);const S=()=>We(Ge,"$page",se),[se,c]=Se();let n=P(null),w=P(!0),T=P(null),W=P(""),_=P(""),V=O(()=>S().params.kuerzel);async function j(){$(w,!0),$(T,null);try{$(n,await Qe(e(V),e(W)||void 0),!0)}catch(v){$(T,v.message,!0)}$(w,!1)}Ie(j),Je(()=>{e(V)&&j()});let ee=O(()=>e(n)?.antraege.filter(v=>!e(_)||v.umsetzung_bewertung===e(_))??[]);var q=pt();je("1jei61n",v=>{Oe(()=>{Pe.title=`${e(n)?.partei?.name??e(V)??""} — Antragstracker Hagen`})});var B=r(q);{var F=v=>{var k=nt();d(v,k)},U=v=>{var k=it(),K=r(k);t(k),f(()=>o(K,`Fehler: ${e(T)??""}`)),d(v,k)},C=v=>{var k=mt(),K=ue(k),te=r(K),re=a(te,2),G=r(re),Q=r(G,!0);t(G);var L=a(G,2),ne=r(L,!0);t(L),t(re),R(2),t(K);var ie=a(K,2),le=r(ie),be=r(le),De=r(be,!0);t(be),R(2),t(le);var oe=a(le,2),fe=r(oe),Ee=r(fe,!0);t(fe),R(2),t(oe);var me=a(oe,2);I(me,17,()=>e(n).umsetzung.filter(i=>i.bewertung==="erfuellt"),J,(i,s)=>{var l=lt(),g=r(l),b=r(g,!0);t(g),R(2),t(l),f(()=>o(b,e(s).anzahl)),d(i,l)});var Ue=a(me,2);I(Ue,17,()=>e(n).umsetzung.filter(i=>i.bewertung==="nebelkerze"),J,(i,s)=>{var l=ot(),g=r(l),b=r(g,!0);t(g),R(2),t(l),f(()=>o(b,e(s).anzahl)),d(i,l)}),t(ie);var pe=a(ie,2);{var Me=i=>{var s=ut(),l=a(r(s),2);I(l,21,()=>e(n).umsetzung,J,(b,h)=>{const m=O(()=>ge[e(h).bewertung]),z=O(()=>e(h).anzahl/e(n).bewertet*100);var D=ye(),Y=ue(D);{var E=x=>{var y=dt(),H=r(y);{var p=M=>{var ze=He();f(Le=>o(ze,`${e(m).label??""} ${Le??""}%`),[()=>e(z).toFixed(0)]),d(M,ze)};A(H,M=>{e(z)>8&&M(p)})}t(y),f(M=>{ae(y,`width: ${e(z)??""}%; background-color: ${e(m).farbe??""};`),Ae(y,"title",`${e(m).label??""}: ${e(h).anzahl??""} (${M??""}%)`)},[()=>e(z).toFixed(1)]),d(x,y)};A(Y,x=>{e(m)&&e(z)>0&&x(E)})}d(b,D)}),t(l);var g=a(l,2);I(g,21,()=>e(n).umsetzung,J,(b,h)=>{const m=O(()=>ge[e(h).bewertung]);var z=ye(),D=ue(z);{var Y=E=>{var x=vt();let y;var H=r(x),p=a(H);t(x),f(()=>{y=qe(x,1,"flex items-center gap-1.5 hover:opacity-70 transition-opacity",null,y,{"opacity-40":e(_)&&e(_)!==e(h).bewertung}),ae(H,`background-color: ${e(m).farbe??""}`),o(p,` ${e(m).label??""}: ${e(h).anzahl??""}`)}),ce("click",x,()=>$(_,e(_)===e(h).bewertung?"":e(h).bewertung,!0)),d(E,x)};A(D,E=>{e(m)&&E(Y)})}d(b,z)}),t(g),t(s),d(i,s)};A(pe,i=>{e(n).bewertet>0&&i(Me)})}var de=a(pe,2),X=r(de),ve=r(X);ve.value=ve.__value="";var Ne=a(ve);I(Ne,17,()=>e(n).jahre,J,(i,s)=>{var l=ct(),g=r(l,!0);t(l);var b={};f(()=>{o(g,e(s)),b!==(b=e(s))&&(l.value=(l.__value=e(s))??"")}),d(i,l)}),t(X);var _e=a(X,2);{var Ze=i=>{var s=gt();ce("click",s,()=>$(_,"")),d(i,s)};A(_e,i=>{e(_)&&i(Ze)})}var he=a(_e,2),Ve=r(he);t(he),t(de);var xe=a(de,2),we=r(xe),ke=a(r(we));I(ke,21,()=>e(ee),J,(i,s)=>{var l=ft(),g=r(l),b=r(g),h=r(b,!0);t(b),t(g);var m=a(g),z=r(m,!0);t(m);var D=a(m),Y=r(D,!0);t(D);var E=a(D),x=r(E);{var y=p=>{st(p,{get kategorie(){return e(s).umsetzung_bewertung},get score(){return e(s).umsetzung_score}})},H=p=>{var M=bt();d(p,M)};A(x,p=>{e(s).umsetzung_bewertung?p(y):p(H,-1)})}t(E),t(l),f(p=>{Ae(b,"href",`/vorlagen/${e(s).id??""}`),o(h,e(s).aktenzeichen),o(z,e(s).betreff),o(Y,p)},[()=>Xe(e(s).datum_eingang)]),d(i,l)}),t(ke),t(we),t(xe),f(()=>{ae(te,`background-color: ${(e(n).partei.farbe||"#6b7280")??""}`),o(Q,e(n).partei.name),o(ne,e(n).partei.kuerzel),o(De,e(n).total_antraege),o(Ee,e(n).bewertet),o(Ve,`${e(ee).length??""} Anträge`)}),ce("change",X,j),Ce(X,()=>e(W),i=>$(W,i)),d(v,k)};A(B,v=>{e(w)&&!e(n)?v(F):e(T)?v(U,1):e(n)&&v(C,2)})}t(q),d(N,q),Te(),c()}Re(["click","change"]);export{Ut as component};
|