Einkaufszettel und Checkly #10

Open
opened 2026-10-07 22:22:36 +02:00 by lena · 4 comments
Collaborator

Ziel

Aus dem Checkout entsteht ein zusammengefasster Einkaufszettel: Mengen
umgerechnet, gleiche Einkaufsnamen zusammengefasst, Grundvorrat weggelassen,
mit Herkunft je Gericht und Hinweisen bei Unverträglichkeiten. Nach einer
Vorschau wird er mit einem Klick an Checkly übertragen – oder als Text
geteilt.

Grundlage

PRD Kapitel 15 (Einkaufszettel), 12 (Checkout), 22 („Für wen“),
docs/fragen_einkaufszettel_schnittstelle.md, Checkly
docs/api/recipe-integration.md, 19 (Punkt 6)

Abhängig von

#3, #9

Akzeptanzkriterien

Mengen berechnen

  • AK-1: Mengen werden im Verhältnis zu „Ergibt“ auf die beim Checkout
    bestätigte Menge umgerechnet. Das Rezept selbst ändert sich nicht.
  • AK-2: Es wird nicht gerundet: „1,5 Dosen Tomaten“ bleibt „1,5
    Dosen“.
  • AK-3: Bei Spannen zählt die obere Grenze („4–5 EL“ → 5 EL, dann
    umgerechnet).
  • AK-4: Angaben ohne Menge („1 Prise“, „etwas“, „zum Braten“) werden
    nicht umgerechnet und stehen nur in der Herkunft („Suppe: etwas“).
  • AK-5: Utensilien („Du brauchst“) kommen nie auf den Einkaufszettel.

Zusammenfassen

  • AK-6: Zusammengefasst wird über den Einkaufsnamen: „Knoblauchzehen“ und
    „Knoblauch“ werden eins, „Zwiebel“ und „rote Zwiebel“ nicht.
  • AK-7: Gleiche Einheit wird addiert; gleiche Einheitenart in anderer
    Schreibweise wird exakt umgerechnet und addiert (500 g + 1 kg = 1,5 kg;
    „EL“ und „Esslöffel“ zusammen).
  • AK-8: Verschiedene Einheitenarten werden nicht umgerechnet, sondern
    nebeneinander geschrieben.
  • AK-9 Prüfbeispiel: Suppe 1,5 Stück Zwiebeln, Salat 2 Stück, Aufstrich
    150 g ergibt: Name „Zwiebeln“, Menge „3,5 Stück + 150 g“, Herkunft „1,5
    Stück für Suppe + 2 Stück für Salat + 150 g für Aufstrich“.
  • AK-10: Zahlen im deutschen Format („3,5“).

Grundvorrat

  • AK-11: Zutaten, deren Einkaufsname im Grundvorrat steht, erscheinen
    nicht in der Vorschau und werden nie übertragen. Ein dezenter Hinweis nennt
    sie: „Nicht übertragen (Grundvorrat): Salz, Pfeffer, Öl …“.
  • AK-12: Der Grundvorrat gehört zum Haushalt und ist direkt bearbeitbar
    (Einträge hinzufügen und entfernen).

