274 lines
8.4 KiB
Markdown
274 lines
8.4 KiB
Markdown
# 🚗 Balotario Licencia Clase A - Categoría I
|
|
|
|
Una aplicación web interactiva desarrollada con Flask para estudiar las preguntas del balotario oficial de la licencia de conducir Clase A - Categoría I del Perú.
|
|
|
|
## ✨ Características
|
|
|
|
- **📚 Modo Estudio**: Revisa todas las preguntas con sus respuestas correctas
|
|
- **🏋️ Modo Práctica**: Practica con preguntas aleatorias y retroalimentación inmediata
|
|
- **📝 Examen Simulado**: Simula el examen real con tiempo limitado
|
|
- **📊 Estadísticas**: Seguimiento de tu progreso y precisión
|
|
- **🖼️ Imágenes**: Incluye todas las señales de tránsito oficiales
|
|
- **📱 Responsive**: Funciona perfectamente en móviles y tablets
|
|
- **🎨 Interfaz Moderna**: Diseño atractivo y fácil de usar
|
|
|
|
## 🚀 Instalación y Configuración
|
|
|
|
### 🐳 Opción 1: Docker (Recomendado)
|
|
```bash
|
|
# Clonar el repositorio
|
|
git clone <url-del-repositorio>
|
|
cd balotario-licencia-a1
|
|
|
|
# Opción A: Docker Compose (más fácil)
|
|
docker-compose up -d
|
|
|
|
# Opción B: Docker simple
|
|
docker build -t balotario .
|
|
docker run -p 5000:5000 balotario
|
|
|
|
# Opción C: Script de utilidades
|
|
./scripts/docker.sh compose-up
|
|
```
|
|
|
|
### 🐍 Opción 2: Instalación Local
|
|
|
|
#### Prerrequisitos
|
|
- Python 3.7 o superior
|
|
- pip (gestor de paquetes de Python)
|
|
|
|
#### Pasos de instalación
|
|
|
|
1. **Clona o descarga el proyecto**
|
|
```bash
|
|
# Si tienes git instalado
|
|
git clone <url-del-repositorio>
|
|
cd balotario-licencia-a1
|
|
```
|
|
|
|
2. **Configura las variables de entorno**
|
|
```bash
|
|
# Linux/Mac
|
|
./scripts/env-setup.sh dev
|
|
|
|
# Windows
|
|
scripts\env-setup.bat dev
|
|
|
|
# O manualmente
|
|
cp .env.sample .env
|
|
# Edita .env con tus valores
|
|
```
|
|
|
|
3. **Instala las dependencias**
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
4. **Ejecuta la aplicación**
|
|
```bash
|
|
python run.py
|
|
```
|
|
|
|
5. **Abre tu navegador**
|
|
- Ve a: `http://localhost:5000`
|
|
- ¡Listo para estudiar! 🎉
|
|
|
|
### 🌐 Acceso
|
|
- **Docker**: `http://localhost:5000` (o `http://localhost` con Nginx)
|
|
- **Local**: `http://localhost:5000`
|
|
|
|
## ⚙️ Configuración de Variables de Entorno
|
|
|
|
### 🔧 Configuración Rápida
|
|
```bash
|
|
# Desarrollo local
|
|
./scripts/env-setup.sh dev
|
|
|
|
# Producción
|
|
./scripts/env-setup.sh prod
|
|
|
|
# Docker
|
|
./scripts/env-setup.sh docker
|
|
```
|
|
|
|
### 📋 Variables Principales
|
|
| Variable | Descripción | Por Defecto |
|
|
|----------|-------------|-------------|
|
|
| `SECRET_KEY` | Clave secreta de Flask | `balotario_secret_key_2024_super_secure` |
|
|
| `FLASK_ENV` | Entorno de ejecución | `development` |
|
|
| `FLASK_DEBUG` | Modo debug | `true` |
|
|
| `HOST` | Dirección del servidor | `127.0.0.1` |
|
|
| `PORT` | Puerto del servidor | `5000` |
|
|
|
|
### 📚 Documentación Completa
|
|
Ver [docs/ENVIRONMENT.md](docs/ENVIRONMENT.md) para configuración avanzada.
|
|
|
|
## 📖 Cómo usar la aplicación
|
|
|
|
### 🏠 Página Principal
|
|
- Resumen de estadísticas
|
|
- Acceso rápido a todos los modos
|
|
- Información del balotario
|
|
|
|
### 📚 Modo Estudio
|
|
- Navega por todas las preguntas secuencialmente
|
|
- Filtra por rango de preguntas
|
|
- Muestra/oculta respuestas correctas
|
|
- Navegación con teclado (flechas y espacio)
|
|
|
|
### 🏋️ Modo Práctica
|
|
- Selecciona el número de preguntas (10, 20, 30, 50)
|
|
- Preguntas aleatorias
|
|
- Retroalimentación inmediata
|
|
- Estadísticas de sesión
|
|
|
|
### 📝 Examen Simulado
|
|
- Configura número de preguntas y tiempo límite
|
|
- Cronómetro en tiempo real
|
|
- Navegador de preguntas
|
|
- Calificación final con porcentaje de aprobación
|
|
|
|
## 🛠️ Estructura del Proyecto
|
|
|
|
```
|
|
balotario-licencia-a1/
|
|
├── app.py # Aplicación Flask principal
|
|
├── run_app.py # Script de inicio mejorado
|
|
├── config.py # Configuración modular
|
|
├── requirements.txt # Dependencias Python
|
|
├── data/ # Datos y contenido
|
|
│ ├── balotario_clase_a_cat_I.md # 200 preguntas oficiales
|
|
│ ├── README.md # Documentación del contenido
|
|
│ └── backup/ # Respaldos del contenido
|
|
├── templates/ # Templates HTML
|
|
│ ├── base.html # Template base
|
|
│ ├── index.html # Página principal
|
|
│ ├── study.html # Modo estudio
|
|
│ ├── practice.html # Modo práctica
|
|
│ └── exam.html # Examen simulado
|
|
├── static/ # Archivos estáticos
|
|
│ ├── css/
|
|
│ │ └── custom.css # Estilos personalizados
|
|
│ └── js/
|
|
│ └── app.js # JavaScript principal
|
|
├── test/ # Tests y pruebas
|
|
│ ├── README.md # Documentación de tests
|
|
│ ├── test_parser.py # Tests del parser
|
|
│ ├── test_sounds.html # Tests de sonidos
|
|
│ └── ... # Otros tests
|
|
├── scripts/ # Scripts de utilidades
|
|
│ └── dev.py # Herramientas de desarrollo
|
|
├── CHANGELOG.md # Registro de cambios
|
|
├── INSTALL.md # Guía de instalación
|
|
└── README.md # Esta documentación
|
|
```
|
|
|
|
## 🎯 Funcionalidades Técnicas
|
|
|
|
### Backend (Flask)
|
|
- **API RESTful** para obtener preguntas
|
|
- **Sesiones** para estadísticas persistentes
|
|
- **Parser inteligente** del markdown con regex
|
|
- **Filtros dinámicos** por rango y modo
|
|
|
|
### Frontend
|
|
- **Bootstrap 5** para diseño responsive
|
|
- **jQuery** para interactividad
|
|
- **Font Awesome** para iconos
|
|
- **Animaciones CSS** para mejor UX
|
|
- **LocalStorage** para persistencia del lado cliente
|
|
|
|
### Características Especiales
|
|
- **Navegación por teclado** en modo estudio
|
|
- **Cronómetro visual** en examen simulado
|
|
- **Navegador de preguntas** con estado visual
|
|
- **Estadísticas en tiempo real**
|
|
- **Confirmación antes de finalizar examen**
|
|
|
|
## 📊 Datos del Balotario
|
|
|
|
- **200 preguntas** oficiales
|
|
- **Respuestas correctas** marcadas con ✅
|
|
- **Imágenes de señales** de tránsito incluidas
|
|
- **Categorías**: Reglamentarias, preventivas, informativas
|
|
- **Temas**: Normas de tránsito, señalización, seguridad vial
|
|
|
|
## 🔧 Personalización
|
|
|
|
### Modificar preguntas
|
|
Edita el archivo `balotario_clase_a_cat_I.md` siguiendo el formato:
|
|
|
|
```markdown
|
|
### [NÚMERO]
|
|
|
|
[PREGUNTA]
|
|
|
|
a) [OPCIÓN A]
|
|
b) [OPCIÓN B]
|
|
c) [OPCIÓN C]
|
|
✅ d) [OPCIÓN CORRECTA]
|
|
```
|
|
|
|
### Cambiar estilos
|
|
Los estilos CSS están en `templates/base.html` dentro de la etiqueta `<style>`.
|
|
|
|
### Agregar funcionalidades
|
|
Modifica `app.py` para agregar nuevas rutas o funcionalidades.
|
|
|
|
## 🐛 Solución de Problemas
|
|
|
|
### La aplicación no inicia
|
|
- Verifica que Python esté instalado: `python --version`
|
|
- Instala las dependencias: `pip install -r requirements.txt`
|
|
- Verifica que el puerto 5000 esté libre
|
|
|
|
### Las preguntas no se cargan
|
|
- Verifica que el archivo `balotario_clase_a_cat_I.md` esté presente
|
|
- Revisa la consola para errores de parsing
|
|
|
|
### Problemas con imágenes
|
|
- Las imágenes se cargan desde URLs externas
|
|
- Verifica tu conexión a internet
|
|
|
|
## 📝 Licencia
|
|
|
|
Este proyecto está licenciado bajo la **GNU General Public License v3.0** (GPL-3.0).
|
|
|
|
### ¿Qué significa esto?
|
|
|
|
- ✅ **Libertad de uso**: Puedes usar este software para cualquier propósito
|
|
- ✅ **Libertad de estudio**: Puedes estudiar cómo funciona y modificarlo
|
|
- ✅ **Libertad de distribución**: Puedes redistribuir copias para ayudar a otros
|
|
- ✅ **Libertad de mejora**: Puedes mejorar el programa y publicar las mejoras
|
|
|
|
### Condiciones importantes
|
|
|
|
- 📋 **Código abierto**: Si distribuyes versiones modificadas, debes mantener el código fuente disponible
|
|
- 📋 **Misma licencia**: Las obras derivadas deben usar la misma licencia GPL-3.0
|
|
- 📋 **Atribución**: Debes mantener los avisos de copyright y licencia originales
|
|
|
|
### Contenido educativo
|
|
|
|
El contenido del balotario está basado en las preguntas oficiales del **MTC (Ministerio de Transportes y Comunicaciones) del Perú** y es de dominio público para fines educativos.
|
|
|
|
Para más detalles, consulta el archivo [LICENSE](LICENSE) en este repositorio.
|
|
|
|
## 🤝 Contribuciones
|
|
|
|
¡Las contribuciones son bienvenidas! Puedes:
|
|
- Reportar bugs
|
|
- Sugerir nuevas funcionalidades
|
|
- Mejorar la documentación
|
|
- Optimizar el código
|
|
|
|
## 📞 Soporte
|
|
|
|
Si tienes problemas o preguntas:
|
|
1. Revisa este README
|
|
2. Verifica los logs de la aplicación
|
|
3. Busca en los issues del repositorio
|
|
|
|
---
|
|
|
|
**¡Buena suerte en tu examen de manejo! 🚗💨**
|