diff --git a/api/customs/views.py b/api/customs/views.py index ab1bf73..0e6a2b5 100644 --- a/api/customs/views.py +++ b/api/customs/views.py @@ -38,6 +38,7 @@ from api.logger.mixins import LoggingMixin from mixins.filtrado_organizacion import OrganizacionFiltradaMixin, ProcesosPorOrganizacionMixin import requests + from .tasks.microservice_v2 import * from .tasks.auditoria import crear_partidas_por_pedimento diff --git a/api/tasks/migrations/0003_remove_task_result_task_servicio.py b/api/tasks/migrations/0003_remove_task_result_task_servicio.py new file mode 100644 index 0000000..4049763 --- /dev/null +++ b/api/tasks/migrations/0003_remove_task_result_task_servicio.py @@ -0,0 +1,24 @@ +# Generated by Django 5.2.3 on 2025-10-09 03:06 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('customs', '0016_alter_pedimento_unique_together'), + ('tasks', '0002_task_organizacion'), + ] + + operations = [ + migrations.RemoveField( + model_name='task', + name='result', + ), + migrations.AddField( + model_name='task', + name='servicio', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='customs.servicio'), + ), + ] diff --git a/api/tasks/models.py b/api/tasks/models.py index c7f4085..8928c3b 100644 --- a/api/tasks/models.py +++ b/api/tasks/models.py @@ -8,4 +8,4 @@ class Task(models.Model): timestamp = models.DateTimeField(auto_now_add=True) message = models.TextField() status = models.CharField(max_length=50) - result = models.TextField(null=True, blank=True) + servicio = models.ForeignKey('customs.Servicio', on_delete=models.CASCADE, null=True, blank=True) diff --git a/api/customs/management/commands/AUDITOR_COMMAND.md b/docs/commands/AUDITOR_COMMAND.md similarity index 100% rename from api/customs/management/commands/AUDITOR_COMMAND.md rename to docs/commands/AUDITOR_COMMAND.md diff --git a/docs/commands/ELIMINAR_PEDIMENTOS_DUPLICADOS.md b/docs/commands/ELIMINAR_PEDIMENTOS_DUPLICADOS.md new file mode 100644 index 0000000..69c4051 --- /dev/null +++ b/docs/commands/ELIMINAR_PEDIMENTOS_DUPLICADOS.md @@ -0,0 +1,138 @@ +# Guía del Comando eliminar_pedimentos_duplicados + +## 📝 Descripción +El comando `eliminar_pedimentos_duplicados` es una herramienta de mantenimiento que identifica y elimina pedimentos duplicados dentro de una organización, conservando automáticamente el pedimento que tenga más documentos y relaciones asociadas. + +## ⚙️ Funcionalidad + +### Criterios de Duplicación +- Pedimentos con el mismo número dentro de una organización +- Solo se consideran duplicados dentro de la misma organización +- Se mantiene el pedimento con más: + - Documentos (Documents) + - COVEs + - E-documents + - Partidas + +## 💻 Uso + +### Comando Básico +```bash +python manage.py eliminar_pedimentos_duplicados +``` + +### Con Argumentos Opcionales +```bash +# Procesar organización específica +python manage.py eliminar_pedimentos_duplicados --organizacion="uuid-organizacion" + +# Ajustar tamaño del lote +python manage.py eliminar_pedimentos_duplicados --batch-size=50 + +# Combinar opciones +python manage.py eliminar_pedimentos_duplicados --organizacion="uuid" --batch-size=50 +``` + +## 🔧 Argumentos Disponibles + +| Argumento | Descripción | Tipo | Default | +|-----------|-------------|------|---------| +| --organizacion | UUID de la organización a procesar | string | None | +| --batch-size | Número de pedimentos por lote | integer | 100 | + +## 📊 Proceso de Ejecución + +1. **Inicio** + - Validación de argumentos + - Conexión a base de datos + - Cálculo de duplicados totales + +2. **Procesamiento por Lotes** + - Identificación de duplicados + - Análisis de documentos asociados + - Selección de pedimento a mantener + +3. **Eliminación** + - Eliminación de COVEs asociados + - Eliminación de E-documents + - Eliminación de Partidas + - Eliminación de Documents + - Eliminación del pedimento duplicado + +4. **Reporte** + - Total de grupos procesados + - Tiempo de ejecución + - Detalles de errores (si existen) + +## ⚠️ Precauciones + +### Antes de Ejecutar +- [x] Realizar respaldo de la base de datos +- [x] Verificar espacio en disco +- [x] Revisar carga del servidor +- [x] Confirmar permisos de usuario + +### Durante la Ejecución +- No interrumpir el proceso +- Monitorear uso de recursos +- Revisar logs en tiempo real + +### Después de la Ejecución +- Verificar integridad de datos +- Revisar logs de errores +- Documentar cambios realizados + +## 🔍 Monitoreo + +### Logs y Salidas +- Progreso por lote +- Errores encontrados +- Resumen de operaciones +- Tiempo total de ejecución + +### Mensajes de Estado +- ✓ Operación exitosa +- ✗ Error en la operación +- ℹ️ Información de progreso + +## 🚨 Solución de Problemas + +### Errores Comunes +1. **Timeout de Base de Datos** + - Reducir tamaño del lote + - Verificar conexión a BD + - Revisar índices de la tabla + +2. **Memoria Insuficiente** + - Ajustar batch-size + - Verificar recursos del servidor + - Liberar memoria cache + +3. **Errores de Permisos** + - Verificar permisos de usuario + - Confirmar acceso a tablas + - Revisar configuración de BD + +## 📌 Notas Importantes +- La eliminación es permanente +- El proceso es transaccional por lote +- Se puede reanudar si se interrumpe +- Los cambios afectan a relaciones en cascada + +## 🔄 Mantenimiento + +### Recomendaciones +1. Ejecutar periódicamente +2. Mantener respaldos actualizados +3. Revisar logs regularmente +4. Ajustar parámetros según necesidad + +### Mejor Momento para Ejecutar +- Durante horas de bajo tráfico +- Después de respaldos programados +- Cuando el sistema está menos cargado + +## 📚 Referencias +- Documentación de Django Management Commands +- Logs del sistema +- Documentación de la base de datos \ No newline at end of file diff --git a/MEDIA_CLEANUP_GUIDE.md b/docs/commands/MEDIA_CLEANUP_GUIDE.md similarity index 100% rename from MEDIA_CLEANUP_GUIDE.md rename to docs/commands/MEDIA_CLEANUP_GUIDE.md