# yimis-source/prostaai architecture

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

- Interactive diagram: https://gitdiagram.com/yimis-source/prostaai
- Repository: https://github.com/yimis-source/prostaai

## Overview

Prosta-AI es una aplicación web académica para cargar estudios prostáticos desidentificados, segmentarlos en 3D y explorar la ROI y métricas opcionales. El recorrido principal va desde las pantallas de carga y la API de admisión hasta un trabajo persistido, tomado por el worker y procesado por el pipeline; el resultado queda en almacenamiento privado y repositorios para consulta y visualización. Se incluyen también el asistente opcional y la autenticación. Las relaciones se limitan a llamadas documentadas en README o visibles en los extractos; no se inspeccionaron los módulos no muestreados.

Main entry points: [`backend/prosta_ai/pipeline/base.py`](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/base.py) (Pipeline por etapas), [`backend/prosta_ai/processing/service.py`](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/processing/service.py) (Servicio de proceso), [`frontend/src/api/cliente.js`](https://github.com/yimis-source/prostaai/blob/main/frontend/src/api/cliente.js) (Cliente HTTP), [`backend/prosta_ai/api/app.py`](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/api/app.py) (Aplicación API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_front["Cliente web"]
  node_app["Rutas privadas<br/>[App.jsx]"]
  node_auth["Sesión<br/>[AuthContext.jsx]"]
  node_http["Cliente HTTP<br/>[cliente.js]"]
  node_upload["Carga estudio<br/>[Cargar.jsx]"]
  node_studies_ui["Mis estudios<br/>[MisEstudios.jsx]"]
  node_processing_ui["Estado trabajo<br/>[Procesamiento.jsx]"]
  node_roi_ui["Visor ROI<br/>[VisualizarRoi.jsx]"]
  node_assistant_ui["Orientación<br/>[Asistente.jsx]"]
end

subgraph group_api["API y admisión"]
  node_api_app["Aplicación API<br/>[app.py]"]
  node_study_api["Admisión y estudios<br/>[estudios.py]"]
  node_job_api["Trabajos<br/>[trabajos.py]"]
  node_render["Representación<br/>[rendering.py]"]
end

subgraph group_processing["Procesamiento"]
  node_worker["Worker<br/>[worker.py]"]
  node_service["Servicio de proceso<br/>[service.py]"]
  node_pipeline["Pipeline por etapas<br/>[base.py]"]
  node_validation["Control de calidad<br/>[validators.py]"]
  node_io["Lectura volúmenes<br/>[io.py]"]
  node_preparation["Preparación<br/>[preparation.py]"]
  node_segmentation["Segmentación<br/>[segmentation.py]"]
  node_roi["Conversión ROI<br/>[roi.py]"]
  node_evaluation["Evaluación Dice IoU<br/>[evaluation.py]"]
  node_progress["Progreso<br/>[progress.py]"]
end

subgraph group_data["Persistencia"]
  node_repositories["Repositorios"]
  node_studies_repo["Estudios<br/>[studies.py]"]
  node_models["Modelos de datos<br/>[models.py]"]
  node_db[("Base de datos<br/>[db.py]")]
  node_storage["Archivos privados<br/>[storage.py]"]
end

subgraph group_assistant["Asistente opcional"]
  node_assistant_api["API asistente<br/>[asistente.py]"]
  node_assistant_engine["Motor de respuestas<br/>[motor.py]"]
  node_assistant_context["Contexto estudios<br/>[contexto.py]"]
  node_knowledge["Conocimiento fijo<br/>[conocimiento.py]"]
end

node_user(("Usuario"))

node_user -->|"selecciona archivos"| node_upload
node_app -->|"enruta a"| node_upload
node_app -->|"enruta a"| node_studies_ui
node_app -->|"enruta a"| node_processing_ui
node_app -->|"enruta a"| node_roi_ui
node_auth -->|"usa sesión"| node_http
node_upload -->|"solicita carga"| node_http
node_studies_ui -->|"consulta y elimina"| node_http
node_processing_ui -->|"consulta estado"| node_http
node_roi_ui -.->|"solicita resultado"| node_http
node_assistant_ui -.->|"consulta asistente"| node_http
node_http -->|"envía solicitudes"| node_api_app
node_api_app -->|"registra router"| node_study_api
node_api_app -->|"registra router"| node_job_api
node_api_app -->|"registra router"| node_assistant_api
node_api_app -->|"inicia worker"| node_worker
node_study_api -->|"admite y consulta"| node_repositories
node_study_api -->|"guarda archivos"| node_storage
node_study_api -.->|"crea trabajo"| node_service
node_job_api -.->|"consulta trabajos"| node_service
node_service -->|"ejecuta pipeline"| node_pipeline
node_service -->|"lee y registra estado"| node_repositories
node_service -->|"lee entrada y guarda salida"| node_storage
node_pipeline -->|"valida"| node_validation
node_pipeline -->|"lee y escribe volúmenes"| node_io
node_pipeline -->|"prepara volumen"| node_preparation
node_pipeline -->|"segmenta"| node_segmentation
node_pipeline -->|"transforma máscara"| node_roi
node_pipeline -->|"calcula métricas"| node_evaluation
node_pipeline -->|"notifica etapas"| node_progress
node_progress -.->|"actualiza progreso"| node_service
node_repositories -->|"exporta repositorio"| node_studies_repo
node_studies_repo -->|"consulta entidades"| node_models
node_models -->|"usa ORM"| node_db
node_service -.->|"sirve resultado"| node_render
node_assistant_api -.->|"responde consultas"| node_assistant_engine
node_assistant_engine -.->|"obtiene contexto"| node_assistant_context
node_assistant_context -->|"consulta contenido"| node_knowledge
node_assistant_context -->|"lee estudios"| node_studies_repo

click node_app "https://github.com/yimis-source/prostaai/blob/main/frontend/src/App.jsx"
click node_auth "https://github.com/yimis-source/prostaai/blob/main/frontend/src/auth/AuthContext.jsx"
click node_http "https://github.com/yimis-source/prostaai/blob/main/frontend/src/api/cliente.js"
click node_upload "https://github.com/yimis-source/prostaai/blob/main/frontend/src/pages/Cargar.jsx"
click node_studies_ui "https://github.com/yimis-source/prostaai/blob/main/frontend/src/pages/MisEstudios.jsx"
click node_processing_ui "https://github.com/yimis-source/prostaai/blob/main/frontend/src/pages/Procesamiento.jsx"
click node_roi_ui "https://github.com/yimis-source/prostaai/blob/main/frontend/src/pages/VisualizarRoi.jsx"
click node_api_app "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/api/app.py"
click node_study_api "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/api/estudios.py"
click node_job_api "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/api/trabajos.py"
click node_render "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/api/rendering.py"
click node_worker "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/processing/worker.py"
click node_service "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/processing/service.py"
click node_pipeline "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/base.py"
click node_validation "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/validators.py"
click node_io "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/io.py"
click node_preparation "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/preparation.py"
click node_segmentation "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/segmentation.py"
click node_roi "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/roi.py"
click node_evaluation "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/evaluation.py"
click node_progress "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/progress.py"
click node_repositories "https://github.com/yimis-source/prostaai/tree/main/backend/prosta_ai/repositories"
click node_studies_repo "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/repositories/studies.py"
click node_models "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/models.py"
click node_db "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/db.py"
click node_storage "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/storage.py"
click node_assistant_ui "https://github.com/yimis-source/prostaai/blob/main/frontend/src/pages/Asistente.jsx"
click node_assistant_api "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/api/asistente.py"
click node_assistant_engine "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/assistant/motor.py"
click node_assistant_context "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/assistant/contexto.py"
click node_knowledge "https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/assistant/conocimiento.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_app,node_auth,node_http,node_upload,node_studies_ui,node_processing_ui,node_roi_ui,node_assistant_ui toneBlue
class node_api_app,node_study_api,node_job_api,node_render toneAmber
class node_worker,node_service,node_pipeline,node_validation,node_io,node_preparation,node_segmentation,node_roi,node_evaluation,node_progress toneMint
class node_repositories,node_studies_repo,node_models,node_db,node_storage toneRose
class node_assistant_api,node_assistant_engine,node_assistant_context,node_knowledge,node_user toneIndigo
```

## Components

### Cliente web

- [Rutas privadas](https://github.com/yimis-source/prostaai/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Sesión](https://github.com/yimis-source/prostaai/blob/main/frontend/src/auth/AuthContext.jsx): `frontend/src/auth/AuthContext.jsx`
- [Cliente HTTP](https://github.com/yimis-source/prostaai/blob/main/frontend/src/api/cliente.js): `frontend/src/api/cliente.js`
- [Carga estudio](https://github.com/yimis-source/prostaai/blob/main/frontend/src/pages/Cargar.jsx): `frontend/src/pages/Cargar.jsx`
- [Mis estudios](https://github.com/yimis-source/prostaai/blob/main/frontend/src/pages/MisEstudios.jsx): `frontend/src/pages/MisEstudios.jsx`
- [Estado trabajo](https://github.com/yimis-source/prostaai/blob/main/frontend/src/pages/Procesamiento.jsx): `frontend/src/pages/Procesamiento.jsx`
- [Visor ROI](https://github.com/yimis-source/prostaai/blob/main/frontend/src/pages/VisualizarRoi.jsx): `frontend/src/pages/VisualizarRoi.jsx`
- [Orientación](https://github.com/yimis-source/prostaai/blob/main/frontend/src/pages/Asistente.jsx): `frontend/src/pages/Asistente.jsx`

### API y admisión

- [Aplicación API](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/api/app.py): `backend/prosta_ai/api/app.py`
- [Admisión y estudios](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/api/estudios.py): `backend/prosta_ai/api/estudios.py`
- [Trabajos](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/api/trabajos.py): `backend/prosta_ai/api/trabajos.py`
- [Representación](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/api/rendering.py): `backend/prosta_ai/api/rendering.py`

### Procesamiento

- [Worker](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/processing/worker.py): `backend/prosta_ai/processing/worker.py`
- [Servicio de proceso](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/processing/service.py): `backend/prosta_ai/processing/service.py`
- [Pipeline por etapas](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/base.py): `backend/prosta_ai/pipeline/base.py`
- [Control de calidad](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/validators.py): `backend/prosta_ai/pipeline/validators.py`
- [Lectura volúmenes](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/io.py): `backend/prosta_ai/pipeline/io.py`
- [Preparación](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/preparation.py): `backend/prosta_ai/pipeline/preparation.py`
- [Segmentación](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/segmentation.py): `backend/prosta_ai/pipeline/segmentation.py`
- [Conversión ROI](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/roi.py): `backend/prosta_ai/pipeline/roi.py`
- [Evaluación Dice IoU](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/evaluation.py): `backend/prosta_ai/pipeline/evaluation.py`
- [Progreso](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/pipeline/progress.py): `backend/prosta_ai/pipeline/progress.py`

### Persistencia

- [Repositorios](https://github.com/yimis-source/prostaai/tree/main/backend/prosta_ai/repositories): `backend/prosta_ai/repositories`
- [Estudios](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/repositories/studies.py): `backend/prosta_ai/repositories/studies.py`
- [Modelos de datos](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/models.py): `backend/prosta_ai/models.py`
- [Base de datos](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/db.py): `backend/prosta_ai/db.py`
- [Archivos privados](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/storage.py): `backend/prosta_ai/storage.py`

### Asistente opcional

- [API asistente](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/api/asistente.py): `backend/prosta_ai/api/asistente.py`
- [Motor de respuestas](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/assistant/motor.py): `backend/prosta_ai/assistant/motor.py`
- [Contexto estudios](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/assistant/contexto.py): `backend/prosta_ai/assistant/contexto.py`
- [Conocimiento fijo](https://github.com/yimis-source/prostaai/blob/main/backend/prosta_ai/assistant/conocimiento.py): `backend/prosta_ai/assistant/conocimiento.py`

### Other components

- **Usuario**

## Connections

- Usuario → Carga estudio: selecciona archivos
- Rutas privadas → Carga estudio: enruta a (evidence: `frontend/src/App.jsx`)
- Rutas privadas → Mis estudios: enruta a (evidence: `frontend/src/App.jsx`)
- Rutas privadas → Estado trabajo: enruta a (evidence: `frontend/src/App.jsx`)
- Rutas privadas → Visor ROI: enruta a (evidence: `frontend/src/App.jsx`)
- Sesión → Cliente HTTP: usa sesión (evidence: `frontend/src/auth/AuthContext.jsx`)
- Carga estudio → Cliente HTTP: solicita carga (evidence: `frontend/src/pages/Cargar.jsx`)
- Mis estudios → Cliente HTTP: consulta y elimina (evidence: `frontend/src/pages/MisEstudios.jsx`)
- Estado trabajo → Cliente HTTP: consulta estado (evidence: `frontend/src/pages/Procesamiento.jsx`)
- Visor ROI → Cliente HTTP: solicita resultado
- Orientación → Cliente HTTP: consulta asistente
- Cliente HTTP → Aplicación API: envía solicitudes (evidence: `frontend/src/api/cliente.js`)
- Aplicación API → Admisión y estudios: registra router (evidence: `backend/prosta_ai/api/app.py`)
- Aplicación API → Trabajos: registra router (evidence: `backend/prosta_ai/api/app.py`)
- Aplicación API → API asistente: registra router (evidence: `backend/prosta_ai/api/app.py`)
- Aplicación API → Worker: inicia worker (evidence: `backend/prosta_ai/api/app.py`)
- Admisión y estudios → Repositorios: admite y consulta (evidence: `backend/prosta_ai/api/estudios.py`)
- Admisión y estudios → Archivos privados: guarda archivos (evidence: `backend/prosta_ai/api/estudios.py`)
- Admisión y estudios → Servicio de proceso: crea trabajo
- Trabajos → Servicio de proceso: consulta trabajos
- Servicio de proceso → Pipeline por etapas: ejecuta pipeline (evidence: `README.md`)
- Servicio de proceso → Repositorios: lee y registra estado (evidence: `backend/prosta_ai/processing/service.py`)
- Servicio de proceso → Archivos privados: lee entrada y guarda salida (evidence: `backend/prosta_ai/processing/service.py`)
- Pipeline por etapas → Control de calidad: valida (evidence: `backend/prosta_ai/pipeline/base.py`)
- Pipeline por etapas → Lectura volúmenes: lee y escribe volúmenes (evidence: `backend/prosta_ai/pipeline/base.py`)
- Pipeline por etapas → Preparación: prepara volumen (evidence: `backend/prosta_ai/pipeline/base.py`)
- Pipeline por etapas → Segmentación: segmenta (evidence: `backend/prosta_ai/pipeline/base.py`)
- Pipeline por etapas → Conversión ROI: transforma máscara (evidence: `backend/prosta_ai/pipeline/base.py`)
- Pipeline por etapas → Evaluación Dice IoU: calcula métricas (evidence: `backend/prosta_ai/pipeline/base.py`)
- Pipeline por etapas → Progreso: notifica etapas (evidence: `backend/prosta_ai/pipeline/base.py`)
- Progreso → Servicio de proceso: actualiza progreso (evidence: `backend/prosta_ai/processing/service.py`)
- Repositorios → Estudios: exporta repositorio (evidence: `backend/prosta_ai/repositories/__init__.py`)
- Estudios → Modelos de datos: consulta entidades (evidence: `backend/prosta_ai/repositories/studies.py`)
- Modelos de datos → Base de datos: usa ORM (evidence: `backend/prosta_ai/models.py`)
- Servicio de proceso → Representación: sirve resultado
- API asistente → Motor de respuestas: responde consultas
- Motor de respuestas → Contexto estudios: obtiene contexto
- Contexto estudios → Conocimiento fijo: consulta contenido (evidence: `backend/prosta_ai/assistant/contexto.py`)
- Contexto estudios → Estudios: lee estudios (evidence: `backend/prosta_ai/assistant/contexto.py`)
