a65bfa1a9d0dc02bcc93f2b487f0d8b7623473fd
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_KEYpor 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
- Frontend: http://localhost:5173
- API Backend: http://localhost:8000
- Documentación API: http://localhost:8000/docs
👥 Usuarios de Prueba
| Usuario | Contraseña | Rol |
|---|---|---|
| admin | admin123 | Administrador |
| mecanico1 | mecanico123 | Mecánico |
📱 Flujo de Uso
Como Administrador:
- Login con
admin / admin123 - Ir a "Checklists"
- Crear nuevo checklist
- Agregar preguntas con tipos:
- pass_fail: Revisado / En mal estado
- good_bad: Buen estado / Mal estado
- text: Respuesta libre
- numeric: Números (KM, porcentajes)
- Configurar puntos por pregunta
- Activar el checklist
Como Mecánico:
- Login con
mecanico1 / mecanico123 - Ir a "Nueva Inspección"
- Seleccionar checklist activo
- Ingresar datos del vehículo (OR, matrícula, KM)
- Completar preguntas paso a paso
- Subir fotos (máx 3 por pregunta)
- Ver score en tiempo real
- Firmar digitalmente
- Finalizar inspección
- 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:
-
Variables de entorno:
- Cambiar
SECRET_KEYpor una clave segura aleatoria - Configurar
OPENAI_API_KEY - Usar base de datos PostgreSQL externa
- Cambiar
-
Frontend:
- Cambiar
VITE_API_URLa URL del backend en producción - Ejecutar
npm run build - Servir carpeta
dist/con Nginx
- Cambiar
-
Backend:
- Configurar CORS con dominio específico
- Usar Gunicorn en lugar de Uvicorn
- Configurar HTTPS con certificado SSL
-
Base de datos:
- Usar PostgreSQL gestionado (AWS RDS, DigitalOcean, etc)
- Hacer backups automáticos
- Configurar conexiones SSL
-
Storage:
- Usar S3 o similar para archivos
- Configurar CDN para imágenes
📄 Licencia
MIT License - Uso libre para proyectos comerciales y personales
🆘 Soporte
Para problemas o preguntas:
- Revisar logs con
docker-compose logs - Verificar que todos los servicios están corriendo con
docker-compose ps - 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
Languages
JavaScript
57.8%
Python
39.2%
PowerShell
1.6%
Shell
0.9%
Dockerfile
0.2%
Other
0.3%