ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

Fiskalizacija — real-time cash-register fiscalisation (2013)

Fiskalizacija is Croatia's real-time fiscalisation system for cash receipts, in force since 1 January 2013. Legal basis: Zakon o fiskalizaciji u prometu gotovinom, Narodne novine NN 133/2012. Each cash receipt is digitally signed by the business (ZKI code), transmitted to Porezna uprava which returns a JIR code, then printed with a QR code and both identifiers. Croatia was the first EU country to mandate a real-time CTC on cash transactions — a decade before the European e-invoice CTC wave.

History — from anti-fraud reform to pioneering CTC standard

By 2012, Croatia was still emerging from the 2008-2010 financial crisis with a significant fiscal deficit and a shadow economy that the World Bank estimated at ~30% of GDP. Porezna uprava and the Ministry of Finance designed Fiskalizacija as an aggressive answer: make any cash transaction invisible to the taxman impossible by forcing real-time electronic signature by Porezna uprava itself.

This Continuous Transaction Control (CTC) logic would be rediscovered by the European Commission ten years later through the ViDA package (2022) and adopted by Italy (2014 for SdI B2G, 2019 B2B), Hungary (RTIR 2018), Poland (KSeF 2024-2026), and France (PPF / PDP 2026-2027). Croatia was a decade ahead.

text fiskalizacija-timeline.txt
2010-2012  | Croatia's post-2008 fiscal deficit pushed the government to
           | tackle VAT fraud and undeclared work head-on (shadow economy
           | estimated at ~30% of GDP).
           |
2012-11-30 | Adoption of Zakon o fiskalizaciji u prometu gotovinom,
           | Narodne novine NN 133/2012. Three-wave rollout planned for 2013.
           |
2013-01-01 | Wave 1 — restaurant, hospitality, HoReCa sector.
           |
2013-04-01 | Wave 2 — retail outlets, consumer services, liberal professions
           | (lawyers, doctors, etc.).
           |
2013-07-01 | Wave 3 — residual SMEs, specialised sectors. Universal mandatory
           | coverage for any cash transaction.
           |
2017       | Extension to B2B invoicing on cash-settled invoices. Any
           | cash-paid invoice must also be fiscalised (JIR + ZKI).
           |
2019       | Standardised API connectors — SOAP + XMLDSig-signed XML.
           | Strong ERP/POS adoption via local vendors (DataLab Pantheon,
           | Megabit Birokrat, Microsoft Business Central HR localisation).
           |
2021       | Technical update — TLS 1.2 minimum, mandatory SHA-256
           | algorithms, stricter time validation.
           |
2023-01-01 | Euro migration — all amounts in EUR. HRK transitional accepted
           | until 14 January 2023 (dual-currency window).
           |
2025-2026  | Preparation for Fiskalizacija 2.0 — integration with the
           | upcoming B2B e-Račun CTC contemplated by Porezna uprava.

Governance — Porezna uprava + Fina (PKI)

Porezna uprava operates the fiscalisation system — main web service (cistest.apis-it.hr for test, cis.porezna-uprava.hr for production), strict time validation (±300 s), JIR response under 2 seconds at p95. The state IT agency APIS IT handles hosting.

Fina issues the qualified FISKAL 1, FISKAL 2 and FISKAL 3 certificates (progressive root-chain rotation since 2013), required to sign the RacunZahtjev. Historical price ~600 HRK, ~€80 since 2023, 5-year validity.

Technical schema — JIR, ZKI, QR

The Fiskalizacija flow revolves around three nested identifiers:

  • ZKI (Zaštitni kod izdavatelja) — 32-char hex MD5 code, computed locally over the string OIB + DatumVrijeme + BrRac + OznPosPr + OznNapUr + IznosUkupno RSA-signed with the FISKAL private key. Guarantees issuer-side integrity.
  • JIR (Jedinstveni identifikator računa) — UUIDv4 generated by Porezna uprava on receipt and returned in the SOAP response. Uniquely identifies the receipt centrally.
  • QR code — required on print since 2021. Encodes the URL https://porezna.gov.hr/rn?jir=...&datv=...&izn=... — the customer can scan and verify in real time.
