Commit Graph

136 Commits

Author SHA1 Message Date
a692948a6f Sistema de Actualización PWA Implementado (v1.0.87)
Frontend (v1.0.87)
Service Worker (public/service-worker.js)
 Cache versionado dinámico: ayutec-v1.0.87
 Estrategia Network-First con fallback a cache
 Auto-limpieza de caches antiguos en activación
 Skip waiting para activación inmediata
 Soporte para mensaje SKIP_WAITING desde cliente
Detección de Actualizaciones (App.jsx)
 Registro automático de Service Worker
 Listener de updatefound para detectar nuevas versiones
 Listener de controllerchange para recarga automática
 Estado updateAvailable y waitingWorker
Modal de Actualización
 Diseño grande y llamativo con animación bounce
 Overlay bloqueante (z-index 9999, no se puede cerrar)
 Botón enorme: "🚀 ACTUALIZAR AHORA"
 Gradiente indigo/purple, responsive
 Texto claro: "Nueva versión disponible"
 Recarga automática al actualizar
PWA Manifest (site.webmanifest)
 Agregado start_url y scope
 Configurado orientation: portrait
 Display standalone para app nativa
HTML Metatags (index.html)
 theme-color para barra de navegación
 apple-mobile-web-app-capable para iOS
 mobile-web-app-capable para Android
 Viewport con user-scalable=no para PWA
Automatización
 Script PowerShell update-version.ps1:
Incrementa versión automáticamente (patch)
Actualiza package.json
Actualiza service-worker.js
Sincroniza ambos archivos
 Guía completa PWA-UPDATE-GUIDE.md
Flujo de Actualización
Desarrollador ejecuta update-version.ps1
Build y deploy de nueva versión
Usuario abre la app
Service Worker detecta nueva versión
Modal aparece automáticamente bloqueando UI
Usuario presiona "ACTUALIZAR AHORA"
Service Worker se activa
Página se recarga automáticamente
Usuario usa nueva versión
Backend (v1.0.84)
Sin cambios
Ahora la PWA se actualiza automáticamente mostrando un modal imposible de ignorar! 🚀📱
2025-11-30 23:11:33 -03:00
45ad650bac Mejoras de Responsividad Móvil (v1.0.86)
Sidebar
 Oculto por defecto en móvil (window.innerWidth < 1024px)
 Overlay oscuro cuando está abierto en móvil (se cierra al tocar fuera)
 Deslizable desde la izquierda con transiciones suaves
 Siempre visible en desktop (lg: breakpoint)
Header
 Botón hamburguesa visible solo en móvil (lg:hidden)
 Logo escalable: 50px en móvil → 70px en desktop
 Título oculto en móvil para ahorrar espacio
 Indicador de sección: icono solo en móvil, texto completo en desktop
 Padding adaptable: 3px móvil → 4px tablet → 8px desktop
Contenido Principal
 Sin margin-left en móvil (el sidebar es overlay)
 Padding responsive: 3px → 4px → 6px según tamaño
 Border-radius adaptable: xl en móvil → 2xl en desktop
Modal de Inspección
 Ancho completo en móvil con padding mínimo (2px)
 Título responsive: lg (móvil) → xl (tablet) → 2xl (desktop)
 Altura máxima: 95vh móvil → 90vh desktop
Navegador de Preguntas
 Botones más pequeños en móvil: 7px/8px círculos
 Overflow horizontal con scroll para muchas preguntas
 Números responsive: texto sm en móvil → lg en desktop
 Gaps reducidos: 1px móvil → 2px desktop
Botones de Navegación
 Solo flechas en móvil (← →)
 Texto completo en desktop ("← Anterior", "Siguiente →")
 Padding y texto adaptables: text-sm móvil → text-base desktop
 Mejor uso del espacio horizontal
Formularios
 Espaciado adaptive: space-y-3 móvil → space-y-6 desktop
 Labels y texto responsive: xs → sm → base
 Banner de modo IA con wrap en móvil
La interfaz ahora es completamente funcional en móviles sin scroll horizontal, con todos los elementos accesibles y legibles! 📱
2025-11-30 22:59:38 -03:00
7820f143ac feat: Ocultar referencias a IA en interfaz de mecánico
Frontend (v1.0.85):
- Reemplazado "Modo IA COMPLETO/ASISTIDO" por "Modo AUTOCOMPLETADO/ASISTIDO"
- Cambiado "La IA completará/sugerirá" por "El sistema completará/sugerirá"
- Reemplazado "🤖 Análisis automático" por "📋 Procesamiento automático"
- Eliminadas todas las menciones explícitas de IA visibles para mecánicos
- Terminología neutral: "el sistema" en lugar de "la IA"

