Croatia Fisk B2C
Croatia B2C cash-receipt fiscalization (racun): real-time ZKI/JIR via the Tax Administration CIS SOAP service, with a Porezna verification QR on every receipt
Croatia B2C Fiscalization (Racun) for Odoo
Cash-receipt fiscalization to the Tax Administration CIS — compute the ZKI, sign and submit the RacunZahtjev, get the JIR, print the verification QR, straight from Odoo.
What It Does
This module fiscalizes Croatian B2C cash receipts (racun) against the Tax Administration's CIS (Centralni informacijski sustav) SOAP service. For each B2C receipt you fiscalize it computes the ZKI (issuer protective code), builds and XML-DSig-signs a RacunZahtjev SOAP envelope, submits it to the CIS, and stores the returned JIR (unique invoice identifier). A Porezna verification QR is rendered on every receipt so buyers can confirm it was reported. This is the ongoing fiscalization obligation that continues alongside Fiskalizacija 2.0 from 2026.
Built on a Shared e-Invoice Engine
This connector depends on the e-Invoice Core Engine and the B2B Fiskalizacija 2.0 module, reusing their enveloped XML-DSig signer, QR engine, bring-your-own-key REST transport, document state machine and OIB identity. The B2C cash-receipt logic is added as a registered profile — no duplicated plumbing, a smaller and more reliable footprint.
Key Features
ZKI Protective Code
Computed exactly as Croatia specifies — OIB + dd.MM.yyyy HH:mm:ss + number + premise + register + total signed with the issuer's RSA-SHA1 (BYOK) private key and MD5-hashed to a 32-character hex code. No key, no receipt: the module refuses to generate rather than print an unsigned code.
RacunZahtjev SOAP
Full request envelope in the documented apis-it / FINA f73 namespace, enveloped XML-DSig signed with your FINA certificate exactly as the specification demands (exclusive C14N, rsa-sha1, sha1 digest, Reference URI="#RacunZahtjev"), and a RacunOdgovor parser extracting the JIR or the CIS error rows — including the error rows returned inside an HTTP 500 SOAP fault.
CIS SOAP Client
Built on the engine REST transport: retry/backoff, full logging, sandbox toggle and mutual-TLS with the FINA certificate. CIS hosts pre-filled and fully editable; an EchoRequest probe powers the test button.
OIB Validation
The real ISO 7064 MOD 11,10 check-digit algorithm validates the company OIB and the operator OIB before anything is fiscalized, and flags an invalid partner OIB on the contact form.
Fiscalized When You Post
Posting a customer invoice, a credit note or a Sales Receipt sends it to the CIS straight away, so the document you hand over already carries its JIR. The automatic call is capped at 10 seconds and one attempt — a CIS outage costs the person at the till seconds, never minutes — and it can never block a posting: a failure leaves the document posted, the envelope in error and a note in the chatter, and the enabled retry cron re-sends it with the NakDost late-delivery flag. One switch turns the whole thing off for high-volume tills that prefer to fiscalize in the background.
Works on a Bare Install — and on Odoo Online
The CIS hosts are served under the Fina PKI, which no operating system or Python trust store carries, so an unprepared Odoo fails every call with a TLS error that looks like a network fault. The public Fina chain ships with the module and is trusted by default, with the system store and your own pasted PEM bundle as alternatives. Mutual TLS reuses the FINA certificate already stored on the company, so nothing has to be placed on a filesystem — and when a call does fail, the test button prints the actual reason instead of a guess.
Verification QR on the PDF
The invoice PDF carries a fiscal block with the receipt number, the ZKI, the JIR, the issue time and the Porezna provjeri racun QR (datv in the mandated 13-character form, amount in euro cents, minus sign kept for a storno), printed at the required 2x2 cm minimum.
Numbering, Refunds, Retries
A fiscal receipt number (BrOznRac) per company / business premise / cash register, restarted every year, while the Odoo document number stays your accounting reference. Refunds are reported as storno receipts with negative amounts, and a retry re-sends a receipt that left the counter without a JIR with the NakDost late-delivery flag set.
Bring Your Own Key (BYOK)
The CIS requires your registered FINA application certificate. Upload the .p12 bundle FINA issued directly in the onboarding wizard or on the company form — no openssl command line — and the key and certificate are unpacked for you; pasting the PEM text still works. The same certificate seals the ZKI, signs every RacunZahtjev and, with one checkbox, drives the mutual-TLS handshake with the CIS, so nothing needs to sit on a server filesystem. Explicit certificate/key paths remain available for on-premise installations that keep key material outside the database, and the company form warns you 30 days before the certificate expires. Everything happens locally on your own server. No credentials are bundled with the module, and receipt data is transmitted only to the CIS endpoint you configure.
Compatibility
Odoo 18.0, 19.0 and 20.0 (Community & Enterprise). Requires the e-Invoice Core Engine and the Croatia Fiskalizacija 2.0 module. Python dependencies: lxml, qrcode, requests, cryptography.
Croatia B2C Fiscalization (Racun) — part of the Pokutsoft global e-invoicing suite. Support: support@pokutsoft.com
Screenshots
Fiscalized B2C receipt: fiscal receipt number, ZKI, the JIR returned by the CIS and the Porezna verification QR.
The signed RacunZahtjev envelope: USustPdv, BrRac triplet, Pdv breakdown, ZastKod, NakDost and the XML-DSig signature.
Onboarding wizard: OIB, business premise / cash register marks, CIS endpoint and the BYOK FINA signing material.
The printed receipt carries the fiscal number, ZKI, JIR, issue time, payment method and the verification QR.
Documentation
Configuration guide included in the package (docs/Configuration_Guide_EN.pdf) — installation order and dependencies, FINA certificate setup, company and endpoint settings, the Croatian B2C receipt flow, and an end-to-end test walkthrough. The Markdown source ships beside it as docs/Configuration_Guide_EN.md.
Update date: 2026-09-08
User guides (PDF)
Related modules
Croatia Fisk POS
Croatia B2C POS receipt fiscalization: real-time JIR/ZKI to the Porezna uprava CIS over a direct SOAP + mTLS connection with your own FINA certificate, verification QR, BYOK
Croatia Fiskal 2.0
Croatia Fiskalizacija 2.0 e-invoicing: CIUS-HR EN16931 UBL 2.1 B2B, OIB validation, ZKI/JIR QR, BYOK access-point REST relay submission (software-only, runs under your own credentials)
Croatia Fisk 2.0 In
Croatia Fiskalizacija 2.0 inbound: receive and parse B2B CIUS-HR e-invoices into draft vendor bills, with purchase e-reporting and access-point inbox polling (BYOK)