# oesiledivad/eif206-programacion3-proyecto01 architecture

> Architecture diagram of the GitHub repository oesiledivad/eif206-programacion3-proyecto01, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/oesiledivad/eif206-programacion3-proyecto01
- Repository: https://github.com/oesiledivad/eif206-programacion3-proyecto01

## Overview

Aplicación de escritorio JavaFX para reservar y administrar recursos institucionales. El flujo principal es iniciar sesión, consultar disponibilidad y registrar o cancelar reservas; el README también documenta mantenimiento de catálogos, calendarización, estadísticas, exportación PDF y asistencia LLM. El mapa combina relaciones visibles en el índice y extractos con capacidades descritas en el README; no se inspeccionó el código de cada subsistema.

Main entry points: [`src/main/java/una/proyecto/controller/ReservasController.java`](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/ReservasController.java) (Gestión de reservas), [`src/main/java/una/proyecto/utils/GeneradorPDFS.java`](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/utils/GeneradorPDFS.java) (Generación PDF), [`src/main/java/una/proyecto/controller/CalendarizacionController.java`](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/CalendarizacionController.java) (Calendarización), [`src/main/java/una/proyecto/controller/LoginController.java`](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/LoginController.java) (Inicio de sesión)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Interfaz de usuario"]
  node_app["Aplicación JavaFX<br/>[MainApp.java]"]
  node_login["Inicio de sesión"]
  node_mainview["Navegación principal"]
  node_reservations_ui["Gestión de reservas"]
  node_resources_ui["Recursos y categorías"]
  node_staff_ui["Funcionarios"]
  node_calendar_ui["Calendarización"]
  node_weekly_ui["Programación semanal"]
  node_stats_ui["Estadísticas"]
end

subgraph group_services["Servicios de aplicación"]
  node_auth["Autenticación<br/>[AuthService.java]"]
  node_reservation_svc["Servicio de reservas"]
  node_resource_svc["Servicio de recursos"]
  node_category_svc["Servicio de categorías"]
  node_staff_svc["Servicio de funcionarios"]
  node_calendar_svc["Servicio de calendarización"]
  node_stats_svc["Servicio de estadísticas"]
end

subgraph group_business["Lógica de negocio"]
  node_reservation_logic["Reglas de reserva<br/>[ReservaLogic.java]"]
  node_crud_logic["Reglas de catálogo"]
  node_stats_logic["Cálculo estadístico"]
  node_session["Sesión activa"]
end

subgraph group_persistence["Persistencia y dominio"]
  node_xml_data["Acceso a datos XML"]
  node_xml_store[("Archivos XML")]
  node_domain["Entidades de dominio"]
end

subgraph group_reporting["Asistencia y reportes"]
  node_ai["Generación asistida<br/>[aiGenerator.java]"]
  node_pdf["Generación PDF<br/>[GeneradorPDFS.java]"]
  node_pdf_report["Datos de reporte<br/>[ReportePDF.java]"]
  node_pdf_table["Tabla de reporte<br/>[TablePDF.java]"]
end

node_operator(("Administrador o funcionario"))
node_groq["API Groq"]

