Commit Graph

84 Commits

Author SHA1 Message Date
c4f5d960de Nueva Funcionalidad: 3 Estados para Adjuntos (Ninguno/Opcional/Obligatorio)
He implementado el sistema de 3 estados para el requisito de fotos/archivos que solicitaste.

Problema Original:
Solo había 2 estados:

 Permitir fotos (checkbox activado)
 No permitir fotos (checkbox desactivado)
Faltaba: Fotos opcionales vs obligatorias

Solución Implementada:
3 Estados disponibles:

🚫 No permitir adjuntos (photo_requirement = 'none')

No se muestra el input de fotos
El mecánico NO puede adjuntar archivos
📎 Opcional (photo_requirement = 'optional')

Se muestra el input de fotos
El mecánico PUEDE adjuntar si lo desea
No es obligatorio para continuar
⚠️ Obligatorio (photo_requirement = 'required')

Se muestra el input de fotos con etiqueta "OBLIGATORIO"
El mecánico DEBE adjuntar al menos 1 archivo
Validación bloquea continuar sin adjuntos
2025-12-02 22:22:51 -03:00
35b419a654 Bug Corregido: Orden Automático de Subpreguntas
He identificado y solucionado el bug que causaba que las subpreguntas recién creadas aparecieran al principio (asociadas a la primera pregunta) hasta que las arrastraras.

Problema Identificado:
Cuando creabas una subpregunta, el backend asignaba order = 0 por defecto, lo que hacía que:

La subpregunta apareciera al principio de la lista
Al arrastrarla, el sistema recalculaba el orden y la colocaba correctamente debajo de su padre
Solución Implementada:
Backend (v1.0.93) - main.py:

Modifiqué el endpoint POST /api/questions para calcular automáticamente el order correcto al crear una pregunta:
2025-12-02 22:03:00 -03:00
de5f09a351 Frontend (v1.0.95)
Ordenamiento consistente de preguntas (App.jsx):

Las preguntas ahora se ordenan por el campo order antes de agruparse por sección
Esto asegura que el orden se mantenga exactamente como está en el backend
Ordenamiento de secciones (App.jsx):

Las secciones se ordenan por el order mínimo de sus preguntas
Garantiza que las secciones aparezcan en orden lógico y consistente
Mejora en drag-and-drop (App.jsx):

Al reordenar, ahora se ordenan las preguntas por order antes de calcular nuevas posiciones
Los nuevos valores de order se asignan correctamente preservando el orden relativo
Funciona correctamente con una sola sección y con subpreguntas
Ordenamiento en modo inspección (App.jsx):

getVisibleQuestions() ahora ordena las preguntas visibles por su campo order
Mantiene el orden correcto durante la ejecución de inspecciones
Backend (v1.0.92)
No se requirieron cambios en el backend (ya estaba ordenando correctamente con order_by(models.Question.order))
2025-12-02 15:50:22 -03:00
c374909fa8 Chat AI Assistant con Archivos Adjuntos Implementado
🎯 Nueva Funcionalidad Completa
Se ha implementado un sistema de chat conversacional con IA que permite adjuntar archivos (imágenes y PDFs), similar a ChatGPT, con prompt personalizable y envío completo al webhook.

📋 Características Implementadas
1. Adjuntar Archivos en el Chat
 Botón 📎 para adjuntar archivos
 Soporte para imágenes (JPG, PNG, etc.) y PDFs
 Preview de archivos adjuntos antes de enviar
 Eliminación individual de archivos adjuntos
 Múltiples archivos por mensaje
 Validación de tipos de archivo
2. Procesamiento Backend de Archivos
 Endpoint modificado para recibir FormData con archivos
 PDFs: Extracción automática de texto con pypdf
 Imágenes: Conversión a base64 para Vision AI
 Análisis combinado de texto + imágenes
 Límite de 2000 caracteres por PDF para optimizar
