Factura Electronica - Contado
La Factura Electronica de Contado es el documento tributario electronico utilizado para registrar ventas con pago inmediato. Este documento se emite cuando el cliente realiza el pago total al momento de la transaccion, sin condiciones de credito.
Endpoint
POST
{URL_BASE}/facturacion-api/data.php
Parametros
| Parametro | Tipo | Descripcion |
|---|---|---|
| recordID | String | API Key proporcionada por CheFactura |
| datajson | String | JSON string con los datos de la factura |
Estructura del JSON
Campos principales
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
| tipoDocumento | String | Si | Debe ser "1" para Factura |
| establecimiento | String | Si | Codigo de establecimiento (ej: "001") |
| punto | String | Si | Punto de expedicion (ej: "001") |
| numero | String | Si | Numero del documento, 7 digitos (ej: "0000060") |
| descripcion | String | No | Informacion de interes del emisor |
| fecha | String | Si | Formato YYYY-MM-DD HH:mm:ss |
| tipoEmision | Integer | Si | 1=Normal, 2=Contingencia |
| tipoTransaccion | Integer | Si | 1=Venta mercaderia, 2=Prestacion servicio, 3=Mixto, 4=Venta moneda extranjera |
| condicionPago | Integer | Si | Debe ser 1 para Contado |
| moneda | String | Si | Codigo moneda: PYG, USD, BRL, EUR |
| cambio | Number | Condicional | Tipo de cambio. Obligatorio si moneda != PYG |
| descuentoGlobal | Number | No | Descuento global a distribuir entre items. Default 0 |
| totalPago | Number | Si | Monto total del documento |
| totalRedondeo | Number | No | Redondeo SEDECO (multiplos de 50 Gs). Default 0 |
| receiptid | String | Si | ID unico del sistema cliente, no repetir |
| codigoSeguridadAleatorio | String | Si | 9 digitos aleatorios |
Objeto cliente
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
| ruc | String | Condicional | RUC con DV (ej: "80012345-6"). Vacio para factura sin nombre |
| nombre | String | Si | Razon social o nombre del cliente |
| direccion | String | No | Direccion del cliente |
| cpais | String | No | Codigo pais receptor. Default "PRY" |
| correo | String | No | Email del cliente |
| numCasa | Integer | No | Numero de casa. Default 0 |
| dncp | Integer | No | 0=Normal, 1=Compra publica (DNCP) |
Objeto pagos (array)
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
| tipoPago | String | Si | 1=Efectivo, 2=Cheque, 3=Tarjeta credito, 4=Tarjeta debito, 5=Transferencia, 99=Otro |
| monto | Number | Si | Monto del pago |
Objeto items (array)
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
| codigo | String | Si | Codigo interno del producto |
| descripcion | String | Si | Descripcion del producto o servicio |
| unidadMedida | Integer | Si | Codigo de unidad de medida segun tabla SIFEN (77=UNI, 83=KG, etc) |
| cantidad | Number | Si | Cantidad (hasta 4 decimales) |
| precioUnitario | Number | Si | Precio unitario (hasta 8 decimales) |
| precioTotal | Number | Si | Precio total del item |
| descuento | Number | No | Descuento particular sobre el precio unitario (EA002). Default 0 |
| ivaTasa | Integer | Si | Tasa IVA: 0=Exenta, 5=IVA 5%, 10=IVA 10% |
| baseGravItem | Number | Si | Base gravada IVA (hasta 8 decimales, NO redondear). Para IVA10: precioTotal/1.1. Para IVA5: precioTotal/1.05 |
| liqIvaItem | Number | Si | Liquidacion IVA del item (hasta 8 decimales, NO redondear). precioTotal - baseGravItem |
Ejemplo JSON completo
{
"tipoDocumento": "1",
"establecimiento": "001",
"punto": "001",
"numero": "0000060",
"descripcion": "Venta de productos",
"fecha": "2026-04-03 10:30:00",
"tipoEmision": 1,
"tipoTransaccion": 1,
"condicionPago": 1,
"moneda": "PYG",
"cambio": 0,
"descuentoGlobal": 0,
"totalPago": 150000,
"totalRedondeo": 0,
"receiptid": "FAC-001",
"codigoSeguridadAleatorio": "819250260",
"cliente": {
"ruc": "80012345-6",
"nombre": "EMPRESA EJEMPLO S.A.",
"direccion": "Av. Mariscal Lopez 1234",
"cpais": "PRY",
"correo": "contacto@empresa.com",
"numCasa": 1234,
"dncp": 0
},
"pagos": [
{
"tipoPago": "1",
"monto": 150000
}
],
"items": [
{
"codigo": "PROD-001",
"descripcion": "Resma de papel A4",
"unidadMedida": 77,
"cantidad": 2,
"precioUnitario": 55000,
"precioTotal": 110000,
"descuento": 0,
"ivaTasa": 10,
"baseGravItem": 100000.00000000,
"liqIvaItem": 10000.00000000
},
{
"codigo": "PROD-002",
"descripcion": "Lapicera azul",
"unidadMedida": 77,
"cantidad": 10,
"precioUnitario": 4000,
"precioTotal": 40000,
"descuento": 0,
"ivaTasa": 10,
"baseGravItem": 36363.63636364,
"liqIvaItem": 3636.36363636
}
]
}
Ejemplo con cURL
Terminal
curl -X POST "{URL_BASE}/facturacion-api/data.php" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "recordID=TU_API_KEY" \
--data-urlencode "datajson={
\"tipoDocumento\": \"1\",
\"establecimiento\": \"001\",
\"punto\": \"001\",
\"numero\": \"0000060\",
\"fecha\": \"2026-04-03 10:30:00\",
\"tipoEmision\": 1,
\"tipoTransaccion\": 1,
\"condicionPago\": 1,
\"moneda\": \"PYG\",
\"cambio\": 0,
\"totalPago\": 150000,
\"receiptid\": \"FAC-001\",
\"codigoSeguridadAleatorio\": \"819250260\",
\"cliente\": {
\"ruc\": \"80012345-6\",
\"nombre\": \"EMPRESA EJEMPLO S.A.\"
},
\"pagos\": [{\"tipoPago\": \"1\", \"monto\": 150000}],
\"items\": [{
\"codigo\": \"PROD-001\",
\"descripcion\": \"Resma de papel A4\",
\"unidadMedida\": 77,
\"cantidad\": 2,
\"precioUnitario\": 55000,
\"precioTotal\": 110000,
\"ivaTasa\": 10,
\"baseGravItem\": 100000.00000000,
\"liqIvaItem\": 10000.00000000
}]
}"
Respuestas de la API
Respuesta exitosa
200 OK
{
"status": true,
"recordID": "B3-xxxx",
"cdc": "01800012345001001000006012026040310300081925026",
"mensaje": "Factura enviada exitosamente."
}
Respuesta con error
ERROR
{
"status": false,
"code": [
"- Se espera campo tipoDocumento",
"- Se espera campo establecimiento"
]
}
Formulas importantes
| Concepto | Formula |
|---|---|
| baseGravItem (IVA 10%) | precioTotal / 1.1 |
| baseGravItem (IVA 5%) | precioTotal / 1.05 |
| liqIvaItem | precioTotal - baseGravItem |
| dTotOpeItem (con descuento) | (precioUnitario - descuento) * cantidad |
Importante: NO redondear baseGravItem ni liqIvaItem. Utilizar hasta 8 decimales para mantener la precision requerida por el SIFEN.
Notas importantes
Consideraciones
- receiptid debe ser unico por cada documento. No repetir este valor en envios posteriores.
- codigoSeguridadAleatorio debe contener exactamente 9 digitos aleatorios.
- Si moneda es diferente a PYG, el campo cambio es obligatorio y debe contener el tipo de cambio vigente.
- Para IVA exenta (ivaTasa=0), los campos baseGravItem y liqIvaItem deben ser 0.
- descuentoGlobal se prorratea automaticamente entre los items segun su peso proporcional en el total.