App: /expiring kann jetzt ohne MHD kommen - das hat sie nicht ausgehalten

Beim Zusammenstellen der Testliste fuer den naechsten iOS-Build
aufgefallen, bevor es jemandem begegnet ist: Seit den angebrochenen
Packungen liefert /expiring auch Chargen OHNE aufgedrucktes MHD - eine
geoeffnete Packung hat nur ein Verbrauchsdatum, und genau die gehoert in
diese Liste. `best_before` ist dort seither null.

Im Swift-Modell stand `let bestBefore: String`, nicht optional. Eine
einzige solche Charge haette das Entschluesseln der GANZEN Antwort
scheitern lassen: keine Ablaufliste, keine Ablaufkarte - und keine
Erinnerungen, denn der Planer laedt dieselbe Antwort.

Gegen den laufenden Server geprueft: Eine angebrochene Packung ohne MHD
kommt als {"best_before": null, "consume_by": "2026-10-05",
"warn_date": "2026-10-05", "warn_source": "consume_by"}.

Mitgenommen, weil es ohnehin an derselben Stelle sitzt: Das Modell kennt
jetzt opened_on, consume_by, warn_date und warn_source. Die Erinnerungen
haengen am Warndatum statt am MHD - eine angebrochene Packung ohne
aufgedrucktes Datum braucht sie am dringendsten und bekam bisher keine.
Liste und Dashboard-Karte schreiben "verbrauchen bis 05.10." statt
"MHD ohne MHD", denn das sind zwei verschiedene Aussagen.

Nicht kompiliert: Auf dieser Maschine gibt es kein Xcode. Geprueft sind
Klammerbalance, Anfuehrungszeichen, dass item.bestBefore nirgends mehr
nicht-optional benutzt wird, dass ExpiringItem nirgends von Hand erzeugt
wird (nur entschluesselt), und der Abgleich jedes Feldnamens gegen eine
echte Serverantwort. Der Build in Xcode bleibt die Probe.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-02 21:13:43 +02:00
co-authored by Claude Opus 5
parent 25e7f23c6c
commit 892c52e49a
4 changed files with 32 additions and 4 deletions
+3 -1
View File
@@ -75,7 +75,9 @@ enum ExpiryPlanner {
}
for item in snapshot.expiring {
guard let mhd = parseTag(item.bestBefore, calendar: calendar) else { continue }
// Das Warndatum, nicht das MHD: Eine angebrochene Packung ohne
// aufgedrucktes Datum braucht die Erinnerung am dringendsten.
guard let mhd = parseTag(item.warnDate, calendar: calendar) else { continue }
let mhdTag = calendar.startOfDay(for: mhd)
// Welche Regeln gelten fuer dieses Produkt? Kategorie ersetzt Allgemeine: