fix(dashboard): nie kontrollierte Objekte gelten nicht mehr als einsatzbereit
Nutzer-Fund (Readiness-Backlog-Review): einsatzbereitschaft() zählte ein Objekt ohne jede Kontrolle bisher als "einsatzbereit", weil keine Kriterien verletzt waren - fachlich falsch, "nie geprüft" ist nicht dasselbe wie "geprüft und in Ordnung". Neuer vierter Zustand "unbekannt": Objekte ohne abgeschlossene Kontrolle UND ohne sonstige Blocker fallen jetzt hierunter statt unter "einsatzbereit". Objekte mit anderen Gründen (Fehlbestand/Mangel/Prüfung/...) bleiben davon unberührt, die zählten schon vorher korrekt. Tests angepasst: zwei bestehende Tests nutzten ungeprüfte Objekte und erwarteten fälschlich "einsatzbereit" - jetzt entweder explizit kontrolliert (Ist=Soll) oder auf "unbekannt" korrigiert, plus neuer Test für den Kernfall. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC8HYvv6UkCVYheYiTw9DD
This commit is contained in:
@@ -14,6 +14,7 @@ from app.models.objektposition import Objektposition
|
||||
from app.models.personal import BenutzerQualifikation, Qualifikationstyp
|
||||
from app.models.stammdaten import Material
|
||||
from app.services.mangel import objekt_ids_mit_kritischem_offenem_mangel
|
||||
from app.services.objekte import letzte_kontrollen_map
|
||||
|
||||
# Prompt 12.2: offen/in_bearbeitung/nachgefuellt_teilweise zählen gemeinsam als "offen"
|
||||
# (technischer Substatus ist keine Erledigung, Prompt 03/20).
|
||||
@@ -171,6 +172,11 @@ async def einsatzbereitschaft(db: AsyncSession) -> dict:
|
||||
|
||||
objekt_ids_kritischer_mangel = await objekt_ids_mit_kritischem_offenem_mangel(db)
|
||||
|
||||
# Nutzer-Fund (Readiness-Review): ein nie kontrolliertes Objekt hatte bisher als
|
||||
# "einsatzbereit" gegolten, weil keine Kriterien verletzt waren - fachlich falsch,
|
||||
# "nie geprüft" ist nicht dasselbe wie "geprüft und in Ordnung".
|
||||
letzte_kontrolle_map = await letzte_kontrollen_map(db, [o.id for o in objekte])
|
||||
|
||||
objekt_ids_hu_uvv_ueberfaellig = set(
|
||||
(
|
||||
await db.execute(
|
||||
@@ -190,7 +196,7 @@ async def einsatzbereitschaft(db: AsyncSession) -> dict:
|
||||
.all()
|
||||
)
|
||||
|
||||
bereit = eingeschraenkt = 0
|
||||
bereit = eingeschraenkt = unbekannt = 0
|
||||
details: list[dict] = []
|
||||
for objekt in objekte:
|
||||
gruende: list[str] = []
|
||||
@@ -216,6 +222,11 @@ async def einsatzbereitschaft(db: AsyncSession) -> dict:
|
||||
details.append(
|
||||
{"objekt_id": objekt.id, "code": objekt.code, "name": objekt.name, "gruende": ["mindermenge_genehmigt"]}
|
||||
)
|
||||
elif not gruende and letzte_kontrolle_map.get(objekt.id) is None:
|
||||
unbekannt += 1
|
||||
details.append(
|
||||
{"objekt_id": objekt.id, "code": objekt.code, "name": objekt.name, "gruende": ["noch_nie_kontrolliert"]}
|
||||
)
|
||||
elif not gruende:
|
||||
bereit += 1
|
||||
else:
|
||||
@@ -224,7 +235,8 @@ async def einsatzbereitschaft(db: AsyncSession) -> dict:
|
||||
return {
|
||||
"einsatzbereit": bereit,
|
||||
"eingeschraenkt_einsatzbereit": eingeschraenkt,
|
||||
"nicht_einsatzbereit": len(objekte) - bereit - eingeschraenkt,
|
||||
"unbekannt": unbekannt,
|
||||
"nicht_einsatzbereit": len(objekte) - bereit - eingeschraenkt - unbekannt,
|
||||
"gesamt": len(objekte),
|
||||
"details": details,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user