diff --git a/backend/src/tracker/core/status.py b/backend/src/tracker/core/status.py index 8a1b109..2786a43 100644 --- a/backend/src/tracker/core/status.py +++ b/backend/src/tracker/core/status.py @@ -65,6 +65,12 @@ def _status_anfrage( for b in beratungen ) + # Fallback: Check abstimmungen for Kenntnisnahme + if not has_kenntnisnahme: + abst = _get_beschluss_from_abstimmungen(conn, member_ids) + if abst: + has_kenntnisnahme = True + # Check KI-Match score for Antwort ki_score = _get_ki_score(conn, ursprung_id, "antwort_match") @@ -138,10 +144,18 @@ def _status_antrag( berichte = [m for m in members if m["typ"] == "bericht"] has_bericht = len(berichte) > 0 - # Determine beschluss from beratungen + # Determine beschluss from beratungen + abstimmungen beschluss = _get_beschluss(beratungen) beschluss_details = _get_beschluss_details(beratungen) + # Fallback: Check abstimmungen if beratungen don't show a decision + if not beschluss or beschluss not in ("angenommen", "abgelehnt", "verwiesen"): + abst_beschluss = _get_beschluss_from_abstimmungen(conn, member_ids) + if abst_beschluss: + beschluss = abst_beschluss["beschluss"] + if not beschluss_details: + beschluss_details = abst_beschluss["details"] + if beschluss == "abgelehnt": return {"status": "abgelehnt", "status_seit": _latest_date(beratungen), "vertagungen_count": vertagungen, "begruendung": f"In Beratung abgelehnt. {beschluss_details}"} @@ -293,3 +307,31 @@ def _get_beschluss(beratungen: list[sqlite3.Row]) -> str | None: return "angenommen" return None + + +def _get_beschluss_from_abstimmungen(conn: sqlite3.Connection, member_ids: list[int]) -> dict | None: + """Check abstimmungen table for a decision when beratungen don't have one.""" + if not member_ids: + return None + placeholders = ",".join("?" * len(member_ids)) + rows = conn.execute( + f"""SELECT ergebnis, sitzung_datum FROM abstimmungen + WHERE vorlage_id IN ({placeholders}) AND ergebnis IS NOT NULL + ORDER BY sitzung_datum DESC NULLS LAST""", + member_ids, + ).fetchall() + + for r in rows: + ergebnis = (r["ergebnis"] or "").lower() + datum = r["sitzung_datum"] or "?" + if "abgelehnt" in ergebnis: + return {"beschluss": "abgelehnt", "details": f"Abstimmung: abgelehnt ({datum})"} + if any(kw in ergebnis for kw in ("beschlossen", "angenommen", "zugestimmt")): + return {"beschluss": "angenommen", "details": f"Abstimmung: {r['ergebnis']} ({datum})"} + if "kenntnis" in ergebnis: + return {"beschluss": "angenommen", "details": f"Abstimmung: {r['ergebnis']} ({datum})"} + if "vertagt" in ergebnis: + continue + if "verwiesen" in ergebnis: + return {"beschluss": "verwiesen", "details": f"Abstimmung: verwiesen ({datum})"} + return None