Saltar a contenido

Algoritmo de validación de CFDIs

El sistema de contabilidad iContable valida los XML antes de ingresarlos al sistema para asegurar que cumplen con las especificaciones técnicas de:

  • Ser un CFDI legal
    • Se ha firmado con un CSD o FIEL, al momento de su generación
    • Se encuentra debidamente timbrado por un PAC autorizado y con CSD vigente al momento de su timbrado
  • Cumple con los estándares publicados por el SAT

El sistema no puede validar:

  • Que el CFDI, aun cuando sea legal, sea deducible por la empresa.
  • Las reglas de deducción aplicados al CFDI sean las correctas
  • Que la información reportada por el emisor, en el CFDI, sea congruente y apropiada para poder ser deducible.

El siguiente algoritmo es propiedad de iContable y se publica con la intención de cumplir con las normas legales.

  1. Se valida que el XML venga codificado en UTF8
    1. Si no viene codificado en UTF8 se genera una advertencia pero se procede a continuar con la validación.
  2. Se valida que la estructura del XML sea válida de acuerdo a la versión más reciente del archivo : cfdv32.xsd publicado por el SAT
    1. Si el XML tiene problemas de estructura se deja una advertencia de la misma pero se procede a continuar la validación.
    2. Esto se hace debido a que el validador oficial del SAT realiza la misma acción y genera muchas controversias entre emisores y receptores sobre la validez de un XML que el SAT no rechaza explícitamente por contener errores de validación de estructura. El rechazo en estos casos es una decisión directiva de la empresa que lo recibe.
  3. Se valida que los certificados usados para generar los sellos del PAC y del Emisor no sean certificados de pruebas
    1. Si alguno de los 2 es un certificado de pruebas emitido por el SAT se rechaza el XML
  4. Se valida el certificado del emisor
    1. Si el emisor incluye su Certificado en el XML
      1. Se valida certificado contra los datos de la entidad Certificadora del SAT, publicados en los portales públicos del Banco de México
      2. Si el certificado no valida correctamente se ignora certificado contenido dentro del XML
    2. Si no hay un certificado válido
      1. Se realiza una conexión al servidor FTP del SAT para descargar desde su portal el certificado publicado por el SAT
    3. Si no hay un certificado válido aun, se rechaza la factura por no tener los elementos para validarla
    4. Se valida que el certificado corresponda a un CSD. Si no es un CSD se rechaza la factura por haber sido firmada con la FIEL. Excepto para personas Físicas porque lo pueden hacer mediante el portal del SAT
    5. Se valida que el certificado se encuentre vigente revisando información en la LCO del día
    6. Se valida que la fecha de emisión del documento esté dentro de los rangos válidos para su uso de acuerdo a la LCO
      1. Si el certificado no cumple con los requisitos anteriores se rechaza
  5. Se valida sello del CFDI
    1. Se extrae la cadena original
    2. Se extrae el sello con el algoritmo SHA1 de la cadena original
    3. Si el sello no valida correctamente se rechaza el CFDI
  6. Se valida que el sello del CFDI sea igual al sello que contiene el complemento de timbrado
    1. Si los sellos no son iguales se rechaza la factura
  7. Se busca el certificado usado PAC en el servidor
    1. Si no se cuenta con el certificado, se descarga del Portal FTP del SAT
    2. Si se tuvo que descargar el certificado se valida que sea un certificado del SAT
      1. Si el certificado no es del SAT se rechaza la validación por estar firmado con un certificado de un contribuyente
    3. Si no se cuenta con el certificado se rechaza la factura porque no hay los elementos completos para poder validarla
  8. Se valida sello de certificación del PAC
    1. Se extrae la cadena original
    2. Se extrae el sello con el algoritmo SHA1 de la cadena original
    3. Si el sello no valida correctamente se rechaza el CFDI
  9. Si todas las validaciones anteriores fueron correctas se acepta el CFDI

Finalmnente se valida si el RFC está reportado como una institución que simula operaciones inexistentes.

  1. Si aparece como presunto emisor de operaciones inexistentes marca el registro con : PI
  2. Si está reportado como definitivo emisor de operaciones inexistentes el registro queda marcado como : IX