Every check our CFDI validator runs

This page lists the 437 checks the engine runs, generated straight from its source code: it never promises a rule the validator doesn't actually run.

Summary by family

Structure and required fields

32 checks

CodeWhat it checksSeverity
CFDI40101Date does not have the correct format (YYYY-MM-DDThh:mm:ss).
error
CFDI40110Descuento () cannot be greater than SubTotal ().
error
CRP20107CondicionesDePago must not exist in Payment type vouchers.
error
CRP20108Descuento must not exist in Payment type vouchers.
error
DEPRECATED_VERSIONCFDI version 3.3 is no longer valid for issuance. Only version 4.0 is accepted.
warning
INVALID_VERSIONThe CFDI version is not supported; only 3.3 and 4.0 are accepted.
error
MISSING_ATTR_FECHAMissing required attribute 'Fecha' in the Comprobante node.
error
MISSING_ATTR_LUGAREXPEDICIONMissing required attribute 'LugarExpedicion' in the Comprobante node.
error
MISSING_ATTR_MONEDAMissing required attribute 'Moneda' in the Comprobante node.
error
MISSING_ATTR_SUBTOTALMissing required attribute 'SubTotal' in the Comprobante node.
error
MISSING_ATTR_TIPODECOMPROBANTEMissing required attribute 'TipoDeComprobante' in the Comprobante node.
error
MISSING_ATTR_TOTALMissing required attribute 'Total' in the Comprobante node.
error
MISSING_CONCEPTO_CANTIDADMissing 'Cantidad' attribute in a Concepto.
error
MISSING_CONCEPTO_CLAVEPRODSERVMissing 'ClaveProdServ' attribute in a Concepto.
error
MISSING_CONCEPTO_CLAVEUNIDADMissing 'ClaveUnidad' attribute in a Concepto.
error
MISSING_CONCEPTO_DESCRIPCIONMissing 'Descripcion' attribute in a Concepto.
error
MISSING_CONCEPTO_IMPORTEMissing 'Importe' attribute in a Concepto.
error
MISSING_CONCEPTO_OBJETOIMPMissing 'ObjetoImp' attribute in a Concepto.
error
MISSING_CONCEPTO_VALORUNITARIOMissing 'ValorUnitario' attribute in a Concepto.
error
MISSING_EMISOR_NOMBREMissing Issuer Name.
error
MISSING_EMISOR_REGIMENMissing Issuer Tax Regime.
error
MISSING_EMISOR_RFCMissing Issuer RFC.
error
MISSING_EXPORTACIONMissing required attribute 'Exportacion' (required in CFDI 4.0).
error
MISSING_RECEPTOR_DOMICILIOMissing Receiver Tax Domicile (required in CFDI 4.0).
error
MISSING_RECEPTOR_NOMBREMissing Receiver Name.
error
MISSING_RECEPTOR_REGIMENMissing Receiver Tax Regime (required in CFDI 4.0).
error
MISSING_RECEPTOR_RFCMissing Receiver RFC.
error
MISSING_RECEPTOR_USOCFDIMissing Receiver CFDI Usage.
error
MISSING_VERSIONMissing 'Version' attribute in Comprobante node.
error
NO_COMPROBANTERoot node 'Comprobante' not found in the XML.
error
NO_CONCEPTOSNo line items (Conceptos) found in the CFDI.
error
XML_PARSE_ERRORThe file is not valid XML.
error

SAT catalogs

32 checks

CodeWhat it checksSeverity
CFDI40103FormaPago must not exist for type vouchers.
error
CFDI40104Payment Form is not valid in the c_FormaPago catalog.
error
CFDI40105When MetodoPago is PPD, FormaPago must be 99 (To be defined).
error
CFDI40105_PUE99FormaPago '99' (To be defined) is not appropriate for MetodoPago PUE. Should indicate the actual payment form.
warning
CFDI40113Currency is not valid in the SAT c_Moneda catalog.
error
CFDI40114When currency is MXN, TipoCambio must be '1'.
error
CFDI40115For currency (different from MXN), TipoCambio is required.
error
CFDI40116When currency is XXX, TipoCambio must not exist.
error
CFDI40121Voucher Type is not valid in the c_TipoDeComprobante catalog.
error
CFDI40123Export is not valid in the c_Exportacion catalog.
error
CFDI40124Payment Method is not valid.
error
CFDI40125MetodoPago must not exist for type vouchers.
error
CFDI40126Place of Issue is not a valid postal code in the c_CodigoPostal catalog.
error
CFDI40140Issuer Tax Regime is not valid.
error
CFDI40141Tax Regime does not apply to (RFC:).
error
CFDI40147Tax Domicile does not have valid format (must be 5 digits).
error
CFDI40147_HINTThe receiver's postal code is valid, but must exactly match their Tax Status Certificate.
info
CFDI40148Receiver's postal code does not exist in the SAT catalog (c_CodigoPostal).
error
CFDI40149For generic RFCs, DomicilioFiscalReceptor must equal LugarExpedicion.
error
CFDI40157Receiver Tax Regime is not valid.
error
CFDI40158Tax Regime does not apply to (RFC:).
error
CFDI40159For generic RFCs, RegimenFiscalReceptor must be 616.
error
CFDI40160CFDI Usage is not valid in the c_UsoCFDI catalog.
error
CFDI40161CFDI Usage is not compatible with person type and tax regime . The SAT will reject this CFDI.
error
CFDI40162ClaveProdServ of Concepto does not exist in the c_ClaveProdServ catalog.
error
CFDI40165ClaveUnidad of Concepto does not exist in the c_ClaveUnidad catalog.
error
CFDI40170ObjetoImp of Concepto is not valid.
error
CFDI40171Concepto has ObjetoImp='02' but does not include Impuestos node.
error
CFDI40172Concepto has ObjetoImp= but includes Impuestos node (must not exist).
error
CFDI40201Impuestos node must not exist for type vouchers.
error
CRP20_USOCFDI_NOMINAFor Payroll (N) type vouchers, UsoCFDI must be CN01.
error
CRP20_USOCFDI_PAGOFor Payment (P) type vouchers, UsoCFDI must be CP01.
error

Amounts and totals

13 checks

CodeWhat it checksSeverity
CFDI40197ValorUnitario of Parte of Concepto must be greater than zero; found.
error
CFDI40198Importe of Parte of Concepto () is outside the range SAT accepts for that part's Cantidad × ValorUnitario ( ×): to.
error
CONCEPTO_DESCUENTO_EXCEEDSA concepto's Descuento is greater than its Importe.
error
CONCEPTO_IMPORTE_MISMATCHA concepto's Importe doesn't match Cantidad × ValorUnitario.
error
DESCUENTO_MISMATCHThe global Descuento doesn't match the sum of the concepts' Descuentos.
warning
NEGATIVE_TOTALThe voucher Total cannot be negative.
error
PAGO_SUBTOTAL_NOT_ZEROIn Payment vouchers, SubTotal must be 0.
error
PAGO_TOTAL_NOT_ZEROIn Payment vouchers, Total must be 0.
error
PARTE_IMPORTE_NO_EXACTOA Parte's Importe is within SAT's range but not exactly Cantidad × ValorUnitario; some PACs require exact equality.
warning
PARTE_INCOMPLETAA concepto Parte has no ValorUnitario or Importe; the schema allows it, but some PACs reject it.
warning
SUBTOTAL_MISMATCHSubTotal doesn't match the sum of the concepts' Importes.
error
TOTAL_MISMATCHTotal doesn't match SubTotal − Descuento + Traslados − Retenciones.
error
TOTAL_NO_TAXESWith no Impuestos node, Total doesn't match SubTotal − Descuento.
warning

