Files
checklist/docs/pdf-regeneration.md

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ón
  • db: 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:

  1. Verificación de Estado: Comprueba si la inspección está completada
  2. Recálculo de Puntuación: Actualiza score, porcentaje y contadores
  3. Regeneración de PDF: Genera nuevo PDF con los cambios
  4. 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

  1. DRY (Don't Repeat Yourself): Código de generación de PDF existe una sola vez
  2. Mantenibilidad: Cambios al PDF solo se hacen en un lugar
  3. Automatización: PDFs siempre reflejan el estado actual
  4. Consistencia: Mismo diseño profesional en todas partes
  5. 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)
  • 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_url se 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

  1. Implementar regeneración de PDF (COMPLETADO)
  2. Ejecutar migraciones SQL para employee_code
  3. Probar flujo completo en ambiente de desarrollo
  4. Considerar notificación a n8n cuando se edita inspección completada
  5. Agregar campo updated_at a inspecciones para tracking de cambios

Testing

Para probar la funcionalidad:

  1. Completar una inspección
  2. Verificar que se genera el PDF
  3. Editar una respuesta (cambiar status, comentario, etc.)
  4. Verificar en logs que se regenera el PDF
  5. Descargar el PDF y confirmar que refleja los cambios
  6. Verificar que el score se recalculó correctamente