Files
boc/QUIXZOOM_AUDIT_SPEC.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
Raw Blame History

quiXzoom — Audit Spec

Beslutad: 2026-06-17. Körs innan Smart Scan, AVO och Liveness byggs ut.


Kill-kriterier (commitas INNAN körning)

Kriterie Kill om
Evidenstäckning Fas 1 <70% av sekvenser ger alla required datapunkter
Extraherbarhet Fas 2 OCR/detection <80% på serienummer under verkliga förhållanden
Tid per claim Fas 2 >3 min genomsnitt → marginalproblemet
Liveness Fas 3 >20% av replay-attacker passerar utan detection
Översättning Fas 4 <80% av uppdrag kan formuleras som datakrav (ej bildkrav)

Bryts ett kill-kriterium → stopp, omvärdering innan kod.


Fas 4 först — 5 pilot-claims (gör detta innan WoZ)

Formulera datakrav för dessa 5 objekt. Det är linjalen för Fas 1.

Claim 1: Elmätare

Claim: electricity_meter_verified
Datakrav:
  - serienummer (OCR, alfanumerisk sträng)
  - mätarställning (OCR, numerisk)
  - plombering synlig (presence_check)
  - GPS inom 15m från uppdragsadress
Tröskel för godkänt: alla 4 datapunkter extraherbara med confidence >0.85
Kill-signal: serienummer <80% läsbart i testset

Claim 2: Fordonsregistreringsskylt

Claim: reg_plate_verified
Datakrav:
  - registreringsnummer (OCR, format: ABC 123)
  - framruta/bakruta tydlig (framing_check)
  - GPS inom 50m
Tröskel: reg_nr confidence >0.90
Kill-signal: avläsningsfel >15% i testset (smutsiga/blinkande skyltar)

Claim 3: Butiksskylt/fasad

Claim: storefront_condition_verified
Datakrav:
  - butiksnamn läsbart (OCR)
  - fasadens helhet synlig (coverage >85%)
  - skador dokumenterade om synliga (anomaly_detection)
  - GPS inom 20m
Tröskel: namn + helhet = godkänt; skador är bonus
Kill-signal: <70% av uppdrag ger täckning >85%

Claim 4: Livboj (maritim säkerhet)

Claim: lifebuoy_present_and_accessible
Datakrav:
  - livboj identifierad (object_detection, class: lifebuoy)
  - position synlig (framing)
  - tillgänglighet verifierbar (ej blockerad)
  - GPS inom 10m
Tröskel: object_detection confidence >0.88
Kill-signal: dark/backlit environments → detection <70%

Claim 5: Serienummerplåt (industrimaskiner)

Claim: machine_serial_verified
Datakrav:
  - serienummer (OCR, variabelt format)
  - maskintyp identifierad (object_detection)
  - position dokumenterad (GPS)
Tröskel: OCR confidence >0.85
Kill-signal: graverade/inpräglade serienummer → OCR <60% (hårt kill-kriterium)

Fas 1 — Wizard of Oz (2050 uppdrag)

Frågan: Får vi tillräckligt med evidens utan att användaren tar ett enda foto?

Setup

  • Zoomer filmar med vanlig telefon-kamera (videoläge)
  • Operatör bakom kulisserna skickar textinstruktioner i realtid via Telegram/chat
  • Ingen AI — bara en människa som läser videon live

Instruktionsvokabulär (samma som AVO)

"Gå närmare — ca 30 cm"
"Visa etiketten"
"Vrid kameran lite åt höger"
"Håll still"
"Visa undersidan"
"Zooma in serienumret"
"Visa hela objektet"
"Perfekt — klar"

Mätpunkter per sekvens

session_id: WoZ_001
object_type: electricity_meter
duration_seconds: 0
instruction_count: 0
datakrav_uppfyllda:
  serienummer: null      # true/false/partial
  matarstandning: null
  plombering: null
  gps: null
evidens_tillracklig: null   # true/false
anteckningar: ""

Gränsvärde