Tax amounts and rates

36 checks

CodeWhat it checksSeverityLegal basis
CFDI40164ClaveProdServ in Concepto requires a VAT traslado per the c_ClaveProdServ catalog, and the concept does not include one.
error
—
CFDI40173Concepto includes the Impuestos node but has no Traslado or Retencion.
error
—
CFDI40174Concepto Traslado Base must be greater than zero (found:).
error
—
CFDI40175Traslado Impuesto in Concepto is not in the c_Impuesto catalog.
error
—
CFDI40176Traslado TipoFactor in Concepto is not in the c_TipoFactor catalog.
error
—
CFDI40177Concepto Traslado is Exento and must not include TasaOCuota or Importe.
error
—
CFDI40178Concepto Traslado has TipoFactor and must include TasaOCuota and Importe.
error
—
CFDI40179TasaOCuota in Concepto Traslado does not match the c_TasaOCuota catalog for Impuesto=, TipoFactor=, valid on.
error
—
CFDI40180A tax traslado's Importe is outside the permitted Base × TasaOCuota limits.
error
—
CFDI40181Concepto Retencion Base must be greater than zero (found:).
error
—
CFDI40182Retencion Impuesto in Concepto is not in the c_Impuesto catalog.
error
—
CFDI40183Retencion TipoFactor in Concepto is not in the c_TipoFactor catalog.
error
—
CFDI40184Concepto Retencion cannot have TipoFactor Exento: withholding an exempt tax makes no sense.
error
—
CFDI40185TasaOCuota in Concepto Retencion does not match the c_TasaOCuota catalog for Impuesto=, TipoFactor=, valid on.
error
—
CFDI40186Importe () of Concepto Retencion is outside the allowed range [, ] for Base × TasaOCuota.
error
—
CFDI40202TotalImpuestosRetenidos has more decimals () than currency supports ().
error
—
CFDI40203TotalImpuestosRetenidos () does not equal the sum of Retencion.Importe ().
error
—
CFDI40204TotalImpuestosTrasladados has more decimals () than currency supports ().
error
—
CFDI40205TotalImpuestosTrasladados () does not equal the sum of Traslado.Importe ().
error
—
CFDI40206The Retenciones node exists but the TotalImpuestosRetenidos attribute is missing on cfdi:Impuestos.
error
—
CFDI40207Comprobante Retencion Impuesto is not in the c_Impuesto catalog.
error
—
CFDI40208There is more than one comprobante-level Retencion for tax.
error
—
CFDI40209A Retencion exists but the Impuestos node's TotalImpuestosRetenidos attribute is missing.
error
—
CFDI40210The comprobante Retencion Importe has more decimals () than currency supports ().
error
—
CFDI40211The Importe () of the Retencion does not match the sum of the concepts' Retencion for that tax ().
error
—
CFDI40212There are concepts with a non-Exento Traslado but the TotalImpuestosTrasladados attribute is missing.
error
—
CFDI40213A comprobante-level Exento Traslado must only carry Base, Impuesto and TipoFactor; it must not include TasaOCuota or Importe.
error
—
CFDI40214The comprobante Traslado Base has more decimals () than currency supports ().
error
—
CFDI40215The Base () of the Traslado grouped by Impuesto=/TipoFactor= does not match the sum of the concepts' Base ().
error
—
CFDI40216The Base () of the Traslado grouped by Impuesto=/TipoFactor= does not match the sum of the concepts' Base ().
error
—
CFDI40217Comprobante Traslado Impuesto is not in the c_Impuesto catalog.
error
—
CFDI40218There is more than one comprobante-level Traslado with the same combination Impuesto=, TipoFactor=, TasaOCuota=.
error
—
CFDI40219TasaOCuota in the comprobante Traslado does not match the c_TasaOCuota catalog for Impuesto=, TipoFactor=.
error
—
CFDI40220The comprobante Traslado Importe has more decimals () than currency supports ().
error
—
CFDI40221The Importe () of the Traslado grouped by Impuesto=/TipoFactor=/TasaOCuota= does not match the sum of the concepts' Importe ().
error
—
LIVA12_BASE_IVAA concept's VAT Base doesn't match Importe − Discount + that concept's transferred IEPS.
warning
LIVA Art. 12

Digital seal, certificate and stamp

24 checks

CodeWhat it checksSeverity
CSD_EXPIREDThe Digital Seal Certificate (CSD) has expired.
error
CSD_NOT_YET_VALIDThe CSD is not yet valid.
error
CSD_PARSE_ERRORCould not parse the embedded X.509 certificate. It may be corrupted or have incorrect format.
warning
CSD_RFC_MISMATCHThe certificate's (CSD) RFC doesn't match the issuer's RFC.
error
CSD_RFC_OKThe certificate's RFC matches the issuer's.
info
CSD_VALIDCSD is valid (expires).
info
INVALID_CERTIFICADO_FORMATThe Certificate does not have a valid Base64 format.
error
INVALID_NO_CERTIFICADO_FORMATCertificate Number does not have the correct format (must be 20 digits).
error
INVALID_SELLO_FORMATThe Seal does not have a valid Base64 format.
error
INVALID_UUID_FORMATUUID does not have a valid format.
error
MISSING_CERTIFICADOMissing CFDI Certificate.
error
MISSING_FECHA_TIMBRADOMissing stamp date.
warning
MISSING_NO_CERTIFICADOMissing CFDI Certificate Number.
error
MISSING_NO_CERTIFICADO_SATMissing SAT Certificate Number.
warning
MISSING_SELLOMissing CFDI digital seal.
error
MISSING_SELLO_SATMissing SAT Seal in the Digital Tax Stamp.
warning
MISSING_UUIDMissing UUID (Tax Receipt ID) in the Digital Tax Stamp.
error
NO_CERTIFICADO_MISMATCHNoCertificado doesn't match the embedded certificate's serial number.
error
NO_TIMBREDigital Tax Stamp not found. The CFDI has not been stamped by a PAC.
warning
SELLO_INVALIDThe CFDI digital seal is NOT valid. The cryptographic signature does not match the content.
error
SELLO_MISMATCHSelloCFD in the Digital Tax Stamp does not match the Comprobante Seal.
error
SELLO_NO_VERIFICABLEThe seal could not be checked because the CFDI has a complement the validator does not rebuild yet; it does not indicate tampering.
warning
SELLO_VALIDThe CFDI digital seal is valid. The cryptographic signature matches the content.
info
SELLO_VERIFY_ERRORCould not cryptographically verify the seal. The certificate or seal may be corrupted.
warning

RFC (tax ID)

9 checks

CodeWhat it checksSeverity
RFC_EMISOR_GENERICOIssuer RFC cannot be a generic RFC.
error
RFC_INVALID_FORMAT_EMISORThe issuer's RFC does not have a valid format.
error
RFC_INVALID_FORMAT_RECEPTORThe receiver's RFC does not have a valid format.
error
RFC_INVALID_LENGTH_EMISORThe issuer's RFC has an invalid length (12 for a legal entity, 13 for an individual).
error
RFC_INVALID_LENGTH_RECEPTORThe receiver's RFC has an invalid length (12 for a legal entity, 13 for an individual).
error
RFC_LOWERCASE_EMISORThe issuer's RFC must be uppercase.
error
RFC_LOWERCASE_RECEPTORThe receiver's RFC must be uppercase.
error
RFC_SUSPICIOUS_DATE_EMISORThe date portion of the issuer's RFC looks invalid.
warning
RFC_SUSPICIOUS_DATE_RECEPTORThe date portion of the receiver's RFC looks invalid.
warning

