From 5c0cce7c1f3fa01b1f4930c2e7fdf7a92b7f700d Mon Sep 17 00:00:00 2001 From: Francisco Anfuso Date: Mon, 10 Aug 2026 16:10:47 -0300 Subject: [PATCH] Plan de desarrollo --- Readme.md | 2 + .../net8.0/vita-asistente.AssemblyInfo.cs | 2 +- .../vita-asistente.AssemblyInfoInputs.cache | 2 +- plan_desarrollo_medico.html | 170 --------------- plan_desarrollo_sistema_medico.md | 194 ++++++++++++++++++ 5 files changed, 198 insertions(+), 172 deletions(-) delete mode 100644 plan_desarrollo_medico.html create mode 100644 plan_desarrollo_sistema_medico.md diff --git a/Readme.md b/Readme.md index 5f3a7b6..8cd6b30 100644 --- a/Readme.md +++ b/Readme.md @@ -9,6 +9,7 @@ * **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`. --- @@ -147,3 +148,4 @@ TuProyecto/ │ └── Shared/ ├── Helpers/ └── Migrations/ +``` diff --git a/obj/Debug/net8.0/vita-asistente.AssemblyInfo.cs b/obj/Debug/net8.0/vita-asistente.AssemblyInfo.cs index c359389..19eb48f 100644 --- a/obj/Debug/net8.0/vita-asistente.AssemblyInfo.cs +++ b/obj/Debug/net8.0/vita-asistente.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("vita-asistente")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+3cfb4bb6f24411cd3e1e84555d8dcd442cc0b560")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+3b7e629f7516b043e50080d4fda3dec4625b1db8")] [assembly: System.Reflection.AssemblyProductAttribute("vita-asistente")] [assembly: System.Reflection.AssemblyTitleAttribute("vita-asistente")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/obj/Debug/net8.0/vita-asistente.AssemblyInfoInputs.cache b/obj/Debug/net8.0/vita-asistente.AssemblyInfoInputs.cache index 934179a..c577f76 100644 --- a/obj/Debug/net8.0/vita-asistente.AssemblyInfoInputs.cache +++ b/obj/Debug/net8.0/vita-asistente.AssemblyInfoInputs.cache @@ -1 +1 @@ -e8a48322cb1bbc106a04e3d14a80ea655d7523d601ce39e651b37642e6f08b88 +68ac8d6c1716eb6f2e80ee2727addb3d6bf2d33e35f9f985b924becf3c1df660 diff --git a/plan_desarrollo_medico.html b/plan_desarrollo_medico.html deleted file mode 100644 index 7f03ced..0000000 --- a/plan_desarrollo_medico.html +++ /dev/null @@ -1,170 +0,0 @@ - - - -
- -
- -
-
Plan de desarrollo — Sistema médico
-
ASP.NET Core + MySQL + Google Calendar + Chatwoot · 6 fases
-
-
- - -
-
- Fase 1 -
-
Infraestructura base y autenticación
-
Scaffolding del proyecto, modelos de datos, roles e Identity
-
- ≈ 2 semanas - -
-
-
-
Crear solución ASP.NET Core 6+ con MVC
Configurar Program.cs, inyección de dependencias, Pomelo MySQL y Migrations base
-
Implementar ApplicationUser con ASP.NET Identity
Campos: Nombre, Apellido, Documento, Dirección, Teléfono, RolPrincipal
-
Definir roles y políticas de autorización
Administrador, Médico, Secretaria, Recepcionista — RoleSeeder.cs
-
Construir AccountController (login / logout / registro)
Views con Bootstrap, validación del lado cliente y servidor
-
Layout compartido y navbar condicional por rol
_Layout.cshtml con menú adaptado según claims del usuario autenticado
-
Migraciones iniciales y seeder de roles
Verificar creación de tablas Identity en MySQL y usuario administrador inicial
-
-
- - -
-
- Fase 2 -
-
Gestión de usuarios y pacientes
-
CRUD completo de personal médico y pacientes
-
- ≈ 2–3 semanas - -
-
-
-
Módulo de usuarios (UsuariosController)
Listar, crear, editar, deshabilitar. Asignación de roles. Perfil de médico (Especialidad, Matrícula, Horario)
-
Modelo y migración de Paciente
Todos los campos del diseño: DNI único, ObraSocial, FechaRegistro, FK a UsuarioAlta
-
CRUD de pacientes (PacientesController)
Alta, baja lógica, modificación, búsqueda por nombre / documento. ViewModels y validaciones
-
Vista de perfil de paciente
Resumen de datos, historial de citas y acceso rápido a historia clínica
-
Autorización por rol en vistas y acciones
[Authorize(Roles = "...")] en controladores; ocultar botones según claims
-
-
- - -
-
- Fase 3 -
-
Gestión de citas y Google Calendar
-
Agenda médica con sincronización bidireccional
-
- ≈ 3 semanas - -
-
-
-
Modelo y migración de Cita
FK a Paciente y Médico, estados (Programada / Confirmada / Cancelada / Atendida), GoogleCalendarEventId
-
CRUD de citas (CitasController)
Crear, editar, cancelar. Vista de agenda diaria/semanal (FullCalendar.js o similar)
-
Configurar OAuth2 con Google
Credenciales en Google Cloud Console, flujo de autorización, almacenamiento de tokens
-
Implementar GoogleCalendarService
Crear, actualizar y eliminar eventos en Google Calendar. Mapeo de campos Cita ↔ CalendarEvent
-
Sincronización bidireccional
Webhook o polling para traer cambios externos. Reconciliación de estado por GoogleCalendarEventId
-
Notificaciones y recordatorios de cita
Envío de invitación por email al paciente al confirmar la cita
-
-
- - -
-
- Fase 4 -
-
Historia clínica
-
Registro de consultas, diagnósticos, tratamientos y recetas
-
- ≈ 2–3 semanas - -
-
-
-
Modelo y migración de HistoriaClinica
FK a Paciente y Médico, Diagnóstico (texto o CIE-10), TratamientoIndicado, ProximoControl
-
CRUD de historia clínica (HistoriaClinicaController)
Crear registro por consulta, edición restringida al médico autor, vista timeline por paciente
-
Vista de historial completo del paciente
Timeline cronológico de consultas, diagnósticos y evolución. Filtros por fecha y médico
-
Gestión de estados de paciente
Activo / En tratamiento / Derivado — visible en perfil y dashboard
-
Exportación básica a PDF
Resumen de historia clínica imprimible para el paciente o para derivación
-
-
- - -
-
- Fase 5 -
-
Dashboard e integración Chatwoot
-
Vista ejecutiva y mensajería embebida
-
- ≈ 1–2 semanas - -
-
-
-
Dashboard por rol (DashboardController)
Citas del día para médicos; resumen de pacientes y agenda para secretaría; métricas globales para admin
-
Widgets: próximas citas, pacientes registrados hoy, citas pendientes de confirmación
-
Implementar ChatwootService
Integración con API REST de Chatwoot: contador de mensajes no leídos, redirect a conversación
-
Ícono de mensajes en navbar con badge de no leídos
Polling periódico o SignalR para actualizar el contador sin recargar la página
-
-
- - -
-
- Fase 6 -
-
Calidad, seguridad y despliegue
-
Testing, hardening y puesta en producción
-
- ≈ 2 semanas - -
-
-
-
Tests unitarios e integración
xUnit para servicios y controladores críticos (GoogleCalendarService, autenticación, citas)
-
Auditoría de seguridad
Validar anti-CSRF, XSS, inyección SQL, rate limiting en login, HTTPS forzado
-
Logging y manejo de errores
Serilog o NLog con niveles diferenciados; página de error amigable; alertas por excepción
-
Optimización de consultas EF Core
Revisión de N+1 queries, índices en MySQL (DocumentoIdentidad, MedicoId, FechaHoraInicio)
-
Configuración de entorno productivo
Secrets/appsettings por entorno, cadena de conexión segura, deploy en servidor Linux o Azure
-
Documentación técnica y manual de usuario
README actualizado, guía de roles y permisos, instrucciones de onboarding para el equipo médico
-
-
- -
- - diff --git a/plan_desarrollo_sistema_medico.md b/plan_desarrollo_sistema_medico.md new file mode 100644 index 0000000..54de884 --- /dev/null +++ b/plan_desarrollo_sistema_medico.md @@ -0,0 +1,194 @@ +# Plan de Desarrollo — Sistema de Gestión Médica + +> **Stack:** ASP.NET Core 6+ MVC · MySQL (Pomelo EF Core) · Google Calendar API · Chatwoot +> **Duración estimada total:** 12–15 semanas + +--- + +## Resumen de fases + +| Fase | Nombre | Duración estimada | +|------|--------|-------------------| +| 1 | Infraestructura base y autenticación | ≈ 2 semanas | +| 2 | Gestión de usuarios y pacientes | ≈ 2–3 semanas | +| 3 | Gestión de citas y Google Calendar | ≈ 3 semanas | +| 4 | Historia clínica | ≈ 2–3 semanas | +| 5 | Dashboard e integración Chatwoot | ≈ 1–2 semanas | +| 6 | Calidad, seguridad y despliegue | ≈ 2 semanas | + +--- + +## Fase 1 — Infraestructura base y autenticación + +**Objetivo:** Scaffolding del proyecto, modelos de datos, roles e Identity. + +- [ ] Crear solución ASP.NET Core 6+ con MVC + - Configurar `Program.cs`, inyección de dependencias, Pomelo MySQL y Migrations base + +- [ ] Implementar `ApplicationUser` con ASP.NET Identity + - Campos: `Nombre`, `Apellido`, `Documento`, `Dirección`, `Teléfono`, `RolPrincipal` + +- [ ] Definir roles y políticas de autorización + - Roles: `Administrador`, `Médico`, `Secretaria`, `Recepcionista` + - Implementar `RoleSeeder.cs` + +- [ ] Construir `AccountController` (login / logout / registro) + - Views con Bootstrap, validación del lado cliente y servidor + +- [ ] Layout compartido y navbar condicional por rol + - `_Layout.cshtml` con menú adaptado según claims del usuario autenticado + +- [ ] Migraciones iniciales y seeder de roles + - Verificar creación de tablas Identity en MySQL y usuario administrador inicial + +--- + +## Fase 2 — Gestión de usuarios y pacientes + +**Objetivo:** CRUD completo de personal médico y pacientes. + +- [ ] Módulo de usuarios (`UsuariosController`) + - Listar, crear, editar, deshabilitar + - Asignación de roles + - Perfil de médico: `Especialidad`, `MatriculaProfesional`, `HorarioAtencion` + +- [ ] Modelo y migración de `Paciente` + - Campos: `Nombres`, `Apellidos`, `FechaNacimiento`, `Genero`, `DocumentoIdentidad` (único), `Direccion`, `Telefono`, `Email`, `ObraSocial`, `FechaRegistro`, FK a `UsuarioAlta` + +- [ ] CRUD de pacientes (`PacientesController`) + - Alta, baja lógica, modificación + - Búsqueda por nombre / documento + - ViewModels y validaciones + +- [ ] Vista de perfil de paciente + - Resumen de datos, historial de citas y acceso rápido a historia clínica + +- [ ] Autorización por rol en vistas y acciones + - `[Authorize(Roles = "...")]` en controladores + - Ocultar botones según claims del usuario + +> **Decisión pendiente:** Definir si `Médico` extiende `ApplicationUser` (relación 1:1) o es una entidad separada. Resolverlo antes de las migraciones de Fase 3, ya que afecta todas las FK de `Cita` e `HistoriaClinica`. + +--- + +## Fase 3 — Gestión de citas y Google Calendar + +**Objetivo:** Agenda médica con sincronización bidireccional. + +> ⚠️ **Fase de mayor riesgo.** La integración OAuth2 y la sincronización bidireccional son los puntos más propensos a imprevistos. Reservar tiempo adicional. + +- [ ] Modelo y migración de `Cita` + - FK a `Paciente` y `Médico` + - Estados: `Programada`, `Confirmada`, `Cancelada`, `Atendida` + - Campo `GoogleCalendarEventId` para sincronización + +- [ ] CRUD de citas (`CitasController`) + - Crear, editar, cancelar + - Vista de agenda diaria/semanal (FullCalendar.js o similar) + +- [ ] Configurar OAuth2 con Google + - Credenciales en Google Cloud Console + - Flujo de autorización y almacenamiento seguro de tokens de refresco + +- [ ] Implementar `GoogleCalendarService` + - Crear, actualizar y eliminar eventos en Google Calendar + - Mapeo de campos `Cita` ↔ `CalendarEvent` + +- [ ] Sincronización bidireccional + - Webhook o polling para traer cambios externos + - Reconciliación de estado por `GoogleCalendarEventId` + +- [ ] Notificaciones y recordatorios de cita + - Envío de invitación por email al paciente al confirmar la cita + +--- + +## Fase 4 — Historia clínica + +**Objetivo:** Registro de consultas, diagnósticos, tratamientos y recetas. + +- [ ] Modelo y migración de `HistoriaClinica` + - FK a `Paciente` y `Médico` + - Campos: `MotivoConsulta`, `Diagnostico` (texto o código CIE-10), `TratamientoIndicado`, `Observaciones`, `ProximoControl`, `EstadoPaciente` + +- [ ] CRUD de historia clínica (`HistoriaClinicaController`) + - Crear registro por consulta + - Edición restringida al médico autor + - Vista timeline por paciente + +- [ ] Vista de historial completo del paciente + - Timeline cronológico de consultas, diagnósticos y evolución + - Filtros por fecha y médico + +- [ ] Gestión de estados de paciente + - `Activo` / `En tratamiento` / `Derivado` — visible en perfil y dashboard + +- [ ] Exportación básica a PDF + - Resumen de historia clínica imprimible para el paciente o para derivación + +--- + +## Fase 5 — Dashboard e integración Chatwoot + +**Objetivo:** Vista ejecutiva por rol y mensajería embebida. + +- [ ] Dashboard por rol (`DashboardController`) + - **Médico:** citas del día, próximos controles + - **Secretaría:** agenda general, pacientes registrados hoy, citas pendientes de confirmación + - **Administrador:** métricas globales del sistema + +- [ ] Widgets del dashboard + - Próximas citas, pacientes registrados hoy, citas pendientes de confirmación + +- [ ] Implementar `ChatwootService` + - Integración con API REST de Chatwoot + - Contador de mensajes no leídos y redirect a conversación + +- [ ] Ícono de mensajes en navbar con badge de no leídos + - Polling periódico o SignalR para actualizar el contador sin recargar la página + +--- + +## Fase 6 — Calidad, seguridad y despliegue + +**Objetivo:** Testing, hardening y puesta en producción. + +- [ ] Tests unitarios e integración + - xUnit para servicios y controladores críticos (`GoogleCalendarService`, autenticación, citas) + +- [ ] Auditoría de seguridad + - Validar anti-CSRF, XSS, inyección SQL + - Rate limiting en login, HTTPS forzado + +- [ ] Logging y manejo de errores + - Serilog o NLog con niveles diferenciados + - Página de error amigable; alertas por excepción crítica + +- [ ] Optimización de consultas EF Core + - Revisión de N+1 queries + - Índices en MySQL: `DocumentoIdentidad`, `MedicoId`, `FechaHoraInicio` + +- [ ] Configuración de entorno productivo + - `appsettings` por entorno (Development / Production) + - Cadena de conexión segura, secrets management + - Deploy en servidor Linux o Azure App Service + +- [ ] Documentación técnica y manual de usuario + - README actualizado con instrucciones de setup + - Guía de roles y permisos + - Manual de onboarding para el equipo médico y administrativo + +--- + +## Dependencias entre fases + +``` +Fase 1 → Fase 2 → Fase 3 → Fase 4 + ↘ + Fase 5 (Dashboard consume datos de Fases 2–4) + ↘ + Fase 6 (transversal a todo el proyecto) +``` + +> La **Fase 1** es prerequisito duro para todo lo demás. +> La **Fase 6** puede iniciarse parcialmente en paralelo desde la Fase 3 en adelante (testing y logging).