Notas Crédito y Débito Corrección Fiscal Directa DIAN
Las notas crédito (91) y débito (92) son el único mecanismo legal para corregir facturas electrónicas validadas por la DIAN. SIIVRO automatiza la construcción del XML UBL 2.1, la firma XAdES-EPES, el cálculo de impuestos ajustados y la vinculación a la factura original por CUFE. En DIAN no existe eliminar. Solo corregir mediante documentos relacionados.
Una factura electrónica aceptada por la DIAN es un documento fiscal con plena validez legal. No puede modificarse, reemplazarse ni eliminarse bajo ninguna circunstancia. Este principio es no negociable y está definido en el Artículo 616-1 del Estatuto Tributario y el Anexo Técnico DIAN vigente.
Cuando ocurre un error o un ajuste necesario, la DIAN exige emitir un documento relacionado que referencia explícitamente la factura original mediante su CUFE. Este documento es la nota crédito (tipo 91) o la nota débito (tipo 92). Ambas mantienen trazabilidad fiscal completa y se archivan con validez legal durante el período fiscal vigente.
Lo que NO existe en la DIAN
Eliminar una factura aceptada
Modificar el XML transmitido
Anular directamente sin documento
Reemplazar por una nueva factura con igual número
Corregir sin CUFE del documento original
El proceso correcto en DIAN
Nota crédito (91) para reducir o anular valor
Nota débito (92) para aumentar valor
Referencia obligatoria al CUFE original
SIIVRO recalcula impuestos automáticamente
Ambos documentos quedan vinculados en la DIAN
El principio de corrección DIAN: no existen facturas incorrectas que se borran — existen correcciones que se documentan. El historial fiscal siempre es completo y trazable.
Sección 02
Nota crédito vs nota débito — cuándo usar cada una
La confusión más frecuente en producción: ¿crédito o débito? La regla es simple: la nota crédito disminuye el valor de la factura original. La nota débito lo aumenta.
Caso de uso
91 Crédito
92 Débito
Devolución total de mercancía
—
Devolución parcial de mercancía
—
Error en precio (cobró de más)
—
Descuento posterior a factura
—
Anulación completa de factura
—
Ajuste de precio (cobró de menos)
—
Intereses por mora
—
Gastos adicionales de transporte
—
Cargos por servicio adicional
—
91 — Nota crédito
Documento para anular o disminuir el valor de una factura previamente validada. Impacto contable: disminuye ingresos. El IVA generado se revierte proporcionalmente y las retenciones se ajustan según la base corregida.
92 — Nota débito
Documento para aumentar el valor de una factura existente, agregando cargos no incluidos originalmente. Impacto contable: incrementa ingresos. Se genera IVA adicional y se calculan retenciones sobre el nuevo cargo.
Sección 03
billing_reference — la relación obligatoria con la factura original
Toda nota crédito o débito debe estar vinculada a una factura existente mediante el campobilling_reference. Sin esta referencia, la nota no tiene significado fiscal y la DIAN la rechaza. Esta vinculación es el mecanismo que permite a la DIAN mantener la trazabilidad fiscal completa.
invoice_idOBLIGATORIO
Identificador interno SIIVRO de la factura a corregir. Retornado en el response de la factura original.
cufeOBLIGATORIO
Código Único de Factura Electrónica emitido por la DIAN. Debe ser exactamente el retornado, sin modificaciones.
reasonOBLIGATORIO
Código de motivo DIAN. 1-5 para nota crédito, 1-4 para nota débito. Ver catálogo vigente.
Qué pasa si no coincide: si el CUFE enviado no corresponde a la factura referenciada en la DIAN, recibirás error NC02. La DIAN valida la coherencia entre invoice_id y cufe. Guarda siempre el CUFE retornado en el response de la factura original.
Sección 04
Campos del request — qué es obligatorio y qué resuelve SIIVRO
Campo
Tipo
Estado
Descripción
document_type
string
Obligatorio
"91" para nota crédito, "92" para nota débito. Define el tipo de corrección fiscal.
external_id
string
Recomendado
Identificador único de tu sistema. Garantiza idempotencia: si se repite, SIIVRO retorna el resultado original.
billing_reference.invoice_id
string
Obligatorio
ID de la factura original a corregir. Retornado por SIIVRO al aceptar la factura.
billing_reference.cufe
string
Obligatorio
CUFE de la factura original. Exactamente el retornado por la DIAN. Sin modificaciones.
billing_reference.reason
string
Obligatorio
Código de motivo DIAN. Crédito: 1-5. Débito: 1-4. Ver catálogo vigente.
items[]
array
Condicional
Obligatorio para correcciones parciales. Opcional en anulación total (reason: '2'). Incluye los ítems a ajustar.
items[].description
string
Condicional
Descripción del bien o servicio ajustado. Aparece en el PDF de la nota.
items[].quantity
number
Condicional
Cantidad devuelta o ajustada. Para ajuste de precio, quantity: 1 y price igual a la diferencia.
items[].price
number
Condicional
Precio unitario del ajuste antes de impuestos. Debe ser mayor a 0. SIIVRO calcula impuestos automáticamente.
items[].tax_rate
string
Condicional
Tasa de IVA: 19.00, 5.00 o 0.00. Debe coincidir con la tasa del ítem en la factura original.
resolution_number
string
Automático
SIIVRO inyecta la resolución activa del tenant. No la envías en el request.
Items en anulación total: cuando el motivo es anulación total (reason: '2'), puedes omitir el array items. SIIVRO refleja automáticamente el valor completo de la factura original. Para cualquier otro motivo, items es obligatorio.
Sección 05
Catálogo de motivos DIAN reason_code vigente 2026
La DIAN define un catálogo fijo de motivos para cada tipo de nota. Enviar un código que no corresponde al tipo de documento genera error NC06 inmediato.
91Nota crédito — motivos válidos
1Devolución parcial de bienes y/o no aceptación parcial del servicio
2Anulación de factura electrónica
3Rebaja o descuento parcial
4Ajuste de precio
5Otros
92Nota débito — motivos válidos
1Intereses
2Gastos por cobrar
3Cambio del valor
4Otros
Sección 06
Casos reales completos crédito y débito narrados
No ejemplos abstractos. Estos son los escenarios que ocurren en producción con la lógica exacta de campos y el impacto fiscal real en cada caso.
91CASO 01Devolución total anulación completa
El cliente rechaza el pedido completo al recibirlo. La factura FV-001 por $500.000 debe anularse en su totalidad.
Pasos
01Identificar la factura original: invoice_id y CUFE
02Crear nota crédito tipo 91 con reason: '2' (Anulación)
03No incluir items: SIIVRO refleja el valor total
04DIAN registra la nota y el ingreso queda anulado
Incrementa ingresos en $15.000 + impuestos sobre intereses si aplica
92CASO 05Cargos de transporte no incluidos
La factura FV-003 omitió los gastos de envío de $25.000 acordados contractualmente.
Pasos
01Crear nota débito tipo 92 con reason: '2' (Gastos por cobrar)
02Incluir ítem de transporte con su valor real
03SIIVRO aplica IVA si el servicio de transporte lo requiere
04El cargo queda registrado fiscalmente vinculado a la factura base
Campo clave
items: [{description: "Gastos de envío", price: 25000, tax_rate: "19.00"}]
Impacto contable
Incrementa ingresos en $25.000 + IVA sobre el servicio de transporte
Sección 07
Impuestos en notas SIIVRO los recalcula automáticamente
Este es el punto donde más integradores cometen errores: intentar enviar los impuestos precalculados en la nota. No lo hagas.SIIVRO recalcula IVA, ReteFuente y ReteICA automáticamente sobre el valor de la nota, usando la misma configuración fiscal del tenant que generó la factura original.
IVA
En nota crédito (91)
Se revierte sobre el valor de la nota crédito. Si devolución parcial: solo sobre el subtotal de los ítems devueltos.
En nota débito (92)
Se genera sobre el valor del cargo adicional. Tasa definida en items[].tax_rate del request.
ReteFuente
En nota crédito (91)
Se ajusta proporcionalmente al valor de la nota. SIIVRO calcula según la base corregida y el tipo de cliente.
En nota débito (92)
Se calcula sobre el nuevo cargo. Depende de actividad económica y si supera la base mínima.
ReteICA
En nota crédito (91)
Se revierte sobre la base de la nota crédito. Ciudad y actividad económica determinan la tarifa.
En nota débito (92)
Se aplica sobre el cargo adicional. Tarifa municipal extraída del RUT del tenant.
Resultado: tú envías price: 80000 y tax_rate: "19.00". SIIVRO entrega en el response los totales ajustados: subtotal, IVA, ReteFuente, ReteICA y total neto de la nota. Úsalos directamente para sincronizar tu contabilidad.
Cada nota tiene consecuencias directas en la contabilidad del emisor y del receptor. SIIVRO entrega los totales ajustados en el response para que puedas sincronizar tu sistema contable sin cálculos manuales.
91 Nota crédito — efectos contables
→↓ Disminuye los ingresos del período
→↓ Revierte el IVA generado (menor IVA por pagar)
→↓ Reduce la base de ReteFuente practicada
→↓ Ajusta la base de ReteICA municipal
→↓ Disminuye la cartera (CxC) del emisor
→Para el receptor: disminuye el IVA descontable
92 Nota débito — efectos contables
→↑ Incrementa los ingresos del período
→↑ Genera IVA adicional (mayor IVA por pagar)
→↑ Aumenta la base de ReteFuente si aplica
→↑ Amplía la base de ReteICA sobre el cargo
→↑ Incrementa la cartera (CxC) del emisor
→Para el receptor: genera IVA descontable adicional
Sincronización con tu sistema contable
El response de SIIVRO incluye el objeto totals con los valores exactos de la nota: subtotal, IVA, ReteFuente, ReteICA y total neto. Para nota crédito, el total viene negativo indicando la disminución del ingreso. Para nota débito, positivo. Usa estos valores directamente para crear los asientos contables correspondientes en tu ERP o sistema de cartera.
Sección 10
Lógica de negocio reglas que SIIVRO valida antes de la DIAN
SIIVRO aplica validaciones de negocio antes de transmitir a la DIAN. Conocerlas previene errores que generan rechazos innecesarios en producción.
NC03No puedes hacer una nota mayor al saldo pendiente de la factura
El valor acumulado de todas las notas crédito sobre una factura no puede superar el valor original de la misma. SIIVRO valida el saldo antes de transmitir. Si la factura ya tiene notas crédito, el saldo disponible es menor.
NC01No puedes referenciar una factura en estado DIAN_REJECTED
Solo se pueden emitir notas sobre facturas en estado DIAN_ACCEPTED. Una factura rechazada no existe ante la DIAN y no puede ser corregida. Si necesitas corrección, la factura base debe estar aceptada.
NC05No puedes duplicar una nota de anulación total
Una factura que ya fue completamente anulada (nota crédito total, reason: '2') tiene saldo cero y no puede recibir más correcciones. SIIVRO detecta esto antes de enviar a la DIAN.
422No puedes omitir items en correcciones parciales
Si el motivo es una devolución parcial, ajuste de precio u otro que no sea anulación total, el array items[] es obligatorio. Sin ítems, no hay forma de calcular el ajuste exacto.
NC06No puedes usar reason codes de nota crédito en una nota débito
Los catálogos de motivos son distintos para tipo 91 y tipo 92. Un reason code válido para crédito puede ser inválido para débito y generar rechazo NC06.
Sección 11
Flujo completo de corrección fiscal end-to-end
Desde la factura original aceptada hasta la corrección registrada en la DIAN.
01
Factura original aceptadaPrerequisito
La factura está en estado DIAN_ACCEPTED con CUFE válido. Es el punto de partida de toda corrección.
02
Identificación del error o ajusteTu sistema
Determinar si el ajuste disminuye valor (nota crédito) o lo incrementa (nota débito). Calcular el monto exacto del ajuste.
03
Selección del motivo DIANTu código
Elegir el reason_code correcto del catálogo DIAN según el tipo de corrección: devolución, anulación, intereses, etc.
04
Creación de la nota vía APITu código
POST /V2/invoices con document_type 91 o 92, billing_reference completo y items si aplica. SIIVRO valida y procesa.
05
Firma y transmisión SIIVROAutomático
SIIVRO construye el XML UBL 2.1 de la nota, calcula impuestos, firma con XAdES-EPES y transmite a la DIAN referenciando la factura por CUFE.
06
Validación DIANDIAN
La DIAN valida la coherencia entre la nota y la factura original: CUFE, valores, motivo y que el emisor coincida.
07
CUFE de la nota y documentosResponse
La nota recibe su propio CUFE. SIIVRO retorna status, cufe_nota, pdf_path y totals. La corrección tiene validez legal.
08
Actualización contableTu sistema
Usa los totals del response para ajustar cartera, ingresos e impuestos en tu sistema. La relación factura-nota queda permanente.
Sección 12
Timeline de una nota en producción
De request a corrección fiscal registrada. Qué hace el sistema en cada momento y qué debe hacer tu código.
T0Factura original aceptada
T1Error detectado
T2Nota creada y procesada
T3DIAN valida y acepta
T4Relación fiscal fija
Sistema
Factura en estado DIAN_ACCEPTED con CUFE válido. Es el documento que se va a corregir.
Tu código
Guarda el invoice_id y cufe de la factura original. Los necesitarás en billing_reference.
Sistema
No hay nada que hacer en el sistema DIAN. La factura sigue siendo válida hasta que se emita la nota.
Tu código
Determina si necesitas nota crédito (91) o débito (92). Calcula el valor del ajuste.
Sistema
SIIVRO construye el XML de la nota, firma con XAdES-EPES y transmite a la DIAN referenciando la factura original.
Tu código
Envía POST /V2/invoices con document_type 91 o 92 y billing_reference completo. Guarda el external_id único.
Sistema
La DIAN genera un CUFE para la nota y la vincula contablemente a la factura original. Ambos documentos quedan asociados.
Tu código
Recibe el webhook invoice.updated con status DIAN_ACCEPTED. Actualiza tu DB y ajusta la contabilidad.
Sistema
La factura original y la nota quedan vinculadas permanentemente en los registros de la DIAN. Trazabilidad fiscal completa.
Tu código
La corrección es irreversible. Si hay un nuevo error, debes emitir otra nota referenciando la nota anterior o la factura según el caso.
La relación entre factura y nota es permanente. Una vez que la DIAN acepta la nota, la vinculación con la factura original no puede deshacerse. Ambos documentos quedan en el historial fiscal de la empresa para siempre.
Sección 13
Manejo de estados — tabla de decisión operativa
Estado
Qué significa
Qué debe hacer tu sistema
Qué NO hacer
PROCESSING
DIAN no respondió aún
Esperar webhook invoice.updated
NO reenviar la nota
DIAN_ACCEPTED
Nota válida — corrección registrada
Actualizar estado en DB — ajustar contabilidad
NO emitir otra nota igual
DIAN_REJECTED
Error fiscal en la nota
Corregir datos y reenviar
NO reenviar sin corregir
PENDING_SIGN
En cola interna de firma
No hacer nada — estado transitorio
NO asumir error
Sección 14
Errores reales y cómo resolverlos
No errores genéricos. Estos son los que ocurren en producción con notas fiscales.
NC01Factura referenciada no existe en la DIAN
Fix:Verificar que invoice_id y cufe corresponden a una factura DIAN_ACCEPTED. No se pueden corregir facturas rechazadas o inexistentes.
NC02CUFE inválido o no coincide con la factura
Fix:El cufe en billing_reference debe ser exactamente el retornado por SIIVRO al aceptar la factura original. Sin modificaciones.
NC03Valor de nota supera el valor de la factura
Fix:No se puede emitir una nota crédito por un monto mayor al saldo pendiente de la factura original. Validar montos antes de enviar.
NC04Nota crédito tipo 91 sin billing_reference
Fix:El campo billing_reference es OBLIGATORIO para tipos 91 y 92. Sin él, el sistema retorna 422 antes de llegar a la DIAN.
NC05Factura ya fue completamente anulada
Fix:Una factura que tiene una nota crédito de anulación total no puede recibir más notas. El saldo es cero.
NC06reason_code inválido o no corresponde al tipo
Fix:Los códigos de motivo DIAN son distintos para nota crédito (1-5) y nota débito (1-4). Verificar catálogo vigente.
422items vacíos en nota de ajuste parcial
Fix:Para correcciones parciales, items[] debe incluir los ítems a ajustar. Solo la anulación total puede omitir items.
TIMEOUTWebService DIAN sin respuesta síncrona
Fix:SIIVRO retorna status: PROCESSING. No reenvíes la nota. Escuchar webhook invoice.updated para el resultado final.
Sección 15
Error DIAN real — caso completo con corrección
El escenario más frecuente: CUFE incorrecto en billing_reference. Qué pasó, qué respondió el sistema y cómo se corrige.
PARTE 1Qué salió mal
El sistema envía una nota crédito tipo 91 referenciando la factura original. El campo billing_reference.cufe fue truncado por error al guardarlo en la base de datos: se envían solo los primeros 32 caracteres del CUFE cuando el formato DIAN requiere 64 caracteres exactos. La DIAN no encuentra el documento referenciado.
El campo culpable es billing_reference.cufe. El CUFE enviado tiene 32 chars, se esperan 64.
02
Recuperar el CUFE completo
Consulta en tu base de datos o en SIIVRO vía GET /v1/invoices/{id} el CUFE completo de la factura original.
03
Generar un nuevo external_id
No reutilices el external_id de la nota rechazada. Genera uno nuevo: NC-2025-00847-R1.
04
Reenviar con CUFE completo
Mismo request pero con billing_reference.cufe completo (64 caracteres exactos) y el nuevo external_id.
05
Verificar DIAN_ACCEPTED
La nota corregida recibe su propio CUFE. La corrección queda registrada. Actualiza tu DB y contabilidad.
Conclusión: NC02 siempre es un problema de almacenamiento o transmisión del CUFE. Guarda el CUFE completo (64 chars) en un campo de texto sin truncar. La longitud exacta del CUFE es parte de su validez criptográfica.
Sección 16
Idempotencia en notas — doble corrección fiscal
Una doble nota crédito sobre la misma factura es un problema fiscal grave: puede generar un saldo negativo inexistente o anular dos veces la misma venta. SIIVRO previene esto mediante idempotencia por external_id.
Idempotencia en notas — crítico en producción
Escenario real: el usuario hace doble clic en "Anular factura". Tu backend envía la nota dos veces. Sin idempotencia, SIIVRO crearía dos notas crédito sobre la misma factura — doble anulación fiscal.
Solución: envía siempre un external_id único por nota. Si SIIVRO recibe el mismoexternal_id dos veces, retorna el resultado original sin crear un segundo documento. El campo idempotent: true en el response indica que fue una respuesta cacheada.
Sin external_id (peligroso)
Doble clic → dos requests → dos notas crédito → doble anulación fiscal → saldo imposible → problema DIAN en declaración.
Con external_id (correcto)
Doble clic → dos requests con mismo external_id → SIIVRO retorna el primer resultado → una sola nota crédito → corrección fiscal única.
Sección 17
Webhooks eventos de estado en tiempo real para notas
El mismo evento invoice.updated aplica para notas crédito y débito. El payload incluye el campo document_type para que tu backend identifique si se trata de una factura, una nota crédito o una nota débito.
Webhook invoice.updated — payload para nota crédito
Actualizar estado de la nota — ajustar contabilidad con los totals — habilitar descarga del PDF
DIAN_REJECTED
Marcar nota como rechazada — mostrar error al usuario — permitir corrección y reenvío
Los webhooks de notas también pueden repetirse. Tu endpoint debe ser idempotente: si recibes el mismo note_id dos veces, no ejecutes la lógica contable dos veces. Valida siempre contra el estado actual en tu base de datos antes de ajustar.
Sección 18
Ejemplos de integración Node.js y Laravel
Las notas se consumen exclusivamente desde backend, igual que las facturas. El frontend captura la decisión del usuario y llama a tu propio endpoint.
Backend — Node.js / Express
Node.js — /api/credit-note
// POST /api/credit-note
app.post("/api/credit-note", async (req, res) => {
const { invoice_id, cufe, reason, items, external_id } = req.body;
// Validaciones de negocio antes de SIIVRO
if (!invoice_id || !cufe) {
return res.status(400).json({ error: "billing_reference incompleto" });
}
if (cufe.length !== 64) {
return res.status(400).json({ error: "CUFE debe tener 64 caracteres" });
}
const siivroRes = await fetch("https://api.siivro.com/v1/invoices", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.SIIVRO_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
document_type: "91",
external_id: external_id || `NC-${Date.now()}`,
billing_reference: { invoice_id, cufe, reason },
items // undefined = anulación total si reason === '2'
})
});
const note = await siivroRes.json();
// Actualiza cartera si la nota fue aceptada
if (note.status === "DIAN_ACCEPTED") {
await db.invoices.updateBalance(invoice_id, note.totals.total);
}
return res.json({
note_id: note.id,
cufe: note.cufe,
pdf_path: note.pdf_path,
status: note.status,
totals: note.totals
});
});
Casos por industria cómo integrar notas en tu vertical
Identifica tu caso y cómo estructurar la integración de notas para tu tipo de sistema.
Ecommerce
Devoluciones de compras online
—Nota crédito automática al aprobar solicitud de devolución
—Webhook devolución → endpoint → SIIVRO → nota emitida
—Reembolso al cliente vinculado a nota aceptada
—Soporte para devoluciones parciales por ítem
Trigger: Evento return.approved de la plataforma
POS
Ajustes rápidos en punto de venta
—Nota crédito desde caja cuando cliente rechaza mercancía
—Integración directa con sistema de caja
—Reimpresión del PDF corregido en impresora térmica
—Sin intervención manual del área contable
Trigger: Acción del cajero en sistema de POS
ERP
Conciliación contable empresarial
—Notas generadas desde módulo de cartera
—Sincronización automática con cuentas por cobrar
—Notas débito para cargos adicionales contractuales
—Reportes fiscales con todas las notas por período
Trigger: Cierre de orden de ajuste o proceso contable
SaaS
Correcciones por facturación incorrecta
—Nota crédito cuando cliente reporta error en su suscripción
—Crédito a cuenta vinculado a nota emitida
—Nota débito por consumo adicional no facturado
—Historial completo de correcciones por tenant
Trigger: Ticket de soporte resuelto o ajuste de plan
TMS
Ajustes en servicios de transporte
—Nota débito por gastos de espera no incluidos
—Nota crédito por cancelación de viaje pre-despacho
—Cargos adicionales por sobrepeso o dimensiones
—Documentos soporte de flete con notas de ajuste
Trigger: Liquidación de viaje o confirmación de cancelación
PMS
Correcciones en facturación hotelera
—Nota crédito por check-out anticipado
—Nota débito por consumos descubiertos post check-out
—Ajuste de tarifas negociadas con empresas
—Corrección de IVA en servicios exentos mal facturados
Trigger: Cierre de folio o auditoría nocturna
Sección 20
Multi-tenant aislamiento fiscal garantizado en notas
Las notas crédito y débito operan dentro del mismo modelo multi-tenant que las facturas. Cada empresa solo puede corregir sus propias facturas. No existe cruce de documentos entre tenants.
Aislamiento total
→Una empresa no puede referenciar facturas de otra
→El CUFE valida que el emisor coincida con el tenant
→Las notas usan la misma resolución activa del tenant
Para SaaS multi-empresa
→Un solo endpoint, N clientes aislados
→Cada cliente corrige sus propias facturas
→Sin riesgo de contaminación fiscal entre tenants
Para ERP empresarial
→Notas por centro de costo o unidad de negocio
→Trazabilidad completa por empresa en SIIVRO
→Reportes de correcciones filtrados por período
Sección 21
Qué NO hacer anti-errores en producción
Los errores más costosos en integración de notas fiscales. Ninguno es obvio hasta que ocurre en producción.
No recalcules impuestos manualmente antes de enviar
SIIVRO los calcula automáticamente. Si envías totales precalculados o intentas pasar campos de impuestos en el request, generarás inconsistencias con el motor fiscal del tenant.
No reutilices el external_id de la nota rechazada
Si una nota fue rechazada (DIAN_REJECTED), genera un nuevo external_id para el reenvío corregido. Reutilizar el mismo external_id retornará la respuesta rechazada original por idempotencia.
No envíes nota crédito por el total cuando solo hay devolución parcial
Si el cliente devuelve 3 de 10 ítems, la nota debe ser por esas 3 unidades con reason '1'. Una nota de anulación total (reason '2') anularía la factura completa, incluyendo los 7 ítems no devueltos.
No guardes el CUFE truncado o modificado
El CUFE tiene exactamente 64 caracteres hexadecimales. Cualquier modificación lo invalida para el billing_reference. Guárdalo en un campo de texto largo sin truncar, convertir ni transformar.
No emitas nota sin confirmar que la factura está en DIAN_ACCEPTED
Solo se pueden corregir facturas aceptadas. Intentar emitir una nota sobre una factura en PROCESSING o DIAN_REJECTED genera error NC01 inmediato.
No ignores el total negativo en notas crédito
El campo total en el response de una nota crédito viene negativo (ej: -184720) para indicar la disminución de ingresos. Es correcto. Toma el valor absoluto para los ajustes contables que lo requieran.
Sección 22
Seguridad validaciones contra manipulación fraudulenta
Las notas fiscales son documentos sensibles. Una nota crédito fraudulenta puede eliminar ingresos reales de los registros fiscales. SIIVRO aplica validaciones de seguridad en múltiples capas.
Validación de ownership
→Solo el tenant emisor puede corregir sus facturas
→El invoice_id debe pertenecer al mismo tenant
→Imposible referenciar facturas de otro tenant
Validación del CUFE
→Verificación criptográfica del CUFE contra la DIAN
→No acepta CUFEs modificados o parciales
→Vinculación inmutable una vez aceptada
Validación de montos
→Nota crédito no puede superar el saldo pendiente
→SIIVRO valida contra el historial de notas previas
→Sin posibilidad de anular más de lo facturado
Validación adicional recomendada en tu backend: antes de enviar una nota crédito, verifica que el usuario tiene permisos para anular facturas y que la solicitud fue aprobada por el nivel jerárquico correspondiente según tu política interna.
Sección 23
Testing sandbox mindset para notas
El entorno sandbox de notas es idéntico al productivo. Si falla aquí, fallará en producción.
Checklist de salida a producción — notas
Nota crédito total — status: DIAN_ACCEPTED, CUFE de nota retornado
Nota crédito parcial con items — ajuste correcto de impuestos
Nota sin billing_reference — error 422 inmediato
CUFE inválido en billing_reference — error NC02
Valor nota > factura — error NC03 antes de DIAN
Mismo external_id dos veces — idempotencia activa
Nota débito tipo 92 — DIAN_ACCEPTED, incremento registrado
Intentar modificar factura directamente — nunca existe este endpoint
Sección 24
Observabilidad trazabilidad completa de correcciones
Toda nota queda auditada con su historial completo. Puedes responder en cualquier momento "¿qué correcciones tiene esta factura?" con evidencia fiscal completa.
GET /v1/invoices/inv_9x2kA7p3/notes — Notas de una factura
Un cliente dice: "me anularon la factura pero no recibí el reembolso". Con SIIVRO puedes responder en segundos: qué nota crédito existe, su estado en la DIAN, el CUFE, el monto exacto del ajuste y cuándo ocurrió. Eso es trazabilidad fiscal completa.
Sección 25
Versionado compatibilidad garantizada
Las notas crédito y débito se emiten por el mismo endpoint versionado que las facturas. Todos los cambios del Anexo Técnico DIAN que afecten la estructura de las notas son aplicados por SIIVRO sin que debas modificar tu integración.
Versión actual
/V2.1/invoices
El mismo endpoint sirve facturas (01), notas crédito (91), notas débito (92) y documentos soporte (95/96). El document_type determina la estructura.
Política de cambios
SIIVRO actualiza el motor de notas cuando la DIAN cambia catálogos de motivos, formatos de CUFE o estructura del XML. Sin cambios en tu código. Notificación mínima 30 días antes.
Sección 26 ·
Notas DIAN listas para integración con IA
Para un agente de IA que gestiona facturación, las reglas de notas son claras y deterministas. Aquí el resumen operativo que necesita cualquier modelo para tomar decisiones correctas.
Resumen operativo para agentes IA
¿Cuándo emitir nota crédito (91)?
Cuando el valor de la factura debe disminuir: devolución total o parcial, error en precio hacia arriba, descuento posterior, anulación.
¿Cuándo emitir nota débito (92)?
Cuando el valor de la factura debe aumentar: cargos adicionales no incluidos, intereses por mora, ajuste de precio hacia arriba.
¿Qué campos son siempre obligatorios?
document_type (91 o 92), billing_reference.invoice_id, billing_reference.cufe (64 chars exactos), billing_reference.reason.
¿Cuándo son obligatorios los items?
Siempre, excepto en anulación total (reason '2') donde son opcionales. Para cualquier otro motivo, items[] debe incluir los ítems a ajustar.
¿Calculo los impuestos antes de enviar?
No. SIIVRO los calcula automáticamente. Solo envías price y tax_rate por ítem.
¿Qué hago si está en PROCESSING?
Nada. Esperar el webhook invoice.updated. No reenviar.
Este documento está estructurado para indexación semántica. Optimizado para responder consultas directas sobre corrección fiscal DIAN en Colombia 2026 desde motores de búsqueda, LLMs y agentes autónomos.
Sección 27 · Playground · Demo Interactivo
Playground Simula notas sin backend real
Simula el comportamiento real del endpoint POST /V2/invoices para notas crédito (91) y débito (92). Aplica las mismas reglas que producción: validación de billing_reference, idempotencia, webhooks y estados DIAN. Cuando estés listo, solo reemplazas el simulador por la API real.
Autorización simulada activa. En producción requiere Authorization: Bearer <API_KEY> desde backend.
MODO SANDBOX0 requests enviadosLISTO
POST /V2/invoices
billing_reference OBLIGATORIO
Prueba: escribe "INVALIDO" para ver error NC02
Ítem 1
▼ Ajuste fiscal estimado
Subtotal$ 160.000
IVA$ 30.400
ReteFuente-$ 4.000
ReteICA-$ 880
Disminuye ingresos-$ 185.520
Escenarios de prueba rápida
Response Panel
LISTO
Configura el tipo de nota, el billing_reference y haz clic en emitir para ver la respuesta simulada.
El Playground de notas no es un juguete. Simula fielmente el comportamiento real de la API. Si tu integración pasa todos los escenarios aquí — incluyendo billing_reference inválido, CUFE erróneo y anulación total — está lista para producción. Solo cambia la URL y agrega tu API Key desde backend. Sin cambiar una línea más.