If you run a salon in Croatia, you have lived with fiscalisation since the day you opened, even if nobody ever explained the acronyms on the bottom of your receipts. Fiscalisation is the system through which the Croatian Tax Authority (Porezna uprava) sees every receipt you issue, in real time, the moment a client pays. It is not optional, it is not a setting, and getting it wrong is one of the few mistakes that an inspector can spot on a single printed receipt. This primer explains the moving parts — JIR, ZKI, the QR code, and the cash maximum — in plain terms, and shows how F9.contact handles the mechanics so you never compute a protection code by hand.
The one-sentence version
When a client pays, your system signs the receipt, sends it to the tax authority over the internet, and the authority sends back a unique identifier that has to appear on the receipt the client takes away. That round trip is fiscalisation. Everything below is the detail behind it.
ZKI: the code you generate
The first code is the ZKI — Zaštitni kod izdavatelja računa, the issuer's protection code. Think of it as your salon's signature on the receipt. It is computed locally, on your side, from the receipt's key facts (your tax number, the date and time, the receipt number, the total) using the private key of a fiscal certificate issued to you by FINA, Croatia's financial agency.
The crucial property of the ZKI is that you can always produce it, even if the internet is down. Because it is computed locally, the receipt is valid the instant it is signed. F9 leans on exactly this: when an invoice is marked paid, the ZKI is computed and stored first, before anything is sent anywhere. If the connection to the tax authority fails at that moment, the ZKI is already safely recorded and the sale is not lost.
JIR: the code the tax authority gives back
The second code is the JIR — Jedinstveni identifikator računa, the unique invoice identifier. This one does not come from you; it comes back from the Tax Authority's Central Information System (CIS) after your signed receipt reaches it over a secure connection. The JIR is the authority's acknowledgement: we have seen this receipt, here is its unique number.
A receipt with a ZKI but no JIR is a receipt that was signed but not yet confirmed — usually because the connection to CIS hiccuped. Croatian law accommodates this: you have a short window to deliver the JIR. F9 handles the gap automatically. A receipt that has its ZKI but is still missing its JIR is picked up by a retry job that re-sends it to FINA until the JIR comes back, then records it. The client's emailed receipt is, by design, only sent once the JIR is in hand, so a customer never receives a document that is missing its legal identifier.
The QR code: verification in the client's pocket
Every fiscalised receipt carries a QR code that points at the tax authority's own verification page on porezna.gov.hr. A client — or an inspector — can scan it and confirm, against the authority's records, that the receipt is genuine and was reported. It is the consumer-facing proof that the whole round trip actually happened.
On F9 that QR code is generated as part of rendering the receipt and embedded directly in the A4 PDF that is emailed to the client, alongside the JIR and ZKI, the VAT breakdown, your salon's frozen identity details, and the operator who rang up the sale. There is nothing to print and staple; the legal document arrives complete.
The certificate that makes it all work
None of the above is possible without your FINA-issued fiscal certificate, a PKCS#12 file containing the private key used to sign the ZKI. This is sensitive material — anyone with it could sign receipts as you — so F9 treats it accordingly. Each Croatian salon uploads its own certificate, and it is encrypted at rest with AES-256-GCM. At the moment of fiscalisation it is decrypted to a temporary file, used to sign, and deleted immediately; the unencrypted certificate touches the disk at no other time.
This certificate is also the legal gate for the whole money side of the platform. Without a valid fiscal certificate uploaded and the fiscal setting switched on, F9 hides invoicing and the Cash Drawer entirely and refuses any money-mutating request — because Croatian law (NN 89/2025 and its supporting regulations) requires a valid fiscal certificate before any invoice may issue. That is not an F9 opt-in feature; it is the law expressed as a hard switch.
Blagajnički maksimum: the cash ceiling
Alongside fiscalising receipts, Croatian cash-handling rules impose a blagajnički maksimum — the maximum amount of cash you may keep in the drawer at the close of a business day. Anything above it has to be deposited. The ceiling is not a single national number; it depends on the size of your business, and under the current regulation (Pravilnik NN 153/2025, article 47) it falls into brackets — roughly €2,000, €7,000, €12,000 and €15,000 per location for micro, small, medium and large businesses respectively.
Setting your ceiling is not just picking a number. You are also expected to formalise it in a written decision — an Odluka o blagajničkom maksimumu — naming a signatory. F9 turns this into a few clicks: you pick your size bracket, set the actual envelope for each location, name the signatory, and generate a printable Odluka PDF on demand. Past decisions are kept as immutable, re-downloadable snapshots for your audit trail, and the Cash Drawer warns you with a badge if your envelope or business size has drifted since the last decision was issued.
The daily journal an inspector will ask for
When cash is the payment method, F9 automatically emits an uplatnica receipt for the sale, numbered in its own sequence and linked back to the JIR and ZKI. Cashiers can also record manual cash-in and cash-out movements — opening float, a bank deposit, a supplier payment — each producing a conventional Croatian receipt. At the end of the day the system can produce the dnevnik blagajne, the cash-drawer day journal an auditor reaches for: opening float, every voucher in order, a running balance, the closing balance, and a shortage-or-surplus footer once the day is closed and the cash counted. If the counted cash diverges from what was expected, the cashier classifies the variance — ordinary shortage, force majeure, spillage, or a surplus — and F9 mints a balancing entry so the journal nets out and the classification is recorded for the accountant.
What you actually have to do
The honest summary is that fiscalisation is a lot of machinery and very little daily effort, provided the machinery is automated. Your job is to upload your FINA certificate once, set your cash maximum and issue the Odluka, and then ring up sales normally. The ZKI computation, the secure call to FINA, the JIR retry, the QR code, the bilingual PDF, the uplatnica, and the day journal are all handled for you. The acronyms on the bottom of the receipt stop being a mystery and become exactly what they were meant to be: quiet, verifiable proof that you ran a clean till.