# darienperezgit/avexis architecture

> Architecture diagram of the GitHub repository darienperezgit/avexis, 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/darienperezgit/avexis
- Repository: https://github.com/darienperezgit/avexis

## Overview

AVEXIS is a single-firm legal-practice management application. Its main workflow runs from staff using the web app to manage clients and cases, record procedural activity and hearings, review upcoming deadlines, and handle fees; the case can later be archived. The backend exposes authenticated domain APIs backed by MongoDB, with role- and case-based access policies. The README documents the full product workflow; several frontend feature modules and backend routes were not excerpted, so their internal call paths are not asserted here.

Main entry points: [`frontend/src/App.tsx`](https://github.com/darienperezgit/avexis/blob/main/frontend/src/App.tsx) (App routing), [`backend/src/routes.ts`](https://github.com/darienperezgit/avexis/blob/main/backend/src/routes.ts) (API router mounts), [`backend/src/models`](https://github.com/darienperezgit/avexis/tree/main/backend/src/models) (Domain models), [`backend/src/access/policies.ts`](https://github.com/darienperezgit/avexis/blob/main/backend/src/access/policies.ts) (Access policies)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_app["App routing<br/>[App.tsx]"]
  node_session["Session state<br/>[sesion.tsx]"]
  node_permissions["UI permissions<br/>[permisos.ts]"]
  node_client_ui["Client management<br/>[Clientes.tsx]"]
  node_case_ui["Case management<br/>[Expedientes.tsx]"]
  node_case_detail["Case details"]
  node_agenda_ui["Agenda and alerts<br/>[Agenda.tsx]"]
  node_users_ui["User administration<br/>[Usuarios.tsx]"]
  node_api_client["HTTP client<br/>[api.ts]"]
  node_client_data["Client data helpers<br/>[clientes.ts]"]
  node_case_data["Case data helpers<br/>[expedientes.ts]"]
  node_ui_errors["API error handling<br/>[errores.ts]"]
end

subgraph group_api["Backend API"]
  node_api_routes["API router mounts<br/>[routes.ts]"]
  node_auth_routes["Login and session<br/>[auth.routes.ts]"]
  node_user_routes["User administration API<br/>[usuarios.routes.ts]"]
  node_client_routes["Client API<br/>[clientes.routes.ts]"]
  node_case_routes["Case API"]
end

subgraph group_domain["Legal workflows"]
  node_movement_routes["Procedural movements"]
  node_hearing_routes["Hearings and deadlines"]
  node_calendar["Calendar rules<br/>[calendario.ts]"]
  node_fee_routes["Fees and payments"]
end

subgraph group_core["Security and persistence"]
  node_policies["Access policies<br/>[policies.ts]"]
  node_auth_middleware["Authentication middleware<br/>[middleware.ts]"]
  node_validation["Request validation<br/>[validation.ts]"]
  node_populate["Related-name population<br/>[populate.ts]"]
  node_models["Domain models"]
  node_mongo[("MongoDB<br/>[database.ts]")]
end

node_staff(("Firm staff"))

node_staff -->|"uses"| node_app
node_app -->|"checks session"| node_session
node_app -->|"routes to"| node_client_ui
node_app -->|"routes to"| node_case_ui
node_app -->|"routes to"| node_case_detail
node_app -->|"routes to"| node_agenda_ui
node_app -->|"routes to"| node_users_ui
node_app -->|"checks access"| node_permissions
node_client_ui -->|"requests data"| node_api_client
node_client_ui -->|"uses helpers"| node_client_data
node_case_ui -->|"requests data"| node_api_client
node_case_ui -->|"uses helpers"| node_case_data
node_api_client -->|"formats errors"| node_ui_errors
node_api_client -.->|"calls API"| node_api_routes
node_api_routes -->|"mounts"| node_auth_routes
node_api_routes -->|"mounts"| node_user_routes
node_api_routes -->|"mounts"| node_client_routes
node_api_routes -->|"mounts"| node_case_routes
node_api_routes -->|"mounts"| node_movement_routes
node_api_routes -->|"mounts"| node_hearing_routes
node_api_routes -->|"mounts"| node_fee_routes
node_auth_routes -->|"authenticates sessions"| node_auth_middleware
node_auth_routes -->|"reads users"| node_models
node_user_routes -->|"checks permissions"| node_policies
node_client_routes -->|"authenticates requests"| node_auth_middleware
node_client_routes -->|"validates input"| node_validation
node_client_routes -->|"reads and writes"| node_models
node_case_routes -->|"checks case access"| node_policies
node_case_routes -->|"validates input"| node_validation
node_case_routes -->|"reads and writes"| node_models
node_movement_routes -->|"checks case access"| node_policies
node_movement_routes -->|"records movements"| node_models
node_hearing_routes -->|"checks agenda access"| node_policies
node_hearing_routes -->|"computes urgency"| node_calendar
node_hearing_routes -->|"reads and writes"| node_models
node_fee_routes -->|"checks fee access"| node_policies
node_fee_routes -->|"records fees"| node_models
node_models -.->|"persists records"| node_mongo

click node_app "https://github.com/darienperezgit/avexis/blob/main/frontend/src/App.tsx"
click node_session "https://github.com/darienperezgit/avexis/blob/main/frontend/src/sesion.tsx"
click node_permissions "https://github.com/darienperezgit/avexis/blob/main/frontend/src/permisos.ts"
click node_client_ui "https://github.com/darienperezgit/avexis/blob/main/frontend/src/pages/Clientes.tsx"
click node_case_ui "https://github.com/darienperezgit/avexis/blob/main/frontend/src/pages/Expedientes.tsx"
click node_case_detail "https://github.com/darienperezgit/avexis/blob/main/frontend/src/pages/ExpedienteDetalle.tsx"
click node_agenda_ui "https://github.com/darienperezgit/avexis/blob/main/frontend/src/pages/Agenda.tsx"
click node_users_ui "https://github.com/darienperezgit/avexis/blob/main/frontend/src/pages/Usuarios.tsx"
click node_api_client "https://github.com/darienperezgit/avexis/blob/main/frontend/src/api.ts"
click node_client_data "https://github.com/darienperezgit/avexis/blob/main/frontend/src/clientes.ts"
click node_case_data "https://github.com/darienperezgit/avexis/blob/main/frontend/src/expedientes.ts"
click node_ui_errors "https://github.com/darienperezgit/avexis/blob/main/frontend/src/errores.ts"
click node_api_routes "https://github.com/darienperezgit/avexis/blob/main/backend/src/routes.ts"
click node_auth_routes "https://github.com/darienperezgit/avexis/blob/main/backend/src/auth/auth.routes.ts"
click node_user_routes "https://github.com/darienperezgit/avexis/blob/main/backend/src/usuarios/usuarios.routes.ts"
click node_client_routes "https://github.com/darienperezgit/avexis/blob/main/backend/src/clientes/clientes.routes.ts"
click node_case_routes "https://github.com/darienperezgit/avexis/blob/main/backend/src/expedientes/expedientes.routes.ts"
click node_movement_routes "https://github.com/darienperezgit/avexis/blob/main/backend/src/movimientos/movimientos.routes.ts"
click node_hearing_routes "https://github.com/darienperezgit/avexis/blob/main/backend/src/audiencias/audiencias.routes.ts"
click node_calendar "https://github.com/darienperezgit/avexis/blob/main/backend/src/audiencias/calendario.ts"
click node_fee_routes "https://github.com/darienperezgit/avexis/blob/main/backend/src/honorarios/honorarios.routes.ts"
click node_policies "https://github.com/darienperezgit/avexis/blob/main/backend/src/access/policies.ts"
click node_auth_middleware "https://github.com/darienperezgit/avexis/blob/main/backend/src/auth/middleware.ts"
click node_validation "https://github.com/darienperezgit/avexis/blob/main/backend/src/http/validation.ts"
click node_populate "https://github.com/darienperezgit/avexis/blob/main/backend/src/http/populate.ts"
click node_models "https://github.com/darienperezgit/avexis/tree/main/backend/src/models"
click node_mongo "https://github.com/darienperezgit/avexis/blob/main/backend/src/config/database.ts"

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_session,node_permissions,node_client_ui,node_case_ui,node_case_detail,node_agenda_ui,node_users_ui,node_api_client,node_client_data,node_case_data,node_ui_errors toneBlue
class node_api_routes,node_auth_routes,node_user_routes,node_client_routes,node_case_routes toneAmber
class node_movement_routes,node_hearing_routes,node_calendar,node_fee_routes toneMint
class node_policies,node_auth_middleware,node_validation,node_populate,node_models,node_mongo toneRose
class node_staff toneIndigo
```

## Components

### Web application

- [App routing](https://github.com/darienperezgit/avexis/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Session state](https://github.com/darienperezgit/avexis/blob/main/frontend/src/sesion.tsx): `frontend/src/sesion.tsx`
- [UI permissions](https://github.com/darienperezgit/avexis/blob/main/frontend/src/permisos.ts): `frontend/src/permisos.ts`
- [Client management](https://github.com/darienperezgit/avexis/blob/main/frontend/src/pages/Clientes.tsx): `frontend/src/pages/Clientes.tsx`
- [Case management](https://github.com/darienperezgit/avexis/blob/main/frontend/src/pages/Expedientes.tsx): `frontend/src/pages/Expedientes.tsx`
- [Case details](https://github.com/darienperezgit/avexis/blob/main/frontend/src/pages/ExpedienteDetalle.tsx): `frontend/src/pages/ExpedienteDetalle.tsx`
- [Agenda and alerts](https://github.com/darienperezgit/avexis/blob/main/frontend/src/pages/Agenda.tsx): `frontend/src/pages/Agenda.tsx`
- [User administration](https://github.com/darienperezgit/avexis/blob/main/frontend/src/pages/Usuarios.tsx): `frontend/src/pages/Usuarios.tsx`
- [HTTP client](https://github.com/darienperezgit/avexis/blob/main/frontend/src/api.ts): `frontend/src/api.ts`
- [Client data helpers](https://github.com/darienperezgit/avexis/blob/main/frontend/src/clientes.ts): `frontend/src/clientes.ts`
- [Case data helpers](https://github.com/darienperezgit/avexis/blob/main/frontend/src/expedientes.ts): `frontend/src/expedientes.ts`
- [API error handling](https://github.com/darienperezgit/avexis/blob/main/frontend/src/errores.ts): `frontend/src/errores.ts`

### Backend API

- [API router mounts](https://github.com/darienperezgit/avexis/blob/main/backend/src/routes.ts): `backend/src/routes.ts`
- [Login and session](https://github.com/darienperezgit/avexis/blob/main/backend/src/auth/auth.routes.ts): `backend/src/auth/auth.routes.ts`
- [User administration API](https://github.com/darienperezgit/avexis/blob/main/backend/src/usuarios/usuarios.routes.ts): `backend/src/usuarios/usuarios.routes.ts`
- [Client API](https://github.com/darienperezgit/avexis/blob/main/backend/src/clientes/clientes.routes.ts): `backend/src/clientes/clientes.routes.ts`
- [Case API](https://github.com/darienperezgit/avexis/blob/main/backend/src/expedientes/expedientes.routes.ts): `backend/src/expedientes/expedientes.routes.ts`

### Legal workflows

- [Procedural movements](https://github.com/darienperezgit/avexis/blob/main/backend/src/movimientos/movimientos.routes.ts): `backend/src/movimientos/movimientos.routes.ts`
- [Hearings and deadlines](https://github.com/darienperezgit/avexis/blob/main/backend/src/audiencias/audiencias.routes.ts): `backend/src/audiencias/audiencias.routes.ts`
- [Calendar rules](https://github.com/darienperezgit/avexis/blob/main/backend/src/audiencias/calendario.ts): `backend/src/audiencias/calendario.ts`
- [Fees and payments](https://github.com/darienperezgit/avexis/blob/main/backend/src/honorarios/honorarios.routes.ts): `backend/src/honorarios/honorarios.routes.ts`

### Security and persistence

- [Access policies](https://github.com/darienperezgit/avexis/blob/main/backend/src/access/policies.ts): `backend/src/access/policies.ts`
- [Authentication middleware](https://github.com/darienperezgit/avexis/blob/main/backend/src/auth/middleware.ts): `backend/src/auth/middleware.ts`
- [Request validation](https://github.com/darienperezgit/avexis/blob/main/backend/src/http/validation.ts): `backend/src/http/validation.ts`
- [Related-name population](https://github.com/darienperezgit/avexis/blob/main/backend/src/http/populate.ts): `backend/src/http/populate.ts`
- [Domain models](https://github.com/darienperezgit/avexis/tree/main/backend/src/models): `backend/src/models`
- [MongoDB](https://github.com/darienperezgit/avexis/blob/main/backend/src/config/database.ts): `backend/src/config/database.ts`

### Other components

- **Firm staff**

## Connections

- Firm staff → App routing: uses (evidence: `README.md`)
- App routing → Session state: checks session (evidence: `frontend/src/App.tsx`)
- App routing → Client management: routes to (evidence: `frontend/src/App.tsx`)
- App routing → Case management: routes to (evidence: `frontend/src/App.tsx`)
- App routing → Case details: routes to (evidence: `frontend/src/App.tsx`)
- App routing → Agenda and alerts: routes to (evidence: `frontend/src/App.tsx`)
- App routing → User administration: routes to (evidence: `frontend/src/App.tsx`)
- App routing → UI permissions: checks access (evidence: `frontend/src/App.tsx`)
- Client management → HTTP client: requests data (evidence: `frontend/src/pages/Clientes.tsx`)
- Client management → Client data helpers: uses helpers (evidence: `frontend/src/pages/Clientes.tsx`)
- Case management → HTTP client: requests data (evidence: `frontend/src/pages/Expedientes.tsx`)
- Case management → Case data helpers: uses helpers (evidence: `frontend/src/pages/Expedientes.tsx`)
- HTTP client → API error handling: formats errors (evidence: `frontend/src/errores.ts`)
- HTTP client → API router mounts: calls API (evidence: `README.md`)
- API router mounts → Login and session: mounts (evidence: `backend/src/routes.ts`)
- API router mounts → User administration API: mounts (evidence: `backend/src/routes.ts`)
- API router mounts → Client API: mounts (evidence: `backend/src/routes.ts`)
- API router mounts → Case API: mounts (evidence: `backend/src/routes.ts`)
- API router mounts → Procedural movements: mounts (evidence: `backend/src/routes.ts`)
- API router mounts → Hearings and deadlines: mounts (evidence: `backend/src/routes.ts`)
- API router mounts → Fees and payments: mounts (evidence: `backend/src/routes.ts`)
- Login and session → Authentication middleware: authenticates sessions (evidence: `backend/src/auth/auth.routes.ts`)
- Login and session → Domain models: reads users (evidence: `backend/src/auth/auth.routes.ts`)
- User administration API → Access policies: checks permissions (evidence: `backend/src/usuarios/usuarios.routes.ts`)
- Client API → Authentication middleware: authenticates requests (evidence: `backend/src/clientes/clientes.routes.ts`)
- Client API → Request validation: validates input (evidence: `backend/src/clientes/clientes.routes.ts`)
- Client API → Domain models: reads and writes (evidence: `backend/src/clientes/clientes.routes.ts`)
- Case API → Access policies: checks case access (evidence: `backend/src/expedientes/expedientes.routes.ts`)
- Case API → Request validation: validates input (evidence: `backend/src/expedientes/expedientes.routes.ts`)
- Case API → Domain models: reads and writes (evidence: `backend/src/expedientes/expedientes.routes.ts`)
- Procedural movements → Access policies: checks case access (evidence: `backend/src/movimientos/movimientos.routes.ts`)
- Procedural movements → Domain models: records movements (evidence: `backend/src/movimientos/movimientos.routes.ts`)
- Hearings and deadlines → Access policies: checks agenda access (evidence: `backend/src/audiencias/audiencias.routes.ts`)
- Hearings and deadlines → Calendar rules: computes urgency (evidence: `backend/src/audiencias/audiencias.routes.ts`)
- Hearings and deadlines → Domain models: reads and writes (evidence: `backend/src/audiencias/audiencias.routes.ts`)
- Fees and payments → Access policies: checks fee access (evidence: `backend/src/honorarios/honorarios.routes.ts`)
- Fees and payments → Domain models: records fees (evidence: `backend/src/honorarios/honorarios.routes.ts`)
- Domain models → MongoDB: persists records
