Skip to content
← All work
Internal toolLiveWeb

Invoice Manager

EU-compliant invoicing that survives an accountant reading it.

A full-stack invoicing application for a Cyprus company trading across the EU: line-item VAT, reverse charge for B2B, configurable yearly numbering, and A4 PDF output carrying the legal text Directive 2006/112/EC actually requires. Built because the off-the-shelf options got reverse charge wrong.

Invoicing looks like a solved problem until you trade across EU borders. Then you need per-line VAT rates, a correct reverse-charge decision for B2B customers in other member states, the legal wording that decision obliges you to print, and an invoice number that is sequential, gapless and stable forever.

Reverse charge, correctly

When the customer is VAT-registered in another member state the invoice carries no VAT and prints the Article 196 reference. Both parties' VAT numbers appear, as Article 226 requires. This is the part that most cheap invoicing tools get wrong, and it is the reason this application exists.

Numbers that do not move

The default format is configured once — {YYYY}-{NNN} produces 2026-003 for the third invoice of the year — and the sequence resets each January. A different format can be chosen for an individual invoice. Crucially, an issued number is stored as a final string: changing the default later never reformats history, because an invoice number that changes after issue is a defect an auditor will find.

Proof

Forty-two unit tests cover the VAT and numbering logic; twenty-nine end-to-end tests drive a real Chromium browser through creating, editing and exporting invoices. The PDF path is exercised, not assumed.

Capabilities

Per-item VAT

Rates of 0, 5, 9, 19, 21 and 25 percent applied per line, with the breakdown printed on the document.

Reverse charge

Automatic zero-rating and the Article 196 legal text for VAT-registered EU B2B customers, with both VAT numbers shown.

Configurable numbering

Tokens for year, month, day and a sequence of any width, resetting annually. Issued numbers are immutable.

A4 PDF export

Print-ready output carrying every field Article 226 requires, including payment terms.

Client and company records

Clients, company details, VAT number and IBAN managed in the app rather than pasted into a template.

Status lifecycle

Draft, sent, paid, overdue and cancelled, so the list doubles as an accounts-receivable view.

Screens

What it looks like in use.

Select any screen to view it full size. Use the arrow keys to move between screens and Escape to close.

  • The list doubles as an accounts-receivable view: status, total and the year's sequence at a glance.
  • Line items carry their own VAT rate; reverse charge switches the whole document when the customer qualifies.
  • A4 output with the full Article 226 field set and the reverse-charge wording where it applies.
  • Company details, VAT number, IBAN and the default numbering format.

Next step

Tell us what is broken or what should exist.

Send the shape of the problem and any constraints you already know — budget, deadline, the stack you are stuck with. You will get a written reply from the engineer who would do the work, not a sales sequence.