70% av sekvenser måste ge alla datakrav uppfyllda. Annars: kill.


Fas 2 — Evidensaudit (100500 sekvenser)

Frågan: Vad misslyckas, hur ofta, och vad kostar det?

Per sekvens

session_id: EA_001
object_type: electricity_meter
zoomer_id: anonymized

timing:
  total_seconds: 0
  instructions_given: 0
  first_clear_frame_at_s: 0

extraction_results:
  serienummer:
    extracted: null
    confidence: null
    attempts: 0
  matarstandning:
    extracted: null
    confidence: null
  plombering:
    visible: null

environment:
  lighting: good/bad/mixed
  distance_issues: false
  occlusion: false

outcome: approved/rejected/partial
reject_reason: ""

Nyckeltal att samla

Genomsnittstid per claim: X sek
Instruktioner per claim: X st
Extraktionssäkerhet serienummer: X%
Extraktionssäkerhet numeriska värden: X%
Presence detection: X%
Vanligaste felpunkter: [lista]
Kostnad per claim (tid × Zoomer-ersättning): X kr

Fas 3 — Livenessaudit (attackscenarier)

Frågan: Vilka signaler skiljer verklighet från bedrägeri?

Attackscenarier att testa

# Attack Förväntat utfall Faktiskt utfall
L1 Foto av objekt på annan telefon Fail — ingen parallax
L2 Video av annan telefon (replay) Fail — ingen challenge-respons
L3 Utskrivet foto Fail — platt, ingen djupinfo
L4 Skärm som spelar upp video Fail — moiré-mönster + platt
L5 AI-genererad bild (DALL-E/Midjourney) Fail — inga sensordata
L6 Zoom/Teams-samtal som visar objektet Fail — kompression + latens
L7 Äkta video men fel plats (GPS-spoof) Fail — GPS matchar ej
L8 Äkta video men för gammalt (timestamp) Fail — timestamp-drift

Liveness-signaler att mäta

Parallax-detektionsrate: X%
Gyro-avvikelse från naturlig rörelse: X%
Fokusförändrings-frekvens: X/min
GPS-timestamp-korrelation: X%
Challenge-respons-pass-rate (äkta): X%
Challenge-respons-pass-rate (attack): X%

Fas 4 fullständig — 50 verkliga uppdrag

Upprepa pilot-processen på 50 uppdrag från verkliga kundkategorier:

Kategori Antal Datakrav formulerade?
Fastighetsfasader 10
Infrastruktur (skyltar, vägmärken) 10
Fordon 10
Industrimaskiner 10
Maritim säkerhet 5
Retail/butiker 5

Frågan per uppdrag: Kan vi formulera detta som datakrav (inte bildkrav)?

Kill: <80% översättningsbara → affärsmodellen håller inte.


Audit-verktyget (minimalt)

Bygg detta, inte Smart Scan:

Video in (upload)
    ↓
Manuell taggning per datapunkt (UI: checkbox + confidence slider)
    ↓
Automatisk sammanräkning mot claim-kraven
    ↓
Output: covered ✓ / missing ✗ / partial ~ per datapunkt
    ↓
Aggregerat per objekt-typ

Stack: enkel HTML-sida + SQLite. En dag att bygga. Kör 1000 videor på den.


Tidslinje

Dag 1:    Fas 4 pilot (5 claims) → datakravsmall klar
Dag 23:  Fas 1 WoZ (20 uppdrag, 2 objekt-typer)
Dag 4:    Utvärdering Fas 1 — kill check
Dag 510: Fas 2 evidensaudit (100 sekvenser)
Dag 11:   Fas 3 liveness (8 attackscenarier)
Dag 12:   Fas 4 fullständig (50 uppdrag)
Dag 13:   Sammanställning → go/kill per komponent

Innan dag 14 byggs inget mer av Smart Scan.


Bygger på: QUIXZOOM_VISION.md, QUIXZOOM_AVO_MASTERPROMPT_V3.md Nästa steg: Bygg audit-verktyget (dag 1, en dag).