From 1 January 2027 e-invoicing becomes mandatory for taxpayers outside the VAT system too

Croatian e-invoicing
inside your Laravel app.

Generate valid UBL 2.1 XML under HR CIUS 2025, check all 62 official rules, and store documents in an archive with 11-year retention - without hand-writing XML.

Buy Pro · 79 € + VAT Start with the free package

Laravel 11–13, Filament v5, PHP 8.3+

Perpetual licence, no subscription

All 62 official HR CIUS rules

No activation, no licence server

Open-source core (MIT)

Runs entirely locally, sends no data

Documentation in Croatian and English

Integration is just two methods

The seller and the operator come from config, because they are identical on every document. The builder derives the amounts, the VAT breakdown and the Croatian extension. You describe only what your application alone knows.

class Invoice extends Model
{
    use MapsToEracun;

    protected function eracunBuyer(): Party
    {
        return self::eracunPartyFrom($this->customer);
    }

    protected function eracunLines(): iterable
    {
        foreach ($this->items as $item) {
            yield [
                'name'      => $item->description,
                'quantity'  => (string) $item->quantity,
                'unitPrice' => (string) $item->unit_price,
                'kpd'       => $item->kpd_code,
            ];
        }
    }
}
$invoice->toEracunXml();      // HR CIUS UBL, ready for a provider
$invoice->validateEracun();   // all 62 rules, before sending
$invoice->storeEracun();      // into the archive, linked to the model

Who eRačun Pro is for

For anyone issuing e-invoices from their own application. If a provider's web portal or the free government app is enough for you, you do not need this - and that is fine.

SaaS product

You bill Croatian companies from your own Laravel application. Add e-invoicing without writing UBL or learning the HR CIUS specification.

Software house or agency

Your clients must issue e-invoices from 2026, or 2027. The Agency licence covers an unlimited number of client projects.

In-house ERP

The invoices already exist in your system. What is missing is the format, validation before sending, and an archive that survives 11 years of retention.

Freelance developer

A client asks for e-invoicing and the specification runs to 200 pages. Bill for the integration, not for weeks spent reading Schematron.

Why e-invoices fail validation

The Croatian rules add fields EN 16931 does not have. Each one is a rejected invoice.

HR-BT-4 / HR-BT-5

The operator is mandatory

The name and tax number of the person who issued the invoice. EN 16931 has no such field, so most applications do not record it. Solved once, in config.

HR-BR-33

Empty elements break the document

Jedan <cbc:Note/> and an otherwise perfect document is rejected. The writer never emits an empty element.

HR-BR-27 · 32 · 54 · 55

The amounts must reconcile

Six rules check nothing but the agreement of base, VAT and the Croatian extension. The builder derives them from your lines, so they hold by construction.

HR-BR-CL-2

KPD is not the DZS catalogue

Only 3,359 six-digit codes are valid on a line, not the catalogue's 5,828. Validation runs against the list inside the official validator.

ext-2025

A second tax tree

HR CIUS is not only a restriction - it adds a parallel amount structure. Required for everyone outside the VAT system, which is the whole 2027 cohort.

HR-BR-4

Credit notes flip the sign

let varijabla variable thirty lines above the assertion multiplies the amount by −1. Without it every credit note reports a false error.

A built-in e-invoice archive

Issued and received documents in one place, with a rendering, the original XML and the list of broken rules.

The XML is the record, columns are a projection

The original bytes are stored verbatim with their SHA-256. Retention runs eleven years and is counted from the issue date, not from the row being written - a backfilled import must not restart the clock. The pruning command refuses to touch anything inside the window.

A broken document is still stored

Violations are recorded alongside the document but never block the write. A received invoice arrives whether or not it is correct, and refusing it is a decision you make through the workflow, with reason codes N, U and O. Rejecting at the door would destroy the evidence.

Re-importing is not an error

Duplicates are detected by the e-invoice identity - issuer tax number, document number and issue date. A watched folder rescanning returns the existing row instead of raising.

Verified against the official source

All 62 rules were diffed against the published Schematron run under Saxon: 20 documents, 0 disagreements. Messages carry the official rule identifiers, so they match what your provider sends back.

What it looks like

Captured from a real Filament v5 application in Croatian. Click a screenshot to enlarge it.

The archive. Issued and received on one list. The "Pravila" column shows which document will be rejected - here one with three violations.
The document. Lines, KPD codes and the VAT breakdown, as the recipient sees them too.
The source XML. Exactly as exchanged, with its checksum and a download.
Rule violations. They carry the official rule codes - the same ones a posrednik returns, so you know what to fix before the document leaves.
Import. Received XML lands in the archive even when it fails the rules - the violations are recorded against the document.
The KPD picker. For your own forms - it offers only codes valid on an invoice line.

