# cesaradso/e-vitalix architecture

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

- Interactive diagram: https://gitdiagram.com/cesaradso/e-vitalix
- Repository: https://github.com/cesaradso/e-vitalix

## Overview

1. **What this repository is**
   - E-VITALIX is a **PHP MVC-style health management platform**.
   - The system centers on **patients, appointments, clinical histories, medical consultations, tickets, and user profiles**.
   - It is organized as a multi-role application rather than a generic CRUD app.

2. **Application boundary and entry point**
   - `index.php` acts as the main application entry/front controller.
   - The codebase is split into classic MVC layers under `app/controllers`, `app/models`, and `app/views`.
   - `vendor/` and `composer.json` indicate Composer-managed dependencies for runtime services such as PDF/mail or framework support.

3. **Role-based architecture**
   - The platform is explicitly segmented by user type:
     - **superadministrador**
     - **administrador consultorio**
     - **asistente**
     - **especialista**
     - **paciente**
   - Each role has its own dashboard controller, views, layout, and session guard helper.
   - This is the main architectural boundary: each role gets a separate UI and permitted workflow set.

4. **Authentication, authorization, and sessions**
   - `LoginController`, `registroController`, `passwordController`, and `cerrarSesionController` handle auth lifecycle.
   - Session enforcement is split into role-specific helpers:
     - `session_superadmin.php`
     - `session_administrador.php`
     - `session_asistente.php`
     - `session_especialista.php`
     - `session_paciente.php`
   - This makes access control a cross-cutting concern that sits between controllers and views.

5. **Core domain: scheduling and care workflow**
   - The clinical workflow is built around:
     - `citaController`, `calendarioController`, `horarioController`, `slotController`
     - `consultaMedicaController`
     - `historialesController`
   - The patient path likely flows from **searching consultorios/especialistas**, **choosing availability**, **booking/reprogramming citas**, and then **recording consultation + history**.

6. **Organization and master-data management**
   - Administrative entities are modeled separately and maintained through dedicated controllers/models:
     - `consultorio`, `especialista`, `paciente`, `usuario`, `roles`
     - `especialidad`, `ciudades`, `tipoDocumento`, `aseguradora`, `planes`
   - The superadmin area also manages **consultorios, administrators, and global user records**.
   - These modules act as reference/master data used by scheduling and onboarding flows.

7. **Ticketing and support workflow**
   - `ticketController` and related views implement a **support/ticket system**.
   - Multiple roles can create, consult, update, and respond to tickets.
   - This is an operational subsystem separate from the medical workflow, but tied to user accounts and dashboards.

8. **Reporting and document generation**
   - PDF output is a dedicated subsystem:
     - `reportesPdfController`
     - role-specific variants for administrador, especialista, and paciente
     - PDF views under `app/views/pdf`
     - `pdf_helper.php`
   - The architecture treats report generation as a separate read-only projection of domain data, not as part of the transactional UI.

9. **Helpers and cross-cutting services**
   - `validacion_helper.php` centralizes server-side validation rules.
   - `mailer_helper.php` suggests email-based flows such as registration/recovery/notifications.
   - `notificacionCIta.php` indicates appointment notification logic.
   - `alert_helper.php` supports UI feedback/flash-style messaging.
   - These helpers are used across controllers rather than owning business state.

10. **Presentation layer structure**
   - Views are grouped by concern:
     - `app/views/auth` for login, registration, recovery, 404
     - `app/views/dashboard/<rol>` for role-specific operations
     - `app/views/layouts` for reusable headers/sidebars/topbars/footers
     - `app/views/website` for the public landing page
   - This layout shows a strong separation between **public marketing/auth pages** and **authenticated dashboards**.

11. **Static assets and client-side validation**
   - `public/assets` contains CSS, JavaScript, and role-specific UI assets.
   - `public/assets/js/validaciones.js` and `public/assets/css/validaciones.css` support frontend validation.
   - The dashboard and auth screens have separate asset bundles, reinforcing the split between public and internal experiences.

12. **File uploads and persisted artifacts**
   - `public/uploads` holds uploaded or generated files, organized by entity:
     - consultorios, pacientes, tickets, usuarios
   - The presence of SQL files under uploads suggests this repo also stores database scripts/migrations/backups as operational artifacts.
   - This directory is part of the application’s persistence boundary, outside the MVC request flow.

