Dashboard: - Neuer Endpoint GET /api/stats/dashboard mit allen Kennzahlen - Klickbare Kacheln: Vorlagen nach Typ, Ketten nach Status → navigieren zu Filterlisten - Umsetzungsquote als horizontaler Balken mit klickbaren Segmenten Abstimmungen: - Stimmverhalten-Tabelle klickbar: Fraktion oder Ja/Nein/Enthaltung → filtert - Neuer Endpoint GET /api/abstimmungen/details (?fraktion=&stimme=) mit Pagination - Neuer Endpoint GET /api/abstimmungen/vergleich (?f1=&f2=) für Koalitionsmatrix-Drill-Down - Koalitionsmatrix-Zellen klickbar → zeigt Abstimmungsvergleich beider Fraktionen Fraktions-Normalisierung: - fraktionen_mapping.py: 40+ DB-Varianten → kanonische Namen - 'Bündnis 90 / Die Grünen' / 'Bündnis 90/Die Grünen' / 'Grüne' → 'Grüne' - 'Die Linke' / 'Die Linke.' / 'Linke' → 'Linke' - BfHo-Varianten, Hagen Aktiv, Einzelvertreter etc. normalisiert - Mapping in allen Abstimmungs-Endpoints aktiv - ist_ratsfraktion Flag in Fraktionen-Response Closes #14
2 lines
1011 B
JavaScript
2 lines
1011 B
JavaScript
import{a as b,f as x}from"../chunks/B89f14j0.js";import{ao as k,aY as $,an as i,o as y,aZ as l,a_ as E,g as v,a$ as Y,x as Z,b0 as j,p as q,f as w,t as z,c as A,h as u,r as m,b as B}from"../chunks/reyx9_7L.js";import{s as _}from"../chunks/BwTTNG21.js";import{s as C,p as g}from"../chunks/BHBF0lbh.js";function D(r=!1){const t=k,e=t.l.u;if(!e)return;let a=()=>Y(t.s);if(r){let o=0,s={};const f=Z(()=>{let p=!1;const c=t.s;for(const n in c)c[n]!==s[n]&&(s[n]=c[n],p=!0);return p&&o++,o});a=()=>v(f)}e.b.length&&$(()=>{h(t,a),l(e.b)}),i(()=>{const o=y(()=>e.m.map(E));return()=>{for(const s of o)typeof s=="function"&&s()}}),e.a.length&&i(()=>{h(t,a),l(e.a)})}function h(r,t){if(r.l.s)for(const e of r.l.s)v(e);t()}j();const F={get error(){return g.error},get status(){return g.status}};C.updated.check;const d=F;var G=x("<h1> </h1> <p> </p>",1);function L(r,t){q(t,!1),D();var e=G(),a=w(e),o=u(a,!0);m(a);var s=B(a,2),f=u(s,!0);m(s),z(()=>{_(o,d.status),_(f,d.error?.message)}),b(r,e),A()}export{L as component};
|