Pricing

No keys, no activation, no server checking a licence. Access to the private repository is the licence - nothing phones home and nothing stops working.

Free

0 €

Open source, MIT. For developers.

  • ✓ Read and write UBL 2.1 (HR CIUS 2025)
  • ✓ Builder that derives the amounts
  • ✓ All 62 rules + a coverage report
  • ✓ Code lists: KPD, units, payment means
  • ✓ Rendering in Croatian and English
On GitHub
For your own projects

Pro

79 € + VAT · one-time

For your company's own projects, with no limit on installations or developers.

  • ✓ Everything in the free package
  • ✓ Map your own Eloquent models
  • ✓ Archive with retention and checksum
  • ✓ Filament resource: issued and received
  • ✓ Import: upload, folder, mailbox
  • ✓ Rejection with codes N / U / O
  • ✓ KPD picker for your forms
  • ✓ Perpetual licence
  • ✓ One year of updates
  • ✓ Unlimited projects inside your company
  • ✓ No activation, no subscription
Buy Pro · 79 € + VAT

Agency

249 € + VAT · one-time

If you embed e-invoicing in a product you sell to clients.

  • ✓ Everything in Pro
  • ✓ Unlimited client projects
  • ✓ Embed in your own product
  • ✓ Priority response to bug reports
  • ✓ Perpetual licence
  • ✓ One year of updates
  • ✓ No activation, no subscription
Buy Agency · 249 € + VAT

Prices exclude VAT. Polar.sh is merchant of record and charges VAT for your country, so the checkout total is higher - VAT-registered businesses reclaim it as input tax. Tick "I'm purchasing as a business" at checkout and enter your VAT number so the invoice is issued to the company. Licensed to businesses only - see the licence terms.

What this package does not do

Deliberately, and it will not change. Better to know the boundary in advance than to find it in production.

No fiscalisation, no signing. Those need a digital certificate. The package handles no certificates, stores none, and connects to no government system.

Not a transmission provider. Transport adapters call a provider's public API with your credentials under your contract. That is ordinary integration.

A business-rule validator, not a conformance validator. Passing does not guarantee acceptance. The package reports what it checks and what it does not.

Makes nobody compliant with the Croatian fiscalisation act. It processes documents; compliance is yours.

Questions

Do I need this if I already have a provider?

A provider transmits the document. It does not build it from your data, does not keep it in your application, and does not check it before you send. If their web portal is enough, you do not need this. If invoices originate in your application, you do.

Does it work without Filament?

Model mapping, the archive and validation all work without Filament, which is only needed for the interface. The free package does not even depend on Laravel.

What happens when the rules change?

They will - the Schematron in force since 15 March 2026 is itself a revision published after the mandate began. A licence includes a year of updates; after that the package keeps working and updates can be renewed.

How does the licence work, and is there activation?

There is none. After purchase you get access to a private GitHub repository and add it as a vcs repository in composer.json. No key, no outbound calls, and no scenario where a deploy stops because a licence server was unreachable.

How does buying work, and when do I get access?

Polar handles the sale as merchant of record and issues the invoice. If you buy as a company, tick I'm purchasing as a business and enter your VAT number with the country prefix - HR12345678901, not just 12345678901. Without the prefix the VIES check fails. Straight after payment you connect your GitHub account, and the invitation to the private repository arrives within a minute.

How many developers does a licence cover?

One licence covers one company - invite whoever you need. The Agency licence adds the right to embed it in a product you sell to clients.

Does it work with Laravel 12 and 13?

Yes. Laravel 11, 12 and 13 are supported, with Filament v5 and PHP 8.3 or newer. Tests run against both the lowest and the highest supported dependency versions.

Do I need a digital certificate?

No. The package neither signs documents nor performs fiscalisation, so no certificate is needed and none is ever handled. A certificate is only required for signing and fiscalisation, which your transmission provider does.

Does the package need internet access?

No. Generation, validation, rendering and the archive all run entirely inside your application. There is no licence check, no outbound call, and no invoice data ever leaves your system. Internet is only needed if you use a transmission adapter.

Can I use one licence across several projects?

The Pro licence covers unlimited projects and installations inside your own company. If you embed the package in products or projects you deliver to clients, you need the Agency licence.

Does it support sellers outside the VAT system?

Yes - that is precisely the case requiring the Croatian extension (ext-2025), which the package emits automatically when the seller is outside the VAT system.

Worth distinguishing who buys: a very small trader usually uses the free government application. This package is bought by whoever builds the software such taxpayers invoice with.

Can I try it first?

The free package is the whole document mechanism - reading, building, validation and rendering - and ships four official example invoices. If it does what you need, you do not need Pro.