Errores DIAN frecuentes
La DIAN identifica los problemas de validación con códigos (regla schematron). Esta tabla reúne los más frecuentes encontrados durante la integración, con su causa y solución.
| Código | Descripción | Causa | Solución |
|---|---|---|---|
| FAK41 | TaxScheme del adquiriente inválido | El par cbc:ID / cbc:Name del TaxScheme del adquiriente está cruzado (p. ej. ZZ + "No causa"). | Usar el par correcto: ZZ ↔ "No aplica", ZY ↔ "No causa" (Tabla 13.2.2 del Anexo v1.9). |
| FAD09e | IssueDate inconsistente | cbc:IssueDate distinto de la fecha de la firma XAdES. | Fijar IssueDate/IssueTime en el builder desde la hora del servidor; el cliente no controla estos campos del XML. |
| ZB01 | Elemento de documento incorrecto | Una nota crédito o débito usa elementos propios de Invoice. | Usar los elementos propios: NC → cbc:CreditNoteTypeCode, cac:CreditNoteLine, cbc:CreditedQuantity; ND → cbc:DebitNoteTypeCode, cac:DebitNoteLine, cbc:DebitedQuantity, con su namespace raíz correcto. |
| FAB27b | SoftwareSecurityCode inválido | Fórmula incorrecta (p. ej. usar NIT + technicalKey). | Calcular SHA384(softwareId + softwarePin + numero). |
| FAB10a | AuthorizationProvider / ProviderID inválido | El sts:ProviderID del AuthorizationProvider no contiene el NIT de la DIAN ni su esquema correcto. | El ProviderID debe ser el NIT de la DIAN (800197268) con sus atributos schemeID/schemeName/schemeAgencyID correctos. |
| FAK24 | Inconsistencia en TaxTotal | El cbc:TaxAmount declarado no coincide con el calculado (BaseAmount × Percent), o los subtotales por tasa no cuadran. | Calcular el TaxSubtotal por porcentaje de IVA y asegurar que la suma de impuestos coincida con el TaxTotal. |
:::tip Referencia autoritativa
Para el detalle completo y oficial de cada regla, consulta el Anexo Técnico v1.9 de la
DIAN. Las descripciones de FAB10a y FAK24 son guías prácticas basadas en sus reglas;
verifica siempre contra el mensaje exacto que devuelva la DIAN.
:::
ResponseCode "02" = aceptada (en habilitación)
El ApplicationResponse que devuelve la DIAN tiene un ResponseCode a nivel de documento
(cac:DocumentResponse > cac:Response > cbc:ResponseCode):
"00"→ aceptada"02"→ aceptada (en habilitación la descripción suele ser "Documento validado por la DIAN")- cualquier otro valor → rechazada
La regla de parseo del sistema es:
isValid = (ResponseCode === '00' || ResponseCode === '02')
Es decir, "02" no es un error: es una aceptación válida, típica del ambiente de
habilitación.
errores[] vs notificaciones[]
La respuesta de emisión distingue dos listas según el ResponseCode a nivel de línea
(cac:LineResponse):
| Lista | Cuándo aparece | Significado |
|---|---|---|
errores[] | El documento fue rechazado | Problemas que bloquean la emisión. Hay que corregirlos y reintentar. |
notificaciones[] | El documento fue aceptado | Advertencias informativas ("Aprobado con notificación"). El documento es válido. |
:::info Códigos genéricos inofensivos
Un ResponseCode de línea "0000" o "0" es un código genérico inofensivo: no
representa un error.
:::
Ver también Emitir documentos electrónicos para cómo se mapean estos campos
en el response (estado, errores, notificaciones).