Export:
- GET /export/stock.csv - eine Zeile je Charge, Semikolon-getrennt mit BOM,
direkt in Excel/LibreOffice bearbeitbar; Mengen in der Artikeleinheit.
- GET /export/backup.json - vollstaendiges Backup (Einheiten, Gruppen,
Lagerorte, Produkte, Chargen), Referenzen ueber Namen statt IDs.
Import:
- POST /import/stock (Admin, Datei-Upload). Erkennt CSV oder JSON automatisch.
Arbeitet ausschliesslich additiv: unbekannte Produkte/Gruppen/Lagerorte/
Einheiten werden angelegt, Chargen ergaenzt - nichts wird geloescht.
Mengen koennen in Gebinde ("Glas") oder Einheiten ("Gramm") angegeben werden,
Datum als YYYY-MM-DD oder TT.MM.JJJJ. Fehlerhafte Zeilen werden uebersprungen
und im Ergebnis gemeldet; jeder Import wird als Bewegung protokolliert.
Frontend: neue Seite "Import / Export" (Verwaltung) mit Download-Buttons,
Datei-Upload, Ergebniszusammenfassung und einer Beschreibung der CSV-Spalten.
api.js kann jetzt Datei-Downloads mit Auth-Header und FormData-Uploads.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.3 KiB
3.3 KiB
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.
- Import / Export: CSV (eine Zeile je Charge, in Excel bearbeitbar) und JSON (vollständiges Backup inkl. Einheiten, Gruppen, Lagerorte). Der Import ist rein additiv – unbekannte Produkte/Gruppen/Lagerorte werden angelegt, Chargen ergänzt, nichts gelöscht oder überschrieben.
- 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.