# PEPPOL-EN16931-R130 Le code d’unité de la quantité de base du prix doit être identique à celui de la quantité facturée

Selon la règle Peppol PEPPOL-EN16931-R130, lorsque le code d’unité de mesure de la quantité de base du prix figure dans BT-150 (attribut unitCode sur BaseQuantity), il doit être rigoureusement identique au code d’unité de la quantité facturée dans BT-130 (attribut unitCode sur InvoicedQuantity). L’utilisation d’unités hétérogènes sur une même ligne crée une ambiguïté dans le calcul du prix unitaire.

## Description du problème

> **ERREUR**: Règle Peppol BIS Billing 3.0 (OpenPeppol)

## Contexte et importance

PEPPOL-EN16931-R130 ne s’applique que si cbc:BaseQuantity est présent et compare son unitCode à celui de la quantité facturée. Des unités différentes sur une même ligne rendent le calcul du prix unitaire ambigu, par exemple une quantité en heures avec un prix par pièce. L’erreur survient surtout lorsque la liste de prix utilise une autre unité que la ligne de commande, ou lorsqu’une unité par défaut comme C62 est écrite dans BaseQuantity.

## Solution

Dans votre catalogue produits ou vos tables de conversion d’unités, alignez l’unité de la quantité de base du prix (BT-150) sur l’unité de facturation de la ligne (BT-130). En UBL 2.1, vérifiez que <cbc:BaseQuantity unitCode="H87"> porte le même attribut unitCode que <cbc:InvoicedQuantity unitCode="H87">. Si le prix s’entend pour une seule unité, vous pouvez omettre cbc:BaseQuantity.

- [Valider le XML](/fr/xrechnung-validator?source=resource&rule=PEPPOL-EN16931-R130)
- [Convertir la facture](/fr/pdf-to-xrechnung?source=resource&rule=PEPPOL-EN16931-R130)

## Exemples valides

- InvoicedQuantity unitCode = « H87 » (pièce) et BaseQuantity unitCode = « H87 » (pièce)
- InvoicedQuantity unitCode = « HUR » (heure) et BaseQuantity unitCode = « HUR » (heure)

## Exemples invalides

- InvoicedQuantity spécifié en « HUR » (heures) tandis que BaseQuantity indique unitCode = « C62 » (unité)
- InvoicedQuantity spécifié en « KGM » (kilogrammes) tandis que BaseQuantity indique unitCode = « LTR » (litres)

## Exemples de code

### XML valide
```
<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="H87">100</cbc:InvoicedQuantity>
  <cac:Price>
    <cbc:PriceAmount currencyID="EUR">50.00</cbc:PriceAmount>
    <cbc:BaseQuantity unitCode="H87">100</cbc:BaseQuantity>
  </cac:Price>
</cac:InvoiceLine>
```

### XML invalide
```
<cac:InvoiceLine>
  <cbc:ID>1</cbc:ID>
  <cbc:InvoicedQuantity unitCode="H87">100</cbc:InvoicedQuantity>
  <cac:Price>
    <cbc:PriceAmount currencyID="EUR">50.00</cbc:PriceAmount>
    <cbc:BaseQuantity unitCode="C62">100</cbc:BaseQuantity>
  </cac:Price>
</cac:InvoiceLine>
```

## Champs concernés

- [BT-130 Code unité de mesure de la quantité facturée](/resources/xrechnung/bt-130-invoice-line-quantity-unit-of-measure-code)
- [BT-150 Code unité de mesure de la quantité de base du prix](/resources/xrechnung/bt-150-item-price-base-quantity-unit-code)
- [BG-25 Ligne de facture](/resources/xrechnung/bt-126-invoice-line-identifier)

## Règles associées

- [BR-23](/resources/kosit-validator-errors/br-23-invoice-line-unit-code-must-be-present)
- [BR-26](/resources/kosit-validator-errors/br-26-invoice-line-item-net-price-must-be-present)
- [PEPPOL-EN16931-R120](/resources/kosit-validator-errors/peppol-en16931-r120-line-net-amount-formula)

## Outils de validation

- [Validateur KoSIT officiel](https://github.com/itplr-kosit/validator): Exécutez le validateur officiel du KoSIT avec la configuration XRechnung pour contrôler les règles EN 16931 et XRechnung.
- [Convertir un PDF en XRechnung](/pdf-to-xrechnung): Repérez les erreurs de validation pendant la conversion et vérifiez chaque correction.

## Ressources associées

- [Spécification officielle](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/)
- [Suite de tests](https://github.com/itplr-kosit/xrechnung-testsuite)
- [Toutes les erreurs de validation](/resources/kosit-validator-errors): Vue d’ensemble des règles de validation EN 16931, XRechnung et Peppol expliquées ici.
