{"id":"c1268","filename":"c1268_f3_qr_most_entity_link.dok.json","weise3_id":"","tip":"feat_integracija","naziv":"F3 — QR most puni EntityLink brid (Party-Role graf iz stvarne akcije)","kreator":"CC (Sonnet)","datum":"2026-06-06","snippet":"","status":"DONE — QR most puni brid, testirano, sigurno, commitano","prev_weise3":"","bunker_l":"#00d4ff","full":{"weise3_id":"","tip":"feat_integracija","cNNNN":"c1268","naziv":"F3 — QR most puni EntityLink brid (Party-Role graf iz stvarne akcije)","datum":"2026-06-06","autor":"CC (Sonnet)","veze":["c1264 (spec)","c1266 (F1 EntityLink tablica)","c1267 (F2 scope)"],"zatecено":"QR scan infrastruktura VEĆ postoji: /archive/scan/{token} (landing), /scan/{token}/upload, create_scan_token endpoint, archive_scan_token tablica, QR PNG. Komitent skenira → uploada bez logina.","sto_dodano":{"hook":"_ensure_komitent_link() u create_scan_token","logika":"Kad knjigovođa kreira QR token za komitenta → bootstrap Party-Role brid iz parent_id: from=parent(ured), to=komitent, role=komitent, scope=archive:feed","znacaj":"Zatvara petlju F1+F2 — brid (EntityLink) se PRVI PUT puni iz stvarne akcije, ne ostaje prazna tablica","commit":"9b72bee"},"sigurnost_kriticna":{"best_effort":"try/except + rollback — punjenje brida NIKAD ne ruši kreiranje tokena (kritični put)","idempotentno":"provjera postojanja prije inserta + deterministički weise3_id","test":"sintetički (2 temp entiteta) — 1 brid, 2× poziv idempotentan, from=parent ✓, test podaci počišćeni","servis":"HTTP 200, postojeći QR scan flow netaknut"},"napomena_produkcija":"Trenutno nijedan komitent u produkciji nema parent_id postavljen → brid se počinje stvarati čim knjigovođa onboarda komitente s parent vezom + kreira QR.","sljedece":"F4 — AI maksimum (dedup/identity, auto-naljepnice, NL pretraga, njemački porez) kroz ZAKON 38. Ili F2.2 — scope da čita EntityLink (ne samo parent_id) za role-scoped vidljivost.","status":"DONE — QR most puni brid, testirano, sigurno, commitano"}}