# chava-27/horarios-progweb architecture

> Architecture diagram of the GitHub repository chava-27/horarios-progweb, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/chava-27/horarios-progweb
- Repository: https://github.com/chava-27/horarios-progweb

## Overview

SIGPACH Web gestiona la pre-planeación semestral: el jefe carga la oferta y la disponibilidad docente; el motor genera propuestas que se revisan, asignan y ajustan antes de aprobar la planeación y producir reportes. Los docentes también capturan su disponibilidad en línea. El mapa conserva las capas MVC y las capacidades principales descritas en el README; las relaciones internas se limitan a llamadas documentadas o referencias del índice, pues buena parte de los controladores y servicios no fue muestreada.

Main entry points: [`app/servicios`](https://github.com/chava-27/horarios-progweb/tree/main/app/servicios) (Servicios de negocio), [`app/vistas/publico/js/pantallas`](https://github.com/chava-27/horarios-progweb/tree/main/app/vistas/publico/js/pantallas) (Pantallas y flujo), [`app/motor_horarios/fachada.py`](https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/fachada.py) (Fachada del motor), [`app/motor_horarios/nucleo/acomodador.py`](https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/nucleo/acomodador.py) (Acomodación horaria)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Interfaz web"]
  node_browser["Pantallas y flujo"]
  node_api["Cliente API<br/>[api.js]"]
  node_ui["Interfaz común<br/>[interfaz.js]"]
end

subgraph group_app["Aplicación y datos"]
  node_front["Aplicación HTTP<br/>[principal.py]"]
  node_controllers["Controladores"]
  node_services["Servicios de negocio"]
  node_availability["Disponibilidad"]
  node_planning["Planeación"]
  node_models["Modelos de dominio"]
  node_queries["Consultas comunes<br/>[consultas.py]"]
  node_dbaccess["Conexión SQL<br/>[base_datos.py]"]
  node_database[("Base de datos")]
end

subgraph group_engine["Motor de horarios"]
  node_import["Ingesta de formularios"]
  node_enginefacade["Fachada del motor<br/>[fachada.py]"]
  node_engineconfig["Reglas y configuración<br/>[config.py]"]
  node_scheduler["Acomodación horaria<br/>[acomodador.py]"]
  node_reassign["Reasignación<br/>[reasignador.py]"]
  node_stats["Estadísticas<br/>[estadisticas.py]"]
  node_views["Vistas y PDF<br/>[horario_pdf.py]"]
end

subgraph group_crosscut["Seguridad y soporte"]
  node_security["Protección HTTP<br/>[proteccion.py]"]
  node_auth["Autenticación"]
  node_audit["Auditoría<br/>[auditoria.py]"]
  node_constants["Constantes de negocio<br/>[constantes.py]"]
  node_errors["Errores de negocio<br/>[errores.py]"]
  node_utils["Utilidades<br/>[utilidades.py]"]
end

node_chief(("Jefe de División"))
node_teacher(("Docente"))

node_chief -->|"gestiona"| node_browser
node_teacher -->|"captura disponibilidad"| node_browser
node_browser -->|"solicita datos"| node_api
node_browser -->|"usa componentes"| node_ui
node_api -->|"envía JSON"| node_front
node_front -->|"registra rutas"| node_controllers
node_front -->|"instala protección"| node_security
node_controllers -->|"invoca"| node_services
node_services -->|"usa modelos"| node_models
node_services -->|"usa motor"| node_enginefacade
node_availability -->|"previsualiza formularios"| node_import
node_import -->|"lee reglas"| node_engineconfig
node_import -.->|"carga disponibilidad"| node_enginefacade
node_enginefacade -.->|"coordina horarios"| node_scheduler
node_scheduler -->|"lee parámetros"| node_engineconfig
node_reassign -->|"reutiliza acomodador"| node_scheduler
node_stats -->|"analiza horarios"| node_scheduler
node_views -->|"usa estadísticas"| node_stats
node_views -.->|"usa vistas"| node_enginefacade
node_models -->|"consulta datos"| node_queries
node_queries -->|"ejecuta SQL"| node_dbaccess
node_dbaccess -->|"lee y escribe"| node_database
node_security -->|"registra rechazos"| node_audit
node_controllers -->|"gestiona sesión"| node_auth
node_auth -->|"consulta usuarios"| node_models
node_services -->|"lanza errores"| node_errors
node_availability -->|"usa reglas"| node_constants
node_auth -->|"normaliza entradas"| node_utils

click node_browser "https://github.com/chava-27/horarios-progweb/tree/main/app/vistas/publico/js/pantallas"
click node_api "https://github.com/chava-27/horarios-progweb/blob/main/app/vistas/publico/js/nucleo/api.js"
click node_ui "https://github.com/chava-27/horarios-progweb/blob/main/app/vistas/publico/js/nucleo/interfaz.js"
click node_front "https://github.com/chava-27/horarios-progweb/blob/main/app/principal.py"
click node_controllers "https://github.com/chava-27/horarios-progweb/tree/main/app/controladores"
click node_services "https://github.com/chava-27/horarios-progweb/tree/main/app/servicios"
click node_availability "https://github.com/chava-27/horarios-progweb/blob/main/app/servicios/servicio_disponibilidad.py"
click node_planning "https://github.com/chava-27/horarios-progweb/blob/main/app/servicios/servicio_planeacion.py"
click node_models "https://github.com/chava-27/horarios-progweb/tree/main/app/modelos"
click node_queries "https://github.com/chava-27/horarios-progweb/blob/main/app/nucleo/consultas.py"
click node_dbaccess "https://github.com/chava-27/horarios-progweb/blob/main/app/nucleo/base_datos.py"
click node_import "https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/funcionalidades/ingesta_docentes.py"
click node_enginefacade "https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/fachada.py"
click node_engineconfig "https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/config.py"
click node_scheduler "https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/nucleo/acomodador.py"
click node_reassign "https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/nucleo/reasignador.py"
click node_stats "https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/estadisticas/estadisticas.py"
click node_views "https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/vistas/horario_pdf.py"
click node_security "https://github.com/chava-27/horarios-progweb/blob/main/app/seguridad/proteccion.py"
click node_auth "https://github.com/chava-27/horarios-progweb/blob/main/app/servicios/servicio_autenticacion.py"
click node_audit "https://github.com/chava-27/horarios-progweb/blob/main/app/seguridad/auditoria.py"
click node_constants "https://github.com/chava-27/horarios-progweb/blob/main/app/nucleo/constantes.py"
click node_errors "https://github.com/chava-27/horarios-progweb/blob/main/app/nucleo/errores.py"
click node_utils "https://github.com/chava-27/horarios-progweb/blob/main/app/nucleo/utilidades.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_browser,node_api,node_ui toneBlue
class node_front,node_controllers,node_services,node_availability,node_planning,node_models,node_queries,node_dbaccess,node_database toneAmber
class node_import,node_enginefacade,node_engineconfig,node_scheduler,node_reassign,node_stats,node_views toneMint
class node_security,node_auth,node_audit,node_constants,node_errors,node_utils toneRose
class node_chief,node_teacher toneIndigo
```

## Components

### Interfaz web

- [Pantallas y flujo](https://github.com/chava-27/horarios-progweb/tree/main/app/vistas/publico/js/pantallas): `app/vistas/publico/js/pantallas`
- [Cliente API](https://github.com/chava-27/horarios-progweb/blob/main/app/vistas/publico/js/nucleo/api.js): `app/vistas/publico/js/nucleo/api.js`
- [Interfaz común](https://github.com/chava-27/horarios-progweb/blob/main/app/vistas/publico/js/nucleo/interfaz.js): `app/vistas/publico/js/nucleo/interfaz.js`

### Aplicación y datos

- [Aplicación HTTP](https://github.com/chava-27/horarios-progweb/blob/main/app/principal.py): `app/principal.py`
- [Controladores](https://github.com/chava-27/horarios-progweb/tree/main/app/controladores): `app/controladores`
- [Servicios de negocio](https://github.com/chava-27/horarios-progweb/tree/main/app/servicios): `app/servicios`
- [Disponibilidad](https://github.com/chava-27/horarios-progweb/blob/main/app/servicios/servicio_disponibilidad.py): `app/servicios/servicio_disponibilidad.py`
- [Planeación](https://github.com/chava-27/horarios-progweb/blob/main/app/servicios/servicio_planeacion.py): `app/servicios/servicio_planeacion.py`
- [Modelos de dominio](https://github.com/chava-27/horarios-progweb/tree/main/app/modelos): `app/modelos`
- [Consultas comunes](https://github.com/chava-27/horarios-progweb/blob/main/app/nucleo/consultas.py): `app/nucleo/consultas.py`
- [Conexión SQL](https://github.com/chava-27/horarios-progweb/blob/main/app/nucleo/base_datos.py): `app/nucleo/base_datos.py`
- **Base de datos**

### Motor de horarios

- [Ingesta de formularios](https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/funcionalidades/ingesta_docentes.py): `app/motor_horarios/funcionalidades/ingesta_docentes.py`
- [Fachada del motor](https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/fachada.py): `app/motor_horarios/fachada.py`
- [Reglas y configuración](https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/config.py): `app/motor_horarios/config.py`
- [Acomodación horaria](https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/nucleo/acomodador.py): `app/motor_horarios/nucleo/acomodador.py`
- [Reasignación](https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/nucleo/reasignador.py): `app/motor_horarios/nucleo/reasignador.py`
- [Estadísticas](https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/estadisticas/estadisticas.py): `app/motor_horarios/estadisticas/estadisticas.py`
- [Vistas y PDF](https://github.com/chava-27/horarios-progweb/blob/main/app/motor_horarios/vistas/horario_pdf.py): `app/motor_horarios/vistas/horario_pdf.py`

### Seguridad y soporte

- [Protección HTTP](https://github.com/chava-27/horarios-progweb/blob/main/app/seguridad/proteccion.py): `app/seguridad/proteccion.py`
- [Autenticación](https://github.com/chava-27/horarios-progweb/blob/main/app/servicios/servicio_autenticacion.py): `app/servicios/servicio_autenticacion.py`
- [Auditoría](https://github.com/chava-27/horarios-progweb/blob/main/app/seguridad/auditoria.py): `app/seguridad/auditoria.py`
- [Constantes de negocio](https://github.com/chava-27/horarios-progweb/blob/main/app/nucleo/constantes.py): `app/nucleo/constantes.py`
- [Errores de negocio](https://github.com/chava-27/horarios-progweb/blob/main/app/nucleo/errores.py): `app/nucleo/errores.py`
- [Utilidades](https://github.com/chava-27/horarios-progweb/blob/main/app/nucleo/utilidades.py): `app/nucleo/utilidades.py`

### Other components

- **Jefe de División**
- **Docente**

## Connections

- Jefe de División → Pantallas y flujo: gestiona (evidence: `README.md`)
- Docente → Pantallas y flujo: captura disponibilidad (evidence: `README.md`)
- Pantallas y flujo → Cliente API: solicita datos (evidence: `README.md`)
- Pantallas y flujo → Interfaz común: usa componentes (evidence: `app/vistas/publico/js/pantallas/planeacion.js`)
- Cliente API → Aplicación HTTP: envía JSON (evidence: `README.md`)
- Aplicación HTTP → Controladores: registra rutas (evidence: `app/principal.py`)
- Aplicación HTTP → Protección HTTP: instala protección (evidence: `app/principal.py`)
- Controladores → Servicios de negocio: invoca (evidence: `app/controladores/controlador_periodo.py`)
- Servicios de negocio → Modelos de dominio: usa modelos (evidence: `app/servicios/servicio_disponibilidad.py`)
- Servicios de negocio → Fachada del motor: usa motor (evidence: `app/servicios/servicio_planeacion.py`)
- Disponibilidad → Ingesta de formularios: previsualiza formularios (evidence: `app/servicios/servicio_disponibilidad.py`)
- Ingesta de formularios → Reglas y configuración: lee reglas (evidence: `app/motor_horarios/funcionalidades/ingesta_docentes.py`)
- Ingesta de formularios → Fachada del motor: carga disponibilidad (evidence: `app/motor_horarios/fachada.py`)
- Fachada del motor → Acomodación horaria: coordina horarios
- Acomodación horaria → Reglas y configuración: lee parámetros (evidence: `app/motor_horarios/nucleo/acomodador.py`)
- Reasignación → Acomodación horaria: reutiliza acomodador (evidence: `app/motor_horarios/nucleo/reasignador.py`)
- Estadísticas → Acomodación horaria: analiza horarios (evidence: `app/motor_horarios/estadisticas/estadisticas.py`)
- Vistas y PDF → Estadísticas: usa estadísticas (evidence: `app/motor_horarios/vistas/horario_pdf.py`)
- Vistas y PDF → Fachada del motor: usa vistas
- Modelos de dominio → Consultas comunes: consulta datos (evidence: `app/modelos/modelo_catalogo.py`)
- Consultas comunes → Conexión SQL: ejecuta SQL (evidence: `app/nucleo/consultas.py`)
- Conexión SQL → Base de datos: lee y escribe (evidence: `README.md`)
- Protección HTTP → Auditoría: registra rechazos (evidence: `app/seguridad/proteccion.py`)
- Controladores → Autenticación: gestiona sesión (evidence: `app/controladores/controlador_sesion.py`)
- Autenticación → Modelos de dominio: consulta usuarios (evidence: `app/servicios/servicio_autenticacion.py`)
- Servicios de negocio → Errores de negocio: lanza errores (evidence: `app/servicios/servicio_disponibilidad.py`)
- Disponibilidad → Constantes de negocio: usa reglas (evidence: `app/servicios/servicio_disponibilidad.py`)
- Autenticación → Utilidades: normaliza entradas (evidence: `app/servicios/servicio_autenticacion.py`)
