TiFacturaOnlineSvcDINO — Registro de cambios

Observabilidad de errores de facturación y trazabilidad SOAP
Fecha: 2026-09-07 Versión app: 20251125 JDK8 Repo: tipre/TiFacturaOnlineSvcDINO Compila: JDK 1.8 ✓

1. Problema

En la tabla de comprobantes del cliente, las columnas resultadoFacturacion y estadoNotificacionEmail guardaban mensajes genéricos (ej. ERROR:ARCA no disponible o respuesta invalida). El personal de soporte veía la fila y no podía entender qué había pasado ni para qué comprobante.

Objetivo: que la fila deje claro en qué etapa falló, para qué comprobante, con qué datos y por qué; y poder seguir el XML enviado/recibido al servidor.

2. Cambios en este servicio

ArchivoCambio
utils/ErrorUtil.java NUEVO Arma el mensaje claro ERROR[ETAPA]: <causa real> | Comp:.. Tipo:.. CondIVA:.. Doc:... Desenvuelve la cadena de excepciones y toma la causa más profunda (no el wrapper).
service/MainTaskManager.java Los 3 puntos de error (CAE / PDF / EMAIL) usan ErrorUtil.describe(...) en lugar de "ERROR:" + exception.getMessage().
ws/SoapTrafficLoggingHandler.java NUEVO Handler JAX-WS que vuelca el envelope SOAP (request y response) de cada llamada a un log dedicado.
ws/GenericWSClient.java Engancha el handler en setProperties() — un solo punto, cubre los dos clientes WS.
utils/Parametros.java Nuevo flag soap_traffic y registro del path absoluto del appender TRAFFIC (evita que el log caiga en system32).
TiFacturaOnlineSvc.properties Appender TRAFFIClogs\traffic-soap.log (archivo aparte, additivity=false, no ensucia el log operativo) + soap_traffic=false.

3. Cómo queda la columna del cliente

Rechazo legible de AFIP (camino CAE)

resultadoFacturacion = ERROR[CAE]: [10243] El campo Condicion IVA receptor no es valido... | Comp:0559-00302591 Tipo:FacturaB CondIVA:Responsable Inscripto Doc:20304...

Error de envío de e-mail

resultadoFacturacion    = Facturado Ok
estadoNotificacionEmail = ERROR[EMAIL]: EMAIL_ENVIO_FALLIDO: comprobante 302591 intento 1/1 SMTP 5xx 550 buzon inexistente | Comp:0559-00302591 Tipo:FacturaB CondIVA:Responsable Inscripto Doc:20304...

La factura salió (CAE ok); sólo el mail marca el error, en su propia columna.

4. Trazabilidad SOAP

El XML enviado y recibido a los WS se escribe en logs\traffic-soap.log (rotativo, 15 MB × 10). Apagado por defecto: costo cero cuando no se usa.

Cómo activarlo

Se configura en el archivo TiFacturaOnlineSvc.properties (mismo directorio del ejecutable), en la sección [Conexion al WS], junto a dump_http:

#-------------------------------#
#   Conexion al WS              #
#-------------------------------#
request_timeout=3000
dump_http=false
# Loguea el XML SOAP enviado/recibido a logs\traffic-soap.log (para seguimiento de soporte).
soap_traffic=true

Poner soap_traffic=true y reiniciar el servicio para que tome el cambio. Volver a false cuando no se necesite (el log crece rápido).

5. Contexto de arquitectura (para entender el alcance)

6. Pedido al repo TIFacturaOnlineNext (camino CAE/AFIP)

Extracción de señal en PosSafeError.esInseguro(): en vez de colapsar al genérico, extraer un token corto y seguro (≤80 ASCII, una línea, sin markup) del payload:

Complemento opcional: ref-id corto (reusar el correlation-id de TrafficMdc) que apunte a la línea del log server-side con el cuerpo crudo.

Revisar aparte: PosSafeError.MAX = 180 pero el campo del POS es 80 → posible desborde; evaluar bajar a 80.

NO se pide restaurar trxErrores/getErrores: cambio del tipo compartido y, por ser lookup read-only, no traería el crudo de los casos "inseguros" (que sólo vive en el log).

Generado el 2026-09-07 · TiFacturaOnlineSvcDINO · Documento de cambios para soporte y equipo.