SAT blacklists (69-B and 69)

7 checks

CodeWhat it checksSeverityLegal basis
ART69_NO_VERIFICADOCould not check the issuer against one or more CFF Article 69 lists: the SAT listing is unavailable or a list is missing.
info
CFF Art. 69
EFOS_DEFINITIVOThe issuer is on the SAT blacklist (69-B) as definitive: the invoice is likely not tax-deductible.
error
—
EFOS_DESVIRTUADOThe issuer was on the SAT blacklist but has since cleared it: no action required.
info
—
EFOS_NO_VERIFICADOCould not check the issuer against the EFOS list: the SAT listing is unavailable.
info
—
EFOS_PRESUNTOThe issuer is on the SAT blacklist (69-B) as presumed: verify before deducting.
warning
—
EFOS_SENTENCIA_FAVORABLEIssuer () was on the 69-B list but obtained a favorable ruling: the SAT act was set aside.
info
—
EMISOR_EN_LISTAS_ART69The issuer appears in the CFF Article 69 non-compliance register (final debts, not located, etc.).
warning
CFF Art. 69

Product key and unit consistency

11 checks

CodeWhat it checksSeverity
PRODSERV_UNIT_LOW_CONFIDENCE_REVIEWCould not reliably determine whether the product/service key and unit are consistent; manual review recommended.
info
PRODSERV_UNIT_SEMANTIC_INCOMPATIBLEThe product/service key and the unit of measure used are not semantically compatible.
warning
PRODSERV_UNIT_SEMANTIC_MISMATCHThe unit of measure used is atypical for this product/service key type.
warning
SAT_PYS_CLASSIFICATION_FOUNDNo specific unit suggestion exists, but SAT's PyS classification helps verify whether the unit used is consistent.
info
SAT_PYS_CLASSIFICATION_MISSINGNo PyS classification was found for this product/service key; low-confidence semantic rules were used instead.
info
SAT_UNIT_NOT_SUGGESTED_FOR_PRODSERVThe unit of measure used doesn't match SAT's base suggestion for that product/service key.
warning
SAT_UNIT_RANGE_SUGGESTION_MATCHThe unit of measure used matches SAT's base suggestion for that key range.
info
SAT_UNIT_RANGE_SUGGESTION_MISMATCHThe unit of measure used doesn't match SAT's base suggestion for that key range.
warning
SAT_UNIT_SUGGESTION_MATCHThe unit of measure used matches SAT's base suggestion for that product/service key.
info
TENANT_UNIT_PREFERENCE_MATCHThe unit of measure matches this account's custom configuration.
info
TENANT_UNIT_PREFERENCE_MISMATCHThe unit of measure doesn't match this account's custom configuration.
warning

Income, credit note and transfer

13 checks

CodeWhat it checksSeverity
EGRESO_MISSING_FORMA_PAGOCredit Note (Egreso) type vouchers must include the Payment Form.
error
EGRESO_MISSING_METODO_PAGOCredit Note (Egreso) type vouchers must include the Payment Method.
error
EGRESO_NO_RELACIONADOSIt is recommended that Credit Note vouchers include CfdiRelacionados referencing the original Income CFDI.
warning
EGRESO_TIPO_RELACION_INVALIDA CfdiRelacionado's TipoRelacion is not valid.
error
EGRESO_UUID_RELACIONADO_INVALIDRelated UUID does not have valid format.
error
INGRESO_GENERIC_CLAVEPRODSERVConcepto uses the generic ClaveProdServ 84111506 (Billing services). Consider using a more specific key.
warning
INGRESO_MISSING_FORMA_PAGOIncome type vouchers must include the Payment Form.
error
INGRESO_MISSING_METODO_PAGOIncome type vouchers must include the Payment Method.
error
INGRESO_PPD_FORMA_PAGOWhen Payment Method is PPD, Payment Form must be 99 (To be defined).
error
TRASLADO_DESCUENTOTransfer type vouchers must not include Descuento.
error
TRASLADO_FORMA_PAGOTransfer type vouchers must not include FormaPago.
error
TRASLADO_METODO_PAGOTransfer type vouchers must not include MetodoPago.
error
TRASLADO_VU_NEGATIVEConcepto ValorUnitario cannot be negative.
error

Payment complement 2.0

52 checks

CodeWhat it checksSeverity
CRP20114In Payment vouchers, NoIdentificacion must not exist.
error
CRP20115In Payment vouchers, Cantidad must be '1'.
error
CRP20116In Payment vouchers, ClaveUnidad must be 'ACT'.
error
CRP20117In Payment vouchers, Unidad must not exist.
error
CRP20118In Payment vouchers, Descripcion must be 'Pago'.
error
CRP20119In Payment vouchers, ValorUnitario must be 0.
error
CRP20120In Payment vouchers, Importe must be 0.
error
CRP20121In Payment vouchers, Descuento must not exist in Concepto.
error
CRP20122In Payment vouchers, ObjetoImp must be '01'.
error
CRP20205Pago transfer rate ImporteP () is inconsistent with the SAT's full-precision calculation (). The SAT recalculates ImporteDR = BaseDR × TasaOCuotaDR with 6 decimals. When ImporteDR is rounded to document currency decimals, precision is lost causing Totales rejection.
error
CRP20212Pago FormaDePagoP must not be '99'.
error
CRP20213Pago MonedaP must not be 'XXX'.
error
CRP20214TipoCambioP is required when MonedaP () is not MXN.
error
CRP20215When MonedaP is MXN, TipoCambioP must be '1'.
error
CRP20217Sum of ImpPagado () exceeds Pago Monto (). Monto must be greater than or equal to the sum of paid amounts.
error
CRP20218Pago Monto must be greater than 0.
error
CRP20236DoctoRelacionado MonedaDR must not be 'XXX'.
error
CRP20237EquivalenciaDR is required when MonedaDR () differs from MonedaP ().
error
CRP20238When MonedaDR = MonedaP, EquivalenciaDR must be '1'.
error
CRP20239DoctoRelacionado ImpSaldoAnt must be > 0.
error
CRP20241DoctoRelacionado ImpPagado must be > 0.
error
CRP20244ImpSaldoInsoluto must equal ImpSaldoAnt minus ImpPagado, and cannot be negative.
error
CRP20244_NEGImpSaldoInsoluto cannot be negative.
error
CRP20246ObjetoImpDR='02' requires ImpuestosDR node.
error
CRP20247ObjetoImpDR= prohibits ImpuestosDR node.
error
CRP20254Retention ImporteDR () is not within permitted limits. Expected: (BaseDR × TasaOCuotaDR).
error
CRP20261Transfer rate ImporteDR () is not within permitted limits. Expected: (BaseDR × TasaOCuotaDR).
error
CRP20265Pago retention ImporteP () does not equal the sum () of retained amounts from related documents.
error
CRP20268A payment complement traslado's BaseP doesn't equal the sum of the related documents' bases.
error
CRP20274Pago transfer rate ImporteP () does not match the sum of transfer ImporteDR from related documents ().
error
CRP20275A related document's ImpPagado is outside the range SAT computes for multi-currency payments.
error
CRP20275-PRECISIONEquivalenciaDR has fewer than 6 decimals, which can cause SAT to reject the CFDI.
warning
CRP20276The Pago's Monto is outside the permitted limits for multi-currency operations.
error
EQUIV_DR_INCORRECTThe declared EquivalenciaDR appears incorrect based on the taxes the payment reports.
error
PAGO_CLAVEPRODSERVIn Payment vouchers, ClaveProdServ must be '84111506'.
error
PAGO_CONCEPTOS_COUNTPayment vouchers must have exactly one Concepto.
error
PAGO_INVALID_VERSIONThe Payment complement version is not 2.0.
error
PAGO_MISSING_COMPLEMENTPayment type vouchers must include the Payment complement.
error
PAGO_MONEDAIn Payment vouchers, the Comprobante Moneda must be 'XXX'.
error
PAGO_NO_DOCTOSPago has no related documents.
error
PAGO_NO_PAGO_NODESThe Payment complement contains no Pago nodes.
error
PAGO_TOTALES_MONTOTOTALPAGOSMontoTotalPagos doesn't match the calculated sum of the payments.
error
PAGO_TOTALES_TOTALRETENCIONESIEPSTotalRetencionesIEPS doesn't match the calculated sum of the payments.
error
PAGO_TOTALES_TOTALRETENCIONESISRTotalRetencionesISR doesn't match the calculated sum of the payments.
error
PAGO_TOTALES_TOTALRETENCIONESIVATotalRetencionesIVA doesn't match the calculated sum of the payments.
error
PAGO_TOTALES_TOTALTRASLADOSBASEIVA0TotalTrasladosBaseIVA0 doesn't match the calculated sum of the payments.
error
PAGO_TOTALES_TOTALTRASLADOSBASEIVA16TotalTrasladosBaseIVA16 doesn't match the calculated sum of the payments.
error
PAGO_TOTALES_TOTALTRASLADOSBASEIVA8TotalTrasladosBaseIVA8 doesn't match the calculated sum of the payments.
error
PAGO_TOTALES_TOTALTRASLADOSBASEIVAEXENTOTotalTrasladosBaseIVAExento doesn't match the calculated sum of the payments.
error
PAGO_TOTALES_TOTALTRASLADOSIMPUESTOIVA0TotalTrasladosImpuestoIVA0 doesn't match the calculated sum of the payments.
error
PAGO_TOTALES_TOTALTRASLADOSIMPUESTOIVA16TotalTrasladosImpuestoIVA16 doesn't match the calculated sum of the payments.
error
PAGO_TOTALES_TOTALTRASLADOSIMPUESTOIVA8TotalTrasladosImpuestoIVA8 doesn't match the calculated sum of the payments.
error

