bollwerk/Anforderungen/anforderungen-v1.md

165 lines
4.9 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.80,
"totalPrice": 160.00,
"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
- [ ] Beim Start: Lokale JSON-Datei laden (interner App-Speicher)
- [ ] Bei jeder Änderung: sofortiges Schreiben in lokale Datei
- [ ] Room (SQLite) als primäre Persistenzschicht
- [ ] JSON-Export/-Import für Backup und Datenaustausch
### 5.4 Export
- [ ] Markdown-Ansicht (zum Kopieren / für KI-Eingabe, via Share Intent)
- [ ] JSON-Export (Backup via Share Intent)
- [ ] JSON-Import (Restore aus Datei)
---
## 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*