{"id":"c0989","filename":"c0989_genesis_capture_master_plan.dok.json","weise3_id":"4abd27cb6e29f2a5099a9e1843381b0ceaf4342c93818e9a32d27a6b7ec1adf1","tip":"plan_implementacija","naziv":"genesis-capture — Univerzalni Mobilni Ulaz","kreator":"genesis","datum":"","snippet":"","status":"AKTIVAN","prev_weise3":"","bunker_l":"#45ad6f","full":{"id":"c0989","tip":"plan_implementacija","naziv":"genesis-capture — Univerzalni Mobilni Ulaz","status":"AKTIVAN","sto_treba":"Unified PWA modul za fotografiranje/skeniranje dokumenata s mobilnog uređaja. Jedan URL, svi moduli. Zero-knowledge sesija — tragovi samo u dokumentu, ne u centralnoj tablici.","arhitektura":{"url_pattern":"v4.limit-connect.com/api/v4/capture/?module=X&token=JWT","auth_slojevi":["SLOJ-1: GenesisLogin WebAuthn (FIDO2, Ed25519, biometrija) — V4 vec ima webauthn register/auth","SLOJ-2: Magic link fallback (email/SMS) — za uredaje bez WebAuthn","SLOJ-3: QR token (za vanjske korisnike bez accounta) — V4 vec ima scan-tokens"],"zero_knowledge":"JWT je stateless (5min expiry). Server ne cita IP, ne pamti session. Trag = device_id + timestamp SAMO u dokumentu koji je kreiran.","device_identity":"Ed25519 keypair generiran na uredaju (WebCrypto API). Private key u TEE/Secure Enclave. Server zna samo public key.","kamera_modul":"Jedan HTML template (capture/index.html) za sve module. Parametriziran via ?module="},"moduli":{"arhiva":{"label":"Digitalna Arhiva","status":"DONE-S0"},"sati":{"label":"Evidencija Radnog Vremena","status":"DONE-S0-handler"},"digigraf":{"label":"Digigraf — Prijevoz (CMR)","status":"DONE-S0-handler"},"pos":{"label":"POS Blagajna","status":"DONE-S0-handler"},"rental":{"label":"Iznajmljivanje","status":"DONE-S0-handler"}},"faze":{"S0_foundation":{"status":"DONE","sto":["capture/router.py — FastAPI router, 5 module handlera","capture/schemas.py — Pydantic modeli","templates/capture/index.html — mobilna PWA kamera","templates/capture/login.html — WebAuthn + magic link login","main.py — capture_router registriran","Rute: GET /capture/ (200), GET /capture/login/ (200), POST /capture/{module}/ (401 bez tokena)"]},"S1_genesislogin_mobile":{"status":"TODO","sto":["WebAuthn JS client na login.html (navigator.credentials.create/get)","GenesisLogin SSO redirect flow (genesis_callback vec postoji u V4)","Offline QR token za vozace (bez interneta)","Device fingerprint → upisati u svaki kreirani dokument"]},"S2_module_adapters":{"status":"TODO","sto":["sati/ — prava tablica u bazi (SatiEntry model + migrations)","digigraf/ — CMR/tovarni list model, integracija s digigraf.online","pos/ — POS receipt model, fiskalizacija bridge","rental/ — check-in/out foto model, propertyUnit link"]},"S3_zero_knowledge":{"status":"TODO","sto":["Token self-destruct: client brise token iz memorije na unload","Document audit trail: device_id + entry_at + exit_at u svakom dokumentu","Brsljani aggregate: samo count i WeisE3 hash (bez PII) ide u chain","Token revocation list u Redis (TTL 5min, potvrda logout)"]},"S4_kampanje":{"status":"FUTURE","sto":["Iznajmljivaci kampanja: landing page + onboarding flow","Vozaci kampanja: digigraf.online integracija + offline QR","POS kampanja: genesispos.online + fiskalizacija","Sveucilista/bolnice pilot (ZAKON 40 prosirivanje)"]}},"zakon":["ZAKON 0","ZAKON 2","ZAKON 27","ZAKON 29","ZAKON 40"],"server":"EU (217.160.71.124)","putanja":"/var/www/fenix-v4/capture/","live_url":"https://v4.limit-connect.com/api/v4/capture/","commit":"pending","sesija":"2026-05-19","weise3_id":"4abd27cb6e29f2a5099a9e1843381b0ceaf4342c93818e9a32d27a6b7ec1adf1"}}