# bonifacho/lab_requerimientos_hibridos architecture

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

- Interactive diagram: https://gitdiagram.com/bonifacho/lab_requerimientos_hibridos
- Repository: https://github.com/bonifacho/lab_requerimientos_hibridos

## Overview

Helpdesk técnico para gestionar mantenimiento de activos institucionales. El flujo principal va desde la consulta de equipos y creación de un ticket, pasa por asignación y cambio de estado, y continúa con diagnóstico técnico y registro de repuestos; el cierre del ticket es una acción aparte. Reportes y páginas para notificaciones, historial y búsqueda avanzada están documentados, aunque parte de esas capacidades está marcada como pendiente. Los enlaces del backend se basan en routers y servicios muestreados; no se infieren conexiones para funciones pendientes.

Main entry points: [`frontend/src/services/api.ts`](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/services/api.ts) (Cliente API), [`frontend/src/App.tsx`](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/App.tsx) (Rutas de la app), [`backend/app/main.py`](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/main.py) (FastAPI), [`backend/app/database.py`](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/database.py) (Sesiones SQLAlchemy)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Aplicación Ionic"]
  node_app["Rutas de la app<br/>[App.tsx]"]
  node_equipment_page["Equipos<br/>[EquiposPage.tsx]"]
  node_tickets_page["Tickets<br/>[TicketsPage.tsx]"]
  node_ticket_detail["Detalle del ticket"]
  node_api_client["Cliente API<br/>[api.ts]"]
end

subgraph group_tickets["Gestión de tickets"]
  node_tickets_api["API de tickets<br/>[tickets.py]"]
  node_diagnostics_api["Diagnósticos<br/>[diagnosticos.py]"]
end

subgraph group_assets["Activos e inventario"]
  node_parts_api["Repuestos<br/>[repuestos.py]"]
end

subgraph group_insights["Análisis y seguimiento"]
  node_reports_page["Dashboard<br/>[ReportesPage.tsx]"]
  node_reports_api["Reportes<br/>[reportes.py]"]
  node_notifications_page["Notificaciones"]
  node_history_page["Historial<br/>[HistorialPage.tsx]"]
  node_search_page["Búsqueda avanzada<br/>[BusquedaPage.tsx]"]
end

subgraph group_backend["API y persistencia"]
  node_equipment_api["API de equipos<br/>[equipos.py]"]
  node_users_api["API de usuarios<br/>[usuarios.py]"]
  node_api_app["FastAPI<br/>[main.py]"]
  node_models["Modelos de dominio<br/>[models.py]"]
  node_database["Sesiones SQLAlchemy<br/>[database.py]"]
end

node_user(("Usuario"))
node_postgres[("PostgreSQL")]

node_user -->|"usa"| node_app
node_app -->|"enruta"| node_equipment_page
node_app -->|"enruta"| node_tickets_page
node_app -->|"enruta"| node_ticket_detail
node_app -->|"enruta"| node_reports_page
node_app -->|"enruta"| node_notifications_page
node_app -->|"enruta"| node_history_page
node_app -->|"enruta"| node_search_page
node_equipment_page -->|"consulta"| node_api_client
node_tickets_page -->|"consulta"| node_api_client
node_ticket_detail -->|"consulta y actualiza"| node_api_client
node_reports_page -->|"solicita resumen"| node_api_client
node_api_client -->|"llama"| node_equipment_api
node_api_client -->|"llama"| node_users_api
node_api_client -->|"llama"| node_tickets_api
node_api_client -->|"llama"| node_diagnostics_api
node_api_client -->|"llama"| node_parts_api
node_api_client -->|"llama"| node_reports_api
node_api_app -->|"monta router"| node_equipment_api
node_api_app -->|"monta router"| node_users_api
node_api_app -->|"monta router"| node_tickets_api
node_api_app -->|"monta router"| node_diagnostics_api
node_api_app -->|"monta router"| node_parts_api
node_api_app -->|"monta router"| node_reports_api
node_api_app -->|"crea tablas"| node_models
node_equipment_api -->|"usa sesión"| node_database
node_users_api -->|"usa sesión"| node_database
node_tickets_api -->|"consulta y persiste"| node_database
node_diagnostics_api -->|"registra diagnóstico y descuenta stock"| node_database
node_parts_api -->|"usa sesión"| node_database
node_reports_api -->|"consulta datos"| node_database
node_database -->|"lee y escribe"| node_postgres

