fix(kontrolle): Kontrolle bucht Ist-Menge jetzt immer, nicht nur bei Abweichung
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:
@@ -27,11 +27,14 @@ async def erfasse_position(
|
||||
chargennummer: str | None = None,
|
||||
seriennummer: str | None = None,
|
||||
) -> tuple[Kontrollposition, uuid.UUID | None]:
|
||||
"""Prompt 02.3/09 Vier-Kernbegriffe: Kontrolle erfasst nur, ändert nie die
|
||||
persistente Objektposition.istmenge. Bei Ist < Soll entsteht 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.
|
||||
"""Prompt 02.3/09: Kontrolle bucht die gezählte Menge als neuen Ist-Bestand
|
||||
der Objektposition - vorher blieb dieser bei Ist=Soll unverändert (nur
|
||||
Nachfüllung schrieb ihn), wodurch ein frisch angelegtes, aber vollständig
|
||||
bestücktes Objekt dauerhaft auf 0 stehen blieb. Bei Ist < Soll entsteht
|
||||
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:
|
||||
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)
|
||||
|
||||
if objektposition is not None:
|
||||
objektposition.istmenge = istmenge
|
||||
if ablaufdatum is not None:
|
||||
objektposition.ablaufdatum = ablaufdatum
|
||||
if chargennummer is not None:
|
||||
|
||||
@@ -62,9 +62,7 @@ async def test_ablauf_charge_werden_bei_erfassung_mitgepflegt(client, db_session
|
||||
position = result.scalar_one()
|
||||
assert str(position.ablaufdatum) == "2027-06-01"
|
||||
assert position.chargennummer == "LOT-1"
|
||||
# Vier-Kernbegriffe bleiben unberührt: istmenge auf Objektposition wird von
|
||||
# der Kontrolle weiterhin NICHT gesetzt (nur von Nachfüllung).
|
||||
assert position.istmenge == 0
|
||||
assert position.istmenge == 10
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
|
||||
@@ -58,7 +58,8 @@ async def test_genehmigung_aendert_nichts_am_fehlbestand(
|
||||
)
|
||||
)
|
||||
).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
|
||||
|
||||
Reference in New Issue
Block a user