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,
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: