# rivasnico356-png/colorrectal-sim architecture

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

- Interactive diagram: https://gitdiagram.com/rivasnico356-png/colorrectal-sim
- Repository: https://github.com/rivasnico356-png/colorrectal-sim

## Overview

Colorrectal-Sim es una plataforma educativa para aprender a detectar e interpretar cáncer colorrectal mediante casos de imágenes médicas y un tutor de IA. El flujo documentado va desde el registro con autorizaciones y el inicio de sesión hasta la biblioteca de casos, la simulación por etapas, la explicación del tutor y el progreso que puede compartirse si la persona lo autoriza. El grafo combina rutas frontend y backend visibles con etapas y capacidades descritas en el README; estas últimas no deben tomarse como confirmación de que ya estén implementadas. No se muestrearon los proveedores ni el esquema SQL.

Main entry points: [`frontend/src/App.tsx`](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/frontend/src/App.tsx) (Aplicación web), [`backend/app/main.py`](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/main.py) (API FastAPI), [`backend/app/modules/usuarios/router.py`](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/usuarios/router.py) (Rutas de usuarios), [`backend/app/modules/casos/router.py`](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/casos/router.py) (Catálogo de casos API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Experiencia educativa"]
  node_app["Aplicación web<br/>[App.tsx]"]
  node_registration["Registro y autorizaciones<br/>[Registro.tsx]"]
  node_login["Inicio de sesión<br/>[Ingreso.tsx]"]
  node_catalog_ui["Catálogo de casos<br/>[Catalogo.tsx]"]
  node_api_client["Cliente API<br/>[api.ts]"]
end

subgraph group_access["Acceso y API"]
  node_api_entry["API FastAPI<br/>[main.py]"]
  node_user_routes["Rutas de usuarios<br/>[router.py]"]
  node_user_service["Registro e ingreso<br/>[service.py]"]
  node_user_schemas["Esquemas de usuario<br/>[schemas.py]"]
  node_auth_deps["Autenticación y roles<br/>[deps.py]"]
  node_security["Hash y tokens<br/>[security.py]"]
end

subgraph group_learning["Simulación y tutor"]
  node_case_routes["Catálogo de casos API<br/>[router.py]"]
  node_simulation["Simulación por etapas"]
  node_tutor_routes["Ruta del tutor<br/>[router.py]"]
  node_tutor_service["Servicio tutor<br/>[servicio.py]"]
  node_tutor_prompt["Prompt educativo<br/>[prompt.py]"]
  node_ai_providers["Proveedores IA<br/>[proveedores.py]"]
  node_progress["Progreso y niveles"]
end

subgraph group_platform["Datos y servicios"]
  node_settings["Configuración<br/>[config.py]"]
  node_db_access["Acceso a PostgreSQL<br/>[db.py]"]
  node_database[("Base de datos<br/>[01_schema.sql]")]
  node_export["Exportación seudonimizada<br/>[01_schema.sql]"]
end

node_learner(("Persona usuaria"))
node_professional(("Profesional de salud"))

node_learner -->|"usa"| node_app
node_app -->|"muestra"| node_login
node_app -->|"muestra"| node_registration
node_app -->|"muestra"| node_catalog_ui
node_registration -->|"envía registro"| node_api_client
node_login -->|"consulta"| node_api_client
node_catalog_ui -->|"consulta"| node_api_client
node_api_client -->|"solicita API"| node_api_entry
node_api_entry -->|"registra rutas"| node_user_routes
node_api_entry -->|"registra rutas"| node_case_routes
node_api_entry -->|"registra rutas"| node_tutor_routes
node_user_routes -->|"delega"| node_user_service
node_user_routes -->|"valida con"| node_user_schemas
node_user_service -->|"verifica y firma"| node_security
node_user_routes -->|"protege perfil"| node_auth_deps
node_case_routes -->|"exige usuario"| node_auth_deps
node_tutor_routes -->|"exige usuario"| node_auth_deps
node_login -->|"abre catálogo"| node_catalog_ui
node_catalog_ui -->|"inicia caso"| node_simulation
node_case_routes -->|"alimenta casos"| node_simulation
node_simulation -->|"consulta tutor"| node_tutor_routes
node_tutor_routes -->|"invoca"| node_tutor_service
node_tutor_service -->|"construye prompt"| node_tutor_prompt
node_tutor_service -->|"solicita explicación"| node_ai_providers
node_ai_providers -.->|"usa servicios IA"| node_professional
node_simulation -->|"actualiza avance"| node_progress
node_progress -->|"comparte con permiso"| node_professional
node_user_service -->|"lee y escribe"| node_database
node_case_routes -->|"consulta casos"| node_database
node_db_access -->|"lee conexión"| node_settings
node_db_access -->|"conecta"| node_database
node_progress -->|"permite exportación"| node_export

click node_app "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/frontend/src/App.tsx"
click node_registration "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/frontend/src/paginas/Registro.tsx"
click node_login "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/frontend/src/paginas/Ingreso.tsx"
click node_catalog_ui "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/frontend/src/paginas/Catalogo.tsx"
click node_api_client "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/frontend/src/api.ts"
click node_api_entry "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/main.py"
click node_user_routes "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/usuarios/router.py"
click node_user_service "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/usuarios/service.py"
click node_user_schemas "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/usuarios/schemas.py"
click node_auth_deps "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/core/deps.py"
click node_security "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/core/security.py"
click node_case_routes "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/casos/router.py"
click node_simulation "https://github.com/rivasnico356-png/colorrectal-sim/tree/develop/backend/app/modules/casos"
click node_tutor_routes "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/tutor/router.py"
click node_tutor_service "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/tutor/servicio.py"
click node_tutor_prompt "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/tutor/prompt.py"
click node_ai_providers "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/tutor/proveedores.py"
click node_progress "https://github.com/rivasnico356-png/colorrectal-sim/tree/develop/backend/app/modules/casos"
click node_settings "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/core/config.py"
click node_db_access "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/core/db.py"
click node_database "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/db/01_schema.sql"
click node_export "https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/db/01_schema.sql"

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_registration,node_login,node_catalog_ui,node_api_client toneBlue
class node_api_entry,node_user_routes,node_user_service,node_user_schemas,node_auth_deps,node_security toneAmber
class node_case_routes,node_simulation,node_tutor_routes,node_tutor_service,node_tutor_prompt,node_ai_providers,node_progress toneMint
class node_settings,node_db_access,node_database,node_export toneRose
class node_learner,node_professional toneIndigo
```

## Components

### Experiencia educativa

- [Aplicación web](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Registro y autorizaciones](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/frontend/src/paginas/Registro.tsx): `frontend/src/paginas/Registro.tsx`
- [Inicio de sesión](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/frontend/src/paginas/Ingreso.tsx): `frontend/src/paginas/Ingreso.tsx`
- [Catálogo de casos](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/frontend/src/paginas/Catalogo.tsx): `frontend/src/paginas/Catalogo.tsx`
- [Cliente API](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/frontend/src/api.ts): `frontend/src/api.ts`

### Acceso y API

- [API FastAPI](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/main.py): `backend/app/main.py`
- [Rutas de usuarios](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/usuarios/router.py): `backend/app/modules/usuarios/router.py`
- [Registro e ingreso](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/usuarios/service.py): `backend/app/modules/usuarios/service.py`
- [Esquemas de usuario](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/usuarios/schemas.py): `backend/app/modules/usuarios/schemas.py`
- [Autenticación y roles](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/core/deps.py): `backend/app/core/deps.py`
- [Hash y tokens](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/core/security.py): `backend/app/core/security.py`

### Simulación y tutor

- [Catálogo de casos API](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/casos/router.py): `backend/app/modules/casos/router.py`
- [Simulación por etapas](https://github.com/rivasnico356-png/colorrectal-sim/tree/develop/backend/app/modules/casos): `backend/app/modules/casos`
- [Ruta del tutor](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/tutor/router.py): `backend/app/modules/tutor/router.py`
- [Servicio tutor](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/tutor/servicio.py): `backend/app/modules/tutor/servicio.py`
- [Prompt educativo](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/tutor/prompt.py): `backend/app/modules/tutor/prompt.py`
- [Proveedores IA](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/modules/tutor/proveedores.py): `backend/app/modules/tutor/proveedores.py`
- [Progreso y niveles](https://github.com/rivasnico356-png/colorrectal-sim/tree/develop/backend/app/modules/casos): `backend/app/modules/casos`

### Datos y servicios

- [Configuración](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/core/config.py): `backend/app/core/config.py`
- [Acceso a PostgreSQL](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/backend/app/core/db.py): `backend/app/core/db.py`
- [Base de datos](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/db/01_schema.sql): `db/01_schema.sql`
- [Exportación seudonimizada](https://github.com/rivasnico356-png/colorrectal-sim/blob/develop/db/01_schema.sql): `db/01_schema.sql`

### Other components

- **Persona usuaria**
- **Profesional de salud**

## Connections

- Persona usuaria → Aplicación web: usa (evidence: `README.md`)
- Aplicación web → Inicio de sesión: muestra (evidence: `frontend/src/App.tsx`)
- Aplicación web → Registro y autorizaciones: muestra (evidence: `frontend/src/App.tsx`)
- Aplicación web → Catálogo de casos: muestra (evidence: `frontend/src/App.tsx`)
- Registro y autorizaciones → Cliente API: envía registro (evidence: `frontend/src/paginas/Registro.tsx`)
- Inicio de sesión → Cliente API: consulta (evidence: `frontend/src/paginas/Ingreso.tsx`)
- Catálogo de casos → Cliente API: consulta (evidence: `frontend/src/paginas/Catalogo.tsx`)
- Cliente API → API FastAPI: solicita API (evidence: `README.md`)
- API FastAPI → Rutas de usuarios: registra rutas (evidence: `backend/app/main.py`)
- API FastAPI → Catálogo de casos API: registra rutas (evidence: `backend/app/main.py`)
- API FastAPI → Ruta del tutor: registra rutas (evidence: `backend/app/main.py`)
- Rutas de usuarios → Registro e ingreso: delega (evidence: `backend/app/modules/usuarios/router.py`)
- Rutas de usuarios → Esquemas de usuario: valida con (evidence: `backend/app/modules/usuarios/router.py`)
- Registro e ingreso → Hash y tokens: verifica y firma (evidence: `backend/app/modules/usuarios/service.py`)
- Rutas de usuarios → Autenticación y roles: protege perfil (evidence: `backend/app/modules/usuarios/router.py`)
- Catálogo de casos API → Autenticación y roles: exige usuario (evidence: `backend/app/modules/casos/router.py`)
- Ruta del tutor → Autenticación y roles: exige usuario (evidence: `backend/app/modules/tutor/router.py`)
- Inicio de sesión → Catálogo de casos: abre catálogo (evidence: `frontend/src/App.tsx`)
- Catálogo de casos → Simulación por etapas: inicia caso (evidence: `README.md`)
- Catálogo de casos API → Simulación por etapas: alimenta casos (evidence: `README.md`)
- Simulación por etapas → Ruta del tutor: consulta tutor (evidence: `README.md`)
- Ruta del tutor → Servicio tutor: invoca (evidence: `backend/app/modules/tutor/router.py`)
- Servicio tutor → Prompt educativo: construye prompt (evidence: `backend/app/modules/tutor/servicio.py`)
- Servicio tutor → Proveedores IA: solicita explicación (evidence: `backend/app/modules/tutor/servicio.py`)
- Proveedores IA → Profesional de salud: usa servicios IA
- Simulación por etapas → Progreso y niveles: actualiza avance (evidence: `README.md`)
- Progreso y niveles → Profesional de salud: comparte con permiso (evidence: `README.md`)
- Registro e ingreso → Base de datos: lee y escribe (evidence: `backend/app/modules/usuarios/service.py`)
- Catálogo de casos API → Base de datos: consulta casos (evidence: `backend/app/modules/casos/router.py`)
- Acceso a PostgreSQL → Configuración: lee conexión (evidence: `backend/app/core/db.py`)
- Acceso a PostgreSQL → Base de datos: conecta (evidence: `README.md`)
- Progreso y niveles → Exportación seudonimizada: permite exportación (evidence: `README.md`)