Payroll 1.2

115 checks

CodeWhat it checksSeverityLegal basis
NOM105The payroll Comprobante has a TipoCambio; the 4.0 guide says it must not exist. A value of 1 is only a warning.
errorwarning
Guía de llenado de nómina p. 9 (TipoCambio no debe existir); Matriz de errores Nómina 1.2 (NOM105, admite 1)
NOM106The Comprobante SubTotal does not equal TotalPercepciones plus TotalOtrosPagos in the complement.
error
Matriz de errores Nómina 1.2 (NOM106); Guía de llenado de nómina pp. 8 y 19
NOM107The Comprobante Descuento does not match TotalDeducciones, or it exists even though the payroll has no TotalDeducciones.
error
Matriz de errores Nómina 1.2 (NOM107); Guía de llenado de nómina p. 8
NOM108The Comprobante Total does not follow the XSD amount format (up to 18 integer digits and 6 decimals, no sign). More than 2 decimals is only a warning.
errorwarning
Matriz de errores Nómina 1.2 (NOM108); XSD nomina12 (t_Importe)
NOM109The Comprobante Total does not equal TotalPercepciones plus TotalOtrosPagos minus TotalDeducciones.
error
Matriz de errores Nómina 1.2 (NOM109); Guía de llenado de nómina p. 10
NOM112The payroll Comprobante has CondicionesDePago, an attribute the 4.0 guide does not allow on payroll.
error
Matriz de errores Nómina 1.2 (NOM112); Guía de llenado de nómina p. 8 (CondicionesDePago no debe existir)
NOM132The payroll Comprobante Moneda is not MXN.
error
Matriz de errores Nómina 1.2 (NOM132); Guía de llenado de nómina p. 8
NOM134The CFDI has a Payroll complement but its TipoDeComprobante is not N.
error
Matriz de errores Nómina 1.2 (NOM134); Guía de llenado de nómina p. 10
NOM135The issuer is a legal entity (12-character RFC) but the complement has an issuer Curp, which must not exist.
error
Matriz de errores Nómina 1.2 (NOM135); Guía de llenado de nómina pp. 13 y 28
NOM136The issuer is an individual (13-character RFC) but the complement has no issuer Curp, which must exist.
error
Matriz de errores Nómina 1.2 (NOM136); Guía de llenado de nómina p. 28
NOM137The Receptor RFC of the payroll CFDI is not 13 characters long, so it is not an individual's RFC.
error
Matriz de errores Nómina 1.2 (NOM137, equivalente a NOM121); Guía de llenado de nómina p. 15
NOM139The payroll Comprobante does not have exactly one Concepto, or the Concepto has nodes the guide prohibits (Impuestos, InformacionAduanera, CuentaPredial, ComplementoConcepto, Parte or ACuentaTerceros).
error
Matriz de errores Nómina 1.2 (NOM139); Guía de llenado de nómina p. 17
NOM140The Concepto ClaveProdServ is not 84111505, the key for payroll.
error
Matriz de errores Nómina 1.2 (NOM140); Guía de llenado de nómina p. 18
NOM141The Concepto has NoIdentificacion, an attribute that must not exist on a payroll.
error
Matriz de errores Nómina 1.2 (NOM141); Guía de llenado de nómina p. 18
NOM142The Concepto Cantidad is not 1.
error
Matriz de errores Nómina 1.2 (NOM142); Guía de llenado de nómina p. 18
NOM143The Concepto ClaveUnidad is not ACT.
error
Matriz de errores Nómina 1.2 (NOM143); Guía de llenado de nómina p. 18
NOM144The Concepto has Unidad, an attribute that must not exist on a payroll.
error
Matriz de errores Nómina 1.2 (NOM144); Guía de llenado de nómina p. 18
NOM145The Concepto Descripcion is not 'Pago de nómina'. The comparison ignores accents and case, and a difference is reported as a warning.
warning
Matriz de errores Nómina 1.2 (NOM145); Guía de llenado de nómina p. 18 y pregunta 19 (p. 92)
NOM146The Concepto ValorUnitario does not equal TotalPercepciones plus TotalOtrosPagos.
error
Matriz de errores Nómina 1.2 (NOM146); Guía de llenado de nómina p. 19
NOM147The Concepto Importe does not equal TotalPercepciones plus TotalOtrosPagos.
error
Matriz de errores Nómina 1.2 (NOM147); Guía de llenado de nómina p. 19
NOM148The Concepto Descuento does not match TotalDeducciones, or it exists even though the payroll has no TotalDeducciones.
error
Matriz de errores Nómina 1.2 (NOM148); Guía de llenado de nómina p. 19
NOM149The Comprobante has an Impuestos node, which must not exist on a payroll; withholdings go in the complement.
error
Matriz de errores Nómina 1.2 (NOM149); Guía de llenado de nómina p. 19 (Impuestos no debe existir en el Concepto)
NOM151The Nomina node has neither TotalPercepciones nor TotalOtrosPagos; at least one of them must be present.
error
Matriz de errores Nómina 1.2 (NOM151); Guía de llenado de nómina p. 21
NOM152TipoNomina is not a key of the c_TipoNomina catalog in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM152); Guía de llenado de nómina p. 22
NOM153An ordinary payroll (TipoNomina O) has PeriodicidadPago 99. The rule requires any key other than 99, as the guide says, not 01 to 09 as the matrix says.
error
Matriz de errores Nómina 1.2 (NOM153); Guía de llenado de nómina p. 42
NOM154In an extraordinary payroll (TipoNomina E) PeriodicidadPago is not 99 (Other periodicity).
error
Matriz de errores Nómina 1.2 (NOM154); Guía de llenado de nómina p. 42
NOM155FechaInicialPago is after FechaFinalPago.
error
Matriz de errores Nómina 1.2 (NOM155); Guía de llenado de nómina p. 24
NOM156The Nomina node has TotalPercepciones, but the complement has no Percepciones node.
error
Matriz de errores Nómina 1.2 (NOM156); Guía de llenado de nómina p. 26
NOM157TotalPercepciones does not equal the sum of TotalSueldos, TotalSeparacionIndemnizacion and TotalJubilacionPensionRetiro in the Percepciones node. A missing attribute counts as zero.
error
Matriz de errores Nómina 1.2 (NOM157); Guía de llenado de nómina p. 26
NOM158The Nomina node has TotalDeducciones, but the complement has no Deducciones node.
error
Matriz de errores Nómina 1.2 (NOM158); Guía de llenado de nómina p. 26
NOM159TotalDeducciones does not equal the sum of TotalOtrasDeducciones and TotalImpuestosRetenidos in the Deducciones node. A missing attribute counts as zero.
error
Matriz de errores Nómina 1.2 (NOM159); Guía de llenado de nómina pp. 26-27
NOM160The OtrosPagos node does not match TotalOtrosPagos: the attribute is missing or does not equal the sum of the OtroPago Importe values.
error
Matriz de errores Nómina 1.2 (NOM160); Guía de llenado de nómina p. 27
NOM162TipoContrato 01 to 08 (employment) has no RegistroPatronal in the Emisor. The guide allows exceptions that cannot be told apart here, so it is only a warning.
warning
Matriz de errores Nómina 1.2 (NOM162); Guía de llenado de nómina p. 29
NOM163TipoContrato 09, 10 or 99 (assimilated or without employment relationship) has a RegistroPatronal in the Emisor, which must not exist.
error
Matriz de errores Nómina 1.2 (NOM163); Guía de llenado de nómina p. 29
NOM164With RegistroPatronal in the Emisor, IMSS attributes are missing from the Receptor: NumSeguridadSocial, FechaInicioRelLaboral, Antigüedad, RiesgoPuesto or SalarioDiarioIntegrado.
error
Matriz de errores Nómina 1.2 (NOM164); Guía de llenado de nómina p. 29
NOM167The EntidadSNCF OrigenRecurso is not a c_OrigenRecurso key (IP, IF or IM) in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM167); Guía de llenado de nómina p. 31
NOM168OrigenRecurso is IM (mixed income) and EntidadSNCF is missing MontoRecursoPropio.
error
Matriz de errores Nómina 1.2 (NOM168); Guía de llenado de nómina p. 31
NOM169OrigenRecurso is IP or IF, but EntidadSNCF has MontoRecursoPropio, which only applies to IM.
error
Matriz de errores Nómina 1.2 (NOM169); Guía de llenado de nómina p. 31
NOM170EntidadSNCF MontoRecursoPropio is not less than TotalPercepciones plus TotalOtrosPagos.
error
Matriz de errores Nómina 1.2 (NOM170); Guía de llenado de nómina p. 32
NOM171TipoContrato is not a key of the c_TipoContrato catalog in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM171); Guía de llenado de nómina p. 36
NOM172TipoJornada is not a key of the c_TipoJornada catalog in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM172); Guía de llenado de nómina p. 37
NOM173The Payroll Receptor's FechaInicioRelLaboral is after FechaFinalPago.
error
Matriz de errores Nómina 1.2 (NOM173); Guía de llenado de nómina p. 34
NOM174Antigüedad in weeks exceeds (days between FechaInicioRelLaboral and FechaFinalPago, plus one) divided by seven.
error
Matriz de errores Nómina 1.2 (NOM174); Guía de llenado de nómina p. 35
NOM175Antigüedad in years, months and days doesn't match the time between FechaInicioRelLaboral and FechaFinalPago, counting the start date.
warning
Matriz de errores Nómina 1.2 (NOM175); Guía de llenado de nómina p. 35
NOM176TipoRegimen is not a key of the c_TipoRegimen catalog in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM176); Guía de llenado de nómina p. 38
NOM177With TipoContrato 01 to 08, TipoRegimen is not 02, 03 or 04. It is only a warning, since the guide also uses regime 13 for severance payments.
warning
Matriz de errores Nómina 1.2 (NOM177); Guía de llenado de nómina p. 39
NOM178With TipoContrato 09 or higher, TipoRegimen is outside the 05 to 99 range. It is only a warning.
warning
Matriz de errores Nómina 1.2 (NOM178); Guía de llenado de nómina p. 39
NOM179RiesgoPuesto is not a key of the c_RiesgoPuesto catalog in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM179); Guía de llenado de nómina p. 40
NOM180PeriodicidadPago is not a key of the c_PeriodicidadPago catalog in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM180); Guía de llenado de nómina p. 41
NOM181Banco is not a key of the c_Banco catalog in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM181); Guía de llenado de nómina p. 43
NOM182CuentaBancaria has non-digit characters or is outside the 10 to 18 character range. A length other than 10, 11, 15, 16 or 18 is only a warning.
errorwarning
Matriz de errores Nómina 1.2 (NOM182); Guía de llenado de nómina p. 43
NOM183CuentaBancaria is an 18-digit CLABE and the Receptor has Banco, which must not exist in that case. It is only a warning.
warning
Matriz de errores Nómina 1.2 (NOM183); Guía de llenado de nómina p. 43
NOM184The check digit of the 18-digit CLABE is not correct.
error
Matriz de errores Nómina 1.2 (NOM184); Guía de llenado de nómina p. 43
NOM185CuentaBancaria with 10, 11 or 16 digits (not a CLABE) has no Banco. With 15 digits it is only a warning, since the rule does not name that length.
errorwarning
Matriz de errores Nómina 1.2 (NOM185); Guía de llenado de nómina p. 44
NOM186ClaveEntFed is not a valid Mexican state in c_Estado in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM186); Guía de llenado de nómina p. 45
NOM188The sum of PorcentajeTiempo across the SubContratacion nodes is not 100.
error
Matriz de errores Nómina 1.2 (NOM188); Guía de llenado de nómina p. 48
NOM189The sum of TotalSueldos, TotalSeparacionIndemnizacion and TotalJubilacionPensionRetiro does not equal TotalGravado plus TotalExento.
error
Matriz de errores Nómina 1.2 (NOM189); Guía de llenado de nómina p. 48
NOM190TotalSueldos does not equal the sum of ImporteGravado plus ImporteExento of the earnings other than 022, 023, 025, 039 and 044.
error
Matriz de errores Nómina 1.2 (NOM190); Guía de llenado de nómina p. 49
NOM191TotalSeparacionIndemnizacion does not equal the sum of ImporteGravado plus ImporteExento of earnings 022, 023 and 025.
error
Matriz de errores Nómina 1.2 (NOM191); Guía de llenado de nómina p. 49
NOM192TotalJubilacionPensionRetiro does not equal the sum of ImporteGravado plus ImporteExento of earnings 039 and 044.
error
Matriz de errores Nómina 1.2 (NOM192); Guía de llenado de nómina p. 50
NOM193TotalGravado does not equal the sum of the earnings' ImporteGravado.
error
Matriz de errores Nómina 1.2 (NOM193); Guía de llenado de nómina p. 50
NOM194TotalExento does not equal the sum of the earnings' ImporteExento.
error
Matriz de errores Nómina 1.2 (NOM194); Guía de llenado de nómina p. 51
NOM195The sum of ImporteGravado plus ImporteExento of an earning is zero or negative. The rule reads the sum of both amounts, not each one separately.
error
Matriz de errores Nómina 1.2 (NOM195); Guía de llenado de nómina p. 56
NOM196TipoPercepcion is not a key of the c_TipoPercepcion catalog in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM196); Guía de llenado de nómina pp. 52-53
NOM197There are earnings other than 022, 023, 025, 039 and 044, but TotalSueldos is missing from Percepciones.
error
Matriz de errores Nómina 1.2 (NOM197); Guía de llenado de nómina p. 49
NOM198The payslip has a 022, 023 or 025 earning and TotalSeparacionIndemnizacion or the SeparacionIndemnizacion node is missing.
error
Matriz de errores Nómina 1.2 (NOM198); Guía de llenado de nómina p. 53
NOM199The payslip has a 039 or 044 earning and TotalJubilacionPensionRetiro or the JubilacionPensionRetiro node is missing. A retirement total or node with no 039 or 044 earning behind it is only a warning.
errorwarning
Matriz de errores Nómina 1.2 (NOM199); Guía de llenado de nómina p. 53
NOM200With a 039 earning (retirement paid in one payment), the JubilacionPensionRetiro node lacks TotalUnaExhibicion or has TotalParcialidad or MontoDiario. If the payslip also has 044, it is not evaluated.
error
Matriz de errores Nómina 1.2 (NOM200); Guía de llenado de nómina p. 53
NOM201With a 044 earning (retirement paid in installments), the JubilacionPensionRetiro node lacks TotalParcialidad and MontoDiario or has TotalUnaExhibicion. If the payslip also has 039, it is not evaluated.
error
Matriz de errores Nómina 1.2 (NOM201); Guía de llenado de nómina p. 53
NOM202The AccionesOTitulos node is missing from earning 045 (income in shares or securities).
error
Matriz de errores Nómina 1.2 (NOM202); Guía de llenado de nómina p. 54
NOM203An earning other than 045 has an AccionesOTitulos node, which only belongs to earning 045.
error
Matriz de errores Nómina 1.2 (NOM203); Guía de llenado de nómina p. 54
NOM204The HorasExtra node is missing from earning 019 (overtime).
error
Matriz de errores Nómina 1.2 (NOM204); Guía de llenado de nómina p. 54
NOM205An earning other than 019 has a HorasExtra node. According to the matrix it only belongs to earning 019, and the guide does not prohibit it, so it is only a warning.
warning
Matriz de errores Nómina 1.2 (NOM205); Guía de llenado de nómina p. 54
NOM206Earning 014 (disability subsidies) has no Incapacidades node.
error
Matriz de errores Nómina 1.2 (NOM206); Guía de llenado de nómina p. 54 y 89
NOM207The sum of the Incapacidad ImporteMonetario values does not equal ImporteGravado plus ImporteExento of the 014 earnings. It is not evaluated when 014 and 006 coexist on the same payslip, and it is only a warning.
warning
Matriz de errores Nómina 1.2 (NOM207); Guía de llenado de nómina p. 54
NOM208HorasExtra@TipoHoras is not a key of the c_TipoHoras catalog in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM208); Guía de llenado de nómina p. 58
NOM209JubilacionPensionRetiro has TotalUnaExhibicion together with TotalParcialidad or MontoDiario, which are mutually exclusive payment forms.
error
Matriz de errores Nómina 1.2 (NOM209); Guía de llenado de nómina p. 59
NOM210JubilacionPensionRetiro has TotalParcialidad without MontoDiario, or also has TotalUnaExhibicion.
error
Matriz de errores Nómina 1.2 (NOM210); Guía de llenado de nómina p. 60
NOM211TotalImpuestosRetenidos is missing or does not equal the sum of the 002 (ISR) deductions.
error
Matriz de errores Nómina 1.2 (NOM211); Guía de llenado de nómina p. 66
NOM212The Deducciones node has TotalImpuestosRetenidos, but there are no 002 (ISR) deductions.
error
Matriz de errores Nómina 1.2 (NOM212); Guía de llenado de nómina p. 66
NOM213TipoDeduccion is not a key of the c_TipoDeduccion catalog in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM213); Guía de llenado de nómina pp. 66-67
NOM214Deduction 006 (disability discount) has no Incapacidades node.
error
Matriz de errores Nómina 1.2 (NOM214); Guía de llenado de nómina p. 67 y 89
NOM215The Importe of deduction 006 does not equal the sum of the Incapacidad ImporteMonetario values. It is not evaluated when 014 and 006 coexist on the same payslip, and it is only a warning.
warning
Matriz de errores Nómina 1.2 (NOM215); Guía de llenado de nómina p. 69
NOM216A deduction has an Importe equal to or less than zero. The matrix and the guide require more than zero, but the XSD accepts 0.00, so it is only a warning.
warning
Matriz de errores Nómina 1.2 (NOM216); Guía de llenado de nómina p. 69; el XSD admite 0.00
NOM217TipoOtroPago is not a key of the c_TipoOtroPago catalog in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM217); Guía de llenado de nómina p. 69
NOM218OtroPago 004 (balance in favor compensation) has no CompensacionSaldosAFavor node.
error
Matriz de errores Nómina 1.2 (NOM218); Guía de llenado de nómina p. 73
NOM219OtroPago 002 (employment subsidy) has no SubsidioAlEmpleo node.
error
Matriz de errores Nómina 1.2 (NOM219); Guía de llenado de nómina p. 73
NOM220An OtroPago has an Importe equal to or less than zero. The XSD accepts it and an unpaid 002 is common, so it is only a warning.
warning
Matriz de errores Nómina 1.2 (NOM220); Guía de llenado de nómina p. 76
NOM221SubsidioCausado is less than the OtroPago Importe: more subsidy was paid than was accrued.
error
Matriz de errores Nómina 1.2 (NOM221); Guía de llenado de nómina p. 77
NOM222RemanenteSalFav is greater than SaldoAFavor in CompensacionSaldosAFavor.
error
Matriz de errores Nómina 1.2 (NOM222); Guía de llenado de nómina p. 77
NOM223The CompensacionSaldosAFavor Año is not the year before FechaPago, nor the FechaPago year for a December pay period. It is checked against the payslip date, not today, and it is only a warning.
warning
Matriz de errores Nómina 1.2 (NOM223); Guía de llenado de nómina p. 78
NOM224TipoIncapacidad is not a key of the c_TipoIncapacidad catalog in force on the CFDI date.
errorwarning
Matriz de errores Nómina 1.2 (NOM224); Guía de llenado de nómina p. 79
NOMINA_ANTIGUEDAD_CEROThe Payroll Receptor's Antigüedad is P0W or P0D; the schema accepts it, but some PACs reject it.
warning
—
NOMINA_ANTIGUEDAD_FORMATOThe Payroll Receptor's Antigüedad doesn't follow the PnW or PnYnMnD format.
error
—
NOMINA_EXPORTACIONThe payroll Comprobante Exportacion is not 01 (Not applicable).
error
Guía de llenado de nómina p. 10 (Exportacion se debe registrar 01)
NOMINA_INFORMACION_GLOBALThe payroll Comprobante has an InformacionGlobal node, which must not exist.
error
Guía de llenado de nómina p. 12 (el nodo InformacionGlobal no debe existir)
NOMINA_INVALID_VERSIONThe Payroll complement version is not 1.2.
error
—
NOMINA_METODO_PAGOThe payroll Comprobante MetodoPago is not PUE. If it is missing, it is only a warning.
errorwarning
Guía de llenado de nómina p. 10 (MetodoPago se debe registrar PUE)
NOMINA_MISSING_COMPLEMENTPayroll type vouchers must include the Payroll complement.
error
—
NOMINA_MISSING_FECHAFINALPAGOMissing required attribute 'FechaFinalPago' in the Payroll complement.
error
—
NOMINA_MISSING_FECHAINICIALPAGOMissing required attribute 'FechaInicialPago' in the Payroll complement.
error
—
NOMINA_MISSING_FECHAPAGOMissing required attribute 'FechaPago' in the Payroll complement.
error
—
NOMINA_MISSING_NUMDIASPAGADOSMissing required attribute 'NumDiasPagados' in the Payroll complement.
error
—
NOMINA_MISSING_RECEPTORThe Receptor node is missing from the Payroll complement.
error
—
NOMINA_MISSING_TIPONOMINAMissing required attribute 'TipoNomina' in the Payroll complement.
error
—
NOMINA_OBJETO_IMPThe payroll Concepto ObjetoImp is not 01 (Not subject to tax).
error
Guía de llenado de nómina p. 19 (ObjetoImp se debe registrar 01)
NOMINA_RECEPTOR_MISSING_CLAVEENTFEDMissing required attribute 'ClaveEntFed' in the Nomina Receptor.
error
—
NOMINA_RECEPTOR_MISSING_CURPMissing required attribute 'Curp' in the Nomina Receptor.
error
—
NOMINA_RECEPTOR_MISSING_NUMEMPLEADOMissing required attribute 'NumEmpleado' in the Nomina Receptor.
error
—
NOMINA_RECEPTOR_MISSING_PERIODICIDADPAGOMissing required attribute 'PeriodicidadPago' in the Nomina Receptor.
error
—
NOMINA_RECEPTOR_MISSING_TIPOCONTRATOMissing required attribute 'TipoContrato' in the Nomina Receptor.
error
—
NOMINA_RECEPTOR_MISSING_TIPOREGIMENMissing required attribute 'TipoRegimen' in the Nomina Receptor.
error
—
NOMINA_REGISTRO_PATRONAL_RECIPROCOWithout RegistroPatronal in the Emisor, the Receptor has IMSS attributes the guide asks to omit. It is only a warning, since the guide requires it but the matrix does not.
warning
Guía de llenado de nómina p. 29
NOMINA_TIPO_RELACIONCfdiRelacionados on a payroll Comprobante has a TipoRelacion other than 04 (substitution of earlier CFDI).
error
Guía de llenado de nómina p. 12 (TipoRelacion se debe registrar 04)
NOMINA_TOTAL_OTRAS_DEDUCCIONESTotalOtrasDeducciones doesn't match the calculated sum of the deductions.
error
Guía de llenado de nómina p. 66 (TotalOtrasDeducciones = deducciones sin la clave 002); sin código NOM en la matriz

