# annaluzserena/postgrados_frlp architecture

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

- Interactive diagram: https://gitdiagram.com/annaluzserena/postgrados_frlp
- Repository: https://github.com/annaluzserena/postgrados_frlp

## Overview

Sistema Postgrados centraliza la gestión académica de posgrado: aspirantes se preinscriben y consultan su estado; coordinadores gestionan legajos, documentos y cohortes; usuarios acceden mediante autenticación o enlaces; los módulos especializados cubren docencia y seguimiento de graduación. El backend muestreado implementa autenticación, acceso por enlace e inscripción; la interfaz también presenta dashboards y asistencia. El README documenta capacidades adicionales, pero sus flujos internos no se confirman en los extractos, así que no se infieren conexiones entre ellas.

Main entry points: [`frontend/src/App.tsx`](https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/App.tsx) (Rutas de la aplicación), [`backend/src/main.py`](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/main.py) (API FastAPI), [`backend/src/inscripcion/presentation/controller.py`](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/inscripcion/presentation/controller.py) (Controlador de legajos), [`backend/src/shared/auth/router.py`](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/shared/auth/router.py) (Rutas de autenticación)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Interfaz web"]
  node_webapp["Rutas de la aplicación<br/>[App.tsx]"]
  node_wizard["Wizard de inscripción"]
  node_status["Consulta de estado"]
  node_coord["Dashboard coordinador<br/>[Dashboard.tsx]"]
  node_risk["Riesgo académico"]
  node_semaphore["Recalculo de semáforo"]
  node_notifications["Alertas y notificaciones<br/>[Alerta.tsx]"]
end

subgraph group_enroll["Inscripción y legajos"]
  node_enrollapi["Controlador de legajos<br/>[controller.py]"]
  node_enrollservice["Casos de inscripción<br/>[service.py]"]
  node_enrollrepo["Repositorio PostgreSQL<br/>[pg_repository.py]"]
  node_enrollmodels["Modelos de inscripción<br/>[orm_models.py]"]
end

subgraph group_identity["Identidad y acceso"]
  node_linkapi["Controlador de enlaces<br/>[controller.py]"]
  node_linkservice["Servicio de acceso<br/>[service.py]"]
  node_linkrepo["Repositorio de acceso<br/>[repository.py]"]
  node_authapi["Rutas de autenticación<br/>[router.py]"]
  node_authmodels[("Usuarios y sesiones<br/>[orm_models.py]")]
end

subgraph group_academic["Módulos académicos"]
  node_teacher["Asistencia docente"]
  node_attendance["Estado de asistencia<br/>[useAsistencia.ts]"]
  node_academicmodels[("Carga académica<br/>[orm_models.py]")]
  node_documentmodels[("Gestión documental<br/>[orm_models.py]")]
  node_graduationmodels[("Seguimiento de graduación<br/>[orm_models.py]")]
end

subgraph group_infra["Persistencia compartida"]
  node_appserver["API FastAPI<br/>[main.py]"]
  node_dbsession["Sesión de base de datos<br/>[session.py]"]
end

node_actors(("Aspirante y personal"))

node_actors -->|"usa"| node_webapp
node_webapp -->|"enruta a"| node_wizard
node_webapp -->|"enruta a"| node_status
node_webapp -->|"enruta a"| node_coord
node_webapp -->|"enruta a"| node_teacher
node_teacher -.->|"usa"| node_attendance
node_semaphore -->|"lee datos"| node_risk
node_semaphore -.->|"prepara alertas"| node_notifications
node_appserver -->|"registra rutas"| node_authapi
node_appserver -->|"registra rutas"| node_linkapi
node_appserver -->|"registra rutas"| node_enrollapi
node_enrollapi -->|"invoca"| node_enrollservice
node_enrollservice -->|"consulta"| node_enrollrepo
node_enrollrepo -->|"persiste"| node_enrollmodels
node_linkapi -->|"invoca"| node_linkservice
node_linkservice -->|"consulta"| node_linkrepo
node_linkrepo -->|"lee legajos"| node_enrollmodels
node_authapi -->|"consulta"| node_authmodels
node_authapi -->|"obtiene sesión"| node_dbsession
node_enrollapi -.->|"obtiene sesión"| node_dbsession
node_academicmodels -.->|"relación interna"| node_graduationmodels
node_documentmodels -.->|"asocia legajos"| node_enrollmodels