Backend (v1.0.84):
- Sin cambios

Mecánicos usan funcionalidad IA sin saber que existe, mejora UX profesional
2025-11-30 22:44:51 -03:00
2db2833f27 feat: Validación inteligente de contexto en análisis de imágenes IA
Backend (v1.0.84):
- Agregado campo 'context_match' en respuesta JSON de análisis IA
- IA evalúa si imagen corresponde al contexto de la pregunta
- Tres niveles de validación: prompt personalizado, pregunta específica, análisis general
- Detección automática de imágenes fuera de contexto con recomendaciones específicas

Frontend (v1.0.84):
- Sistema de alertas cuando IA detecta imágenes que no corresponden
- Popup de advertencia muestra qué imágenes no coinciden y por qué
- Opción para eliminar automáticamente fotos incorrectas y cargar nuevas
- Validación con frases clave: "no corresponde", "no coincide", "no relacionad"
- Previene que mecánicos carguen imágenes irrelevantes a las preguntas

Evita errores en inspecciones al garantizar que cada foto corresponda a su pregunta específica
2025-11-30 22:35:31 -03:00
7b39648be5 Con IA configurada y funcionando → Análisis + popup
 Sin IA configurada → Solo popup (sin análisis)
 Error en el backend → Popup con mensaje de sin análisis
 Timeout o fallo de red → Documentos marcados como cargados
2025-11-30 22:23:40 -03:00
c76f803871 ACtualizacion en campos de tipo foto blouqeaba por no contestar,
Actualziacion de estados del DOM de las imagenes
2025-11-29 11:55:30 -03:00
b6440130ac Frontend v1.0.82
1. Eliminado campo duplicado de "Observaciones":

 Antes: Había 2 campos de observaciones (uno general y uno dentro de fotos)
 Ahora: Solo 1 campo de observaciones (el general)
2. Nuevo tipo de pregunta "📸 Solo Fotografía" (photo_only):

Comportamiento: Solo muestra el título de la pregunta y el campo para adjuntar fotos
NO muestra: Campo de respuesta ni campo de observaciones
Ideal para: Documentación fotográfica pura (ej: "Fotografía del VIN", "Estado general del vehículo")
2025-11-29 11:25:14 -03:00
886f0bafbd Cambios Completados - IA Oculta al Mecánico
🎭 Frontend v1.0.81
1. Botón renombrado:

 Antes: "🤖 Analizar Pregunta"
 Ahora: "📁 Cargar Documentos"
Estado procesando: "Procesando..." (sin mencionar IA)
2. Análisis IA separado de observaciones:

El análisis NO se escribe en el campo de observaciones
Se guarda en aiAnalysis (campo separado)
Mecánico escribe observaciones manualmente
Se agrega flag documentsLoaded: true al procesar
3. Popup de confirmación:

Después de cargar documentos: " Documentos cargados correctamente"
NO muestra el análisis al mecánico
4. Validación obligatoria:

Si hay fotos adjuntas y el checklist tiene IA activada
DEBE presionar "Cargar Documentos" antes de continuar
Mensaje: "⚠️ Debes presionar 'Cargar Documentos' antes de continuar"
5. Referencias a IA eliminadas:

 Removido: "Analizando X imagen(es) con IA..."
 Removido: "✓ Analizada"
 Removido: "guardada automáticamente"
 Ahora: "Procesando X documento(s)..."
 Ahora: "Respuesta guardada"
6. Análisis IA solo visible para admin:

En el modal de detalle de inspección
Sección morada "🤖 Análisis de IA"
Muestra: estado, observaciones, recomendación, confianza
Solo visible si user.role === 'admin'
🔧 Backend v1.0.83
Sin cambios (el campo ai_analysis ya existía en JSON)
2025-11-29 08:40:14 -03:00
00218a1a92 Frontend v1.0.80:
El botón "📄 Exportar PDF" ahora solo es visible para admin y asesor
Los mecánicos (role === 'mechanic') pueden ver el modal de inspección pero NO pueden exportar el PDF
Backend v1.0.82 (sin cambios adicionales)
Resumen de permisos:

 Admin: Ver inspección + Exportar PDF + Ver historial + Inactivar
 Asesor: Ver inspección + Exportar PDF
 Mecánico: Solo ver inspección + Continuar incompletas
