04 — Regulatory Reference — VAT/CIT/HR-FISK/SEPA
Bilko HR — Regulatory Reference — VAT/CIT/HR-FI
Last Updated: 2026-05-28
Status: COMPLETE — regulatory reference
consolidated
Source files: - Regulatory HR README - HR-FISK
integration spec
Table of Contents
- Croatia (HR) Regulatory Overview
- VAT (PDV)
- Corporate Income Tax (CIT)
- E-Invoice (HR-FISK 2.0 / eRačun B2B)
- Chart of Accounts
- Financial Statement Filing
- Bank Integration
- HR-FISK Integration Spec — Technical Deep Dive
Croatia (HR) Regulatory Overview
- Country Code: HR
- Currency: EUR (adopted January 2024, previously HRK)
- EU Status: Member since 2013
- Open Banking: PSD2 full compliance (Berlin Group NextGenPSD2)
- Payment System: SEPA (full member)
VAT (PDV - Porez na dodanu vrijednost)
| Rate Type | Rate | Description |
|---|---|---|
| Standard | 25% | General goods and services |
| Intermediate | 13% | Certain foods, water supply, accommodation |
| Reduced | 5% | Books, newspapers, baby food |
| Zero | 0% | Exports, intra-EU supply |
Registration Threshold: 60,000 EUR annual turnover
Return Frequency: Monthly
Filing Deadline: Last day of following month
Portal: ePorezna (https://www.porezna-uprava.hr)
Corporate Income Tax (CIT - Porez na dobit)
- Standard Rate: 18%
- Reduced Rate: 10% (if annual revenue less than 1M EUR)
- Filing Deadline: April 30 (for previous fiscal year)
- Payment: Annual (no advance payments for small entities)
Withholding Tax (WHT)
| Type | Rate |
|---|---|
| Dividends | 10% |
| Interest | 12% |
| Royalties | 15% |
Small Business Regime (Pausalni obrt)
- Threshold: less than 60,000 EUR annual turnover
- Taxation: Simplified lump-sum based on activity
- Benefits: Reduced compliance, simplified VAT rules
E-Invoice (HR-FISK 2.0 / eRačun B2B)
Platform: https://hr-fisk.fina.hr
Status: Operational (launched January 2026)
Mandatory Since: January 1, 2026 (B2B/B2G/B2C)
Format: UBL 2.1 XML with HR-CIUS (Croatian Implementation User
Specification)
Protocol: AS4
Network: Peppol-compatible
Certificate: FINA certificate required
Penalties: Up to 500,000 EUR for non-compliance (SEVERE)
Archive Requirement: 11 years
Compliance Deadlines
| Entity Type | Obligation | Date |
|---|---|---|
| VAT-registered taxpayers | Issue AND receive B2B e-invoices | January 1, 2026 (ACTIVE) |
| Non-VAT registered taxpayers | RECEIVE e-invoices | January 1, 2026 (ACTIVE) |
| Non-VAT registered taxpayers | ISSUE and fiscalize e-invoices | January 1, 2027 |
| All B2G suppliers | Issue e-invoices to government | July 1, 2019 (long active) |
WARNING: Penalties for non-compliance: up to EUR 500,000 per violation. Bilko Croatian users MUST use eRačun — blocking Croatian invoicing until integration is complete is correct policy.
HR-FISK Integration Spec — Technical Deep Dive
Last Updated: 2026-03-03
Status: PLACEHOLDER — ZKI/JIR types defined, API call not
implemented
Regulatory Confidence: HIGH (Croatia is EU member, well-documented)
Overview
Croatia operates two parallel fiscalization systems since January 1, 2026:
- Fiscalization 1.0 (B2C) — Real-time cash register fiscalization for consumer transactions
- Fiscalization 2.0 (B2B) — Mandatory electronic invoicing for B2B transactions via the eRačun platform
Bilko integration target is Fiscalization 2.0 — the B2B eRačun mandate.
What Fiscalization 2.0 Requires
All B2B invoices between Croatian VAT-registered taxpayers must:
- Be structured in UBL 2.1 or CII format (EN 16931 compliant)
- Be transmitted in real-time to the Croatian Tax Authority via the eRačun monitoring system
- Carry a JIR (Jedinstveni Identifikator Računa — Unique Invoice Identifier) assigned by the Tax Authority
- Carry a ZKI (Zaštitni Kod Izdavatelja — Issuer Security Code) generated by the taxpayer
JIR — Unique Invoice Identifier
- Format: UUID (e.g., a1b2c3d4-e5f6-7890-abcd-ef1234567890)
- Assigned by: Croatian Tax Authority (Porezna uprava) upon successful fiscalization
- Purpose: Proof that the invoice has been registered with the Tax Authority
- Must appear on: Invoice document (as QR code or printed text)
ZKI — Issuer Security Code
- Format: 32-character hexadecimal MD5 hash
- Generated by: The taxpayer (Bilko, on behalf of the company)
- Algorithm: MD5 hash of OIB + IssueDateTime + InvoiceNumber + BusinessUnitCode + CashRegisterCode + TotalAmount (concatenated without separator, signed with private key from FINA certificate)
- Purpose: Proves the invoice originated from the declared issuer
- Note: ZKI generation requires FINA digital certificate (private key)
FINA — Financijska Agencija
Role: FINA is Croatia’s national financial agency responsible for:
- Operating the eRačun B2G platform (since 2019)
- Operating the eRačun B2B monitoring system (since 2026)
- Issuing qualified digital certificates for business use
- Processing annual financial statements
FINA Certificate: FINA issues qualified digital certificates (X.509) required for:
- Signing e-invoices (Fiscalization 2.0)
- Signing B2G e-invoices
- Accessing FINA services
Certificate types:
- Personal certificate (for natural persons)
- Business certificate (poslovni certifikat) — for legal entities
Obtaining a FINA certificate:
- Apply at any FINA office (physical presence required for first issuance)
- Provide business registration documents + OIB
- Issued as .p12 / .pfx file with password
- Valid for 5 years
- Cost: TBD — check www.fina.hr/certifikati
Requirements for Bilko:
- Each Croatian organization in Bilko must upload their FINA certificate
- Certificate stored encrypted (AES-256) in DB
- Certificate password stored separately (encrypted, or in key vault)
- Bilko loads certificate at invoice submission time to generate ZKI and sign
API Overview
| Environment | Base URL |
|---|---|
| Production | https://cis.porezna-uprava.hr/v2 |
| Sandbox | https://cistest.apis-it.hr:8449/FiskalizacijaServiceTest |
Note on protocol: Fiscalization 1.0 used SOAP/WSDL. Fiscalization 2.0 (B2B eRačun) uses REST with UBL 2.1 XML.
Authentication
Authentication for Fiscalization 2.0 uses mutual TLS (mTLS) with FINA certificate:
- Client presents FINA certificate in TLS handshake
- No separate API key required — identity proven by certificate
- Bilko must load .p12 certificate and configure TLS client cert in HTTP client
Key API Operations
| Method | Path | Description |
|---|---|---|
| POST | /racun | Submit invoice for fiscalization |
| GET | /racun/{jir} | Get invoice status by JIR |
| POST | /racun/{jir}/storno | Cancel fiscalized invoice |
UBL 2.1 XML Format — HR-CIUS
- EU Standard: EN 16931 (European e-invoice standard)
- Croatian CIUS: HR-CIUS (Croatian Implementation User Specification)
- CustomizationID: urn:cen.eu:en16931:2017#compliant#urn:fina.hr:croatian-cius:2025
- ProfileID: urn:fdc:peppol.eu:2017:poacc:billing:01:1.0
- InvoiceTypeCode: 380 (Commercial Invoice)
- Currency: EUR (Croatia joined eurozone January 1, 2023)
OIB (Osobni identifikacijski broj)
Croatia uses OIB as the primary tax/company identifier:
- Format: 11 digits
- Validation: ISO 7064 MOD 11,10 check digit algorithm
- Used for both VAT ID and company registration
- In UBL: cbc:CompanyID = HR + OIB (e.g., HR12345678901) in PartyTaxScheme
OIB Validation is already implemented in Bilko (packages/country-hr/src/fisk/index.ts).
Required Invoice Fields
| Field | XML Element | Format | Notes |
|---|---|---|---|
| Invoice number | cbc:ID | String | Sequential per business unit |
| Issue date | cbc:IssueDate | YYYY-MM-DD | |
| Due date | cbc:DueDate | YYYY-MM-DD | |
| Invoice type code | cbc:InvoiceTypeCode | 380 | Commercial invoice |
| Currency | cbc:DocumentCurrencyCode | EUR | Since Jan 1, 2023 |
| Supplier name | cac:AccountingSupplierParty | String | |
| Supplier OIB (VAT) | cac:PartyTaxScheme/cbc:CompanyID | HR + 11 digits | |
| Buyer name | cac:AccountingCustomerParty | String | |
| Tax total | cac:TaxTotal/cbc:TaxAmount | Decimal 2dp |
Croatian VAT Rates (PDV)
| Rate | Category Code | Applies To |
|---|---|---|
| 25% | S | Standard rate — most goods and services |
| 13% | S | First reduced rate — food, accommodation, utilities |
| 5% | S | Second reduced rate — books, medicines, newspapers |
| 0% | Z | Zero rate — intra-EU transport, international transport |
Integration Architecture — How Bilko Calls FISK
Flow:
- Bilko User creates invoice
- Bilko Frontend sends to Bilko API
- invoice.service.ts processes
- FiskalizacijaService (TODO) validates OIB (IMPLEMENTED), generates ZKI (TODO), generates eRačun XML (IMPLEMENTED), signs XML (TODO), POSTs to FISK API (TODO)
- JIR + ZKI returned from Porezna uprava
- Embed JIR in invoice document
- Store JIR, ZKI in Invoice.hrFiskData
Bilko Code Location
| Component | File | Status |
|---|---|---|
| FISK types + placeholder | packages/country-hr/src/fisk/index.ts | PLACEHOLDER |
| OIB validation | packages/country-hr/src/fisk/index.ts | IMPLEMENTED |
| eRačun UBL XML builder | packages/country-hr/src/filing/index.ts | IMPLEMENTED |
| Fiscal year/filing rules | packages/country-hr/src/fiscal/index.ts | IMPLEMENTED |
| ZKI generation | Not yet implemented | TODO |
| FINA cert loading | Not yet implemented | TODO |
| FISK API client | Not yet implemented | TODO |
| invoice.service.ts integration | Not yet implemented | TODO |
| JIR storage in DB | Not yet implemented | TODO (DB migration) |
Implementation Status
| Feature | Status | Notes |
|---|---|---|
| eRačun UBL 2.1 XML generation | IMPLEMENTED | filing/index.ts |
| OIB validation | IMPLEMENTED | fisk/index.ts |
| JIR/ZKI type definitions | IMPLEMENTED | fisk/index.ts |
| ZKI generation algorithm | NOT IMPLEMENTED | Requires FINA cert private key |
| FINA certificate loading | NOT IMPLEMENTED | .p12 parsing needed |
| FISK API client | NOT IMPLEMENTED | Placeholder throws error |
| Get invoice status | NOT IMPLEMENTED | Placeholder throws error |
| invoice.service.ts integration | NOT IMPLEMENTED | Service wiring pending |
| DB fields for JIR/ZKI | NOT IMPLEMENTED | Prisma migration needed |
| Settings UI for FINA cert upload | NOT IMPLEMENTED | Frontend task |
| Country gate (block without cert) | IMPLEMENTED | packages/core/src/country-gate.ts |
Next Steps (Full Production Implementation)
Phase 1 — ZKI Generation (1 week): Implement generateZKI function, write unit tests
Phase 2 — FISK API Client (1-2 weeks): Implement submitInvoiceToFISK, getInvoiceStatus, cancel/storno flow
Phase 3 — Service Integration (1 week): Wire FiskalizacijaService into invoice.service.ts, add DB fields, Prisma migration, Settings UI for FINA cert upload
Phase 4 — Compliance (ongoing): Obtain FINA test certificate, sandbox testing, production certificate, register with Porezna uprava, consult Croatian accounting advisor
Phase 5 — B2G (Optional): eRačun B2G uses FINA eRačun za državu platform (separate endpoint, same UBL 2.1 format, already mandatory since 2019)
Sources
Regulatory Overview
- Croatia Confirms Mandatory B2B E-Invoice 2026 | EDICOM
- Croatia Fiscalization Law | Fintua
- Mandatory e-Invoicing Croatia 2026 | Fiscal Solutions
- Croatia eInvoicing B2B Mandate | VATit
Technical Specifications
- FINA — Financijska agencija (www.fina.hr)
- Porezna uprava — Fiskalizacija (www.porezna-uprava.hr/HR_Fiskalizacija/)
- Croatia B2G e-invoicing 2019 | SEEBURGER
- 2025 Croatia eInvoicing Country Sheet | European Commission
Local source files: - /Users/makinja/business/ALAI-Holding-AS/products/Bilko/docs/regulatory/HR/README.md - /Users/makinja/business/ALAI-Holding-AS/products/Bilko/docs/integrations/hr-fisk-spec.md
BookStack Canonical URL: https://docs.alai.no/books/bilko-hr-market-entry/page/04-regulatory-reference
No comments to display
No comments to display