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>
This commit is contained in:
@@ -2,31 +2,52 @@
|
||||
|
||||
Selfhostbare Lebensmittel-Lagerverwaltung. Aufbau in mehreren Schritten.
|
||||
|
||||
## Schritt 1 – Fundament ✅ (dieser Stand)
|
||||
- Backend (FastAPI + PostgreSQL): Datenmodell, Auth mit Rollen, FEFO-Auslagern,
|
||||
Einheiten-Umrechnung, Open-Food-Facts-Lookup mit lokalem Fallback.
|
||||
## 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 – rollenabhängig.
|
||||
- Deployment: Docker Compose + `install.sh`, erster Admin beim Setup.
|
||||
- Tests: pytest für FEFO-Abbuchung und Einheiten-Umrechnung.
|
||||
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 2 – Native iOS-App (SwiftUI)
|
||||
## 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 → speichern.
|
||||
- Auslagern-Flow: scannen → Menge/Einheit (ganz oder Teilmenge g/l) → FEFO.
|
||||
- Einlagern-Flow: scannen → Lookup/Vorbefüllung → Menge + Einheit + MHD (mehrere Chargen).
|
||||
- Auslagern-Flow: scannen → Menge/Einheit, FEFO oder Chargenauswahl.
|
||||
- Einkaufsliste- und „bald ablaufend“-Ansicht.
|
||||
- Optional: unbekannte Produkte direkt in der App anlegen.
|
||||
- Produkte bei Bedarf direkt in der App anlegen.
|
||||
|
||||
## Schritt 3 – Fortgeschrittene Features
|
||||
- **Gruppen-Intelligenz:** Produkt beim Einlagern automatisch einer Gruppe zuordnen
|
||||
(Ableitung aus OFF-Kategorie), manuell korrigierbar.
|
||||
- **Mindestbestände auf Gruppen** (z. B. „Nudeln“ gesamt), nicht nur einzelne Produkte.
|
||||
(DB-Spalte `groups.min_stock` ist bereits vorbereitet.)
|
||||
- **Unterlagerorte** (Regal xy / Fach xy). (DB-Spalte `locations.parent_id` vorbereitet.)
|
||||
- **Einheiten-Umwandlung nachträglich** (Packung ↔ g/l) komfortabel in Web + App.
|
||||
- **Ablauf-Push-Benachrichtigungen** via APNs.
|
||||
- **Produktbilder** aus OFF anzeigen (Web + App) + lokaler Bild-Cache.
|
||||
- **Einkaufsliste verfeinern:** Mengenvorschläge, manuelle Ergänzungen, Abhaken/Erledigen.
|
||||
- **Bewegungsverlauf/Statistik** (wer/was wann ein-/ausgelagert) – Tabelle `movements`
|
||||
wird bereits befüllt, es fehlt nur die Ansicht.
|
||||
## 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.
|
||||
|
||||
Reference in New Issue
Block a user