stadtwerke/SmartMeter_PRD.md

1263 lines
32 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.

# PRD: SmartMeter-Lite App
## Product Requirements Document - MVP Version
**Version:** 1.0
**Datum:** Februar 2026
**Status:** Final für Development
**Owner:** [PM Name]
**Stakeholder:** Stadtwerke, Endkunden, Support-Teams
---
## 1. EXECUTIVE SUMMARY
### Vision
Digitalisierung der Zählerablesung für deutsche Stadtwerke durch eine einfache, mobile App. Ziel: Manuelle Ablesungsprozesse automatisieren, Fehlerquote von 30-40% auf <5% reduzieren, und Support-Anfragen zu Abrechnungsfehlern um 70% senken.
### Problem Statement
Stadtwerke basieren aktuell auf **manueller, fehlerhafter Zählerablesung**:
- 📊 **30-40% Fehlerquote** bei manuellen Eingaben
- 📞 **50+ Anrufe/Woche** zu Abrechnungskorrektionen
- 💰 **5-10 Millionen EUR/Jahr** Verarbeitungskosten
- 😞 **Customer Dissatisfaction:** 45% Unzufriedenheit mit Abrechnungsprozess
### Solution
**SmartMeter-Lite:** Eine mobile App, die es Kunden erlaubt, ihren Stromzähler zu fotografieren. OCR-Technologie liest automatisch die Zahl aus, validiert sie, und sendet sie direkt an die Stadtwerk-Abrechnungssysteme.
### Expected Outcomes (Year 1)
- **<5% Fehlerquote** (vs. 30-40% aktuell)
- **70% weniger Support-Anfragen** zu Abrechnungen
- **40% Cost Savings** im Ablese-Prozess
- **80% Kundenakzeptanz** nach 6 Monaten
- **+50 NPS** Verbesserung
### Market Opportunity
- **TAM:** 900+ Stadtwerke in Deutschland
- **SAM:** Top 100 Stadtwerke (60% Markt)
- **SOM Year 1:** 10-15 Stadtwerke = **€800k - 1.2M ARR**
- **SOM Year 2:** 30-40 Stadtwerke = **€2.4M - 4.8M ARR**
### Business Model
**B2B SaaS:**
- **Small Stadtwerke:** 1.000 - 3.000/Monat
- **Medium Stadtwerke:** 3.000 - 8.000/Monat
- **Large Stadtwerke:** 8.000 - 20.000/Monat
- **Per-Scan Pricing (optional):** 0.05 - 0.15 pro Ablesung
---
## 2. USER PERSONAS
### Persona 1: Anna Müller (B2C - Endkundin)
**Alter:** 42
**Job:** IT-Projektmanagerin
**Tech-Affinity:** Hoch
**Probleme:**
- Vergisst regelmäßig Zählerablesung (Deadline jeweils 15. des Monats)
- Hatte schon 2x Abrechnungskorrektionen (Stress, Telefonieren)
- Wünscht sich digitale Lösung
**Needs:**
- Einfach Foto machen, fertig
- Bestätigung, dass Ablesung ankam
- Keine technischen Fehler
- Ablauf in <2 Minuten
**Motivation für Nutzung:**
- Zeitersparnis (10 Min Telefonat vermeiden)
- Sicherheit (Beweis, dass korrekt abgelesen)
- Convenience (von zuhause, am Wochenende)
---
### Persona 2: Klaus Schmidt (B2B - Stadtwerk IT-Manager)
**Alter:** 55
**Job:** IT-Leiter bei großer Stadtwerk (100k+ Kunden)
**Tech-Affinity:** Mittel
**Probleme:**
- Support-Team bekommt täglich 50-100 Anfragen zu Abrechnungen
- Manuelle Ablesungen führen zu Datenfehlern in SAP-System
- Keine Digitalisierung im Ablese-Prozess
**Needs:**
- Integration mit SAP/Oracle Abrechnungssystem
- Admin-Dashboard zur Überwachung
- Fehlerbehandlung (was wenn OCR falsch liest?)
- Datenqualitäts-Reports
- DSGVO Compliance
**Motivation für Nutzung:**
- ROI in <18 Monaten
- Weniger Support-Tickets
- Bessere Datenqualität
- Wettbewerbsfähigkeit
---
### Persona 3: Hans Schneider (B2B - Kundenservice Manager)
**Alter:** 38
**Job:** Head of Customer Service bei Medium Stadtwerk (50k Kunden)
**Tech-Affinity:** Mittel-niedrig
**Probleme:**
- Team muss täglich 100+ falsche Ablesungen korrigieren
- Customer Satisfaction score: 3.2/5 (zu niedrig)
- Keine Automatisierung möglich mit aktuellen Prozessen
**Needs:**
- Einfach zu bedienende Software (nur Clicks, kein Coding)
- Klare Reports (wie viele Ablesungen/Woche?)
- Training für Support-Team
- Schneller Kundenservice (FAQ, Video-Tutorials)
**Motivation für Nutzung:**
- Team-Entlastung
- Bessere Customer Satisfaction
- Kostenersparnis (weniger Korrektionen)
- Moderne Arbeitsprozesse
---
## 3. USE CASES
### Use Case 1: Normale Ablesung (Happy Path)
**Akteur:** Anna Müller (Endkundin)
**Trigger:** Abrechnungs-Deadline erreicht (15. des Monats)
**Ablauf:**
```
1. Anna öffnet SmartMeter App auf ihrem Smartphone
2. Sie wählt "Neue Ablesung"
3. App öffnet Kamera, zeigt "Frame Guide" (Zähler-Umriss)
4. Anna fotografiert ihren Stromzähler (sechs Ziffern sichtbar)
5. App zeigt OCR-Ergebnis: "128456" mit 96% Confidence
6. Anna bestätigt oder korrigiert die Zahl
7. App speichert die Ablesung, zeigt "✅ Erfolgreich gesendet"
8. Ablesung wird in Echzeit an Stadtwerk-Backend übertragen
9. Stadtwerk bestätigt Receipt per SMS/E-Mail
```
**Erwartetes Ergebnis:**
- Ablesung korrekt im Stadtwerk-System
- Anna erhält Bestätigung
- Keine manuelle Bearbeitung nötig
- Keine Support-Anfrage
---
### Use Case 2: OCR-Fehler (Alternate Path)
**Akteur:** Klaus Mueller (Endkunde mit älterem Zähler)
**Trigger:** Zähler ist dunkel, schlecht lesbar
**Ablauf:**
```
1. Klaus fotografiert seinen alten, schmuddeligen Zähler
2. OCR liest: "12345X" (X statt 6, 60% Confidence - LOW)
3. App zeigt Warning: "Unsicher. Bitte überprüfen oder neu fotografieren"
4. Klaus sieht das rote Warning-Symbol
5. Er fotografiert nochmal, besser fokussiert
6. Dieses Mal: "123456" mit 98% Confidence
7. Klaus bestätigt
8. App speichert, zeigt: "✅ Erfolgreich gesendet"
```
**Erwartetes Ergebnis:**
- Fehler werden NICHT ans Backend gesendet
- User wird informiert und kann korrigieren
- Keine falschen Daten im System
---
### Use Case 3: Admin Dashboard (B2B)
**Akteur:** Klaus Schmidt (Stadtwerk IT-Manager)
**Trigger:** Morgens zur Arbeit, checkt Status
**Ablauf:**
```
1. Klaus loggt sich ins Admin Dashboard ein
2. Er sieht Übersicht:
- 847 Ablesungen diese Woche
- 834 erfolgreich (98.5%)
- 13 fehlgeschlagen (1.5%) - mit Reasons
- Average Confidence Score: 96.2%
3. Er klickt auf "Failed Ablesungen"
4. Er sieht: 8 × "Low Quality Photo", 5 × "Invalid Format"
5. Er exported den Report als CSV für SAP
6. Er sieht Alert: "3 Customers haben >3 Fehlerversuche"
7. Er klickt auf die Kunden → sieht ihre Fehlerbilder
8. Er sendet Kunden eine Email: "Bitte wie folgt fotografieren..."
```
**Erwartetes Ergebnis:**
- Klaus sieht Qualitätsmetriken in Echtzeit
- Fehler werden identifiziert, bevor sie zu Problems werden
- Pro-aktive Kundenunterstützung möglich
---
### Use Case 4: Integration mit SAP (B2B Backend)
**Akteur:** SAP-System der Stadtwerk
**Trigger:** Ablesung wird in SmartMeter-App bestätigt
**Ablauf:**
```
1. User submitted Ablesung in App
2. SmartMeter Backend validates:
- Format korrekt? ✅
- Plausibility Check? (Z.B. nicht 50% mehr als letzte Ablesung)
- Duplicate Check? (Wurde heute schon abgelesen?)
3. SmartMeter sendet REST API Call zu Stadtwerk SAP:
POST /api/readings
{
"customer_id": "SW12345",
"reading": 128456,
"timestamp": "2026-02-17T14:32:00Z",
"confidence": 0.96,
"photo_hash": "abc123def456"
}
4. SAP antwortet: {"status": "success", "reading_id": "RD987654"}
5. SmartMeter speichert Reading ID lokal
6. App zeigt Kunde: "✅ Ablesung erfolgreich übertragen"
7. SAP triggert automatische Rechnungsberechnung
8. Keine manuelle Bearbeitung nötig
```
**Erwartetes Ergebnis:**
- Daten sind in Echtzeit im SAP-System
- Rechnungsprozess startet sofort
- Keine Verzögerungen durch manuelle Prozesse
---
## 4. FEATURES - MVP (PHASE 1)
### 4.1 Mobile App Features (iOS + Android)
#### Feature 1.1: Authentication & Onboarding
**Priority:** CRITICAL
**Effort:** M (Medium)
```
- Sign Up: Email/Passwort oder SMS OTP
- Login: Standard Email/Passwort
- "Kundendaten Import": Stadtwerk importiert Kundenlisten
→ App kann automatisch Kunden-ID vorausfüllen
- 2FA (optional): SMS-Bestätigung
- Biometric: Fingerprint / Face ID support
- Session Management: Auto-logout nach 15 Min Inaktivität
```
**Success Criteria:**
- Sign-Up in <2 Minuten
- 95%+ erfolgreiche Logins
- <30 Sekunden Login-Zeit
---
#### Feature 1.2: Camera & Photo Capture
**Priority:** CRITICAL
**Effort:** M-L
```
- Live Camera Preview mit Frame Guide
→ Zeigt Umriss des Zählers als Overlay
→ Hilft User, korrekt zu fotografieren
→ "Zähler muss in diesem Rahmen sein"
- Auto-Capture Option:
→ App fotografiert automatisch, wenn Zähler erkannt
→ Oder manueller Knopf "Foto machen"
- Flash Control:
→ Auto-Flash für dunkle Umgebungen
→ Manual Flash Adjustment möglich
- Photo Quality Check:
→ Vor Upload: Ist Foto scharf genug?
→ Ist Zähler vollständig sichtbar?
→ Wenn nicht: "Bitte besseres Foto machen"
- Multiple Captures:
→ User kann 3-5 Fotos machen, beste wählen
→ App zeigt auto-selected bestes Foto
```
**Success Criteria:**
- >95% Fotos sind verwertbar
-<5% müssen erneut fotografiert werden
- Average Photo Quality Score: >90/100
---
#### Feature 1.3: OCR & Digit Recognition
**Priority:** CRITICAL
**Effort:** L (Large)
```
TECHNOLOGY OPTION A: Google Vision API (Recommended)
- Best Accuracy (97%+)
- Schnell (500ms)
- Kostet ca. €0.01 pro Request
- Einfache Integration via REST API
TECHNOLOGY OPTION B: Tesseract (Open Source)
- Kostenlos
- 85-90% Accuracy
- Langsamer (2-3s)
- Braucht Local Processing
TECHNOLOGY OPTION C: TensorFlow Lite Model (Custom)
- Medium Accuracy (88-92%)
- Schnell (300ms)
- Offline möglich
- Braucht Training Data (100+ Meter Fotos)
RECOMMENDATION: Option A (Google Vision) für MVP
Later: Option C für Kosteneinsparungen
FEATURES:
- Automatic OCR nach Foto-Upload
- Confidence Score anzeigen (Z.B. "96% sicher")
- Zeige alternatives interpretations wenn <90% Confidence
Z.B.: "Könnte auch sein: 128455 (87%)"
- Digit-by-Digit Verification möglich
- Auto-correct häufige Fehler:
→ "O" als "0" erkennen
→ "l" als "1" erkennen
```
**Success Criteria:**
- ✅ >95% OCR Accuracy
-<1s OCR Response Time
- <0.5% False Positives
---
#### Feature 1.4: Manual Verification & Correction
**Priority:** CRITICAL
**Effort:** S (Small)
```
- Nach OCR: Zeige große, klare Digits zum Verifizieren
- User kann nach oben/unten swipen um Digit zu ändern
Z.B.: "1" → swipen-oben → "2" → swipen-unten → "1"
ODER: Tippen auf jede Ziffer → Numpad poppen up
- Confirmation Screen:
"Bitte bestätigen Sie die Ablesung:"
[Großes Display: 123456]
[Button: ✅ Bestätigt] [Button: ❌ Neu fotografieren]
- Fehlertoleranz:
Wenn User versucht "999999" einzugeben:
→ "Warnung: Dieses ist um 800% höher als letzte Ablesung"
→ "Bitte überprüfen oder Foto neu machen"
```
**Success Criteria:**
- >99% der Ablesungen sind korrekt nach Verification
-<5% Ablesungen müssen korrigiert werden
---
#### Feature 1.5: Submission & Confirmation
**Priority:** CRITICAL
**Effort:** M
```
- Upload Status:
Zeige Progress Bar während Upload
"Sende Ablesung... 45%"
- Offline Support:
Wenn kein Internet: Queue die Ablesung lokal
"Wird bei nächster Verbindung hochgeladen"
- Success Confirmation:
"✅ Ablesung erfolgreich eingereicht!"
"Bestätigungs-ID: RD987654"
"Nächste Ablesung fällig: 15. März 2026"
- Notification:
Push Notification: "Ablesung akzeptiert"
Email: Ablesung + Bestätigungs-ID
SMS (optional): "Ablesung erhalten"
- History:
Alle bisherigen Ablesungen anzeigen:
"15. Feb 2026: 128456 ✅"
"15. Jan 2026: 127812 ✅"
Mit Links zu PDFs/Fotos
```
**Success Criteria:**
- >99% Uptime während Submission
-<2s Submission Response Time
- >95% Confirmations kommen an
---
#### Feature 1.6: User Dashboard
**Priority:** HIGH
**Effort:** M
```
- Home Screen:
"Aktuelle Ablesung: 128456 (15. Feb 2026)"
"Nächste Ablesung fällig: 15. März 2026" (5 Tage)
[Big Button: "Jetzt Ablesen"]
- History Tab:
Liste aller Ablesungen:
"15. Feb 2026 - 128456 ✅"
"15. Jan 2026 - 127812 ✅"
Mit: Foto, Zeitstempel, Status
- Alerts Tab:
"Warnung: Ablesung 3 Tage überfällig!"
"Info: Neue Version verfügbar"
- Settings Tab:
- Notifications (push, email, SMS)
- Sprache (Deutsch, Englisch)
- Account Management (Profil, Passwort)
- About & Help
- Logout
- Help & FAQ:
"Wie fotografiere ich richtig?"
→ Video Tutorial (30s)
"Mein Foto wird nicht erkannt"
→ Troubleshooting Guide
"Wann ist die nächste Ablesung fällig?"
→ FAQ
```
**Success Criteria:**
- ✅ >80% Users nutzen App min. 1x/Monat
-<3 Taps um Ablesung zu machen
- NPS >50
---
### 4.2 Admin Dashboard Features (Web - Für Stadtwerke)
#### Feature 2.1: Authentication & Authorization
**Priority:** CRITICAL
**Effort:** S
```
- Login: Email/Passwort (Standard)
- 2FA: Mandatory für Admin Accounts
- Role-Based Access Control:
- Super Admin: Full Access
- Manager: Reports, Alerts, antwort auf Fehler
- Analyst: Read-Only
- Support: Kundensuche, Fehlerbehandlung
- Session Management:
Auto-logout nach 30 Min Inaktivität (Enterprise Standard)
```
---
#### Feature 2.2: Real-Time Dashboard
**Priority:** CRITICAL
**Effort:** L
```
MAIN DASHBOARD WIDGETS:
1. Today's Metrics:
- "847 Ablesungen heute"
- "823 erfolgreich (97.2%)"
- "24 fehlgeschlagen (2.8%)"
- "96.1% Average Confidence"
2. Trend Chart (7-Day):
- Liniendiagramm: Ablesungen pro Tag
- Durchschnittliche Erfolgsrate
- Average Confidence über Zeit
3. Top Issues (This Week):
- "13 × Zähler nicht lesbar (Low light)"
- "8 × Ungültige Format"
- "7 × User Error (falsche Zahl eingegeben)"
4. Recent Submissions:
Live Feed:
"14:32 - Kunde XYZ - 128456 ✅"
"14:28 - Kunde ABC - 127812 ✅"
"14:25 - Kunde DEF - Error (Low confidence 41%) ❌"
5. Alerts & Notifications:
- "3 Customers haben >3 Fehlerversuche"
- "System Response Time >2s" (Performance Alert)
- "Neue App Version verfügbar"
REFRESH RATE: Real-time (WebSocket connection)
```
**Success Criteria:**
- ✅ Dashboard loads in <2s
- Real-time updates <500ms delay
- 99.9% uptime
---
#### Feature 2.3: Detailed Analytics & Reports
**Priority:** HIGH
**Effort:** M
```
REPORT TYPES:
1. Daily Summary Report:
- Datum
- Total Submissions
- Erfolgsrate (%)
- Avg Confidence Score
- Errors by Category
- Cost Calculation (EUR saved vs. manual)
2. Customer-Level Report:
- Filter by: Alter, Region, Stadtwerke
- Details:
* Anzahl Ablesungen
* Success Rate
* Average Confidence
* Last Reading (Date + Value)
- Download: CSV, PDF
3. Error Analysis Report:
- Fehlertypen:
* Low Quality Photo (%)
* Invalid Format (%)
* OCR Failure (%)
* User Error (%)
- Time Series: Fehler über Zeit
4. Performance Report:
- Response Time (average, min, max)
- Uptime (%)
- API Availability
- Subscription Usage
5. Compliance Report (DSGVO):
- Data Processing Log
- Audit Trail
- User Activity Log
EXPORT OPTIONS: CSV, PDF, Excel, Email
SCHEDULING: Daily, Weekly, Monthly Reports
```
**Success Criteria:**
- Reports generieren in <10s
- >90% Accuracy of reported numbers
---
#### Feature 2.4: Customer Management
**Priority:** HIGH
**Effort:** M
```
- Customer Search:
Suche by: Name, Customer ID, Email, Telefon
- Customer Details:
- Name, Adresse, Kontakt
- Current Reading + History
- Success Rate
- Errors (Foto + Reason)
- Contact History
- Bulk Import:
Upload CSV:
customer_id, name, email, phone, address
→ System importiert und sendet Invitation
- Customer Deactivation:
Kunde kann sich abmelden
Admin kann deactivieren (Z.B. umgezogen)
- Resend Invitation:
Falls Kunde App nicht installiert hat
→ Admin kann Invitation Email/SMS erneut senden
```
---
#### Feature 2.5: Error Management & Troubleshooting
**Priority:** CRITICAL
**Effort:** M
```
- Failed Submissions Detailed View:
Click on Error → Zeige:
- Foto (Thumbnail + Full View)
- OCR Result + Confidence Score
- User's Correction (falls vorhanden)
- Error Category: [Low Quality] [Invalid] [OCR Error]
- Customer Contact Info
- Automated Responses:
Admin kann automatische Messages schreiben:
"Lieber Kunde, Ihr Zähler war nicht lesbar"
"Bitte fotografieren Sie wie folgt:"
[Link zu Video Tutorial]
- Manual Intervention:
Admin kann:
- Reading manuell akzeptieren (mit Notiz)
- Reading ablehnen + Kunde kontaktieren
- Foto im System ersetzten
- Error Categories:
Auto-Tagging nach AI (später):
- "Low Light" (60% Confidence)
- "Angle Wrong" (Invalid Format)
- "Meter Dirty" (Low Quality)
- "User Typo" (Plausibility Check Failed)
```
**Success Criteria:**
- ✅ Errors werden in <1h erkannt und handelt
- Support kann Fehler in <2 Min beheben
---
#### Feature 2.6: User Management & Permissions
**Priority:** HIGH
**Effort:** S
```
- Add/Remove/Edit Users:
- Email
- Role: [Super Admin] [Manager] [Analyst] [Support]
- Permissions by Role
- Activation/Deactivation
- Audit Log:
Wer hat was wann gemacht:
"Admin XYZ hat User ABC gelöscht (17.02.2026 14:23)"
"Manager DEF hat Reading manuell akzeptiert (RD987654)"
- Activity Report:
- Logins (Zeit, IP)
- Actions (What, When, Who)
- Data Export
```
---
#### Feature 2.7: Integration & API
**Priority:** CRITICAL
**Effort:** L
```
API INTEGRATION with Stadtwerk's SAP/ERP:
1. REST API Endpoints:
POST /api/v1/readings - Submit reading
GET /api/v1/readings/{id} - Get reading details
GET /api/v1/customers/{id} - Get customer info
GET /api/v1/reports/daily - Daily report data
2. Authentication:
OAuth 2.0 Token-based
API Keys for System-to-System
3. Data Format:
{
"customer_id": "SW12345",
"reading": 128456,
"timestamp": "2026-02-17T14:32:00Z",
"confidence": 0.96,
"photo_hash": "abc123def456"
}
4. Callback Webhooks:
Stadtwerk kann subscribe zu:
- new_reading_submitted
- reading_failed
- customer_error
Wir senden: POST to /webhook/readings
5. Rate Limiting:
- 10,000 requests/hour (default)
- Higher tiers: 50,000 /hour
6. Documentation:
Full Swagger/OpenAPI docs
Code Examples (Python, Node.js, Java)
```
---
## 5. TECH STACK - MVP
### 5.1 Mobile App (iOS + Android)
```
Framework: React Native / Flutter
Language: TypeScript / Dart
State Management: Redux Toolkit / Provider
API Client: Axios / http
Camera: react-native-camera / Camera2
OCR Integration: Google Vision API SDK
Storage: AsyncStorage / Realm DB (local caching)
UI Library: React Native Paper / Material 3
Push Notifications: Firebase Cloud Messaging
Testing: Jest + Detox (E2E)
CI/CD: GitHub Actions / EAS Build
```
### 5.2 Backend (API Server)
```
Language: Node.js + TypeScript (Recommended)
Framework: Express.js / Fastify
Database: PostgreSQL 13+
Cache: Redis (Session Cache, Rate Limiting)
Storage: AWS S3 / Azure Blob (for photos)
Authentication: JWT + OAuth2
API Gateway: Kong / AWS API Gateway
Message Queue: RabbitMQ (for async processing)
Logging: Winston / Pino
Monitoring: Prometheus + Grafana
Testing: Jest + Supertest
```
### 5.3 OCR Service
```
Primary: Google Vision API (REST-based)
Fallback: Tesseract.js (Web-based)
Alternative: TensorFlow Lite (Custom Model)
OCR Confidence Threshold:
- >90%: Accept automatically
- 70-90%: Show to user for confirmation
- <70%: Reject + ask for new photo
```
### 5.4 Admin Dashboard
```
Frontend: React 18+
Language: TypeScript
UI Library: Material-UI / TailwindCSS
Charts: Recharts / Chart.js
State Management: Redux Toolkit / TanStack Query
Testing: Jest + React Testing Library
Build: Vite / Create React App
Deployment: Vercel / Netlify
```
### 5.5 Infrastructure
```
Cloud Provider: AWS (or Azure/GCP)
Containerization: Docker
Orchestration: Kubernetes (EKS) / or Lambda
Database Hosting: RDS PostgreSQL
File Storage: S3
CDN: CloudFront
Monitoring: CloudWatch / DataDog
Security: WAF, SSL/TLS, VPC
```
---
## 6. DATA MODELS
### 6.1 Customer
```json
{
"id": "uuid",
"customerNumber": "SW123456",
"email": "anna@example.com",
"phone": "+49123456789",
"firstName": "Anna",
"lastName": "Müller",
"address": "Beispielstr. 42, 69120 Heidelberg",
"postalCode": "69120",
"city": "Heidelberg",
"stadtwerkeId": "uuid",
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-02-17T14:22:00Z",
"status": "active" | "inactive" | "deleted"
}
```
### 6.2 Meter
```json
{
"id": "uuid",
"customerId": "uuid",
"meterNumber": "MTR987654",
"meterType": "electricity" | "gas" | "water",
"manufacturer": "Siemens",
"installDate": "2020-06-01",
"location": "Wohnzimmer",
"readingInterval": "monthly" | "quarterly",
"nextReadingDue": "2026-03-15",
"currentReading": 128456,
"lastReading": 127812,
"lastReadingDate": "2026-02-15T14:32:00Z",
"createdAt": "2020-06-01T00:00:00Z"
}
```
### 6.3 Reading (Ablesung)
```json
{
"id": "uuid",
"readingNumber": "RD987654",
"customerId": "uuid",
"meterId": "uuid",
"submittedValue": 128456,
"ocrResult": "128456",
"ocrConfidence": 0.96,
"manualCorrection": null,
"photoUrl": "s3://bucket/photos/RD987654.jpg",
"photoHash": "abc123def456",
"status": "success" | "pending_review" | "rejected" | "manual_approved",
"validationStatus": "valid" | "invalid" | "plausibility_warning",
"validationErrors": [],
"previousReading": 127812,
"previousReadingDate": "2026-02-15T00:00:00Z",
"submittedAt": "2026-02-17T14:32:00Z",
"processedAt": "2026-02-17T14:32:05Z",
"sentToSAPAt": null,
"sapReadingId": null,
"staffNotes": null
}
```
### 6.4 Error Log
```json
{
"id": "uuid",
"readingId": "uuid",
"customerId": "uuid",
"errorType": "low_confidence" | "invalid_format" | "plausibility_check" | "system_error",
"errorMessage": "OCR Confidence 41% below threshold 70%",
"severity": "info" | "warning" | "error",
"resolution": "ask_for_new_photo" | "manual_review" | "accepted_with_warning",
"resolvedAt": "2026-02-17T14:35:00Z",
"createdAt": "2026-02-17T14:32:10Z"
}
```
---
## 7. API SPECIFICATIONS
### 7.1 Mobile App → Backend
#### Endpoint: POST /api/v1/readings/submit
**Request:**
```json
{
"customerId": "uuid",
"meterId": "uuid",
"photoUrl": "data:image/jpeg;base64,...",
"submittedValue": 128456,
"latitude": 49.1234,
"longitude": 8.5678,
"appVersion": "1.0.5",
"timestamp": "2026-02-17T14:32:00Z"
}
```
**Response (Success):**
```json
{
"status": "success",
"readingId": "RD987654",
"message": "Ablesung erfolgreich eingereicht",
"nextReadingDue": "2026-03-15",
"confirmation": {
"email": true,
"sms": true
}
}
```
**Response (Error):**
```json
{
"status": "error",
"readingId": "RD987654",
"message": "OCR Confidence zu niedrig (41%)",
"suggestion": "Bitte neu fotografieren",
"suggestions": [
{
"value": 123456,
"confidence": 0.67
},
{
"value": 128456,
"confidence": 0.41
}
]
}
```
#### Endpoint: GET /api/v1/readings/history
**Request:**
```json
{
"customerId": "uuid",
"limit": 10,
"offset": 0
}
```
**Response:**
```json
{
"readings": [
{
"id": "RD987654",
"value": 128456,
"date": "2026-02-15",
"status": "success",
"photoUrl": "https://..."
}
],
"total": 24,
"hasMore": true
}
```
### 7.2 Backend → Stadtwerk SAP
#### Endpoint: POST /api/v1/readings/sync-to-sap
**Internal Queue Job:**
```json
{
"readingId": "uuid",
"customerId": "SW123456",
"meterNumber": "MTR987654",
"readingValue": 128456,
"readingDate": "2026-02-15",
"ocrConfidence": 0.96,
"source": "smartmeter_app"
}
```
**SAP Response:**
```json
{
"status": "success",
"sapReadingId": "SAP-RD-2026-0987654",
"invoiceGenerated": true,
"invoiceNumber": "INV-2026-123456"
}
```
---
## 8. SECURITY & COMPLIANCE
### 8.1 DSGVO (GDPR) Compliance
```
✅ Privacy by Design:
- Minimize data collection
- Only collect: Name, Email, Phone, Address
- NO unnecessary tracking
✅ Data Retention:
- Photos: Delete after 90 days
- Readings: Keep 7 years (legal requirement)
- Logs: Delete after 30 days
✅ User Rights:
- Right to Export: Full data download as PDF/CSV
- Right to Delete: GDPR-compliant deletion workflow
- Right to Rectification: Edit own data
✅ Consent Management:
- Explicit opt-in for marketing emails
- Easy opt-out button
- Consent logging in DB
✅ Third-Party Processors:
- Google Vision API: DPA signed
- AWS: DPA signed
- List all Subprocessors on website
```
### 8.2 Data Security
```
✅ Encryption:
- TLS 1.3 for all data in transit
- AES-256 for data at rest (S3)
- Database encryption enabled
✅ Authentication:
- Passwords: bcrypt (12 rounds)
- Sessions: JWT with 24h expiry
- Admin: Require 2FA (TOTP)
- Biometric: Support Touch/Face ID
✅ API Security:
- Rate Limiting: 1000 req/min per IP
- CORS: Whitelist origin domains
- Input Validation: Sanitize all inputs
- SQL Injection Prevention: Use Parameterized Queries
✅ Photo Security:
- Photos stored in S3 with ACL
- Signed URLs expire after 24h
- Photos never logged to any logs
- Hash comparison for integrity
```
### 8.3 Penetration Testing & Audits
```
- Security Audit: Monthly (Internal)
- Penetration Testing: Quarterly (External)
- Bug Bounty Program: Available
- Vulnerability Disclosure: responsible-disclosure@smartmeter.app
```
---
## 9. SUCCESS METRICS & KPIs
### 9.1 Product Metrics
| Metrik | Target (6M) | Target (12M) | Measurement |
|--------|------------|-------------|-------------|
| **App Install Rate** | 30% of users | 60% of users | App Store Analytics |
| **Monthly Active Users (MAU)** | 40% of customers | 70% of customers | App Backend Logs |
| **Successful Readings/Month** | 95%+ success rate | 97%+ success rate | Dashboard KPI |
| **Average Time to Submit** | <3 min | <2 min | User Session Logs |
| **OCR Accuracy** | 95%+ | 97%+ | Test Dataset |
| **App Crash Rate** | <0.1% | <0.05% | Crash Analytics |
| **NPS Score** | >40 | >50 | Monthly Survey |
### 9.2 Business Metrics
| Metrik | Target (12M) | Measurement |
|--------|------------|-------------|
| **Customers Acquired** | 10-15 Stadtwerke | Sales Pipeline |
| **Annual Recurring Revenue (ARR)** | €800k - €1.2M | Finance |
| **Customer Retention Rate** | >90% | Churn Analysis |
| **Customer Satisfaction (CSAT)** | >80% | Survey |
| **Cost per User** | <€2 | Cost Analytics |
### 9.3 Operational Metrics
| Metrik | Target | Measurement |
|--------|--------|-------------|
| **System Uptime** | 99.9% | Monitoring (Datadog) |
| **Average Response Time** | <500ms | APM Tools |
| **OCR Processing Time** | <1s | Backend Logs |
| **API Error Rate** | <0.1% | API Monitoring |
| **Database Query Time** | <100ms | Query Logs |
---
## 10. TIMELINE & MILESTONES
### Phase 1: Foundation (Week 1-2)
- [ ] Team Setup & Onboarding
- [ ] Development Environment Setup
- [ ] Database & API Schema Design
- [ ] UI/UX Design Finalization (Figma)
### Phase 2: MVP Development (Week 3-8)
**Sprint 1-2 (Week 3-4): Backend Foundation**
- [ ] Project Setup (Node.js, Express, PostgreSQL)
- [ ] Authentication API (Sign Up, Login, 2FA)
- [ ] Database Migrations
- [ ] CI/CD Pipeline Setup
**Sprint 2-3 (Week 5-6): Mobile App**
- [ ] React Native Project Setup
- [ ] Camera Integration
- [ ] Photo Upload Flow
- [ ] Basic UI Implementation
**Sprint 3-4 (Week 7-8): OCR Integration**
- [ ] Google Vision API Integration
- [ ] OCR Pipeline (Photo Digits)
- [ ] Confidence Scoring
- [ ] Error Handling
**Sprint 4 (Week 8): Submission & Dashboard**
- [ ] Submission Workflow
- [ ] Confirmation Emails/SMS
- [ ] Basic Admin Dashboard
- [ ] Reading History
### Phase 3: Testing & Optimization (Week 9-10)
- [ ] Unit Tests (Backend + Frontend)
- [ ] Integration Tests
- [ ] E2E Tests
- [ ] Performance Optimization
### Phase 4: Pre-Launch (Week 11-12)
- [ ] Beta Testing (5-10 Kunden)
- [ ] Feedback Collection
- [ ] Bug Fixes
- [ ] Production Deployment
### Phase 5: Launch & Support (Week 13+)
- [ ] Official Launch
- [ ] Support & Monitoring
- [ ] Customer Onboarding
- [ ] Iteration & Improvements
---
## 11. RISKS & MITIGATION
| Risiko | Wahrscheinlichkeit | Impact | Mitigation |
|--------|------------------|--------|-----------|
| **OCR Accuracy niedrig** | Medium | Hoch | Testing mit 100+ Meter-Fotos, Google Vision ist 97%+ |
| **SAP Integration komplex** | Medium | Hoch | Early Integration Testing, Dedicated Integration Engineer |
| **Mobile Adoption schwach** | Low | Mittel | Good UX Design, Video Tutorials, SMS Reminders |
| **Performance Issues** | Low | Mittel | Load Testing, Caching Strategy, Database Indexing |
| **Security Vulnerabilities** | Low | Hoch | Penetration Testing, Code Reviews, Security Audits |
| **Compliance Issues (DSGVO)** | Low | Hoch | Legal Review Early, Privacy-by-Design, Audit Trail |
---
## 12. ROLLOUT STRATEGY
### Phase A: Beta Phase (Week 13-16)
- **Customers:** 3-5 Small Stadtwerke
- **Users:** 500-1000 Endkunden
- **Goal:** Validate product-market-fit, gather feedback
- **Success Criteria:**
- NPS >40
- OCR Success Rate >95%
- <1 Critical Bug
### Phase B: Soft Launch (Week 17-20)
- **Customers:** 10-15 Small-to-Medium Stadtwerke
- **Users:** 5.000-10.000 Endkunden
- **Goal:** Prove business model, improve onboarding
- **Success Criteria:**
- NPS >45
- Monthly Churn <5%
- Customer Satisfaction >75%
### Phase C: General Availability (Month 6+)
- **Customers:** 20-30 Stadtwerke (Mix small/large)
- **Users:** 50.000+ Endkunden
- **Goal:** Scale to profitability
- **Success Criteria:**
- NPS >50
- Monthly Churn <3%
- ARR >€1M
---
## 13. RESOURCE REQUIREMENTS (MVP)
### Team Size: 7-9 Personen (6 Monate)
| Role | Seniority | FTE | Responsibilities |
|------|-----------|-----|------------------|
| Product Manager | Mid | 1.0 | PRD, Roadmap, Prioritization |
| Tech Lead / CTO | Senior | 1.0 | Architecture, Tech Decisions, Code Quality |
| Backend Lead | Senior | 1.0 | API Design, Database, Integration |
| Backend Developer | Mid | 1.0 | Backend Feature Development |
| React Native Developer | Mid | 1.0 | Mobile App Development |
| Frontend Developer | Junior | 1.0 | Dashboard Frontend |
| DevOps / Infrastructure | Mid | 0.5 | CI/CD, Deployment, Monitoring |
| QA / Tester | Mid | 0.5 | Testing, Bug Reports |
| **Total** | | **7.5** | |
### Budget (6 Monate MVP)
| Category | Cost |
|----------|------|
| **Salaries (7.5 FTE × €8k/month avg)** | €360.000 |
| **Infrastructure (AWS, Google API)** | €15.000 |
| **Tools (IDE, Figma, Jira, Slack)** | €8.000 |
| **Contingency (10%)** | €38.300 |
| **Total** | **€421.300** |
*Rounded to **€420-450k*** für MVP-Entwicklung
---
## 14. SUCCESS DEFINITION
### Minimum Viable Product (MVP) Success
- ✅ App funktioniert auf iOS + Android
- ✅ OCR Accuracy >95%
- ✅ 3+ Stadtwerke haben erfolgreich abgelesen (100+ Readings)
- ✅ System uptime: 99.5%
- ✅ NPS >40 in Beta
- ✅ Zero critical bugs
- ✅ DSGVO-compliant
### Go-to-Market Success
- ✅ 10 Customers in Year 1
- ✅ 500+ Readings/Day durchschnittlich
- ✅ €800k - €1.2M ARR
-<5% Churn rate
- >40 NPS Score
---
## 15. APPENDIX: GLOSSARY
| Term | Definition |
|------|-----------|
| **OCR** | Optical Character Recognition - automatische Ziffernerkennung aus Fotos |
| **ARR** | Annual Recurring Revenue - jährliche wiederkehrende Einnahmen |
| **ACV** | Average Contract Value - durchschnittlicher Vertragswert |
| **MVP** | Minimum Viable Product - kleinste funktionsfähige Version |
| **NPS** | Net Promoter Score - Maß für Kundenloyal (0-100) |
| **DSGVO** | Datenschutz-Grundverordnung (GDPR) |
| **SAP** | ERP-System für Finanzbuchführung & Abrechnungen |
| **SaaS** | Software as a Service - Cloud-basiertes Softwaremodell |
| **Confidence Score** | Genauigkeit der OCR-Erkennung (0-100%) |
---
## 16. APPROVAL & SIGN-OFF
| Role | Name | Signature | Date |
|------|------|-----------|------|
| Product Manager | [Name] | __________ | ________ |
| Engineering Lead | [Name] | __________ | ________ |
| Business Lead | [Name] | __________ | ________ |
| Stakeholder | [Name] | __________ | ________ |
---
**Document Version:** 1.0
**Last Updated:** Februar 2026
**Next Review:** April 2026
**Status:** READY FOR DEVELOPMENT