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
41 lines
1.4 KiB
HTML
41 lines
1.4 KiB
HTML
<!doctype html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<link href="/_app/immutable/entry/start.CJw4zQCo.js" rel="modulepreload">
|
|
<link href="/_app/immutable/chunks/BHBF0lbh.js" rel="modulepreload">
|
|
<link href="/_app/immutable/chunks/reyx9_7L.js" rel="modulepreload">
|
|
<link href="/_app/immutable/chunks/Pu2RPHbX.js" rel="modulepreload">
|
|
<link href="/_app/immutable/chunks/DrzKg1h1.js" rel="modulepreload">
|
|
<link href="/_app/immutable/entry/app.Bf2mSiZt.js" rel="modulepreload">
|
|
<link href="/_app/immutable/chunks/PPVm8Dsz.js" rel="modulepreload">
|
|
<link href="/_app/immutable/chunks/BwTTNG21.js" rel="modulepreload">
|
|
<link href="/_app/immutable/chunks/B89f14j0.js" rel="modulepreload">
|
|
<link href="/_app/immutable/chunks/Do7Yo2YN.js" rel="modulepreload">
|
|
<link href="/_app/immutable/chunks/DfsAIpU3.js" rel="modulepreload">
|
|
<link href="/_app/immutable/chunks/CvtDgobB.js" rel="modulepreload">
|
|
|
|
</head>
|
|
<body data-sveltekit-preload-data="hover">
|
|
<div style="display: contents">
|
|
<script>
|
|
{
|
|
__sveltekit_jcwz9y = {
|
|
base: ""
|
|
};
|
|
|
|
const element = document.currentScript.parentElement;
|
|
|
|
Promise.all([
|
|
import("/_app/immutable/entry/start.CJw4zQCo.js"),
|
|
import("/_app/immutable/entry/app.Bf2mSiZt.js")
|
|
]).then(([kit, app]) => {
|
|
kit.start(app, element);
|
|
});
|
|
}
|
|
</script>
|
|
</div>
|
|
</body>
|
|
</html>
|