{"id":"c0973","filename":"c0973_arhiva15_qr_token_email_notif.dok.json","weise3_id":"6d09a1df4b7ee249407a68d4ad6f288b8c3644c9c3dfce0ca8f6dfd4dcf1b71d","tip":"implementacija","naziv":"ARHIVA-1.5: QR Token Generator UI + Email notifikacija post-OCR","kreator":"CC + Ivan","datum":"2026-05-18","snippet":"","status":"DONE","prev_weise3":"","bunker_l":"#5341d0","full":{"id":"c0973","tip":"implementacija","naziv":"ARHIVA-1.5: QR Token Generator UI + Email notifikacija post-OCR","nastao":"2026-05-18","autor":"CC + Ivan","sustav":"fenix-v3","server":"MAR (212.227.181.201) + EU git (217.160.71.124)","git_commits":["ea50f8a","8d90975"],"status":"DONE","sto_je_napravljeno":{"1_token_row":{"fajl":"templates/arhiva/partials/token_row.html","opis":"QR slika 140x140 iz /pub/arhiva/scan/{token}/qr.png, WhatsApp share (wa.me), Download QR PNG, Deaktiviraj dugme s HTMX outerHTML swap","commit":"ea50f8a"},"2_scan_tokens":{"fajl":"templates/arhiva/scan_tokens.html","opis":"Poboljšan layout: uputa u 3 koraka, count tokena u headeru, htmx-indicator, hx-on::after-request reset forme","commit":"ea50f8a"},"3_list_html":{"fajl":"templates/arhiva/list.html","opis":"QR Tokeni dugme dodano pored Upload u glavnoj arhiva listi","commit":"ea50f8a"},"4_views_py":{"fajl":"arhiva/views.py","klasa":"ArhivaScanTokenListView.post()","opis":"action=deactivate grana — ScanToken.is_active=False + HTMX outerHTML → prazan response = element uklonjen iz DOM-a","commit":"ea50f8a"},"5_notify_task":{"fajl":"arhiva/tasks.py","funkcija":"notify_ocr_done(entry_id: int)","opis":"Celery task — EmailMultiAlternatives na entry.uploader.email. Dohvaća semantic_payload, formatira iznos, renderira HTML+TXT template, šalje. Non-blocking: greška u slanju ne ometa OCR pipeline.","commit":"8d90975"},"6_wire":{"fajl":"arhiva/tasks.py","lokacija":"temp_arhiva_ocr_task() nakon ai_status=done","opis":"notify_ocr_done.apply_async(args=[entry_id], countdown=3) — schedulira se 3s nakon OCR done","commit":"8d90975"},"7_email_html":{"fajl":"templates/email/ocr_done.html","opis":"Mobile-friendly HTML email: sati.ink gold design, sekcije: AI sažetak, data table (vendor/iznos/PDV/datum/broj/porezna kategorija), CTA gumb, WeisE3 ID u footeru","commit":"8d90975"},"8_email_txt":{"fajl":"templates/email/ocr_done.txt","opis":"Plain text fallback za stare email klijente","commit":"8d90975"}},"flow":{"qr_generator":["Računovođa otvori /hr/arhiva/scan-tokeni/","Unese oznaku (npr. 'Gašić Ivan'), odabere trajanje i max uploada","HTMX POST → novi token_row se ubacuje na vrh liste (afterbegin)","U redu: QR slika 140x140 + copy link + WhatsApp share + Download QR + Deaktiviraj"],"email_post_ocr":["Korisnik uploada dokument na /pub/arhiva/","Celery pokreće temp_arhiva_ocr_task → OCR + AI strukturiranje + Trojna pohrana","ai_status='done' → notify_ocr_done.apply_async(countdown=3)","Email na uploader.email: vendor, iznos, datum, porezna kategorija, CTA na dashboard"]},"url_rute":{"token_generator":"/hr/arhiva/scan-tokeni/ (login required)","qr_png":"/pub/arhiva/scan/{token}/qr.png (javno)","mobile_scan":"/pub/arhiva/scan/{token}/ (javno)","dashboard":"/pub/arhiva/beta-my-docs/","email_from":"noreply@sati.ink (SMTP: smtp.gmail.com)"},"arhiva_readiness_nakon":{"dns":"DONE (uvijek bio MAR 212.227.181.201)","beta_endpoint":"DONE (/beta/ → 200)","qr_token_generator":"DONE (ea50f8a)","email_post_ocr":"DONE (8d90975)","ukupno_backend":"95%","ukupno_frontend":"75%","campaign_ready":"65% — preostaje: demo sadržaj + collectstatic + Folija install"},"zakon_compliance":{"zakon_28":"cleanup_expired_beta_entries postoji za BetaUploadEntry (expires_at + 7d)","zakon_31":"SemanticStripper pozivan u run_beta_ocr (omega_canonical u semantic_payload)","zakon_2":"ovaj .dok.json je chain entry za ovu implementaciju"},"napomene":["BetaUploadEntry (anonymous, bez email-a) ne dobiva email notifikaciju — nema uploader.email","TempArhivaEntry (registrirani PWA korisnik s emailom) dobiva email post-OCR","notify_ocr_done je non-blocking: try/except oko cijelog slanja, warn log kod greške","MAR nema git repo — deploy je direktan scp + python patch, zatim sync na EU za commit"],"weise3_id":"6d09a1df4b7ee249407a68d4ad6f288b8c3644c9c3dfce0ca8f6dfd4dcf1b71d","timestamp":"2026-05-18T14:55:00"}}