Carta Porte 3.1

32 checks

CodeWhat it checksSeverity
CP001_VERSIONThe Carta Porte Complement version is not '3.1'.
error
CP002_DISTANCIA_CEROTotal distance traveled (TotalDistRec) is 0 or not set.
error
CP003_SIN_DESTINONo Ubicación with TipoUbicacion='Destino' was found.
error
CP003_SIN_ORIGENNo Ubicación with TipoUbicacion='Origen' was found.
error
CP004_DISTANCIA_DESTINODestination has no DistanciaRecorrida or it is 0.
error
CP005_SIN_MERCANCIAThe Mercancias node exists but contains no Mercancia.
error
CP005_SIN_MERCANCIASCarta Porte Complement is missing the Mercancias node.
error
CP006_PESO_BRUTO_CEROMercancia has PesoBruto as 0 or empty. This is one of the most frequent SAT rejection errors.
error
CP007_SIN_PERMISO_SCTMissing SCT permit number (NumPermisoSCT) for road transport.
error
CP008_ANIO_INVALIDOVehicle model year is not valid.
error
CP008_SIN_PLACAMissing vehicle license plate (PlacaVM).
error
CP009_SIN_SEGUROMissing civil liability insurance data (AseguraRespCivil and PolizaRespCivil are required).
error
CP010_OPERADOR_SIN_RFCThe vehicle operator (TipoFigura='01') has no RFC.
error
CP010_RFC_OPERADOR_IGUAL_EMISORThe vehicle operator's RFC is the same as the issuer's, unusual for transfers.
warning
CP010_SIN_FIGURACarta Porte Complement is missing the FiguraTransporte node.
error
CP010_SIN_TIPOS_FIGURAFiguraTransporte node exists but contains no TiposFigura.
error
CP_CONFIG_VEH_INVALIDAVehicle configuration doesn't exist in the SAT catalog.
error
CP_DIST_SUMATotalDistRec doesn't match the sum of the destinations' DistanciaRecorrida.
warning
CP_EMBALAJE_INVALIDOPackaging type doesn't exist in the SAT catalog.
error
CP_FIGURA_RFC_FORMATORFC of transport figure has invalid format.
error
CP_FIGURA_TIPO_INVALIDOTipoFigura doesn't exist in the SAT catalog.
error
CP_MAT_CLAVE_INVALIDAHazardous material code doesn't exist in the SAT catalog.
error
CP_MAT_SIN_CLAVEMercancia indicates MaterialPeligroso='Sí' but has no CveMaterialPeligroso.
error
CP_MAT_SIN_EMBALAJEMercancia is hazardous material but has no Embalaje type.
warning
CP_OPERADOR_SIN_LICENCIAOperator has no license number (NumLicencia).
warning
CP_PERM_INVALIDOSCT permit type doesn't exist in the SAT catalog.
error
CP_PESO_TOTALPesoBrutoTotal doesn't match the sum of the goods' PesoBruto.
warning
CP_REMOLQUE_REQUERIDOVehicle configuration typically requires a trailer, but none was found.
warning
CP_REMOLQUE_SIN_PLACATrailer has no license plate.
error
CP_REMOLQUE_TIPO_INVALIDOTrailer subtype doesn't exist in the SAT catalog.
error
CP_SEGURO_MAT_PELIGROSOHazardous material is being transported but environmental insurance data is missing (AseguraMedAmbiente and PolizaMedAmbiente).
error
CP_UBIC_CP_INVALIDOPostal code of location doesn't exist in the SAT catalog.
error

