# CRP20268

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

> El campo BaseP que corresponde a Traslado, no es igual a la suma de los importes de las bases registrados en los documentos relacionados donde el impuesto del documento relacionado sea igual al campo ImpuestoP de este elemento y la TasaOCuotaDR del documento relacionado sea igual al campo TasaOCuotaP de este elemento (falta un TrasladoP).

- 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: `pago20:Pagos/pago20:Pago`
- Test: `every $t in $transfers satisfies $summary[@ImpuestoP = $t/@ImpuestoDR and @TipoFactorP = $t/@TipoFactorDR and mx:dec(@TasaOCuotaP) = mx:dec($t/@TasaOCuotaDR)]`

> El campo BaseP que corresponde a Traslado, no es igual a la suma de los importes de las bases registrados en los documentos relacionados donde el impuesto del documento relacionado sea igual al campo ImpuestoP de este elemento y la TasaOCuotaDR del documento relacionado sea igual al campo TasaOCuotaP de este elemento (…, documentos …).

- 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: `pago20:ImpuestosP/pago20:TrasladosP/pago20:TrasladoP`
- Test: `$exempt or abs(mx:dec(@BaseP) - $bases) le $unit`

In English: A payment's BaseP must be the sum of its related documents' BaseDR with the same tax, factor and rate, each divided by its EquivalenciaDR; every tax, factor and rate of the related documents needs its TrasladoP. Compared within one unit of the payment's currency.

## Why it fails

- The bases of an invoice in dollars added to a payment in pesos without converting them.
- The receipt's taxes copied from the invoice when it pays only part of it.

## How to fix it

- For each related document divide BaseDR and ImporteDR by EquivalenciaDR, add them up by tax, factor and rate, and write one TrasladoP per combination.

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