microservicios

This commit is contained in:
2025-10-22 18:32:46 -06:00
parent 3b19520481
commit 73413fe3d9
4 changed files with 126 additions and 2 deletions

View File

@@ -0,0 +1,52 @@
# Comando de Microservicios
Este comando permite disparar tareas de procesamiento masivo por organización o por pedimento en el sistema EFC.
## Uso básico
```bash
python manage.py microservicios [--organizacion_id=<id>] [--procesamiento=<tipo>] [--todos]
```
## Opciones
- `--organizacion_id <id>`: Ejecuta los procesamientos solo para la organización indicada. Si se omite, se procesan todas las organizaciones.
- `--procesamiento <tipo>`: Ejecuta solo el tipo de procesamiento indicado para la organización. Si se omite, se ejecutan todos los procesamientos.
- `--todos`: Ejecuta todos los procesos para todas las organizaciones.
## Tipos de procesamiento disponibles
- `coves`: Procesa COVEs por organización/pedimento
- `edocs`: Procesa E-Documents por organización/pedimento
- `acuses`: Procesa acuses por organización/pedimento
- `acuse_coves`: Procesa acuse de COVEs por organización/pedimento
- `partidas`: Procesa partidas por organización/pedimento
- `pedimentos_completos`: Procesa pedimentos completos por organización/pedimento
- `remesas`: Procesa remesas por organización/pedimento
## Ejemplos
### Procesar todos los tipos para todas las organizaciones
```bash
python manage.py microservicios --todos
```
### Procesar solo COVEs para una organización
```bash
python manage.py microservicios --organizacion_id=ID_ORG --procesamiento=coves
```
### Procesar todos los tipos para una organización
```bash
python manage.py microservicios --organizacion_id=ID_ORG
```
### Procesar todos los tipos para un pedimento específico
```bash
python manage.py microservicios --pedimento_id=ID_PEDIMENTO
```
## Notas
- El comando dispara las tareas de Celery de forma asíncrona.
- Revisa los logs y el estado de las tareas en el panel de administración de Celery o en los logs del sistema.
- Si agregas nuevos tipos de procesamiento, actualiza la función `ejecutar_procesamiento_por_organizacion` en `microservice_v2.py`.

View File

@@ -1,6 +1,5 @@
from django.core.management.base import BaseCommand
from api.customs.tasks.auditoria import (
auditar_procesamiento_remesas,
auditar_coves,
auditar_acuse_cove,
auditar_edocuments,

View File

@@ -0,0 +1,44 @@
from django.core.management.base import BaseCommand
from api.customs.models import Organizacion
from api.customs.tasks import microservice_v2
class Command(BaseCommand):
help = 'Ejecuta tareas de microservicio por organización y procesamiento.'
def add_arguments(self, parser):
parser.add_argument(
'--organizacion_id',
type=str,
help='ID de la organización a procesar (opcional, si no se envía se procesan todas)'
)
parser.add_argument(
'--procesamiento',
type=str,
help='Tipo de procesamiento a ejecutar (opcional, si no se envía se ejecutan todos)'
)
parser.add_argument(
'--todos',
type=bool,
help='Ejecutar todos los procesos (opcional)'
)
def handle(self, *args, **options):
todos = options.get('todos', False)
organizacion_id = options.get('organizacion_id')
procesamiento = options.get('procesamiento')
if todos:
organizaciones = Organizacion.objects.all()
for org in organizaciones:
microservice_v2.ejecutar_todos_por_organizacion(org.id)
self.stdout.write(self.style.SUCCESS('Se ejecutaron todos los procesos para todas las organizaciones.'))
return
if organizacion_id:
if procesamiento:
microservice_v2.ejecutar_procesamiento_por_organizacion(organizacion_id, procesamiento)
self.stdout.write(self.style.SUCCESS(f'Se ejecutó el procesamiento {procesamiento} para la organización {organizacion_id}.'))
else:
microservice_v2.ejecutar_todos_por_organizacion(organizacion_id)
self.stdout.write(self.style.SUCCESS(f'Se ejecutaron todos los procesos para la organización {organizacion_id}.'))

View File

@@ -427,6 +427,35 @@ def documentos_con_errores(organizacion_id):
print(f"Documento con error: {doc.id} en organización {organizacion_id}")
# Aquí puedes agregar lógica adicional para manejar documentos con errores
# como enviar notificaciones, registrar en un log, etc.
# documentos = Document.objects.all() --- IGNORE ---
def ejecutar_por_organizacion_y_procesamiento(organizacion_id, procesamiento):
if procesamiento == 'coves':
procesar_coves.delay(organizacion_id)
elif procesamiento == 'edocs':
procesar_edocs.delay(organizacion_id)
elif procesamiento == 'acuses':
procesar_acuses.delay(organizacion_id)
elif procesamiento == 'acuse_coves':
procesar_acuse_coves.delay(organizacion_id)
elif procesamiento == 'partidas':
procesar_partidas.delay(organizacion_id)
elif procesamiento == 'pedimentos_completos':
procesar_pedimentos_completos.delay(organizacion_id)
elif procesamiento == 'remesas':
procesar_remesas.delay(organizacion_id)
else:
# Procesamiento no reconocido
pass
def ejecutar_todos_por_organizacion(organizacion_id):
procesar_coves.delay(organizacion_id)
procesar_edocs.delay(organizacion_id)
procesar_acuses.delay(organizacion_id)
procesar_acuse_coves.delay(organizacion_id)
procesar_partidas.delay(organizacion_id)
procesar_pedimentos_completos.delay(organizacion_id)
procesar_remesas.delay(organizacion_id)