Neue Features: - 4 Verfahrensstränge: Antrag, Anfrage, Beschlussvorlage, Mitteilung - Ampel-Visualisierung pro Kette (Fortschrittsanzeige mit Abzweigungen) - 3-Panel Explorer (/explorer): Liste | Kette+Ampel | Vorlage-Detail - KI-Bewertungs-Versionierung (alte Versionen aufklappbar) - Neubewertung triggert automatisch Umsetzungs-Score - Bewertungs-Log (bewertungs_log Tabelle) - Umsetzungsgrad an Kette (Score + Begründung) - Antragsteller + Beratungsergebnis pro Kettenglied - HAK und Hagen Aktiv als getrennte Fraktionen - Status-Filter im Explorer - Suche durchsucht Aktenzeichen + Betreff Backend: - tracker/core/ampel.py — Ampel-Definition + get_ampel() - tracker/core/perioden.py — Shared Perioden-Filter - Neues Feld: ketten.strang, ki_bewertungen.kette_id - GET /api/ampel/definition, erweiterte Ketten/Vorlagen-APIs Closes #16
142 lines
3.6 KiB
Python
142 lines
3.6 KiB
Python
from __future__ import annotations
|
|
"""Pydantic response models for the API."""
|
|
|
|
from datetime import date, datetime
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class ParteiOut(BaseModel):
|
|
id: int
|
|
kuerzel: str
|
|
name: str | None = None
|
|
farbe: str | None = None
|
|
|
|
|
|
class GremiumOut(BaseModel):
|
|
id: int
|
|
name: str
|
|
kuerzel: str | None = None
|
|
typ: str | None = None
|
|
|
|
|
|
class BeratungOut(BaseModel):
|
|
id: int
|
|
gremium: GremiumOut | None = None
|
|
sitzung_datum: date | None = None
|
|
rolle: str | None = None
|
|
ergebnis: str | None = None
|
|
ergebnis_text: str | None = None
|
|
|
|
|
|
class VorlageKurz(BaseModel):
|
|
id: int
|
|
aktenzeichen: str | None = None
|
|
typ: str | None = None
|
|
betreff: str | None = None
|
|
datum_eingang: date | None = None
|
|
ist_verwaltungsvorlage: bool = False
|
|
|
|
|
|
class ReferenzOut(BaseModel):
|
|
vorlage_id: int
|
|
aktenzeichen: str | None = None
|
|
betreff: str | None = None
|
|
vorlage_typ: str | None = None
|
|
datum_eingang: date | None = None
|
|
ref_typ: str | None = None
|
|
konfidenz: float | None = None
|
|
kontext: str | None = None
|
|
|
|
|
|
class KiZusammenfassung(BaseModel):
|
|
zusammenfassung: str | None = None
|
|
kernforderung: str | None = None
|
|
begruendung: str | None = None
|
|
betroffene_orte: list[str] = []
|
|
thema: str | None = None
|
|
partei: str | list[str] | None = None
|
|
|
|
|
|
class UmsetzungsBewertung(BaseModel):
|
|
score: float | None = None
|
|
begruendung: str | None = None
|
|
quelle_vorlage_id: int | None = None
|
|
quelle_aktenzeichen: str | None = None
|
|
|
|
|
|
class VorlageDetail(BaseModel):
|
|
id: int
|
|
aktenzeichen: str | None = None
|
|
aktenzeichen_basis: str | None = None
|
|
aktenzeichen_suffix: str | None = None
|
|
typ: str | None = None
|
|
betreff: str | None = None
|
|
volltext_clean: str | None = None
|
|
datum_eingang: date | None = None
|
|
pdf_url: str | None = None
|
|
web_url: str | None = None
|
|
ki_zusammenfassung: KiZusammenfassung | None = None
|
|
ist_verwaltungsvorlage: bool = False
|
|
thema_kurz: str | None = None
|
|
antragsteller: list[ParteiOut] = []
|
|
beratungen: list[BeratungOut] = []
|
|
referenzen_ausgehend: list[ReferenzOut] = []
|
|
referenzen_eingehend: list[ReferenzOut] = []
|
|
kette_id: int | None = None
|
|
umsetzungsbewertungen: list[UmsetzungsBewertung] = []
|
|
ampel: dict | None = None
|
|
ki_versionen: list[dict] | None = None
|
|
|
|
|
|
class KettenGliedOut(BaseModel):
|
|
vorlage: VorlageKurz
|
|
position: int
|
|
rolle: str | None = None
|
|
|
|
|
|
class KetteKurz(BaseModel):
|
|
id: int
|
|
ursprung: VorlageKurz | None = None
|
|
typ: str | None = None
|
|
thema: str | None = None
|
|
status: str | None = None
|
|
status_seit: date | None = None
|
|
letzte_aktivitaet: date | None = None
|
|
vertagungen_count: int = 0
|
|
glieder_count: int = 0
|
|
strang: str | None = None
|
|
ampel: dict | None = None
|
|
|
|
|
|
class KetteDetail(BaseModel):
|
|
id: int
|
|
ursprung: VorlageKurz | None = None
|
|
typ: str | None = None
|
|
thema: str | None = None
|
|
status: str | None = None
|
|
status_seit: date | None = None
|
|
letzte_aktivitaet: date | None = None
|
|
vertagungen_count: int = 0
|
|
begruendung: str | None = None
|
|
glieder: list[dict] = []
|
|
antragsteller: list[ParteiOut] = []
|
|
graph: dict | None = None
|
|
strang: str | None = None
|
|
ampel: dict | None = None
|
|
umsetzung: dict | None = None
|
|
umsetzung_versionen: list[dict] | None = None
|
|
|
|
|
|
class PaginatedVorlagen(BaseModel):
|
|
items: list[VorlageKurz]
|
|
total: int
|
|
page: int
|
|
page_size: int
|
|
|
|
|
|
class PaginatedKetten(BaseModel):
|
|
items: list[KetteKurz]
|
|
total: int
|
|
page: int
|
|
page_size: int
|