6.7 KiB
6.7 KiB
Flujo Automático de Servicios de Pedimentos
Descripción General
Después de completar exitosamente el procesamiento de un pedimento completo, el sistema ahora ejecuta automáticamente los siguientes servicios en segundo plano:
- Partidas (si el pedimento tiene partidas)
- Remesas (si el pedimento tiene remesas)
- Acuses (si existen documentos digitalizados)
Flujo de Ejecución
1. Ejecución del Pedimento Completo
POST /services/pedimento_completo
El endpoint procesa el pedimento completo y al finalizar exitosamente:
- ✅ Crea servicios adicionales automáticamente
- ✅ Programa la ejecución automática de servicios de seguimiento
- ✅ Retorna respuesta inmediata al cliente
2. Ejecución Automática en Segundo Plano
El sistema ejecuta automáticamente los siguientes servicios:
Partidas
- Condición:
numero_partidas > 0 - Servicio:
POST /services/partidas - Tipo: 4
Remesas
- Condición:
remesas = 1en el XML del pedimento - Servicio:
POST /services/remesas - Tipo: 5
Acuses
- Condición: Siempre se ejecuta (procesará solo si hay documentos digitalizados)
- Servicio:
POST /services/acuse - Tipo: 6
Características del Sistema Automático
⏱️ Timing y Secuencia
- Espera inicial: 5 segundos después de completar el pedimento completo
- Verificación de servicios: Espera hasta 30 segundos a que se creen los servicios
- Intervalo entre servicios: 3 segundos entre cada ejecución
- Ejecución secuencial: Los servicios se ejecutan uno tras otro, no en paralelo
🔄 Sistema de Reintentos
- Reintentos automáticos: Hasta 2 reintentos por servicio
- Backoff exponencial: Tiempo de espera incrementa exponencialmente (2, 4, 8... segundos, máximo 30)
- Tolerancia a fallos: Si un servicio falla, continúa con los siguientes
📊 Logging y Monitoreo
- Logging detallado: Cada paso del proceso se registra con emojis para fácil identificación
- Resumen de ejecución: Al final se muestra un resumen con éxitos/fallos
- Callback de finalización: Notificación cuando termine todo el proceso
Respuesta del Endpoint
El endpoint /services/pedimento_completo ahora retorna información adicional:
{
"success": true,
"message": "Pedimento completo procesado exitosamente. Servicios automáticos programados.",
"data": {
"organizacion": "uuid-organizacion",
"servicio": 123,
"estado": 3,
"pedimento_id": "uuid-pedimento",
"documento": { ... },
"xml_content": { ... },
"edocuments": [ ... ],
"servicios_adicionales": {
"servicio_partidas": 124,
"servicio_acuse": 125,
"servicio_estado_pedimento": 126,
"servicio_edocument": 127,
"servicio_remesas": 128 // Solo si aplica
},
"servicios_automaticos": {
"programados": true,
"remesas_programadas": true,
"partidas_programadas": true,
"acuses_programados": true,
"mensaje": "Los servicios de partidas, remesas y acuses se ejecutarán automáticamente en segundo plano"
}
}
}
Consulta de Estado
Para verificar el progreso de los servicios automáticos:
GET /services/status/{pedimento_id}?organizacion={organizacion_id}
Respuesta de Estado
{
"success": true,
"pedimento_id": "uuid-pedimento",
"organizacion": "uuid-organizacion",
"summary": {
"total_services": 6,
"completed_services": 4,
"in_progress_services": 1,
"error_services": 1,
"completion_percentage": 66.7
},
"services": {
"pedimento_completo": {
"exists": true,
"service_id": 123,
"estado": 3,
"estado_nombre": "FINALIZADO"
},
"partidas": {
"exists": true,
"service_id": 124,
"estado": 3,
"estado_nombre": "FINALIZADO"
},
"remesas": {
"exists": true,
"service_id": 128,
"estado": 2,
"estado_nombre": "EN_PROCESO"
},
"acuse": {
"exists": true,
"service_id": 125,
"estado": 4,
"estado_nombre": "ERROR"
}
}
}
Estados de Servicio
| Estado | Código | Descripción |
|---|---|---|
| CREADO | 1 | Servicio creado, esperando ejecución |
| EN_PROCESO | 2 | Servicio ejecutándose actualmente |
| FINALIZADO | 3 | Servicio completado exitosamente |
| ERROR | 4 | Servicio falló después de reintentos |
Logs de Ejemplo
2024-07-10 12:00:15 INFO - Pedimento completo procesado exitosamente - Servicio: 123
2024-07-10 12:00:16 INFO - Programando servicios automáticos - Remesas: True, Partidas: True
2024-07-10 12:00:16 INFO - Servicios automáticos programados exitosamente para pedimento uuid-pedimento
2024-07-10 12:00:21 INFO - Esperando a que se completen las creaciones de servicios...
2024-07-10 12:00:26 INFO - 🔄 Iniciando procesamiento de partidas...
2024-07-10 12:00:26 INFO - Servicio tipo 4 encontrado para pedimento uuid-pedimento
2024-07-10 12:00:45 INFO - ✅ Servicio partidas completado exitosamente
2024-07-10 12:00:48 INFO - 🔄 Iniciando procesamiento de remesas...
2024-07-10 12:01:05 INFO - ✅ Servicio remesas completado exitosamente
2024-07-10 12:01:08 INFO - 🔄 Iniciando procesamiento de acuse...
2024-07-10 12:01:25 INFO - ✅ Servicio acuse completado exitosamente
2024-07-10 12:01:25 INFO - 🎉 Ejecución automática completada exitosamente - 3/3 (100%)
2024-07-10 12:01:25 INFO - Servicios automáticos completados para pedimento uuid-pedimento: 3/3 exitosos
Beneficios
✨ Para el Usuario
- Respuesta inmediata: No espera a que se completen todos los servicios
- Procesamiento automático: No necesita ejecutar manualmente cada servicio
- Tolerancia a fallos: Los errores en servicios individuales no afectan el flujo completo
🔧 Para el Sistema
- Desacoplamiento: El pedimento completo no depende de los servicios secundarios
- Escalabilidad: Procesamiento en segundo plano no bloquea recursos
- Monitoreo: Logging detallado para debugging y análisis
📈 Para el Negocio
- Eficiencia: Automatización reduce tiempo de procesamiento manual
- Confiabilidad: Sistema de reintentos asegura máxima tasa de éxito
- Visibilidad: Estado en tiempo real de todos los servicios
Consideraciones Técnicas
Memoria y Recursos
- Las tareas en segundo plano se ejecutan en el mismo proceso
- Uso mínimo de memoria adicional
- Timeout automático para evitar tareas colgadas
Manejo de Errores
- Errores en servicios automáticos no afectan la respuesta del pedimento completo
- Logs detallados para debugging
- Reintentos automáticos con backoff exponencial
Concurrencia
- Ejecución secuencial evita sobrecarga del sistema VUCEM
- Intervalos de espera configurables
- Control de recursos mediante timeouts