ronalds 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
2025-11-27 15:32:56 -03:00
2025-11-30 23:23:43 -03:00
2025-11-30 23:23:43 -03:00
2025-11-27 15:32:56 -03:00
2025-11-19 01:09:25 -03:00
2025-11-27 02:44:15 -03:00
2025-11-18 16:46:20 -03:00
2025-11-19 01:09:25 -03:00
2025-11-19 01:09:25 -03:00
2025-11-19 01:09:25 -03:00
2025-11-18 16:46:20 -03:00
2025-11-19 01:09:25 -03:00
2025-11-19 01:09:25 -03:00
2025-11-19 01:09:25 -03:00
2025-11-19 01:09:25 -03:00
2025-11-27 11:19:48 -03:00
2025-11-18 16:46:20 -03:00
2025-11-19 01:09:25 -03:00

Sistema de Checklists Inteligentes - MVP

Sistema completo de gestión de checklists para talleres mecánicos con integración de IA.

🚀 Características

  • Gestión de checklists dinámicos (Admin)
  • Ejecución de inspecciones (Mecánico)
  • Sistema de puntuación automática
  • Upload de múltiples fotos
  • Firma digital
  • Generación de PDF profesional
  • API REST completa
  • Autenticación JWT
  • Base de datos PostgreSQL

📋 Requisitos Previos

  • Docker & Docker Compose instalados
  • OpenAI API Key (opcional, solo para análisis IA)

🛠️ Instalación Rápida

1. Clonar/Descargar el proyecto

cd checklist-mvp

2. Configurar variables de entorno

cp .env.example .env

Editar .env y configurar:

  • OPENAI_API_KEY (si deseas usar análisis IA)
  • Cambiar SECRET_KEY por una clave segura

3. Levantar servicios con Docker

docker-compose up -d

Esto levantará:

  • PostgreSQL en puerto 5432
  • Backend (FastAPI) en puerto 8000
  • Frontend (React) en puerto 5173

4. Crear usuario administrador

docker-compose exec backend python -c "
from app.core.database import SessionLocal
from app.models import User
from app.core.security import get_password_hash

db = SessionLocal()
admin = User(
    username='admin',
    password_hash=get_password_hash('admin123'),
    role='admin',
    email='admin@taller.com',
    full_name='Administrador'
)
db.add(admin)
db.commit()
print('Usuario admin creado: admin / admin123')
"

5. Crear usuario mecánico

docker-compose exec backend python -c "
from app.core.database import SessionLocal
from app.models import User
from app.core.security import get_password_hash

db = SessionLocal()
mechanic = User(
    username='mecanico1',
    password_hash=get_password_hash('mecanico123'),
    role='mechanic',
    email='mecanico@taller.com',
    full_name='Juan Pérez'
)
db.add(mechanic)
db.commit()
print('Usuario mecánico creado: mecanico1 / mecanico123')
"

🌐 Acceso a la Aplicación

👥 Usuarios de Prueba

Usuario Contraseña Rol
admin admin123 Administrador
mecanico1 mecanico123 Mecánico

📱 Flujo de Uso

Como Administrador:

  1. Login con admin / admin123
  2. Ir a "Checklists"
  3. Crear nuevo checklist
  4. Agregar preguntas con tipos:
    • pass_fail: Revisado / En mal estado
    • good_bad: Buen estado / Mal estado
    • text: Respuesta libre
    • numeric: Números (KM, porcentajes)
  5. Configurar puntos por pregunta
  6. Activar el checklist

Como Mecánico:

  1. Login con mecanico1 / mecanico123
  2. Ir a "Nueva Inspección"
  3. Seleccionar checklist activo
  4. Ingresar datos del vehículo (OR, matrícula, KM)
  5. Completar preguntas paso a paso
  6. Subir fotos (máx 3 por pregunta)
  7. Ver score en tiempo real
  8. Firmar digitalmente
  9. Finalizar inspección
  10. Descargar PDF generado

🗂️ Estructura del Proyecto

