Nota de Crédito Electrónica
Esta sección describe los endpoints necesarios para crear notas de crédito electrónicas en el sistema de facturación electrónica de El Salvador.
Crear Nota de Crédito Electrónica
/api/v1/creditnotes
Crea y emite una nota de crédito electrónica
Este endpoint permite crear y emitir una nota de crédito electrónica que cumple con los requisitos del Ministerio de Hacienda. Las notas de crédito siempre deben hacer referencia a documentos fiscales existentes.
Ejemplo de Solicitud
Request
{
"items": [
{
"type": 1,
"description": "Venta gravada",
"quantity": 1,
"unit_measure": 59,
"unit_price": 1000.00,
"taxed_sale": 1000.00,
"exempt_sale": 0,
"non_subject_sale": 0,
"taxes": [
"20"
],
"related_doc" : "DE4BD411-DEBF-4EB8-B..."
}
],
"receiver": {
"nrc": "0000",
"nit": "00000000000000",
"name": "CLIENTE DE PRUEBA",
"commercial_name": "EJEMPLO S.A de S.V",
"activity_code": "47190",
"activity_description": "ACTIVIDADES JURÍDICAS Y CONTABLES",
"address": {
"department": "06",
"municipality": "22",
"complement": "Dirección de Prueba 1, N° 1234"
},
"phone": "21212828",
"email": "cliente@gmail.com"
},
"summary": {
"operation_condition": 1,
"total_taxed": 1000.00,
"iva_retention": 10,
"sub_total_sales": 1000.00,
"sub_total": 1000.00,
"total_operation": 1120.00,
"taxes": [
{
"code": "20",
"description": "IVA 13%",
"value": 130.00
}
]
},
"extension": {
"delivery_name": "Juan Pérez",
"delivery_document": "06141809931020",
"receiver_name": "María López",
"receiver_document": "06142509882011",
"observation": "Entrega en oficina central"
},
"related_docs": [
{
"document_type": "03",
"generation_type": 2,
"document_number": "DE4BD411-DEBF-4..."
}
],
// Nota, estos campos si NO seran ocupados, no es necesario enviarlos, los muestra acá unicamente como referencia
"appendixes": null,
"third_party_sale": null,
"other_docs": null
}
Ejemplo de Respuesta
Response
{
"success": true,
"reception_stamp": "202534D1BECF3321453...",
"qr_link": "https://admin.factura.gob.sv/consultaPublica?ambiente=00&codGen=5367521F-DD80-4B6B-9...&fechaEmi=FECHA-DE-EMISION",
"data": {
"identificacion": {
"version": 3,
"ambiente": "00",
"tipoDte": "05",
"numeroControl": "DTE-05-C0020000-000000000000001",
"codigoGeneracion": "5367521F-DD80-4B6B-9...",
"tipoModelo": 1,
"tipoOperacion": 1,
"tipoContingencia": null,
"motivoContin": null,
"fecEmi": "2025-04-16",
"horEmi": "17:54:19",
"tipoMoneda": "USD"
},
"emisor": {
"nit": "00000000000000",
"nrc": "0000000",
"nombre": "EMPRESA DE PRUEBAS SA DE CV 2",
"codActividad": "00000",
"descActividad": "Venta al por mayor de otros productos",
"tipoEstablecimiento": "01",
"direccion": {
"departamento": "06",
"municipio": "20",
"complemento": "BOULEVARD SANTA ELENA SUR, SANTA TECLA"
},
"telefono": "21212828",
"correo": "facturacion@empresa.com.sv",
"nombreComercial": "EJEMPLO"
},
"receptor": {
"nombre": "CLIENTE DE PRUEBA",
"nrc": "0000",
"nit": "00000000000000",
"codActividad": "00000",
"descActividad": "ACTIVIDADES JURÍDICAS Y CONTABLES",
"direccion": {
"departamento": "06",
"municipio": "22",
"complemento": "Dirección de Prueba 1, N° 1234"
},
"telefono": "21212828",
"correo": "cliente@gmail.com",
"nombreComercial": "EJEMPLO S.A de S.V"
},
"cuerpoDocumento": [
{
"numItem": 1,
"tipoItem": 1,
"numeroDocumento": "DE4BD411-DEBF-4EB8-B...",
"codigo": null,
"codTributo": null,
"descripcion": "Venta gravada",
"cantidad": 1,
"uniMedida": 59,
"precioUni": 1000,
"montoDescu": 0,
"ventaNoSuj": 0,
"ventaExenta": 0,
"ventaGravada": 1000,
"tributos": [
"20"
]
}
],
"resumen": {
"totalNoSuj": 0,
"totalExenta": 0,
"totalGravada": 1000,
"subTotalVentas": 1000,
"descuNoSuj": 0,
"descuExenta": 0,
"descuGravada": 0,
"totalDescu": 0,
"tributos": [
{
"codigo": "20",
"descripcion": "IVA 13%",
"valor": 130
}
],
"subTotal": 1000,
"ivaRete1": 10,
"ivaPerci1": 0,
"reteRenta": 0,
"montoTotalOperacion": 1120,
"totalLetras": "UN MIL CIENTO VEINTE 00/100",
"condicionOperacion": 1
},
"documentoRelacionado": [
{
"tipoDocumento": "03",
"tipoGeneracion": 2,
"numeroDocumento": "DE4BD411-DEBF-4EB8-B...",
"fechaEmision": "2025-04-16"
}
],
"ventaTercero": null,
"extension": {
"nombEntrega": "Juan Pérez",
"docuEntrega": "06141809931020",
"nombRecibe": "María López",
"docuRecibe": "06142509882011",
"observaciones": "Entrega en oficina central"
},
"apendice": [
{
"campo": "Datos del documento",
"etiqueta": "Sello de recepción",
"valor": "202534D1BECF33214..."
}
]
}
}
Campos principales
Los campos necesarios para crear una nota de crédito electrónica
Campo | Tipo | Descripción | Requerido |
---|---|---|---|
items | array | Lista de productos o servicios que componen la nota de crédito | Sí |
items[].type | integer | Tipo de ítem (1: Producto, 2: Servicio, 3: Ambos, 4: Impuesto) | Sí |
items[].code | string | Código del producto o servicio (1-25 caracteres) | No |
items[].description | string | Descripción del ítem (1-1000 caracteres) | Sí |
items[].quantity | number | Cantidad del ítem (debe ser mayor que 0 y <= 99999999999.99) | Sí |
items[].unit_measure | integer | Unidad de medida (1-99, debe ser 99 para tipo 4) | Sí |
items[].unit_price | number | Precio unitario (debe ser mayor o igual a 0, mayor que 0 si hay venta gravada) | Sí |
items[].discount | number | Monto de descuento para el ítem (0-100)
(Predeterminado: 0
)
| Sí |
items[].related_doc | string | Número del documento relacionado que se está rectificando | Sí |
items[].taxed_sale | number | Venta gravada (debe ser mayor o igual a 0, no puede mezclarse con otros tipos)
(Predeterminado: 0
)
| No |
items[].exempt_sale | number | Venta exenta (debe ser mayor o igual a 0, no puede mezclarse con otros tipos)
(Predeterminado: 0
)
| No |
items[].non_subject_sale | number | Venta no sujeta (debe ser mayor o igual a 0, no puede mezclarse con otros tipos)
(Predeterminado: 0
)
| No |
items[].tax_code | string | Código de impuesto | No |
items[].taxes | array | Lista de impuestos aplicables al ítem (obligatorio con venta gravada) | No |
receiver | object | Información del receptor o cliente (debe coincidir con el documento original) | Sí |
receiver.name | string | Nombre del receptor | Sí |
receiver.address | object | Dirección del receptor | Sí |
receiver.address.department | string | Código de departamento del receptor | Sí |
receiver.address.municipality | string | Código de municipio del receptor | Sí |
receiver.address.complement | string | Complemento de la dirección del receptor | Sí |
receiver.nit | string | NIT del receptor (obligatorio si el documento relacionado es un CCF) | No |
receiver.nrc | string | NRC del receptor (obligatorio si el documento relacionado es un CCF) | No |
receiver.activity_code | string | Código de actividad económica (obligatorio si el documento relacionado es un CCF) | No |
receiver.activity_description | string | Descripción de actividad económica (obligatorio si el documento relacionado es un CCF) | No |
receiver.commercial_name | string | Nombre comercial (obligatorio si el documento relacionado es un CCF) | No |
receiver.email | string | Correo electrónico del receptor | No |
receiver.phone | string | Teléfono del receptor (8-30 caracteres) | No |
related_docs | object | Documentos relacionados que se están rectificando | Sí |
related_docs.items | array | Lista de documentos relacionados | Sí |
related_docs.items[].document_type | string | Tipo de documento (03: CCF, 14: Factura Sujeto Excluido) | Sí |
related_docs.items[].generation_type | integer | Tipo de generación (1: Normal, 2: Contingencia) | Sí |
related_docs.items[].document_number | string | Número del documento relacionado | Sí |
related_docs.items[].emission_date | string | Fecha de emisión del documento relacionado (formato YYYY-MM-DD) | Sí |
summary | object | Resumen de totales de la nota de crédito | Sí |
summary.total_taxed | number | Total de ventas gravadas | Sí |
summary.total_exempt | number | Total de ventas exentas | Sí |
summary.total_non_subject | number | Total de ventas no sujetas | Sí |
summary.sub_total_sales | number | Subtotal de ventas (suma de total_taxed + total_exempt + total_non_subject) | Sí |
summary.taxed_discount | number | Descuento sobre ventas gravadas | Sí |
summary.exempt_discount | number | Descuento sobre ventas exentas | Sí |
summary.non_subject_discount | number | Descuento sobre ventas no sujetas | Sí |
summary.total_discount | number | Total de descuentos | Sí |
summary.sub_total | number | Subtotal (sub_total_sales - descuentos) | Sí |
summary.operation_condition | integer | Condición de operación (1: Contado, 2: Crédito, 3: Otro) | Sí |
summary.taxes | array | Impuestos aplicados a la nota de crédito | No |
summary.iva_retention | number | Retención de IVA
(Predeterminado: 0
)
| Sí |
summary.income_retention | number | Retención de renta
(Predeterminado: 0
)
| Sí |
summary.iva_perception | number | Percepción de IVA (si > 0, debe ser 1% del total_taxed)
(Predeterminado: 0
)
| Sí |
summary.total_operation | number | Total de la operación (considerando impuestos, retenciones y percepciones) | Sí |
items
Requerido array
items[].type
Requerido integer
items[].code
Opcional string
items[].description
Requerido string
items[].quantity
Requerido number
items[].unit_measure
Requerido integer
items[].unit_price
Requerido number
items[].discount
Requerido number
0
items[].related_doc
Requerido string
items[].taxed_sale
Opcional number
0
items[].exempt_sale
Opcional number
0
items[].non_subject_sale
Opcional number
0
items[].tax_code
Opcional string
items[].taxes
Opcional array
receiver
Requerido object
receiver.name
Requerido string
receiver.address
Requerido object
receiver.address.department
Requerido string
receiver.address.municipality
Requerido string
receiver.address.complement
Requerido string
receiver.nit
Opcional string
receiver.nrc
Opcional string
receiver.activity_code
Opcional string
receiver.activity_description
Opcional string
receiver.commercial_name
Opcional string
receiver.email
Opcional string
receiver.phone
Opcional string
related_docs
Requerido object
related_docs.items
Requerido array
related_docs.items[].document_type
Requerido string
related_docs.items[].generation_type
Requerido integer
related_docs.items[].document_number
Requerido string
related_docs.items[].emission_date
Requerido string
summary
Requerido object
summary.total_taxed
Requerido number
summary.total_exempt
Requerido number
summary.total_non_subject
Requerido number
summary.sub_total_sales
Requerido number
summary.taxed_discount
Requerido number
summary.exempt_discount
Requerido number
summary.non_subject_discount
Requerido number
summary.total_discount
Requerido number
summary.sub_total
Requerido number
summary.operation_condition
Requerido integer
summary.taxes
Opcional array
summary.iva_retention
Requerido number
0
summary.income_retention
Requerido number
0
summary.iva_perception
Requerido number
0
summary.total_operation
Requerido number
Validaciones específicas para Nota de Crédito
- Documentos Relacionados Obligatorios: A diferencia de otros documentos fiscales, las notas de crédito siempre deben tener al menos un documento relacionado.
- Referencia en Ítems: Todos los ítems deben tener un
related_doc
que referencie a undocument_number
en la secciónrelated_docs
. - Los ítems solo pueden tener un tipo de venta (gravada, exenta o no sujeta)
-
Si hay
taxed_sale > 0
(venta gravada):unit_price
debe ser mayor que 0- Debe existir al menos un impuesto (IVA) en el array
taxes
-
Para ítems tipo 4 (Impuesto),
unit_measure
debe ser 99 y solo se permite el código de impuesto IVA (20) -
El
receiver
debe coincidir con el receptor del documento original que se está rectificando -
Si el documento relacionado es un Comprobante de Crédito Fiscal (CCF), los campos
nit
,nrc
,activity_code
,activity_description
ycommercial_name
del receptor son obligatorios - El cálculo de impuestos debe considerar los descuentos aplicados
Campos Opcionales
Estos campos complementan la información principal de la factura electrónica, permitiendo casos de uso más específicos.
1. Extension (Extensión)
La extensión contiene información sobre entrega y recepción de bienes o servicios.
Ejemplo de extensión requerida
{
"extension": {
"delivery_name": "string",
"delivery_document": "string",
"receiver_name": "string",
"receiver_document": "string",
"observation": "string"
}
}
Campos del objeto extension
La extensión es obligatoria cuando el monto total es mayor o igual a $1,095.00
Campo | Tipo | Descripción | Requerido |
---|---|---|---|
delivery_name | string | Nombre de quien entrega (1-100 caracteres) | Sí |
delivery_document | string | Documento de quien entrega (1-25 caracteres, DUI o NIT por ejemplo) | Sí |
receiver_name | string | Nombre de quien recibe (1-100 caracteres) | Sí |
receiver_document | string | Documento de quien recibe (1-25 caracteres, DUI o NIT por ejemplo) | Sí |
observation | string | Observaciones adicionales (máx. 3000 caracteres) | No |
delivery_name
Requerido string
delivery_document
Requerido string
receiver_name
Requerido string
receiver_document
Requerido string
observation
Opcional string
Nota
A diferencia de factura y CCF, la extensión de Nota de Crédito no posee el campo vehicule_plate
2. Appendixes (Apéndices)
Los apéndices son campos adicionales que proporcionan información complementaria al documento principal.
Estructura de Apéndices
"appendixes": [
{
"field": "string",
"label": "string",
"value": "string"
},
]
Campos de Apéndices
Validaciones para el objeto appendixes
Campo | Tipo | Descripción | Requerido |
---|---|---|---|
field | string | Nombre del campo adicional (2-25 caracteres) | Sí |
label | string | Etiqueta o título del campo (3-50 caracteres) | Sí |
value | string | Valor del campo (1-150 caracteres) | Sí |
field
Requerido string
label
Requerido string
value
Requerido string
Consideraciones importantes:
- Los apéndices son opcionales en la factura electrónica.
- Si se incluyen, todos los campos son obligatorios.
- El sistema puede agregar automáticamente un apéndice conteniendo el "sello de recepción".
3. Other Documents (Otros Documentos)
Los otros documentos incluyen documentos asociados a la operación, como documentos de transporte o médicos.
Estructura de Otros Documentos
"other_docs": [
{
"document_code": 0,
"description": "string",
"detail": "string",
"doctor": {
"name": "string",
"nit": "string",
"identification": "string",
"service_type": 0
}
}
]
Campos de Otros Documentos
Validaciones para el objeto other_docs
Campo | Tipo | Descripción | Requerido |
---|---|---|---|
document_code | integer | Código del documento (1-4) | Sí |
description | string | Descripción del documento. Obligatorio si document_code ≠ 3 | No |
detail | string | Detalle del documento. Obligatorio si document_code ≠ 3 | No |
doctor | object | Información del médico. Obligatorio si document_code = 3 | No |
document_code
Requerido integer
description
Opcional string
detail
Opcional string
doctor
Opcional object
Campos del objeto doctor
Validaciones para el objeto doctor dentro de other_docs
Campo | Tipo | Descripción | Requerido |
---|---|---|---|
name | string | Nombre del médico (1-100 caracteres) | Sí |
service_type | integer | Tipo de servicio médico (1-6) | Sí |
nit | string | NIT del médico. Requerido si identification no se proporciona | No |
identification | string | Identificación del médico. Requerido si nit no se proporciona | No |
name
Requerido string
service_type
Requerido integer
nit
Opcional string
identification
Opcional string
Códigos de Documentos:
- Documento de Emisor
- Documento de Receptor
- Documento Médico
- Documento de Transporte
Consideraciones importantes:
- La sección es opcional, pero si se incluye, debe contener entre 1 y 10 documentos.
- Validaciones específicas:
description
: 1-100 caracteresdetail
: 1-300 caracteres
- Cuando
document_code = 3
(Documento Médico), el objetodoctor
es obligatorio y los camposdescription
ydetail
deben estar ausentes. - Para los otros códigos,
description
ydetail
son obligatorios ydoctor
debe estar ausente. - En
doctor
, debe proporcionarse o biennit
o bienidentification
, pero no ambos.
4. Third Party Sale (Venta a Terceros)
Representa ventas realizadas por cuenta de un tercero.
Estructura de Venta a Terceros
"third_party_sale": {
"name": "string",
"nit": "string"
}
Campos de Venta a Terceros
Validaciones para el objeto third_party_sale
Campo | Tipo | Descripción | Requerido |
---|---|---|---|
nit | string | NIT del tercero (formato NIT válido) | Sí |
name | string | Nombre del tercero | Sí |
nit
Requerido string
name
Requerido string
Consideraciones importantes:
- La sección es opcional.
- Si se incluye, todos sus campos son obligatorios.
- Cuando existe venta a terceros, todos los ítems deben tener su campo
related_doc
con referencia a un documento relacionado. - No se pueden mezclar ventas propias con ventas a terceros en el mismo documento.