> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gobl.org/llms.txt
> Use this file to discover all available pages before exploring further.

# EN 16931-1:2017

Key: `eu-en16931-v2017`

Support for the European Norm (EN) 16931-1:2017 standard for electronic invoicing.

This addon ensures the basic rules and mappings are applied to the GOBL document
ensure that it is compliant and easily convertible to other formats.

We strongly recommend checking the output and specifically the extension codes
used to ensure that any assumptions do not need be adjusted.

## Tax Code Extension Mappings

The following tables show how GOBL tax keys/categories are mapped to UNTDID 5305 tax category codes:

### VAT

| GOBL Tax Key    | UNTDID 5305 Code | Description            |
| --------------- | ---------------- | ---------------------- |
| standard        | S                | Standard rate          |
| zero            | Z                | Zero rated goods       |
| exempt          | E                | Exempt from tax        |
| reverse-charge  | AE               | VAT Reverse Charge     |
| intra-community | K                | Intra-community supply |
| export          | G                | Export outside the EU  |
| outside-scope   | O                | Not subject to VAT     |

### Other

For Spanish special territories, **IGIC** (Canary Islands) maps to code **L** and **IPSI** (Ceuta and Melilla) maps to code **M**.
Any other tax category defaults to UNTDID 5305 code **O** (Outside Scope).

## Exemption Notes

Exempt tax categories (E, AE, K, G, O) require either a CEF VATEX code
(`cef-vatex`) on the tax combo, or an exemption note in `tax.notes`.

Exemption notes use the `tax.Note` struct with `cat`, `key`, and `text` fields.
During normalization, the note's `key` is mapped to the corresponding
`untdid-tax-category` extension (e.g. `exempt` → `E`,
`reverse-charge` → `AE`).

Each exempt tax category without a VATEX code must have at least one
exemption note covering it.

## Scenarios

### bill/invoice

<Accordion title="standard">
  **Filters:**

  * **Types:** `standard`

  **Output:**

  * **Extensions:** `untdid-document-type:380`
</Accordion>

<Accordion title="credit-note">
  **Filters:**

  * **Types:** `credit-note`

  **Output:**

  * **Extensions:** `untdid-document-type:381`
</Accordion>

<Accordion title="debit-note">
  **Filters:**

  * **Types:** `debit-note`

  **Output:**

  * **Extensions:** `untdid-document-type:383`
</Accordion>

<Accordion title="corrective">
  **Filters:**

  * **Types:** `corrective`

  **Output:**

  * **Extensions:** `untdid-document-type:384`
</Accordion>

<Accordion title="proforma">
  **Filters:**

  * **Types:** `proforma`

  **Output:**

  * **Extensions:** `untdid-document-type:325`
</Accordion>

<Accordion title="standard, #partial">
  **Filters:**

  * **Types:** `standard`
  * **Tags:** `partial`

  **Output:**

  * **Extensions:** `untdid-document-type:326`
</Accordion>

<Accordion title="standard, #self-billed">
  **Filters:**

  * **Types:** `standard`
  * **Tags:** `self-billed`

  **Output:**

  * **Extensions:** `untdid-document-type:389`
</Accordion>

<Accordion title="credit-note, #self-billed">
  **Filters:**

  * **Types:** `credit-note`
  * **Tags:** `self-billed`

  **Output:**

  * **Extensions:** `untdid-document-type:261`
</Accordion>

<Accordion title="standard, #prepayment">
  **Filters:**

  * **Types:** `standard`
  * **Tags:** `prepayment`

  **Output:**

  * **Extensions:** `untdid-document-type:386`
</Accordion>

<Accordion title="standard, #factoring">
  **Filters:**

  * **Types:** `standard`
  * **Tags:** `factoring`

  **Output:**

  * **Extensions:** `untdid-document-type:393`
</Accordion>

<Accordion title="credit-note, #factoring">
  **Filters:**

  * **Types:** `credit-note`
  * **Tags:** `factoring`

  **Output:**

  * **Extensions:** `untdid-document-type:396`
</Accordion>

## Validation Rules

