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"
435 lines
11 KiB
Markdown
435 lines
11 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
cd checklist-mvp
|
|
```
|
|
|
|
### 2. Configurar variables de entorno
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
Esto levantará:
|
|
- PostgreSQL en puerto 5432
|
|
- Backend (FastAPI) en puerto 8000
|
|
- Frontend (React) en puerto 5173
|
|
|
|
### 4. Crear usuario administrador
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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:
|
|
|
|
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
|
|
```bash
|
|
docker-compose logs -f backend
|
|
```
|
|
|
|
### Ver logs del frontend
|
|
```bash
|
|
docker-compose logs -f frontend
|
|
```
|
|
|
|
### Ver logs de PostgreSQL
|
|
```bash
|
|
docker-compose logs -f postgres
|
|
```
|
|
|
|
### Acceder a la base de datos
|
|
```bash
|
|
docker-compose exec postgres psql -U checklist_user -d checklist_db
|
|
```
|
|
|
|
### Reiniciar servicios
|
|
```bash
|
|
docker-compose restart
|
|
```
|
|
|
|
### Detener todo
|
|
```bash
|
|
docker-compose down
|
|
```
|
|
|
|
### Eliminar volúmenes (resetear BD)
|
|
```bash
|
|
docker-compose down -v
|
|
```
|
|
|
|
## 📝 Crear Checklist de Ejemplo
|
|
|
|
Puedes usar la API directamente o crear via SQL:
|
|
|
|
```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:
|
|
```bash
|
|
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**:
|
|
```bash
|
|
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.py` → `version="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.
|