Hinweise bei Unverträglichkeiten

  • AK-13: Hat ein Rezept „für wen“ mit einem unverträglichen Kriterium,
    bekommen seine Zutaten aus der Gruppe „verarbeitete Produkte“ einen
    Hinweis, z. B. „Für Oma: bei verarbeiteten Zutaten auf Gluten achten“.
    Er wird als description an Checkly übertragen.
  • AK-13a Hinweis im Namen (entschieden 08.10.2026): Steht das
    unverträgliche Allergen bei einer Zutat in der Spalte „Gibt es ohne“ des
    Zutatenverzeichnisses (#3, daten/startliste_einkaufsnamen.csv), wird der
    Einkaufsname mit Zusatz in Klammern übertragen: „(glutenfrei)“,
    „(laktosefrei)“, „(ohne Ei)“, „(ohne Nüsse)“, „(ohne Erdnüsse)“; mehrere
    durch Komma getrennt. Gibt es schon einen Einkaufsnamen mit dem Zusatz nach
    Komma, wird dieser genommen. Prüfbeispiele: Räuchertofu für „Wir + Oma
    (Gluten)“ → „Räuchertofu (glutenfrei)“; Gemüsebrühe → „Gemüsebrühe,
    glutenfrei“; Pesto für jemanden mit Laktose- und Nuss-Unverträglichkeit →
    „Pesto (laktosefrei, ohne Nüsse)“. Für Allergene, die so im Namen stehen,
    entfällt der Hinweis aus AK-13. Braucht dieselbe Zutat in einem anderen
    Rezept keinen Zusatz, entstehen zwei getrennte Zeilen (verschiedene
    Produkte).
  • AK-14: „Mag nicht“ und „mag gern“ erzeugen keine Hinweise.

Vorschau

  • AK-15: Jede Zeile zeigt Menge, Name und Herkunft im Format „3,5 Stück +
    150 g Zwiebeln (1,5 Stück für Suppe + …)“.
  • AK-16: Pro Zeile: „ist noch da“ (nur dieser Einkauf) oder „immer da“
    (nicht übertragen und dauerhaft in den Grundvorrat). Alles andere wird
    übertragen.

Übertragung an Checkly

  • AK-17: In den Einstellungen werden einmalig Checkly-Adresse,
    API-Schlüssel und Nummer der Zielliste hinterlegt. Der Schlüssel wird nur
    auf dem Server gespeichert, nie wieder angezeigt und gelangt nie in den
    Browser.
  • AK-18: Beim Klick auf „Übertragen“ erzeugt die App eine transferId
    und schickt immer genau eine Anfrage
    WriteMissingIngredientsToShoppingListCommand mit allen Zutaten (Name,
    Menge, Herkunft, ggf. Hinweis). Jeder Einkaufsname kommt nur einmal vor.
  • AK-19: Längengrenzen pro Zutat werden vor dem Senden eingehalten: Name
    100, Menge 100, Herkunft 200, Hinweis 500 Zeichen. Eine längere Menge wird
    mit „…“ gekürzt; die vollständige Aufschlüsselung steht in der Herkunft.
  • AK-19a Mehr als 200 Zutaten (entschieden 08.10.2026): Hat der
    zusammengefasste Einkaufszettel mehr als 200 Zeilen, wird nicht übertragen.
    Die Vorschau sagt „Zu viele Zutaten auf einmal (n) – bitte in zwei
    Checkouts aufteilen“; der Text-Ausweichweg (AK-24) bleibt möglich.
  • AK-20: Antwort 200 (auch mit alreadyApplied: true): Rezepte werden
    als „übertragen“ markiert, die Übertragung gespeichert.
  • AK-21: Antwort 400, 401/403, 404: nichts wird markiert; die App
    sagt verständlich, was zu prüfen ist (Schlüssel, Listennummer, Eingaben).
  • AK-22: Antwort 429, 5xx, Zeitüberschreitung, Netzwerkfehler: die
    App wiederholt mit derselben transferId. Prüfung (automatisch):
    Checkly-Antwort beim ersten Versuch verlieren, Wiederholung → Checkly hat
    die Zutaten genau einmal auf der Liste.
  • AK-22a Wiederholungen (entschieden 08.10.2026): höchstens drei
    automatische Versuche in steigendem Abstand (etwa 2, 5 und 15 Sekunden);
    währenddessen steht „Wird übertragen …“. Klappt keiner, erscheint
    „Übertragung nicht bestätigt – erneut versuchen“; ein Tipp darauf versucht
    es mit derselben transferId erneut. Die Rezepte gelten erst als
    „übertragen“, wenn Checkly die Übernahme bestätigt hat.
  • AK-23: Ist Checkly nicht eingerichtet, ist „Übertragen“ ausgeblendet
    und auf den Ausweichweg hingewiesen.

Ausweichweg

  • AK-24: Der Einkaufszettel kann jederzeit als Text kopiert oder über
    „Teilen“ weitergegeben werden, im Format der Vorschau – auch wenn Checkly
    nicht erreichbar oder nicht eingerichtet ist.
  • AK-25: Danach fragt die App, ob die Rezepte als „übertragen“ markiert
    werden sollen.

Nicht in dieser Stufe

  • Vorrat aus Checkly lesen und „ist noch da“ vorbelegen (MVP-2)
  • „zusätzlich nötig“ nach Änderungen (MVP-2)
  • Rücknahme einer Übertragung (nicht vorgesehen)

Offene Fragen

  1. Mehr als 200 Zutaten – entschieden 08.10.2026: kein automatisches
    Aufteilen, sondern Hinweis „bitte in zwei Checkouts aufteilen“ (AK-19a).
  2. Widerspruch Kapitel 15 ↔ 12 – entschieden 08.10.2026: In MVP-1
    bietet der Checkout bei mehr Portionen an, nur die zusätzlichen
    einzutragen; bei weniger Portionen gibt es nur einen Hinweis (#9, AK-20a
    und AK-20b). Die zutatengenaue Differenz bei anderen Änderungen (z. B.
    Variante) bleibt MVP-2. Kapitel 15 ist angepasst.
  3. Wiederholungen (AK-22) – entschieden 08.10.2026: drei Versuche in
    steigendem Abstand, danach Hinweis mit „erneut versuchen“ (AK-22a).

Alle offenen Fragen sind geklärt; das Issue ist bereit zum Bau.

## Ziel Aus dem Checkout entsteht ein zusammengefasster Einkaufszettel: Mengen umgerechnet, gleiche Einkaufsnamen zusammengefasst, Grundvorrat weggelassen, mit Herkunft je Gericht und Hinweisen bei Unverträglichkeiten. Nach einer Vorschau wird er mit einem Klick an Checkly übertragen – oder als Text geteilt. ## Grundlage PRD Kapitel 15 (Einkaufszettel), 12 (Checkout), 22 („Für wen“), `docs/fragen_einkaufszettel_schnittstelle.md`, Checkly `docs/api/recipe-integration.md`, 19 (Punkt 6) ## Abhängig von #3, #9 ## Akzeptanzkriterien ### Mengen berechnen - **AK-1:** Mengen werden im Verhältnis zu „Ergibt“ auf die beim Checkout bestätigte Menge umgerechnet. Das Rezept selbst ändert sich nicht. - **AK-2:** Es wird **nicht** gerundet: „1,5 Dosen Tomaten“ bleibt „1,5 Dosen“. - **AK-3:** Bei Spannen zählt die obere Grenze („4–5 EL“ → 5 EL, dann umgerechnet). - **AK-4:** Angaben ohne Menge („1 Prise“, „etwas“, „zum Braten“) werden nicht umgerechnet und stehen nur in der Herkunft („Suppe: etwas“). - **AK-5:** Utensilien („Du brauchst“) kommen nie auf den Einkaufszettel. ### Zusammenfassen - **AK-6:** Zusammengefasst wird über den Einkaufsnamen: „Knoblauchzehen“ und „Knoblauch“ werden eins, „Zwiebel“ und „rote Zwiebel“ nicht. - **AK-7:** Gleiche Einheit wird addiert; gleiche Einheitenart in anderer Schreibweise wird exakt umgerechnet und addiert (500 g + 1 kg = 1,5 kg; „EL“ und „Esslöffel“ zusammen). - **AK-8:** Verschiedene Einheitenarten werden **nicht** umgerechnet, sondern nebeneinander geschrieben. - **AK-9 Prüfbeispiel:** Suppe 1,5 Stück Zwiebeln, Salat 2 Stück, Aufstrich 150 g ergibt: Name „Zwiebeln“, Menge „3,5 Stück + 150 g“, Herkunft „1,5 Stück für Suppe + 2 Stück für Salat + 150 g für Aufstrich“. - **AK-10:** Zahlen im deutschen Format („3,5“). ### Grundvorrat - **AK-11:** Zutaten, deren Einkaufsname im Grundvorrat steht, erscheinen nicht in der Vorschau und werden nie übertragen. Ein dezenter Hinweis nennt sie: „Nicht übertragen (Grundvorrat): Salz, Pfeffer, Öl …“. - **AK-12:** Der Grundvorrat gehört zum Haushalt und ist direkt bearbeitbar (Einträge hinzufügen und entfernen). ### Hinweise bei Unverträglichkeiten - **AK-13:** Hat ein Rezept „für wen“ mit einem unverträglichen Kriterium, bekommen seine Zutaten aus der Gruppe „verarbeitete Produkte“ einen Hinweis, z. B. „Für Oma: bei verarbeiteten Zutaten auf Gluten achten“. Er wird als `description` an Checkly übertragen. - **AK-13a Hinweis im Namen** (entschieden 08.10.2026): Steht das unverträgliche Allergen bei einer Zutat in der Spalte „Gibt es ohne“ des Zutatenverzeichnisses (#3, `daten/startliste_einkaufsnamen.csv`), wird der Einkaufsname mit Zusatz in Klammern übertragen: „(glutenfrei)“, „(laktosefrei)“, „(ohne Ei)“, „(ohne Nüsse)“, „(ohne Erdnüsse)“; mehrere durch Komma getrennt. Gibt es schon einen Einkaufsnamen mit dem Zusatz nach Komma, wird dieser genommen. Prüfbeispiele: Räuchertofu für „Wir + Oma (Gluten)“ → „Räuchertofu (glutenfrei)“; Gemüsebrühe → „Gemüsebrühe, glutenfrei“; Pesto für jemanden mit Laktose- und Nuss-Unverträglichkeit → „Pesto (laktosefrei, ohne Nüsse)“. Für Allergene, die so im Namen stehen, entfällt der Hinweis aus AK-13. Braucht dieselbe Zutat in einem anderen Rezept keinen Zusatz, entstehen zwei getrennte Zeilen (verschiedene Produkte). - **AK-14:** „Mag nicht“ und „mag gern“ erzeugen keine Hinweise. ### Vorschau - **AK-15:** Jede Zeile zeigt Menge, Name und Herkunft im Format „3,5 Stück + 150 g Zwiebeln (1,5 Stück für Suppe + …)“. - **AK-16:** Pro Zeile: „ist noch da“ (nur dieser Einkauf) oder „immer da“ (nicht übertragen und dauerhaft in den Grundvorrat). Alles andere wird übertragen. ### Übertragung an Checkly - **AK-17:** In den Einstellungen werden einmalig Checkly-Adresse, API-Schlüssel und Nummer der Zielliste hinterlegt. Der Schlüssel wird nur auf dem Server gespeichert, nie wieder angezeigt und gelangt nie in den Browser. - **AK-18:** Beim Klick auf „Übertragen“ erzeugt die App eine `transferId` und schickt **immer** genau eine Anfrage `WriteMissingIngredientsToShoppingListCommand` mit allen Zutaten (Name, Menge, Herkunft, ggf. Hinweis). Jeder Einkaufsname kommt nur einmal vor. - **AK-19:** Längengrenzen pro Zutat werden vor dem Senden eingehalten: Name 100, Menge 100, Herkunft 200, Hinweis 500 Zeichen. Eine längere Menge wird mit „…“ gekürzt; die vollständige Aufschlüsselung steht in der Herkunft. - **AK-19a Mehr als 200 Zutaten** (entschieden 08.10.2026): Hat der zusammengefasste Einkaufszettel mehr als 200 Zeilen, wird nicht übertragen. Die Vorschau sagt „Zu viele Zutaten auf einmal (n) – bitte in zwei Checkouts aufteilen“; der Text-Ausweichweg (AK-24) bleibt möglich. - **AK-20:** Antwort `200` (auch mit `alreadyApplied: true`): Rezepte werden als „übertragen“ markiert, die Übertragung gespeichert. - **AK-21:** Antwort `400`, `401/403`, `404`: nichts wird markiert; die App sagt verständlich, was zu prüfen ist (Schlüssel, Listennummer, Eingaben). - **AK-22:** Antwort `429`, `5xx`, Zeitüberschreitung, Netzwerkfehler: die App wiederholt mit **derselben** `transferId`. Prüfung (automatisch): Checkly-Antwort beim ersten Versuch verlieren, Wiederholung → Checkly hat die Zutaten genau einmal auf der Liste. - **AK-22a Wiederholungen** (entschieden 08.10.2026): höchstens drei automatische Versuche in steigendem Abstand (etwa 2, 5 und 15 Sekunden); währenddessen steht „Wird übertragen …“. Klappt keiner, erscheint „Übertragung nicht bestätigt – erneut versuchen“; ein Tipp darauf versucht es mit derselben `transferId` erneut. Die Rezepte gelten erst als „übertragen“, wenn Checkly die Übernahme bestätigt hat. - **AK-23:** Ist Checkly nicht eingerichtet, ist „Übertragen“ ausgeblendet und auf den Ausweichweg hingewiesen. ### Ausweichweg - **AK-24:** Der Einkaufszettel kann jederzeit als Text kopiert oder über „Teilen“ weitergegeben werden, im Format der Vorschau – auch wenn Checkly nicht erreichbar oder nicht eingerichtet ist. - **AK-25:** Danach fragt die App, ob die Rezepte als „übertragen“ markiert werden sollen. ## Nicht in dieser Stufe - Vorrat aus Checkly lesen und „ist noch da“ vorbelegen (MVP-2) - „zusätzlich nötig“ nach Änderungen (MVP-2) - Rücknahme einer Übertragung (nicht vorgesehen) ## Offene Fragen 1. ~~**Mehr als 200 Zutaten**~~ – entschieden 08.10.2026: kein automatisches Aufteilen, sondern Hinweis „bitte in zwei Checkouts aufteilen“ (AK-19a). 2. ~~**Widerspruch Kapitel 15 ↔ 12**~~ – entschieden 08.10.2026: In MVP-1 bietet der Checkout bei mehr Portionen an, nur die zusätzlichen einzutragen; bei weniger Portionen gibt es nur einen Hinweis (#9, AK-20a und AK-20b). Die zutatengenaue Differenz bei anderen Änderungen (z. B. Variante) bleibt MVP-2. Kapitel 15 ist angepasst. 3. ~~**Wiederholungen (AK-22)**~~ – entschieden 08.10.2026: drei Versuche in steigendem Abstand, danach Hinweis mit „erneut versuchen“ (AK-22a). Alle offenen Fragen sind geklärt; das Issue ist bereit zum Bau.
Author
Collaborator

Entscheidung 08.10.2026 (Lena): Bei Zutaten, deren Allergene nur je nach Hersteller enthalten sind, steht auf dem Einkaufszettel ein Hinweis im Namen, z. B. „Räuchertofu (glutenfrei)“, wenn für das Rezept eine passende Unverträglichkeit gilt. Umsetzung: neue Spalte „Gibt es ohne“ in daten/startliste_einkaufsnamen.csv (63 Einträge), Regel in daten/README.md. Siehe #3 (AK-1) und #10 (AK-13a).

Entscheidung 08.10.2026 (Lena): Bei Zutaten, deren Allergene nur je nach Hersteller enthalten sind, steht auf dem Einkaufszettel ein Hinweis im Namen, z. B. „Räuchertofu (glutenfrei)“, wenn für das Rezept eine passende Unverträglichkeit gilt. Umsetzung: neue Spalte „Gibt es ohne“ in `daten/startliste_einkaufsnamen.csv` (63 Einträge), Regel in `daten/README.md`. Siehe #3 (AK-1) und #10 (AK-13a).
Author
Collaborator

Entscheidung 08.10.2026 zu offener Frage 1: Bei mehr als 200 Zutaten wird nicht automatisch aufgeteilt; die Vorschau bittet, in zwei Checkouts aufzuteilen, der Text-Ausweichweg bleibt möglich (neues AK-19a).

Entscheidung 08.10.2026 zu offener Frage 1: Bei mehr als 200 Zutaten wird nicht automatisch aufgeteilt; die Vorschau bittet, in zwei Checkouts aufzuteilen, der Text-Ausweichweg bleibt möglich (neues AK-19a).
Author
Collaborator

Entscheidung 08.10.2026 zu offener Frage 2: Mehr Portionen nach einer Übertragung → Checkout bietet an, nur die zusätzlichen Portionen einzutragen; weniger Portionen → nur Hinweis „Bereits für x Portionen übertragen“, keine weitere Aktion. Umgesetzt als #9, AK-20a und AK-20b; zutatengenaue Differenz bleibt MVP-2. PRD Kapitel 12 und 15 angepasst.

Entscheidung 08.10.2026 zu offener Frage 2: Mehr Portionen nach einer Übertragung → Checkout bietet an, nur die zusätzlichen Portionen einzutragen; weniger Portionen → nur Hinweis „Bereits für x Portionen übertragen“, keine weitere Aktion. Umgesetzt als #9, AK-20a und AK-20b; zutatengenaue Differenz bleibt MVP-2. PRD Kapitel 12 und 15 angepasst.
Author
Collaborator

Entscheidung 08.10.2026 zu offener Frage 3: höchstens drei automatische Versuche in steigendem Abstand, danach „Übertragung nicht bestätigt – erneut versuchen“ mit derselben transferId (neues AK-22a). Damit sind alle offenen Fragen geklärt; Lena hat die Kriterien durchgesehen, status/entwurf entfernt.

Entscheidung 08.10.2026 zu offener Frage 3: höchstens drei automatische Versuche in steigendem Abstand, danach „Übertragung nicht bestätigt – erneut versuchen“ mit derselben transferId (neues AK-22a). Damit sind alle offenen Fragen geklärt; Lena hat die Kriterien durchgesehen, status/entwurf entfernt.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
robert/rezeptbuch#10
No description provided.