# BR-CO-12 La somma degli oneri deve corrispondere al totale

La somma degli oneri a livello di documento (BT-108) deve essere uguale alla somma di tutti gli importi degli oneri a livello di documento (BT-99): BT-108 = Σ BT-99.

## Descrizione del problema

> **ERRORE**: Regola di calcolo e coerenza EN 16931 (BR-CO)

## Contesto e significato

Questa regola di calcolo EN 16931 alimenta la catena dei totali: BT-108 entra nel totale fattura IVA esclusa (BR-CO-13). Il validatore confronta BT-108 in modo esatto con la somma degli oneri a livello di documento. L’errore nasce tipicamente quando si aggiungono spese di spedizione senza aggiornare BT-108, quando BT-108 è valorizzato senza oneri a livello di documento, oppure quando gli oneri di riga (BG-28) vengono contati in BT-108 pur essendo già inclusi negli importi netti di riga.

## Soluzione

Ricalcola BT-108 come somma esatta di tutti gli importi degli oneri a livello di documento (BT-99) e inseriscila in cbc:ChargeTotalAmount (UBL) o ram:ChargeTotalAmount (CII). Se non ci sono oneri a livello di documento, ometti BT-108 o indica 0,00.

- [Valida XML](/it/xrechnung-validator?source=resource&rule=BR-CO-12)
- [Converti fattura](/it/pdf-to-xrechnung?source=resource&rule=BR-CO-12)

## Esempi validi

- BT-99 = 20,00 e BT-99 = 10,00, BT-108 = 30,00
- Nessun onere a livello di documento e BT-108 assente

## Esempi non validi

- BT-99 = 20,00 e BT-99 = 10,00, ma BT-108 = 25,00
- BT-108 = 3,00 anche se l’unico onere da 3,00 è un onere di riga (BG-28)

## Esempi di codice

### XML valido
```
<cac:AllowanceCharge>
  <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>FC</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Freight charge</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="EUR">20.00</cbc:Amount>
  <cac:TaxCategory>
    <cbc:ID>S</cbc:ID>
    <cbc:Percent>19</cbc:Percent>
    <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
  </cac:TaxCategory>
</cac:AllowanceCharge>
<cac:AllowanceCharge>
  <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>ABL</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Additional packaging</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="EUR">10.00</cbc:Amount>
  <cac:TaxCategory>
    <cbc:ID>S</cbc:ID>
    <cbc:Percent>19</cbc:Percent>
    <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
  </cac:TaxCategory>
</cac:AllowanceCharge>
<cac:LegalMonetaryTotal>
  <cbc:ChargeTotalAmount currencyID="EUR">30.00</cbc:ChargeTotalAmount>
</cac:LegalMonetaryTotal>
```

### XML non valido
```
<cac:AllowanceCharge>
  <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>FC</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Freight charge</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="EUR">20.00</cbc:Amount>
  <cac:TaxCategory>
    <cbc:ID>S</cbc:ID>
    <cbc:Percent>19</cbc:Percent>
    <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
  </cac:TaxCategory>
</cac:AllowanceCharge>
<cac:AllowanceCharge>
  <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReasonCode>ABL</cbc:AllowanceChargeReasonCode>
  <cbc:AllowanceChargeReason>Additional packaging</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="EUR">10.00</cbc:Amount>
  <cac:TaxCategory>
    <cbc:ID>S</cbc:ID>
    <cbc:Percent>19</cbc:Percent>
    <cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
  </cac:TaxCategory>
</cac:AllowanceCharge>
<cac:LegalMonetaryTotal>
  <cbc:ChargeTotalAmount currencyID="EUR">25.00</cbc:ChargeTotalAmount>
</cac:LegalMonetaryTotal>
```

## Campi interessati

- [BT-99 Importo onere a livello di documento](/resources/xrechnung/bt-99-document-level-charge-amount)
- [BT-108 Somma degli oneri a livello di documento](/resources/xrechnung/bt-108-sum-of-charges-on-document-level)

## Regole correlate

- [BR-CO-11](/resources/kosit-validator-errors/br-co-11-sum-of-document-allowances-must-match)
- [BR-CO-13](/resources/kosit-validator-errors/br-co-13-invoice-total-without-vat-must-match-totals-chain)

## Strumenti di validazione

- [Validatore KoSIT ufficiale](https://github.com/itplr-kosit/validator): Esegui il validatore ufficiale KoSIT con la configurazione XRechnung per controllare le regole EN 16931 e XRechnung.
- [Converti PDF in XRechnung](/pdf-to-xrechnung): Individua gli errori di validazione durante la conversione e verifica ogni correzione.

## Risorse correlate

- [Specifiche ufficiali](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-tc434/)
- [Test suite](https://github.com/itplr-kosit/xrechnung-testsuite)
- [Tutti gli errori di validazione](/resources/kosit-validator-errors): Panoramica delle regole di validazione EN 16931, XRechnung e Peppol spiegate qui.
