32 KiB
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
{
"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
{
"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)
{
"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
{
"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:
{
"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):
{
"status": "success",
"readingId": "RD987654",
"message": "Ablesung erfolgreich eingereicht",
"nextReadingDue": "2026-03-15",
"confirmation": {
"email": true,
"sms": true
}
}
Response (Error):
{
"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:
{
"customerId": "uuid",
"limit": 10,
"offset": 0
}
Response:
{
"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:
{
"readingId": "uuid",
"customerId": "SW123456",
"meterNumber": "MTR987654",
"readingValue": 128456,
"readingDate": "2026-02-15",
"ocrConfidence": 0.96,
"source": "smartmeter_app"
}
SAP Response:
{
"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