click node_app "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/App.tsx"
click node_equipment_page "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/EquiposPage.tsx"
click node_tickets_page "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/TicketsPage.tsx"
click node_ticket_detail "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/TicketDetallePage.tsx"
click node_api_client "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/services/api.ts"
click node_equipment_api "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/routers/equipos.py"
click node_users_api "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/routers/usuarios.py"
click node_tickets_api "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/routers/tickets.py"
click node_diagnostics_api "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/routers/diagnosticos.py"
click node_parts_api "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/routers/repuestos.py"
click node_reports_page "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/ReportesPage.tsx"
click node_reports_api "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/routers/reportes.py"
click node_notifications_page "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/NotificacionesPage.tsx"
click node_history_page "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/HistorialPage.tsx"
click node_search_page "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/BusquedaPage.tsx"
click node_api_app "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/main.py"
click node_models "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/models.py"
click node_database "https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/database.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_equipment_page,node_tickets_page,node_ticket_detail,node_api_client toneBlue
class node_tickets_api,node_diagnostics_api,node_postgres toneAmber
class node_parts_api toneMint
class node_reports_page,node_reports_api,node_notifications_page,node_history_page,node_search_page toneRose
class node_equipment_api,node_users_api,node_api_app,node_models,node_database,node_user toneIndigo
```

## Components

### Aplicación Ionic

- [Rutas de la app](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Equipos](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/EquiposPage.tsx): `frontend/src/pages/EquiposPage.tsx`
- [Tickets](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/TicketsPage.tsx): `frontend/src/pages/TicketsPage.tsx`
- [Detalle del ticket](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/TicketDetallePage.tsx): `frontend/src/pages/TicketDetallePage.tsx`
- [Cliente API](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/services/api.ts): `frontend/src/services/api.ts`

### Gestión de tickets

- [API de tickets](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/routers/tickets.py): `backend/app/routers/tickets.py`
- [Diagnósticos](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/routers/diagnosticos.py): `backend/app/routers/diagnosticos.py`

### Activos e inventario

- [Repuestos](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/routers/repuestos.py): `backend/app/routers/repuestos.py`

### Análisis y seguimiento

- [Dashboard](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/ReportesPage.tsx): `frontend/src/pages/ReportesPage.tsx`
- [Reportes](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/routers/reportes.py): `backend/app/routers/reportes.py`
- [Notificaciones](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/NotificacionesPage.tsx): `frontend/src/pages/NotificacionesPage.tsx`
- [Historial](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/HistorialPage.tsx): `frontend/src/pages/HistorialPage.tsx`
- [Búsqueda avanzada](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/frontend/src/pages/BusquedaPage.tsx): `frontend/src/pages/BusquedaPage.tsx`

### API y persistencia

- [API de equipos](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/routers/equipos.py): `backend/app/routers/equipos.py`
- [API de usuarios](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/routers/usuarios.py): `backend/app/routers/usuarios.py`
- [FastAPI](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/main.py): `backend/app/main.py`
- [Modelos de dominio](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/models.py): `backend/app/models.py`
- [Sesiones SQLAlchemy](https://github.com/bonifacho/lab_requerimientos_hibridos/blob/main/backend/app/database.py): `backend/app/database.py`

### Other components

- **Usuario**
- **PostgreSQL**

## Connections

- Usuario → Rutas de la app: usa
- Rutas de la app → Equipos: enruta
- Rutas de la app → Tickets: enruta
- Rutas de la app → Detalle del ticket: enruta
- Rutas de la app → Dashboard: enruta
- Rutas de la app → Notificaciones: enruta
- Rutas de la app → Historial: enruta
- Rutas de la app → Búsqueda avanzada: enruta
- Equipos → Cliente API: consulta
- Tickets → Cliente API: consulta
- Detalle del ticket → Cliente API: consulta y actualiza
- Dashboard → Cliente API: solicita resumen
- Cliente API → API de equipos: llama
- Cliente API → API de usuarios: llama
- Cliente API → API de tickets: llama
- Cliente API → Diagnósticos: llama
- Cliente API → Repuestos: llama
- Cliente API → Reportes: llama
- FastAPI → API de equipos: monta router
- FastAPI → API de usuarios: monta router
- FastAPI → API de tickets: monta router
- FastAPI → Diagnósticos: monta router
- FastAPI → Repuestos: monta router
- FastAPI → Reportes: monta router
- FastAPI → Modelos de dominio: crea tablas
- API de equipos → Sesiones SQLAlchemy: usa sesión
- API de usuarios → Sesiones SQLAlchemy: usa sesión
- API de tickets → Sesiones SQLAlchemy: consulta y persiste
- Diagnósticos → Sesiones SQLAlchemy: registra diagnóstico y descuenta stock
- Repuestos → Sesiones SQLAlchemy: usa sesión
- Reportes → Sesiones SQLAlchemy: consulta datos
- Sesiones SQLAlchemy → PostgreSQL: lee y escribe