click node_webapp "https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/App.tsx"
click node_wizard "https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/inscripcion-aspirante/pages/InscripcionWizard.tsx"
click node_status "https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/inscripcion-aspirante/pages/ConsultarEstado.tsx"
click node_coord "https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/dashboard-coordinador/pages/Dashboard.tsx"
click node_risk "https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/dashboard-coordinador/components/EstudiantesEnRiesgo.tsx"
click node_semaphore "https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/dashboard-coordinador/hooks/useSemaforoTareaProgramada.ts"
click node_notifications "https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/AlertasNotificaciones/pages/Alerta.tsx"
click node_teacher "https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/modulo-docente/pages/RegistroAsistencia.tsx"
click node_attendance "https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/modulo-docente/hooks/useAsistencia.ts"
click node_enrollapi "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/inscripcion/presentation/controller.py"
click node_enrollservice "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/inscripcion/application/service.py"
click node_enrollrepo "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/inscripcion/infrastructure/pg_repository.py"
click node_enrollmodels "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/inscripcion/infrastructure/orm_models.py"
click node_linkapi "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/acceso/controllers/controller.py"
click node_linkservice "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/acceso/services/service.py"
click node_linkrepo "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/acceso/repositories/repository.py"
click node_authapi "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/shared/auth/router.py"
click node_authmodels "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/shared/auth/orm_models.py"
click node_appserver "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/main.py"
click node_dbsession "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/shared/database/session.py"
click node_academicmodels "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/carga_academica/infrastructure/orm_models.py"
click node_documentmodels "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/gestion_documental/infrastructure/orm_models.py"
click node_graduationmodels "https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/seguimiento_graduacion/infrastructure/orm_models.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_webapp,node_wizard,node_status,node_coord,node_risk,node_semaphore,node_notifications toneBlue
class node_enrollapi,node_enrollservice,node_enrollrepo,node_enrollmodels toneAmber
class node_linkapi,node_linkservice,node_linkrepo,node_authapi,node_authmodels toneMint
class node_teacher,node_attendance,node_academicmodels,node_documentmodels,node_graduationmodels toneRose
class node_appserver,node_dbsession,node_actors toneIndigo
```

## Components

### Interfaz web

- [Rutas de la aplicación](https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Wizard de inscripción](https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/inscripcion-aspirante/pages/InscripcionWizard.tsx): `frontend/src/inscripcion-aspirante/pages/InscripcionWizard.tsx`
- [Consulta de estado](https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/inscripcion-aspirante/pages/ConsultarEstado.tsx): `frontend/src/inscripcion-aspirante/pages/ConsultarEstado.tsx`
- [Dashboard coordinador](https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/dashboard-coordinador/pages/Dashboard.tsx): `frontend/src/dashboard-coordinador/pages/Dashboard.tsx`
- [Riesgo académico](https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/dashboard-coordinador/components/EstudiantesEnRiesgo.tsx): `frontend/src/dashboard-coordinador/components/EstudiantesEnRiesgo.tsx`
- [Recalculo de semáforo](https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/dashboard-coordinador/hooks/useSemaforoTareaProgramada.ts): `frontend/src/dashboard-coordinador/hooks/useSemaforoTareaProgramada.ts`
- [Alertas y notificaciones](https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/AlertasNotificaciones/pages/Alerta.tsx): `frontend/src/AlertasNotificaciones/pages/Alerta.tsx`

### Inscripción y legajos

- [Controlador de legajos](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/inscripcion/presentation/controller.py): `backend/src/inscripcion/presentation/controller.py`
- [Casos de inscripción](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/inscripcion/application/service.py): `backend/src/inscripcion/application/service.py`
- [Repositorio PostgreSQL](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/inscripcion/infrastructure/pg_repository.py): `backend/src/inscripcion/infrastructure/pg_repository.py`
- [Modelos de inscripción](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/inscripcion/infrastructure/orm_models.py): `backend/src/inscripcion/infrastructure/orm_models.py`

### Identidad y acceso

- [Controlador de enlaces](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/acceso/controllers/controller.py): `backend/src/acceso/controllers/controller.py`
- [Servicio de acceso](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/acceso/services/service.py): `backend/src/acceso/services/service.py`
- [Repositorio de acceso](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/acceso/repositories/repository.py): `backend/src/acceso/repositories/repository.py`
- [Rutas de autenticación](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/shared/auth/router.py): `backend/src/shared/auth/router.py`
- [Usuarios y sesiones](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/shared/auth/orm_models.py): `backend/src/shared/auth/orm_models.py`

### Módulos académicos

- [Asistencia docente](https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/modulo-docente/pages/RegistroAsistencia.tsx): `frontend/src/modulo-docente/pages/RegistroAsistencia.tsx`
- [Estado de asistencia](https://github.com/annaluzserena/postgrados_frlp/blob/main/frontend/src/modulo-docente/hooks/useAsistencia.ts): `frontend/src/modulo-docente/hooks/useAsistencia.ts`
- [Carga académica](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/carga_academica/infrastructure/orm_models.py): `backend/src/carga_academica/infrastructure/orm_models.py`
- [Gestión documental](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/gestion_documental/infrastructure/orm_models.py): `backend/src/gestion_documental/infrastructure/orm_models.py`
- [Seguimiento de graduación](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/seguimiento_graduacion/infrastructure/orm_models.py): `backend/src/seguimiento_graduacion/infrastructure/orm_models.py`

### Persistencia compartida

- [API FastAPI](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/main.py): `backend/src/main.py`
- [Sesión de base de datos](https://github.com/annaluzserena/postgrados_frlp/blob/main/backend/src/shared/database/session.py): `backend/src/shared/database/session.py`

### Other components

- **Aspirante y personal**

## Connections

- Aspirante y personal → Rutas de la aplicación: usa (evidence: `README.md`)
- Rutas de la aplicación → Wizard de inscripción: enruta a (evidence: `frontend/src/App.tsx`)
- Rutas de la aplicación → Consulta de estado: enruta a (evidence: `frontend/src/App.tsx`)
- Rutas de la aplicación → Dashboard coordinador: enruta a (evidence: `frontend/src/App.tsx`)
- Rutas de la aplicación → Asistencia docente: enruta a (evidence: `frontend/src/App.tsx`)
- Asistencia docente → Estado de asistencia: usa
- Recalculo de semáforo → Riesgo académico: lee datos (evidence: `frontend/src/dashboard-coordinador/hooks/useSemaforoTareaProgramada.ts`)
- Recalculo de semáforo → Alertas y notificaciones: prepara alertas
- API FastAPI → Rutas de autenticación: registra rutas (evidence: `backend/src/main.py`)
- API FastAPI → Controlador de enlaces: registra rutas (evidence: `backend/src/main.py`)
- API FastAPI → Controlador de legajos: registra rutas (evidence: `backend/src/main.py`)
- Controlador de legajos → Casos de inscripción: invoca (evidence: `backend/src/inscripcion/presentation/controller.py`)
- Casos de inscripción → Repositorio PostgreSQL: consulta (evidence: `backend/src/inscripcion/application/service.py`)
- Repositorio PostgreSQL → Modelos de inscripción: persiste (evidence: `backend/src/inscripcion/infrastructure/pg_repository.py`)
- Controlador de enlaces → Servicio de acceso: invoca (evidence: `backend/src/acceso/controllers/controller.py`)
- Servicio de acceso → Repositorio de acceso: consulta (evidence: `backend/src/acceso/services/service.py`)
- Repositorio de acceso → Modelos de inscripción: lee legajos (evidence: `backend/src/acceso/repositories/repository.py`)
- Rutas de autenticación → Usuarios y sesiones: consulta (evidence: `backend/src/shared/auth/router.py`)
- Rutas de autenticación → Sesión de base de datos: obtiene sesión (evidence: `backend/src/shared/auth/router.py`)
- Controlador de legajos → Sesión de base de datos: obtiene sesión
- Carga académica → Seguimiento de graduación: relación interna
- Gestión documental → Modelos de inscripción: asocia legajos
