# 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. * **Plan de desarrollo:** Consultar siempre las fases y tareas del archivo `plan_desarrollo_sistema_medico.md`. --- ## 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/ ```