fix(kontrolle): Kontrolle bucht Ist-Menge jetzt immer, nicht nur bei Abweichung
CI / backend-tests (push) Failing after 2m1s
CI / frontend-build (push) Successful in 18s

Bisher änderte eine Kontrolle Objektposition.istmenge nur indirekt
über eine anschließende Nachfüllung bei Abweichung. Zählte eine
Kontrolle Ist=Soll (kein Fehlbestand, keine Nachfüllung), blieb der
Wert dauerhaft auf 0 stehen - ein frisch angelegtes, aber vollständig
bestücktes Objekt zeigte in der Beladung nie den echten Bestand.
Kontrolle setzt istmenge jetzt immer auf den gezählten Wert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-06 23:38:17 +02:00
co-authored by Claude Sonnet 5
parent 300b30e0b1
commit a18ec5bbce
3 changed files with 12 additions and 9 deletions
+9 -5
View File
@@ -27,11 +27,14 @@ async def erfasse_position(
chargennummer: str | None = None, chargennummer: str | None = None,
seriennummer: str | None = None, seriennummer: str | None = None,
) -> tuple[Kontrollposition, uuid.UUID | None]: ) -> tuple[Kontrollposition, uuid.UUID | None]:
"""Prompt 02.3/09 Vier-Kernbegriffe: Kontrolle erfasst nur, ändert nie die """Prompt 02.3/09: Kontrolle bucht die gezählte Menge als neuen Ist-Bestand
persistente Objektposition.istmenge. Bei Ist < Soll entsteht automatisch ein der Objektposition - vorher blieb dieser bei Ist=Soll unverändert (nur
Fehlbestand (nie bei Überbestand, Prompt 02.4). Gibt zusätzlich die Nachfüllung schrieb ihn), wodurch ein frisch angelegtes, aber vollständig
Fehlbestand-ID zurück (falls einer aktiv ist), damit die UI direkt eine bestücktes Objekt dauerhaft auf 0 stehen blieb. Bei Ist < Soll entsteht
Sofort-Nachfüllung (Karte 07) anbieten kann, ohne separat nachzufragen. automatisch ein Fehlbestand (nie bei Überbestand, Prompt 02.4). Gibt
zusätzlich die Fehlbestand-ID zurück (falls einer aktiv ist), damit die UI
direkt eine Sofort-Nachfüllung (Karte 07) anbieten kann, ohne separat
nachzufragen.
Ablaufdatum/Chargennummer/Seriennummer sind KEINE Kernbegriffe-Verletzung: Ablaufdatum/Chargennummer/Seriennummer sind KEINE Kernbegriffe-Verletzung:
sie beschreiben das physische Exemplar, nicht die Ist-Menge, und werden sie beschreiben das physische Exemplar, nicht die Ist-Menge, und werden
@@ -46,6 +49,7 @@ async def erfasse_position(
sollmenge = sollmenge_effektiv(objektposition) if objektposition else Decimal(0) sollmenge = sollmenge_effektiv(objektposition) if objektposition else Decimal(0)
if objektposition is not None: if objektposition is not None:
objektposition.istmenge = istmenge
if ablaufdatum is not None: if ablaufdatum is not None:
objektposition.ablaufdatum = ablaufdatum objektposition.ablaufdatum = ablaufdatum
if chargennummer is not None: if chargennummer is not None:
+1 -3
View File
@@ -62,9 +62,7 @@ async def test_ablauf_charge_werden_bei_erfassung_mitgepflegt(client, db_session
position = result.scalar_one() position = result.scalar_one()
assert str(position.ablaufdatum) == "2027-06-01" assert str(position.ablaufdatum) == "2027-06-01"
assert position.chargennummer == "LOT-1" assert position.chargennummer == "LOT-1"
# Vier-Kernbegriffe bleiben unberührt: istmenge auf Objektposition wird von assert position.istmenge == 10
# der Kontrolle weiterhin NICHT gesetzt (nur von Nachfüllung).
assert position.istmenge == 0
@pytest.mark.asyncio @pytest.mark.asyncio
+2 -1
View File
@@ -58,7 +58,8 @@ async def test_genehmigung_aendert_nichts_am_fehlbestand(
) )
) )
).scalar_one() ).scalar_one()
assert float(objektposition.istmenge) == 0 # unverändert (Kontrolle/Genehmigung ändern nie Ist-Menge) # 8 = die bei der Kontrolle gezählte Menge (Genehmigung selbst ändert sie nicht weiter).
assert float(objektposition.istmenge) == 8
@pytest.mark.asyncio @pytest.mark.asyncio