# Arquitectura y Diseño de Sistema de Gestión Médica

## Visión General de la Arquitectura (Alto Nivel)

* **Frontend:** ASP.NET Core MVC (Razor Views) con Bootstrap (o framework CSS equivalente) para la interfaz de usuario.
* **Backend:** ASP.NET Core 6+ con inyección de dependencias, Identity para autenticación y Entity Framework Core (con Pomelo MySQL) para acceso a datos.
* **Base de Datos:** MySQL.
* **Servicios Externos:**
  * **Google Calendar API:** Gestión e integración de citas de la agenda médica.
  * **Chatwoot:** Mensajería (redirección y notificaciones básicas).
* **Seguridad:** Autenticación por Identity con roles (`Administrador`, `Médico`, `Secretaria`, `Recepcionista`, etc.) y autorización mediante políticas personalizadas.

---

## Módulos Funcionales

1. **Gestión de Usuarios y Roles:** Administración del personal administrativo y médico.
2. **Gestión de Pacientes:** Alta, baja, modificación e historial general.
3. **Gestión de Citas y Agenda:** Sincronización e integración con Google Calendar.
4. **Historia Clínica:** Registro de diagnósticos, tratamientos, evolución y recetas.
5. **Dashboard / Resumen:** Vista ejecutiva rápida para secretarias y cuerpo médico.
6. **Integración con Chatwoot:** Acceso directo a mensajería y contador de mensajes no leídos.

---

## Diseño de Datos (Entidades Principales)

### 1. Usuario (`ApplicationUser`)

Representa al personal del sistema. Extiende de la entidad Identity básica.

* `Nombre`
* `Apellido`
* `Documento`
* `Dirección`
* `Teléfono`
* `Email`
* `RolPrincipal`

> **Nota:** El rol determina los permisos y accesos dentro del sistema.

---

### 2. Paciente

Representa a la persona que recibe atención médica.

* `Id` (int o Guid)
* `Nombres`
* `Apellidos`
* `FechaNacimiento`
* `Genero`
* `DocumentoIdentidad` (único)
* `Direccion` (opcional)
* `Telefono`
* `Email` (opcional)
* `ObraSocial` / `PlanDeSalud` (opcional)
* `FechaRegistro`
* `UsuarioAltaId` (relación con `ApplicationUser`)

---

### 3. Médico

Perfil extendido para usuarios con rol médico. Se recomienda extender `ApplicationUser` o mantener una relación 1 a 1.

* `Especialidad`
* `MatriculaProfesional`
* `HorarioAtencion`

---

### 4. Cita

Entidad de control para agendas y sincronización externa.

* `Id`
* `PacienteId` (FK -> Paciente)
* `MedicoId` (FK -> ApplicationUser / Médico)
* `FechaHoraInicio`
* `FechaHoraFin` (o duración)
* `Motivo` (texto breve)
* `Estado` (`Programada`, `Confirmada`, `Cancelada`, `Atendida`)
* `GoogleCalendarEventId` (para sincronización bidireccional)
* `FechaCreacion`
* `UsuarioCreacionId` (FK -> ApplicationUser)

---

### 5. Historia Clínica

Registro médico agrupado por consulta realizada.

* `Id`
* `PacienteId` (FK -> Paciente)
* `MedicoId` (FK -> ApplicationUser / Médico)
* `FechaConsulta`
* `MotivoConsulta`
* `Diagnostico` (texto o código CIE-10)
* `TratamientoIndicado`
* `Observaciones` / `Notas`
* `ProximoControl` (fecha sugerida)
* `EstadoPaciente` (`Activo`, `En Tratamiento`, `Derivado`, etc.)

---

## Relaciones Principales

* **Usuario -> Paciente:** `1 : N` (un usuario registra múltiples pacientes).
* **Médico -> Cita:** `1 : N` (un médico atiende múltiples citas).
* **Paciente -> Cita:** `1 : N` (un paciente puede tener múltiples citas).
* **Paciente -> HistoriaClinica:** `1 : N` (un paciente posee múltiples registros clínicos).
* **Médico -> HistoriaClinica:** `1 : N` (un médico registra múltiples historias clínicas).

---

## Estructura del Proyecto

```text
TuProyecto/
├── Controllers/
│   ├── AccountController.cs
│   ├── UsuariosController.cs
│   ├── PacientesController.cs
│   ├── CitasController.cs
│   ├── HistoriaClinicaController.cs
│   └── DashboardController.cs
├── Models/
│   ├── ApplicationUser.cs
│   ├── Paciente.cs
│   ├── Cita.cs
│   ├── HistoriaClinica.cs
│   └── ViewModels/
├── Data/
│   ├── ApplicationDbContext.cs
│   └── Seeders/
│       └── RoleSeeder.cs
├── Services/
│   ├── GoogleCalendarService.cs
│   ├── ChatwootService.cs
│   └── IUsuarioService.cs
├── Views/
│   ├── Usuarios/
│   ├── Pacientes/
│   ├── Citas/
│   ├── HistoriaClinica/
│   └── Shared/
├── Helpers/
└── Migrations/