checklist-mvp/
├── docker-compose.yml          # Orquestación de servicios
├── .env.example                # Variables de entorno
│
├── backend/                    # API FastAPI
│   ├── Dockerfile
│   ├── requirements.txt
│   └── app/
│       ├── main.py            # Endpoints principales
│       ├── models.py          # Modelos SQLAlchemy
│       ├── schemas.py         # Schemas Pydantic
│       └── core/
│           ├── config.py      # Configuración
│           ├── database.py    # Conexión BD
│           └── security.py    # JWT & Hashing
│
└── frontend/                   # React + Vite
    ├── Dockerfile
    ├── package.json
    ├── vite.config.js
    ├── tailwind.config.js
    └── src/
        ├── App.jsx            # App principal
        ├── pages/             # Páginas
        ├── components/        # Componentes
        └── services/          # API calls

🔌 API Endpoints Principales

Autenticación

POST   /api/auth/register      # Registrar usuario
POST   /api/auth/login         # Login
GET    /api/auth/me            # Usuario actual

Checklists

GET    /api/checklists         # Listar checklists
POST   /api/checklists         # Crear checklist (admin)
GET    /api/checklists/{id}    # Ver detalle con preguntas
PUT    /api/checklists/{id}    # Actualizar

Preguntas

POST   /api/questions          # Crear pregunta (admin)
PUT    /api/questions/{id}     # Actualizar
DELETE /api/questions/{id}     # Eliminar

Inspecciones

GET    /api/inspections        # Listar inspecciones
POST   /api/inspections        # Crear inspección
GET    /api/inspections/{id}   # Ver detalle completo
PUT    /api/inspections/{id}   # Actualizar (guardar borrador)
POST   /api/inspections/{id}/complete  # Finalizar

Respuestas

POST   /api/answers            # Crear respuesta
PUT    /api/answers/{id}       # Actualizar respuesta

Archivos

POST   /api/answers/{id}/upload  # Subir foto

🗄️ Modelo de Datos

Users

  • id, username, email, password_hash
  • role (admin/mechanic)
  • full_name, is_active

Checklists

  • id, name, description
  • ai_mode (off/assisted/copilot)
  • scoring_enabled, max_score
  • is_active, created_by

Questions

  • id, checklist_id, section
  • text, type, points
  • options (JSON), order
  • allow_photos, max_photos

Inspections

  • id, checklist_id, mechanic_id
  • or_number, vehicle_plate, vehicle_km
  • score, max_score, percentage
  • flagged_items_count
  • status (draft/completed)
  • signature_data

Answers

  • id, inspection_id, question_id
  • answer_value, status (ok/warning/critical)
  • points_earned, comment
  • is_flagged, ai_analysis (JSON)

MediaFiles

  • id, answer_id
  • file_path, file_type, caption

🎨 Tipos de Preguntas

Tipo Descripción Opciones
pass_fail Pasa/Falla REVISADO / EN MAL ESTADO
good_bad Estado Buen estado / Mal estado
status Acción REVISADO / SUSTITUIDO / Ninguna acción
text Texto libre -
numeric Número -
date Fecha -
multiple_choice Opciones Configurables

🔒 Seguridad

  • Autenticación JWT con tokens Bearer
  • Passwords hasheados con bcrypt
  • CORS configurado para desarrollo
  • Validación con Pydantic
  • Autorización por roles (admin/mechanic)

🐛 Debugging

Ver logs del backend

docker-compose logs -f backend

Ver logs del frontend

docker-compose logs -f frontend

Ver logs de PostgreSQL

docker-compose logs -f postgres

Acceder a la base de datos

docker-compose exec postgres psql -U checklist_user -d checklist_db

Reiniciar servicios

docker-compose restart

Detener todo

docker-compose down

Eliminar volúmenes (resetear BD)

docker-compose down -v

📝 Crear Checklist de Ejemplo

Puedes usar la API directamente o crear via SQL:

-- Conectar a la BD
docker-compose exec postgres psql -U checklist_user -d checklist_db

-- Insertar checklist
INSERT INTO checklists (name, description, ai_mode, scoring_enabled, max_score, is_active, created_by)
VALUES ('Mantenimiento Básico', 'Checklist de mantenimiento estándar', 'assisted', true, 0, true, 1);

