Files
Vorrania/docs/ROADMAP.md
Scarriffle 0310cdfbd6 Verwaltbare Einheiten mit Umrechnung + Chargen bearbeiten + gezieltes Auslagern
Einheiten (neu):
- Tabelle units (name, kind=count|weight|volume, factor, is_builtin); eingebaut
  Stueck/Gramm/Kilogramm/Milliliter/Liter, Admin kann eigene anlegen (z.B. Pfund=500g).
- Bestaende bleiben intern in kanonischer Basis (Stueck/Gramm/Milliliter);
  Product.display_unit_id und Group.min_stock_unit_id als nullable FKs.
- Neuer Umrechnungs-Service (services/conversion.py) ersetzt die feste Einheitenlogik;
  Ein-/Auslagern und Gruppen-Mindestbestand rechnen ueber den Faktor.
- Gruppen-Mindestbestand mit Einheit; Gruppenbestand summiert nur Produkte
  passender Art. Neue Verwaltungsseite "Einheiten" (Admin).
- Schonende Migration beim Start: ADD COLUMN IF NOT EXISTS (Postgres), damit
  bestehende Installationen ihre Daten behalten.

Chargen:
- PATCH /lots/{id} und DELETE /lots/{id}: Menge/MHD korrigieren, Charge loeschen
  (wird als Korrektur-Bewegung protokolliert). Bearbeitung im Produktdetail.

Auslagern:
- Optionales lot_id: gezielt aus einer bestimmten Charge/MHD abbuchen statt FEFO;
  Auswahl-Dropdown in der Auslagern-Seite.

Sonstiges: Roadmap aktualisiert, Tests fuer die Umrechnung.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 12:33:14 +02:00

3.1 KiB
Raw Blame History

Project-Good Roadmap

Selfhostbare Lebensmittel-Lagerverwaltung. Aufbau in mehreren Schritten.

Schritt 1 Fundament

  • Backend (FastAPI + PostgreSQL): Datenmodell, Auth mit Rollen (Admin/Benutzer), Chargen mit MHD, FEFO-Auslagern, Open-Food-Facts-Lookup (v0-API) mit lokalem Fallback.
  • Web-UI (React/Vite): Login, Dashboard, Ein-/Auslagern, Produkte, Lagerorte, Benutzerverwaltung, Einkaufsliste.
  • Deployment: Docker Compose + install.sh (Docker-/curl-Autoinstall, Secrets, erster Admin, Health-Check), README.
  • Tests: pytest für FEFO, Einheiten-Umrechnung und OFF-Mengenerkennung.

Schritt 1b Ausbau Web-UI

  • Design: professionelles Layout mit Seitenleiste, eigenes SVG-Icon-Set (bewusst keine Emojis), Light-/Dark-Mode, konsistente Farbcodierung (gelb = Warnfrist, rot = abgelaufen).
  • Gruppen: Verwaltung, Zuordnung im Produkt, Gruppen-Mindestbestand mit Einheit, Auto-Zuordnungsvorschlag aus der OFF-Kategorie.
  • Einheiten (verwaltbar): eigene Tabelle mit Art (Anzahl/Gewicht/Volumen) und Umrechnungsfaktor. Eingebaut: Stück, Gramm, Kilogramm, Milliliter, Liter. Admins können weitere anlegen (z.B. Pfund = 500 g). Gilt für Produkte und Gruppen-Mindestbestände; Bestände werden intern in der kanonischen Basiseinheit (Stück/Gramm/Milliliter) gespeichert.
  • Einlagern: Drei-Wege-Barcode-Erkennung (bekannt / bei OFF gefunden → inline anlegen / unbekannt), mehrere Chargen je Vorgang mit eigenem MHD, Warnung bei bereits abgelaufenem MHD.
  • Auslagern: automatisch per FEFO oder gezielte Auswahl einer Charge/MHD, auch Teilmengen.
  • Chargen bearbeiten: Menge/MHD korrigieren und Chargen löschen (mit Protokollierung als Korrektur-Bewegung).
  • Lagerorte: beliebig tief verschachtelbar (Schrank → Fach → Kiste → …).
  • Mindestbestände: je Produkt wahlweise in der Produkteinheit oder in Packungen.
  • Verlauf: Bewegungsprotokoll (wer/was/wann), Einstellungen: Ablauf-Warnfrist.
  • Migration: schonendes Nachziehen neuer Spalten beim Start (ADD COLUMN IF NOT EXISTS), damit bestehende Installationen ihre Daten behalten.

Schritt 2 Native iOS-App (SwiftUI) offen

  • Login (Server-URL + Passwort, Token im Keychain).
  • Barcode-Scan (VisionKit / AVFoundation).
  • Einlagern-Flow: scannen → Lookup/Vorbefüllung → Menge + Einheit + MHD (mehrere Chargen).
  • Auslagern-Flow: scannen → Menge/Einheit, FEFO oder Chargenauswahl.
  • Einkaufsliste- und „bald ablaufend“-Ansicht.
  • Produkte bei Bedarf direkt in der App anlegen.

Schritt 3 Weitere Ideen offen

  • Ablauf-Push-Benachrichtigungen via APNs (setzt die App voraus).
  • Einkaufsliste verfeinern: Abhaken dauerhaft speichern, manuelle Einträge, Mengenvorschläge in Packungen.
  • Statistik/Auswertung über den Bewegungsverlauf (Verbrauch pro Zeitraum).
  • Lagerort beim Auslagern berücksichtigen bzw. pro Charge wählbar beim Einlagern.
  • Produktbilder lokal cachen (aktuell direkt von Open Food Facts geladen).
  • Alembic-Migrationen statt create_all + Startup-ALTER, sobald das Schema stabil ist.