Foreign trade

31 checks

CodeWhat it checksSeverity
CCE101The Commerce Exterior complement only applies to Ingreso (I), Egreso (E), or Traslado (T) type receipts.
error
CCE104Commerce Exterior complement requires Exportacion to be '02' (Definitive) or '03' (Temporary).
error
CCE120Incoterm does not exist in the SAT catalog.
error
CCE121Missing TipoCambioUSD. Must be the MXN/USD exchange rate per article 20 of the CFF.
warning
CCE122TotalUSD doesn't match the sum of the goods' ValorDolares.
error
CCE125The Issuer's country in the Commerce Exterior complement must be 'MEX'.
error
CCE126The Issuer's state is not valid for Mexico.
error
CCE127Municipality does not belong to state per the SAT catalog.
error
CCE129Missing the Colonia attribute in the Issuer's Domicilio for that postal code.
error
CCE130The postal code doesn't match the Issuer's state and municipality.
error
CCE133Tax Registration Number is required for foreign receivers (generic RFC XEXX010101000).
error
CCE136Missing the Colonia attribute in the Receiver's Domicilio for that postal code.
error
CCE138Municipality does not belong to state per the SAT catalog.
error
CCE139The Receiver's state is not valid for Mexico.
error
CCE141The postal code doesn't match the Receiver's state and municipality.
error
CCE143Tax Registration Number is required for foreign recipients.
error
CCE145Missing the Colonia attribute in the Destinatario's Domicilio for that postal code.
error
CCE147Municipality does not belong to state per the SAT catalog.
error
CCE148The Destinatario's state is not valid for Mexico.
error
CCE150The postal code doesn't match the Destinatario's state and municipality.
error
CCE151Concept is missing NoIdentificacion. It is required when using the Commerce Exterior complement.
error
CCE152Merchandise has NoIdentificacion that doesn't match any CFDI Concept.
error
CCE161Tariff fraction does not exist or is no longer valid in the SAT catalog.
error
CCE165Missing fields on a Mercancia: CantidadAduana, UnidadAduana and ValorUnitarioAduana must all be present together or not at all.
error
CCE167UnidadAduana doesn't match the tariff fraction's unit.
error
CCE168ValorUnitarioAduana must be greater than 0 when UnidadAduana is not '99' (Service).
error
CCE_CLAVE_PEDIMENTOCustoms entry key does not exist in the SAT catalog.
error
CCE_DESTINATARIO_PAISThe Destinatario's country doesn't exist in the SAT catalog.
error
CCE_EMISOR_PAISThe Issuer's country doesn't exist in the SAT catalog.
error
CCE_RECEPTOR_PAISThe Receiver's country doesn't exist in the SAT catalog.
error
CCE_UNIDAD_ADUANAUnidadAduana does not exist in the SAT catalog.
error

