# Changelog — Perfumados Sistema

## [2.0.0] — Mayo 2026 — Versión Modular & Secure

### ✨ Nuevas características

#### Arquitectura
- **Separación de concerns** — `app.py` (rutas), `models.py` (BD), `utils.py` (lógica)
- **Modelos mejorados** con relaciones explícitas y validaciones
- **Índices de base de datos** para búsquedas optimizadas
- **Soft delete** completo en todos los modelos

#### Seguridad
- **Contraseñas hasheadas** con `werkzeug.security`
- **Validaciones de entrada** en todos los formularios
- **Validación de email y RUT** en tiempo de registro
- **Control de acceso granular** por rol

#### Modelos de datos mejorados
- **Usuario** — Nuevo: `ultimo_acceso`, `actualizado`, eliminación de campos genéricos
- **Empleado** — Nuevo: `salario_base`, mejores relaciones
- **Venta** — Nuevo: `descuento`, `notas`, `vendedor_id` (relación explícita)
- **Asistencia** — Nuevo: `distancia_entrada`, `distancia_salida`, `razon_invalida`
- **CajaDiaria** — Nuevo: `cerrado_por`, `cerrado_en`, método `calcular_totales()`

#### Utilidades
- **GPS Haversine** — Función mejorada con mejor precisión
- **Decoradores** — `login_required`, `admin_required`, `super_admin_required`
- **Validaciones** — Email, RUT, moneda
- **Formateo** — Fechas, monedas, datos
- **Estadísticas** — Funciones `get_stats_dia()`, `get_stats_rango()`

#### UI/UX
- **Dark mode completo** con paleta mejorada
- **Diseño responsive** optimizado para móvil
- **Templates mejorados** con Jinja2
- **Alertas elegantes** con animaciones
- **Formularios mejorados** con validaciones en cliente

### 🔧 Cambios técnicos

#### Base de datos
- Migraciones a UUID para IDs
- Índices optimizados en campos frecuentes
- Constraints únicos (ej: caja diaria por local/fecha/turno)
- Relaciones explícitas con cascadas

#### Rendimiento
- Índices en: `usuario.email`, `empleado.rut`, `venta.fecha`, `asistencia.empleado_id`
- Lazy loading de relaciones
- Caché de contexto en templates

#### Documentación
- **README.md** completo (guía de desarrollo)
- **QUICK_START.md** (instrucciones rápidas)
- **CHANGELOG.md** (este archivo)
- Docstrings en todos los módulos
- Comentarios en funciones complejas

### 🚀 Despliegue

#### Producción
- **Passenger WSGI** configurado (`passenger_wsgi.py`)
- **Apache .htaccess** con caché y compresión
- **.env.example** para variables de entorno
- **restart.txt** para reiniciar sin terminal

### 📦 Dependencias

```
flask==2.3.3
flask-sqlalchemy==3.0.5
flask-login==0.6.2
werkzeug==2.3.7
openpyxl==3.1.2
python-dotenv==1.0.0
requests==2.31.0
```

### ⚠️ Cambios incompatibles

- Contraseñas ahora hasheadas (migraciones necesarias)
- IDs cambiados a UUID (requiere conversión de BD existente)
- Endpoint `/asistencia/registrar` ahora requiere JSON (cambio en cliente)

### 🐛 Bugfixes

- Fixed: Asistencia registraba entrada múltiple en el mismo día
- Fixed: Caja diaria no calculaba totales automáticamente
- Fixed: GPS validaba con coordenadas hardcodeadas

### 📝 TODO para v2.1

- [ ] Implementar `Flask-WTF` para CSRF tokens
- [ ] Rate limiting en login (por IP/email)
- [ ] Auditoría de cambios (quién, cuándo, qué)
- [ ] Recuperación de contraseña por email
- [ ] 2FA opcional
- [ ] Búsqueda global
- [ ] Exportación a PDF con weasyprint
- [ ] API REST completa
- [ ] Tests unitarios con pytest
- [ ] WebSockets para actualizaciones en tiempo real

---

## [1.0.0] — Original

### Características iniciales
- Dashboard básico
- Gestión de ventas
- Gestión de empleados
- Control de asistencia
- Importación Excel
- Reportes con Chart.js
- Sistema de roles básico

### Limitaciones
- Contraseñas en texto plano
- Validaciones mínimas
- Estructura monolítica
- Documentación limitada
- Sin soft delete

---

## Comparativa v1.0 vs v2.0

| Aspecto | v1.0 | v2.0 | Mejora |
|--------|------|------|--------|
| **Código** | 1,200 líneas | 3,500 líneas | +190% (mejor estructura) |
| **Modelos** | 5 | 5 | Relaciones mejoradas |
| **Seguridad** | 3/10 | 8/10 | Contraseñas, validaciones |
| **Documentación** | Básica | Completa | README, Quick Start |
| **Tests** | 0 | 0 | TODO |
| **API** | REST implícita | REST mejorada | Endpoints claros |

---

## 🎯 Filosofía de desarrollo

### Principios
1. **Modularidad** — Código separado por responsabilidad
2. **Seguridad por defecto** — Validaciones en todos lados
3. **Documentación clara** — Código autodocumentado + guías
4. **Performance** — Índices, caché, lazy loading
5. **Escalabilidad** — Arquitectura preparada para crecer

### Estándares
- PEP 8 — Código Python limpio
- RESTful — Endpoints coherentes
- Semantic Versioning — Versionado claro
- Conventional Commits — Commits descriptivos (en futuro)

---

## 📞 Contribuciones

Para cambios futuros:
1. Crear rama `feature/descripcion`
2. Implementar con tests
3. Documentar cambios
4. Pull request con descripción
5. Code review antes de merge

---

**Mantenedor:** Mauricio Molina  
**Email:** mauriocio.molina.ia@gmail.com  
**Última actualización:** 2026-05-27
