Files
boc/QUIXZOOM_SMART_SCAN.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

6.7 KiB

quiXzoom — Smart Scan Architecture

Beslutad: 2026-06-17. Ersätter "fotoflöde"-tänket.


Paradigmskiftet

Fotoflöde (v1/v2) Smart Scan
Zoomern tar bilder Zoomern skannar ett objekt
AI bedömer varje bild AI bygger upp ett bevispaket
Kvalitetsansvar: Zoomern Kvalitetsansvar: systemet
Input: foto Input: kontinuerlig videoström
Output: godkänd/nekad bild Output: verifierad kontrollpunkt
Känsla: formulär Känsla: Face ID / 3D-skanner

Kärninsikt: Zoomern förstår inte uppdraget. AI vet redan vilka datapunkter som krävs, vilka vinklar som behövs, vilka detaljer som måste vara synliga, och när bevisningen är tillräcklig.

Zoomerns enda uppgift: "Peka kameran mot objektet och följ instruktionerna."


Arkitektur

Evidenspaketet (ersätter "foto")

Varje kontrollpunkt definierar ett evidence_requirements-objekt:

{
  "control_point": "electricity_meter",
  "evidence_requirements": [
    { "id": "e1", "label": "Översikt",      "type": "visual_coverage", "min_coverage_pct": 85 },
    { "id": "e2", "label": "Serienummer",   "type": "ocr",             "target": "serial_number" },
    { "id": "e3", "label": "Mätarställning","type": "ocr",             "target": "meter_reading" },
    { "id": "e4", "label": "Plombering",    "type": "presence_check",  "target": "seal" }
  ]
}

Kontrollpunkten är inte klar förrän alla evidence_requirements är uppfyllda. Det spelar ingen roll hur många frames det tar.


Scanloopen (on-device, kontinuerlig)

Videoström
    │
    ▼
Frame-sampler (~5fps)
    │
    ▼
Evidence Matcher
    ├─ e1 täckt? → ja (frame 142)
    ├─ e2 läsbar? → ja (frame 198)
    ├─ e3 läsbar? → nej → direktiv: "Visa displayen"
    └─ e4 synlig? → nej → direktiv: "Visa plomberingen"
    │
    ▼
En direktiv åt gången → AR-overlay
    │
    ▼ (när alla ej uppfyllda)
Bästa frame per requirement väljs ut
    │
    ▼
All clear → "Kontrollpunkt klar ✓"

Systemet väljer frames — Zoomern fattar aldrig ett fotograferingsbeslut.


Frame-selektion

När ett requirement är uppfyllt sparas den bästa frame:

{
  "requirement_id": "e2",
  "frame_number": 198,
  "timestamp_ms": 4820,
  "confidence": 0.94,
  "extracted_value": "SE-4821-9938-01",
  "selected": true
}

Systemet väljer den frame med högst confidence inom ett kvalitetsfönster (skärpa, ljus, täckning). Aldrig den sista — den bästa.


Evidenspaketet som skickas till server

Inte ett foto. Ett paket:

{
  "control_point": "electricity_meter",
  "session_id": "sess_abc123",
  "zoomer_id": "z_9981",
  "geo": { "lat": 59.334, "lng": 18.063, "accuracy_m": 4 },
  "device_id": "dev_ios_xyz",
  "scan_duration_ms": 12400,
  "evidence": [
    { "requirement_id": "e1", "frame": "frame_142.jpg", "confidence": 0.97 },
    { "requirement_id": "e2", "frame": "frame_198.jpg", "confidence": 0.94, "value": "SE-4821-9938-01" },
    { "requirement_id": "e3", "frame": "frame_265.jpg", "confidence": 0.91, "value": "04821.3" },
    { "requirement_id": "e4", "frame": "frame_302.jpg", "confidence": 0.88 }
  ]
}

Server-AVO verifierar paketet. Inte enskilda bilder.


Server-AVO på evidenspaketet

{
  "phase": "evidence_review",
  "control_point": "electricity_meter",
  "decision": "approved",
  "confidence": 0.942,
  "evidence_summary": {
    "e1": { "status": "verified", "confidence": 0.97 },
    "e2": { "status": "verified", "confidence": 0.94, "value": "SE-4821-9938-01" },
    "e3": { "status": "verified", "confidence": 0.91, "value": "04821.3" },
    "e4": { "status": "verified", "confidence": 0.88 }
  },
  "deviations": [],
  "summary": "🟢 Elmätare verifierad. Alla 4 datapunkter insamlade."
}

reject_class i Smart Scan

reject_class kvarstår men beter sig annorlunda:

reject_class Situation Åtgärd
capture Requirement kan inte uppfyllas pga scan-kvalitet (för mörkt, för ostadigt) Direktiv, fortsätt scanning
content Requirement kan aldrig uppfyllas (skylt förstörd, mätare plomberad på fel sätt) Stoppa, registrera avvikelse, eskalera
evidence_incomplete Scanning avbröts innan alla krav uppfylldes Återuppta scanning

UX-känslan

Traditionellt fotoflöde

Öppna kamera → ta bild → vänta → underkänt → ta om

Smart Scan

Öppna kontrollpunkt → kamera startar → följ guidning →
"Kontrollpunkt klar ✓" → nästa

Det närmaste analogin är Face ID — inte "ta ett foto av ditt ansikte", bara "titta mot telefonen".

Eller en 3D-skanner — inte "ta 12 foton från dessa vinklar", bara "rör kameran runt objektet".


Vad det innebär för skala

Gammalt: Uppdragsgivaren definierar bildkrav → Zoomer tolkar → kvalitetsvariation Nytt: Uppdragsgivaren definierar datakrav → AI samlar in → konsekvent kvalitet

Uppdragsgivaren behöver inte längre tänka i bilder. De anger:

  • Vilka värden de behöver (serienummer, mätarställning, skadetyp)
  • Vilka element som måste vara synliga (plombering, skylt, fasad)

AI:n avgör hur det samlas in.


Teknisk implementation

Komponent Ansvar
Frame-sampler ~5fps från videoström, on-device
Evidence Matcher Per-frame check mot requirements, TF Lite / CoreML
AR Directive Layer En instruktion åt gången, uppdateras per frame
Frame Store Temporär ring-buffer, behåller kandidat-frames
Frame Selector Väljer bästa frame per requirement vid completion
Evidence Packager Bygger JSON-paketet för server-upload
Server AVO Full verifiering, OCR-validering, avvikelseanalys
Audit Trail image_hash + geo + timestamp + device_id per frame

Öppna frågor (uppdaterade)

  1. Liveness / anti-spoofing — hur verifierar vi att videoströmmen är levande och inte en inspelning eller skärmdump? Device attestation (iOS App Attest / Android Play Integrity)?
  2. Frame-kvalitetströskel — vilken minsta confidence krävs för att en frame ska väljas? Konfigurerbart per requirement?
  3. Offline scanning — frames buffras lokalt, paket skickas vid uppkoppling. Max buffer-storlek?
  4. GDPR / ansikten — scanning av fasader och miljöer fångar troligen ansikten. Face blurring before upload?
  5. Scan-timeout — max tid per kontrollpunkt? (förslag: 120 sek → eskalera)
  6. Multi-objekt — kan en scanning-session samla bevis för flera kontrollpunkter parallellt?

Ersätter QUIXZOOM_CAPTURE_FLOW.md och AVO-masterprompt v1/v2 som konceptuellt underlag. AVO-masternprompt v2 gäller fortfarande som tekniskt kontrakt för fas B (server-AVO).