3. Integración con IA
 OpenAI Vision: Soporte multimodal (texto + imágenes)
 Gemini: Soporte de imágenes y texto
 Contexto enriquecido con archivos adjuntos
 Prompts adaptados según tipo de archivo
4. Custom Prompt por Checklist
 Campo assistant_prompt configurable por pregunta
 Campo assistant_instructions para instrucciones adicionales
 Control de longitud de respuesta (short/medium/long)
 Contexto automático del vehículo en cada mensaje
5. Persistencia del Chat
 Nuevo campo chat_history en modelo Answer
 Migración SQL: add_chat_history_to_answers.sql
 Guardado automático del historial completo
 Restauración del chat al reabrir
6. Envío al Webhook (n8n)
 Todos los chats incluidos en send_completed_inspection_to_n8n()
 Campo chat_history en cada respuesta del webhook
 Incluye metadata de archivos adjuntos
 Tipo de pregunta identificado en webhook
 Datos completos para análisis posterior
2025-12-02 11:22:21 -03:00
bf30b1a2bf Soporte para PDFs agregado al sistema de análisis con IA
📋 Cambios Implementados
Frontend:

 Input acepta image/*,application/pdf
 Label actualizado: "Fotografías / Documentos PDF *"
 Preview diferenciado: PDFs muestran icono 📝 rojo en lugar de imagen
 Nombre de archivo PDF visible en el preview
 Contador genérico: "archivo(s) cargado(s)"
Backend:

 Agregado pypdf==4.0.1 a requirements.txt
 Detección automática de PDFs por content_type o extensión
 Extracción de texto de PDFs usando pypdf.PdfReader
 Validación de PDFs vacíos (sin texto extraíble)
 Prompts adaptados automáticamente para PDFs
 Soporte en OpenAI y Gemini (análisis de texto en lugar de vision)
 Límite de 4000 caracteres del PDF para análisis
🎯 Funcionamiento
Usuario sube PDF → Sistema detecta tipo de archivo
Extrae texto → PyPDF lee todas las páginas
Análisis IA → Envía texto al modelo (no usa Vision API)
Respuesta → Misma estructura JSON que con imágenes
⚠️ Limitaciones
PDFs escaneados sin OCR no funcionarán (requieren texto seleccionable)
Máximo 4000 caracteres del PDF enviados al AI
📦 Versiones
Frontend: 1.0.91 → 1.0.92
Backend: 1.0.89 → 1.0.90
2025-12-02 09:40:44 -03:00
1988ec95da Corregido: Problema de timing en recálculo de max_score
🐛 Problema
Al crear 1 pregunta → max_score quedaba en 0
Al crear 2 preguntas → max_score mostraba 1
Al quedar 1 pregunta → max_score mostraba 0
🔍 Causa
Llamaba a recalculate_checklist_max_score() ANTES del db.commit(), entonces la consulta SQL no encontraba las preguntas recién agregadas/modificadas porque aún no estaban persistidas en la base de datos.
2025-12-01 00:27:20 -03:00
d86a216766 Problema Resuelto: max_score no se actualizaba al eliminar preguntas
🐛 Problema
Cuando se eliminaban preguntas de un checklist, la Puntuación máxima no se recalculaba, quedando con valores incorrectos (más altos de lo que debería).

🔍 Causa
Al CREAR pregunta: solo se sumaban puntos (max_score += points)
Al ACTUALIZAR pregunta: no se recalculaba el max_score
Al ELIMINAR pregunta: no se restaban los puntos del max_score
 Solución
Nueva función helper recalculate_checklist_max_score():

Suma puntos de todas las preguntas NO eliminadas desde la base de datos
Garantiza consistencia siempre
Aplicada en 3 operaciones:

POST /api/questions - Al crear pregunta (línea ~960)
PUT /api/questions/{id} - Al actualizar puntos (línea ~1038)
DELETE /api/questions/{id} - Al eliminar pregunta (línea ~1167)
📦 Versión
Backend: 1.0.87 → 1.0.88
2025-12-01 00:18:05 -03:00
4174774702 Cambios Adicionales
 Importado or_ de SQLAlchemy para query del reporte
 Backend: 1.0.86 → 1.0.87
🎯 Resultado
 Inspecciones solo muestran preguntas activas del checklist
 PDFs correctos sin preguntas eliminadas
 Cálculo de score preciso (solo preguntas vigentes)
 Webhooks envían solo datos relevantes
 Reportes con métricas correctas
 Respuestas huérfanas de preguntas eliminadas se ignoran automáticamente
2025-12-01 00:10:06 -03:00
c226fbd34b Corregido Error de Chat IA (Backend v1.0.86)
Problema
Causa
El modelo de base de datos usa model_name pero el código intentaba acceder a model.

Solución
 Cambiado ai_config.model → ai_config.model_name en:

Llamada a OpenAI: model=ai_config.model_name or "gpt-4"
Llamada a Gemini: GenerativeModel(ai_config.model_name or 'gemini-pro')
Response del endpoint: "model": ai_config.model_name
2025-11-30 23:35:39 -03:00
14a64778b8 Nuevo Tipo de Pregunta: Asistente IA (Chat) 🤖💬
Frontend (v1.0.88)
QuestionTypeEditor.jsx
 Nuevo tipo: ai_assistant con icono 💬
 Configuración completa:
assistant_prompt: Define rol y comportamiento del asistente
context_questions: IDs de preguntas anteriores cuyas fotos usar (o todas)
assistant_instructions: Reglas específicas de diagnóstico
max_messages: Límite de mensajes en el chat
response_length: Corta/Media/Larga
QuestionAnswerInput.jsx
 Mensaje informativo para tipo ai_assistant
 Indica que el chat se abre con botón separado
App.jsx - Modal de Chat IA
 Modal full-screen responsive con:

Header con gradiente purple/blue
Área de mensajes con scroll
Input de texto + botón enviar
Soporte Enter para enviar
Indicador de "pensando..."
Timestamps en mensajes
Confianza de la IA
Límite de mensajes
 Botón "💬 Consultar Asistente IA" al lado de "Cargar Documentos"

 Contador de mensajes en el botón si ya hay historial

 Historial guardado en answers[questionId].chatHistory

 Auto-marca como completada cuando se abre el chat

Backend (v1.0.85)
Endpoint /api/ai/chat-assistant
 Recibe:

Mensaje del usuario
Historial del chat
Fotos de preguntas anteriores con sus análisis
Configuración del asistente
Info del vehículo
 Contexto inteligente:

Información del vehículo (marca, modelo, km, placa)
Análisis previos de fotos (hasta 10 fotos más relevantes)
Instrucciones personalizadas por pregunta
Historial conversacional (últimos 10 mensajes)
 Soporte multi-proveedor:

OpenAI (GPT-4, GPT-3.5)
Google Gemini
 Respuestas adaptables:

Longitud configurable (200/400/800 tokens)
Temperature 0.7 para balance creatividad/precisión
Cómo Funciona
Configuración (Admin):

- Crear pregunta tipo "Asistente IA (Chat)"
- Definir prompt: "Eres experto en sistemas de frenos..."
- Seleccionar preguntas anteriores: "5,8,12" (fotos de frenos)
- Instrucciones: "Si pastillas < 3mm → cambio inmediato"
- Longitud: Media
- Max mensajes: 20

2 Durante Inspección (Mecánico):

- Llega a pregunta tipo AI Assistant
- Ve botón "💬 Consultar Asistente IA"
- Clic → Abre chat full-screen
- La IA YA vio las fotos de preguntas 5, 8, 12
- Mecánico pregunta: "¿Las pastillas están bien?"
- IA responde basado en fotos previas + contexto vehículo
- Conversación natural con historial
- Al cerrar → se guarda automáticamente

3 Ejemplo de Conversación:

Mecánico: "Vi desgaste en las pastillas, ¿qué recomiendas?"

IA: "Basándome en las fotos que analicé:

     Pastilla delantera izquierda: ~2.5mm de espesor
     Pastilla delantera derecha: ~2.8mm

     ⚠️ CRÍTICO: Ambas pastillas están por debajo del
     mínimo de 3mm. Con 45,000 km, es normal este desgaste.

     RECOMENDACIÓN:
     - Cambio INMEDIATO de pastillas delanteras
     - Verificar estado de discos (posible rectificado)
     - Revisar líquido de frenos (última foto muestra nivel bajo)

     ¿Necesitas el código de pieza para este Toyota Corolla 2019?"

Casos de Uso
Diagnóstico de Frenos

assistant_prompt: "Eres especialista en sistemas de frenos.
                   Analiza desgaste, fugas, vibraciones."
context_questions: "10,11,12,13" // Fotos de pastillas, discos, líquido

assistant_prompt: "Experto en motores. Detecta fugas, ruidos anormales,
                   consumo excesivo."
context_questions: "5,6,7,8,9" // Motor, aceite, correa, filtros

assistant_prompt: "Especialista en sistemas eléctricos y electrónicos."
context_questions: "20,21,22" // Batería, luces, tablero
instructions: "Siempre pedir código OBD2 si hay check engine"

Ventajas
 Contextual: La IA ve fotos previas, no pregunta "¿puedes mostrarme?"
 Especializado: Un asistente POR tema (frenos, motor, eléctrico)
 Conversacional: El mecánico puede hacer follow-up questions
 Guiado: Instrucciones específicas por tipo de inspección
 Historial: No repite info, mantiene contexto de la conversación
 Móvil-friendly: Modal responsive, fácil de usar en celular
2025-11-30 23:23:43 -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
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
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
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
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
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
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
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
cdd1b3507b v1.0.63 Backend / v1.0.57 Frontend - Edición y auditoría de preguntas 2025-11-27 01:26:15 -03:00
6999416be9 Backend corregido para subir el logo de chelists 1.0.61 2025-11-26 17:45:27 -03:00
16a25799e9 trabajar por logos para checklists 2025-11-26 17:42:06 -03:00
4d3ac4bb5c Cooreegido la exportacion de pdf cuando se edita una checklist ahora si se edita algo de la inspeccion hecha se actualiza el PDF 2025-11-26 14:08:49 -03:00
70f984bfdf Actualziar modelo de PDF 2025-11-26 09:23:35 -03:00
d35f0343e1 bACKEND AY ENVIA NOTIFICACION A N8N ESTA TODO ESTABLE 2025-11-26 01:59:54 -03:00
38dbb07eec BACKEND EN VERSION 1.0.55 CORREGIR ERROR PARA OBENTER IAMGENES LINK PAR ENVIAR A N8N 2025-11-26 01:50:56 -03:00
0987becc25 Agregar envio a n8n usando .env para enviar cuando se guarda una inspeccion 2025-11-26 01:42:25 -03:00
5b82418f0a Agregar en el Modal campo de Nro Operario back y front 2025-11-26 01:35:03 -03:00
822ab5a1cb Actualziacion de analisis de ia con las imagenes y se agrega el campo de cod operario en el front y en el back 2025-11-26 01:20:26 -03:00
26ed0eb4f0 ACTUALZIAR EL PROMT PRINCIPAL CON EL CUSTOM 2025-11-26 00:20:46 -03:00
b867f11450 custom promtp no esstaba funcionando 2025-11-26 00:13:32 -03:00
683e260c79 IA va a tener Contexto de la primera plantilal de las Inspecciones backend 1.0.42 frontend 1.0.40 2025-11-25 23:45:20 -03:00
1c4bd93105 elimine los logs algunso logs de debug 2025-11-25 23:27:59 -03:00
773a9336ef Ajuste de mensajes de notificaciones y resolucion de notificaciones duplicadas backend 1.0.40 2025-11-25 23:19:16 -03:00
4c8938a24e back 1.0.38 y front 1.0.39 cambios en condicionales de sub preguntas, solo boleanos 2025-11-25 22:43:14 -03:00