Docs
12

Mappingversies

Hoe de veldnamen van een ERP onze factuur worden, en hoe versies veranderen.

  • In de sandbox

In gewone woorden

Een mapping vertaalt de veldnamen van één ERP naar ons factuurmodel; zo kan een fout het veld noemen in de eigen export van de eindklant. Als de veldnamen van een eindklant veranderen, voegen we een nieuwe versie toe en bewaren we de oude, zodat we kunnen terugkeren. Business Central en SAP Business One hebben een mapping, elk gemaakt op basis van de gepubliceerde vorm van het ERP en nog niet van een eigen export van een eindklant.

Een mapping zet één ERP-export om in onze canonieke factuur. Als de veldnamen van een eindklant veranderen, voegen we een nieuwe versie toe en verplaatsen we de live pointer. De oude versie blijft bestaan, zodat de pointer terug kan.

Wat er momenteel bestaat

Twee ERP’s hebben een mapping: Business Central (de verkoopfactuur van de API v2.0) en SAP Business One (een factuur of creditnota zoals de Service Layer ze teruggeeft). Elk heeft een live versie, en oudere versies blijven bestaan.

Opmerking

Beide mappings zijn geschreven op basis van de gepubliceerde vorm van het ERP en getest op verzonnen exports, omdat er nog geen export van een eindklant bestaat. Een eindklant van wie de export andere namen gebruikt, krijgt een nieuwe versie. Niets hier vraagt de eindklant om het ERP te wijzigen.

Een export gaat naar POST /validate of POST /invoices, met connector en export in plaats van document.

Een export versturen

POST /validate neemt connector (business-central of sap-b1) en export (het exportobject) aan in plaats van document; POST /invoices neemt dezelfde twee velden aan. Velden die de mapping niet kent, worden genegeerd. Het rapport vermeldt in mapping_version welke versie is uitgevoerd. Het verzoek is validate-export-ok.json, een export met verzonnen partijen.

curl -X POST "https://api-sandbox-eu.eurinvoice.com/validate" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  --data-binary @validate-export-ok.json
Antwoord200 OK
{
  "valid": true,
  "route": "DE-XRECHNUNG",
  "documents": [
    {
      "sha256": "3e7f648bdc6c6d6f5ad78cd356b39c3020595bb7f0896b78a8510ec6969db317",
      "kind": "xrechnung-ubl",
      "content_base64": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgi... (5,900 characters, shortened for these docs)"
    }
  ],
  "layers": [
    {
      "findings": [],
      "passed": true,
      "layer": "schema"
    },
    {
      "findings": [],
      "passed": true,
      "layer": "mapping"
    },
    {
      "findings": [],
      "passed": true,
      "layer": "pre-check"
    },
    {
      "findings": [],
      "passed": true,
      "layer": "kosit"
    }
  ],
  "mapping_version": "v2"
}
Vastgelegd op 7 okt. 2026. Een verzonnen factuur, via de live versie.

Een andere versie proberen

mapping_version in het verzoek kiest een versie voor die aanroep. De pointer blijft staan. Een versie die niet bestaat, geeft 400. Het verzoek is validate-export-bad-version.json, dezelfde export met "mapping_version": "v9".

curl -X POST "https://api-sandbox-eu.eurinvoice.com/validate" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  --data-binary @validate-export-bad-version.json
Antwoord400 Bad Request
{
  "detail": "That mapping version does not exist. The live pointer was left unchanged.",
  "type": "https://eurinvoice.com/problems/bad-request",
  "title": "The request could not be read",
  "status": 400
}
Vastgelegd op 7 okt. 2026.

Het veld in het ERP vinden

Een bevinding noemt het veld van het ERP, niet ons canonieke veld. Een eenheid die de mapping niet kent, lossen wij op: we voegen ze toe aan de eenhedentabel en brengen een nieuwe versie uit. Het verzoek is validate-export-bad-unit.json, waarin Kiste niet in de tabel staat.

curl -X POST "https://api-sandbox-eu.eurinvoice.com/validate" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type: application/json" \
  --data-binary @validate-export-bad-unit.json
Antwoord200 OK
{
  "valid": false,
  "route": "DE-XRECHNUNG",
  "layers": [
    {
      "findings": [],
      "passed": true,
      "layer": "schema"
    },
    {
      "findings": [
        {
          "code": "BR-CL-23",
          "field": "salesInvoiceLines[0].unitOfMeasureCode",
          "fix_hint": "Add the ERP's unit to the client's unit mapping table (for example 'Std.' to HUR).",
          "who_fixes": "us",
          "source": "mapping",
          "message": "A unit of measure on a line is not recognised. We are adding it to your mapping."
        }
      ],
      "passed": false,
      "layer": "mapping"
    },
    {
      "findings": [],
      "passed": true,
      "layer": "pre-check"
    }
  ],
  "mapping_version": "v2"
}
Vastgelegd op 7 okt. 2026.

Ontbrekende gegevens moet de partner aanvullen. De bevinding daarvan heeft who_fixes op erp en noemt het ERP-veld dat moet worden ingevuld.

Hoe een wijziging live gaat

  1. We kopiëren de live versie naar een nieuwe versie en wijzigen die. De oude blijft bestaan.
  2. We sturen de voorbeeldexports van de eindklant met mapping_version op de nieuwe versie, terwijl de oude live blijft.
  3. We zetten de live pointer op de nieuwe versie.
  4. Als er iets fout is, zetten we hem terug.

Op deze pagina