Skip to content

E-invoicing for purchases: Peppol, XRechnung and Factur-X

Atta reads and writes e-invoices in the EN 16931 model and its formats: Peppol BIS 3, XRechnung, UBL, CII and Factur-X or ZUGFeRD. It sends purchase orders to suppliers over Peppol and receives their invoices. Each received invoice is matched to your purchase by the PO number it names, never by supplier alone.

Updated November 6, 2026 · By

Model, format and channel

An e-invoice is three separate things, and most vendors sell them as one bundle. Atta keeps them apart.

LayerWhat it answersIn Atta
ModelWhat does the invoice say?One EN 16931 model, with amounts as decimal strings and never floats
FormatHow is it written?A table of formats, each with a reader and a writer
ChannelHow does it travel?Transports behind one port: Peppol access point, email, upload

A format with no row in the table is refused. A new country is a new row, not new code paths through the app.

Formats it reads and writes

  • Peppol BIS Billing 3.0 and the PINT variants
  • XRechnung, in UBL and CII
  • Plain EN 16931 in UBL and CII, which covers the XML inside Factur-X and ZUGFeRD
  • Factur-X PDF, read-only
  • Peppol Order, Invoice Response, and the model's own JSON

Validation failures on a document Atta sends come back with the rule ids, so the fix is a field, not a guess.

Receiving an invoice

An invoice arrives over Peppol or as an uploaded EN 16931 file. Atta stores the payload exactly as it travelled before anything reads it, then records a received event. Status on the /invoices page is the fold of the events on a document, never a column someone can overwrite.

Matching works by the purchase order. Atta looks at the order reference on the invoice (BT-13), then the invoice's contract reference (BT-10), and compares them with your request PO numbers and inbound shipment numbers. If one purchase matches, the invoice becomes that request's invoice row, and the three-way match of order, receipt and invoice reads it the same as one typed from paper.

Invoice from Northfield Supply, via Peppol: order reference PO-2026-0412, total 2,480.00 EUR

Atta: Matched to PO-2026-0412, Warehouse restock. The PO was 2,480.00 EUR and the receipt was complete. Waiting on Dana to accept.

Matching by the supplier's name or VAT number alone never links a purchase. A supplier can have a dozen open orders, so the supplier is recorded but the link needs the PO. An invoice that doesn't match one purchase goes to an inbox, and a person links it. That person is recorded as how it was matched.

Answering an invoice

A person with checkout rights can accept, query or reject a received invoice, or mark it paid. If the invoice arrived over Peppol, Atta sends a Peppol Invoice Response. For an invoice that came another way, the answer is recorded here and not sent. A response from a counterparty moves a document only when it comes from that document's own party, because document numbers are sequential and easy to guess.

Sending

Atta sends the purchase order as a Peppol Order from an inbound shipment, using the PO number as the order number. That number is what comes back as BT-13 on the invoice. It can also issue an invoice for a sale outbound, numbered INV-2026-0003 from its own sequence.

Where a document may go is decided by a table of mandates for each country. If a mandate calls for a channel and no transport is configured for it, the send is refused. It doesn't fall back to email. A document is stored before it's sent, and retries use the stored payload.

Identity and the access point

Settings has an e-invoicing page for the legal entity, VAT number, registration, Peppol id, address, payment details and a route preference. A Peppol lookup asks the supplier's SMP whether they're on the network and what they accept.

The access point key belongs to the platform, so claiming a company id or a Peppol endpoint is never a form field. An operator assigns the access point account to a workspace and verifies the endpoint with a script. An endpoint has one holder and routes inbound mail only once it's verified.

What the agent does

The agent reads. findInvoices returns invoices sent and received, their status and the purchase each is matched to. It never sends or answers one. Sending and answering are Server Actions behind the checkout capability.

Notifications for a received invoice and for an unmatched one carry the same redacted summary as the inbox. Logs hold ids, formats, statuses and amounts, never a line item or a party's name.

See Peppol for sending and receiving, and procure-to-pay for where the invoice sits in the flow.

Questions

Which e-invoice formats does Atta support?

Peppol BIS 3 and PINT, XRechnung in UBL and CII, plain EN 16931 UBL and CII (the XML in Factur-X and ZUGFeRD), and the model's JSON. It reads Factur-X PDFs.

How does Atta match an invoice to a purchase?

By the PO number the invoice names: the order reference (BT-13) first, then BT-10. A supplier match on its own never links a purchase. If nothing matches, the invoice waits in an inbox for a person.

Does Atta send invoices on its own?

No. The agent can look up invoices but never sends or answers one. People with the checkout capability send and answer from the invoices page.

Is Atta a Peppol access point?

No. It sends and receives through an access point service, and the access point account is assigned to your workspace by the operator.

Related