Docs
8

Bestandsmap

Facturen als bestanden aanleveren.

  • Nog niet in de sandbox

In gewone woorden

De bestandsmap is bedoeld voor ERP’s die alleen bestanden kunnen schrijven: ze zetten facturen in een map, en de dienst stuurt de resultaten als bestanden terug in dezelfde map. Zo hoeft een eindklant geen API-koppeling te bouwen. De dienst bewaakt een map op de machine waarop hij draait. Ze is niet ingeschakeld in de gehoste sandbox, en beveiligde bestandsoverdracht en cloudopslag zijn niet gebouwd.

Een ERP dat alleen bestanden kan schrijven, kan facturen via één map aanleveren. De dienst bewaakt de map en behandelt elk bestand als een indiening: een JSON-bestand zoals POST /invoices, een XML-bestand zoals POST /invoices/xml. De resultaten komen als bestanden terug in dezelfde map.

Nog niet in de sandboxniet in de gehoste sandbox

Opmerking

Nog niet in de sandbox

De bestandsmap bewaakt een lokale map. Ze is niet ingeschakeld in de gehoste sandbox. Er is geen SFTP en geen objectopslag; die zouden we alleen bouwen als een pilot ze nodig heeft.

Instellen

De map wordt ingesteld wanneer de dienst wordt geïnstalleerd. De dienst controleert ze elke seconde en bewaakt niets als er geen map is ingesteld. Een bestand doorloopt dezelfde inname als een API-aanroep, en wordt dus om dezelfde redenen geweigerd.

De bestandsnaam

BestandBehandeld als
INVOICE-REF.jsonPOST /invoices. De inhoud is de JSON-body van die aanroep (zie JSON indienen). Als de body een invoice_ref heeft, moet die gelijk zijn aan de bestandsnaam zonder .json.
INVOICE-REF.ROUTE.xmlPOST /invoices/xml. ROUTE is DE-XRECHNUNG, PEPPOL, FR-PA, PL-KSEF of RO-EFACTURA. De inhoud is het factuurbestand (zie XML indienen).
  • Een factuurreferentie telt maximaal 100 tekens en bevat geen / of \.
  • Een bestand groter dan 5 MB wordt geweigerd.
  • Een naam die met een punt begint, .. bevat of in geen van beide patronen past, blijft onaangeroerd.
  • De Idempotency-Key bestaat uit de eerste 32 tekens van de SHA-256 van het bestand. Een identiek bestand opnieuw in de map zetten is een herhaling, geen tweede factuur.

Wat er terugkomt

Text
drop/
  DE-4711.json            you write this
  status/
    DE-4711-1.json        one file per status event
    DE-4712-error.json    the answer to a refused file
  done/
    DE-4711.json          an accepted file moves here
  failed/
    DE-4712.json          a refused file moves here

Een geaccepteerd bestand gaat naar done/. De statusberichten van de factuur worden naar status/ geschreven, één bestand per bericht, met de naam INVOICE-REF-<sequence>.json. Elk bestand is één item uit het antwoord op GET /invoices/{id}/events. Ze bevatten de hash van de factuur en geen factuurinhoud.

status/DE-4711-1.json
{
  "occurred_at": "2026-10-02T17:17:55.857Z",
  "sequence": 1,
  "environment": "sandbox",
  "invoice_ref": "CAPTURE-JSON-1790961440",
  "document_sha256": "3b41395db498666777b74f9f5b9fae82871720304bc25bbb590e25b7b75ea1d4",
  "event_id": "evt_200c0def79ed702df81d702f",
  "country_route": "DE-XRECHNUNG",
  "invoice_number": "CAPTURE-JSON-1790961440",
  "status": "validated"
}
Eén statusbericht uit een vastgelegd antwoord, hier over meerdere regels; in het bestand staat het op één regel.

De statusberichten die bestaan op het moment dat het bestand wordt geaccepteerd, worden meteen geschreven. Elk later bericht wordt geschreven zodra het binnenkomt, tot de factuur een eindstatus bereikt (accepted, delivered, rejected, validation_failed, dead_letter of cancelled) of er 30 dagen zijn verstreken.

Een geweigerd bestand gaat naar failed/, en status/INVOICE-REF-error.json bevat het antwoord dat de API zou hebben gegeven. Voor een bestand dat geen factuur is, is dat de 422 hieronder. Corrigeer de gegevens en zet het bestand opnieuw in de map, onder dezelfde naam.

status/DE-4712-error.json
{
  "type": "https://eurinvoice.com/problems/validation-failed",
  "title": "The invoice did not pass the checks",
  "errors": [
    {
      "code": "EI-XML-TYPE",
      "fix_hint": "Send the invoice itself, in the format agreed for the route.",
      "who_fixes": "erp",
      "source": "XML-safety",
      "message": "The file is not an invoice in a format this route accepts. Please send the invoice in the agreed format."
    }
  ],
  "status": 422
}
Het antwoord op een `.xml`-bestand dat geen factuur is, uit een vastgelegde aanroep.

Wat hier ontbreekt

  • SFTP en objectopslag.
  • Een manier om de inv_-ID van een geaccepteerde factuur uit de map te lezen. De statusbestanden bevatten invoice_ref en invoice_number.

Op deze pagina