Files
boc/QUIXZOOM_CAPTURE_FLOW.md
T
Bernt bae705aa97 ARCHITECTURE: NFC roadmap, edge AI, audit logging
- Add NFC ePassport roadmap (ICAO 9303, eIDAS)
- Add TensorFlow.js edge face detection (BlazeFace)
- Add structured audit logger (GDPR-compliant)
- Risk scoring support

Part of KYC Apple Native UX v1.1.0
2026-06-29 16:24:48 +00:00

210 lines
6.6 KiB
Markdown

# quiXzoom Capture Flow — Arkitekturspec
*Beslutad: 2026-06-17. Ägare: Erik Svensson.*
---
## Grundprincip
Användaren ska aldrig behöva gissa vad som är fel.
**Gammalt flöde (oacceptabelt):**
Ta bild → Vänta → Få avslag → Gissa → Ta ny bild
**quiXzoom-flödet:**
Rikta kamera → Följ instruktioner → Grönt ljus → Bild tas → Godkänd direkt
**KPI:** >90% av alla bilder godkänns vid första exponeringen.
---
## Flödets 7 steg
### Steg 1 — Uppdrag accepteras
Zoomer väljer uppdrag. Systemet laddar ett **Mission Context Package**:
```
{
mission_id, location, control_objects[], reference_images[],
capture_rules[], ai_knowledge_packs[], acceptance_criteria[]
}
```
Varje `control_object` är kopplat till ett AVO-kunskapspaket.
---
### Steg 2 — AI-styrt kameraläge (Live Guidance)
Istället för direkt kamera öppnas **Live Guidance Mode** — kontinuerlig analys av videoströmmen, ~10 fps.
**Realtidskontroller (alla måste vara ✅ för grönt läge):**
| Check | Fel-feedback |
|-------|-------------|
| Objekt hittat | "Rikta kameran mot [objekt]" |
| Rätt avstånd | "Flytta närmare" / "Backa 1 meter" |
| Rätt vinkel | "Vrid kameran åt höger" / "Höj kameran 15 cm" |
| Tillräckligt ljus | "För mörkt — sök bättre ljus" |
| Hela objektet synligt | "Objekt delvis utanför bild — backa lite" |
| Skärpa godkänd | "Håll kameran still" |
| Geo-match | "Du är inte vid rätt adress" |
**Teknisk implementation:**
- Klientsidig: TensorFlow Lite / CoreML på device (låg latens, offline-kapabel)
- Serversidig fallback för tyngre analyser (sprickor, OCR) vid bra uppkoppling
- Feedback-overlay i AR: grön ram = klar, röd + text = korrigering krävs
---
### Steg 3 — Grönt läge (Capture Ready)
När alla kriterier är uppfyllda:
```
🟢 Objekt verifierat
🟢 Bildkvalitet godkänd
🟢 Redo att fotografera
```
Kameran kan antingen:
- **Autoshoot** — tar bilden automatiskt vid 3 sek stabil grön status
- **Manual unlock** — låser upp avtryckaren, Zoomer tar bilden
Default: autoshoot. Konfigurerbart per uppdragstyp.
---
### Steg 4 — Parallell AI-analys
Efter exponering körs AVO-analyser parallellt (target: <3 sek):
```
┌─────────────────────────────────────────────┐
│ Image received │
├──────────────┬──────────────┬───────────────┤
│ AVO instance │ AVO instance │ AVO instance │
│ control_obj_1│ control_obj_2│ quality_check │
└──────────────┴──────────────┴───────────────┘
↓ ↓ ↓
└──────────────┴──────────────┘
Decision Engine
```
Varje AVO-instans kör mot sitt kunskapspaket och returnerar avvikelse-JSON.
Quality check är ett eget paket: blur, exposure, completeness.
---
### Steg 5 — Beslutsmotor
**GODKÄND:**
```
🟢 Uppdragets bildkrav uppfyllda
Bild accepterad. Fortsätt till nästa kontrollpunkt.
```
→ Bild sparas, geo-tagg + timestamp + device-ID loggas, betalningspipeline triggas.
**NEKAD** — AI måste alltid ge en konkret, handlingsbar anledning:
| Avvikelse | Feedback till Zoomer |
|-----------|---------------------|
| OCR-fel: skylt oläsbar | "Registreringsskylten är inte fullt läsbar." |
| Objekt delvis skymt | "Serienumret är skymt." |
| Completeness-fel | "Hela fasaden syns inte." |
| Blur | "Bilden är oskarp." |
| Object mismatch | "Objektet motsvarar inte uppdragets beskrivning." |
| Distance-fel | "Avståndet är för långt." |
**Aldrig:** "Fel uppstod." / "Bild ej godkänd." utan anledning.
---
### Steg 6 — Automatisk återgång
Vid nekad bild: systemet öppnar direkt kameran igen med *uppdaterad* guidance baserad på avvisningsanledningen.
```
Rikta kameran 30 cm lägre. ← Ny specifik instruktion
Ta med hela objektet.
```
Ingen manuell navigation. Ingen "försök igen"-knapp. Det bara händer.
---
### Steg 7 — Uppdrag slutfört
När alla obligatoriska kontrollobjekt är verifierade:
```
🟢 Uppdrag slutfört
🟢 12 av 12 kontrollpunkter verifierade
🟢 Kvalitetsnivå: 98%
```
Betalning triggas automatiskt via Stripe Connect.
Uppdragsgivaren får leverans i sin dashboard.
---
## AVO-integration (avvikelsemotorn)
Live Guidance (steg 2) och Post-capture (steg 4) delar samma kunskapspaket men körs i olika lägen:
| Läge | Trigger | Latenskrav | AVO-config |
|------|---------|------------|------------|
| **Live** | Videoframe ~10fps | <100ms | Lätt subset av checks — guidance only |
| **Capture** | Exponering | <3 sek | Fullständiga checks — beslutsgrundande |
Live-läget kör aldrig beslutsgrundande analys — det guidar bara.
Post-capture kör fullständig AVO och är det enda som räknas för godkännande.
---
## Kunskapspaket per uppdragstyp (exempel)
```json
{
"object": "building_facade",
"checks": ["completeness", "ocr_address", "damage_detection", "lighting_check"],
"tolerances": { "min_coverage_pct": 85, "max_blur": 0.3 },
"known_faults": ["crack", "graffiti", "missing_element", "occlusion"],
"risk_rules": { "ocr_fail": "high", "crack": "medium", "graffiti": "low" },
"live_guidance": {
"distance_range_m": [3, 8],
"preferred_angle": "straight_on",
"required_elements": ["entrance", "full_height"]
}
}
```
---
## Teknisk stack (förslag)
| Komponent | Teknologi |
|-----------|-----------|
| Live guidance (client) | TensorFlow Lite / CoreML |
| Post-capture AVO | Server-side (GPU), <3 sek SLA |
| Overlay UI | React Native + Reanimated |
| Geo-validering | Device GPS + ±15m tolerans |
| Bildlagring | S3 (quixzoom-media-prod) |
| Beslutspipeline | aamos-core → AVO → beslut → Stripe |
| Audit trail | Immutable log: image_hash + geo + timestamp + device_id |
---
## Öppna frågor
1. **Autoshoot vs manual unlock** — default per uppdragstyp eller global setting?
2. **Offline-kapabilitet** — live guidance måste fungera utan nät. Post-capture kan queua.
3. **Manipulationsskydd** — hur hindrar vi att Zoomers skickar skärmdumpar av bilder? Device attestation (iOS/Android)?
4. **Max antal omtag per kontrollobjekt** — ska det finnas ett tak? (ex. 5 försök → eskalera till manuell granskning)
5. **Deltagarens integritet** — bilder kan innehålla personer. GDPR-krav på face blurring?
---
*Nästa steg: Bygga MVP-implementation av Live Guidance för iOS.*