FEFO: angebrochene Packung immer zuerst

Ich hatte das nach dem frueheren wirksamen Datum sortiert, sodass eine
ungeoeffnete Packung mit knappem MHD vor einer offenen drankam. Das ist
falsch herum: Das MHD einer geschlossenen Packung ist konservativ und wird
real meist ueberlebt, eine offene verdirbt dagegen tatsaechlich. Und wer
die zweite aufmacht, waehrend die erste offen steht, hat am Ende zwei
angebrochene.

Angebrochenes kommt also immer zuerst; innerhalb beider Gruppen gilt
weiter FEFO ueber das naehere von MHD und Verbrauchsdatum.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-02 12:33:02 +02:00
co-authored by Claude Opus 5
parent fa5a2bc4fa
commit afacf01f11
2 changed files with 25 additions and 16 deletions
+15 -9
View File
@@ -142,7 +142,7 @@ def test_zustand_ohne_daten_bleibt_no_date(db):
# --------------------------------------------------------------------------
# FEFO
# --------------------------------------------------------------------------
def test_fefo_nimmt_das_fruehere_wirksame_datum(db, milch):
def test_angebrochenes_wird_zuerst_geleert(db, milch):
spaet = _lot(db, milch, 1000, best_before=date.today() + timedelta(days=30))
offen = _lot(db, milch, 500, best_before=date.today() + timedelta(days=30),
opened_on=date.today(), consume_by=date.today() + timedelta(days=2))
@@ -152,22 +152,28 @@ def test_fefo_nimmt_das_fruehere_wirksame_datum(db, milch):
assert reihenfolge == [offen.id, spaet.id]
def test_knappes_mhd_geht_vor_der_offenen_packung(db, milch):
"""Verderb schlägt Bequemlichkeit: Was morgen abläuft, kommt zuerst."""
def test_angebrochenes_geht_auch_vor_knappem_mhd(db, milch):
"""Offen zuerst, selbst wenn eine geschlossene Packung früher datiert ist.
Das MHD einer ungeöffneten Packung ist konservativ und wird real meist
überlebt; eine offene verdirbt dagegen tatsächlich. Und wer die zweite
aufmacht, während die erste offen steht, hat am Ende zwei angebrochene.
"""
morgen = _lot(db, milch, 1000, best_before=date.today() + timedelta(days=1))
offen = _lot(db, milch, 500, opened_on=date.today(),
consume_by=date.today() + timedelta(days=5))
reihenfolge = [lot.id for lot in _fefo_lots(db, milch.id)]
assert reihenfolge == [morgen.id, offen.id]
assert reihenfolge == [offen.id, morgen.id]
def test_bei_gleichem_datum_gewinnt_das_angebrochene(db, milch):
gleich = date.today() + timedelta(days=3)
zu = _lot(db, milch, 1000, best_before=gleich)
offen = _lot(db, milch, 500, opened_on=date.today(), consume_by=gleich)
def test_unter_den_angebrochenen_gilt_weiter_fefo(db, milch):
spaet = _lot(db, milch, 500, opened_on=date.today(),
consume_by=date.today() + timedelta(days=5))
frueh = _lot(db, milch, 500, opened_on=date.today(),
consume_by=date.today() + timedelta(days=1))
reihenfolge = [lot.id for lot in _fefo_lots(db, milch.id)]
assert reihenfolge == [offen.id, zu.id]
assert reihenfolge == [frueh.id, spaet.id]