2025-11-28 14:54:28 -03:00
ed037ef4cc agregar logs 2025-11-28 10:11:42 -03:00
37daf6b8d3 Backend v1.0.82: PDF con logos dual (empresa + checklist)
- Generación de PDF ahora muestra dos logos en el encabezado
- Logo izquierda: logo de la empresa (AIConfiguration)
- Logo derecha: logo del checklist específico (o empresa como fallback)
- Nueva función helper load_logo() para reutilización
- Layout horizontal con tabla de 3 columnas para separación visual
- Frontend: sin cambios (v1.0.79)
2025-11-28 10:00:08 -03:00
f57d7328e1 Backend v1.0.82: PDF con logos dual (empresa + checklist)
- Generación de PDF ahora muestra dos logos en el encabezado
- Logo izquierda: logo de la empresa (AIConfiguration)
- Logo derecha: logo del checklist específico (o empresa como fallback)
- Nueva función helper load_logo() para reutilización
- Layout horizontal con tabla de 3 columnas para separación visual
- Frontend: sin cambios (v1.0.79)
2025-11-28 09:58:18 -03:00
6d006d3b13 Frontend v1.0.79: Renombrar "Borrador" a "Incompleta" y agregar funcionalidad para continuar inspecciones
- Cambio de terminología: "Borrador" → "Incompleta" en toda la UI
- Nuevo botón "Continuar Inspección" en modal de detalle (solo para incompletas)
- InspectionModal ahora carga y continúa inspecciones existentes
- Carga automática de respuestas previas al continuar
- Backend: status por defecto cambiado de "draft" a "incomplete"
2025-11-28 09:36:29 -03:00
96426a4259 Merge branch 'develop' of https://git.rshtech.com.py/gitea/checklist into develop 2025-11-28 09:32:20 -03:00
16f431cbad Cambios Completados
He implementado exitosamente la funcionalidad solicitada. Aquí está el resumen:

🔄 Cambios en el Frontend (App.jsx)
Renombrado de "Borrador" a "Incompleta":

Actualizado el filtro de estado: draft → incomplete
Cambiado el texto del selector: "Borradores" → "Incompletas"
Actualizado el badge de estado en la lista de inspecciones
Botón "Continuar Inspección":

Agregado botón verde "▶️ Continuar Inspección" en InspectionDetailModal
Solo aparece cuando inspection.status !== 'completed'
Cierra el modal de detalle y abre el modal de inspección para continuar
Soporte para continuar inspecciones:

Modificado InspectionModal para recibir existingInspection
Carga automática de datos del vehículo existentes
Carga de respuestas previas desde el backend
Si hay respuestas existentes, salta directamente al paso 2 (Preguntas)
No crea una nueva inspección si ya existe, solo continúa la actual
Actualización de versión:

package.json: v1.0.78 → v1.0.79
🔧 Cambios en el Backend (models.py)
Renombrado del estado por defecto:
status = Column(String(20), default="draft") → default="incomplete"
Comentario actualizado: # draft, completed, inactive → # incomplete, completed, inactive
2025-11-28 09:26:35 -03:00
91711ac95f Corrección aplicada:
🔧 Patrones que ahora elimina:
 Análisis Automático (90% confianza):
 Análisis IA (95% confianza):
 🤖 Análisis Automático (98% confianza):
 🤖 Análisis IA (100% confianza):
Backend actualizado a v1.0.81
2025-11-28 08:09:05 -03:00
4e70f1f9b0 Cambios de terminología:
📝 Selector de modo (admin):
 "Modo IA" →  "Modo de Asistencia"
 "Sin IA - Control manual total" →  "Manual - Control total del operario"
 "IA Asistida - Sugerencias en fotos" →  "Asistido - Sugerencias automáticas"
 "IA Completa - Análisis automático" →  "Automático - Análisis completo"
📋 Descripciones:
 "Sin IA: El mecánico completa..." →  "Modo Manual: El operario completa..."
 "IA Asistida: Cuando se suben fotos, la IA analiza..." →  "Modo Asistido: ...el sistema analiza..."
 "IA Completa: El mecánico solo toma fotos y la IA responde..." →  "Modo Automático: ...el sistema responde..."
 "Requiere OPENAI_API_KEY configurada" →  "Requiere configuración de API externa"
🔍 Durante inspección:
 "🤖 Análisis IA disponible" →  "🤖 Análisis automático disponible"
💬 En observaciones/comentarios:
 "🤖 Análisis IA (98% confianza):" →  "Análisis Automático (98% confianza):"
 "🤖 Análisis IA:" →  "Análisis Automático:"
 "🤖 Análisis IA de X imágenes:" →  "Análisis Automático de X imágenes:"
🎯 Resultado:
Los mecánicos ahora ven:

