tipfiskal_implementacija
statusLIVE
verzija1.0
kontekst{
"odluka": "FISKAL otvoren tek kad ULAZ dokazan (Korak 5a) — redoslijed iz REKAPITULACIJE",
"izvor": "Port iz fina-connect/fiskalizacija/fisk.py (dokazano u produkciji)",
"temelj": "FiscalConfig na company_wid (dijeljeni sloj pravne osobe, ne POS-specifičan)"
}
sto_je_izgradjeno{
"server": "MAR (212.227.181.201)",
"fajlovi": [
"/var/www/fenix-v4/fiscal/__init__.py",
"/var/www/fenix-v4/fiscal/fisk.py — engine: load_p12, generate_zki, send_to_fina, ping_fina",
"/var/www/fenix-v4/fiscal/models.py — FiscalConfig (SQLAlchemy, Fernet lozinka, ZAKON 27)",
"/var/www/fenix-v4/fiscal/service.py — get_config, health, zki_offline, jir_online, save_cert",
"/var/www/fenix-v4/fiscal/router.py — 5 endpointa",
"/var/www/fenix-v4/migr
endpointi{
"POST /api/v1/fiscal/cert/upload": "Upload .p12, provjera prije pohrane, Fernet lozinka, expiry iz P12",
"POST /api/v1/fiscal/cert/test": "Ping FINA CIS EchoRequest — bez slanja računa",
"GET /api/v1/fiscal/health/{wid}": "Health: cert valid, dani do isteka, pending racuni",
"POST /api/v1/fiscal/zki": "ZKI offline — ne treba mrežu, tiska se odmah na račun",
"POST /api/v1/fiscal/jir": "JIR online — FINA CIS, zakonski rok 48h"
}
kljucne_odluke{
"model_lokacija": "company_wid (weise3_id tvrtke) = primarni ključ — ne company.id UUID",
"lozinka": "Fernet enkriptirana (AES-128-CBC, ključ = SHA256(SECRET_KEY)) — nije goli CharField",
"cert_dir": "/var/www/fenix-v4/certs/fiscal/ — odvojen od ostatka media",
"zki_offline": "generate_zki radi bez mreže — ZKI na račun odmah, JIR u roku 48h",
"engine": "Portano iz fina-connect bez Django ovisnosti — čisti Python"
}
zakon[
"ZAKON 0",
"ZAKON 11",
"ZAKON 27",
"ZAKON 29"
]
vau_efekt{
"pilot_firme": [
"Širok Šor",
"OPG Kruljac Slađana"
],
"flow": "Upload .p12 → test ping → ZKI offline na blagajni → JIR FINA CIS",
"offline_korist": "ZKI lokalno bez interneta, JIR queue kad mreža dostupna"
}
dokazano{
"import_test": "from fiscal.fisk/models/service/router → import ok",
"endpoints_count": "5 endpointa registrirana",
"migration": "alembic upgrade 0023 → tablica fiscal_config kreirana",
"servis": "gunicorn-fenix-v4 restart → active",
"health_endpoint": "GET /api/v1/fiscal/health/test → 401 (zahtijeva token, ispravno)"
}
otvoreno{
"5b_zicanje": "require_online() na sve user_id-dependent rute (7 modula) — nije blokiralo FISKAL",
"jir_queue": "Celery Beat retry za pending JIR-ove (zakonski rok 48h) — Korak 2 FISKAL",
"html_widget": "fiscal_health widget u POS HTML sučelju — Korak 3 FISKAL",
"pilot_test": "Stvarni .p12 certifikat Širok Šor / OPG Kruljac Slađana"
}
chain_prevc1204_ulaz_korak5a_require_online.dok.json