Files
microservice/docs/AUTOMATIC_SERVICES_FLOW.md

204 lines
6.7 KiB
Markdown

# 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:
1. **Partidas** (si el pedimento tiene partidas)
2. **Remesas** (si el pedimento tiene remesas)
3. **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 = 1` en 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:
```json
{
"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
```json
{
"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