Ir al contenido

HubfiscalLogSageBatch

Se coloca después del nodo SageX3Soap (operación save). Guarda en el lote la respuesta de Sage y el número de la factura agrupada (VCRNUM), y copia ese número a cada documento del lote. Así, desde un pedido se ve en qué factura de Sage está y, desde una factura de Sage, qué pedidos la componen.

Forma parte del proceso de contabilización diaria Hub Fiscal → Sage X3, junto con HubfiscalAggregateSales.

Características principales:

  • Trazabilidad en los dos sentidos: guarda sage_vcrnum y la fecha de contabilización en el lote y en cada documento.
  • Idempotente: si el lote ya está registrado, no pisa el número guardado.
  • Gestión de fallos: si Sage devolvió error, el lote queda como failed con el motivo, incluido el mensaje de negocio de Sage.
  • Aviso si falta el número: si Sage responde OK pero sin VCRNUM, el lote queda sent con una advertencia para completarlo a mano.
CampoTipoRequeridoDescripción
credentials_idcredentialsSíCredencial Hub Fiscal MySQL/MariaDB (tipo sqlQuery)
batch_idtextNoId del lote. Por defecto {{item.batch_id}}; dentro de un Iterator sobre batches puede usarse {{batch_id}}

Los datos del paso anterior, que deben incluir:

El número de factura se busca en cualquier nivel de la respuesta, tanto si Sage devuelve JSON como XML.

{
"logged": true,
"batch_id": 102,
"batch_status": "sent",
"sage_vcrnum": "FTC0000123",
"message": "Lote 102 enviado a Sage (FTC0000123)"
}
CampoDescripción
loggedtrue si se escribió; false si el lote ya estaba registrado o era una simulación
batch_statussent o failed
sage_vcrnumNúmero de la factura agrupada en Sage
warningSolo si Sage respondió OK sin número de factura

En el lote: estado, respuesta de Sage, número de factura agrupada, motivo del error si falló y fecha de envío. En cada documento del lote: el número de factura de Sage y la fecha en la que se contabilizó.

Consulta de trazabilidad (ejemplo):

-- ¿En qué factura de Sage está el pedido 17513?
SELECT order_number, fiscal_doc_number, sage_vcrnum, sage_posted_at
FROM documents WHERE order_number = '17513';
  • En simulación no registra nada: si el asiento viene marcado como simulado, el nodo termina sin escribir.
  • Cuando el nodo SageX3Soap falla, el flujo de ese asiento se corta y este nodo no llega a ejecutarse: el lote queda pendiente y se reenvía en la siguiente ejecución del mismo día.
  • Un lote que no existe devuelve un error claro (Lote N no encontrado).