antragstracker/static/_app/immutable/nodes/5.ClnAgA1G.js
Dotty Dotter 9d8a73e2a9 feat: Parteien-Filter, Klassifikation, Umsetzungsbewertung, KI-Neubewertung
- 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
2026-04-01 10:36:22 +02:00

2 lines
10 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{a as d,f as u,c as ye,t as He}from"../chunks/DCPIP6Ym.js";import{o as Ie}from"../chunks/DDErvS7v.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/DAfY0XTB.js";import{s as o,e as $e,d as Re,a as ce}from"../chunks/D2u1A_4g.js";import{s as Se,a as We}from"../chunks/splFp8Bu.js";import{i as A}from"../chunks/Br6sCvve.js";import{h as je,e as I,i as J}from"../chunks/CBOKTDOo.js";import{s as Ae}from"../chunks/DVOkFnep.js";import{s as qe}from"../chunks/D6E-zrqv.js";import{s as ae}from"../chunks/C-x9yHfs.js";import{b as Ce}from"../chunks/yhBelVs6.js";import{p as Ge}from"../chunks/DiDp2_zb.js";import{e as Qe}from"../chunks/Cgke0YGN.js";import{p as Be}from"../chunks/B-uV6-Xr.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};