"Asistente automático" en lugar de "Inteligencia Artificial"
"Sistema" en lugar de "IA"
"Análisis automático" en lugar de "Análisis IA"
Terminología más neutral y profesional
Frontend actualizado a v1.0.78
2025-11-27 18:31:15 -03:00
14b3376a4a Interfaz consistente entre crear y editar
 Etiquetas legibles en lugar de valores técnicos
 Más fácil e intuitivo para administradores
 Reutiliza el mismo componente configurable
Frontend actualizado a v1.0.77
2025-11-27 17:57:43 -03:00
185b9fc631 Cambio aplicado:
📸 Logo del PDF:
Usa exclusivamente el logo de "⚙️ Configuración"
No usa el logo del checklist (ese es para otra funcionalidad)
Más simple y consistente
Backend v1.0.79
2025-11-27 17:45:30 -03:00
320f41c0ff Mejoras implementadas:
🔍 Mejor debugging:
Logs detallados en consola para ver qué está pasando
Muestra la URL del logo que intenta cargar
Indica el código HTTP de respuesta
Stack trace completo si hay error
📐 Ajuste automático de tamaño:
Antes: Forzaba 40mm x 40mm (distorsionaba la imagen)
Ahora: Mantiene proporciones (aspect ratio)
Ancho máximo: 50mm
Alto máximo: 40mm
Se ajusta automáticamente al que limite primero
 Validaciones adicionales:
Verifica que el checklist exista
Verifica que tenga logo_url configurado
Mensajes informativos en cada caso
Backend v1.0.79
2025-11-27 17:40:23 -03:00
e79aa1f212 Backend actualizado a v1.0.78
 Cambios aplicados:
📏 Nuevos tamaños de letra:
Preguntas: 11pt en negrita (más grandes y destacadas)
Respuestas: 10pt (tamaño medio legible)
Comentarios: 9pt con indentación (diferenciados visualmente)
🤖 Formato mejorado de comentarios IA:
 Removido prefijo "Análisis IA (98% confianza): "
 Salto de línea doble antes de "Recomendaciones:"
 "Recomendaciones:" ahora en negrita
 Indentación de 10mm en comentarios para mejor jerarquía visual
2025-11-27 17:29:02 -03:00
34221c4726 Cambios implementados:
🔄 Función getReadableAnswer() en Frontend:
Convierte valores técnicos a etiquetas legibles dinámicamente
Lee la configuración question.options (que tú defines al crear preguntas)
Busca en el array choices la etiqueta correspondiente al valor
📋 Conversiones soportadas:
Boolean: "yes" → "Sí", "pass" → "Pasa", "good" → "Bueno"
Single Choice: "option1" → "Opción 1", "excellent" → "Excelente"
Multiple Choice: "lights,wipers" → "Luces, Limpiaparabrisas"
Scale/Text/Number/Date/Time: Se muestran tal cual (ya son legibles)
🎯 Dónde se aplica:
Modal de detalle de inspección al ver respuestas completadas
Respeta las configuraciones dinámicas que defines en el editor de preguntas
Funciona con todas las plantillas predefinidas y configuraciones personalizadas
⚙️ Funcionamiento dinámico:
Como los tipos de pregunta son configurables por ti en el frontend,
 la función lee directamente de question.options.choices el array que tú configuraste,
 por lo que funcionará automáticamente con cualquier configuración que crees.

Versiones actualizadas:

Frontend: 1.0.76 - Backend: 1.0.77

Ahora tanto el PDF como el modal de inspecciones mostrarán las etiquetas legibles en lugar de los valores técnicos.
2025-11-27 17:19:50 -03:00
58672c52d7 Backend actualizada a 1.0.77
🖼️ Logo en la portada del PDF:
Se carga el logo desde checklist.logo_url (configurado en la administración)
Ubicación: Arriba del título, centrado
Tamaño: 40mm x 40mm (tamaño estándar para logos corporativos)
Manejo de errores: Si el logo no carga, continúa generando el PDF sin bloquearse
Si no hay logo configurado, simplemente no se muestra (no rompe el PDF)
📄 Estructura de la portada:
Logo del checklist (si existe)
Título "📋 INFORME DE INSPECCIÓN VEHICULAR"
Número de inspección
Cuadros de información del vehículo e inspección
Resumen de evaluación
2025-11-27 17:15:47 -03:00
416588a327 Backend v1.0.76:
- 🎨 Rediseñado PDF primera página con diseño moderno y profesional (cuadros con encabezados separados y coloreados, bordes redondeados, separadores internos, mejor jerarquía visual)
- 🔒 Eliminado nombre de mecánico del PDF por privacidad (solo código de operario)
- 🐛 Corregido bug: PDF mostraba valores técnicos en lugar de etiquetas legibles (implementada función get_readable_answer() que convierte "option1" → "Bueno", "pass" → "Pasa", soporta boolean, single_choice y multiple_choice)

