bollwerk/Anforderungen/anforderungen-v1.md

163 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Krisenvorrat Inventar-App Anforderungen
**Version:** 1.0
**Datum:** 2026-05-13
**Status:** Planung abgeschlossen, Umsetzung bereit
---
## 1. Projektziel
Eine native Android-App zur Verwaltung eines Krisenvorrats-Inventars. Die App speichert alle Daten lokal als JSON und ermöglicht späteren Datenaustausch über einen REST-Server. Verteilung erfolgt via APK-Sideloading (kein Google Play Store) rein privater Gebrauch.
---
## 2. Technischer Stack
| Komponente | Technologie | Begründung |
| ------------------- | ---------------------------- | ------------------------------------------ |
| Sprache | Kotlin | Moderne Android-Standardsprache |
| UI | Jetpack Compose | Deklarativ, aktuelles Android-UI-Framework |
| Architektur | MVVM + Clean Architecture | Testbar, wartbar, klar getrennt |
| Persistenz | Room (SQLite) | Robuste lokale DB mit Coroutines-Support |
| DI | Hilt | Standard-DI für Android |
| Async | Kotlin Coroutines + Flow | Reaktive Datenströme |
| Datenexport/-import | JSON (kotlinx.serialization) | Strukturiert, KI-lesbar, portabel |
| Build | Gradle (Kotlin DSL) | Android-Standard |
| Verteilung | APK-Sideloading | Kein Store nötig, privater Gebrauch |
---
## 3. Datenaustausch (Phase 2 nicht in v1.0)
- REST-Server im Internet für Sync/Sharing zwischen Geräten
- Während Entwicklung: Server lokal auf Laptop, Testgerät im LAN
- Server-Technologie: noch zu entscheiden
---
## 4. Datenmodell (inventory.json)
```json
{
"meta": {
"version": "1.0",
"lastUpdated": "2026-05-13T00:00:00Z",
"persons": 4,
"kcalPerPersonPerDay": 2000
},
"categories": [
"Grundnahrungsmittel",
"Fette & Öle",
"Wasser & Aufbereitung",
"Kochen & Energie",
"Gesundheit & Hygiene",
"Werkzeuge",
"Kleidung",
"Sonstiges"
],
"locations": ["Keller", "Küche", "Garage", "Schlafzimmer", "Sonstiges"],
"items": [
{
"id": "uuid",
"name": "Weizen",
"category": "Grundnahrungsmittel",
"quantity": 200,
"unit": "kg",
"unitPrice": 0.8,
"totalPrice": 160.0,
"kcalPer100g": 340,
"expiryDate": "2028-01-01",
"location": "Keller",
"minStock": 50,
"notes": "",
"lastUpdated": "2026-05-13T00:00:00Z"
}
]
}
```
---
## 5. Funktionsumfang Version 1.0
### 5.1 Inventarverwaltung
- [ ] Artikel anlegen (Name, Kategorie, Menge, Einheit, Preis, Lagerort, Ablaufdatum, Mindestbestand)
- [ ] Artikel bearbeiten
- [ ] Artikel löschen
- [ ] Kategorien und Lagerorte verwalten
### 5.2 Übersichten & Analyse
- [ ] Gesamtübersicht nach Kategorie
- [ ] **Reichweitenrechner:** Automatische Berechnung wie lange Vorrat reicht (basierend auf Personenzahl + kcal/Tag)
- [ ] **Ablaufdaten-Warnung:** Was läuft in 6 / 12 Monaten ab?
- [ ] **Mindestbestand-Warnung:** Artikel unterhalb Mindestniveau (rot markiert)
- [ ] Gesamtwert des Vorrats
### 5.3 Datenhaltung
- [ ] **Room (SQLite) ist die einzige Datenquelle zur Laufzeit**
- [ ] Beim ersten Start: leere Datenbank, User erfasst Daten
- [ ] Alle Änderungen werden direkt in Room persistiert
- [ ] Reactive UI via Coroutines + Flow aus Room
### 5.4 Import / Export (JSON)
- [ ] **JSON-Export:** Gesamtes Inventar als JSON-Datei exportieren (via Share Intent / Datei speichern)
- [ ] **JSON-Import:** Inventar aus JSON-Datei laden (Restore / Datenübernahme), ersetzt oder merged bestehende Daten
- [ ] **Markdown-Export:** Inventar als Markdown-Text (Copy / Share für KI-Eingabe)
---
## 6. UI / UX
- **Plattform:** Native Android-App, optimiert für Smartphone (Touch)
- **Design:** Klar, funktional, industriell Material 3 Komponenten
- **Navigation:** Bottom Navigation Bar (Übersicht / Inventur / Warnungen / Einstellungen)
- **Eingabe:** Große Touch-Targets, Dropdown für Einheiten/Kategorien/Lagerorte
- **Farbschema:** Dark Theme (Dunkelgrün / Anthrazit) Krisenvorrat-Ästhetik, gut lesbar
---
## 7. Spätere Erweiterungen (nicht in v1.0)
- REST-Server für Datenaustausch/Sync zwischen Geräten
- Mehrbenutzer / Teilen des Inventars mit Freunden/Netzwerk
- Einkaufslisten-Funktion (automatisch aus Mindestbeständen generieren)
- Barcode-Scanner für schnelle Erfassung
- Foto-Anhänge pro Artikel
- Benachrichtigungen bei ablaufenden Artikeln
---
## 8. Einrichtung (einmalig)
1. APK-Datei herunterladen (via Link oder USB)
2. Auf Android-Gerät installieren (Sideloading, "Unbekannte Quellen" erlauben)
3. App starten, initialen Inventarstand erfassen
4. Fertig alle Änderungen werden lokal gespeichert
---
## 9. Sicherheit & Datenschutz
- Alle Daten liegen ausschließlich lokal auf dem Gerät (interner App-Speicher)
- Kein externer Server in v1.0, keine Telemetrie
- Keine Berechtigungen außer Dateizugriff für Import/Export
- Kein Tracking, keine Werbung
---
## 10. Entwicklungsumgebung
- **IDE:** VS Code mit Android-Extensions / Android Studio
- **Build:** Gradle (Kotlin DSL)
- **Test-Gerät:** Android-Smartphone (noch nicht für Entwicklung eingerichtet)
- **Deployment:** ADB über USB oder WLAN
- **CI:** GitHub Actions (assembleDebug + Unit Tests)
---
_Aktualisiert: 2026-05-13 Umstellung auf native Android-App_