AIVlodeiro - PRO - 2026-05-15 01:59:05 UTC Versión: 1.29.0 Changelog: # 1.29.0 - 2025-11-02 EP-001 / ST-315: Cobro masivo de turnos y reglas de medio mes unificadas. - Academias: nueva vista `turno_bulk_pagar` enlazada desde el detalle del turno. Permite seleccionar mes/año, previsualizar importes sugeridos (aplicando medio mes según fechas) y registrar pagos múltiples con overrides puntuales. Plantilla dedicada `turno_bulk_pagar.html` y helper `_build_turno_bulk_pagos_info` agrupan pendientes del mes. - Core pagos: `gestion/payments.py::due_for_inscripcion_month` ahora devuelve media tarifa para cualquier inicio dentro del mes distinto del día 1, manteniendo la regla de baja temprana. Observaciones coherentes en los pagos generados. - Tests: nuevo módulo `tests/test_turno_bulk_pagos.py` cubre GET/POST masivos, overrides e idempotencia; `tests/test_pagos_overview.py` ajustado a la nueva regla de medio mes. Suite completa verde con `powershell -ExecutionPolicy Bypass -File .\tools\run_tests.ps1` (222 tests, cobertura core 88%). - Docs: backlog `ST-315` marcado como done y ERRORES_HABITUALES documenta el fallo inicial (`NoReverseMatch`) del arranque TDD. # 1.28.0 - 2025-11-02 EP-005 / ST-314: Alta masiva de inscripciones con filtros y tarifa manual. - Academias (turno_bulk_inscribir): nueva pantalla de filtros rápidos (segmento infantil/adulto/todos y alumnos con 0 inscripciones activas o todos) que precarga valores según el turno. El listado respeta edad (<14 para infantiles, >17 para adultos) y oculta alumnos ya inscritos en el turno. - Academias (formulario): selección explícita de tarifa a aplicar al lote, con sugerencia basada en la duración del turno y validación obligatoria. - Lógica servidor: helper `_eligible_alumnos_para_turno` admite segmentación y control de inscripciones activas globales; alta masiva usa la tarifa elegida por la usuaria. Nuevas pruebas `tests/test_turno_bulk_inscribir.py` cubren filtros y creación. - Docs: backlog ST-314 actualizado (criterios de aceptación, estado done). Versión global subida a 1.28.0. - Calidad: `powershell -ExecutionPolicy Bypass -File .\tools\run_tests.ps1` → 217 tests green (cobertura core 88%). # 1.27.1 - 2025-11-02 EP-003: UX de informes pulida y PDF "Alumnos por turno" refinado. - Academias (templates/nav): las páginas de informes ocultan el botón redundante "Informes" y el enlace de regreso se estandariza como botón Bootstrap (`btn btn-secondary`). Tests `tests/test_reports_index.py` y `tests/test_report_alumnos_por_turno.py` cubren la navegación. - Core PDF: `_render_alumnos_por_turno_pdf` reordena grupos por día de la semana y hora, incrementa márgenes, elimina la columna redundante "Turno" y muestra bloque "Sin alumnos" para grupos vacíos. Vista previa HTML (`report_alumnos_por_turno.html`) refleja el layout. - Docs y backlog: `CONTEXT.md` y `docs/backlog/user_stories.yaml` actualizados (ST-309, ST-310, ST-311 en done; TL;DR sincronizado a 1.27.1). - Calidad: `powershell ./tools/run_tests.ps1` → 214 tests green (cobertura estable 88%). # 1.27.0 - 2025-11-01 EP-003: Infraestructura PDF puramente Python y limpieza de pipelines. - Core (plataforma): `core/pdf.py` migra definitivamente a builders `reportlab` (tablas y títulos generados en código) y elimina `xhtml2pdf`. `report_alumnos_por_turno` usa ahora layout tabular consistente sin plantillas HTML. - Dependencias/workflows: `requirements.txt` sin paquetes con binarios nativos; workflows `ci.yml` y `deploy.yml` ya no instalan `cairo`/`meson`/`pkg-config`. - Documentación: `DEPLOY.md`, `DEPLOY_CHECKLIST.md` y `CONTEXT.md` describen el pipeline 100% pip-installable y las validaciones asociadas. - Artefactos AI: `api/openapi-secretaria.yaml` y `api/mcp_tools_manifest.json` version=1.27.0; `aiworkers/secretaria/MANIFEST_SHA256` recalculado. - Calidad: suite completa (209 tests) ejecutada vía `tools/run_tests.ps1` (verde, cobertura 83%). # 1.26.0 - 2025-10-28 EP-003: Sección de Informes (infraestructura PDF en plataforma + índice de informes en admin). - Core (plataforma): infraestructura PDF común en `core/pdf.py` con plantilla base `core/templates/core/pdf/base_report.html` y smoke `core/templates/core/pdf/_infra_smoke.html` (xhtml2pdf con fallback manejado). - Admin (academias): nueva sección "Informes" accesible vía navbar; índice en `/academias/informes/` y detalle placeholder `/academias/informes//` (staff-only). Informes registrados: Pagos cobrados, Pendientes de cobro, Inscritos por turno. - Tests: añadidos `tests/test_reports_index.py` (acceso/permiso/listado) y `tests/test_reports_pdf_infra.py` (render PDF básico). - Artefactos AI: `api/openapi-secretaria.yaml` y `api/mcp_tools_manifest.json` version=1.26.0; `aiworkers/secretaria/MANIFEST_SHA256` recalculado. - DevEx: script `tools/deploy/deploy_and_smoke.ps1` ahora lee la versión desde `VERSION` (sin hardcode), validando home/manifest/OpenAPI de forma dinámica. - Calidad: suite completa verde (≈194 tests). Sin migraciones. # 1.25.0 - 2025-10-25 ST-202: renombrado completo de la app administrativa. - Admin (academias): todos los módulos, urls, formularios y plantillas migraron de `gestionadmin` a `academias`, alineando el dominio explícito en imports y namespaces. - Compatibilidad temporal: paquete alias `gestionadmin` mantiene AppConfig y urls como proxy (documentado en ST-206) para evitar rupturas inmediatas. - Documentación: ARCHITECTURE.md, CONTEXT.md, README.md, DEPLOY.md y DEPLOY_CHECKLIST.md actualizados para referirse a `academias/` y al plan de retirada del alias. - Workflow de despliegue: paquete GitHub Actions incluye ahora `academias/` junto al alias en el tar y los backups. - Validación: `pytest -q tests/test_api_pagos_rules.py` en local tras refactor (PASS). # 1.24.13 - 2025-10-24 ST-201 cerrada: flakiness por fechas y orden estabilizados; cobertura consolidada; suite verde. - Flakiness (ST-201): - Fechas: tests sensibles fijados a 2025-10-01 para evitar ramas especiales de mes; ver `tests/test_gestionadmin_pagar_flow.py` y `tests/test_turno_finanzas_api.py`. - Orden: listado estable y determinista en API donde podía ser ambiguo: - `AlumnoViewSet.inscripciones`: ahora ordena por `-fecha_inicio`. - `AlumnoViewSet.pagos`: orden cronológico por `fecha, id`. - `TurnoViewSet.get_queryset`: al filtrar por `estado`, se devuelve lista ordenada por `id`. - `DashboardViewSet.alumnos_inactivos`: orden alfabético por nombre. - Cobertura: .coveragerc activo y tests focalizados añadidos en la sesión previa; cobertura efectiva 82% (189 tests en verde). - Seguridad/Permisos: tests POST usan cabecera `X-Api-Key` desde entorno; 403 uniformes comprobados. - Sin cambios de modelo ni migraciones. # 1.24.12 - 2025-10-23 Backlog unificado, limpieza de TODO y validador opcional. - Proceso/Backlog: - Fuente única del backlog: `docs/backlog/user_stories.yaml` (estados todo/doing/done). - `TODO.md` reducido a checklist de sesión con enlace al backlog canónico (sin duplicar historias). - `CONTEXT.md` actualizado (Fuentes de verdad + checklist) para reflejar el backlog canónico. - Nuevo script `tools/validate_backlog_sources.py` (opcional) para evitar que `TODO.md` vuelva a crecer como backlog. - Backlog técnico añadido: - ST-201: auditar/refactorizar la suite de tests (negativos auth, cobertura, flakies, pautas). - ST-202: renombrar app `gestionadmin` a `academias` (refactor con plan de despliegue/rollback). - Migradas al YAML las mejoras de UI: ocultar botón Eliminar si hay pagos (ST-204) y placeholders en edición de alumno (ST-205). - Sin cambios de modelo ni API; sólo documentación/proceso. # 1.24.10 - 2025-10-19 UX y robustez en inscripciones: mensajes claros en alta y fix de filtro en acciones de detalle API. - Admin (gestionadmin): Al inscribir un alumno, si no puede inscribirse por estar ya inscrito o por solape, ahora se muestra un mensaje claro y un error no asociado a campo. La plantilla `inscripcion_create.html` renderiza mensajes (Bootstrap alerts) y errores del formulario. - Modelo: Validaciones ya presentes evitan solapes (mismo turno con fechas solapadas; turnos distintos en el mismo día con horario solapado). - API: `InscripcionViewSet.get_queryset()` ya no aplica filtros de lista (p.ej., `?fecha=...`) a acciones de detalle como `tarifa_actual`, `pagos`, `terminar` o `reactivar`, evitando falsos 404. - Tests: Suite completa verde (164). Ajustes menores en tests de finanzas por turno y estado, y validación específica de `tarifa_actual`. # 1.24.9 - 2025-10-18 Docs: instructions.md / extended / README / SECURITY / docs/ai/MCP_TOOLS.md actualizados a 1.23.0 y política de claves; removidas referencias a la clave legacy. - Configuración: unificada la política de estáticos para usar exclusivamente `staticfiles/` como fuente en desarrollo y `static_collected/` para producción (WhiteNoise). Eliminado el directorio legacy `static/` del repo y añadido a `.gitignore`. Added: Manifest MCP inicial (`api/mcp_tools_manifest.json`) y documentación `docs/ai/MCP_TOOLS.md`. - Documentación: armonización de `DEPLOY.md` y `DEPLOY_CHECKLIST.md` (roles, validaciones post-deploy, rollback), `SECURITY.md` con matriz de claves y excepción de newsletter, `DATABASE.md` actualizado a modelos reales y ERD, `STYLE.md`/`ERRORES_HABITUALES.md` con referencias cruzadas. Añadido aviso en `static/README.LEGACY.md`. Docs: README enlaza a docs/ai/MCP_TOOLS.md; ERRORES_HABITUALES.md actualizado (propagación de filtros turno). - Tests: suite completa verde (157). Sin migraciones de base de datos. Release notes dedicados: `docs/operations/RELEASE_NOTES_1.21.1.md`. # 1.24.8 - 2025-10-15 Cambio funcional: Eliminada la regla especial de septiembre al 50%. Vigente solo medio mes por fechas (alta 2..15 o baja 1..15; día 1 cuenta completo). - Core: `gestion/payments.py::due_for_inscripcion_month` sin tratamiento especial de septiembre. - API: descripciones Swagger y lógica de `register/monthly` y `register/advance` alineadas (monthly = base; advance usa helper por mes). - Admin: observaciones y preview simplificados (sin "Descuento septiembre"). - AIWorkers: instrucciones actualizadas, sin mención a septiembre 50%. - OpenAPI reducido: descripción actualizada. - Tests: suite completa verde (150). # 1.24.6 - 2025-10-12 # 1.24.6 - 2025-10-12 # 1.24.7 - 2025-10-12 Patch: Admin pagos DRY con helper compartido, alineado con API y reglas. - Admin: `gestionadmin/views.py` refactorizado para usar `gestion/payments.py::due_for_inscripcion_month` en: - Pagos overview (a_cobrar mensual por inscripción) - Pagos detail (due/paid/pending por inscripción) - Alumno pagar: POST (single/bulk/advance), GET defaults y preview JSON. - Observaciones coherentes: "Pago medio mes" cuando aplica por fechas, "Pago mensual" en resto. - Tests: suite completa verde (150). Sin cambios de API. Patch: API financiera alineada con reglas de cobro (medio mes por fechas). - Core: Nueva función compartida `gestion/payments.py::due_for_inscripcion_month` centraliza las reglas. - API: Endpoints ajustados para usar las reglas al calcular "a cobrar": - GET /v1/pagos/summary/ - GET /v1/pagos/forecast/ - GET /v1/pagos/pending/ - GET /v1/turnos/{id}/finanzas/ - GET /v1/dashboard/summary/ - Tests: Añadido `tests/test_api_pagos_rules.py` con casos de septiembre y medio mes por inicio/fin (PASS). - Docs: Backlog ST-011 documenta que la API aplica las mismas reglas que la UI. OpenAPI reducido bump de versión. # 1.24.5 - 2025-10-12 # 1.24.0 - 2025-10-05 # 1.24.0 - 2025-10-05 # 1.24.0 - 2025-10-05 Minor: Ampliación edición de alumnos vía MCP. \n# 1.24.3 - 2025-10-10 Patch: Alineación AI Secretaria, seguridad de logs y smoke de endpoints. - Manifest MCP: añadido `tarifas.list` y limpieza JSON; hash actualizado en `aiworkers/secretaria/MANIFEST_SHA256`. - OpenAPI reducido secretaria: expuesto `/v1/tarifas/` y version bump a 1.24.1. - Seguridad: eliminado logging de claves en `api/views.py` (decorador `require_api_key`). - Aiworker: `agent_client.py` con fallback de env `API_DEFAULT_KEY|API_KEY|API_KEY_BAK` y método `tarifas_list()`. - Docs: ampliado `ERRORES_HABITUALES.md` con errores recurrentes (X-Api-Key, manifest/OpenAPI, estáticos, SECRET_KEY, PowerShell, URLs). - Tests: suite completa verde (128). Smoke local de `/v1/tarifas/` y `/v1/pagos/summary/` con `X-Api-Key` OK. - Manifest: `alumnos.update` ahora acepta/expone `contacto`, `ano_nacimiento`, `tutor1`, `tutor2`, `observaciones` además de `nombre`. - Tests: Añadidos tests de actualización múltiple e intento inválido de `ano_nacimiento` futuro. - Docs: (Pendiente de actualizar instrucciones secretaria/README para reflejar nuevos campos editables). # 1.23.0 - 2025-10-05 # 1.23.0 - 2025-10-05 Minor: Altas rápidas y alineación seguridad claves. - Added: POST /v1/alumnos/ (alumnos.create) y POST /v1/inscripciones/ (inscripciones.create) activados en manifest. - Added: Validaciones en creación (año nacimiento razonable, evitar inscripciones duplicadas activas). \n# 1.24.4 - 2025-10-12 Patch: Gestión de pagos mensual consolidada y distintivo de entorno local. - Pagos overview/detail: a_cobrar aplica las mismas reglas que el flujo individual/bulk: - Regla de septiembre eliminada; solo medio mes por fechas de alta/baja. - Medio mes si inicia en el mes días 2..15 (día 1 es completo) o si termina en el mes días 1..15. - Tests: `tests/test_pagos_overview.py` actualizado (fixtures con Alumno válido) y verificación de totales (PASS). - UI: Banner rojo “ENTORNO LOCAL” visible solo en local/dev (dashboard, alumnos, pagos overview/detail, pagar alumno). - Config: Nuevo context processor `core.context_processors.app_env` exponiendo `APP_ENV`, `IS_LOCAL`, `DEBUG` a plantillas. - Validación: Suite completa verde (146). - Security: Eliminado totalmente fallback/key legacy. Política de claves separadas (PRO vs DEV/CI) documentada. Fallback interno desaparece. - Manifest: herramientas create movidas del bloque adicional al principal; hash recalculado (MANIFEST_SHA256). - Tests: Fixture autouse inyecta API_DEFAULT_KEY=devkey y client incluye X-Api-Key por defecto. Suite green (111 tests). - Docs: instructions.md / extended / README / SECURITY / MCP_TOOLS actualizados a 1.23.0 y política de claves; removidas referencias a la clave legacy. # 1.21.1 - 2025-10-04 # 1.21.1 - 2025-10-04 Patch: Añadido path faltante `/v1/turnos/` al OpenAPI reducido secretaria (provocaba uso incorrecto de `turnos.overview` y no exposición de `dia_semana`/horarios). Bump versión a 1.21.1. # 1.22.0 - 2025-10-05 Minor: Finanzas por turno (consulta cruzada básica de ingresos y pendientes). - Added: `GET /v1/turnos/{id}/finanzas/` (turnos.finanzas en manifest) → a_cobrar, cobrado, pendiente y desglose por alumno (tarifa y pagos del mes). - Tests: `test_turno_finanzas_api.py` valida sumatorias (a_cobrar= n_inscs * precio_base, cobrado y pendiente) y estructura del payload. - Manifest: bump a 1.22.0, añadida herramienta `turnos.finanzas`. - Version: `VERSION` actualizado a 1.22.0. - Docs pendientes: incluir en OpenAPI reducido secretaria en próxima sincronización si el AIWorker necesita esta consulta (evaluar exposición). Meta: Alineada versión del manifest MCP (tools) de 1.21.0 a 1.21.1 y recalculado `MANIFEST_SHA256`. Docs: Actualizados `instructions.md`, `instructions_extended.md`, `knowledge_base.md` con nota patch. Tests: Añadidos tests de listados (`test_turnos_list_api.py`, `test_sesiones_list_api.py`, `test_asistencias_list_api.py`, `test_inscripciones_list_api.py`) y helper `tools/api_client_helpers.py` para cliente autenticado. Release notes dedicados: `docs/operations/RELEASE_NOTES_1.21.1.md`. # 1.21.0 - 2025-10-04 Minor: Endpoints de listado granular para secretaria (turnos/sesiones/asistencias/inscripciones) y filtros. Added: /v1/alumnos/activos/ (alumnos con inscripciones activas en el mes). # 1.24.1 - 2025-10-09 Patch: Mejora UX de tipos de turno (Niño/Adulto). - Turnos list/detail: reemplazados emojis por badges con texto explícito (Niño → bg-info; Adulto → bg-secondary) para mejor legibilidad y accesibilidad. - Vista móvil (cards) en listado: añadido campo “Nivel” con el mismo badge. - Sin cambios de backend ni de datos. Solo plantillas y estilos Bootstrap. - Added: GET /v1/sesiones/?fecha=YYYY-MM-DD&turno=ID (filtros nuevos en `SesionViewSet.get_queryset`). - Added: GET /v1/asistencias/?sesion=ID&alumno=ID (filtros nuevos en `AsistenciaViewSet.get_queryset`). - Added: GET /v1/inscripciones/?turno=ID&activa_en=YYYY-MM (ya soportado; documentado ahora como inscripciones.list). - Docs: Manifest MCP, OpenAPI reducido, instructions e knowledge_base actualizados a 1.21.0. - Tests: Pendiente añadir casos específicos (seguirá en 1.21.x si se requiere validación ampliada). # 1.24.2 - 2025-10-09 Patch: Bugfix edad en detalle de turno. - Corrección: En la tabla de inscripciones de `turno_detail`, la columna "Edad" mostraba "1" para adultos debido a aritmética incorrecta en plantilla (uso de filtros `add` con `now.year`). - Solución: Cálculo de edad en servidor en la vista (`current_year - ano_nacimiento`) y renderizado de `insc.edad` en plantilla (también en la card móvil). - Tests: Añadido `tests/test_turno_detail_age.py` que valida renderización de una edad adulta (p.ej. 70). - Alcance: Sin cambios de modelo ni migraciones. # 1.20.0 - 2025-10-04 Minor: Nuevos endpoints operativos para secretaria AI. - Added: /v1/alumnos/activos/ (alumnos con inscripciones activas en el mes). - Added: /v1/pagos/pending/ (pendiente por alumno: tarifa_total, pagado, pendiente, ranking). - Added: PATCH /v1/alumnos/{id}/ (alumnos.update en manifest) para actualizar nombre. - Docs: Manifest MCP y OpenAPI reducido actualizados, instructions & knowledge_base sincronizados. - Tests: Cobertura ampliada (alumnos activos, pagos pending, update nombre alumno). # 1.19.1 - 2025-10-04 Patch: Limpieza de dependencias duplicadas en requirements.txt, actualización OpenAPI secretaria a 1.19.1, documentación de proceso de pase a producción. # 1.19.0 - 2025-10-04 Resumen: Release menor (minor) añadiendo nueva API REST v1 con endpoints CRUD y acciones avanzadas sin romper compatibilidad backward con rutas legacy. - Added: API REST base v1 con viewsets CRUD (empresas, turnos, alumnos, tarifas, inscripciones, pagos, sesiones, asistencias) y endpoints avanzados: - Turno: /v1/turnos/{id}/metrics/ - Tarifas summary: /v1/tarifas/summary/ - Inscripciones panel: /v1/inscripciones/panel/ - Inscripciones bulk update: /v1/inscripciones/bulk_update/ - Asistencias bulk set: /v1/asistencias/bulk_set/ - Dashboard summary: /v1/dashboard/summary/ (nuevo) y compatibilidad legacy /v1/version/dashboard/ - Added: Permiso por API Key unificado (ApiKeyPermission) reutilizando NEWSLETTER_API_KEY. - Added: Serializers estructurados y documentación Swagger básica (operation_summary en acciones custom). - Added: Manifest MCP inicial (`api/mcp_tools_manifest.json`) y documentación `docs/ai/MCP_TOOLS.md`. - Added: Endpoint .well-known silencioso para Chrome DevTools probes. - Changed: Reorganización de `api/urls.py` con router DRF bajo prefijo /v1/ manteniendo compatibilidad de newsletter legacy. - Security: Lecturas GET protegidas si se define API_DEFAULT_KEY/NEWSLETTER_API_KEY. - Deprecated (interno): se elimina uso de `datetime.utcnow()` en favor de aware datetimes. - Docs: README enlaza a docs/ai/MCP_TOOLS.md; ERRORES_HABITUALES.md actualizado (propagación de filtros turno). # 1.18.2 - 2025-10-03 - Added: Endpoint `/.well-known/appspecific/com.chrome.devtools.json` devuelve `{}` (elimina ruido de 404 en logs por sondas de Chrome DevTools). - Tests: nuevo test `test_well_known_chrome_devtools.py` valida 200 y JSON vacío. - Bugfix: Persistencia robusta de filtros (turno) en navegación Alumnos (listado → detalle → editar → guardar/cancelar → volver). - Causa raíz: concatenación manual de barras y querystrings; propagación de `request.GET` completo; valores corruptos tipo `1?turno=1`. - Solución: uso sistemático de `{% url %}`, sanitización de `turno`, `back_url` seguro y propagación de solo `?turno=...` cuando aplica. - Documentación: actualizado `ERRORES_HABITUALES.md` con patrón, causa y solución aplicada. # 1.18.0 - 2025-09-30 - Gestión profesional de tarifas: - Botón "Ver" con icono de ojo en listado, coherente con alumnos. - Detalle de tarifa con botones Volver, Editar y Eliminar, siguiendo el estilo de alumnos. - Métricas de inscripciones y total por tarifa en el mes actual, alineación numérica y total global. - Alta, edición y borrado de tarifas con formularios y confirmaciones visualmente coherentes. - Refactor de imports y decoradores para robustez y evitar errores recurrentes de importación. - Validación completa con tests automáticos y checklist de cierre profesional. # 1.17.0 - 2025-09-29 - Mejoras en el dashboard inicial: - Saludo personalizado con el nombre real del usuario. - Tarjeta de alumnos con métricas: total, niños, adultos, desglose por tarifa. - Nueva tarjeta de inscripciones (barra verde, botón azul, acceso rápido). - Reordenación de tarjetas: Alumnos, Inscripciones, Turnos, Tarifas. - Ajustes visuales y de usabilidad. # 1.16.0 - 2025-09-29 - Mejoras de experiencia de usuario en la sección de alumnos: - Formularios de alta y edición unificados, mobile-first, etiquetas encima y campos adaptados al contenido. - Botoneras reorganizadas y sin duplicidades. - Eliminación de errores de navegación y visualización. - Estilo profesional y coherente con el detalle de alumno. # 1.15.0 - 2025-09-28 # 1.15.1 - 2025-09-28 - Bugfix: Pytest recogía archivos temporales en la carpeta `tmp/`, provocando errores `UnicodeDecodeError` al intentar leer archivos no UTF-8 como tests. - Solución: Añadido `norecursedirs = tmp` en `pytest.ini` para que pytest ignore la carpeta `tmp/`. - Resultado: Pruebas automáticas pasan sin errores, ciclo CI/CD validado y checklist de cierre actualizado en CONTEXT.md. # 1.14.0 - 2025-09-27 - Edición avanzada de inscripción: formulario vertical, mobile-first, labels en negrita y controles compactos. - Bugfix: el campo fecha de inicio y fecha de baja recuperan y muestran siempre el valor guardado en BD (formato yyyy-mm-dd). - Mejora visual: los campos de fecha aparecen en vertical, mejorando la experiencia en móvil y escritorio. - Refuerzo de robustez en el form y template para fechas. - Validación completa con tests y checklist de despliegue. # 1.13.0 - 2025-09-27 - Nueva ficha de turnos en dashboard: métricas de ocupación media, segmentación niños/adultos, plazas ofertadas/ocupadas/libres, turnos vacíos y sobrecargados. - Alta de turnos funcional y validada. - Unificación visual de botones principales en dashboard. - Mejoras visuales y de usabilidad en edición de turnos: orden y ancho de campos, resaltado de tarifas, alineación de columnas numéricas. - Eliminada opción de edición directa en la lista de turnos (solo desde detalle). - Pruebas unitarias completas y validadas. # ## 1.8.0 - 2025-09-19 - Creación y puesta en marcha de la web de gestión de la academia V. Lodeiro: plataforma de administración integral (usuarios, empresas, grupos, alumnos, inscripciones, pagos, sesiones). - Checklist de robustez y trazabilidad final. - Validado en producción y listo para nuevos ciclos. ## 1.10.0 - 2025-09-23 - Refactorización modular completa siguiendo DDD: separación de apps `usuarios`, `empresas`, `gestion`. - Reparación y documentación del historial de migraciones tras el cambio de modelo de usuario y estructura. - Fixes críticos en admin log y dependencias de migraciones (script `tools/repair_migration_history.py`). - Creación y validación de superusuario tras migración. - Checklist operativo y memoria viva actualizados en `CONTEXT.md` y `DEPLOY.md`. - Validación de tests, cobertura y despliegue seguro en cPanel. - Actualización de branding, documentación y estructura de carpetas. - Preparado para ciclo de mejoras y escalado futuro. ## 1.9.1 - 2025-09-22 - Estabilización final y validación de la operatividad en producción. - Intervenciones manuales para asegurar la continuidad del servicio. - Sistema estable y operativo tras incidencias y ajustes. ## 1.9.0 - 2025-09-21 ## 1.11.0 - 2025-09-25 - Aplicado el estilo corporativo de la portada en las páginas de alumnos, tarifas y turnos. - Redirección de enlaces y botones sin destino a la nueva página genérica "En construcción". - Creación y registro de la vista y template `en_construccion` en `gestionadmin`. - Validación completa del ciclo CI/CD: commit, push y despliegue automático sin intervención manual. - Documentación y checklist de despliegue actualizados para evitar bucles y errores futuros. - Validado en producción: cambios visuales y funcionales activos. - Listo para despliegue en producción. ## 1.7.0 - 2025-09-17 - Remitente flexible en /api/newsletter: permite nombre y email personalizado en el campo `from`. - Unificación de lógica de remitente en todos los endpoints y adaptador SMTP. - Autenticación robusta por API Key, configurable por entorno (`.env` y producción). - Tests unitarios con mock SMTP para evitar dependencias externas y asegurar fiabilidad en CI. - Documentación actualizada en README, SECURITY.md y OpenAPI. - Validado funcionamiento manual y automatizado en local y CI/CD. ## 1.5.0 - 2025-09-17 - Simplificación de la autenticación en /api/newsletter: solo requiere API Key por header, igual en local y producción. - Eliminada la validación del campo 'token' en el body. - Tests actualizados y cobertura SMTP al 100%. - Documentación y OpenAPI alineadas con el comportamiento real. - Validado funcionamiento manual y automatizado en local. ## 1.6.0 - 2025-09-17 - El endpoint /api/newsletter ahora soporta correos HTML: el campo `cuerpo` se envía como HTML y se visualiza correctamente en los clientes de correo. - Adaptador SMTP modificado para enviar el cuerpo como HTML. - Validado funcionamiento manual y automatizado en local y CI. ## 1.4.0 - 2025-09-16 - Depuración y log temporal para validar API Key en newsletter. - Aclaración y documentación de la autenticación por API Key (configurable por entorno). - Validado funcionamiento en local y preparado para despliegue en producción. ## 1.3.0 - 2025-09-16 - Integración de WhiteNoise para servir archivos estáticos en producción. - Corrección de configuración para que Swagger funcione igual en local y producción. - Añadido whitenoise a requirements.txt (guardar en UTF-8). - Validado funcionamiento en local y preparado para despliegue en producción. ## 1.2.0 - 2025-09-15 - Protección del endpoint /api/newsletter por API Key (X-Api-Key, configurable por entorno). - Integración de esquema de seguridad en Swagger: permite probar con "Authorize" y API Key. - Ejemplo de uso actualizado en README y docs/operations/LOCAL.md. - `.env` para desarrollo local con NEWSLETTER_API_KEY. ## 1.1.0 - 2025-09-15 - Endpoint newsletter para asesor (envío email con validación y token). - Limpieza total de tests legacy y cobertura real de funcionalidades activas. - Script automatizado para pruebas y cobertura en local. ## 1.0.0 - 2025-09-13 - Saludo inicial con fecha y hora UTC. # 1.24.11 - 2025-10-19 Admin UI: eliminar inscripción; robustez API Key en tests; documentación de errores habituales. - Admin (gestionadmin): - Nuevo flujo de eliminación de inscripciones desde el detalle de alumno: botón Eliminar → página de confirmación → borrado. - Regla de negocio respetada: si existen pagos asociados, se bloquea el borrado y se sugiere editar `fecha_fin` (redirige a editar con mensaje). - API/Permisos: - Tests de DELETE de inscripciones ahora toman la API Key activa desde el entorno, evitando 403 cuando otros tests reasignan `API_DEFAULT_KEY`. - DRF: se activa `SessionAuthentication` globalmente para que `request.user` esté disponible en endpoints que registran el usuario (p. ej., pagos), manteniendo la protección por `ApiKeyPermission`. - Documentación: - `ERRORES_HABITUALES.md`: añadidos los casos de 403 por clave cambiada en tests y `request.user` vacío sin autenticación de sesión. - Versión: `VERSION` → 1.24.11.