node_operator -->|"inicia"| node_app
node_app -->|"abre vista"| node_login
node_login -->|"autentica"| node_auth
node_login -.->|"establece sesión"| node_session
node_login -->|"navega"| node_mainview
node_mainview -->|"consulta sesión"| node_session
node_mainview -.->|"abre funciones"| node_reservations_ui
node_reservations_ui -->|"gestiona reservas"| node_reservation_svc
node_reservations_ui -->|"consulta recursos"| node_resource_svc
node_reservations_ui -->|"consulta categorías"| node_category_svc
node_reservations_ui -->|"consulta funcionarios"| node_staff_svc
node_reservations_ui -->|"solicita extracción"| node_ai
node_ai -.->|"consulta modelo"| node_groq
node_resources_ui -->|"mantiene categorías"| node_category_svc
node_resources_ui -->|"mantiene recursos"| node_resource_svc
node_staff_ui -->|"mantiene funcionarios"| node_staff_svc
node_calendar_ui -->|"consulta categorías"| node_category_svc
node_calendar_ui -->|"consulta recursos"| node_resource_svc
node_calendar_ui -->|"consulta reservas"| node_reservation_svc
node_weekly_ui -->|"solicita agenda"| node_calendar_svc
node_weekly_ui -->|"consulta funcionarios"| node_staff_svc
node_stats_ui -->|"solicita estadísticas"| node_stats_svc
node_reservation_svc -->|"delega operaciones"| node_reservation_logic
node_resource_svc -->|"delega operaciones"| node_crud_logic
node_category_svc -->|"delega operaciones"| node_crud_logic
node_staff_svc -->|"delega operaciones"| node_crud_logic
node_calendar_svc -->|"consulta reservas"| node_reservation_svc
node_stats_svc -->|"delega cálculos"| node_stats_logic
node_reservation_logic -->|"persiste reservas"| node_xml_data
node_crud_logic -.->|"accede a datos"| node_xml_data
node_xml_data -->|"lee y escribe"| node_xml_store
node_reservation_logic -->|"opera entidades"| node_domain
node_stats_logic -->|"produce estadísticas"| node_domain
node_calendar_ui -->|"exporta vista"| node_pdf
node_weekly_ui -->|"exporta agenda"| node_pdf
node_stats_ui -->|"exporta reporte"| node_pdf
node_pdf -->|"renderiza reporte"| node_pdf_report
node_pdf -->|"construye tablas"| node_pdf_table

