# Bollwerk Inventar-App – Anforderungen

**Version:** 1.0  
**Datum:** 2026-05-13  
**Status:** Planung abgeschlossen, Umsetzung bereit

---

## 1. Projektziel

Eine native Android-App zur Verwaltung eines Bollwerks-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) – Bollwerk-Ä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_
