{"id":"c1206","filename":"c1206_fiskal_pnp_i_zki_zicanje.dok.json","weise3_id":"","tip":"fiskal_implementacija","naziv":"FISKAL — PNP + ZKI žičanje (mock → pravi)","kreator":"CC (Claude Code)","datum":"2026-05-31","snippet":"pos/router.py: mock ZKI/JIR → pravi fiscal/service.py pozivi · pos/router.py: _parse_br_ozn_rac() — izvlači BrOznRac int iz 'R-42/1/1' · pos/router.py: _send_jir_background() — JIR async background task (48h rok)","status":"LIVE","prev_weise3":"","bunker_l":"#00d4ff","full":{"tip":"fiskal_implementacija","naziv":"FISKAL — PNP + ZKI žičanje (mock → pravi)","datum":"2026-05-31","status":"LIVE","sto_je_napravljeno":["pos/router.py: mock ZKI/JIR → pravi fiscal/service.py pozivi","pos/router.py: _parse_br_ozn_rac() — izvlači BrOznRac int iz 'R-42/1/1'","pos/router.py: _send_jir_background() — JIR async background task (48h rok)","pos/router.py: PNP izračun po stavci (line_base * pnp_stopa/100)","fiscal/models.py: pnp_stopa Decimal(5,2) na FiscalConfig","fiscal/service.py: pnp_stopa parametar u save_cert_file()","fiscal/router.py: pnp_stopa Form param na /cert/upload, pnp_stopa u FiscalHealthOut","invoicing/models.py: pnp_iznos Decimal(14,2) na InvoiceLine","migration 0024: pnp_stopa + pnp_iznos kolone"],"tok_po_racunu":{"1_zki":"compute_zki_offline() — RSA-SHA1+MD5, OFFLINE, tiska se odmah","2_pnp":"line_base * (pnp_stopa/100) po stavci — 0 ako općina nema PNP","3_jir":"background_tasks.add_task(_send_jir_background) — ne blokira blagajnu","fallback":"ako nema FiscalConfig → mock ZKI (prefiks ZKI-MOCK::), upozorenje u logu"},"pnp_logika":{"tko_postavlja":"blagajnik/voditelj JEDNOM pri cert uploadu — stopa po prostoru","kako":"POST /api/v1/fiscal/cert/upload pnp_stopa=3 (ili 0, 1.5, 2)","izracun":"pnp_iznos = line_base * pnp_stopa/100, zaokruženo na 0.01","fina":"PNP NE ulazi u ZKI/JIR — FINA ne zna za PNP, to je komunalni prihod","racun_prikaz":"pnp_iznos se prikazuje kao zaseban redak na računu (PDF template — TODO)"},"pilot_uvjet":"test-firma pekare: kruh (PDV 5%, PNP 0) vs kava (PDV 25%, PNP 3%) — usporedba sa Synesisom","otvoreno":{"pdf_template":"PNP redak u PDF predlošku — Korak 3 FISKAL","jir_retry":"Celery Beat retry za pending JIR (background task ne retryira sam) — Korak 2","48h_health":"pending_count/hours u fiscal_health — aktivira se kad jir='' stariji od 48h"},"dokazano":{"import":"fiscal/router, service, models, pos/router — import ok","model_fields":"pnp_stopa na FiscalConfig: True, pnp_iznos na InvoiceLine: True","migration":"alembic upgrade 0024 → ok","servis":"gunicorn-fenix-v4 restart → active"},"autor":"CC (Claude Code)","chain_prev":"c1205_fiskal_sprint_v1.dok.json"}}