Certificado tributario

Lo que un agente retenedor le retuvo a un tercero en un año gravable, o el IVA que le facturó, por concepto, por mes y documento a documento.

certificado-retencion, con el diseño estandar: el certificado que un agente retenedor le entrega a cada beneficiario al cerrar el año, para que lo use en su declaración.

Un solo tipo para los cuatro tributos. tipo dice cuál es —retefuente, reteiva, reteica o iva— y con él cambian el título y el nombre de las columnas; la maquetación es la misma, porque es el mismo documento.

"tipo": "retefuente",                                  // retefuente | reteiva | reteica | iva
"titulo": "Certificado de retención en la fuente",     // opcional: sin él, el del tipo
"anioGravable": 2025,
"agenteRetenedor": { "nombre": "Inversiones Altamar S.A.S.", "nit": "901223445-7",
                     "direccion": "Carrera 43A # 1-50, Of. 1204", "ciudad": "Medellín" },
"beneficiario":    { "nombre": "Servicios Integrales del Valle S.A.S.", "nit": "900345678-1",
                     "direccion": "Calle 10 # 40-21", "ciudad": "Itagüí" },
"conceptos": [                                         // obligatorio, al menos uno
  { "concepto": "Honorarios", "base": 24000000, "retenido": 2640000 }
],
"meses": [                                             // opcional: el resumen por mes
  { "mes": "junio", "base": 24000000, "retenido": 1410000 }
],
"detalle": [                                           // opcional: el anexo documento a documento
  { "fecha": "2025-06-09", "factura": "FV-10488", "concepto": "Honorarios",
    "base": 12000000, "tarifa": "11 %", "retenido": 1320000 }
],
"totalBase": 90000000,
"totalRetenido": 5190000,                              // obligatorio: la cifra por la que existe el papel
"pagos": 14,                                           // cuántos pagos, no cuánto se pagó
"expedidoEl": "2026-02-27", "lugarExpedicion": "Medellín",
"textoLegal": "Este certificado se expide de conformidad con el artículo 381 …",
"firma": { "nombre": "Claudia Patricia Henao", "documento": "CC 43.118.772",
           "tarjetaProfesional": "T.P. 48.221-T", "cargo": "Revisora fiscal",
           "trazo": "https://…/firma.png" }            // opcional, entero
  • Aquí no se suma nada, y en este documento menos que en ningún otro. totalBase y totalRetenido llegan hechos y se imprimen tal como llegan, aunque no cuadren con los conceptos: la cifra que sale aquí la declara el beneficiario ante la DIAN, y quien responde por ella es quien la calculó. Tampoco se deriva la tarifa de la base y lo retenido, ni se traduce el concepto.
  • tipo cambia lo que el documento afirma. En los tres de retención la columna se llama «Retenido» y la base es la que estuvo sujeta a retención. En iva no hubo retención ninguna: la columna dice «IVA facturado» y la base, «Valor facturado sin IVA». Un tipo que no sea uno de los cuatro responde 400 diciendo cuáles hay.
  • La firma es opcional; la leyenda, no. Con firma se dibuja el bloque con su trazo —PNG o JPEG, por URL o data:—, su documento, su cargo y su tarjeta profesional, y sin sello de tiempo: un certificado no prueba cuándo lo recibieron. Sin firma no queda ninguna raya en blanco, porque el textoLegal suele decir que no requiere firma autógrafa. La leyenda se imprime en los dos casos.
  • El anexo y el resumen por mes son opcionales. Con detalle, cada documento con su fecha, su factura, su base, su tarifa y lo retenido, para cruzarlo con la contabilidad del beneficiario; sin él, no hay ni título ni hoja de más. Lo mismo con meses.
  • Si el anexo no cabe en una hoja, la tabla continúa en la siguiente repitiendo su cabecera, y la firma con la leyenda no se parten entre hojas.
  • Lo obligatorio: tipo, anioGravable, agenteRetenedor.nombre y .nit, beneficiario.nombre y .nit, conceptos, totalRetenido, expedidoEl y textoLegal. Sin alguno, la respuesta es 400 con la lista de lo que falta y no se compone ningún PDF. Un totalRetenido en cero es válido: cero es una cifra.
  • El documento sale además en cuatro paletas —corporativa (azul), profesional (verde), minimalista (violeta) y basica (naranja)—, con la misma maquetación. Acepta también notes, fields, sideNotes, selectedCurrency y yourCompany para el logo y los contactos del agente retenedor.

Ejemplos: certificado-retencion.json (retefuente, con anexo y firma), certificado-retencion-reteiva.json, certificado-retencion-reteica.json y certificado-retencion-iva.json.