Factura de Compra-Venta
Paso 1: Autenticación
Si no se ha realizado previamente, se debe obtener un access_token para autenticarse en los servicios mencionados en los pasos siguientes, siguiendo lo descrito en la sección de autenticación.
Paso 2: Validar NIT
Este paso solo se sigue cuando el Tipo de Documento de Identidad incluido en la factura es NIT (código de tipo de documento de identidad: 5). En estos casos, se debe utilizar el servicio para validar el NIT.
Parámetros:
branchCode: Código de sucursal.nit: Representa el número de NIT al cual se emitirá la factura.
Respuesta exitosa (Código 200)
{
"status": "string",
"data": {
"codigo": 0,
"descripcion": "string"
}
}
Donde:
codigo: Código del estado del NIT.descripcion: Descripción del estado del NIT.
Basándose en la respuesta del servicio, se define el valor del campo codigoExcepcion:
- Código de Excepción (0): NIT Válido.
- Código de Excepción (1): NIT Inválido.
Nota: En caso de que el NIT sea inválido, debe confirmar con el usuario final la emisión de la factura con un NIT inválido (enviando el
codigoExcepcioncon valor1).
Paso 3: Facturación
Para poder emitir una factura refiérase al siguiente enlace de la documentación:
POST/api/v1/sucursales/{branchCode}/facturas/compra-ventaRealiza la emisión de una factura de Compra-Venta.Parámetro URL:
branchCode: Código de la sucursal.
Cuerpo de Petición (Ejemplo):
{
"numeroFactura": 9999999998,
"nombreRazonSocial": "string",
"codigoPuntoVenta": 9999,
"fechaEmision": "2021-01-25T18:03:00.000Z",
"cafc": "101A6A36DA839",
"codigoExcepcion": true,
"descuentoAdicional": 0,
"montoGiftCard": 0,
"codigoTipoDocumentoIdentidad": 5,
"numeroDocumento": "string",
"complemento": "strin",
"codigoCliente": "string",
"codigoMetodoPago": 26,
"numeroTarjeta": 10000000000000000,
"montoTotal": 1,
"codigoMoneda": 154,
"montoTotalMoneda": 1,
"usuario": "string",
"emailCliente": "string",
"telefonoCliente": "string",
"extras": {
"uniqueCode": "string",
"facturaTicket": "string"
},
"codigoLeyenda": 0,
"montoTotalSujetoIva": 1,
"tipoCambio": 1,
"detalles": [
{
"codigoProducto": "string",
"codigoActividadSin": "string",
"codigoProductoSin": 99999999,
"descripcion": "string",
"unidadMedida": 69,
"precioUnitario": 1,
"subTotal": 1,
"cantidad": 1,
"numeroSerie": "string",
"montoDescuento": 0,
"numeroImei": "string"
}
]
}
Especificaciones de los campos
| Campo | Tipo | Ejemplo | Formato | Min tam | Max Tam | Obligatorio |
|---|---|---|---|---|---|---|
numeroFactura | Número | 1 | 1 | 9999999 | No (opcional si Emizor gestiona) | |
nombreRazonSocial | Cadena | 3 | 150 | Si | ||
codigoPuntoVenta | Número | 0 | 1 | 5 | Si | |
fechaEmision | Cadena | 2021-01-25T18:03:00.000Z | ISO8601 | 24 | 24 | Si |
cafc | Cadena | 101A6A36DA839 | 1 | 13 | No | |
codigoExcepcion | Número | 1 | - | - | No | |
descuentoAdicional | Número | 17.2 | 1 | 9 | Si | |
montoGiftCard | Número | 0 | 17.2 | 1.0 | 9999999.99 | Si |
codigoTipoDocumentoIdentidad | Número | 1 | 1 | 5 | Si | |
numeroDocumento | Cadena | 123456 | 1 | 18 | Si | |
complemento | Cadena | A1 | 1 | 5 | No | |
codigoCliente | Cadena | 3 | 150 | Si | ||
codigoMetodoPago | Número | 1 | 1 | 5 | Si | |
numeroTarjeta | Número | 123400005678 | 8 | 16 | No | |
montoTotal | Número | 1000.36 | 17.2 | 1.0 | 9999999.99 | Si |
codigoMoneda | Número | 154 | 1 | 5 | Si | |
montoTotalMoneda | Número | 1000.36 | 17.2 | 1.0 | 9999999.99 | Si |
usuario | Cadena | Roberto Lopez | 3 | 80 | Si | |
emailCliente | Cadena | juanperez@example.com | x@x.x | 5 | 50 | Si |
telefonoCliente | Número | - | 15 | No | ||
extras | JSON | { "terminos": "", "notas": "", "nombreContacto": "", "facturaTicket": "546456sd4ds54d6sa" } | {} | - | - | Si, La facturaTicket debe ser siempre enviada como único código. |
codigoLeyenda | Número | 1 | 1 | 5 | Si | |
montoTotalSujetoIva | Número | 1000.36 | 17.2 | 1.0 | 9999999.99 | Si |
tipoCambio | Número | 6.96 | 17.2 | 1.0 | 9999999.99 | Si |
detalles | Arreglo | [{},{},...] | 1 (productos) | 500 (productos) | Si | |
codigoProducto | Cadena | 2 | 30 | Si | ||
codigoActividadSin | Cadena | 1 | 10 | Si | ||
codigoProductoSin | Número | 1000 | 1 | 999999 | Si | |
cantidad | Número | 17.2 | 1 | 5 | Si | |
precioUnitario | Número | 17.2 | 1 | 5 | Si | |
descripcion | Cadena | 3 | 500 | Si | ||
unidadMedida | Número | 57 | 3 | 1 | 104 | No |
subTotal | Número | 100.45 | 17.2 | 1.0 | 9999999.99 | Si |
montoDescuento | Número | 10.19 | 17.2 | NULL | 99999.99 | Si |
numeroSerie | Cadena | 1 | 1500 | No | ||
numeroImei | Cadena | 1 | 1500 | No |
Descripción de cada campo:
| Campo | Descripción |
|---|---|
numeroFactura | Representa el numero de factura. Nota: Si desea que el sistema gestione de manera automática la numeración de sus facturas no envíe este campo. |
nombreRazonSocial | Representa el nombre o razón social del cliente. |
codigoPuntoVenta | Representa el código del punto de venta en el cual se emite la factura. |
fechaEmision | Representa la fecha de emisión de la factura. |
cafc | Representa el CAFC si corresponde (Facturas computarizadas fuera de línea). |
codigoExcepcion | Enviar 1 si se confirmó la emisión de la factura para un NIT inválido. Caso contrario enviar 0. |
descuentoAdicional | Representa el descuento adicional que se aplica al monto total. |
montoGiftCard | Representa el monto pagado con una Gift Card. |
codigoTipoDocumentoIdentidad | Representa el código del tipo de documento de identidad del cliente. Ej: 1: CI; 2: CI Extranjero; 3: Pasaporte; 4: Otros; 5: NIT. |
numeroDocumento | Representa el número de documento del cliente. |
complemento | Representa el complemento del CI del cliente. |
codigoCliente | Representa el código de cliente en el sistema local. |
codigoMetodoPago | Representa el código del método de pago. (Ver tabla paramétricas métodos pago). |
numeroTarjeta | Representa los primeros 4 dígitos y los últimos 4 dígitos de la tarjeta de crédito o débito Ej: 5412000000008451. |
montoTotal | Representa el monto total de la factura. |
codigoMoneda | Representa el código de la moneda utilizada. (Ver tabla paramétricas moneda). |
montoTotalMoneda | Representa el monto total de la factura en la moneda utilizada. Nota: Si la moneda es Bolivianos (154) es el mismo valor que el montoTotal. |
usuario | Representa el usuario que emite la factura. |
emailCliente | Representa el correo electrónico del cliente para el envío de la factura. |
telefonoCliente | Representa el teléfono del cliente. |
extras | Representa un objeto json con información extra para la factura. |
extras => facturaTicket | Este parámetro es obligatorio ya que sirve para registrar la factura de manera única en el sistema EMIZOR. |
codigoLeyenda | Representa el código de la leyenda que se mostrará en la factura. (Ver tabla paramétricas leyendas). |
montoTotalSujetoIva | Representa el monto total de la factura que está sujeto al pago del IVA. Nota: Si hay Gift Card, el monto total sujeto a IVA es el monto total menos el monto de la Gift Card. |
tipoCambio | Representa el tipo de cambio utilizado si la moneda es diferente a Bolivianos. |
detalles | Representa un arreglo de objetos json con el detalle de los ítems de la factura. |
codigoProducto | Representa el código de producto propio. |
codigoActividadSin | Representa el código de actividad económica asociado al producto. |
codigoProductoSin | Representa el código de producto del SIN asociado al producto. |
descripcion | Representa la descripción del producto. |
unidadMedida | Representa el código de la unidad de medida del producto. (Ver tabla paramétricas unidades). |
precioUnitario | Representa el precio unitario del producto. |
subTotal | Representa el subtotal del ítem. Calculado como: (precioUnitario * cantidad) - montoDescuento. |
cantidad | Representa la cantidad vendida. |
numeroSerie | Representa el número de serie del producto (si corresponde). |
montoDescuento | Representa el monto del descuento aplicado al ítem. |
numeroImei | Representa el número de IMEI del producto (si corresponde). |
Posibles errores (Código 400):
{
"status": "error",
"error": {
"numeroFactura": [
"El atributo 'numero factura' es requerido",
"numero factura debe ser un número entero."
]
// ... otros errores de validación ...
}
}
Respuestas
| Código | Respuesta |
|---|---|
| 200 | Exitoso. Devuelve información como cuf, ack_ticket, urlSin, xml_url, shortLink, etc. |
| 201 | Devuelve información de errores de validación: {"status": false, "data": {"Nombre_campo": ["validación_1", "validación_2"]}} |
| 401 | {"message": "Unauthenticated"} |
| 404 | No se pudo realizar el proceso por alguna inconsistencia de parámetros: {"status": false, "data": {"Punto de Venta no encontrado", "etc"}} |
Campos importantes en respuesta 200:
- CUF: Código Único de Factura gestionado por Impuestos Nacionales.
- urlSin: Representa la URL de la factura en el SIN.
- emission_type_code: 1 para EN LÍNEA, 2 para FUERA DE LÍNEA.
- numeroFactura: Número de factura.
- shortLink: Enlace del PDF de la factura.
- xml_url: Enlace del XML de la factura.
Paso 4: Revisar el Estado de la Factura
El servicio está descrito en la sección 3.2 de este documento.
Paso 5: Obtener Detalles de la Factura
El servicio está descrito en la sección 3.3 de este documento.