Skip to content
Coming soon 2026

ForgeIT Invoice Portal

One place our products issue from

A central invoicing portal: every product of ours posts a JSON request, and the portal numbers it, does the arithmetic, builds the XML, talks to myDATA and returns a signed answer. One issuing mechanism instead of one per product.

Request a demo Site not public yet
0
Document types, 1.1 to 11.5
0
Point of contact with AADE
M2M
No human in the middle

The problem

Seven products, seven goes at the same hard part

Anything that sells something eventually has to issue a document: numbering that is never reused, integer cents instead of decimals that will not close, XML that passes a real XSD, and an answer from the tax authority that may never arrive. Written seven times, that is seven chances for the totals to disagree — and seven places to re-read every time the law moves.

What we built

One issuer, and a queue between everybody

The Invoice Portal is the only thing that talks to AADE. The other products keep their own commercial records and post a request with a bearer token; the portal stores it, answers 202 and carries on in a queue. ManagoStores has already stopped issuing on its own and goes through here. The whole path is machine-to-machine — nobody copies a number from one screen into another.

Inside the product

What is actually in it

01

One request, one document

The id the site sends is permanent: the same id with the same data is the same document, and the same id with different data is refused. A call that got sent twice does not produce a second invoice.

02

Integers, never decimals

Amounts in cents, quantities in ten-thousandths, rates in basis points, and rounding written out rather than inherited. Totals are recalculated on the server before a number is reserved; what the client sent is never the authority.

03

A number that never comes back

Reserving from a series is one-way. A failure after the reservation retries with the same key instead of taking a fresh number, nothing is ever recycled, and a finalized document cannot be edited or deleted through any path in the application.

04

XML against real XSDs

The official AADE schemas are pinned in the repository with a checksum per file. Validation runs with no DTD and a time limit, and all 21 document types from 1.1 to 11.5 have automated tests over them.

05

"Unknown" is never re-sent

A timeout or an answer we do not trust never produces a second submission. The archived, encrypted, hash-verified response is re-read first; if that is not enough, only a lookup follows. A duplicate document is worse than a delay.

06

A signed callback

The answer goes home with HMAC-SHA256 over a timestamp and the body, to a destination the request itself cannot change. Private addresses, redirects and credentials in a query string are refused before anything leaves.

07

Keys with two abilities

A site key may create and read requests and nothing else, and it is bound to one issuer and one series. The real key exists encrypted only until it has been delivered, and only a verified internal administrator can issue one.

08

Isolation, not a filter

Issuers are kept apart in the authorization, the queries, the validation and the database constraints — never on the screen. A separate support panel sees only what has been explicitly granted, and only while the grant lasts.

09

A security file, not a claim

Risk registers, evidence, incidents, changes, backups and access reviews live inside the product rather than in a Word document. They are shaped to line up with ISO/IEC 27001 — which is not the same thing as being certified, and we never write it as though it were.

Signature decisions

The calls we would defend

Who it is for

Our own products and our own invoices first. The architecture is built for more issuers, but issuing for third parties does not open until the licences that permit it exist.

  • ManagoStores stopped issuing its own invoices and posts them here — and every product we build next will do the same. The part that has to be right is written once.

  • We are not a certified e-invoicing provider and we do not word it anywhere as though we were. Issuing on behalf of third parties is deliberately closed in the code until the licences exist, and the product refuses to open it.

  • A finalized document is never deleted. It is corrected by cancellation or a credit note, which is the only way a book stays a book.

  • On an uncertain outcome the system would rather wait for a person than re-send. A retry is cheap; a duplicate document is not.

Built with

The technology underneath

PHP 8.4 Laravel 13 Filament 5 AADE myDATA Sanctum PostgreSQL 18 Filament Shield TOTP 2FA dompdf Larastan REST API

We Forge your Internet.

Got something that needs forging?

Tell us what you are trying to build. We answer every serious enquiry within 24 hours — usually with questions, sometimes with a rough plan attached.

No sales funnel, no chatbot. An email lands on a developer's desk.