Income Tax Law: deductibility and withholdings

13 checks

These are tax-legality findings: they don't change whether the CFDI is technically valid for the SAT, only whether the expense is deductible or the tax creditable.

CodeWhat it checksSeverityLegal basis
LISR106_RETENCION_HONORARIOSMissing the 10% ISR withholding on professional fees from an individual to a corporate taxpayer.
warning
LISR Art. 106, último párrafo
LISR106_RETENCION_HONORARIOS_TASAThe ISR withholding on professional fees has a rate other than the expected 10%.
warning
LISR Art. 106, último párrafo
LISR113J_RETENCION_RESICOMissing the 1.25% ISR withholding when a corporate taxpayer pays an individual under RESICO.
warning
LISR Art. 113-J
LISR113J_RETENCION_RESICO_TASAThe ISR withholding to an individual under RESICO has a rate other than the expected 1.25%.
warning
LISR Art. 113-J
LISR116_RETENCION_ARRENDAMIENTOMissing the 10% ISR withholding on leasing from an individual to a corporate taxpayer.
warning
LISR Art. 116
LISR116_RETENCION_ARRENDAMIENTO_TASAThe ISR withholding on leasing has a rate other than the expected 10%.
warning
LISR Art. 116
LISR151_I_EFECTIVOMedical or hospital expense (UsoCFDI D01/D02) paid in cash: not a valid personal deduction.
warning
LISR Art. 151 fr. I
LISR27_III_COMBUSTIBLE_EFECTIVOVehicle fuel paid in cash: never deductible, regardless of the amount.
warning
LISR Art. 27 fr. III, 2º párr.
LISR27_III_EFECTIVOThe invoice was paid in cash above the legal threshold ($2,000 MXN): not deductible.
warning
LISR Art. 27 fr. III
LISR27_III_EFECTIVO_REPA REP payment was received in cash above the legal threshold: the invoice it covers is not deductible.
warning
LISR Art. 27 fr. III
LISR28_XX_RESTAURANTERestaurant expense: only 8.5% is deductible, and none of it if paid in cash.
infowarning
LISR Art. 28 fr. XX
LISR36_II_AUTOMOVILA car's amount exceeds the LISR's per-unit deduction cap.
info
LISR Art. 36 fr. II
USO_S01_SIN_EFECTOSThe voucher declares UsoCFDI 'S01' (no tax effects): it cannot be deducted or credited.
info
Anexo 20, c_UsoCFDI