xml fiskalizacija-racun-zahtjev.xml
<?xml version="1.0" encoding="UTF-8"?>
<tns:RacunZahtjev xmlns:tns="http://www.apis-it.hr/fin/2012/types/f73"
                  xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
                  Id="RacunZahtjev">
  <tns:Zaglavlje>
    <tns:IdPoruke>9c3eed7c-7c2b-4b4f-b8b4-d3f1c6e9aa11</tns:IdPoruke>
    <tns:DatumVrijeme>15.06.2026T10:14:00</tns:DatumVrijeme>
  </tns:Zaglavlje>

  <tns:Racun>
    <tns:Oib>85821130368</tns:Oib>
    <tns:USustPdv>true</tns:USustPdv>
    <tns:DatVrijeme>15.06.2026T10:13:55</tns:DatVrijeme>
    <tns:OznSlijed>N</tns:OznSlijed>
    <tns:BrRac>
      <tns:BrOznRac>1024</tns:BrOznRac>
      <tns:OznPosPr>POS01</tns:OznPosPr>
      <tns:OznNapUr>1</tns:OznNapUr>
    </tns:BrRac>

    <tns:Pdv>
      <tns:Porez>
        <tns:Stopa>25.00</tns:Stopa>
        <tns:Osnovica>40.00</tns:Osnovica>
        <tns:Iznos>10.00</tns:Iznos>
      </tns:Porez>
    </tns:Pdv>

    <tns:IznosUkupno>50.00</tns:IznosUkupno>
    <tns:NacinPlac>G</tns:NacinPlac>   <!-- G = gotovina / cash -->
    <tns:OibOper>85821130368</tns:OibOper>
    <tns:ZastKod>a1b2c3d4e5f67890abcdef1234567890</tns:ZastKod>   <!-- ZKI -->
    <tns:NakDost>false</tns:NakDost>
  </tns:Racun>

  <ds:Signature>
    <!-- XMLDSig on RacunZahtjev with Fina FISKAL 1/2/3 certificate -->
  </ds:Signature>
</tns:RacunZahtjev>

Fiskalizacija vs CTC e-invoice vs SAF-T

DimensionHR FiskalizacijaItaly SdISAF-T (PL, NO, PT)
ScopeCash receipts B2C + B2BB2B + B2G invoicesPeriodic accounting extract
TimingReal-time (degraded ≤ 48 h)Real-time mandatoryMonthly / annual
FormatSigned SOAP XML (RacunZahtjev)XML FatturaPAXML JPK_VAT / SAF-T
Unique identifierJIR (assigned by Porezna)SdI ID (assigned by SdI)None per transaction
Go-live1 January 20131 January 2019 (B2B)2016 (PL), 2017 (NO), 2008 (PT)
World pioneerYes — first EU cash CTCYes — first EU e-invoice CTCOECD standard

Adoption — ~3.8B receipts/year, ~98% compliance

  • ~3.8 billion fiscalised receipts per year per Porezna uprava annual figures (cumulative volume across all sectors, 2023-2024).
  • ~250,000 obligated entities — companies, obrti (sole proprietorships), liberal professions — within the mandatory scope.
  • ~98% of receipts transmitted real-time (online mode), the remainder in deferred NakDost mode within 48 h.
  • Revenue impact — Porezna uprava attributes ~3-4 points of GDP in additional revenue over the 2013-2023 decade (anti-fraud effect + base broadening).

Common pitfalls

  • Bad clock. Porezna uprava rejects any RacunZahtjev whose DatumVrijeme deviates more than 300 s from server time. Always sync via NTP (pool.ntp.org or hr.pool.ntp.org).
  • Confusing ZKI and JIR. ZKI is computed locally BEFORE sending. JIR is assigned by Porezna uprava AFTER validation. The printed receipt must carry BOTH. Printing without a JIR = unfiscalised receipt = fine.
  • Expired FISKAL certificate. 5-year validity. Renewal is not automatic on Fina's side — schedule an alert 60 days before. All transmissions silently fail with an expired certificate.
  • NakDost forgotten. In deferred transmission (outage), NakDost must be true. Left as false, the returned JIR is interpreted as a first real-time send and the initial timestamp is rejected.
  • Poorly generated QR code. The QR must encode the full Porezna uprava URL, not just the JIR. Many POS vendors encode only the JIR — non-compliant per the 2021 directive.