-- Insertar preguntas
INSERT INTO questions (checklist_id, section, text, type, points, order, allow_photos) VALUES
(1, 'Sistema Eléctrico', 'Estado de la batería', 'good_bad', 1, 1, true),
(1, 'Sistema Eléctrico', 'Bocina', 'pass_fail', 1, 2, false),
(1, 'Frenos', 'Frenos (pastillas, discos)', 'pass_fail', 2, 3, true),
(1, 'Motor', 'Nivel de aceite', 'pass_fail', 1, 4, true),
(1, 'Motor', 'Fugas de aceite', 'pass_fail', 2, 5, true);

-- Actualizar max_score del checklist
UPDATE checklists SET max_score = (
    SELECT SUM(points) FROM questions WHERE checklist_id = 1
) WHERE id = 1;

🚀 Despliegue en Producción

Cambios necesarios para producción:

  1. Variables de entorno:

    • Cambiar SECRET_KEY por una clave segura aleatoria
    • Configurar OPENAI_API_KEY
    • Usar base de datos PostgreSQL externa
  2. Frontend:

    • Cambiar VITE_API_URL a URL del backend en producción
    • Ejecutar npm run build
    • Servir carpeta dist/ con Nginx
  3. Backend:

    • Configurar CORS con dominio específico
    • Usar Gunicorn en lugar de Uvicorn
    • Configurar HTTPS con certificado SSL
  4. Base de datos:

    • Usar PostgreSQL gestionado (AWS RDS, DigitalOcean, etc)
    • Hacer backups automáticos
    • Configurar conexiones SSL
  5. Storage:

    • Usar S3 o similar para archivos
    • Configurar CDN para imágenes

📄 Licencia

MIT License - Uso libre para proyectos comerciales y personales

📝 Control de Versiones

Instrucciones para commits de Git

IMPORTANTE: Siempre incluir la versión actualizada en los mensajes de commit.

Formato recomendado:

git add .
git commit -m "tipo: descripción del cambio

- Detalle 1
- Detalle 2
- Frontend vX.X.XX / Backend vX.X.XX"

Tipos de commit:

  • feat: Nueva funcionalidad
  • fix: Corrección de bugs
  • refactor: Refactorización de código
  • style: Cambios de formato/estilo
  • docs: Actualización de documentación
  • perf: Mejoras de rendimiento
  • test: Añadir o actualizar tests

Ejemplo real:

git add .
git commit -m "feat: Add pagination (10 items/page) to all main tabs

- Pagination for Inspections, Checklists, and Reports
- Auto-reset on filter changes
- Smart page navigation with ellipsis
- Result counters showing X-Y of Z items
- Frontend v1.0.64"

Versionado

Seguir Semantic Versioning (MAJOR.MINOR.PATCH):

  • MAJOR: Cambios incompatibles en la API
  • MINOR: Nueva funcionalidad compatible con versiones anteriores
  • PATCH: Correcciones de bugs

Ubicación de versiones:

  • Frontend: frontend/package.json"version": "X.X.XX"
  • Backend: backend/app/main.pyversion="X.X.XX" en FastAPI app

🆘 Soporte

Para problemas o preguntas:

  1. Revisar logs con docker-compose logs
  2. Verificar que todos los servicios están corriendo con docker-compose ps
  3. Revisar documentación de API en http://localhost:8000/docs

🎯 Próximos Pasos (Post-MVP)

  • Lógica condicional en preguntas
  • Modo Copiloto IA completo
  • Análisis avanzado de imágenes
  • Dashboard de estadísticas
  • Historial de vehículos
  • Notificaciones por email/WhatsApp
  • App móvil React Native
  • Multi-tenant para varios talleres
  • Integración con sistemas ERP

¡Listo para usar! 🎉

Recuerda cambiar las contraseñas por defecto antes de usar en producción.

Description
No description provided
Readme 7.8 MiB
Languages
JavaScript 57.8%
Python 39.2%
PowerShell 1.6%
Shell 0.9%
Dockerfile 0.2%
Other 0.3%