Frontend v1.0.75:
-  Sin cambios
2025-11-27 17:12:45 -03:00
32c7f79dd6 Cambios implementados:
🎨 Diseño Visual Mejorado:
Portada más espaciada - Espaciado superior aumentado para mejor presentación
Cuadros con encabezados separados - Cada sección tiene un header coloreado profesional
Bordes redondeados - Esquinas suavizadas para un look más moderno
Separadores internos - Líneas delgadas entre filas para mejor legibilidad
Etiquetas diferenciadas - Labels en gris claro, valores en negrita oscura
🚗 Cuadro de Vehículo:
Header azul (#2563eb) con "🚗 INFORMACIÓN DEL VEHÍCULO"
Contenido blanco con bordes redondeados
Layout limpio: etiqueta arriba, valor abajo por campo
📄 Cuadro de Inspección:
Header verde (#16a34a) con "📄 INFORMACIÓN DE LA INSPECCIÓN"
Nombre de mecánico eliminado - Solo código de operario por privacidad
Campos: Nº Pedido, OR Nº, Cód. Operario, Fecha
📊 Resumen de Evaluación:
Título "📊 RESUMEN DE EVALUACIÓN" centrado
Grid de 4 métricas: Puntuación, Porcentaje, Estado, Ítems Críticos
Borde dinámico según resultado (verde/amarillo/rojo)
Estado textual: EXCELENTE/ACEPTABLE/DEFICIENTE
Separadores internos para cada métrica
Versión Backend actualizada a 1.0.75
2025-11-27 17:06:09 -03:00
1c9d7348ed Auto-Scroll Implementado en Drag & Drop
Frontend v1.0.75
Nueva Funcionalidad:

 Auto-scroll automático cuando arrastras cerca de los bordes del modal
 Zona de activación: 100 pixeles desde arriba/abajo
 Scroll suave: 10 pixeles cada 16ms (~60fps)
 Limpieza automática: Detiene el scroll cuando sueltas o sales del área
Cómo Funciona:

Arrastras una pregunta cerca del borde superior → scroll automático hacia arriba
Arrastras cerca del borde inferior → scroll automático hacia abajo
Alejas del borde → scroll se detiene
Sueltas la pregunta → scroll se limpia
2025-11-27 16:52:35 -03:00
ce151631ab Corregido Drag & Drop con Validación de Niveles
Cambios v1.0.74
Lógica Implementada:

Preguntas padre solo se pueden reordenar entre sí
Subpreguntas solo se pueden reordenar con otras subpreguntas del mismo padre
No se permite arrastrar una pregunta padre dentro de subpreguntas o viceversa
Validaciones:

 En handleDragOver: Cursor none si intentas arrastrar entre diferentes niveles
 En handleDrop: Mensajes de error claros si intentas mezclar niveles
 Filtrado inteligente: Solo reordena el grupo correcto de preguntas
2025-11-27 16:47:05 -03:00
2d520e03d6 Frontend v1.0.74:
- Implementado drag & drop nativo HTML5 para reordenar preguntas
- Agregados estados draggedQuestion y dragOverQuestion
- Handlers: handleDragStart, handleDragEnd, handleDragOver, handleDrop
- Indicador visual: línea azul en drop zone
- Icono de agarre (⋮⋮) con tooltip "Arrastra para reordenar"
- Opacidad 50% en elemento arrastrado
- Cursor 'move' indica elemento arrastrable
- Mantiene función moveQuestion para compatibilidad
- Reordenamiento automático al soltar
2025-11-27 16:43:45 -03:00
bd2b11d543 Frontend v1.0.73:
- Implementado drag & drop nativo HTML5 para reordenar preguntas
- Agregados estados draggedQuestion y dragOverQuestion
- Handlers: handleDragStart, handleDragEnd, handleDragOver, handleDrop
- Indicador visual: línea azul en drop zone
- Icono de agarre (⋮⋮) con tooltip "Arrastra para reordenar"
- Opacidad 50% en elemento arrastrado
- Cursor 'move' indica elemento arrastrable
- Mantiene función moveQuestion para compatibilidad
- Reordenamiento automático al soltar
2025-11-27 16:43:14 -03:00
97c5aab93d Backend v1.0.73:
- Implementado sistema de reordenamiento de preguntas
- Nuevo endpoint PATCH /api/checklists/{id}/questions/reorder
- Schema QuestionReorder para validar datos de reorden
- Actualización en lote de campo 'order' en preguntas
- Auditoría automática de cambios de orden
- Validación de permisos y existencia de checklist

Frontend v1.0.73:
- Agregada funcionalidad de reordenamiento de preguntas
- Botones ▲ ▼ para mover preguntas arriba/abajo
- Función moveQuestion() para gestionar reordenamiento
- Interfaz visual mejorada con separadores
- Tooltips descriptivos en botones de orden
- Recarga automática tras reordenar
2025-11-27 16:17:45 -03:00
d6c0f117a1 Backend v1.0.73:
- Implementado sistema de reordenamiento de preguntas
- Nuevo endpoint PATCH /api/checklists/{id}/questions/reorder
- Schema QuestionReorder para validar datos de reorden
- Actualización en lote de campo 'order' en preguntas
- Auditoría automática de cambios de orden
- Validación de permisos y existencia de checklist

Frontend v1.0.71:
- Agregada funcionalidad de reordenamiento de preguntas
- Botones ▲ ▼ para mover preguntas arriba/abajo
- Función moveQuestion() para gestionar reordenamiento
- Interfaz visual mejorada con separadores
- Tooltips descriptivos en botones de orden
- Recarga automática tras reordenar
2025-11-27 16:17:02 -03:00
651aa138cf Backend v1.0.73:
- Implementado sistema de reordenamiento de preguntas
- Nuevo endpoint PATCH /api/checklists/{id}/questions/reorder
- Schema QuestionReorder para validar datos de reorden
- Actualización en lote de campo 'order' en preguntas
- Auditoría automática de cambios de orden
- Validación de permisos y existencia de checklist

Frontend v1.0.71:
- Agregada funcionalidad de reordenamiento de preguntas
- Botones ▲ ▼ para mover preguntas arriba/abajo
- Función moveQuestion() para gestionar reordenamiento
- Interfaz visual mejorada con separadores
- Tooltips descriptivos en botones de orden
- Recarga automática tras reordenar
2025-11-27 16:15:20 -03:00
826c5fce5e Backend v1.0.71:
- Implementado soft delete para preguntas
- Nuevas columnas: is_deleted (boolean), updated_at (timestamp)
- Migración SQL: add_soft_delete_to_questions.sql
- Endpoint DELETE marca preguntas como eliminadas en lugar de borrarlas
- GET /api/checklists/{id} filtra preguntas eliminadas (is_deleted=false)
- Validación de subpreguntas activas antes de eliminar
- Índices agregados para optimizar queries
- Mantiene integridad de respuestas históricas y PDFs generados
- Permite limpiar checklists sin afectar inspecciones completadas
2025-11-27 15:34:19 -03:00
ed3f513075 Backend v1.0.71:
- Implementado soft delete para preguntas
- Nuevas columnas: is_deleted (boolean), updated_at (timestamp)
- Migración SQL: add_soft_delete_to_questions.sql
- Endpoint DELETE marca preguntas como eliminadas en lugar de borrarlas
- GET /api/checklists/{id} filtra preguntas eliminadas (is_deleted=false)
- Validación de subpreguntas activas antes de eliminar
- Índices agregados para optimizar queries
- Mantiene integridad de respuestas históricas y PDFs generados
- Permite limpiar checklists sin afectar inspecciones completadas
2025-11-27 15:32:56 -03:00
027f22551c Frontend v1.0.69:
- Agregado debug logging para investigar problema de carga de ai_prompt al editar preguntas
- Console.log muestra el objeto de pregunta completo y el campo ai_prompt específico

Backend v1.0.69:
- Sincronización de versión con frontend
- Schema ya incluye ai_prompt en QuestionBase y Question
2025-11-27 11:39:25 -03:00
0117ba34f8 Frontend v1.0.68:
- Agregada funcionalidad de edición de checklists
- Nuevo modal para editar nombre, descripción, modo IA y scoring
- Botón "✏️ Editar" en cada checklist (solo admins)
- Mejora en la gestión de checklists en el panel de administración

Backend v1.0.68:
- Actualización de versión para sincronizar con frontend
- Endpoint PUT /api/checklists/{id} ya soportaba la funcionalidad
2025-11-27 11:19:48 -03:00
efbf57e6bc v1.0.67 Backend / v1.0.67 Frontend - Ordenamiento consistente de checklists e inspecciones
Frontend (1.0.67):
- 🔧 Checklists e inspecciones se ordenan por ID descendente (más recientes primero)
- Mantiene posición de elementos después de editar/actualizar
- Ya no se mueven al final de la lista tras modificaciones
- Orden consistente en todas las recargas de datos
- Mejora UX al preservar contexto visual del usuario

Backend (1.0.67):
- Sin cambios (mantiene versión actual)
2025-11-27 03:01:06 -03:00
afe57fba1d v1.0.67 Backend / v1.0.66 Frontend - Filtro de usuarios incluye administradores en Informes
Frontend (1.0.66):
- 🔧 Filtro de usuarios ahora incluye admin además de mechanic/mecanico
- Los administradores aparecen en el filtro ya que también pueden hacer inspecciones
- Formato mejorado: "{full_name || username} ({role})"
- Mayor visibilidad de todas las inspecciones realizadas por cualquier usuario autorizado

Backend (1.0.67):
- Sin cambios (mantiene versión actual)
2025-11-27 02:56:55 -03:00
409cbd437a v1.0.67 Backend / v1.0.65 Frontend - Mejora en filtro de mecánicos en pestaña Informes
Frontend (1.0.65):
- 🔧 Filtro de mecánicos muestra nombre completo con rol
- Formato: "{full_name || username} ({role})"
- Ejemplo: "Ron 1 Admin (admin)" en lugar de solo "Ron 1"
- Fallback a username si full_name no está disponible
- Mayor claridad para identificar usuarios en reportes

Backend (1.0.67):
- Sin cambios (mantiene versión actual)
2025-11-27 02:51:57 -03:00
ac17c26c66 test 2025-11-27 02:44:15 -03:00
ef9c37dcdd v1.0.67 Backend / v1.0.64 Frontend - Paginación de 10 elementos en todas las pestañas
Frontend (1.0.64):
- 📄 Paginación en InspectionsTab (10 inspecciones/página)
- 📄 Paginación en ChecklistsTab (10 checklists/página)
- 📊 Paginación en ReportsTab (10 informes/página)
- Auto-reset a página 1 cuando cambian filtros de búsqueda
- Navegación inteligente con puntos suspensivos para rangos grandes
- Muestra primera, última y páginas cercanas (actual ± 1)
- Contador 'Mostrando X-Y de Z' en cada pestaña
- Botones Anterior/Siguiente con estados deshabilitados
- useEffect para sincronizar currentPage con filtros

Mejoras de UX:
- Navegación directa por número de página
- Diseño consistente en las 3 pestañas
- Controles responsive con hover states
- Indicadores visuales claros de página actual

Backend (1.0.67):
- Sin cambios (mantiene versión actual)

Documentación:
- 📝 Agregada sección 'Control de Versiones' en README.md
- Instrucciones detalladas para commits con versiones
- Formato estándar para mensajes de commit
- Tipos de commit (feat, fix, refactor, etc.)
- Reglas de Semantic Versioning
- Ubicación de archivos de versión"
2025-11-27 02:31:20 -03:00
e3ac1c84d7 Listo! Logs eliminados. Frontend v1.0.63. 2025-11-27 02:22:06 -03:00
aa35c8f2eb v1.0.67 Backend / v1.0.61 Frontend - Fix 422: ai_analysis ahora acepta lista
Backend (1.0.67):
- 🐛 Fix: ai_analysis cambió de dict a list en schemas
- Soporta múltiples análisis de IA (una por cada imagen)
- AnswerCreate.ai_analysis: Optional[list] = None
- Answer.ai_analysis: Optional[list] = None
- Compatible con campo JSON en base de datos

Frontend (1.0.61):
- Sin cambios (ya enviaba ai_analysis como array)
- Formato: [{ success, analysis, raw_response, model, provider, imageIndex, fileName }]

Causa del error 422:
- Frontend enviaba: ai_analysis: [{ imageIndex: 1, ... }]
- Backend esperaba: ai_analysis: { ... } (dict)
- Ahora backend acepta: ai_analysis: [{ ... }, { ... }] (list)

Beneficio:
- Ahora se almacenan TODOS los análisis de múltiples imágenes
- Cada elemento del array tiene imageIndex para identificación
- Mantiene trazabilidad completa del análisis IA
2025-11-27 02:11:56 -03:00
d1b4d10257 v1.0.66 Backend / v1.0.60 Frontend - Fix error 422 en análisis IA sin respuesta
Backend (1.0.66):
- 🐛 Fix: answer_value ahora es Optional en AnswerBase schema
- Permite guardar respuestas con solo análisis IA y fotos
- Permite guardar observaciones sin answer_value
- Ya no rechaza con 422 cuando answer_value es null/vacío

Frontend (1.0.60):
- 🐛 Fix: saveAnswer ahora permite guardar si hay:
  * Valor de respuesta, O
  * Observaciones de IA, O
  * Fotos cargadas
- Mejorada lógica de determinación de status
- Solo calcula status si hay answer.value
- Permite guardar análisis IA antes de seleccionar respuesta

Flujo mejorado:
1. Usuario sube fotos
2. Click "Analizar con IA" → genera observaciones
3. Puede avanzar sin seleccionar respuesta (guardará solo observaciones)
4. O puede seleccionar respuesta después → actualiza el record

Causa del error 422:
- answer_value era required en schema
- Al analizar fotos sin seleccionar respuesta se enviaba answer_value=""
- Backend rechazaba con 422 Unprocessable Entity
- Ahora answer_value es opcional y acepta null/vacío
2025-11-27 02:07:17 -03:00
7fb2e40a1e v1.0.65 Backend / v1.0.59 Frontend - Fix client_name + Mejoras en carga de fotos
Backend (1.0.65):
- Fix: Todas las referencias client_name cambiadas a order_number
- Actualizado webhook n8n: "cliente" → "pedido"
- Actualizado contexto IA: "Cliente" → "Nº Pedido"
- PDF ahora muestra "Nº de Pedido" en lugar de "Cliente"

Frontend (1.0.59):
- 📸 NUEVO: Vista previa de fotos cargadas (grid 3 columnas con thumbnails)
- 📸 NUEVO: Botón "✕" para eliminar fotos individuales
- 📸 NUEVO: Botón manual "🤖 Analizar con IA" (no auto-análisis)
- 📸 MEJORA: Permite cargar múltiples fotos respetando max_photos
- 📸 MEJORA: Input file solo required si no hay fotos cargadas
- 📸 MEJORA: Muestra contador "X foto(s) cargada(s)"
- 🔧 Fix: Ya no analiza automáticamente al subir (espera click en botón)
- 🔧 Fix: Permite re-cargar fotos eliminando las anteriores
- 🔧 Fix: Previene exceder max_photos mostrando alerta

UX Improvements:
- Usuario sube 1-3 fotos y las ve en preview
- Puede eliminar individualmente con hover + click en ✕
- Click en "Analizar con IA" procesa todas las fotos juntas
- Análisis secuencial con summary multi-imagen

Nota: No requiere migración (ya ejecutada en v1.0.64)
2025-11-27 01:58:08 -03:00
fdad7b10ad v1.0.64 Backend / v1.0.58 Frontend - Renombrar cliente a N° de Pedido
Backend (1.0.64):
- Renombrado campo client_name a order_number en modelo Inspection
- Actualizado InspectionBase schema con nuevo campo order_number
- Comentario descriptivo: "Número de pedido asociado a la inspección"

Frontend (1.0.58):
- Renombrado client_name a order_number en toda la aplicación
- Actualizado label: "Nombre del Cliente" → "Nº de Pedido"
- Actualizado placeholder: "Juan Pérez" → "PED-12345"
- Actualizado título sección: "Información del Cliente" → "Información del Pedido"
- Actualizado filtro de búsqueda para incluir número de pedido
- Actualizado texto de búsqueda: "cliente" → "Nº pedido"

Database:
- Script de migración: rename_client_name_to_order_number.sql
- Comando: ALTER TABLE inspections RENAME COLUMN client_name TO order_number

Nota: Ejecutar migración SQL antes de usar esta versión
2025-11-27 01:49:42 -03:00
162b278044 ultima correccion con Script de Actualizacion de Git 2025-11-27 01:38:19 -03:00
d8f1c3de10 UPdate Script de Git 2025-11-27 01:37:03 -03:00
e3adb34960 v1.0.63 Backend / v1.0.57 Frontend - Edición y auditoría de preguntas
Backend (1.0.63):
- Agregado modelo QuestionAuditLog para historial de cambios
- Implementado registro de auditoría en create/update/delete de preguntas
- Nuevos endpoints: GET /api/questions/{id}/audit y GET /api/checklists/{id}/questions/audit
- Tracking a nivel de campo con valores antes/después
- Script de migración: add_question_audit_log.sql

Frontend (1.0.57):
- Agregado botón "Editar" en preguntas de checklists
- Implementado formulario de edición con datos pre-cargados
- Agregado botón "Historial" para ver cambios de preguntas
- Modal de auditoría con timeline de cambios y comparación lado a lado
- Fix: Error "firstResult is not defined" en análisis multi-imagen IA
- UI con códigos de color para acciones (crear/modificar/eliminar)
2025-11-27 01:34:54 -03:00
1e5ba305ae v1.0.63 Backend / v1.0.57 Frontend - Edición y auditoría de preguntas 2025-11-27 01:30:34 -03:00