4.9 KiB
4.9 KiB
Regeneración Automática de PDF al Editar Respuestas
Descripción General
Se ha implementado la funcionalidad de regeneración automática del PDF de inspección cuando se editan respuestas en inspecciones completadas.
Cambios Implementados
1. Nueva Función Reutilizable: generate_inspection_pdf()
Ubicación: backend/app/main.py (línea ~1046)
Propósito: Generar el PDF de una inspección y subirlo a S3.
Parámetros:
inspection_id: int- ID de la inspeccióndb: Session- Sesión de base de datos
Retorna: str - URL del PDF generado en S3
Características:
- Genera PDF profesional con diseño A4
- Incluye toda la información de la inspección
- Sube automáticamente a S3/MinIO
- Sobrescribe PDF existente si ya existe
- Maneja errores y excepciones
2. Actualización de complete_inspection()
Ubicación: backend/app/main.py (línea ~1358)
Cambios:
- Removido código duplicado de generación de PDF
- Ahora usa la función
generate_inspection_pdf() - Código más limpio y mantenible
Antes:
# 300+ líneas de código de generación de PDF inline
Después:
# Generar PDF usando función reutilizable
pdf_url = generate_inspection_pdf(inspection_id, db)
inspection.pdf_url = pdf_url
3. Actualización de update_answer()
Ubicación: backend/app/main.py (línea ~1497)
Nuevas Funcionalidades:
- Verificación de Estado: Comprueba si la inspección está completada
- Recálculo de Puntuación: Actualiza score, porcentaje y contadores
- Regeneración de PDF: Genera nuevo PDF con los cambios
- Manejo de Errores: No interrumpe la actualización si falla la generación del PDF
Flujo de Trabajo:
1. Usuario edita respuesta
2. Backend actualiza Answer en BD
3. Backend verifica si inspection.status == "completed"
4. Si está completada:
a. Recalcula score total
b. Recalcula porcentaje
c. Recalcula items críticos
d. Genera nuevo PDF
e. Actualiza inspection.pdf_url
5. Retorna Answer actualizado
Casos de Uso
Caso 1: Editar Respuesta en Inspección en Progreso
- Usuario edita respuesta
- Respuesta se actualiza
- PDF NO se regenera (inspección no completada)
Caso 2: Editar Respuesta en Inspección Completada
- Usuario edita respuesta
- Respuesta se actualiza
- Sistema detecta que inspección está completada
- Score se recalcula automáticamente
- PDF se regenera con los nuevos datos
- PDF anterior es sobrescrito en S3
Ventajas de la Nueva Implementación
- DRY (Don't Repeat Yourself): Código de generación de PDF existe una sola vez
- Mantenibilidad: Cambios al PDF solo se hacen en un lugar
- Automatización: PDFs siempre reflejan el estado actual
- Consistencia: Mismo diseño profesional en todas partes
- Robustez: Manejo de errores sin interrumpir flujo principal
Estructura del PDF Generado
El PDF incluye:
Portada
- Título e ID de inspección
- Cuadro de información del vehículo (azul)
- Cuadro de información del cliente y mecánico (verde)
- Resumen de puntuación con colores según porcentaje
Detalle de Inspección
- Agrupado por secciones
- Cada pregunta con:
- Icono de estado (✓ ok, ⚠ warning, ✕ critical)
- Respuesta y estado
- Comentarios
- Galería de imágenes (6 por fila)
Footer
- Timestamp de generación
Logs y Debugging
El sistema imprime logs útiles:
# Al regenerar PDF
🔄 Regenerando PDF para inspección completada #123
# Al completar regeneración
✅ PDF generado y subido a S3: https://...
# Si hay error
❌ Error regenerando PDF: [detalle]
Versión del Backend
Versión actual: 1.0.26
Se incrementó la versión para reflejar esta nueva funcionalidad.
Notas Técnicas
S3/MinIO
- Los PDFs sobrescriben el archivo anterior con el mismo nombre
- Ruta:
{año}/{mes}/inspeccion_{id}_{placa}.pdf - Content-Type:
application/pdf
Base de Datos
- Campo
inspection.pdf_urlse actualiza automáticamente - Score, porcentaje y flagged_items_count se recalculan
- Todo en una sola transacción
Manejo de Errores
- Si falla la generación del PDF, se registra el error
- La actualización de la respuesta NO se revierte
- Se imprime traceback completo para debugging
Próximos Pasos Sugeridos
- ✅ Implementar regeneración de PDF (COMPLETADO)
- ⏳ Ejecutar migraciones SQL para employee_code
- ⏳ Probar flujo completo en ambiente de desarrollo
- ⏳ Considerar notificación a n8n cuando se edita inspección completada
- ⏳ Agregar campo
updated_ata inspecciones para tracking de cambios
Testing
Para probar la funcionalidad:
- Completar una inspección
- Verificar que se genera el PDF
- Editar una respuesta (cambiar status, comentario, etc.)
- Verificar en logs que se regenera el PDF
- Descargar el PDF y confirmar que refleja los cambios
- Verificar que el score se recalculó correctamente