Skip to main content

🧾 Responsabilidades tributarias

Las responsabilidades tributarias son las obligaciones fiscales que declara cada parte del documento electrónico: la empresa emisora, el adquiriente, el proveedor del documento soporte y las partes de entrega. En el RUT salen en la casilla 53 – Responsabilidades, Calidades y Atributos y el anexo técnico de la DIAN las pide en el elemento cbc:TaxLevelCode de cac:PartyTaxScheme.

Un tercero puede cumplir varias a la vez (por ejemplo gran contribuyente y autorretenedor). Por eso, además del campo de siempre type_liability_id —una sola—, existe type_liability_ids, un arreglo con todas las que marque ese tercero.

Son los registros de la tabla type_liabilities del API. Los ids de una instalación estándar:

idCódigoNombre
7O-13Gran contribuyente
9O-15Autorretenedor
14O-23Agente de retención en el impuesto sobre las ventas
112O-47Régimen Simple de Tributación – SIMPLE
117R-99-PNNo aplica – Otros
note

R-99-PN es el valor que se usa cuando el tercero no informa ninguna responsabilidad, así que no acompaña a las demás: cuando se envían varias responsabilidades reales, el API lo descarta del cbc:TaxLevelCode.

Responsabilidades de la empresa emisora​

Se registran una sola vez en la configuración de la empresa y valen para todos sus documentos.

POST/PUT /api/ubl2.1/config/{nit}/{dv}

{
"type_document_identification_id": 6,
"type_organization_id": 1,
"type_regime_id": 1,
"type_liability_id": 14,
"type_liability_ids": [7, 9],
"business_name": "EMPRESA DE PRUEBA SAS",
"merchant_registration": "0000000-00"
}
  • type_liability_id: la responsabilidad principal. Sigue siendo obligatoria.
  • type_liability_ids: las demás. Se combinan con la principal y se eliminan los repetidos, así que no hace falta volver a incluirla en el arreglo.
  • Si no hay responsabilidades adicionales envíe null, [] o no envíe el campo: las tres formas se entienden como "ninguna" y el documento sale con la responsabilidad principal.

Las responsabilidades guardadas también se devuelven en la consulta de configuración de la empresa (GET /api/ubl2.1/config/query/{nit}), con la que otros sistemas importan la empresa desde el API.

Desde el panel​

En Empresa › Nueva empresa, la principal se elige en Tipo Responsabilidad y las demás en Responsabilidades adicionales, un campo de selección múltiple debajo de la fila Tipo Responsabilidad / Organización / Régimen. Para quitar una se pulsa la × de su etiqueta.

Campo Responsabilidades adicionales desplegado en el primer paso del asistente de nueva empresa

El mismo campo está en Editar Empresa, pestaña Información de la Empresa, del listado de empresas. Y al cargar la Ficha RUT en el asistente, el API lee la casilla 53 y marca solas todas las responsabilidades que encuentre: la de mayor prioridad queda en Tipo Responsabilidad y el resto en Responsabilidades adicionales.

Responsabilidades del cliente y de las demás partes​

Van en el cuerpo de cada documento, dentro del objeto de la parte que corresponda:

ParteCampo
Adquiriente (facturas, notas, documentos equivalentes)customer.type_liability_ids
Proveedor (documento soporte y su nota de ajuste)seller.type_liability_ids
Tercero de entregadeliveryparty.type_liability_ids

Ejemplo de una factura (POST /api/ubl2.1/invoice):

{
"number": 990000001,
"type_document_id": 1,
"customer": {
"identification_number": "900428042",
"dv": "1",
"name": "TAMPAC TECNOLOGIA EN AUTOMATIZACION SAS",
"phone": "3001234567",
"address": "CALLE 1 # 1 - 1",
"email": "cliente@ejemplo.com",
"type_document_identification_id": 6,
"type_organization_id": 1,
"type_regime_id": 1,
"municipality_id": 1006,
"type_liability_id": 14,
"type_liability_ids": [7, 9]
}
}

El campo es opcional y se valida igual en todos los tipos de documento: factura, factura de exportación, mandato, transporte, AIU, contingencias, notas crédito y débito, documento equivalente, documento soporte y la regeneración de PDF. Si alguno de los ids no existe en el catálogo, el API responde con el error de validación del campo.

Cómo queda en el XML​

Los códigos se envían en un solo cbc:TaxLevelCode, separados por punto y coma y ordenados por el id del catálogo, no por el orden en que se enviaron. El atributo listName es el código del régimen (type_regime_id): 48 responsable de IVA, 49 no responsable.

Con el customer del ejemplo anterior (type_liability_id: 14 más type_liability_ids: [7, 9]):

<cac:PartyTaxScheme>
<cbc:RegistrationName>TAMPAC TECNOLOGIA EN AUTOMATIZACION SAS</cbc:RegistrationName>
<cbc:CompanyID schemeID="1" schemeName="31">900428042</cbc:CompanyID>
<cbc:TaxLevelCode listName="48">O-13;O-15;O-23</cbc:TaxLevelCode>
...
</cac:PartyTaxScheme>

El mismo valor se informa en el AttachedDocument (ad*.xml), en la parte de entrega, en el emisor del documento soporte y en los eventos RADIAN.

Cómo queda en el PDF​

La representación gráfica imprime los nombres de las responsabilidades separados por coma, tanto en los datos del emisor del encabezado como en los del adquiriente:

Responsabilidad: Gran contribuyente, Autorretenedor, Agente de retención en el impuesto sobre las ventas

Si el tercero solo informó type_liability_id, se imprime el nombre de esa única responsabilidad.

Si su sistema guarda una sola responsabilidad por tercero

El API acepta varias por tercero, pero quien envía los documentos tiene que guardarlas y mandarlas. Si el sistema que integra (por ejemplo el Facturador PRO) guarda una sola responsabilidad en la ficha del cliente, en los documentos llegará solo esa aunque el cliente cumpla varias: hay que habilitar el campo múltiple también allá y enviarlo en type_liability_ids.