VAT Law: credit and withholdings

9 checks

These are tax-legality findings: they don't change whether the CFDI is technically valid for the SAT, only whether the expense is deductible or the tax creditable.

CodeWhat it checksSeverityLegal basis
LIVA1A_RETENCION_FLETESMissing the 4% IVA withholding on a road freight service.
warning
LIVA Art. 1-A fr. II inciso c)
LIVA1A_RETENCION_FLETES_TASAThe IVA withholding on freight has a rate other than the expected 4%.
warning
LIVA Art. 1-A fr. II inciso c)
LIVA1A_RETENCION_IVAMissing the two-thirds IVA withholding when a corporate taxpayer pays an individual subject to withholding (leasing, fees or RESICO).
warning
LIVA Art. 1-A fr. II inciso a); RLIVA Art. 3
LIVA1A_RETENCION_IVA_TASAThe IVA withholding does not equal two-thirds of the transferred IVA.
warning
LIVA Art. 1-A fr. II inciso a); RLIVA Art. 3
LIVA29_EXPORTACION_TASAThe voucher declares a definitive export but transferred IVA at 16% instead of the 0% rate.
warning
LIVA Art. 29
LIVA2A_TASA_CERO_SERVICIOA service transferred IVA at the 0% rate, an unusual case worth verifying with the issuer.
info
LIVA Art. 2-A
LIVA5_III_PPDPPD invoice that transfers IVA: the IVA is only creditable once paid (with the corresponding REP).
info
LIVA Arts. 1-B y 5 fr. III
LIVA5_II_NO_DESGLOSADOThe IVA wasn't transferred expressly and separately: it isn't creditable.
warning
LIVA Art. 5 fr. II
LIVA_TASA_FRONTERAThe 8% border-region IVA rate was used without the address or product/service key appearing to qualify for the incentive.
warning
Decreto de estímulos fiscales región fronteriza

Checks using your RFC and your other CFDIs

8 checks

These are tax-legality findings: they don't change whether the CFDI is technically valid for the SAT, only whether the expense is deductible or the tax creditable.

CodeWhat it checksSeverityLegal basis
CFDI_AJENO_AL_CONTRIBUYENTEAccount or API keyNeither the issuer nor the recipient is one of your registered RFCs.
warning
LISR Art. 27 fr. IV; CFF Art. 29-A
CFDI_CANCELADO_EN_SATAccount or API keySAT has this voucher marked as cancelled: it has no tax effects.
warning
CFF Art. 29-A
ESTATUS_SAT_NO_VERIFICADOAccount or API keyThis voucher's status has never been verified directly with SAT.
info
CFF Art. 29-A
LISR113E_RESICO_SIN_DEDUCCIONESAccount or API keyYou're taxed under individuals' RESICO: this expense doesn't reduce your ISR (the regime allows no deductions).
info
LISR Art. 113-E
NC_IVA_MAYOR_QUE_ORIGINALAccount or API keyThe credit note transfers more IVA than the original invoice it adjusts transferred.
warning
LIVA Art. 7
PPD_RECIBIDO_SIN_PAGOAccount or API keyPPD invoice with no REP on record, or only partially paid: the tax effect only covers what's actually been paid.
infowarning
LIVA Arts. 1-B y 5 fr. III; LISR Art. 105
REP_IVA_DESPROPORCIONADOAccount or API keyThe IVA transferred in this REP isn't proportional to the payment against the original invoice.
warning
LIVA Art. 1-B
RETENCION_A_CARGO_DEL_CONTRIBUYENTEAccount or API keyAs the corporate recipient, you were required to withhold and remit the tax this CFDI doesn't show.
warning
LISR Art. 27 fr. V; LIVA Art. 5 fr. IV