# CFDI40215

Source: https://xmlvalid.com/rules/CFDI40215

> El campo Importe correspondiente a Traslado no es igual al redondeo de la suma de los importes de las bases trasladados registrados en los conceptos donde el impuesto del concepto sea igual al campo impuesto de este elemento y la TasaOCuota del concepto sea igual al campo TasaOCuota de este elemento (falta un Traslado en el resumen de impuestos).

- Level: error
- Rule sets: SAT validations of CFDI 4.0 and Pagos 2.0 Matrices of 25 March 2026 and Pagos 2.0 rev. B
- Context: `/cfdi:Comprobante`
- Test: `$type = ('T', 'P') or (every $t in $transfers satisfies $summary[@Impuesto = $t/@Impuesto and @TipoFactor = $t/@TipoFactor and mx:dec(@TasaOCuota) = mx:dec($t/@TasaOCuota)])`

> El campo Importe correspondiente a Traslado no es igual al redondeo de la suma de los importes de las bases trasladados registrados en los conceptos donde el impuesto del concepto sea igual al campo impuesto de este elemento y la TasaOCuota del concepto sea igual al campo TasaOCuota de este elemento (Base …, conceptos …).

- Level: error
- Rule sets: SAT validations of CFDI 4.0 and Pagos 2.0 Matrices of 25 March 2026 and Pagos 2.0 rev. B
- Context: `/cfdi:Comprobante/cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado`
- Test: `$factor = 'Exento' or abs(mx:dec(@Base) - $bases) le $half`

In English: The Base of a transferred tax in the summary must be the sum of the lines' bases with the same tax, factor and rate, rounded to the currency's decimals; every tax, factor and rate on the lines needs its Traslado in the summary.

## Why it fails

- The summary groups by tax only, while it groups by tax, TipoFactor and TasaOCuota: VAT at 16 % and at 0 % are two Traslado elements.
- A line's tax changed after the summary was computed.

## How to fix it

- Write one summary Traslado for each combination of Impuesto, TipoFactor and TasaOCuota on the lines, with their bases and amounts added up and rounded once.

Validate a document against these rules: https://xmlvalid.com/validate
