Ir al contenido

cucuEmitirLote

Emite varias facturas en una sola llamada (CUCU admite 20 por petición; el nodo trocea los lotes mayores). Valida TODAS antes de enviar ninguna y devuelve el resultado de cada una. No usa clave de idempotencia: si la red falla a mitad de un lote, comprueba con «Consultar → buscar» antes de reintentar. No es la emisión masiva del SIAT (para eso, «Emisión masiva»).

Forma parte del Hub Fiscal de Bolivia como alternativa a la conexión directa con el SIAT: CUCU es un proveedor autorizado que se ocupa de la firma, los códigos CUIS/CUFD y el envío al SIN. Nodo: «Emitir facturas en lote».

CampoTipoRequeridoDescripción
credentials_idcredentialsSíCredencial cucu
invoicesjsonSíFacturas (JSON) — Array de facturas, cada una con los mismos campos que «Emitir factura» (camelCase o snake_case)
point_of_sale_idtextNoPunto de venta (UUID) — Sale en Sucursales y puntos de venta de CUCU. Vacío = el «punto de venta por defecto» de la credencial
document_sectorselectNoSector (común) — “, 1, 2, 3, 5, 8, 9, 11, 13, 15, 16, 17, 20, 21, 22, 28, 34, 35, ELECTRONIC_HEALTH_SERVICE, ELECTRONIC_AIRLINE, ELECTRONIC_GAMES_LUCK
payment_method_codenumberNoMétodo de pago (común)
default_activity_economictextNoActividad económica por defecto (CAEB) — Se aplica a las líneas que no traen activityEconomic
default_code_product_sintextNoCódigo de producto SIN por defecto — Se aplica a las líneas que no traen codeProductSin
default_unit_measurenumberNoUnidad de medida por defecto — 58 = Servicio, 1 = Unidad, 57 = Pieza (catálogo unit-measures)
chunk_sizenumberNoFacturas por llamada — Máximo 20 (límite de CUCU)
max_invoicesnumberNoMáximo de facturas del lote
invalid_itemsselectNoSi alguna factura no es válida — abort, skip
batch_field_styleselectNoNombres de las líneas — La documentación de CUCU usa nombres distintos en el ejemplo de lotes (activityCode, sinProductCode, unitPrice). «Ambos» funciona con cualquiera de los dos · both, standard, legacy
fail_on_partialbooleanNoDar error si alguna falla
output_keytextNoClave de salida — El resultado se añade a data[clave] sin perder el resto de datos

Este módulo requiere una credencial de tipo cucu con los campos:

  • API key: empieza por sk_test_ (sandbox) o sk_live_ (producción); el entorno se deduce del prefijo
  • Entorno: automático, pruebas o producción (si contradice la clave, no se envía nada)
  • Punto de venta por defecto (UUID): se usa si el nodo no indica uno
  • ID de empresa (UUID): para sucursales y estado del certificado
  • Secreto de webhooks (whsec_…): para verificar la firma de los eventos
{
"success": false,
"total": 45,
"successful": 44,
"failed": 1,
"chunks": 3,
"environment": "sandbox",
"results": [
{
"index": 0,
"success": true,
"invoice_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"invoice_number": 1,
"cuf": "2872F7294502332E637FABFBC3654EA82202AD48E0969F14EBEB8AF74"
},
{
"index": 23,
"success": false,
"stage": "cucu",
"error": "NIT invalido"
}
],
"warnings": []
}

La salida se guarda en la clave configurada (output_key, por defecto cucu) y se conserva el resto de data. En error: error.message, error.type y, si aplica, status, code y siat_code.

{
"credentials_id": "cred-cucu",
"point_of_sale_id": "660e8400-e29b-41d4-a716-446655440004",
"invoices": "{{data.facturas}}",
"invalid_items": "abort",
"output_key": "cucu"
}
  • Valida TODAS las facturas antes de enviar ninguna (salvo que elijas «omitir inválidas»). Trocea en llamadas de 20 (límite de CUCU) y reasigna los índices para que results[i] coincida con la lista de entrada.
  • El endpoint de lotes no documenta idempotencia: un timeout no se reintenta, para no duplicar. Si falla a mitad, el error trae partial con lo confirmado; comprueba con «CUCU: Consultar» antes de reenviar.
  • La documentación de CUCU usa nombres distintos en las líneas del lote (activityCode, sinProductCode, unitPrice, discount); por defecto se envían ambos juegos de nombres (both).