← DokArh Portal
feat_implementacija

F4+F5+F6 Arhiva Svih Arhiva — AI Maksimum + DokArh3 + Before/After UX

Kreator: CC (Sonnet 4.6) Datum: 2026-06-15 Status: DONE — c1264 F4+F5+F6 implementirano i pokrenuto. 9/9 PASS smoke test. Chain entry c1400.
WeisE3™ ID: (nema)
tipfeat_implementacija
cNNNNc1400
veze[ "c1264 (spec)", "c1266 (F1)", "c1268 (F3)", "c1271 (F4 dedup jezgra)", "c1380 (tombstone P1)" ]
commit8185998
stanje_prije{ "F1_entity_link": "DONE — tablica + model, fills se pri QR token kreaciji", "F2_dva_sucelja": "djelomicno — erp_arhiva.html + list.html postoje, ali bez role detection", "F3_qr_most": "DONE — scan_token + _verify_scan_token + entity_link filling", "F4_ai_maksimum": "services/identity.py postoji (dedup jezgra), ALI NIJE wirean na upload", "F5_dokarh3": "prnu_intact polje postoji, nema doc_category=dokaz ni proof_payload", "F6_ui_ux_13_10": "erp_arhiva.html postoji, nema before/after
sto_napravljeno{ "F4_1_auto_kategorizacija": { "gdje": "tasks/archive_tasks.py — _process()", "opis": "doc_type (invoice_in|invoice_out|receipt|contract|other) → DocCategory mapiranje, pise se u doc.category nakon OCR" }, "F4_2_dedup_wirean": { "gdje": "tasks/archive_tasks.py — _process(), services/identity.py", "opis": "find_duplicates() pozvan s issuer_name+issuer_oib nakon OCR, rezultati u ai_extracted.entity_candidates", "endpoint": "GET /{doc_id}/entity-kandidati" }, "F4_3_au
zakon_provjera{ "ZAKON_38_TOKEN_ROUTER": "NL pretraga (T1 Haiku) i Steuer (T2 Haiku) kroz TokenRouter", "ZAKON_27_MODEL_TRINITY": "proof_payload kolona u existing modelu (nije novi model, nije obavezna)", "ZAKON_26_SCHEMA_CONTRACT": "EntityKandidat, NLPretragaIn/Out, SteuerKategorizacijaOut, MojKontekstOut TypedDicti", "ZAKON_3_TROJNA_POHRANA": "upload flow nepromjenjen (bela_shadow + chain_block)", "ZAKON_41_BEZ_TUDJIH_ALATA": "NL pretraga i Steuer koriste TokenRouter (Anthropic) — lokalni Ollama z
sto_jos_nije{ "entity_link_linking_UI": "Nema UI za potvrdu sugeriranih uloga i klikanje 'Povezi entitet' (F4.2 backend postoji, frontend nedostaje)", "liveness_S1_spaljivanje": "Spaljivanje endpoint nema liveness gate — S1 pravilo ne krsi jer je 24h hladenje (nema immediate action)", "nlp_advanced": "NL pretraga nema doc_amount_min/max filter u SQL jer ai_extracted.amount nije u zasebnoj koloni (doc_amount je String)", "steuer_caching": "Svaki poziv steuer-kategorizacija = novi AI call, nema cache
smoke_test{ "rezultat": "9/9 PASS na MAR", "T1": "PASS health", "T2": "PASS lista", "T3": "PASS upload", "T3b": "PASS DB", "T4": "PASS detalji", "T5": "PASS spaljivanje-info", "T6": "PASS Celery", "T7": "PASS DB count", "T8": "PASS tablice" }
statusDONE — c1264 F4+F5+F6 implementirano i pokrenuto. 9/9 PASS smoke test. Chain entry c1400.