click node_app "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/app/MainApp.java"
click node_login "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/LoginController.java"
click node_mainview "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/MainViewController.java"
click node_reservations_ui "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/ReservasController.java"
click node_resources_ui "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/RecursosController.java"
click node_staff_ui "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/FuncionariosAdministradorController.java"
click node_calendar_ui "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/CalendarizacionController.java"
click node_weekly_ui "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/CalendarizacionActividadesController.java"
click node_stats_ui "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/EstadisticasController.java"
click node_auth "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/AuthService.java"
click node_reservation_svc "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/ReservaService.java"
click node_resource_svc "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/RecursoService.java"
click node_category_svc "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/CategoriaService.java"
click node_staff_svc "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/FuncionarioService.java"
click node_calendar_svc "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/CalendarizacionService.java"
click node_stats_svc "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/EstadisticasService.java"
click node_reservation_logic "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/logic/ReservaLogic.java"
click node_crud_logic "https://github.com/oesiledivad/eif206-programacion3-proyecto01/tree/main/src/main/java/una/proyecto/logic"
click node_stats_logic "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/logic/EstadisticasLogic.java"
click node_session "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/utils/SessionManager.java"
click node_xml_data "https://github.com/oesiledivad/eif206-programacion3-proyecto01/tree/main/src/main/java/una/proyecto/datos"
click node_domain "https://github.com/oesiledivad/eif206-programacion3-proyecto01/tree/main/src/main/java/una/proyecto/model"
click node_ai "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/logic/ia/aiGenerator.java"
click node_pdf "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/utils/GeneradorPDFS.java"
click node_pdf_report "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/utils/ReportePDF.java"
click node_pdf_table "https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/utils/TablePDF.java"

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_app,node_login,node_mainview,node_reservations_ui,node_resources_ui,node_staff_ui,node_calendar_ui,node_weekly_ui,node_stats_ui toneBlue
class node_auth,node_reservation_svc,node_resource_svc,node_category_svc,node_staff_svc,node_calendar_svc,node_stats_svc toneAmber
class node_reservation_logic,node_crud_logic,node_stats_logic,node_session,node_groq toneMint
class node_xml_data,node_xml_store,node_domain toneRose
class node_ai,node_pdf,node_pdf_report,node_pdf_table,node_operator toneIndigo
```

## Components

### Interfaz de usuario

- [Aplicación JavaFX](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/app/MainApp.java): `src/main/java/una/proyecto/app/MainApp.java`
- [Inicio de sesión](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/LoginController.java): `src/main/java/una/proyecto/controller/LoginController.java`
- [Navegación principal](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/MainViewController.java): `src/main/java/una/proyecto/controller/MainViewController.java`
- [Gestión de reservas](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/ReservasController.java): `src/main/java/una/proyecto/controller/ReservasController.java`
- [Recursos y categorías](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/RecursosController.java): `src/main/java/una/proyecto/controller/RecursosController.java`
- [Funcionarios](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/FuncionariosAdministradorController.java): `src/main/java/una/proyecto/controller/FuncionariosAdministradorController.java`
- [Calendarización](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/CalendarizacionController.java): `src/main/java/una/proyecto/controller/CalendarizacionController.java`
- [Programación semanal](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/CalendarizacionActividadesController.java): `src/main/java/una/proyecto/controller/CalendarizacionActividadesController.java`
- [Estadísticas](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/controller/EstadisticasController.java): `src/main/java/una/proyecto/controller/EstadisticasController.java`

### Servicios de aplicación

- [Autenticación](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/AuthService.java): `src/main/java/una/proyecto/service/AuthService.java`
- [Servicio de reservas](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/ReservaService.java): `src/main/java/una/proyecto/service/ReservaService.java`
- [Servicio de recursos](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/RecursoService.java): `src/main/java/una/proyecto/service/RecursoService.java`
- [Servicio de categorías](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/CategoriaService.java): `src/main/java/una/proyecto/service/CategoriaService.java`
- [Servicio de funcionarios](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/FuncionarioService.java): `src/main/java/una/proyecto/service/FuncionarioService.java`
- [Servicio de calendarización](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/CalendarizacionService.java): `src/main/java/una/proyecto/service/CalendarizacionService.java`
- [Servicio de estadísticas](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/service/EstadisticasService.java): `src/main/java/una/proyecto/service/EstadisticasService.java`

### Lógica de negocio

- [Reglas de reserva](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/logic/ReservaLogic.java): `src/main/java/una/proyecto/logic/ReservaLogic.java`
- [Reglas de catálogo](https://github.com/oesiledivad/eif206-programacion3-proyecto01/tree/main/src/main/java/una/proyecto/logic): `src/main/java/una/proyecto/logic`
- [Cálculo estadístico](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/logic/EstadisticasLogic.java): `src/main/java/una/proyecto/logic/EstadisticasLogic.java`
- [Sesión activa](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/utils/SessionManager.java): `src/main/java/una/proyecto/utils/SessionManager.java`

### Persistencia y dominio

- [Acceso a datos XML](https://github.com/oesiledivad/eif206-programacion3-proyecto01/tree/main/src/main/java/una/proyecto/datos): `src/main/java/una/proyecto/datos`
- **Archivos XML**
- [Entidades de dominio](https://github.com/oesiledivad/eif206-programacion3-proyecto01/tree/main/src/main/java/una/proyecto/model): `src/main/java/una/proyecto/model`

### Asistencia y reportes

- [Generación asistida](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/logic/ia/aiGenerator.java): `src/main/java/una/proyecto/logic/ia/aiGenerator.java`
- [Generación PDF](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/utils/GeneradorPDFS.java): `src/main/java/una/proyecto/utils/GeneradorPDFS.java`
- [Datos de reporte](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/utils/ReportePDF.java): `src/main/java/una/proyecto/utils/ReportePDF.java`
- [Tabla de reporte](https://github.com/oesiledivad/eif206-programacion3-proyecto01/blob/main/src/main/java/una/proyecto/utils/TablePDF.java): `src/main/java/una/proyecto/utils/TablePDF.java`

### Other components

- **Administrador o funcionario**
- **API Groq**

## Connections

- Administrador o funcionario → Aplicación JavaFX: inicia (evidence: `README.md`)
- Aplicación JavaFX → Inicio de sesión: abre vista (evidence: `src/main/java/una/proyecto/app/MainApp.java`)
- Inicio de sesión → Autenticación: autentica (evidence: `src/main/java/una/proyecto/controller/LoginController.java`)
- Inicio de sesión → Sesión activa: establece sesión
- Inicio de sesión → Navegación principal: navega (evidence: `src/main/java/una/proyecto/controller/LoginController.java`)
- Navegación principal → Sesión activa: consulta sesión (evidence: `src/main/java/una/proyecto/controller/MainViewController.java`)
- Navegación principal → Gestión de reservas: abre funciones
- Gestión de reservas → Servicio de reservas: gestiona reservas (evidence: `src/main/java/una/proyecto/controller/ReservasController.java`)
- Gestión de reservas → Servicio de recursos: consulta recursos (evidence: `src/main/java/una/proyecto/controller/ReservasController.java`)
- Gestión de reservas → Servicio de categorías: consulta categorías (evidence: `src/main/java/una/proyecto/controller/ReservasController.java`)
- Gestión de reservas → Servicio de funcionarios: consulta funcionarios (evidence: `src/main/java/una/proyecto/controller/ReservasController.java`)
- Gestión de reservas → Generación asistida: solicita extracción (evidence: `src/main/java/una/proyecto/controller/ReservasController.java`)
- Generación asistida → API Groq: consulta modelo (evidence: `README.md`)
- Recursos y categorías → Servicio de categorías: mantiene categorías (evidence: `src/main/java/una/proyecto/controller/RecursosController.java`)
- Recursos y categorías → Servicio de recursos: mantiene recursos (evidence: `src/main/java/una/proyecto/controller/RecursosController.java`)
- Funcionarios → Servicio de funcionarios: mantiene funcionarios (evidence: `src/main/java/una/proyecto/controller/FuncionariosAdministradorController.java`)
- Calendarización → Servicio de categorías: consulta categorías (evidence: `src/main/java/una/proyecto/controller/CalendarizacionController.java`)
- Calendarización → Servicio de recursos: consulta recursos (evidence: `src/main/java/una/proyecto/controller/CalendarizacionController.java`)
- Calendarización → Servicio de reservas: consulta reservas (evidence: `src/main/java/una/proyecto/controller/CalendarizacionController.java`)
- Programación semanal → Servicio de calendarización: solicita agenda (evidence: `src/main/java/una/proyecto/controller/CalendarizacionActividadesController.java`)
- Programación semanal → Servicio de funcionarios: consulta funcionarios (evidence: `src/main/java/una/proyecto/controller/CalendarizacionActividadesController.java`)
- Estadísticas → Servicio de estadísticas: solicita estadísticas (evidence: `src/main/java/una/proyecto/controller/EstadisticasController.java`)
- Servicio de reservas → Reglas de reserva: delega operaciones (evidence: `src/main/java/una/proyecto/service/ReservaService.java`)
- Servicio de recursos → Reglas de catálogo: delega operaciones (evidence: `src/main/java/una/proyecto/service/RecursoService.java`)
- Servicio de categorías → Reglas de catálogo: delega operaciones (evidence: `src/main/java/una/proyecto/service/CategoriaService.java`)
- Servicio de funcionarios → Reglas de catálogo: delega operaciones (evidence: `src/main/java/una/proyecto/service/FuncionarioService.java`)
- Servicio de calendarización → Servicio de reservas: consulta reservas (evidence: `src/main/java/una/proyecto/service/CalendarizacionService.java`)
- Servicio de estadísticas → Cálculo estadístico: delega cálculos (evidence: `src/main/java/una/proyecto/service/EstadisticasService.java`)
- Reglas de reserva → Acceso a datos XML: persiste reservas (evidence: `src/main/java/una/proyecto/logic/ReservaLogic.java`)
- Reglas de catálogo → Acceso a datos XML: accede a datos (evidence: `src/main/java/una/proyecto/logic/ReservaLogic.java`)
- Acceso a datos XML → Archivos XML: lee y escribe
- Reglas de reserva → Entidades de dominio: opera entidades (evidence: `src/main/java/una/proyecto/logic/ReservaLogic.java`)
- Cálculo estadístico → Entidades de dominio: produce estadísticas (evidence: `src/main/java/una/proyecto/service/EstadisticasService.java`)
- Calendarización → Generación PDF: exporta vista (evidence: `src/main/java/una/proyecto/controller/CalendarizacionController.java`)
- Programación semanal → Generación PDF: exporta agenda (evidence: `src/main/java/una/proyecto/controller/CalendarizacionActividadesController.java`)
- Estadísticas → Generación PDF: exporta reporte (evidence: `src/main/java/una/proyecto/controller/EstadisticasController.java`)
- Generación PDF → Datos de reporte: renderiza reporte (evidence: `src/main/java/una/proyecto/utils/GeneradorPDFS.java`)
- Generación PDF → Tabla de reporte: construye tablas (evidence: `src/main/java/una/proyecto/utils/GeneradorPDFS.java`)