13. **Reference data / seed-like JSON**
   - `public/assets/data/*.json` contains consultorio, especialidad, and usuario data.
   - These files likely serve as sample datasets, imports, or frontend reference content.
   - They are separate from the main transactional model layer.

14. **How the main data flow works**
   - Typical flow: **user enters through auth** → **session helper authorizes role** → **role dashboard controller loads data from model** → **view renders with shared layout** → **optional PDF/mail/notification side effects**.
   - The important architectural separation is between:
     - request handling in controllers,
     - business/persistence in models,
     - presentation in views,
     - cross-cutting services in helpers,
     - and role enforcement in session helpers.

Main entry points: [`app/controllers/especialistaDashboardController.php`](https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/especialistaDashboardController.php) (Especialista), [`app/controllers/pacienteDashboardController.php`](https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/pacienteDashboardController.php) (Paciente), [`app/views/dashboard/administrador/dashboard-administrador.php`](https://github.com/cesaradso/e-vitalix/blob/main/app/views/dashboard/administrador/dashboard-administrador.php) (Dashboards), [`index.php`](https://github.com/cesaradso/e-vitalix/blob/main/index.php) (Front controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_grp_app["Application"]
  node_n_index["Front controller<br/>entrypoint<br/>[index.php]"]
  node_n_session_helpers{{"Session guards<br/>auth helpers"}}
  node_n_vendor["Composer deps<br/>dependencies"]
end

subgraph group_grp_roles["Role areas"]
  node_n_dash_super["Superadmin<br/>dashboard controller"]
  node_n_dash_admin["Admin<br/>dashboard controller"]
  node_n_dash_asistente["Asistente<br/>dashboard controller"]
  node_n_dash_especialista["Especialista<br/>dashboard controller"]
  node_n_dash_paciente["Paciente<br/>dashboard controller"]
end

subgraph group_grp_domain["Domain services"]
  node_n_login_ctrl["Auth flow<br/>controller"]
  node_n_sched[("Agenda<br/>scheduling subsystem<br/>[citaController.php]")]
  node_n_clinical[("Clinical care<br/>clinical subsystem")]
  node_n_masterdata[("Master data<br/>reference subsystem")]
  node_n_ticketing["Tickets<br/>support subsystem"]
  node_n_reports["PDF reports<br/>reporting subsystem"]
end

subgraph group_grp_ui["Presentation"]
  node_n_views_auth["Auth views<br/>[inicioSesion.php]"]
  node_n_views_dash["Dashboards<br/>views"]
  node_n_views_layouts["Layouts<br/>view partials"]
  node_n_views_pdf["PDF views"]
  node_n_public_site["Public site<br/>website<br/>[index.php]"]
end

subgraph group_grp_assets["Assets and data"]
  node_n_assets["Static assets<br/>frontend assets<br/>[dashboards.js]"]
  node_n_uploads[("Uploads<br/>persistence")]
end

node_n_index -->|"routes auth"| node_n_login_ctrl
node_n_index -->|"routes role UI"| node_n_dash_super
node_n_index -->|"routes role UI"| node_n_dash_admin
node_n_index -->|"routes role UI"| node_n_dash_asistente
node_n_index -->|"routes role UI"| node_n_dash_especialista
node_n_index -->|"routes role UI"| node_n_dash_paciente
node_n_login_ctrl -->|"sets guards"| node_n_session_helpers
node_n_session_helpers -->|"authorizes"| node_n_dash_super
node_n_session_helpers -->|"authorizes"| node_n_dash_admin
node_n_session_helpers -->|"authorizes"| node_n_dash_asistente
node_n_session_helpers -->|"authorizes"| node_n_dash_especialista
node_n_session_helpers -->|"authorizes"| node_n_dash_paciente
node_n_dash_super -->|"manages"| node_n_masterdata
node_n_dash_admin -->|"manages"| node_n_masterdata
node_n_dash_asistente -->|"uses"| node_n_masterdata
node_n_dash_especialista -->|"uses"| node_n_sched
node_n_dash_paciente -->|"uses"| node_n_sched
node_n_sched -->|"reads"| node_n_masterdata
node_n_sched -->|"feeds"| node_n_clinical
node_n_dash_especialista -->|"records"| node_n_clinical
node_n_dash_paciente -->|"views"| node_n_clinical
node_n_dash_super -->|"handles"| node_n_ticketing
node_n_dash_admin -->|"handles"| node_n_ticketing
node_n_dash_asistente -->|"handles"| node_n_ticketing
node_n_dash_especialista -->|"handles"| node_n_ticketing
node_n_dash_paciente -->|"handles"| node_n_ticketing
node_n_dash_super -->|"exports"| node_n_reports
node_n_dash_admin -->|"exports"| node_n_reports
node_n_dash_especialista -->|"exports"| node_n_reports
node_n_dash_paciente -->|"exports"| node_n_reports
node_n_reports -->|"renders"| node_n_views_pdf
node_n_login_ctrl -->|"renders"| node_n_views_auth
node_n_dash_super -->|"renders"| node_n_views_dash
node_n_dash_admin -->|"renders"| node_n_views_dash
node_n_dash_asistente -->|"renders"| node_n_views_dash
node_n_dash_especialista -->|"renders"| node_n_views_dash
node_n_dash_paciente -->|"renders"| node_n_views_dash
node_n_views_dash -->|"includes"| node_n_views_layouts
node_n_public_site -->|"uses"| node_n_assets
node_n_views_auth -->|"uses"| node_n_assets
node_n_views_dash -->|"uses"| node_n_assets
node_n_views_pdf -.->|"uses"| node_n_assets
node_n_login_ctrl -->|"depends on"| node_n_vendor
node_n_reports -->|"depends on"| node_n_vendor
node_n_clinical -.->|"persists"| node_n_uploads
node_n_ticketing -.->|"persists"| node_n_uploads

click node_n_index "https://github.com/cesaradso/e-vitalix/blob/main/index.php"
click node_n_login_ctrl "https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/LoginController.php"
click node_n_session_helpers "https://github.com/cesaradso/e-vitalix/blob/main/app/helpers/session_superadmin.php"
click node_n_dash_super "https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/superAdminDashboardController.php"
click node_n_dash_admin "https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/adminConsultorioDashboardController.php"
click node_n_dash_asistente "https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/asistenteController.php"
click node_n_dash_especialista "https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/especialistaDashboardController.php"
click node_n_dash_paciente "https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/pacienteDashboardController.php"
click node_n_sched "https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/citaController.php"
click node_n_clinical "https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/consultaMedicaController.php"
click node_n_masterdata "https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/consultorioController.php"
click node_n_ticketing "https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/ticketController.php"
click node_n_reports "https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/reportesPdfController.php"
click node_n_views_auth "https://github.com/cesaradso/e-vitalix/blob/main/app/views/auth/inicioSesion.php"
click node_n_views_dash "https://github.com/cesaradso/e-vitalix/blob/main/app/views/dashboard/administrador/dashboard-administrador.php"
click node_n_views_layouts "https://github.com/cesaradso/e-vitalix/blob/main/app/views/layouts/header_superadministrador.php"
click node_n_views_pdf "https://github.com/cesaradso/e-vitalix/blob/main/app/views/pdf/consulta_medica_pdf.php"
click node_n_public_site "https://github.com/cesaradso/e-vitalix/blob/main/app/views/website/index.php"
click node_n_assets "https://github.com/cesaradso/e-vitalix/blob/main/public/assets/dashboard/js/dashboards.js"
click node_n_uploads "https://github.com/cesaradso/e-vitalix/tree/main/public/uploads"
click node_n_vendor "https://github.com/cesaradso/e-vitalix/tree/main/vendor"

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_n_index,node_n_session_helpers,node_n_vendor toneBlue
class node_n_dash_super,node_n_dash_admin,node_n_dash_asistente,node_n_dash_especialista,node_n_dash_paciente toneAmber
class node_n_login_ctrl,node_n_sched,node_n_clinical,node_n_masterdata,node_n_ticketing,node_n_reports toneMint
class node_n_views_auth,node_n_views_dash,node_n_views_layouts,node_n_views_pdf,node_n_public_site toneRose
class node_n_assets,node_n_uploads toneIndigo
```

## Components

### Application

Front controller, MVC layers, and cross-cutting helpers.

- [Front controller](https://github.com/cesaradso/e-vitalix/blob/main/index.php): entrypoint · Main application entry that routes requests into the MVC app. · `index.php`
- [Session guards](https://github.com/cesaradso/e-vitalix/blob/main/app/helpers/session_superadmin.php): auth helpers · Role-specific session enforcement for superadmin, administrador, asistente, especialista, and paciente. · `app/helpers/session_superadmin.php`
- [Composer deps](https://github.com/cesaradso/e-vitalix/tree/main/vendor): dependencies · Third-party runtime libraries managed by Composer. · `vendor`

### Role areas

Separate dashboards and workflows by user type.

- [Superadmin](https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/superAdminDashboardController.php): dashboard controller · Superadministrador control plane for users, consultorios, and tickets. · `app/controllers/superAdminDashboardController.php`
- [Admin](https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/adminConsultorioDashboardController.php): dashboard controller · Administrador consultorio workspace for specialists, assistants, plans, and tickets. · `app/controllers/adminConsultorioDashboardController.php`
- [Asistente](https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/asistenteController.php): dashboard controller · Assistant workspace for patients and ticket handling. · `app/controllers/asistenteController.php`
- [Especialista](https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/especialistaDashboardController.php): dashboard controller · Specialist workspace for availability, consultations, patients, and tickets. · `app/controllers/especialistaDashboardController.php`
- [Paciente](https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/pacienteDashboardController.php): dashboard controller · Patient workspace for appointments, profile, history, and tickets. · `app/controllers/pacienteDashboardController.php`

### Domain services

Core scheduling, clinical, identity, and support subsystems.

- [Auth flow](https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/LoginController.php): controller · Login, registration, password recovery, and logout controllers. · `app/controllers/LoginController.php`
- [Agenda](https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/citaController.php): scheduling subsystem · Citas, calendarios, horarios, and available slots. · `app/controllers/citaController.php`
- [Clinical care](https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/consultaMedicaController.php): clinical subsystem · Consultation and clinical history workflows. · `app/controllers/consultaMedicaController.php`
- [Master data](https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/consultorioController.php): reference subsystem · Consultorio, especialista, paciente, usuario, roles, especialidad, ciudades, aseguradora, planes, and tipo documento management. · `app/controllers/consultorioController.php`
- [Tickets](https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/ticketController.php): support subsystem · Cross-role support ticket creation, tracking, and responses. · `app/controllers/ticketController.php`
- [PDF reports](https://github.com/cesaradso/e-vitalix/blob/main/app/controllers/reportesPdfController.php): reporting subsystem · Read-only PDF generation for multiple roles and clinical records. · `app/controllers/reportesPdfController.php`

### Presentation

Auth, dashboards, layouts, PDF views, and public website.

- [Auth views](https://github.com/cesaradso/e-vitalix/blob/main/app/views/auth/inicioSesion.php): views · Login, registration, recovery, and 404 screens. · `app/views/auth/inicioSesion.php`
- [Dashboards](https://github.com/cesaradso/e-vitalix/blob/main/app/views/dashboard/administrador/dashboard-administrador.php): views · Role-specific dashboard pages and operations. · `app/views/dashboard/administrador/dashboard-administrador.php`
- [Layouts](https://github.com/cesaradso/e-vitalix/blob/main/app/views/layouts/header_superadministrador.php): view partials · Shared headers, sidebars, topbars, and footers per role. · `app/views/layouts/header_superadministrador.php`
- [PDF views](https://github.com/cesaradso/e-vitalix/blob/main/app/views/pdf/consulta_medica_pdf.php): views · Templates used to render administrative and clinical PDFs. · `app/views/pdf/consulta_medica_pdf.php`
- [Public site](https://github.com/cesaradso/e-vitalix/blob/main/app/views/website/index.php): website · Landing page and public-facing website presentation. · `app/views/website/index.php`

### Assets and data

Client assets, static data, and uploaded artifacts.

- [Static assets](https://github.com/cesaradso/e-vitalix/blob/main/public/assets/dashboard/js/dashboards.js): frontend assets · CSS, JavaScript, images, validation scripts, and sample JSON data. · `public/assets/dashboard/js/dashboards.js`
- [Uploads](https://github.com/cesaradso/e-vitalix/tree/main/public/uploads): persistence · Uploaded files and generated artifacts, including entity-organized storage and SQL backups. · `public/uploads`

## Connections

- Front controller → Auth flow: routes auth · Front controller dispatches unauthenticated and identity flows.
- Front controller → Superadmin: routes role UI · Routes authenticated users into the correct role area.
- Front controller → Admin: routes role UI · Routes authenticated users into the correct role area.
- Front controller → Asistente: routes role UI · Routes authenticated users into the correct role area.
- Front controller → Especialista: routes role UI · Routes authenticated users into the correct role area.
- Front controller → Paciente: routes role UI · Routes authenticated users into the correct role area.
- Auth flow → Session guards: sets guards · Authentication lifecycle depends on role-based session checks.
- Session guards → Superadmin: authorizes · Superadmin sessions gate access to the superadmin dashboard.
- Session guards → Admin: authorizes · Administrador sessions gate access to the admin dashboard.
- Session guards → Asistente: authorizes · Asistente sessions gate access to the assistant dashboard.
- Session guards → Especialista: authorizes · Especialista sessions gate access to the specialist dashboard.
- Session guards → Paciente: authorizes · Paciente sessions gate access to the patient dashboard.
- Superadmin → Master data: manages · Superadmin area administers global entities and consultorios.
- Admin → Master data: manages · Administrator area maintains specialists, assistants, plans, and related records.
- Asistente → Master data: uses · Assistant workflows depend on patient and user records.
- Especialista → Agenda: uses · Specialist schedules and availability are centered on the agenda subsystem.
- Paciente → Agenda: uses · Patient booking and reprogramming depend on scheduling.
- Agenda → Master data: reads · Scheduling depends on consultorio, especialista, and patient reference data.
- Agenda → Clinical care: feeds · Booked encounters become consultation and history inputs.
- Especialista → Clinical care: records · Specialist records consultations and reviews histories.
- Paciente → Clinical care: views · Patient dashboard exposes clinical history and consultation records.
- Superadmin → Tickets: handles · Superadmin can respond to and manage tickets.
- Admin → Tickets: handles · Administrator can create, consult, and update support tickets.
- Asistente → Tickets: handles · Assistant can create and track support tickets.
- Especialista → Tickets: handles · Specialist can create and update support tickets.
- Paciente → Tickets: handles · Patient can create and follow support tickets.
- Superadmin → PDF reports: exports · Superadmin reporting area generates PDFs from domain data.
- Admin → PDF reports: exports · Administrator reporting area generates PDFs from domain data.
- Especialista → PDF reports: exports · Specialist reporting area generates PDFs from domain data.
- Paciente → PDF reports: exports · Patient reporting area generates PDFs from domain data.
- PDF reports → PDF views: renders · PDF controller uses dedicated PDF templates.
- Auth flow → Auth views: renders · Authentication controller serves auth pages.
- Superadmin → Dashboards: renders · Role controller composes dashboard screens.
- Admin → Dashboards: renders · Role controller composes dashboard screens.
- Asistente → Dashboards: renders · Role controller composes dashboard screens.
- Especialista → Dashboards: renders · Role controller composes dashboard screens.
- Paciente → Dashboards: renders · Role controller composes dashboard screens.
- Dashboards → Layouts: includes · Dashboards are assembled from shared role-specific layouts.
- Public site → Static assets: uses · Public site pulls from website assets and scripts.
- Auth views → Static assets: uses · Auth screens use dedicated auth assets and validation scripts.
- Dashboards → Static assets: uses · Dashboard screens use dashboard CSS, JS, and assets.
- PDF views → Static assets: uses · PDF templates rely on app data but remain separated from transactional UI assets.
- Auth flow → Composer deps: depends on · Authentication and related services use Composer-managed libraries.
- PDF reports → Composer deps: depends on · PDF generation likely relies on external Composer packages.
- Clinical care → Uploads: persists · Clinical artifacts and generated files are stored under uploads.
- Tickets → Uploads: persists · Ticket attachments and artifacts are stored under uploads.