<AccordionGroup>
  <Accordion title="bill.Invoice">
    | Field                  | Test                                                                                                  | Validation Code / Message                                                                                     |
    | ---------------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
    | <small>Invoice</small> | <ul class="gobl-test"><li>Exemption notes</li></ul>                                                   | `GOBL-EU-EN16931-BILL-INVOICE-08`<br />Exempt tax categories require either a VATEX code or an exemption note |
    | `tax`                  | <ul class="gobl-test"><li class="gobl-test-present">Present</li></ul>                                 | `GOBL-EU-EN16931-BILL-INVOICE-01`<br />Tax details are required with ext and UNTDID document type             |
    | `tax.ext`              | <ul class="gobl-test"><li>Ext require \[untdid-document-type]</li></ul>                               | `GOBL-EU-EN16931-BILL-INVOICE-02`<br />Document type extension is required                                    |
    | `lines`                | <ul class="gobl-test"><li class="gobl-test-present">Present</li></ul>                                 | `GOBL-EU-EN16931-BILL-INVOICE-03`<br />At least one line is required (BR-16)                                  |
    | `supplier.addresses`   | <ul class="gobl-test"><li class="gobl-test-present">Present</li></ul>                                 | `GOBL-EU-EN16931-BILL-INVOICE-04`<br />Supplier addresses are required (BR-8)                                 |
    | `customer.addresses`   | <ul class="gobl-test"><li class="gobl-test-present">Present</li></ul>                                 | `GOBL-EU-EN16931-BILL-INVOICE-05`<br />Customer addresses are required (BR-10)                                |
    | `payment`              | <ul class="gobl-test"><li>Is due standard invoice</li><li class="gobl-test-present">Present</li></ul> | `GOBL-EU-EN16931-BILL-INVOICE-06`<br />Payment details are required when amount is due (BR-CO-25)             |
    | `payment.terms`        | <ul class="gobl-test"><li>Is due standard invoice</li><li class="gobl-test-present">Present</li></ul> | `GOBL-EU-EN16931-BILL-INVOICE-07`<br />Payment terms are required when amount is due (BR-CO-25)               |
  </Accordion>

  <Accordion title="bill.Discount">
    | Field                   | Test                                                                  | Validation Code / Message                                                                                  |
    | ----------------------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
    | <small>Discount</small> | <ul class="gobl-test"><li>Reason or allowance</li></ul>               | `GOBL-EU-EN16931-BILL-DISCOUNT-02`<br />Either a reason or an allowance type extension is required (BR-33) |
    | `taxes`                 | <ul class="gobl-test"><li class="gobl-test-present">Present</li></ul> | `GOBL-EU-EN16931-BILL-DISCOUNT-01`<br />Taxes are required (BR-32)                                         |
  </Accordion>

  <Accordion title="bill.LineDiscount">
    | Field                       | Test                                                    | Validation Code / Message                                                                                      |
    | --------------------------- | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
    | <small>LineDiscount</small> | <ul class="gobl-test"><li>Reason or allowance</li></ul> | `GOBL-EU-EN16931-BILL-LINEDISCOUNT-01`<br />Either a reason or an allowance type extension is required (BR-41) |
  </Accordion>

  <Accordion title="bill.Charge">
    | Field                 | Test                                                 | Validation Code / Message                                                                            |
    | --------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
    | <small>Charge</small> | <ul class="gobl-test"><li>Reason or charge</li></ul> | `GOBL-EU-EN16931-BILL-CHARGE-01`<br />Either a reason or a charge type extension is required (BR-36) |
  </Accordion>

  <Accordion title="bill.LineCharge">
    | Field                     | Test                                                 | Validation Code / Message                                                                                |
    | ------------------------- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
    | <small>LineCharge</small> | <ul class="gobl-test"><li>Reason or charge</li></ul> | `GOBL-EU-EN16931-BILL-LINECHARGE-01`<br />Either a reason or a charge type extension is required (BR-44) |
  </Accordion>

  <Accordion title="pay.Instructions">
    | Field | Test                                                                    | Validation Code / Message                                                              |
    | ----- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
    | `ext` | <ul class="gobl-test"><li>Ext require \[untdid-payment-means]</li></ul> | `GOBL-EU-EN16931-PAY-INSTRUCTIONS-01`<br />Payment means extension is required (BR-49) |
  </Accordion>

  <Accordion title="pay.Terms">
    | Field                | Test                                                       | Validation Code / Message                                                                  |
    | -------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
    | <small>Terms</small> | <ul class="gobl-test"><li>Has due dates or notes</li></ul> | `GOBL-EU-EN16931-PAY-TERMS-01`<br />Either due\_dates or notes must be provided (BR-CO-25) |
  </Accordion>

  <Accordion title="org.Item">
    | Field  | Test                                                                  | Validation Code / Message                                   |
    | ------ | --------------------------------------------------------------------- | ----------------------------------------------------------- |
    | `unit` | <ul class="gobl-test"><li class="gobl-test-present">Present</li></ul> | `GOBL-EU-EN16931-ORG-ITEM-01`<br />Unit is required (BR-23) |
  </Accordion>

  <Accordion title="org.Attachment">
    | Field  | Test                                                                  | Validation Code / Message                                 |
    | ------ | --------------------------------------------------------------------- | --------------------------------------------------------- |
    | `code` | <ul class="gobl-test"><li class="gobl-test-present">Present</li></ul> | `GOBL-EU-EN16931-ORG-ATTACHMENT-01`<br />Code is required |
  </Accordion>

  <Accordion title="org.Party">
    | Field     | Test                                                       | Validation Code / Message                                                          |
    | --------- | ---------------------------------------------------------- | ---------------------------------------------------------------------------------- |
    | `inboxes` | <ul class="gobl-test"><li>Length between 0 and 1</li></ul> | `GOBL-EU-EN16931-ORG-PARTY-01`<br />Cannot have more than one inbox (BT-34, BT-49) |
  </Accordion>

  <Accordion title="org.Inbox">
    | Field                | Test                                                          | Validation Code / Message                                                                  |
    | -------------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
    | <small>Inbox</small> | <ul class="gobl-test"><li>Scheme required with code</li></ul> | `GOBL-EU-EN16931-ORG-INBOX-01`<br />Scheme cannot be blank when code is set (BR-62, BR-63) |
    | <small>Inbox</small> | <ul class="gobl-test"><li>Code required with scheme</li></ul> | `GOBL-EU-EN16931-ORG-INBOX-02`<br />Code cannot be blank when scheme is set                |
  </Accordion>

  <Accordion title="org.Address">
    | Field     | Test                                                                  | Validation Code / Message                                                             |
    | --------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
    | `country` | <ul class="gobl-test"><li class="gobl-test-present">Present</li></ul> | `GOBL-EU-EN16931-ORG-ADDRESS-01`<br />Country is required (BR-9, BR-11, BR-20, BR-57) |
  </Accordion>

  <Accordion title="tax.Combo">
    | Field | Test                                                                                                    | Validation Code / Message                                                                                                           |
    | ----- | ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
    | `ext` | <ul class="gobl-test"><li>Ext require \[untdid-tax-category]</li></ul>                                  | `GOBL-EU-EN16931-TAX-COMBO-01`<br />Tax category extension is required                                                              |
    | `ext` | <ul class="gobl-test"><li>Is VAT</li><li>Ext 'untdid-tax-category' in \[AE, E, G, K, O, S, Z]</li></ul> | `GOBL-EU-EN16931-TAX-COMBO-02`<br />VAT category code must be valid                                                                 |
    | `ext` | <ul class="gobl-test"><li>Is IGIC</li><li>Ext 'untdid-tax-category' in \[L]</li></ul>                   | `GOBL-EU-EN16931-TAX-COMBO-03`<br />Must use IGIC category code                                                                     |
    | `ext` | <ul class="gobl-test"><li>Is IPSI</li><li>Ext 'untdid-tax-category' in \[M]</li></ul>                   | `GOBL-EU-EN16931-TAX-COMBO-04`<br />Must use IPSI category code                                                                     |
    | `ext` | <ul class="gobl-test"><li>Is outside scope</li><li>Ext 'untdid-tax-category' in \[O]</li></ul>          | `GOBL-EU-EN16931-TAX-COMBO-05`<br />Must use outside scope category code                                                            |
    | `ext` | <ul class="gobl-test"><li>Is exempt</li><li>Ext require \[cef-vatex]</li></ul>                          | `GOBL-EU-EN16931-TAX-COMBO-06`<br />VATEX extension is required for exempt tax (BR-E-10)                                            |
    | `ext` | <ul class="gobl-test"><li>Is non-exempt</li><li>Ext exclude \[cef-vatex]</li></ul>                      | `GOBL-EU-EN16931-TAX-COMBO-07`<br />VATEX extension must not be set for standard, zero, IGIC, or IPSI categories (BR-S-10, BR-Z-10) |
  </Accordion>
</AccordionGroup>
