From a774b00839ac7eaa18518ffc4fb2f6e9be4f4678 Mon Sep 17 00:00:00 2001 From: rckrdmrd Date: Sun, 4 Jan 2026 06:12:11 -0600 Subject: [PATCH] Initial commit - erp-clinicas --- .env.example | 182 +++++ INVENTARIO.yml | 31 + PROJECT-STATUS.md | 178 +++++ README.md | 36 + database/HERENCIA-ERP-CORE.md | 222 +++++++ database/README.md | 83 +++ database/init/00-extensions.sql | 25 + database/init/01-create-schemas.sql | 15 + database/init/02-rls-functions.sql | 37 ++ database/init/03-clinical-tables.sql | 628 ++++++++++++++++++ database/init/04-seed-data.sql | 34 + docs/00-vision-general/VISION-CLINICAS.md | 107 +++ .../CL-001-fundamentos/README.md | 20 + .../CL-002-pacientes/README.md | 20 + .../CL-003-citas/README.md | 20 + .../CL-004-consultas/README.md | 20 + .../CL-005-recetas/README.md | 20 + .../CL-006-laboratorio/README.md | 20 + .../CL-007-farmacia/README.md | 20 + .../CL-008-facturacion/README.md | 20 + .../CL-009-reportes/README.md | 20 + .../CL-010-telemedicina/README.md | 20 + .../CL-011-expediente/README.md | 20 + .../CL-012-imagenologia/README.md | 20 + docs/02-definicion-modulos/INDICE-MODULOS.md | 136 ++++ docs/08-epicas/EPIC-CL-001-fundamentos.md | 66 ++ docs/08-epicas/EPIC-CL-002-pacientes.md | 247 +++++++ docs/08-epicas/EPIC-CL-003-citas.md | 270 ++++++++ docs/08-epicas/EPIC-CL-004-consultas.md | 277 ++++++++ docs/08-epicas/EPIC-CL-005-recetas.md | 243 +++++++ docs/08-epicas/EPIC-CL-006-laboratorio.md | 242 +++++++ docs/08-epicas/EPIC-CL-007-farmacia.md | 239 +++++++ docs/08-epicas/EPIC-CL-008-facturacion.md | 268 ++++++++ docs/08-epicas/EPIC-CL-009-reportes.md | 223 +++++++ docs/08-epicas/EPIC-CL-010-telemedicina.md | 278 ++++++++ docs/08-epicas/EPIC-CL-011-expediente.md | 241 +++++++ docs/08-epicas/EPIC-CL-012-imagenologia.md | 314 +++++++++ docs/README.md | 38 ++ docs/_MAP.md | 40 ++ .../00-guidelines/CONTEXTO-PROYECTO.md | 159 +++++ .../00-guidelines/HERENCIA-DIRECTIVAS.md | 89 +++ .../00-guidelines/HERENCIA-ERP-CORE.md | 184 +++++ orchestration/00-guidelines/HERENCIA-SIMCO.md | 138 ++++ .../00-guidelines/HERENCIA-SPECS-CORE.md | 199 ++++++ .../00-guidelines/HERENCIA-SPECS-ERP-CORE.md | 162 +++++ orchestration/00-guidelines/PROJECT-STATUS.md | 33 + orchestration/PROXIMA-ACCION.md | 122 ++++ .../DIRECTIVA-EXPEDIENTE-CLINICO.md | 242 +++++++ .../directivas/DIRECTIVA-GESTION-CITAS.md | 242 +++++++ .../environment/PROJECT-ENV-CONFIG.yml | 262 ++++++++ .../inventarios/BACKEND_INVENTORY.yml | 80 +++ .../inventarios/DATABASE_INVENTORY.yml | 158 +++++ .../inventarios/DEPENDENCY_GRAPH.yml | 61 ++ .../inventarios/FRONTEND_INVENTORY.yml | 57 ++ .../inventarios/MASTER_INVENTORY.yml | 213 ++++++ orchestration/inventarios/README.md | 103 +++ .../inventarios/TRACEABILITY_MATRIX.yml | 514 ++++++++++++++ .../prompts/PROMPT-CL-BACKEND-AGENT.md | 182 +++++ .../referencias/DEPENDENCIAS-ERP-CORE.yml | 97 +++ .../referencias/DEPENDENCIAS-SHARED.yml | 62 ++ orchestration/trazas/TRAZA-TAREAS-BACKEND.md | 38 ++ orchestration/trazas/TRAZA-TAREAS-DATABASE.md | 38 ++ orchestration/trazas/TRAZA-TAREAS-FRONTEND.md | 38 ++ 63 files changed, 8413 insertions(+) create mode 100644 .env.example create mode 100644 INVENTARIO.yml create mode 100644 PROJECT-STATUS.md create mode 100644 README.md create mode 100644 database/HERENCIA-ERP-CORE.md create mode 100644 database/README.md create mode 100644 database/init/00-extensions.sql create mode 100644 database/init/01-create-schemas.sql create mode 100644 database/init/02-rls-functions.sql create mode 100644 database/init/03-clinical-tables.sql create mode 100644 database/init/04-seed-data.sql create mode 100644 docs/00-vision-general/VISION-CLINICAS.md create mode 100644 docs/02-definicion-modulos/CL-001-fundamentos/README.md create mode 100644 docs/02-definicion-modulos/CL-002-pacientes/README.md create mode 100644 docs/02-definicion-modulos/CL-003-citas/README.md create mode 100644 docs/02-definicion-modulos/CL-004-consultas/README.md create mode 100644 docs/02-definicion-modulos/CL-005-recetas/README.md create mode 100644 docs/02-definicion-modulos/CL-006-laboratorio/README.md create mode 100644 docs/02-definicion-modulos/CL-007-farmacia/README.md create mode 100644 docs/02-definicion-modulos/CL-008-facturacion/README.md create mode 100644 docs/02-definicion-modulos/CL-009-reportes/README.md create mode 100644 docs/02-definicion-modulos/CL-010-telemedicina/README.md create mode 100644 docs/02-definicion-modulos/CL-011-expediente/README.md create mode 100644 docs/02-definicion-modulos/CL-012-imagenologia/README.md create mode 100644 docs/02-definicion-modulos/INDICE-MODULOS.md create mode 100644 docs/08-epicas/EPIC-CL-001-fundamentos.md create mode 100644 docs/08-epicas/EPIC-CL-002-pacientes.md create mode 100644 docs/08-epicas/EPIC-CL-003-citas.md create mode 100644 docs/08-epicas/EPIC-CL-004-consultas.md create mode 100644 docs/08-epicas/EPIC-CL-005-recetas.md create mode 100644 docs/08-epicas/EPIC-CL-006-laboratorio.md create mode 100644 docs/08-epicas/EPIC-CL-007-farmacia.md create mode 100644 docs/08-epicas/EPIC-CL-008-facturacion.md create mode 100644 docs/08-epicas/EPIC-CL-009-reportes.md create mode 100644 docs/08-epicas/EPIC-CL-010-telemedicina.md create mode 100644 docs/08-epicas/EPIC-CL-011-expediente.md create mode 100644 docs/08-epicas/EPIC-CL-012-imagenologia.md create mode 100644 docs/README.md create mode 100644 docs/_MAP.md create mode 100644 orchestration/00-guidelines/CONTEXTO-PROYECTO.md create mode 100644 orchestration/00-guidelines/HERENCIA-DIRECTIVAS.md create mode 100644 orchestration/00-guidelines/HERENCIA-ERP-CORE.md create mode 100644 orchestration/00-guidelines/HERENCIA-SIMCO.md create mode 100644 orchestration/00-guidelines/HERENCIA-SPECS-CORE.md create mode 100644 orchestration/00-guidelines/HERENCIA-SPECS-ERP-CORE.md create mode 100644 orchestration/00-guidelines/PROJECT-STATUS.md create mode 100644 orchestration/PROXIMA-ACCION.md create mode 100644 orchestration/directivas/DIRECTIVA-EXPEDIENTE-CLINICO.md create mode 100644 orchestration/directivas/DIRECTIVA-GESTION-CITAS.md create mode 100644 orchestration/environment/PROJECT-ENV-CONFIG.yml create mode 100644 orchestration/inventarios/BACKEND_INVENTORY.yml create mode 100644 orchestration/inventarios/DATABASE_INVENTORY.yml create mode 100644 orchestration/inventarios/DEPENDENCY_GRAPH.yml create mode 100644 orchestration/inventarios/FRONTEND_INVENTORY.yml create mode 100644 orchestration/inventarios/MASTER_INVENTORY.yml create mode 100644 orchestration/inventarios/README.md create mode 100644 orchestration/inventarios/TRACEABILITY_MATRIX.yml create mode 100644 orchestration/prompts/PROMPT-CL-BACKEND-AGENT.md create mode 100644 orchestration/referencias/DEPENDENCIAS-ERP-CORE.yml create mode 100644 orchestration/referencias/DEPENDENCIAS-SHARED.yml create mode 100644 orchestration/trazas/TRAZA-TAREAS-BACKEND.md create mode 100644 orchestration/trazas/TRAZA-TAREAS-DATABASE.md create mode 100644 orchestration/trazas/TRAZA-TAREAS-FRONTEND.md diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..820e866 --- /dev/null +++ b/.env.example @@ -0,0 +1,182 @@ +# =========================================== +# CLINICAS - Variables de Entorno +# =========================================== +# Copiar este archivo a .env y configurar valores +# Puertos según DEVENV-PORTS.md +# NOTA: Este sistema requiere cumplimiento NOM-024 y LFPDPPP + +# ------------------------------------------- +# BASE DE DATOS POSTGRESQL +# ------------------------------------------- +DB_HOST=localhost +DB_PORT=5437 +DB_NAME=clinicas_db +DB_USER=clinicas_user +DB_PASSWORD=clinicas_secret_2025 + +# URL de conexion completa +DATABASE_URL=postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME} + +# ------------------------------------------- +# SCHEMAS DE BASE DE DATOS +# ------------------------------------------- +# Schemas heredados de erp-core +DB_SCHEMA_AUTH=auth +DB_SCHEMA_CORE=core +DB_SCHEMA_INVENTORY=inventory + +# Schemas propios de clínicas +DB_SCHEMA_CLINICAL=clinical +DB_SCHEMA_PHARMACY=pharmacy +DB_SCHEMA_LABORATORY=laboratory +DB_SCHEMA_IMAGING=imaging +DB_SCHEMA_TELEMEDICINE=telemedicine + +# ------------------------------------------- +# APLICACION +# ------------------------------------------- +APP_NAME=clinicas +APP_ENV=development +APP_PORT=3061 +APP_URL=http://localhost:3061 + +# ------------------------------------------- +# FRONTEND +# ------------------------------------------- +FRONTEND_PORT=3060 +FRONTEND_URL=http://localhost:3060 + +# ------------------------------------------- +# AUTENTICACION JWT +# ------------------------------------------- +JWT_SECRET=your_jwt_secret_here_change_in_production +JWT_EXPIRES_IN=8h +JWT_REFRESH_EXPIRES_IN=24h + +# ------------------------------------------- +# TWO-FACTOR AUTHENTICATION (OBLIGATORIO) +# ------------------------------------------- +# Requerido para personal médico según LFPDPPP +TWO_FACTOR_ENABLED=true +TWO_FACTOR_METHOD=totp +TOTP_ISSUER=ERP-Clinicas +TOTP_WINDOW=1 + +# SMS 2FA (Twilio) +TWILIO_ACCOUNT_SID= +TWILIO_AUTH_TOKEN= +TWILIO_PHONE_FROM= + +# ------------------------------------------- +# ENCRIPTACION DE DATOS SENSIBLES (LFPDPPP) +# ------------------------------------------- +# CRITICO: Cambiar en producción +ENCRYPTION_KEY=your_32_byte_encryption_key_here +ENCRYPTION_ALGORITHM=aes-256-gcm +ENCRYPTION_IV_LENGTH=16 + +# Campos encriptados automáticamente: +# - antecedentes_medicos +# - alergias +# - diagnosticos +# - notas_clinicas + +# ------------------------------------------- +# MULTI-TENANT +# ------------------------------------------- +TENANT_ID_HEADER=X-Tenant-ID +TENANT_ID_PARAM=tenant_id + +# ------------------------------------------- +# ALMACENAMIENTO DE ARCHIVOS +# ------------------------------------------- +STORAGE_TYPE=local +STORAGE_PATH=./uploads +# Para producción usar S3 con encriptación: +# STORAGE_TYPE=s3 +# AWS_ACCESS_KEY_ID= +# AWS_SECRET_ACCESS_KEY= +# AWS_REGION=us-east-1 +# AWS_S3_BUCKET=clinicas-files +# AWS_S3_ENCRYPTION=AES256 + +# ------------------------------------------- +# NOTIFICACIONES +# ------------------------------------------- +# Email (SMTP) +SMTP_HOST=smtp.gmail.com +SMTP_PORT=587 +SMTP_USER= +SMTP_PASSWORD= +SMTP_FROM=noreply@clinicas-erp.com + +# SMS para recordatorios de citas +SMS_PROVIDER=twilio +SMS_REMINDER_HOURS_BEFORE=24 + +# ------------------------------------------- +# FACTURACION ELECTRONICA (SAT) +# ------------------------------------------- +SAT_ENVIRONMENT=sandbox +SAT_RFC= +SAT_CER_PATH=./certs/csd.cer +SAT_KEY_PATH=./certs/csd.key +SAT_KEY_PASSWORD= + +# ------------------------------------------- +# LOGGING Y AUDITORIA +# ------------------------------------------- +LOG_LEVEL=debug +LOG_FORMAT=json + +# Auditoría de accesos (NOM-024) +AUDIT_ENABLED=true +AUDIT_RETENTION_YEARS=10 +AUDIT_LOG_MEDICAL_RECORD_ACCESS=true +AUDIT_LOG_PRESCRIPTION_CREATED=true +AUDIT_LOG_PATIENT_DATA_MODIFIED=true + +# ------------------------------------------- +# REDIS (Cache y Colas) +# ------------------------------------------- +REDIS_HOST=localhost +REDIS_PORT=6384 +REDIS_PASSWORD= + +# ------------------------------------------- +# CORS +# ------------------------------------------- +CORS_ORIGIN=http://localhost:3060,http://localhost:3061 + +# ------------------------------------------- +# EXPEDIENTE CLINICO (NOM-024-SSA3-2012) +# ------------------------------------------- +# Estructura SOAP obligatoria +NOM024_SOAP_REQUIRED=true +NOM024_CIE10_VALIDATION=true +NOM024_PRESCRIPTION_SIGNATURE_REQUIRED=true +NOM024_CONSENT_REQUIRED=true + +# ------------------------------------------- +# TELEMEDICINA (Opcional) +# ------------------------------------------- +TELEMEDICINE_ENABLED=false +TELEMEDICINE_PROVIDER=jitsi +TELEMEDICINE_SERVER_URL= +TELEMEDICINE_RECORDING_ENABLED=false + +# ------------------------------------------- +# IMAGENOLOGIA DICOM (Opcional) +# ------------------------------------------- +DICOM_ENABLED=false +DICOM_SERVER_HOST= +DICOM_SERVER_PORT=4242 +DICOM_AE_TITLE=CLINICAS_ERP + +# ------------------------------------------- +# INTEROPERABILIDAD (HL7/FHIR) +# ------------------------------------------- +HL7_ENABLED=false +HL7_ENDPOINT= +FHIR_ENABLED=false +FHIR_SERVER_URL= diff --git a/INVENTARIO.yml b/INVENTARIO.yml new file mode 100644 index 0000000..31a14d5 --- /dev/null +++ b/INVENTARIO.yml @@ -0,0 +1,31 @@ +# Inventario generado por EPIC-008 +proyecto: erp-clinicas +fecha: "2026-01-04" +generado_por: "inventory-project.sh v1.0.0" + +inventario: + docs: + total: 27 + por_tipo: + markdown: 27 + yaml: 0 + json: 0 + orchestration: + total: 23 + por_tipo: + markdown: 14 + yaml: 9 + json: 0 + +problemas: + archivos_obsoletos: 0 + referencias_antiguas: 0 + simco_faltantes: + - _MAP.md en docs/ + - PROJECT-STATUS.md + +estado_simco: + herencia_simco: true + contexto_proyecto: true + map_docs: false + project_status: false diff --git a/PROJECT-STATUS.md b/PROJECT-STATUS.md new file mode 100644 index 0000000..6836b57 --- /dev/null +++ b/PROJECT-STATUS.md @@ -0,0 +1,178 @@ +# ESTADO DEL PROYECTO - ERP Clínicas + +**Proyecto:** ERP Clínicas (Proyecto Independiente) +**Estado:** 📋 En planificación +**Progreso:** 25% +**Última actualización:** 2025-12-08 + +--- + +## 📊 RESUMEN EJECUTIVO + +| Área | Estado | Descripción | +|------|--------|-------------| +| **Documentación** | 🟡 Inicial | 12 módulos definidos, estructura base | +| **DDL/Schemas** | ❌ No iniciado | Pendiente diseño de BD | +| **Backend** | ❌ No iniciado | Pendiente desarrollo | +| **Frontend** | ❌ No iniciado | Pendiente desarrollo | + +--- + +## 📋 MÓDULOS DEFINIDOS (12) + +| Código | Nombre | Descripción | Reutilización | Estado | +|--------|--------|-------------|---------------|--------| +| CL-001 | Fundamentos | Auth, Users, Tenants | 100% core | PLANIFICADO | +| CL-002 | Pacientes | Registro y expediente | 20% core | PLANIFICADO | +| CL-003 | Citas | Agenda médica | 30% core | PLANIFICADO | +| CL-004 | Consultas | Notas médicas | 0% (nuevo) | PLANIFICADO | +| CL-005 | Recetas | Prescripciones | 10% core | PLANIFICADO | +| CL-006 | Laboratorio | Estudios y resultados | 10% core | PLANIFICADO | +| CL-007 | Farmacia | Inventario medicamentos | 60% core | PLANIFICADO | +| CL-008 | Facturación | Cobros y seguros | 50% core | PLANIFICADO | +| CL-009 | Reportes | Estadísticas clínicas | 60% core | PLANIFICADO | +| CL-010 | Telemedicina | Consultas remotas | 0% (nuevo) | PLANIFICADO | +| CL-011 | Expediente | Historia clínica completa | 10% core | PLANIFICADO | +| CL-012 | Imagenología | Estudios DICOM | 5% core | PLANIFICADO | + +**Story Points Estimados:** 451 SP (detallado en épicas) + +--- + +## 🏥 DOMINIO DE NEGOCIO + +### Modelo de Negocio +- Clínicas y consultorios médicos +- Consultas presenciales y telemedicina +- Expediente clínico electrónico +- Integración con laboratorios e imagen + +### Proceso Principal +``` +Cita → Check-in → Consulta → Diagnóstico → Receta → Facturación + ↓ + Estudios (Lab/Imagen) + ↓ + Expediente Clínico +``` + +### Cumplimiento Normativo +- NOM-024-SSA3-2012 (Expediente clínico) +- NOM-004-SSA3-2012 (Sistemas de información) +- NOM-151-SCFI-2016 (Firma electrónica) +- CIE-10 (Codificación de diagnósticos) + +--- + +## 📁 ESTRUCTURA DE DOCUMENTACIÓN + +``` +docs/ +├── 00-vision-general/ +│ └── VISION-CLINICAS.md ✅ +├── 02-definicion-modulos/ +│ ├── INDICE-MODULOS.md ✅ +│ ├── CL-001-fundamentos/README.md ✅ +│ ├── CL-002-pacientes/README.md ✅ +│ ├── CL-003-citas/README.md ✅ +│ ├── CL-004-consultas/README.md ✅ +│ ├── CL-005-recetas/README.md ✅ +│ ├── CL-006-laboratorio/README.md ✅ +│ ├── CL-007-farmacia/README.md ✅ +│ ├── CL-008-facturacion/README.md ✅ +│ ├── CL-009-reportes/README.md ✅ +│ ├── CL-010-telemedicina/README.md ✅ +│ ├── CL-011-expediente/README.md ✅ +│ └── CL-012-imagenologia/README.md ✅ +└── 08-epicas/ + └── EPIC-CL-001-fundamentos.md ✅ +``` + +--- + +## 🎯 PRÓXIMOS PASOS + +### Fase 1: Documentación Detallada +1. [ ] Crear épicas completas (EPIC-CL-002 a 012) +2. [ ] Documentar User Stories por módulo +3. [ ] Definir requerimientos funcionales (RF) +4. [ ] Crear especificaciones técnicas (ET) +5. [ ] Documentar cumplimiento normativo + +### Fase 2: Diseño de Base de Datos +6. [ ] Diseñar schemas de BD +7. [ ] Implementar DDL +8. [ ] Documentar modelo de datos + +### Fase 3: Desarrollo +9. [ ] Implementar backend (TypeScript/Express) +10. [ ] Implementar frontend (React) +11. [ ] Integración telemedicina (WebRTC) +12. [ ] Integración DICOM +13. [ ] Testing + +--- + +## 📈 MÉTRICAS + +| Métrica | Valor | +|---------|-------| +| Módulos definidos | 12 | +| Épicas creadas | 12/12 ✅ | +| User Stories | 0 (pendiente) | +| Story Points | 451 | +| Archivos MD | 31 | +| Archivos SQL | 0 | +| Archivos TS | 0 | + +--- + +## 🏗️ ARQUITECTURA + +**Tipo:** Proyecto Independiente (fork conceptual del ERP-Core) + +**Patrones a reutilizar del ERP-Core:** +- Multi-tenancy con RLS (para cadenas de clínicas) +- Estructura de autenticación con 2FA obligatorio +- Patrones de inventario (farmacia) +- Sistema de reportes + +**Módulos 100% nuevos:** +- CL-004: Consultas (notas médicas estructuradas) +- CL-010: Telemedicina (videoconsultas WebRTC) +- CL-012: Imagenología (visor DICOM) + +**Integraciones externas:** +- Proveedores de videollamadas (Twilio, Zoom API) +- Servidores PACS para imagen médica +- Servicios de timbrado CFDI + +**Opera de forma autónoma:** No requiere ERP-Core instalado + +--- + +## ⚠️ CONSIDERACIONES ESPECIALES + +### Seguridad de Datos Médicos +- Encriptación de datos sensibles (expedientes) +- Auditoría completa de accesos +- Consentimiento informado digital +- Respaldo automático de expedientes + +### Cumplimiento Normativo +- Implementar estructura de NOM-024-SSA3-2012 +- Firma electrónica para recetas (NOM-151) +- Codificación CIE-10 para diagnósticos + +--- + +## 🔗 REFERENCIAS + +- Índice de módulos: `docs/02-definicion-modulos/INDICE-MODULOS.md` +- Visión: `docs/00-vision-general/VISION-CLINICAS.md` +- SPECS heredadas: `orchestration/00-guidelines/HERENCIA-SPECS-CORE.md` +- Directivas: `orchestration/directivas/` + +--- + +**Última actualización:** 2025-12-08 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e792d76 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# ERP Clinicas + +Sistema ERP especializado para gestion de clinicas y centros medicos. + +## Descripcion + +Vertical del sistema ERP-Core adaptado para el sector salud, con funcionalidades especificas para: +- Gestion de pacientes +- Citas y agenda medica +- Historias clinicas +- Facturacion de servicios medicos +- Inventario de insumos medicos + +## Estructura + +``` +erp-clinicas/ +├── docs/ # Documentacion del proyecto +├── orchestration/ # Configuracion de orquestacion SIMCO +└── apps/ # Aplicaciones (si aplica) +``` + +## Estado + +Este proyecto hereda del nucleo ERP-Core y aplica las directivas SIMCO del workspace. + +## Referencias + +- ERP-Core: Nucleo base del sistema +- ERP-Suite: Suite completa de ERP +- Directivas SIMCO: Ver orchestration/00-guidelines/ + +--- + +**Sistema:** NEXUS v3.4 +**Tipo:** Vertical ERP diff --git a/database/HERENCIA-ERP-CORE.md b/database/HERENCIA-ERP-CORE.md new file mode 100644 index 0000000..505bb9a --- /dev/null +++ b/database/HERENCIA-ERP-CORE.md @@ -0,0 +1,222 @@ +# Herencia de Base de Datos - ERP Core -> Clínicas + +**Fecha:** 2025-12-08 +**Versión:** 1.0 +**Vertical:** Clínicas +**Nivel:** 2B.2 + +--- + +## RESUMEN + +La vertical de Clínicas hereda los schemas base del ERP Core y extiende con schemas específicos del dominio de gestión médica y expediente clínico. + +**Ubicación DDL Core:** `apps/erp-core/database/ddl/` + +--- + +## ARQUITECTURA DE HERENCIA + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ ERP CORE (Base) │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │ auth │ │ core │ │financial│ │inventory│ │ hr │ │ +│ │ 26 tbl │ │ 12 tbl │ │ 15 tbl │ │ 15 tbl │ │ 6 tbl │ │ +│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │ sales │ │analytics│ │ system │ │ crm │ │ +│ │ 6 tbl │ │ 5 tbl │ │ 10 tbl │ │ 5 tbl │ │ +│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ +│ TOTAL: ~100 tablas heredadas │ +└─────────────────────────────────────────────────────────────────┘ + │ + │ HEREDA + ▼ +┌─────────────────────────────────────────────────────────────────┐ +│ CLÍNICAS (Extensiones) │ +│ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ +│ │ medical │ │ appointments │ │ patients │ │ +│ │ (expediente) │ │ (citas) │ │ (pacientes) │ │ +│ └───────────────┘ └───────────────┘ └───────────────┘ │ +│ EXTENSIONES: ~35 tablas (planificadas) │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +## SCHEMAS HEREDADOS DEL CORE + +| Schema | Tablas | Uso en Clínicas | +|--------|--------|-----------------| +| `auth` | 26 | Autenticación, usuarios médicos | +| `core` | 12 | Partners (pacientes), catálogos | +| `financial` | 15 | Facturas de servicios médicos | +| `inventory` | 15 | Medicamentos, insumos | +| `hr` | 6 | Personal médico | +| `sales` | 6 | Servicios médicos | +| `crm` | 5 | Seguimiento de pacientes | +| `analytics` | 5 | Estadísticas médicas | +| `system` | 10 | Recordatorios, notificaciones | + +**Total heredado:** ~100 tablas + +--- + +## SCHEMAS ESPECÍFICOS DE CLÍNICAS (Planificados) + +### 1. Schema `patients` (estimado 10+ tablas) + +**Propósito:** Gestión de pacientes + +```sql +-- Tablas principales planificadas: +patients.patients -- Pacientes (extiende core.partners) +patients.patient_contacts -- Contactos de emergencia +patients.insurance_policies -- Pólizas de seguro +patients.medical_history -- Antecedentes médicos +patients.allergies -- Alergias +patients.family_history -- Antecedentes familiares +``` + +### 2. Schema `medical` (estimado 15+ tablas) + +**Propósito:** Expediente clínico electrónico + +```sql +-- Tablas principales planificadas: +medical.consultations -- Consultas médicas +medical.diagnoses -- Diagnósticos (CIE-10) +medical.prescriptions -- Recetas médicas +medical.prescription_lines -- Medicamentos recetados +medical.vital_signs -- Signos vitales +medical.lab_results -- Resultados de laboratorio +medical.imaging_studies -- Estudios de imagen +medical.clinical_notes -- Notas clínicas +medical.treatments -- Tratamientos +``` + +### 3. Schema `appointments` (estimado 10+ tablas) + +**Propósito:** Gestión de citas + +```sql +-- Tablas principales planificadas: +appointments.doctors -- Médicos +appointments.specialties -- Especialidades +appointments.doctor_schedules -- Horarios de médicos +appointments.consulting_rooms -- Consultorios +appointments.appointments -- Citas +appointments.appointment_types -- Tipos de cita +appointments.reminders -- Recordatorios +``` + +--- + +## SPECS DEL CORE APLICABLES + +**Documento detallado:** `orchestration/00-guidelines/HERENCIA-SPECS-CORE.md` + +### Correcciones de DDL Core (2025-12-08) + +El DDL del ERP-Core fue corregido para resolver FK inválidas: + +1. **stock_valuation_layers**: Campos `journal_entry_id` y `journal_entry_line_id` (antes `account_move_*`) +2. **stock_move_consume_rel**: Nueva tabla de trazabilidad (antes `move_line_consume_rel`) +3. **category_stock_accounts**: FK corregida a `core.product_categories` +4. **product_categories**: ALTERs ahora apuntan a schema `core` + +### SPECS Obligatorias + +| Spec Core | Aplicación en Clínicas | SP | Estado | +|-----------|----------------------|----:|--------| +| SPEC-SISTEMA-SECUENCIAS | Foliado de expedientes y citas | 8 | ✅ DDL LISTO | +| SPEC-SEGURIDAD-API-KEYS-PERMISOS | Control de acceso a expedientes | 31 | ✅ DDL LISTO | +| SPEC-INTEGRACION-CALENDAR | Agenda de citas médicas | 8 | PENDIENTE | +| SPEC-RRHH-EVALUACIONES-SKILLS | Credenciales médicas | 26 | ✅ DDL LISTO | +| SPEC-MAIL-THREAD-TRACKING | Historial de comunicación | 13 | ✅ DDL LISTO | +| SPEC-WIZARD-TRANSIENT-MODEL | Wizards de receta y referencia | 8 | PENDIENTE | +| SPEC-FIRMA-ELECTRONICA-NOM151 | Firma de expedientes clínicos | 13 | PENDIENTE | +| SPEC-TWO-FACTOR-AUTHENTICATION | Seguridad de acceso | 13 | ✅ DDL LISTO | +| SPEC-OAUTH2-SOCIAL-LOGIN | Portal de pacientes | 8 | ✅ DDL LISTO | + +### SPECS Opcionales + +| Spec Core | Decisión | Razón | +|-----------|----------|-------| +| SPEC-VALORACION-INVENTARIO | EVALUAR | Solo si hay farmacia interna | +| SPEC-PRICING-RULES | EVALUAR | Para paquetes de servicios | +| SPEC-TAREAS-RECURRENTES | EVALUAR | Para citas periódicas | + +### SPECS No Aplican + +| Spec Core | Razón | +|-----------|-------| +| SPEC-PORTAL-PROVEEDORES | No hay compras complejas | +| SPEC-BLANKET-ORDERS | No aplica en servicios médicos | +| SPEC-INVENTARIOS-CICLICOS | Solo si hay farmacia grande | +| SPEC-PROYECTOS-DEPENDENCIAS-BURNDOWN | No hay proyectos de este tipo | + +### Cumplimiento Normativo + +| Norma | Descripción | SPECS Relacionadas | +|-------|-------------|-------------------| +| NOM-024-SSA3-2012 | Expediente clínico electrónico | SPEC-SEGURIDAD, SPEC-MAIL-THREAD | +| LFPDPPP | Protección de datos personales | SPEC-SEGURIDAD, SPEC-2FA | +| NOM-004-SSA3-2012 | Expediente clínico | SPEC-FIRMA-ELECTRONICA | + +--- + +## CUMPLIMIENTO NORMATIVO + +Este sistema debe cumplir con: + +| Norma | Descripción | Impacto | +|-------|-------------|---------| +| NOM-024-SSA3-2012 | Expediente clínico electrónico | Estructura de datos | +| LFPDPPP | Protección de datos personales | Seguridad y acceso | +| NOM-004-SSA3-2012 | Expediente clínico | Contenido mínimo | + +--- + +## ORDEN DE EJECUCIÓN DDL (Futuro) + +```bash +# PASO 1: Cargar ERP Core (base) +cd apps/erp-core/database +./scripts/reset-database.sh --force + +# PASO 2: Cargar extensiones de Clínicas +cd apps/verticales/clinicas/database +psql $DATABASE_URL -f init/00-extensions.sql +psql $DATABASE_URL -f init/01-create-schemas.sql +psql $DATABASE_URL -f init/02-patients-tables.sql +psql $DATABASE_URL -f init/03-medical-tables.sql +psql $DATABASE_URL -f init/04-appointments-tables.sql +``` + +--- + +## MAPEO DE NOMENCLATURA + +| Core | Clínicas | +|------|----------| +| `core.partners` | Pacientes base | +| `hr.employees` | Personal médico | +| `inventory.products` | Medicamentos, insumos | +| `sales.sale_orders` | Servicios médicos | +| `financial.invoices` | Facturas de consultas | + +--- + +## REFERENCIAS + +- ERP Core DDL: `apps/erp-core/database/ddl/` +- ERP Core README: `apps/erp-core/database/README.md` +- Directivas: `orchestration/directivas/` +- Inventarios: `orchestration/inventarios/` + +--- + +**Documento de herencia oficial** +**Última actualización:** 2025-12-08 diff --git a/database/README.md b/database/README.md new file mode 100644 index 0000000..d42da1f --- /dev/null +++ b/database/README.md @@ -0,0 +1,83 @@ +# Base de Datos - ERP Clínicas + +## Resumen + +| Aspecto | Valor | +|---------|-------| +| **Schema principal** | `clinica` | +| **Tablas específicas** | 13 | +| **ENUMs** | 4 | +| **Hereda de ERP-Core** | 144 tablas (12 schemas) | + +## Prerequisitos + +1. **ERP-Core instalado** con todos sus schemas: + - auth, core, financial, inventory, purchase, sales, projects, analytics, system, billing, crm, hr + +2. **Extensiones PostgreSQL**: + - pgcrypto (encriptación) + - pg_trgm (búsqueda de texto) + +## Orden de Ejecución DDL + +```bash +# 1. Instalar ERP-Core primero +cd apps/erp-core/database +./scripts/reset-database.sh + +# 2. Instalar extensión Clínicas +cd apps/verticales/clinicas/database +psql $DATABASE_URL -f init/00-extensions.sql +psql $DATABASE_URL -f init/01-create-schemas.sql +psql $DATABASE_URL -f init/02-rls-functions.sql +psql $DATABASE_URL -f init/03-clinical-tables.sql +psql $DATABASE_URL -f init/04-seed-data.sql +``` + +## Tablas Implementadas + +### Schema: clinica (13 tablas) + +| Tabla | Módulo | Descripción | +|-------|--------|-------------| +| specialties | CL-002 | Catálogo de especialidades médicas | +| doctors | CL-002 | Médicos (extiende hr.employees) | +| patients | CL-001 | Pacientes (extiende core.partners) | +| patient_contacts | CL-001 | Contactos de emergencia | +| patient_insurance | CL-001 | Información de seguros | +| appointment_slots | CL-002 | Horarios disponibles | +| appointments | CL-002 | Citas médicas | +| medical_records | CL-003 | Expediente clínico electrónico | +| consultations | CL-003 | Consultas realizadas | +| vital_signs | CL-003 | Signos vitales | +| diagnoses | CL-003 | Diagnósticos (CIE-10) | +| prescriptions | CL-003 | Recetas médicas | +| prescription_items | CL-003 | Medicamentos en receta | + +## ENUMs + +| Enum | Valores | +|------|---------| +| appointment_status | scheduled, confirmed, in_progress, completed, cancelled, no_show | +| patient_gender | male, female, other, prefer_not_to_say | +| blood_type | A+, A-, B+, B-, AB+, AB-, O+, O-, unknown | +| consultation_status | draft, in_progress, completed, cancelled | + +## Row Level Security + +Todas las tablas tienen RLS habilitado con aislamiento por tenant: + +```sql +tenant_id = current_setting('app.current_tenant_id', true)::UUID +``` + +## Consideraciones de Seguridad + +- **NOM-024-SSA3-2012**: Expediente clínico electrónico +- **Datos sensibles**: medical_records, consultations requieren encriptación +- **Auditoría completa**: Todas las tablas tienen campos de auditoría + +## Referencias + +- [HERENCIA-ERP-CORE.md](./HERENCIA-ERP-CORE.md) +- [DATABASE_INVENTORY.yml](../orchestration/inventarios/DATABASE_INVENTORY.yml) diff --git a/database/init/00-extensions.sql b/database/init/00-extensions.sql new file mode 100644 index 0000000..bed7df7 --- /dev/null +++ b/database/init/00-extensions.sql @@ -0,0 +1,25 @@ +-- ============================================================================ +-- EXTENSIONES PostgreSQL - ERP Clínicas +-- ============================================================================ +-- Versión: 1.0.0 +-- Fecha: 2025-12-09 +-- Prerequisito: ERP-Core debe estar instalado +-- ============================================================================ + +-- Verificar que ERP-Core esté instalado +DO $$ +BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_namespace WHERE nspname = 'auth') THEN + RAISE EXCEPTION 'ERP-Core no instalado. Ejecutar primero DDL de erp-core.'; + END IF; +END $$; + +-- Extensión para encriptación de datos sensibles (expedientes médicos) +CREATE EXTENSION IF NOT EXISTS pgcrypto; + +-- Extensión para búsqueda de texto (diagnósticos CIE-10) +CREATE EXTENSION IF NOT EXISTS pg_trgm; + +-- ============================================================================ +-- FIN EXTENSIONES +-- ============================================================================ diff --git a/database/init/01-create-schemas.sql b/database/init/01-create-schemas.sql new file mode 100644 index 0000000..fd058a9 --- /dev/null +++ b/database/init/01-create-schemas.sql @@ -0,0 +1,15 @@ +-- ============================================================================ +-- SCHEMAS - ERP Clínicas +-- ============================================================================ +-- Versión: 1.0.0 +-- Fecha: 2025-12-09 +-- ============================================================================ + +-- Schema principal para operaciones clínicas +CREATE SCHEMA IF NOT EXISTS clinica; + +COMMENT ON SCHEMA clinica IS 'Schema para operaciones de clínica/consultorio médico'; + +-- ============================================================================ +-- FIN SCHEMAS +-- ============================================================================ diff --git a/database/init/02-rls-functions.sql b/database/init/02-rls-functions.sql new file mode 100644 index 0000000..2a31da8 --- /dev/null +++ b/database/init/02-rls-functions.sql @@ -0,0 +1,37 @@ +-- ============================================================================ +-- FUNCIONES RLS - ERP Clínicas +-- ============================================================================ +-- Versión: 1.0.0 +-- Fecha: 2025-12-09 +-- Nota: Usa las funciones de contexto de ERP-Core (auth schema) +-- ============================================================================ + +-- Las funciones principales están en ERP-Core: +-- auth.get_current_tenant_id() +-- auth.get_current_user_id() +-- auth.get_current_company_id() + +-- Función auxiliar para verificar acceso a expediente médico +CREATE OR REPLACE FUNCTION clinica.can_access_medical_record( + p_patient_id UUID, + p_user_id UUID DEFAULT NULL +) +RETURNS BOOLEAN AS $$ +DECLARE + v_user_id UUID; + v_has_access BOOLEAN := FALSE; +BEGIN + v_user_id := COALESCE(p_user_id, current_setting('app.current_user_id', true)::UUID); + + -- TODO: Implementar lógica de permisos específicos + -- Por ahora, cualquier usuario del tenant puede acceder + RETURN TRUE; +END; +$$ LANGUAGE plpgsql SECURITY DEFINER; + +COMMENT ON FUNCTION clinica.can_access_medical_record IS +'Verifica si el usuario tiene permiso para acceder al expediente médico del paciente'; + +-- ============================================================================ +-- FIN FUNCIONES RLS +-- ============================================================================ diff --git a/database/init/03-clinical-tables.sql b/database/init/03-clinical-tables.sql new file mode 100644 index 0000000..5a97245 --- /dev/null +++ b/database/init/03-clinical-tables.sql @@ -0,0 +1,628 @@ +-- ============================================================================ +-- TABLAS CLÍNICAS - ERP Clínicas +-- ============================================================================ +-- Módulos: CL-001 (Pacientes), CL-002 (Citas), CL-003 (Expediente) +-- Versión: 1.0.0 +-- Fecha: 2025-12-09 +-- ============================================================================ +-- PREREQUISITOS: +-- 1. ERP-Core instalado (auth.tenants, auth.users, core.partners) +-- 2. Schema clinica creado +-- ============================================================================ + +-- ============================================================================ +-- TYPES (ENUMs) +-- ============================================================================ + +DO $$ BEGIN + CREATE TYPE clinica.appointment_status AS ENUM ( + 'scheduled', 'confirmed', 'in_progress', 'completed', 'cancelled', 'no_show' + ); +EXCEPTION WHEN duplicate_object THEN NULL; END $$; + +DO $$ BEGIN + CREATE TYPE clinica.patient_gender AS ENUM ( + 'male', 'female', 'other', 'prefer_not_to_say' + ); +EXCEPTION WHEN duplicate_object THEN NULL; END $$; + +DO $$ BEGIN + CREATE TYPE clinica.blood_type AS ENUM ( + 'A+', 'A-', 'B+', 'B-', 'AB+', 'AB-', 'O+', 'O-', 'unknown' + ); +EXCEPTION WHEN duplicate_object THEN NULL; END $$; + +DO $$ BEGIN + CREATE TYPE clinica.consultation_status AS ENUM ( + 'draft', 'in_progress', 'completed', 'cancelled' + ); +EXCEPTION WHEN duplicate_object THEN NULL; END $$; + +-- ============================================================================ +-- CATÁLOGOS BASE +-- ============================================================================ + +-- Tabla: specialties (Especialidades médicas) +CREATE TABLE IF NOT EXISTS clinica.specialties ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id) ON DELETE CASCADE, + code VARCHAR(20) NOT NULL, + name VARCHAR(100) NOT NULL, + description TEXT, + consultation_duration INTEGER DEFAULT 30, -- minutos + is_active BOOLEAN NOT NULL DEFAULT TRUE, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + created_by UUID REFERENCES auth.users(id), + updated_at TIMESTAMPTZ, + updated_by UUID REFERENCES auth.users(id), + CONSTRAINT uq_specialties_code UNIQUE (tenant_id, code) +); + +-- Tabla: doctors (Médicos - extiende hr.employees) +CREATE TABLE IF NOT EXISTS clinica.doctors ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id) ON DELETE CASCADE, + employee_id UUID, -- FK a hr.employees (ERP Core) + user_id UUID REFERENCES auth.users(id), + specialty_id UUID NOT NULL REFERENCES clinica.specialties(id), + license_number VARCHAR(50) NOT NULL, -- Cédula profesional + license_expiry DATE, + secondary_specialties UUID[], -- Array de specialty_ids + consultation_fee DECIMAL(12,2), + is_active BOOLEAN NOT NULL DEFAULT TRUE, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + created_by UUID REFERENCES auth.users(id), + updated_at TIMESTAMPTZ, + updated_by UUID REFERENCES auth.users(id), + deleted_at TIMESTAMPTZ, + deleted_by UUID REFERENCES auth.users(id), + CONSTRAINT uq_doctors_license UNIQUE (tenant_id, license_number) +); + +-- ============================================================================ +-- PACIENTES (CL-001) +-- ============================================================================ + +-- Tabla: patients (Pacientes - extiende core.partners) +CREATE TABLE IF NOT EXISTS clinica.patients ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id) ON DELETE CASCADE, + partner_id UUID REFERENCES core.partners(id), -- Vinculo a partner + + -- Identificación + patient_number VARCHAR(30) NOT NULL, + first_name VARCHAR(100) NOT NULL, + last_name VARCHAR(100) NOT NULL, + middle_name VARCHAR(100), + + -- Datos personales + birth_date DATE, + gender clinica.patient_gender, + curp VARCHAR(18), + + -- Contacto + email VARCHAR(255), + phone VARCHAR(20), + mobile VARCHAR(20), + + -- Dirección + street VARCHAR(255), + city VARCHAR(100), + state VARCHAR(100), + zip_code VARCHAR(10), + country VARCHAR(100) DEFAULT 'México', + + -- Datos médicos básicos + blood_type clinica.blood_type DEFAULT 'unknown', + allergies TEXT[], + chronic_conditions TEXT[], + + -- Seguro médico + has_insurance BOOLEAN DEFAULT FALSE, + insurance_provider VARCHAR(100), + insurance_policy VARCHAR(50), + + -- Control + is_active BOOLEAN NOT NULL DEFAULT TRUE, + last_visit_date DATE, + + -- Auditoría + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + created_by UUID REFERENCES auth.users(id), + updated_at TIMESTAMPTZ, + updated_by UUID REFERENCES auth.users(id), + deleted_at TIMESTAMPTZ, + deleted_by UUID REFERENCES auth.users(id), + + CONSTRAINT uq_patients_number UNIQUE (tenant_id, patient_number) +); + +-- Tabla: patient_contacts (Contactos de emergencia) +CREATE TABLE IF NOT EXISTS clinica.patient_contacts ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id) ON DELETE CASCADE, + patient_id UUID NOT NULL REFERENCES clinica.patients(id) ON DELETE CASCADE, + contact_name VARCHAR(200) NOT NULL, + relationship VARCHAR(50), -- Parentesco + phone VARCHAR(20), + mobile VARCHAR(20), + email VARCHAR(255), + is_primary BOOLEAN DEFAULT FALSE, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + created_by UUID REFERENCES auth.users(id), + updated_at TIMESTAMPTZ, + updated_by UUID REFERENCES auth.users(id) +); + +-- Tabla: patient_insurance (Información de seguros) +CREATE TABLE IF NOT EXISTS clinica.patient_insurance ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id) ON DELETE CASCADE, + patient_id UUID NOT NULL REFERENCES clinica.patients(id) ON DELETE CASCADE, + insurance_provider VARCHAR(100) NOT NULL, + policy_number VARCHAR(50) NOT NULL, + group_number VARCHAR(50), + holder_name VARCHAR(200), + holder_relationship VARCHAR(50), + coverage_type VARCHAR(50), + valid_from DATE, + valid_until DATE, + is_primary BOOLEAN DEFAULT TRUE, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + created_by UUID REFERENCES auth.users(id), + updated_at TIMESTAMPTZ, + updated_by UUID REFERENCES auth.users(id) +); + +-- ============================================================================ +-- CITAS (CL-002) +-- ============================================================================ + +-- Tabla: appointment_slots (Horarios disponibles) +CREATE TABLE IF NOT EXISTS clinica.appointment_slots ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id) ON DELETE CASCADE, + doctor_id UUID NOT NULL REFERENCES clinica.doctors(id), + day_of_week INTEGER NOT NULL CHECK (day_of_week BETWEEN 0 AND 6), -- 0=Domingo + start_time TIME NOT NULL, + end_time TIME NOT NULL, + slot_duration INTEGER DEFAULT 30, -- minutos + max_appointments INTEGER DEFAULT 1, + is_active BOOLEAN DEFAULT TRUE, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + created_by UUID REFERENCES auth.users(id), + updated_at TIMESTAMPTZ, + updated_by UUID REFERENCES auth.users(id), + CONSTRAINT chk_slot_times CHECK (end_time > start_time) +); + +-- Tabla: appointments (Citas médicas) +CREATE TABLE IF NOT EXISTS clinica.appointments ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id) ON DELETE CASCADE, + + -- Referencias + patient_id UUID NOT NULL REFERENCES clinica.patients(id), + doctor_id UUID NOT NULL REFERENCES clinica.doctors(id), + specialty_id UUID REFERENCES clinica.specialties(id), + + -- Programación + appointment_date DATE NOT NULL, + start_time TIME NOT NULL, + end_time TIME NOT NULL, + duration INTEGER DEFAULT 30, -- minutos + + -- Estado + status clinica.appointment_status NOT NULL DEFAULT 'scheduled', + + -- Detalles + reason TEXT, -- Motivo de consulta + notes TEXT, + is_first_visit BOOLEAN DEFAULT FALSE, + is_follow_up BOOLEAN DEFAULT FALSE, + follow_up_to UUID REFERENCES clinica.appointments(id), + + -- Recordatorios + reminder_sent BOOLEAN DEFAULT FALSE, + reminder_sent_at TIMESTAMPTZ, + + -- Confirmación + confirmed_at TIMESTAMPTZ, + confirmed_by UUID REFERENCES auth.users(id), + + -- Cancelación + cancelled_at TIMESTAMPTZ, + cancelled_by UUID REFERENCES auth.users(id), + cancellation_reason TEXT, + + -- Auditoría + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + created_by UUID REFERENCES auth.users(id), + updated_at TIMESTAMPTZ, + updated_by UUID REFERENCES auth.users(id), + + CONSTRAINT chk_appointment_times CHECK (end_time > start_time) +); + +-- ============================================================================ +-- EXPEDIENTE CLÍNICO (CL-003) +-- ============================================================================ + +-- Tabla: medical_records (Expediente clínico electrónico) +-- NOTA: Datos sensibles según NOM-024-SSA3-2012 +CREATE TABLE IF NOT EXISTS clinica.medical_records ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id) ON DELETE CASCADE, + patient_id UUID NOT NULL REFERENCES clinica.patients(id), + + -- Número de expediente + record_number VARCHAR(30) NOT NULL, + + -- Antecedentes + family_history TEXT, + personal_history TEXT, + surgical_history TEXT, + + -- Hábitos + smoking_status VARCHAR(50), + alcohol_status VARCHAR(50), + exercise_status VARCHAR(50), + diet_notes TEXT, + + -- Gineco-obstétricos (si aplica) + obstetric_history JSONB, + + -- Notas generales + notes TEXT, + + -- Control de acceso + is_confidential BOOLEAN DEFAULT TRUE, + access_restricted BOOLEAN DEFAULT FALSE, + + -- Auditoría + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + created_by UUID REFERENCES auth.users(id), + updated_at TIMESTAMPTZ, + updated_by UUID REFERENCES auth.users(id), + + CONSTRAINT uq_medical_records_number UNIQUE (tenant_id, record_number), + CONSTRAINT uq_medical_records_patient UNIQUE (patient_id) +); + +-- Tabla: consultations (Consultas realizadas) +CREATE TABLE IF NOT EXISTS clinica.consultations ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id) ON DELETE CASCADE, + + -- Referencias + medical_record_id UUID NOT NULL REFERENCES clinica.medical_records(id), + appointment_id UUID REFERENCES clinica.appointments(id), + doctor_id UUID NOT NULL REFERENCES clinica.doctors(id), + + -- Fecha/hora + consultation_date DATE NOT NULL, + start_time TIMESTAMPTZ, + end_time TIMESTAMPTZ, + + -- Estado + status clinica.consultation_status DEFAULT 'draft', + + -- Motivo de consulta + chief_complaint TEXT NOT NULL, -- Motivo principal + present_illness TEXT, -- Padecimiento actual + + -- Exploración física + physical_exam JSONB, -- Estructurado por sistemas + + -- Plan + treatment_plan TEXT, + follow_up_instructions TEXT, + next_appointment_days INTEGER, + + -- Notas + notes TEXT, + private_notes TEXT, -- Solo visible para el médico + + -- Auditoría + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + created_by UUID REFERENCES auth.users(id), + updated_at TIMESTAMPTZ, + updated_by UUID REFERENCES auth.users(id) +); + +-- Tabla: vital_signs (Signos vitales) +CREATE TABLE IF NOT EXISTS clinica.vital_signs ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id) ON DELETE CASCADE, + consultation_id UUID NOT NULL REFERENCES clinica.consultations(id) ON DELETE CASCADE, + + -- Signos vitales + weight_kg DECIMAL(5,2), + height_cm DECIMAL(5,2), + bmi DECIMAL(4,2) GENERATED ALWAYS AS ( + CASE WHEN height_cm > 0 THEN weight_kg / ((height_cm/100) * (height_cm/100)) END + ) STORED, + temperature_c DECIMAL(4,2), + blood_pressure_systolic INTEGER, + blood_pressure_diastolic INTEGER, + heart_rate INTEGER, -- latidos por minuto + respiratory_rate INTEGER, -- respiraciones por minuto + oxygen_saturation INTEGER, -- porcentaje + + -- Fecha/hora de medición + measured_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + measured_by UUID REFERENCES auth.users(id), + + notes TEXT, + + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + created_by UUID REFERENCES auth.users(id) +); + +-- Tabla: diagnoses (Diagnósticos - CIE-10) +CREATE TABLE IF NOT EXISTS clinica.diagnoses ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id) ON DELETE CASCADE, + consultation_id UUID NOT NULL REFERENCES clinica.consultations(id) ON DELETE CASCADE, + + -- Código CIE-10 + icd10_code VARCHAR(10) NOT NULL, + icd10_description VARCHAR(255), + + -- Tipo + diagnosis_type VARCHAR(20) NOT NULL DEFAULT 'primary', -- primary, secondary, differential + + -- Detalles + notes TEXT, + is_chronic BOOLEAN DEFAULT FALSE, + onset_date DATE, + + -- Orden + sequence INTEGER DEFAULT 1, + + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + created_by UUID REFERENCES auth.users(id) +); + +-- Tabla: prescriptions (Recetas médicas) +CREATE TABLE IF NOT EXISTS clinica.prescriptions ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id) ON DELETE CASCADE, + consultation_id UUID NOT NULL REFERENCES clinica.consultations(id), + + -- Número de receta + prescription_number VARCHAR(30) NOT NULL, + prescription_date DATE NOT NULL DEFAULT CURRENT_DATE, + + -- Médico + doctor_id UUID NOT NULL REFERENCES clinica.doctors(id), + + -- Instrucciones generales + general_instructions TEXT, + + -- Vigencia + valid_until DATE, + + -- Estado + is_printed BOOLEAN DEFAULT FALSE, + printed_at TIMESTAMPTZ, + + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + created_by UUID REFERENCES auth.users(id), + updated_at TIMESTAMPTZ, + updated_by UUID REFERENCES auth.users(id), + + CONSTRAINT uq_prescriptions_number UNIQUE (tenant_id, prescription_number) +); + +-- Tabla: prescription_items (Líneas de receta) +CREATE TABLE IF NOT EXISTS clinica.prescription_items ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + tenant_id UUID NOT NULL REFERENCES auth.tenants(id) ON DELETE CASCADE, + prescription_id UUID NOT NULL REFERENCES clinica.prescriptions(id) ON DELETE CASCADE, + + -- Medicamento + product_id UUID, -- FK a inventory.products (ERP Core) + medication_name VARCHAR(255) NOT NULL, + presentation VARCHAR(100), -- Tabletas, jarabe, etc. + + -- Dosificación + dosage VARCHAR(100) NOT NULL, -- "1 tableta" + frequency VARCHAR(100) NOT NULL, -- "cada 8 horas" + duration VARCHAR(100), -- "por 7 días" + quantity INTEGER, -- Cantidad a surtir + + -- Instrucciones + instructions TEXT, + + -- Orden + sequence INTEGER DEFAULT 1, + + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + created_by UUID REFERENCES auth.users(id) +); + +-- ============================================================================ +-- ÍNDICES +-- ============================================================================ + +-- Specialties +CREATE INDEX IF NOT EXISTS idx_specialties_tenant ON clinica.specialties(tenant_id); + +-- Doctors +CREATE INDEX IF NOT EXISTS idx_doctors_tenant ON clinica.doctors(tenant_id); +CREATE INDEX IF NOT EXISTS idx_doctors_specialty ON clinica.doctors(specialty_id); +CREATE INDEX IF NOT EXISTS idx_doctors_user ON clinica.doctors(user_id); + +-- Patients +CREATE INDEX IF NOT EXISTS idx_patients_tenant ON clinica.patients(tenant_id); +CREATE INDEX IF NOT EXISTS idx_patients_partner ON clinica.patients(partner_id); +CREATE INDEX IF NOT EXISTS idx_patients_name ON clinica.patients(last_name, first_name); +CREATE INDEX IF NOT EXISTS idx_patients_curp ON clinica.patients(curp); + +-- Patient contacts +CREATE INDEX IF NOT EXISTS idx_patient_contacts_tenant ON clinica.patient_contacts(tenant_id); +CREATE INDEX IF NOT EXISTS idx_patient_contacts_patient ON clinica.patient_contacts(patient_id); + +-- Patient insurance +CREATE INDEX IF NOT EXISTS idx_patient_insurance_tenant ON clinica.patient_insurance(tenant_id); +CREATE INDEX IF NOT EXISTS idx_patient_insurance_patient ON clinica.patient_insurance(patient_id); + +-- Appointment slots +CREATE INDEX IF NOT EXISTS idx_appointment_slots_tenant ON clinica.appointment_slots(tenant_id); +CREATE INDEX IF NOT EXISTS idx_appointment_slots_doctor ON clinica.appointment_slots(doctor_id); + +-- Appointments +CREATE INDEX IF NOT EXISTS idx_appointments_tenant ON clinica.appointments(tenant_id); +CREATE INDEX IF NOT EXISTS idx_appointments_patient ON clinica.appointments(patient_id); +CREATE INDEX IF NOT EXISTS idx_appointments_doctor ON clinica.appointments(doctor_id); +CREATE INDEX IF NOT EXISTS idx_appointments_date ON clinica.appointments(appointment_date); +CREATE INDEX IF NOT EXISTS idx_appointments_status ON clinica.appointments(status); + +-- Medical records +CREATE INDEX IF NOT EXISTS idx_medical_records_tenant ON clinica.medical_records(tenant_id); +CREATE INDEX IF NOT EXISTS idx_medical_records_patient ON clinica.medical_records(patient_id); + +-- Consultations +CREATE INDEX IF NOT EXISTS idx_consultations_tenant ON clinica.consultations(tenant_id); +CREATE INDEX IF NOT EXISTS idx_consultations_record ON clinica.consultations(medical_record_id); +CREATE INDEX IF NOT EXISTS idx_consultations_doctor ON clinica.consultations(doctor_id); +CREATE INDEX IF NOT EXISTS idx_consultations_date ON clinica.consultations(consultation_date); + +-- Vital signs +CREATE INDEX IF NOT EXISTS idx_vital_signs_tenant ON clinica.vital_signs(tenant_id); +CREATE INDEX IF NOT EXISTS idx_vital_signs_consultation ON clinica.vital_signs(consultation_id); + +-- Diagnoses +CREATE INDEX IF NOT EXISTS idx_diagnoses_tenant ON clinica.diagnoses(tenant_id); +CREATE INDEX IF NOT EXISTS idx_diagnoses_consultation ON clinica.diagnoses(consultation_id); +CREATE INDEX IF NOT EXISTS idx_diagnoses_icd10 ON clinica.diagnoses(icd10_code); + +-- Prescriptions +CREATE INDEX IF NOT EXISTS idx_prescriptions_tenant ON clinica.prescriptions(tenant_id); +CREATE INDEX IF NOT EXISTS idx_prescriptions_consultation ON clinica.prescriptions(consultation_id); + +-- Prescription items +CREATE INDEX IF NOT EXISTS idx_prescription_items_tenant ON clinica.prescription_items(tenant_id); +CREATE INDEX IF NOT EXISTS idx_prescription_items_prescription ON clinica.prescription_items(prescription_id); + +-- ============================================================================ +-- ROW LEVEL SECURITY +-- ============================================================================ + +ALTER TABLE clinica.specialties ENABLE ROW LEVEL SECURITY; +ALTER TABLE clinica.doctors ENABLE ROW LEVEL SECURITY; +ALTER TABLE clinica.patients ENABLE ROW LEVEL SECURITY; +ALTER TABLE clinica.patient_contacts ENABLE ROW LEVEL SECURITY; +ALTER TABLE clinica.patient_insurance ENABLE ROW LEVEL SECURITY; +ALTER TABLE clinica.appointment_slots ENABLE ROW LEVEL SECURITY; +ALTER TABLE clinica.appointments ENABLE ROW LEVEL SECURITY; +ALTER TABLE clinica.medical_records ENABLE ROW LEVEL SECURITY; +ALTER TABLE clinica.consultations ENABLE ROW LEVEL SECURITY; +ALTER TABLE clinica.vital_signs ENABLE ROW LEVEL SECURITY; +ALTER TABLE clinica.diagnoses ENABLE ROW LEVEL SECURITY; +ALTER TABLE clinica.prescriptions ENABLE ROW LEVEL SECURITY; +ALTER TABLE clinica.prescription_items ENABLE ROW LEVEL SECURITY; + +-- Políticas de aislamiento por tenant +DO $$ BEGIN + DROP POLICY IF EXISTS tenant_isolation_specialties ON clinica.specialties; + CREATE POLICY tenant_isolation_specialties ON clinica.specialties + FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); +EXCEPTION WHEN undefined_object THEN NULL; END $$; + +DO $$ BEGIN + DROP POLICY IF EXISTS tenant_isolation_doctors ON clinica.doctors; + CREATE POLICY tenant_isolation_doctors ON clinica.doctors + FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); +EXCEPTION WHEN undefined_object THEN NULL; END $$; + +DO $$ BEGIN + DROP POLICY IF EXISTS tenant_isolation_patients ON clinica.patients; + CREATE POLICY tenant_isolation_patients ON clinica.patients + FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); +EXCEPTION WHEN undefined_object THEN NULL; END $$; + +DO $$ BEGIN + DROP POLICY IF EXISTS tenant_isolation_patient_contacts ON clinica.patient_contacts; + CREATE POLICY tenant_isolation_patient_contacts ON clinica.patient_contacts + FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); +EXCEPTION WHEN undefined_object THEN NULL; END $$; + +DO $$ BEGIN + DROP POLICY IF EXISTS tenant_isolation_patient_insurance ON clinica.patient_insurance; + CREATE POLICY tenant_isolation_patient_insurance ON clinica.patient_insurance + FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); +EXCEPTION WHEN undefined_object THEN NULL; END $$; + +DO $$ BEGIN + DROP POLICY IF EXISTS tenant_isolation_appointment_slots ON clinica.appointment_slots; + CREATE POLICY tenant_isolation_appointment_slots ON clinica.appointment_slots + FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); +EXCEPTION WHEN undefined_object THEN NULL; END $$; + +DO $$ BEGIN + DROP POLICY IF EXISTS tenant_isolation_appointments ON clinica.appointments; + CREATE POLICY tenant_isolation_appointments ON clinica.appointments + FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); +EXCEPTION WHEN undefined_object THEN NULL; END $$; + +DO $$ BEGIN + DROP POLICY IF EXISTS tenant_isolation_medical_records ON clinica.medical_records; + CREATE POLICY tenant_isolation_medical_records ON clinica.medical_records + FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); +EXCEPTION WHEN undefined_object THEN NULL; END $$; + +DO $$ BEGIN + DROP POLICY IF EXISTS tenant_isolation_consultations ON clinica.consultations; + CREATE POLICY tenant_isolation_consultations ON clinica.consultations + FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); +EXCEPTION WHEN undefined_object THEN NULL; END $$; + +DO $$ BEGIN + DROP POLICY IF EXISTS tenant_isolation_vital_signs ON clinica.vital_signs; + CREATE POLICY tenant_isolation_vital_signs ON clinica.vital_signs + FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); +EXCEPTION WHEN undefined_object THEN NULL; END $$; + +DO $$ BEGIN + DROP POLICY IF EXISTS tenant_isolation_diagnoses ON clinica.diagnoses; + CREATE POLICY tenant_isolation_diagnoses ON clinica.diagnoses + FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); +EXCEPTION WHEN undefined_object THEN NULL; END $$; + +DO $$ BEGIN + DROP POLICY IF EXISTS tenant_isolation_prescriptions ON clinica.prescriptions; + CREATE POLICY tenant_isolation_prescriptions ON clinica.prescriptions + FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); +EXCEPTION WHEN undefined_object THEN NULL; END $$; + +DO $$ BEGIN + DROP POLICY IF EXISTS tenant_isolation_prescription_items ON clinica.prescription_items; + CREATE POLICY tenant_isolation_prescription_items ON clinica.prescription_items + FOR ALL USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID); +EXCEPTION WHEN undefined_object THEN NULL; END $$; + +-- ============================================================================ +-- COMENTARIOS +-- ============================================================================ + +COMMENT ON TABLE clinica.specialties IS 'Catálogo de especialidades médicas'; +COMMENT ON TABLE clinica.doctors IS 'Médicos y especialistas - extiende hr.employees'; +COMMENT ON TABLE clinica.patients IS 'Registro de pacientes - extiende core.partners'; +COMMENT ON TABLE clinica.patient_contacts IS 'Contactos de emergencia del paciente'; +COMMENT ON TABLE clinica.patient_insurance IS 'Información de seguros médicos'; +COMMENT ON TABLE clinica.appointment_slots IS 'Horarios disponibles por médico'; +COMMENT ON TABLE clinica.appointments IS 'Citas médicas programadas'; +COMMENT ON TABLE clinica.medical_records IS 'Expediente clínico electrónico (NOM-024-SSA3)'; +COMMENT ON TABLE clinica.consultations IS 'Consultas médicas realizadas'; +COMMENT ON TABLE clinica.vital_signs IS 'Signos vitales del paciente'; +COMMENT ON TABLE clinica.diagnoses IS 'Diagnósticos según CIE-10'; +COMMENT ON TABLE clinica.prescriptions IS 'Recetas médicas'; +COMMENT ON TABLE clinica.prescription_items IS 'Medicamentos en receta'; + +-- ============================================================================ +-- FIN TABLAS CLÍNICAS +-- Total: 13 tablas, 4 ENUMs +-- ============================================================================ diff --git a/database/init/04-seed-data.sql b/database/init/04-seed-data.sql new file mode 100644 index 0000000..35648ef --- /dev/null +++ b/database/init/04-seed-data.sql @@ -0,0 +1,34 @@ +-- ============================================================================ +-- DATOS INICIALES - ERP Clínicas +-- ============================================================================ +-- Versión: 1.0.0 +-- Fecha: 2025-12-09 +-- ============================================================================ + +-- Especialidades médicas comunes +-- NOTA: Se insertan solo si el tenant existe (usar en script de inicialización) + +/* +-- Ejemplo de inserción (ejecutar con tenant_id específico): + +INSERT INTO clinica.specialties (tenant_id, code, name, description, consultation_duration) VALUES + ('TENANT_UUID', 'MG', 'Medicina General', 'Atención médica primaria', 30), + ('TENANT_UUID', 'PED', 'Pediatría', 'Atención médica infantil', 30), + ('TENANT_UUID', 'GIN', 'Ginecología', 'Salud de la mujer', 30), + ('TENANT_UUID', 'CARD', 'Cardiología', 'Enfermedades del corazón', 45), + ('TENANT_UUID', 'DERM', 'Dermatología', 'Enfermedades de la piel', 30), + ('TENANT_UUID', 'OFT', 'Oftalmología', 'Salud visual', 30), + ('TENANT_UUID', 'ORL', 'Otorrinolaringología', 'Oído, nariz y garganta', 30), + ('TENANT_UUID', 'TRAU', 'Traumatología', 'Sistema músculo-esquelético', 30), + ('TENANT_UUID', 'NEUR', 'Neurología', 'Sistema nervioso', 45), + ('TENANT_UUID', 'PSIQ', 'Psiquiatría', 'Salud mental', 60), + ('TENANT_UUID', 'ENDO', 'Endocrinología', 'Sistema endocrino', 45), + ('TENANT_UUID', 'GAST', 'Gastroenterología', 'Sistema digestivo', 45), + ('TENANT_UUID', 'NEFR', 'Nefrología', 'Enfermedades renales', 45), + ('TENANT_UUID', 'UROL', 'Urología', 'Sistema urinario', 30), + ('TENANT_UUID', 'ONCO', 'Oncología', 'Tratamiento del cáncer', 60); +*/ + +-- ============================================================================ +-- FIN SEED DATA +-- ============================================================================ diff --git a/docs/00-vision-general/VISION-CLINICAS.md b/docs/00-vision-general/VISION-CLINICAS.md new file mode 100644 index 0000000..6c9a3d9 --- /dev/null +++ b/docs/00-vision-general/VISION-CLINICAS.md @@ -0,0 +1,107 @@ +# Visión General - ERP Clínicas + +**Versión:** 1.0 +**Fecha:** 2025-12-08 +**Nivel:** 2B.2 (Vertical) + +--- + +## Propósito del Sistema + +Sistema ERP especializado para clínicas y consultorios médicos. Gestiona el expediente clínico electrónico, agenda de citas, recetas médicas, y facturación de servicios de salud. Cumple con normativas mexicanas de salud (NOM-024-SSA3, LFPDPPP). + +--- + +## Dominio del Negocio + +### Procesos Principales + +1. **Gestión de Pacientes** + - Registro y expediente clínico + - Historial médico + - Antecedentes y alergias + +2. **Agenda de Citas** + - Programación de consultas + - Recordatorios automáticos + - Gestión de especialistas + +3. **Consultas Médicas** + - Notas médicas + - Signos vitales + - Diagnósticos (CIE-10) + +4. **Recetas y Prescripciones** + - Recetas electrónicas + - Indicaciones médicas + - Firma electrónica + +5. **Facturación de Servicios** + - Cobro de consultas + - Seguros médicos + - CFDI de salud + +--- + +## Cumplimiento Normativo + +| Norma | Descripción | Impacto | +|-------|-------------|---------| +| NOM-024-SSA3-2012 | Expediente clínico electrónico | Estructura de datos | +| LFPDPPP | Protección de datos personales | Seguridad y acceso | +| NOM-004-SSA3-2012 | Expediente clínico | Contenido mínimo | + +--- + +## Arquitectura de Módulos + +``` +CL-001 Fundamentos → Auth, Users, Tenants (hereda 100% core) +CL-002 Pacientes → Expediente clínico (20% core) +CL-003 Citas → Agenda médica (30% core) +CL-004 Consultas → Notas médicas (0% - nuevo) +CL-005 Recetas → Prescripciones (10% core) +CL-006 Laboratorio → Estudios (10% core) +CL-007 Farmacia → Medicamentos (60% core) +CL-008 Facturación → Cobros, seguros (50% core) +CL-009 Reportes → Estadísticas (60% core) +CL-010 Telemedicina → Consultas remotas (0% - nuevo) +CL-011 Expediente → Historia clínica (10% core) +CL-012 Imagenología → DICOM (5% core) +``` + +--- + +## Stack Tecnológico + +- **Backend:** NestJS + TypeORM + PostgreSQL +- **Frontend:** React + TypeScript +- **Base de Datos:** PostgreSQL 15+ (hereda ERP Core) +- **Seguridad:** 2FA, encriptación de datos sensibles + +--- + +## Métricas Objetivo + +| Métrica | Valor Objetivo | +|---------|----------------| +| Módulos | 12 | +| Tablas Específicas | ~35 | +| Tablas Heredadas | ~100 | +| Story Points Est. | ~350 | +| Ocupación Agenda | > 80% | +| No-shows | < 5% | + +--- + +## Referencias + +- ERP Core: `apps/erp-core/` +- Herencia DB: `database/HERENCIA-ERP-CORE.md` +- SPECS del Core: `HERENCIA-SPECS-CORE.md` +- Normativas: NOM-024-SSA3-2012 + +--- + +**Documento de visión oficial** +**Última actualización:** 2025-12-08 diff --git a/docs/02-definicion-modulos/CL-001-fundamentos/README.md b/docs/02-definicion-modulos/CL-001-fundamentos/README.md new file mode 100644 index 0000000..aa7dd33 --- /dev/null +++ b/docs/02-definicion-modulos/CL-001-fundamentos/README.md @@ -0,0 +1,20 @@ +# CL-001: Fundamentos + +**Módulo:** Fundamentos +**Estado:** PLANIFICADO + +## Descripción +Auth con 2FA para personal médico + +## Funcionalidades Principales +- Por definir en fase de análisis + +## Cumplimiento Normativo +- NOM-024-SSA3-2012 (si aplica) +- LFPDPPP + +## SPECS Aplicables +- Ver HERENCIA-SPECS-CORE.md + +--- +**Última actualización:** 2025-12-08 diff --git a/docs/02-definicion-modulos/CL-002-pacientes/README.md b/docs/02-definicion-modulos/CL-002-pacientes/README.md new file mode 100644 index 0000000..145b3f8 --- /dev/null +++ b/docs/02-definicion-modulos/CL-002-pacientes/README.md @@ -0,0 +1,20 @@ +# CL-002: Pacientes + +**Módulo:** Pacientes +**Estado:** PLANIFICADO + +## Descripción +Registro y expediente de pacientes + +## Funcionalidades Principales +- Por definir en fase de análisis + +## Cumplimiento Normativo +- NOM-024-SSA3-2012 (si aplica) +- LFPDPPP + +## SPECS Aplicables +- Ver HERENCIA-SPECS-CORE.md + +--- +**Última actualización:** 2025-12-08 diff --git a/docs/02-definicion-modulos/CL-003-citas/README.md b/docs/02-definicion-modulos/CL-003-citas/README.md new file mode 100644 index 0000000..e57e82b --- /dev/null +++ b/docs/02-definicion-modulos/CL-003-citas/README.md @@ -0,0 +1,20 @@ +# CL-003: Citas + +**Módulo:** Citas +**Estado:** PLANIFICADO + +## Descripción +Agenda médica con recordatorios + +## Funcionalidades Principales +- Por definir en fase de análisis + +## Cumplimiento Normativo +- NOM-024-SSA3-2012 (si aplica) +- LFPDPPP + +## SPECS Aplicables +- Ver HERENCIA-SPECS-CORE.md + +--- +**Última actualización:** 2025-12-08 diff --git a/docs/02-definicion-modulos/CL-004-consultas/README.md b/docs/02-definicion-modulos/CL-004-consultas/README.md new file mode 100644 index 0000000..ba8b91d --- /dev/null +++ b/docs/02-definicion-modulos/CL-004-consultas/README.md @@ -0,0 +1,20 @@ +# CL-004: Consultas + +**Módulo:** Consultas +**Estado:** PLANIFICADO + +## Descripción +Notas médicas y diagnósticos CIE-10 + +## Funcionalidades Principales +- Por definir en fase de análisis + +## Cumplimiento Normativo +- NOM-024-SSA3-2012 (si aplica) +- LFPDPPP + +## SPECS Aplicables +- Ver HERENCIA-SPECS-CORE.md + +--- +**Última actualización:** 2025-12-08 diff --git a/docs/02-definicion-modulos/CL-005-recetas/README.md b/docs/02-definicion-modulos/CL-005-recetas/README.md new file mode 100644 index 0000000..2ca8f19 --- /dev/null +++ b/docs/02-definicion-modulos/CL-005-recetas/README.md @@ -0,0 +1,20 @@ +# CL-005: Recetas + +**Módulo:** Recetas +**Estado:** PLANIFICADO + +## Descripción +Prescripciones con firma electrónica + +## Funcionalidades Principales +- Por definir en fase de análisis + +## Cumplimiento Normativo +- NOM-024-SSA3-2012 (si aplica) +- LFPDPPP + +## SPECS Aplicables +- Ver HERENCIA-SPECS-CORE.md + +--- +**Última actualización:** 2025-12-08 diff --git a/docs/02-definicion-modulos/CL-006-laboratorio/README.md b/docs/02-definicion-modulos/CL-006-laboratorio/README.md new file mode 100644 index 0000000..95c5fc6 --- /dev/null +++ b/docs/02-definicion-modulos/CL-006-laboratorio/README.md @@ -0,0 +1,20 @@ +# CL-006: Laboratorio + +**Módulo:** Laboratorio +**Estado:** PLANIFICADO + +## Descripción +Solicitud y resultados de estudios + +## Funcionalidades Principales +- Por definir en fase de análisis + +## Cumplimiento Normativo +- NOM-024-SSA3-2012 (si aplica) +- LFPDPPP + +## SPECS Aplicables +- Ver HERENCIA-SPECS-CORE.md + +--- +**Última actualización:** 2025-12-08 diff --git a/docs/02-definicion-modulos/CL-007-farmacia/README.md b/docs/02-definicion-modulos/CL-007-farmacia/README.md new file mode 100644 index 0000000..5f67ad9 --- /dev/null +++ b/docs/02-definicion-modulos/CL-007-farmacia/README.md @@ -0,0 +1,20 @@ +# CL-007: Farmacia + +**Módulo:** Farmacia +**Estado:** PLANIFICADO + +## Descripción +Inventario de medicamentos + +## Funcionalidades Principales +- Por definir en fase de análisis + +## Cumplimiento Normativo +- NOM-024-SSA3-2012 (si aplica) +- LFPDPPP + +## SPECS Aplicables +- Ver HERENCIA-SPECS-CORE.md + +--- +**Última actualización:** 2025-12-08 diff --git a/docs/02-definicion-modulos/CL-008-facturacion/README.md b/docs/02-definicion-modulos/CL-008-facturacion/README.md new file mode 100644 index 0000000..7ccea4b --- /dev/null +++ b/docs/02-definicion-modulos/CL-008-facturacion/README.md @@ -0,0 +1,20 @@ +# CL-008: Facturacion + +**Módulo:** Facturacion +**Estado:** PLANIFICADO + +## Descripción +Cobros y CFDI de salud + +## Funcionalidades Principales +- Por definir en fase de análisis + +## Cumplimiento Normativo +- NOM-024-SSA3-2012 (si aplica) +- LFPDPPP + +## SPECS Aplicables +- Ver HERENCIA-SPECS-CORE.md + +--- +**Última actualización:** 2025-12-08 diff --git a/docs/02-definicion-modulos/CL-009-reportes/README.md b/docs/02-definicion-modulos/CL-009-reportes/README.md new file mode 100644 index 0000000..127c5b1 --- /dev/null +++ b/docs/02-definicion-modulos/CL-009-reportes/README.md @@ -0,0 +1,20 @@ +# CL-009: Reportes + +**Módulo:** Reportes +**Estado:** PLANIFICADO + +## Descripción +Dashboard y estadísticas clínicas + +## Funcionalidades Principales +- Por definir en fase de análisis + +## Cumplimiento Normativo +- NOM-024-SSA3-2012 (si aplica) +- LFPDPPP + +## SPECS Aplicables +- Ver HERENCIA-SPECS-CORE.md + +--- +**Última actualización:** 2025-12-08 diff --git a/docs/02-definicion-modulos/CL-010-telemedicina/README.md b/docs/02-definicion-modulos/CL-010-telemedicina/README.md new file mode 100644 index 0000000..749cf60 --- /dev/null +++ b/docs/02-definicion-modulos/CL-010-telemedicina/README.md @@ -0,0 +1,20 @@ +# CL-010: Telemedicina + +**Módulo:** Telemedicina +**Estado:** PLANIFICADO + +## Descripción +Videoconsultas remotas + +## Funcionalidades Principales +- Por definir en fase de análisis + +## Cumplimiento Normativo +- NOM-024-SSA3-2012 (si aplica) +- LFPDPPP + +## SPECS Aplicables +- Ver HERENCIA-SPECS-CORE.md + +--- +**Última actualización:** 2025-12-08 diff --git a/docs/02-definicion-modulos/CL-011-expediente/README.md b/docs/02-definicion-modulos/CL-011-expediente/README.md new file mode 100644 index 0000000..0c84837 --- /dev/null +++ b/docs/02-definicion-modulos/CL-011-expediente/README.md @@ -0,0 +1,20 @@ +# CL-011: Expediente + +**Módulo:** Expediente +**Estado:** PLANIFICADO + +## Descripción +Historia clínica completa NOM-024 + +## Funcionalidades Principales +- Por definir en fase de análisis + +## Cumplimiento Normativo +- NOM-024-SSA3-2012 (si aplica) +- LFPDPPP + +## SPECS Aplicables +- Ver HERENCIA-SPECS-CORE.md + +--- +**Última actualización:** 2025-12-08 diff --git a/docs/02-definicion-modulos/CL-012-imagenologia/README.md b/docs/02-definicion-modulos/CL-012-imagenologia/README.md new file mode 100644 index 0000000..e4cef1d --- /dev/null +++ b/docs/02-definicion-modulos/CL-012-imagenologia/README.md @@ -0,0 +1,20 @@ +# CL-012: Imagenologia + +**Módulo:** Imagenologia +**Estado:** PLANIFICADO + +## Descripción +Visor DICOM y estudios de imagen + +## Funcionalidades Principales +- Por definir en fase de análisis + +## Cumplimiento Normativo +- NOM-024-SSA3-2012 (si aplica) +- LFPDPPP + +## SPECS Aplicables +- Ver HERENCIA-SPECS-CORE.md + +--- +**Última actualización:** 2025-12-08 diff --git a/docs/02-definicion-modulos/INDICE-MODULOS.md b/docs/02-definicion-modulos/INDICE-MODULOS.md new file mode 100644 index 0000000..46958e2 --- /dev/null +++ b/docs/02-definicion-modulos/INDICE-MODULOS.md @@ -0,0 +1,136 @@ +# Índice de Módulos - ERP Clínicas + +**Versión:** 1.0 +**Fecha:** 2025-12-08 +**Total Módulos:** 12 + +--- + +## Resumen + +| Código | Nombre | Descripción | Reutilización Core | Estado | +|--------|--------|-------------|-------------------|--------| +| CL-001 | Fundamentos | Auth, Users, Tenants | 100% | PLANIFICADO | +| CL-002 | Pacientes | Registro y expediente | 20% | PLANIFICADO | +| CL-003 | Citas | Agenda médica | 30% | PLANIFICADO | +| CL-004 | Consultas | Notas médicas | 0% | PLANIFICADO | +| CL-005 | Recetas | Prescripciones | 10% | PLANIFICADO | +| CL-006 | Laboratorio | Estudios y resultados | 10% | PLANIFICADO | +| CL-007 | Farmacia | Inventario medicamentos | 60% | PLANIFICADO | +| CL-008 | Facturación | Cobros y seguros | 50% | PLANIFICADO | +| CL-009 | Reportes | Estadísticas clínicas | 60% | PLANIFICADO | +| CL-010 | Telemedicina | Consultas remotas | 0% | PLANIFICADO | +| CL-011 | Expediente | Historia clínica completa | 10% | PLANIFICADO | +| CL-012 | Imagenología | Estudios DICOM | 5% | PLANIFICADO | + +--- + +## Detalle por Módulo + +### CL-001: Fundamentos +**Herencia:** 100% del core +- Usuarios: Médicos, Enfermeras, Recepcionistas, Admin +- Roles con permisos de acceso a expedientes +- 2FA obligatorio para personal médico + +### CL-002: Pacientes +**Herencia:** 20% +- Registro de pacientes +- Datos de contacto y emergencia +- Seguro médico +- Antecedentes y alergias + +### CL-003: Citas +**Herencia:** 30% +- Programación de citas +- Agenda por especialista +- Recordatorios (SMS, Email, WhatsApp) +- Confirmaciones + +### CL-004: Consultas +**Herencia:** 0% - Nuevo +- Notas médicas +- Signos vitales +- Exploración física +- Diagnósticos (CIE-10) + +### CL-005: Recetas +**Herencia:** 10% +- Recetas electrónicas +- Indicaciones médicas +- Firma electrónica (NOM-151) +- Historial de prescripciones + +### CL-006: Laboratorio +**Herencia:** 10% +- Solicitud de estudios +- Resultados de laboratorio +- Valores de referencia +- Alertas de resultados críticos + +### CL-007: Farmacia +**Herencia:** 60% +- Inventario de medicamentos +- Control de caducidades +- Despacho de recetas +- Alertas de interacciones + +### CL-008: Facturación +**Herencia:** 50% +- Cobro de consultas +- Integración con seguros +- CFDI de salud +- Cuentas por cobrar + +### CL-009: Reportes +**Herencia:** 60% +- Dashboard clínico +- Estadísticas de consultas +- Indicadores de salud +- Reportes epidemiológicos + +### CL-010: Telemedicina +**Herencia:** 0% - Nuevo +- Videoconsultas +- Chat con pacientes +- Compartir pantalla +- Grabación (opcional) + +### CL-011: Expediente +**Herencia:** 10% +- Historia clínica completa +- Línea de tiempo médica +- Resumen de antecedentes +- Exportación (NOM-024) + +### CL-012: Imagenología +**Herencia:** 5% +- Visor DICOM +- Almacenamiento de estudios +- Reportes radiológicos +- Integración PACS + +--- + +## Story Points Estimados + +| Módulo | SP Backend | SP Frontend | SP Total | +|--------|-----------|-------------|----------| +| CL-001 | 0 | 0 | 0 | +| CL-002 | 21 | 13 | 34 | +| CL-003 | 21 | 21 | 42 | +| CL-004 | 21 | 21 | 42 | +| CL-005 | 13 | 13 | 26 | +| CL-006 | 21 | 13 | 34 | +| CL-007 | 13 | 8 | 21 | +| CL-008 | 21 | 13 | 34 | +| CL-009 | 13 | 13 | 26 | +| CL-010 | 34 | 34 | 68 | +| CL-011 | 21 | 13 | 34 | +| CL-012 | 21 | 13 | 34 | +| **Total** | **220** | **175** | **395** | + +--- + +**Índice de módulos oficial** +**Última actualización:** 2025-12-08 diff --git a/docs/08-epicas/EPIC-CL-001-fundamentos.md b/docs/08-epicas/EPIC-CL-001-fundamentos.md new file mode 100644 index 0000000..2fb71cf --- /dev/null +++ b/docs/08-epicas/EPIC-CL-001-fundamentos.md @@ -0,0 +1,66 @@ +# Épica: Fundamentos del Sistema Clínico + +**Código:** EPIC-CL-001 +**Módulos:** CL-001, CL-002, CL-003 +**Estado:** PLANIFICADO + +--- + +## Descripción + +Implementación de los módulos fundacionales del ERP Clínicas, incluyendo la configuración inicial con seguridad reforzada, registro de pacientes y agenda de citas. + +--- + +## Objetivos + +1. Configurar el ambiente con seguridad médica (2FA, encriptación) +2. Implementar el registro de pacientes con expediente básico +3. Establecer la agenda de citas con recordatorios + +--- + +## Módulos Incluidos + +| Módulo | Descripción | SP Estimados | +|--------|-------------|--------------| +| CL-001 | Fundamentos (2FA obligatorio) | 0 | +| CL-002 | Pacientes | 34 | +| CL-003 | Citas | 42 | + +--- + +## User Stories Principales + +1. Como médico, quiero iniciar sesión con 2FA +2. Como recepcionista, quiero registrar un nuevo paciente +3. Como recepcionista, quiero programar una cita +4. Como paciente, quiero recibir recordatorio de mi cita + +--- + +## Criterios de Aceptación + +- [ ] 2FA obligatorio para personal médico +- [ ] Encriptación de datos sensibles (antecedentes, alergias) +- [ ] Registro de pacientes con datos de seguro +- [ ] Agenda funcional con confirmaciones +- [ ] Recordatorios automáticos (24h y 2h antes) + +--- + +## Cumplimiento Normativo + +- NOM-024-SSA3-2012: Estructura de expediente +- LFPDPPP: Protección de datos personales + +--- + +## Story Points Totales + +**76 SP** + +--- + +**Épica fundacional** +**Última actualización:** 2025-12-08 diff --git a/docs/08-epicas/EPIC-CL-002-pacientes.md b/docs/08-epicas/EPIC-CL-002-pacientes.md new file mode 100644 index 0000000..4bf9b70 --- /dev/null +++ b/docs/08-epicas/EPIC-CL-002-pacientes.md @@ -0,0 +1,247 @@ +# EPICA: EPIC-CL-002 - Pacientes + +## Metadata + +| Campo | Valor | +|-------|-------| +| **ID** | EPIC-CL-002 | +| **Nombre** | Pacientes | +| **Modulo** | pacientes | +| **Fase** | Fase 1 - MVP | +| **Prioridad** | P0 (Critico) | +| **Estado** | Backlog | +| **Story Points** | 38 | +| **Sprint(s)** | Sprint 2-3 | + +--- + +## Descripcion + +Registro y gestión integral de pacientes. Incluye datos demográficos, datos de contacto, información de seguros médicos, contactos de emergencia, consentimientos informados y portal de acceso para pacientes. + +--- + +## Objetivo de Negocio + +- Expediente único del paciente +- Cumplimiento de NOM-024-SSA3-2012 +- Agilizar proceso de registro +- Datos actualizados y accesibles +- Comunicación efectiva con pacientes + +--- + +## Historias de Usuario + +| ID | Historia | Prioridad | SP | Estado | +|----|----------|-----------|-----|--------| +| US-CL002-001 | Como recepcionista, quiero registrar paciente nuevo con datos mínimos para agilizar primera cita | P0 | 5 | Backlog | +| US-CL002-002 | Como recepcionista, quiero buscar paciente por nombre, teléfono o CURP para consultar expediente | P0 | 3 | Backlog | +| US-CL002-003 | Como recepcionista, quiero registrar datos de seguro médico del paciente para facturación | P0 | 3 | Backlog | +| US-CL002-004 | Como recepcionista, quiero registrar contactos de emergencia del paciente | P0 | 2 | Backlog | +| US-CL002-005 | Como paciente, quiero firmar consentimiento informado digitalmente para autorizar tratamientos | P0 | 5 | Backlog | +| US-CL002-006 | Como médico, quiero ver ficha completa del paciente antes de la consulta | P0 | 3 | Backlog | +| US-CL002-007 | Como paciente, quiero acceder a mi portal para ver citas e historial | P1 | 8 | Backlog | +| US-CL002-008 | Como admin, quiero configurar campos obligatorios según tipo de paciente | P1 | 3 | Backlog | +| US-CL002-009 | Como recepcionista, quiero registrar datos del menor y de su tutor | P0 | 3 | Backlog | +| US-CL002-010 | Como admin, quiero fusionar expedientes duplicados preservando historial | P2 | 3 | Backlog | + +**Total Story Points:** 38 SP + +--- + +## Datos del Paciente + +``` +┌─────────────────────────────────────────────────────────┐ +│ EXPEDIENTE DEL PACIENTE │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ DATOS PERSONALES │ +│ ├── Nombre completo │ +│ ├── Fecha de nacimiento / Edad │ +│ ├── Sexo │ +│ ├── CURP │ +│ ├── Estado civil │ +│ ├── Ocupación │ +│ └── Escolaridad │ +│ │ +│ CONTACTO │ +│ ├── Teléfono principal │ +│ ├── Teléfono alternativo │ +│ ├── Email │ +│ ├── Dirección completa │ +│ └── Preferencia de contacto │ +│ │ +│ EMERGENCIA │ +│ ├── Nombre del contacto │ +│ ├── Parentesco │ +│ └── Teléfono │ +│ │ +│ SEGURO MÉDICO │ +│ ├── Aseguradora │ +│ ├── Número de póliza │ +│ ├── Vigencia │ +│ └── Tipo de cobertura │ +│ │ +│ MENORES DE EDAD │ +│ ├── Datos del tutor/responsable │ +│ ├── Parentesco │ +│ └── Identificación del tutor │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Consentimiento Informado Digital + +``` +┌─────────────────────────────────────────────────────────┐ +│ CONSENTIMIENTO INFORMADO │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ TIPOS DE CONSENTIMIENTO │ +│ ├── General (tratamientos y procedimientos) │ +│ ├── Específico por procedimiento │ +│ ├── Menores (firma del tutor) │ +│ └── Tratamiento de datos personales (LFPDPPP) │ +│ │ +│ ELEMENTOS │ +│ ├── Texto del consentimiento │ +│ ├── Firma digital del paciente │ +│ ├── Fecha y hora de firma │ +│ ├── IP y dispositivo │ +│ └── PDF generado y almacenado │ +│ │ +│ VALIDEZ │ +│ ├── Vigencia configurable │ +│ ├── Renovación automática │ +│ └── Revocación por el paciente │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Criterios de Aceptacion de la Epica + +**Funcionales:** +- [ ] Registro de paciente con validación de datos +- [ ] Búsqueda por múltiples criterios +- [ ] Registro de datos de seguro +- [ ] Contactos de emergencia +- [ ] Consentimiento informado digital +- [ ] Ficha completa del paciente +- [ ] Portal del paciente +- [ ] Manejo de menores con tutor + +**No Funcionales:** +- [ ] Búsqueda < 1 segundo +- [ ] Encriptación de datos sensibles +- [ ] Cumplimiento NOM-024-SSA3-2012 +- [ ] Auditoría de accesos + +**Tecnicos:** +- [ ] Validación de CURP +- [ ] Firma digital integrada +- [ ] Encriptación AES-256 para datos sensibles +- [ ] Portal web para pacientes + +--- + +## Dependencias + +**Esta epica depende de:** +| Epica/Modulo | Estado | Bloqueante | +|--------------|--------|------------| +| EPIC-CL-001 Fundamentos | Backlog | Si | + +**Esta epica bloquea:** +| Epica/Modulo | Razon | +|--------------|-------| +| EPIC-CL-003 Citas | Requiere pacientes registrados | +| EPIC-CL-004 Consultas | Requiere datos del paciente | +| EPIC-CL-011 Expediente | Requiere pacientes | + +--- + +## Desglose Tecnico + +**Database:** +- [ ] Schema: `patients` +- [ ] Tablas: 7 (patients, emergency_contacts, insurance_info, consents, consent_signatures, minors, patient_merge_log) +- [ ] Funciones: 2 (validate_curp, encrypt_sensitive) +- [ ] Indices: Por CURP, teléfono, nombre, fecha nacimiento + +**Backend:** +- [ ] Modulo: `patients` +- [ ] Entities: 5 (Patient, EmergencyContact, InsuranceInfo, Consent, ConsentSignature) +- [ ] Endpoints: 15 +- [ ] Tests: 30 + +**Frontend:** +- [ ] Paginas: 5 (PatientList, PatientForm, PatientDetail, ConsentSign, PatientPortal) +- [ ] Componentes: 12 (PatientCard, SearchBar, ConsentModal, SignaturePad, etc.) +- [ ] Portal del paciente (separado) +- [ ] Stores: 1 (patientsStore) + +--- + +## Endpoints API + +| Metodo | Endpoint | Descripcion | +|--------|----------|-------------| +| POST | /api/patients | Registrar paciente | +| GET | /api/patients/search | Buscar pacientes | +| GET | /api/patients/:id | Detalle de paciente | +| PATCH | /api/patients/:id | Actualizar paciente | +| POST | /api/patients/:id/insurance | Agregar seguro | +| POST | /api/patients/:id/emergency-contacts | Agregar contacto | +| POST | /api/patients/:id/consents/:consentId/sign | Firmar consentimiento | +| GET | /api/patients/:id/consents | Ver consentimientos | +| POST | /api/patients/merge | Fusionar expedientes | + +--- + +## Riesgos + +| Riesgo | Probabilidad | Impacto | Mitigacion | +|--------|--------------|---------|------------| +| Datos duplicados | Alta | Medio | Validación de CURP + alertas | +| Fuga de datos sensibles | Baja | Alto | Encriptación + auditoría | +| Consentimiento inválido | Baja | Alto | Firma digital con evidencia | + +--- + +## Definition of Ready (DoR) + +- [x] Historias de usuario definidas +- [x] Criterios de aceptacion claros +- [x] Dependencias identificadas +- [x] Estimacion completada +- [ ] Textos de consentimiento aprobados +- [ ] Campos obligatorios por regulación definidos + +## Definition of Done (DoD) + +- [ ] Registro completo de pacientes +- [ ] Búsqueda multi-criterio funcionando +- [ ] Consentimiento digital operativo +- [ ] Datos sensibles encriptados +- [ ] Tests de integración pasando +- [ ] Documentación de API + +--- + +## Historial + +| Fecha | Cambio | Autor | +|-------|--------|-------| +| 2025-12-08 | Creacion de epica | Claude-Agent | + +--- + +**Creada por:** Claude-Agent +**Fecha:** 2025-12-08 +**Ultima actualizacion:** 2025-12-08 diff --git a/docs/08-epicas/EPIC-CL-003-citas.md b/docs/08-epicas/EPIC-CL-003-citas.md new file mode 100644 index 0000000..b929877 --- /dev/null +++ b/docs/08-epicas/EPIC-CL-003-citas.md @@ -0,0 +1,270 @@ +# EPICA: EPIC-CL-003 - Citas (Agenda Médica) + +## Metadata + +| Campo | Valor | +|-------|-------| +| **ID** | EPIC-CL-003 | +| **Nombre** | Citas (Agenda Médica) | +| **Modulo** | citas | +| **Fase** | Fase 1 - MVP | +| **Prioridad** | P0 (Critico) | +| **Estado** | Backlog | +| **Story Points** | 42 | +| **Sprint(s)** | Sprint 3-4 | + +--- + +## Descripcion + +Sistema de agenda médica para programación de citas. Gestión de horarios por médico y consultorio, confirmación de citas, recordatorios automáticos, lista de espera y módulo de check-in para llegada de pacientes. + +--- + +## Objetivo de Negocio + +- Optimizar uso de consultorios +- Reducir ausentismo con recordatorios +- Mejorar experiencia del paciente +- Control de tiempos de espera +- Maximizar productividad médica + +--- + +## Historias de Usuario + +| ID | Historia | Prioridad | SP | Estado | +|----|----------|-----------|-----|--------| +| US-CL003-001 | Como recepcionista, quiero agendar cita seleccionando médico, fecha y hora disponible | P0 | 5 | Backlog | +| US-CL003-002 | Como recepcionista, quiero ver agenda del día por médico en formato calendario | P0 | 5 | Backlog | +| US-CL003-003 | Como recepcionista, quiero confirmar cita vía WhatsApp o llamada | P0 | 3 | Backlog | +| US-CL003-004 | Como paciente, quiero recibir recordatorio automático 24h antes de mi cita | P0 | 5 | Backlog | +| US-CL003-005 | Como recepcionista, quiero reagendar cita manteniendo historial | P0 | 3 | Backlog | +| US-CL003-006 | Como recepcionista, quiero registrar check-in del paciente al llegar | P0 | 3 | Backlog | +| US-CL003-007 | Como médico, quiero ver mis citas del día con datos del paciente | P0 | 3 | Backlog | +| US-CL003-008 | Como admin, quiero configurar horarios de atención por médico | P0 | 5 | Backlog | +| US-CL003-009 | Como recepcionista, quiero gestionar lista de espera para cancelaciones | P1 | 3 | Backlog | +| US-CL003-010 | Como paciente, quiero agendar cita desde portal web o app | P1 | 5 | Backlog | +| US-CL003-011 | Como admin, quiero bloquear horarios por vacaciones o eventos | P1 | 2 | Backlog | + +**Total Story Points:** 42 SP + +--- + +## Flujo de Cita + +``` +┌─────────────┐ +│ AGENDADA │ ← Cita programada +└──────┬──────┘ + │ + ▼ (-24h) +┌─────────────┐ +│ RECORDATORIO│ ← Envío automático WhatsApp/SMS +└──────┬──────┘ + │ + ├── Sin respuesta ────────────┐ + ▼ │ +┌─────────────┐ │ +│ CONFIRMADA │ │ +└──────┬──────┘ │ + │ │ + ▼ (Día de la cita) │ +┌─────────────┐ │ +│ CHECK-IN │ ← Paciente llega │ +└──────┬──────┘ │ + │ │ + ▼ │ +┌─────────────┐ │ +│ EN_CONSULTA │ ← Médico inicia │ +└──────┬──────┘ │ + │ │ + ▼ ▼ +┌─────────────┐ ┌─────────────┐ +│ ATENDIDA │ │ NO_ASISTIO │ +└─────────────┘ └─────────────┘ +``` + +--- + +## Configuración de Agenda + +``` +┌─────────────────────────────────────────────────────────┐ +│ AGENDA DEL DR. GARCÍA │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ HORARIO DE ATENCIÓN │ +│ ├── Lunes a Viernes: 09:00 - 14:00, 16:00 - 20:00 │ +│ ├── Sábados: 09:00 - 14:00 │ +│ └── Domingos: No labora │ +│ │ +│ DURACIÓN DE CITAS │ +│ ├── Primera vez: 45 minutos │ +│ ├── Seguimiento: 20 minutos │ +│ └── Procedimiento: 60 minutos │ +│ │ +│ CONSULTORIOS │ +│ ├── Consultorio 1 (Principal) │ +│ └── Consultorio 3 (Alterno) │ +│ │ +│ BLOQUEOS │ +│ ├── 15-22 Dic: Vacaciones │ +│ └── Cada miércoles 10:00-11:00: Junta médica │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Vista de Agenda + +``` +┌─────────────────────────────────────────────────────────┐ +│ DR. GARCÍA - Lunes 9 Diciembre 2024 │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ 09:00 │ ████████████████████ Juan Pérez (Primera vez) │ +│ 09:45 │ - DISPONIBLE - │ +│ 10:00 │ ████████ María López (Seguimiento) ✓ Confirmada│ +│ 10:20 │ - DISPONIBLE - │ +│ 10:40 │ ████████ Carlos Ruiz (Seguimiento) │ +│ 11:00 │ ▓▓▓ JUNTA MÉDICA ▓▓▓ │ +│ 12:00 │ ████████████████████████████████ Procedimiento │ +│ 13:00 │ ████████ Ana García (Seguimiento) ✓ En sala │ +│ 13:20 │ ████████ Pedro Soto (Seguimiento) │ +│ 13:40 │ - DISPONIBLE - │ +│ │ +│ ────────────── DESCANSO ────────────── │ +│ │ +│ 16:00 │ ████████████████████ Nuevo paciente (1a vez) │ +│ ... │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Criterios de Aceptacion de la Epica + +**Funcionales:** +- [ ] Agendar citas con validación de disponibilidad +- [ ] Vista de agenda diaria/semanal por médico +- [ ] Confirmación de citas +- [ ] Recordatorios automáticos (WhatsApp/SMS/Email) +- [ ] Check-in de pacientes +- [ ] Reagendar y cancelar citas +- [ ] Lista de espera +- [ ] Configuración de horarios + +**No Funcionales:** +- [ ] Carga de agenda < 2 segundos +- [ ] Envío de recordatorio en < 1 minuto +- [ ] Soporte para 10+ médicos simultáneos + +**Tecnicos:** +- [ ] Integración con WhatsApp Business API +- [ ] Calendario sincronizable (Google Calendar, Outlook) +- [ ] Notificaciones push para app +- [ ] Tiempo real con WebSockets + +--- + +## Dependencias + +**Esta epica depende de:** +| Epica/Modulo | Estado | Bloqueante | +|--------------|--------|------------| +| EPIC-CL-001 Fundamentos | Backlog | Si | +| EPIC-CL-002 Pacientes | Backlog | Si | + +**Esta epica bloquea:** +| Epica/Modulo | Razon | +|--------------|-------| +| EPIC-CL-004 Consultas | Requiere cita para iniciar consulta | +| EPIC-CL-008 Facturación | Requiere citas para facturar | + +--- + +## Desglose Tecnico + +**Database:** +- [ ] Schema: `appointments` +- [ ] Tablas: 7 (appointments, schedules, schedule_blocks, waiting_list, reminders, check_ins, appointment_types) +- [ ] Funciones: 3 (check_availability, send_reminder, calculate_wait_time) +- [ ] Indices: Por médico, fecha, paciente, estado + +**Backend:** +- [ ] Modulo: `appointments` +- [ ] Entities: 6 (Appointment, Schedule, ScheduleBlock, WaitingList, Reminder, CheckIn) +- [ ] Endpoints: 18 +- [ ] Jobs: Envío de recordatorios +- [ ] Tests: 35 + +**Frontend:** +- [ ] Paginas: 5 (Calendar, AppointmentForm, DayView, WeekView, WaitingList) +- [ ] Componentes: 15 (CalendarGrid, TimeSlot, AppointmentCard, CheckInModal, etc.) +- [ ] WebSockets para actualizaciones en tiempo real +- [ ] Stores: 1 (appointmentsStore) + +--- + +## Endpoints API + +| Metodo | Endpoint | Descripcion | +|--------|----------|-------------| +| POST | /api/appointments | Crear cita | +| GET | /api/appointments/:id | Detalle de cita | +| PATCH | /api/appointments/:id | Actualizar cita | +| DELETE | /api/appointments/:id | Cancelar cita | +| GET | /api/appointments/calendar/:doctorId | Agenda del médico | +| GET | /api/appointments/availability | Horarios disponibles | +| POST | /api/appointments/:id/confirm | Confirmar cita | +| POST | /api/appointments/:id/check-in | Registrar llegada | +| GET | /api/schedules/:doctorId | Horarios del médico | +| POST | /api/schedules/:doctorId/blocks | Bloquear horario | +| GET | /api/waiting-list | Lista de espera | + +--- + +## Riesgos + +| Riesgo | Probabilidad | Impacto | Mitigacion | +|--------|--------------|---------|------------| +| Overbooking | Media | Alto | Validación de disponibilidad | +| Recordatorios no enviados | Media | Medio | Reintentos + logs | +| Ausentismo alto | Media | Medio | Confirmación + lista de espera | + +--- + +## Definition of Ready (DoR) + +- [x] Historias de usuario definidas +- [x] Criterios de aceptacion claros +- [x] Dependencias identificadas +- [x] Estimacion completada +- [ ] Horarios de médicos definidos +- [ ] Proveedor de WhatsApp Business API seleccionado + +## Definition of Done (DoD) + +- [ ] Agenda funcional por médico +- [ ] Recordatorios automáticos enviándose +- [ ] Check-in operativo +- [ ] Lista de espera activa +- [ ] Tests de integración pasando +- [ ] Documentación de API + +--- + +## Historial + +| Fecha | Cambio | Autor | +|-------|--------|-------| +| 2025-12-08 | Creacion de epica | Claude-Agent | + +--- + +**Creada por:** Claude-Agent +**Fecha:** 2025-12-08 +**Ultima actualizacion:** 2025-12-08 diff --git a/docs/08-epicas/EPIC-CL-004-consultas.md b/docs/08-epicas/EPIC-CL-004-consultas.md new file mode 100644 index 0000000..da28b0a --- /dev/null +++ b/docs/08-epicas/EPIC-CL-004-consultas.md @@ -0,0 +1,277 @@ +# EPICA: EPIC-CL-004 - Consultas (Notas Médicas) + +## Metadata + +| Campo | Valor | +|-------|-------| +| **ID** | EPIC-CL-004 | +| **Nombre** | Consultas (Notas Médicas) | +| **Modulo** | consultas | +| **Fase** | Fase 1 - MVP | +| **Prioridad** | P0 (Critico) | +| **Estado** | Backlog | +| **Story Points** | 55 | +| **Sprint(s)** | Sprint 4-6 | + +--- + +## Descripcion + +Módulo 100% nuevo para documentación de consultas médicas. Incluye notas clínicas estructuradas (SOAP), signos vitales, diagnósticos con codificación CIE-10, planes de tratamiento, indicaciones y generación de documentos médicos. + +--- + +## Objetivo de Negocio + +- Documentación clínica completa +- Cumplimiento de NOM-004-SSA3-2012 +- Agilizar consulta médica +- Historial clínico consultable +- Soporte para decisiones clínicas + +--- + +## Historias de Usuario + +| ID | Historia | Prioridad | SP | Estado | +|----|----------|-----------|-----|--------| +| US-CL004-001 | Como médico, quiero iniciar consulta desde cita agendada para documentar atención | P0 | 3 | Backlog | +| US-CL004-002 | Como enfermera, quiero registrar signos vitales antes de la consulta | P0 | 5 | Backlog | +| US-CL004-003 | Como médico, quiero documentar nota clínica en formato SOAP | P0 | 8 | Backlog | +| US-CL004-004 | Como médico, quiero registrar diagnósticos con código CIE-10 | P0 | 5 | Backlog | +| US-CL004-005 | Como médico, quiero ver historial de consultas previas del paciente | P0 | 3 | Backlog | +| US-CL004-006 | Como médico, quiero generar indicaciones médicas imprimibles | P0 | 3 | Backlog | +| US-CL004-007 | Como médico, quiero usar plantillas de notas para consultas frecuentes | P1 | 5 | Backlog | +| US-CL004-008 | Como médico, quiero dictar nota por voz (speech-to-text) | P2 | 8 | Backlog | +| US-CL004-009 | Como médico, quiero agregar antecedentes a la historia clínica | P0 | 5 | Backlog | +| US-CL004-010 | Como médico, quiero cerrar consulta y liberar consultorio | P0 | 2 | Backlog | +| US-CL004-011 | Como admin, quiero configurar plantillas de notas por especialidad | P1 | 3 | Backlog | +| US-CL004-012 | Como auditor, quiero ver log de cambios en notas clínicas | P0 | 5 | Backlog | + +**Total Story Points:** 55 SP + +--- + +## Formato SOAP + +``` +┌─────────────────────────────────────────────────────────┐ +│ NOTA CLÍNICA - FORMATO SOAP │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ S - SUBJETIVO (Lo que el paciente refiere) │ +│ ├── Motivo de consulta │ +│ ├── Historia de la enfermedad actual │ +│ ├── Síntomas referidos │ +│ └── Evolución desde última visita │ +│ │ +│ O - OBJETIVO (Lo que el médico observa/mide) │ +│ ├── Signos vitales │ +│ │ ├── T/A: 120/80 mmHg │ +│ │ ├── FC: 72 lpm │ +│ │ ├── FR: 16 rpm │ +│ │ ├── Temp: 36.5°C │ +│ │ ├── Peso: 70 kg │ +│ │ ├── Talla: 170 cm │ +│ │ └── IMC: 24.2 │ +│ ├── Exploración física │ +│ └── Resultados de estudios │ +│ │ +│ A - ANÁLISIS (Diagnósticos) │ +│ ├── Diagnóstico principal (CIE-10) │ +│ ├── Diagnósticos secundarios │ +│ └── Diagnósticos diferenciales │ +│ │ +│ P - PLAN (Tratamiento) │ +│ ├── Medicamentos (→ Receta) │ +│ ├── Estudios solicitados (→ Lab/Imagen) │ +│ ├── Indicaciones generales │ +│ ├── Referencia a especialista │ +│ └── Próxima cita │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Flujo de Consulta + +``` +┌─────────────┐ +│ CHECK-IN │ ← Paciente llega +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│SIGNOS VITAL │ ← Enfermera registra +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ EN_CONSULTA │ ← Médico inicia +└──────┬──────┘ + │ + ├── Revisar historial + ├── Documentar SOAP + ├── Generar receta + ├── Solicitar estudios + │ + ▼ +┌─────────────┐ +│ CERRADA │ ← Consulta finalizada +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ FACTURAR │ ← Proceso de cobro +└─────────────┘ +``` + +--- + +## Criterios de Aceptacion de la Epica + +**Funcionales:** +- [ ] Iniciar consulta desde cita +- [ ] Registrar signos vitales +- [ ] Documentar nota SOAP completa +- [ ] Codificar diagnósticos CIE-10 +- [ ] Ver historial de consultas +- [ ] Generar indicaciones imprimibles +- [ ] Plantillas de notas +- [ ] Registro de antecedentes +- [ ] Auditoría de cambios + +**No Funcionales:** +- [ ] Autoguardado cada 30 segundos +- [ ] Búsqueda de CIE-10 < 500ms +- [ ] Notas no editables después de cierre +- [ ] Cumplimiento NOM-004-SSA3-2012 + +**Tecnicos:** +- [ ] Catálogo CIE-10 integrado +- [ ] Editor de texto enriquecido +- [ ] Opcional: Speech-to-text +- [ ] Generación de PDFs + +--- + +## Dependencias + +**Esta epica depende de:** +| Epica/Modulo | Estado | Bloqueante | +|--------------|--------|------------| +| EPIC-CL-001 Fundamentos | Backlog | Si | +| EPIC-CL-002 Pacientes | Backlog | Si | +| EPIC-CL-003 Citas | Backlog | Si | + +**Esta epica bloquea:** +| Epica/Modulo | Razon | +|--------------|-------| +| EPIC-CL-005 Recetas | Requiere consulta para prescribir | +| EPIC-CL-006 Laboratorio | Requiere consulta para solicitar | +| EPIC-CL-011 Expediente | Requiere notas clínicas | + +--- + +## Desglose Tecnico + +**Database:** +- [ ] Schema: `consultations` +- [ ] Tablas: 10 (consultations, vital_signs, diagnoses, treatments, indications, templates, medical_history, antecedents, note_versions, audit_log) +- [ ] Funciones: 3 (search_icd10, calculate_bmi, lock_consultation) +- [ ] Indices: Por paciente, médico, fecha, diagnóstico + +**Backend:** +- [ ] Modulo: `consultations` +- [ ] Entities: 8 (Consultation, VitalSigns, Diagnosis, Treatment, Template, MedicalHistory, Antecedent, NoteVersion) +- [ ] Endpoints: 20 +- [ ] Tests: 40 + +**Frontend:** +- [ ] Paginas: 5 (ConsultationRoom, VitalSignsForm, SOAPEditor, HistoryView, Templates) +- [ ] Componentes: 18 (SOAPSection, ICD10Search, VitalsWidget, HistoryTimeline, etc.) +- [ ] Editor WYSIWYG para notas +- [ ] Stores: 2 (consultationsStore, icd10Store) + +--- + +## Endpoints API + +| Metodo | Endpoint | Descripcion | +|--------|----------|-------------| +| POST | /api/consultations | Iniciar consulta | +| GET | /api/consultations/:id | Detalle de consulta | +| PATCH | /api/consultations/:id | Actualizar nota | +| POST | /api/consultations/:id/vitals | Registrar signos vitales | +| POST | /api/consultations/:id/diagnoses | Agregar diagnóstico | +| POST | /api/consultations/:id/close | Cerrar consulta | +| GET | /api/consultations/history/:patientId | Historial del paciente | +| GET | /api/icd10/search | Buscar código CIE-10 | +| GET | /api/templates | Listar plantillas | +| POST | /api/templates | Crear plantilla | + +--- + +## Catálogo CIE-10 + +``` +Ejemplos de códigos frecuentes: +├── J00 - Rinofaringitis aguda (resfriado común) +├── J06.9 - Infección aguda de las vías respiratorias +├── E11 - Diabetes mellitus tipo 2 +├── I10 - Hipertensión esencial +├── K30 - Dispepsia funcional +├── M54.5 - Dolor lumbar +└── F32 - Episodio depresivo +``` + +--- + +## Riesgos + +| Riesgo | Probabilidad | Impacto | Mitigacion | +|--------|--------------|---------|------------| +| Pérdida de notas | Baja | Alto | Autoguardado + versiones | +| Diagnóstico incorrecto | Media | Alto | Búsqueda asistida CIE-10 | +| Notas incompletas | Media | Medio | Validación antes de cerrar | + +--- + +## Nota Técnica + +Este módulo es **100% nuevo** y no tiene equivalente en el ERP-Core. Es específico para el sector salud y debe cumplir con las NOM mexicanas aplicables a expedientes clínicos electrónicos. + +--- + +## Definition of Ready (DoR) + +- [x] Historias de usuario definidas +- [x] Criterios de aceptacion claros +- [x] Dependencias identificadas +- [x] Estimacion completada +- [ ] Catálogo CIE-10 importado +- [ ] Plantillas iniciales definidas + +## Definition of Done (DoD) + +- [ ] Flujo completo de consulta +- [ ] Formato SOAP funcionando +- [ ] Búsqueda CIE-10 operativa +- [ ] Auditoría de cambios +- [ ] Tests de integración pasando +- [ ] Documentación de API + +--- + +## Historial + +| Fecha | Cambio | Autor | +|-------|--------|-------| +| 2025-12-08 | Creacion de epica | Claude-Agent | + +--- + +**Creada por:** Claude-Agent +**Fecha:** 2025-12-08 +**Ultima actualizacion:** 2025-12-08 diff --git a/docs/08-epicas/EPIC-CL-005-recetas.md b/docs/08-epicas/EPIC-CL-005-recetas.md new file mode 100644 index 0000000..cb3bee2 --- /dev/null +++ b/docs/08-epicas/EPIC-CL-005-recetas.md @@ -0,0 +1,243 @@ +# EPICA: EPIC-CL-005 - Recetas (Prescripciones) + +## Metadata + +| Campo | Valor | +|-------|-------| +| **ID** | EPIC-CL-005 | +| **Nombre** | Recetas (Prescripciones) | +| **Modulo** | recetas | +| **Fase** | Fase 1 - MVP | +| **Prioridad** | P0 (Critico) | +| **Estado** | Backlog | +| **Story Points** | 35 | +| **Sprint(s)** | Sprint 5-6 | + +--- + +## Descripcion + +Sistema de prescripción médica electrónica. Generación de recetas con búsqueda de medicamentos, dosificación, verificación de interacciones medicamentosas, firma electrónica (NOM-151) y envío digital al paciente o farmacia. + +--- + +## Objetivo de Negocio + +- Recetas legibles y sin errores +- Cumplimiento de NOM-151-SCFI-2016 +- Agilizar proceso de prescripción +- Evitar errores de medicación +- Trazabilidad de prescripciones + +--- + +## Historias de Usuario + +| ID | Historia | Prioridad | SP | Estado | +|----|----------|-----------|-----|--------| +| US-CL005-001 | Como médico, quiero buscar medicamento por nombre genérico o comercial | P0 | 3 | Backlog | +| US-CL005-002 | Como médico, quiero agregar medicamento a receta con dosis y frecuencia | P0 | 5 | Backlog | +| US-CL005-003 | Como médico, quiero ver alertas de interacciones medicamentosas | P0 | 8 | Backlog | +| US-CL005-004 | Como médico, quiero ver alergias conocidas del paciente al prescribir | P0 | 3 | Backlog | +| US-CL005-005 | Como médico, quiero usar recetas previas como base para nueva receta | P1 | 3 | Backlog | +| US-CL005-006 | Como médico, quiero firmar electrónicamente la receta | P0 | 5 | Backlog | +| US-CL005-007 | Como paciente, quiero recibir mi receta por email/WhatsApp | P0 | 3 | Backlog | +| US-CL005-008 | Como médico, quiero indicar si requiere receta resurtible | P1 | 2 | Backlog | +| US-CL005-009 | Como admin, quiero configurar cuadro básico de medicamentos | P1 | 3 | Backlog | + +**Total Story Points:** 35 SP + +--- + +## Estructura de Receta + +``` +┌─────────────────────────────────────────────────────────┐ +│ RECETA MÉDICA ELECTRÓNICA │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ DATOS DEL PRESCRIPTOR │ +│ ├── Nombre del médico │ +│ ├── Cédula profesional │ +│ ├── Especialidad │ +│ ├── Institución/Consultorio │ +│ └── Domicilio y teléfono │ +│ │ +│ DATOS DEL PACIENTE │ +│ ├── Nombre completo │ +│ ├── Edad │ +│ └── Sexo │ +│ │ +│ PRESCRIPCIÓN │ +│ ├── Medicamento 1 │ +│ │ ├── Nombre genérico / comercial │ +│ │ ├── Forma farmacéutica │ +│ │ ├── Concentración │ +│ │ ├── Cantidad │ +│ │ ├── Dosis │ +│ │ ├── Vía de administración │ +│ │ ├── Frecuencia │ +│ │ └── Duración del tratamiento │ +│ ├── Medicamento 2... │ +│ └── Indicaciones adicionales │ +│ │ +│ DATOS DE CONTROL │ +│ ├── Folio único │ +│ ├── Fecha de expedición │ +│ ├── Fecha de vigencia │ +│ ├── Firma electrónica del médico │ +│ └── Código QR de verificación │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Verificación de Interacciones + +``` +┌─────────────────────────────────────────────────────────┐ +│ ALERTAS DE INTERACCIÓN │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ ⚠️ INTERACCIÓN GRAVE │ +│ Warfarina + Aspirina │ +│ Riesgo: Sangrado aumentado │ +│ Recomendación: Evitar combinación o monitorear INR │ +│ │ +│ ⚠️ INTERACCIÓN MODERADA │ +│ Metformina + Alcohol │ +│ Riesgo: Acidosis láctica │ +│ Recomendación: Advertir al paciente │ +│ │ +│ ⚠️ ALERGIA CONOCIDA │ +│ Paciente alérgico a Penicilina │ +│ Medicamento prescrito: Amoxicilina │ +│ Acción: Requiere confirmación del médico │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Criterios de Aceptacion de la Epica + +**Funcionales:** +- [ ] Búsqueda de medicamentos +- [ ] Agregar múltiples medicamentos a receta +- [ ] Alertas de interacciones +- [ ] Verificación de alergias +- [ ] Firma electrónica (e.firma o similar) +- [ ] Generación de PDF con código QR +- [ ] Envío digital al paciente +- [ ] Recetas resurtibles + +**No Funcionales:** +- [ ] Búsqueda de medicamentos < 500ms +- [ ] Verificación de interacciones < 2 segundos +- [ ] Cumplimiento NOM-151-SCFI-2016 + +**Tecnicos:** +- [ ] Catálogo de medicamentos (PLM o similar) +- [ ] Base de datos de interacciones +- [ ] Firma electrónica avanzada +- [ ] Generación de PDF con QR + +--- + +## Dependencias + +**Esta epica depende de:** +| Epica/Modulo | Estado | Bloqueante | +|--------------|--------|------------| +| EPIC-CL-001 Fundamentos | Backlog | Si | +| EPIC-CL-002 Pacientes | Backlog | Si | +| EPIC-CL-004 Consultas | Backlog | Si | + +**Esta epica bloquea:** +| Epica/Modulo | Razon | +|--------------|-------| +| EPIC-CL-007 Farmacia | Requiere recetas para surtir | + +--- + +## Desglose Tecnico + +**Database:** +- [ ] Schema: `prescriptions` +- [ ] Tablas: 6 (prescriptions, prescription_items, medications, interactions, patient_allergies, signature_logs) +- [ ] Funciones: 3 (check_interactions, validate_prescription, generate_folio) +- [ ] Indices: Por paciente, médico, fecha, medicamento + +**Backend:** +- [ ] Modulo: `prescriptions` +- [ ] Entities: 5 (Prescription, PrescriptionItem, Medication, Interaction, PatientAllergy) +- [ ] Services: InteractionChecker, SignatureService +- [ ] Endpoints: 12 +- [ ] Tests: 28 + +**Frontend:** +- [ ] Paginas: 4 (PrescriptionEditor, MedicationSearch, PrescriptionView, PrescriptionHistory) +- [ ] Componentes: 12 (MedicationLine, InteractionAlert, AllergyWarning, SignatureModal, etc.) +- [ ] Stores: 1 (prescriptionsStore) + +--- + +## Endpoints API + +| Metodo | Endpoint | Descripcion | +|--------|----------|-------------| +| POST | /api/prescriptions | Crear receta | +| GET | /api/prescriptions/:id | Detalle de receta | +| POST | /api/prescriptions/:id/items | Agregar medicamento | +| DELETE | /api/prescriptions/:id/items/:itemId | Quitar medicamento | +| POST | /api/prescriptions/:id/check-interactions | Verificar interacciones | +| POST | /api/prescriptions/:id/sign | Firmar receta | +| POST | /api/prescriptions/:id/send | Enviar al paciente | +| GET | /api/prescriptions/:id/pdf | Descargar PDF | +| GET | /api/medications/search | Buscar medicamentos | +| GET | /api/patients/:id/allergies | Alergias del paciente | + +--- + +## Riesgos + +| Riesgo | Probabilidad | Impacto | Mitigacion | +|--------|--------------|---------|------------| +| Interacciones no detectadas | Baja | Alto | Base de datos actualizada | +| Firma electrónica inválida | Baja | Alto | Proveedor certificado | +| Errores de dosificación | Media | Alto | Validaciones y rangos | + +--- + +## Definition of Ready (DoR) + +- [x] Historias de usuario definidas +- [x] Criterios de aceptacion claros +- [x] Dependencias identificadas +- [x] Estimacion completada +- [ ] Catálogo de medicamentos disponible +- [ ] Proveedor de firma electrónica seleccionado + +## Definition of Done (DoD) + +- [ ] Prescripción completa funcionando +- [ ] Alertas de interacciones operativas +- [ ] Firma electrónica válida +- [ ] Envío digital al paciente +- [ ] Tests de integración pasando +- [ ] Documentación de API + +--- + +## Historial + +| Fecha | Cambio | Autor | +|-------|--------|-------| +| 2025-12-08 | Creacion de epica | Claude-Agent | + +--- + +**Creada por:** Claude-Agent +**Fecha:** 2025-12-08 +**Ultima actualizacion:** 2025-12-08 diff --git a/docs/08-epicas/EPIC-CL-006-laboratorio.md b/docs/08-epicas/EPIC-CL-006-laboratorio.md new file mode 100644 index 0000000..20e67dd --- /dev/null +++ b/docs/08-epicas/EPIC-CL-006-laboratorio.md @@ -0,0 +1,242 @@ +# EPICA: EPIC-CL-006 - Laboratorio + +## Metadata + +| Campo | Valor | +|-------|-------| +| **ID** | EPIC-CL-006 | +| **Nombre** | Laboratorio | +| **Modulo** | laboratorio | +| **Fase** | Fase 1 - MVP | +| **Prioridad** | P1 (Alto) | +| **Estado** | Backlog | +| **Story Points** | 38 | +| **Sprint(s)** | Sprint 6-7 | + +--- + +## Descripcion + +Gestión de estudios de laboratorio clínico. Solicitud de estudios desde consulta, toma de muestras, captura de resultados, valores de referencia, alertas de valores críticos y entrega de resultados al paciente. + +--- + +## Objetivo de Negocio + +- Flujo completo de laboratorio +- Resultados oportunos +- Alertas de valores críticos +- Integración con expediente clínico +- Control de calidad + +--- + +## Historias de Usuario + +| ID | Historia | Prioridad | SP | Estado | +|----|----------|-----------|-----|--------| +| US-CL006-001 | Como médico, quiero solicitar estudios de laboratorio desde la consulta | P0 | 5 | Backlog | +| US-CL006-002 | Como laboratorista, quiero ver órdenes de estudios pendientes | P0 | 3 | Backlog | +| US-CL006-003 | Como laboratorista, quiero registrar toma de muestra con hora y responsable | P0 | 3 | Backlog | +| US-CL006-004 | Como laboratorista, quiero capturar resultados de estudios | P0 | 5 | Backlog | +| US-CL006-005 | Como laboratorista, quiero ver valores de referencia al capturar | P0 | 3 | Backlog | +| US-CL006-006 | Como médico, quiero recibir alerta de valores críticos | P0 | 5 | Backlog | +| US-CL006-007 | Como paciente, quiero descargar mis resultados desde el portal | P0 | 5 | Backlog | +| US-CL006-008 | Como médico, quiero ver historial de estudios del paciente | P1 | 3 | Backlog | +| US-CL006-009 | Como admin, quiero configurar catálogo de estudios con valores de referencia | P0 | 4 | Backlog | +| US-CL006-010 | Como laboratorista, quiero validar resultados antes de liberar | P1 | 2 | Backlog | + +**Total Story Points:** 38 SP + +--- + +## Flujo de Laboratorio + +``` +┌─────────────┐ +│ SOLICITUD │ ← Médico solicita estudios +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ RECEPCIÓN │ ← Paciente llega a lab +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│TOMA_MUESTRA │ ← Flebotomía +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ EN_PROCESO │ ← Análisis en curso +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ CAPTURA │ ← Resultados capturados +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ VALIDACIÓN │ ← QC revisa +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ LIBERADO │ ← Disponible para médico/paciente +└─────────────┘ +``` + +--- + +## Estructura de Resultados + +``` +┌─────────────────────────────────────────────────────────┐ +│ RESULTADOS DE LABORATORIO │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ BIOMETRÍA HEMÁTICA COMPLETA │ +│ ┌──────────────┬─────────┬──────────────┬───────────┐ │ +│ │ Parámetro │ Result. │ Referencia │ Estado │ │ +│ ├──────────────┼─────────┼──────────────┼───────────┤ │ +│ │ Hemoglobina │ 14.5 │ 13.5-17.5 │ ✓ Normal │ │ +│ │ Hematocrito │ 42% │ 40-52% │ ✓ Normal │ │ +│ │ Leucocitos │ 12,500 │ 4,500-11,000 │ ⚠️ Alto │ │ +│ │ Plaquetas │ 250,000 │ 150K-400K │ ✓ Normal │ │ +│ │ Glucosa │ 285 │ 70-100 │ 🔴 CRÍTICO│ │ +│ └──────────────┴─────────┴──────────────┴───────────┘ │ +│ │ +│ 🔴 VALORES CRÍTICOS DETECTADOS │ +│ Glucosa: 285 mg/dL - Notificar al médico │ +│ │ +│ Laboratorista: QFB María García │ +│ Fecha toma: 2024-12-08 09:30 │ +│ Fecha resultado: 2024-12-08 14:45 │ +│ Validado por: Dr. Roberto Sánchez │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Criterios de Aceptacion de la Epica + +**Funcionales:** +- [ ] Solicitar estudios desde consulta +- [ ] Ver órdenes pendientes +- [ ] Registrar toma de muestra +- [ ] Capturar resultados +- [ ] Valores de referencia +- [ ] Alertas de valores críticos +- [ ] Validación de resultados +- [ ] Entrega de resultados + +**No Funcionales:** +- [ ] Alerta de críticos < 1 minuto +- [ ] Historial de 5 años +- [ ] Cumplimiento normativo de laboratorio + +**Tecnicos:** +- [ ] Integración con consultas +- [ ] Integración con expediente +- [ ] Notificaciones push para críticos +- [ ] Generación de PDF de resultados + +--- + +## Dependencias + +**Esta epica depende de:** +| Epica/Modulo | Estado | Bloqueante | +|--------------|--------|------------| +| EPIC-CL-001 Fundamentos | Backlog | Si | +| EPIC-CL-002 Pacientes | Backlog | Si | +| EPIC-CL-004 Consultas | Backlog | Si | + +**Esta epica bloquea:** +| Epica/Modulo | Razon | +|--------------|-------| +| EPIC-CL-011 Expediente | Resultados son parte del expediente | + +--- + +## Desglose Tecnico + +**Database:** +- [ ] Schema: `laboratory` +- [ ] Tablas: 7 (lab_orders, lab_order_items, samples, results, result_values, studies_catalog, reference_values) +- [ ] Funciones: 3 (check_critical, calculate_status, validate_result) +- [ ] Indices: Por paciente, médico, fecha, estado + +**Backend:** +- [ ] Modulo: `laboratory` +- [ ] Entities: 6 (LabOrder, LabOrderItem, Sample, Result, ResultValue, StudyCatalog) +- [ ] Endpoints: 15 +- [ ] Tests: 30 + +**Frontend:** +- [ ] Paginas: 5 (LabOrders, SampleCollection, ResultCapture, ResultViewer, CatalogConfig) +- [ ] Componentes: 12 (OrderCard, ResultGrid, CriticalAlert, ReferenceIndicator, etc.) +- [ ] Stores: 1 (laboratoryStore) + +--- + +## Endpoints API + +| Metodo | Endpoint | Descripcion | +|--------|----------|-------------| +| POST | /api/laboratory/orders | Crear orden de estudios | +| GET | /api/laboratory/orders | Listar órdenes | +| GET | /api/laboratory/orders/:id | Detalle de orden | +| POST | /api/laboratory/orders/:id/sample | Registrar toma | +| POST | /api/laboratory/orders/:id/results | Capturar resultados | +| POST | /api/laboratory/orders/:id/validate | Validar resultados | +| GET | /api/laboratory/orders/:id/pdf | Descargar PDF | +| GET | /api/laboratory/history/:patientId | Historial del paciente | +| GET | /api/laboratory/studies | Catálogo de estudios | + +--- + +## Riesgos + +| Riesgo | Probabilidad | Impacto | Mitigacion | +|--------|--------------|---------|------------| +| Críticos no notificados | Baja | Alto | Múltiples canales de alerta | +| Resultados incorrectos | Media | Alto | Doble validación | +| Pérdida de muestras | Baja | Alto | Trazabilidad completa | + +--- + +## Definition of Ready (DoR) + +- [x] Historias de usuario definidas +- [x] Criterios de aceptacion claros +- [x] Dependencias identificadas +- [x] Estimacion completada +- [ ] Catálogo de estudios definido +- [ ] Valores de referencia documentados + +## Definition of Done (DoD) + +- [ ] Flujo completo de laboratorio +- [ ] Alertas de críticos funcionando +- [ ] Resultados en expediente +- [ ] PDF de resultados generándose +- [ ] Tests de integración pasando +- [ ] Documentación de API + +--- + +## Historial + +| Fecha | Cambio | Autor | +|-------|--------|-------| +| 2025-12-08 | Creacion de epica | Claude-Agent | + +--- + +**Creada por:** Claude-Agent +**Fecha:** 2025-12-08 +**Ultima actualizacion:** 2025-12-08 diff --git a/docs/08-epicas/EPIC-CL-007-farmacia.md b/docs/08-epicas/EPIC-CL-007-farmacia.md new file mode 100644 index 0000000..0dbbc43 --- /dev/null +++ b/docs/08-epicas/EPIC-CL-007-farmacia.md @@ -0,0 +1,239 @@ +# EPICA: EPIC-CL-007 - Farmacia + +## Metadata + +| Campo | Valor | +|-------|-------| +| **ID** | EPIC-CL-007 | +| **Nombre** | Farmacia | +| **Modulo** | farmacia | +| **Fase** | Fase 1 - MVP | +| **Prioridad** | P1 (Alto) | +| **Estado** | Backlog | +| **Story Points** | 40 | +| **Sprint(s)** | Sprint 7-8 | + +--- + +## Descripcion + +Gestión de farmacia clínica. Control de inventario de medicamentos, surtido de recetas, dispensación, control de caducidades, medicamentos controlados y punto de venta de farmacia. + +--- + +## Objetivo de Negocio + +- Control de inventario de medicamentos +- Surtido rápido de recetas +- Evitar merma por caducidad +- Cumplimiento de medicamentos controlados +- Rentabilidad de farmacia + +--- + +## Historias de Usuario + +| ID | Historia | Prioridad | SP | Estado | +|----|----------|-----------|-----|--------| +| US-CL007-001 | Como farmacéutico, quiero ver recetas pendientes de surtir | P0 | 3 | Backlog | +| US-CL007-002 | Como farmacéutico, quiero verificar stock antes de surtir | P0 | 3 | Backlog | +| US-CL007-003 | Como farmacéutico, quiero dispensar medicamentos registrando lote | P0 | 5 | Backlog | +| US-CL007-004 | Como farmacéutico, quiero cobrar la receta surtida | P0 | 5 | Backlog | +| US-CL007-005 | Como farmacéutico, quiero recibir mercancía de proveedor | P0 | 5 | Backlog | +| US-CL007-006 | Como farmacéutico, quiero ver alertas de medicamentos próximos a caducar | P0 | 3 | Backlog | +| US-CL007-007 | Como farmacéutico, quiero registrar salidas de medicamentos controlados | P0 | 5 | Backlog | +| US-CL007-008 | Como admin, quiero ver reporte de ventas de farmacia | P1 | 3 | Backlog | +| US-CL007-009 | Como admin, quiero realizar inventario físico de medicamentos | P1 | 5 | Backlog | +| US-CL007-010 | Como admin, quiero configurar márgenes de ganancia por categoría | P2 | 3 | Backlog | + +**Total Story Points:** 40 SP + +--- + +## Flujo de Dispensación + +``` +┌─────────────┐ +│ RECETA │ ← Receta electrónica del médico +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ VERIFICAR │ ← Verificar stock disponible +│ STOCK │ +└──────┬──────┘ + │ + ├── No hay stock ──► Notificar faltante + │ + ▼ +┌─────────────┐ +│ PREPARAR │ ← Tomar medicamentos de anaquel +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ VERIFICAR │ ← Doble chequeo +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ COBRAR │ ← Proceso de pago +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ ENTREGAR │ ← Dispensar al paciente +└─────────────┘ +``` + +--- + +## Control de Medicamentos + +``` +┌─────────────────────────────────────────────────────────┐ +│ CONTROL DE INVENTARIO │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ TRAZABILIDAD │ +│ ├── Código de producto │ +│ ├── Lote │ +│ ├── Fecha de caducidad │ +│ ├── Proveedor │ +│ └── Fecha de entrada │ +│ │ +│ ALERTAS DE CADUCIDAD │ +│ ├── 🔴 Caducados (vencidos) │ +│ ├── 🟠 < 30 días para vencer │ +│ ├── 🟡 < 90 días para vencer │ +│ └── Sugerencia: Promoción o devolución │ +│ │ +│ MEDICAMENTOS CONTROLADOS │ +│ ├── Libro de registro (físico y digital) │ +│ ├── Receta foliada obligatoria │ +│ ├── Control de existencias exactas │ +│ ├── Auditoría de movimientos │ +│ └── Reportes para COFEPRIS │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Criterios de Aceptacion de la Epica + +**Funcionales:** +- [ ] Ver recetas pendientes +- [ ] Verificar stock +- [ ] Dispensar con lote y caducidad +- [ ] Cobro de receta +- [ ] Recepción de mercancía +- [ ] Alertas de caducidad +- [ ] Control de medicamentos controlados +- [ ] Inventario físico + +**No Funcionales:** +- [ ] Dispensación < 3 minutos +- [ ] Trazabilidad 100% de lotes +- [ ] Cumplimiento COFEPRIS + +**Tecnicos:** +- [ ] Integración con recetas +- [ ] Integración con facturación +- [ ] Lector de código de barras +- [ ] Reportes para autoridades + +--- + +## Dependencias + +**Esta epica depende de:** +| Epica/Modulo | Estado | Bloqueante | +|--------------|--------|------------| +| EPIC-CL-001 Fundamentos | Backlog | Si | +| EPIC-CL-005 Recetas | Backlog | Si | + +**Esta epica bloquea:** +| Epica/Modulo | Razon | +|--------------|-------| +| EPIC-CL-008 Facturación | Ventas de farmacia | + +--- + +## Desglose Tecnico + +**Database:** +- [ ] Schema: `pharmacy` +- [ ] Tablas: 8 (products, stock, stock_movements, dispensations, dispensation_items, controlled_log, suppliers, physical_counts) +- [ ] Funciones: 3 (check_expiry, update_stock, log_controlled) +- [ ] Indices: Por producto, lote, caducidad, proveedor + +**Backend:** +- [ ] Modulo: `pharmacy` +- [ ] Entities: 6 (Product, Stock, StockMovement, Dispensation, DispensationItem, ControlledLog) +- [ ] Endpoints: 15 +- [ ] Tests: 30 + +**Frontend:** +- [ ] Paginas: 5 (PendingPrescriptions, Dispensation, Inventory, ExpiryAlerts, ControlledLog) +- [ ] Componentes: 12 (PrescriptionCard, StockChecker, BarcodeScanner, ExpiryCalendar, etc.) +- [ ] Stores: 1 (pharmacyStore) + +--- + +## Endpoints API + +| Metodo | Endpoint | Descripcion | +|--------|----------|-------------| +| GET | /api/pharmacy/prescriptions/pending | Recetas pendientes | +| GET | /api/pharmacy/stock/:productId | Verificar stock | +| POST | /api/pharmacy/dispensations | Registrar dispensación | +| POST | /api/pharmacy/receipts | Recibir mercancía | +| GET | /api/pharmacy/expiry-alerts | Alertas de caducidad | +| POST | /api/pharmacy/controlled-log | Registrar movimiento controlado | +| POST | /api/pharmacy/physical-count | Inventario físico | +| GET | /api/pharmacy/reports/sales | Reporte de ventas | + +--- + +## Riesgos + +| Riesgo | Probabilidad | Impacto | Mitigacion | +|--------|--------------|---------|------------| +| Merma por caducidad | Media | Medio | Alertas tempranas | +| Error en dispensación | Baja | Alto | Doble verificación | +| Faltantes de controlados | Baja | Alto | Auditorías frecuentes | + +--- + +## Definition of Ready (DoR) + +- [x] Historias de usuario definidas +- [x] Criterios de aceptacion claros +- [x] Dependencias identificadas +- [x] Estimacion completada +- [ ] Catálogo de medicamentos definido +- [ ] Proceso de controlados documentado + +## Definition of Done (DoD) + +- [ ] Flujo de dispensación funcionando +- [ ] Control de lotes y caducidad +- [ ] Registro de controlados +- [ ] Alertas de caducidad activas +- [ ] Tests de integración pasando +- [ ] Documentación de API + +--- + +## Historial + +| Fecha | Cambio | Autor | +|-------|--------|-------| +| 2025-12-08 | Creacion de epica | Claude-Agent | + +--- + +**Creada por:** Claude-Agent +**Fecha:** 2025-12-08 +**Ultima actualizacion:** 2025-12-08 diff --git a/docs/08-epicas/EPIC-CL-008-facturacion.md b/docs/08-epicas/EPIC-CL-008-facturacion.md new file mode 100644 index 0000000..dc1b215 --- /dev/null +++ b/docs/08-epicas/EPIC-CL-008-facturacion.md @@ -0,0 +1,268 @@ +# EPICA: EPIC-CL-008 - Facturación + +## Metadata + +| Campo | Valor | +|-------|-------| +| **ID** | EPIC-CL-008 | +| **Nombre** | Facturación | +| **Modulo** | facturacion | +| **Fase** | Fase 1 - MVP | +| **Prioridad** | P0 (Critico) | +| **Estado** | Backlog | +| **Story Points** | 38 | +| **Sprint(s)** | Sprint 8-9 | + +--- + +## Descripcion + +Sistema de facturación para servicios médicos. Incluye cobro de consultas, procedimientos, estudios de laboratorio, medicamentos y facturación a aseguradoras. Generación de CFDI 4.0 y notas de crédito. + +--- + +## Objetivo de Negocio + +- Cobro oportuno de servicios +- Facturación correcta a aseguradoras +- Cumplimiento fiscal +- Control de cuentas por cobrar +- Reportes financieros + +--- + +## Historias de Usuario + +| ID | Historia | Prioridad | SP | Estado | +|----|----------|-----------|-----|--------| +| US-CL008-001 | Como cajero, quiero generar cuenta del paciente con servicios prestados | P0 | 5 | Backlog | +| US-CL008-002 | Como cajero, quiero cobrar consulta con múltiples formas de pago | P0 | 5 | Backlog | +| US-CL008-003 | Como cajero, quiero facturar a nombre del paciente con sus datos fiscales | P0 | 5 | Backlog | +| US-CL008-004 | Como admin, quiero facturar a aseguradora con expediente de reclamación | P0 | 8 | Backlog | +| US-CL008-005 | Como cajero, quiero generar nota de crédito por cancelación o error | P0 | 3 | Backlog | +| US-CL008-006 | Como paciente, quiero pagar mi cuenta desde el portal web | P1 | 5 | Backlog | +| US-CL008-007 | Como admin, quiero ver cuentas por cobrar pendientes | P0 | 3 | Backlog | +| US-CL008-008 | Como admin, quiero configurar precios de servicios y procedimientos | P0 | 2 | Backlog | +| US-CL008-009 | Como admin, quiero ver reporte de ingresos por período | P1 | 2 | Backlog | + +**Total Story Points:** 38 SP + +--- + +## Flujo de Facturación + +``` +COBRO DIRECTO (Paciente paga) + +┌─────────────┐ +│ CUENTA │ ← Servicios prestados +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ COBRO │ ← Efectivo/Tarjeta +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ CFDI │ ← Timbrado +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ ENTREGADO │ ← PDF + XML al paciente +└─────────────┘ + + +COBRO A ASEGURADORA + +┌─────────────┐ +│ CUENTA │ ← Servicios prestados +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ EXPEDIENTE │ ← Documentos requeridos +│ RECLAMACIÓN │ (notas, estudios, etc.) +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ ENVÍO │ ← A la aseguradora +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ SEGUIMIENTO │ ← Pendiente de pago +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ COBRADO │ ← Pago recibido +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ CFDI │ ← Factura a aseguradora +└─────────────┘ +``` + +--- + +## Cuenta del Paciente + +``` +┌─────────────────────────────────────────────────────────┐ +│ CUENTA - PACIENTE: Juan Pérez │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ SERVICIOS │ +│ ┌────────────────────────────────────┬───────────────┐ │ +│ │ Concepto │ Importe │ │ +│ ├────────────────────────────────────┼───────────────┤ │ +│ │ Consulta medicina general │ $800.00 │ │ +│ │ Biometría hemática │ $350.00 │ │ +│ │ Química sanguínea 6 elementos │ $450.00 │ │ +│ │ Paracetamol 500mg x 20 │ $120.00 │ │ +│ │ Amoxicilina 500mg x 21 │ $280.00 │ │ +│ ├────────────────────────────────────┼───────────────┤ │ +│ │ SUBTOTAL │ $2,000.00 │ │ +│ │ IVA (16%) │ $0.00 │ │ +│ │ ───────────────────────────────────────────────── │ │ +│ │ TOTAL │ $2,000.00 │ │ +│ └────────────────────────────────────┴───────────────┘ │ +│ │ +│ COBERTURA SEGURO │ +│ ├── Aseguradora: GNP Seguros │ +│ ├── Póliza: 1234567 │ +│ ├── Cobertura consulta: 100% │ +│ ├── Cobertura laboratorio: 80% │ +│ └── Copago paciente: $160.00 │ +│ │ +│ FORMA DE PAGO │ +│ ├── Cargo a seguro: $1,840.00 │ +│ └── Copago paciente: $160.00 (Pagado TDC) │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Criterios de Aceptacion de la Epica + +**Funcionales:** +- [ ] Generar cuenta con servicios +- [ ] Cobrar con múltiples formas de pago +- [ ] Facturación CFDI 4.0 +- [ ] Facturación a aseguradoras +- [ ] Notas de crédito +- [ ] Portal de pagos +- [ ] Cuentas por cobrar +- [ ] Reportes de ingresos + +**No Funcionales:** +- [ ] Timbrado < 5 segundos +- [ ] Historial de 5 años +- [ ] Cumplimiento fiscal + +**Tecnicos:** +- [ ] Integración con PAC +- [ ] Integración con todos los módulos +- [ ] Pasarela de pagos +- [ ] Reportes financieros + +--- + +## Dependencias + +**Esta epica depende de:** +| Epica/Modulo | Estado | Bloqueante | +|--------------|--------|------------| +| EPIC-CL-001 Fundamentos | Backlog | Si | +| EPIC-CL-002 Pacientes | Backlog | Si | +| EPIC-CL-003 Citas | Backlog | Parcial | +| EPIC-CL-004 Consultas | Backlog | Parcial | +| EPIC-CL-006 Laboratorio | Backlog | Parcial | +| EPIC-CL-007 Farmacia | Backlog | Parcial | + +--- + +## Desglose Tecnico + +**Database:** +- [ ] Schema: `billing` +- [ ] Tablas: 8 (accounts, account_items, payments, invoices, invoice_items, insurance_claims, price_lists, services) +- [ ] Funciones: 3 (calculate_account, generate_invoice, process_payment) +- [ ] Indices: Por paciente, fecha, estado, aseguradora + +**Backend:** +- [ ] Modulo: `billing` +- [ ] Entities: 7 (Account, AccountItem, Payment, Invoice, InvoiceItem, InsuranceClaim, Service) +- [ ] Endpoints: 15 +- [ ] Tests: 30 + +**Frontend:** +- [ ] Paginas: 5 (Accounts, Checkout, InvoiceList, InsuranceClaims, Reports) +- [ ] Componentes: 12 (AccountSummary, PaymentForm, InvoiceViewer, ClaimTracker, etc.) +- [ ] Stores: 1 (billingStore) + +--- + +## Endpoints API + +| Metodo | Endpoint | Descripcion | +|--------|----------|-------------| +| GET | /api/billing/accounts/:patientId | Cuenta del paciente | +| POST | /api/billing/accounts/:id/items | Agregar servicio | +| POST | /api/billing/accounts/:id/pay | Registrar pago | +| POST | /api/billing/invoices | Generar factura | +| GET | /api/billing/invoices/:id/pdf | Descargar PDF | +| POST | /api/billing/invoices/:id/cancel | Cancelar factura | +| POST | /api/billing/credit-notes | Crear nota de crédito | +| POST | /api/billing/insurance-claims | Crear reclamación | +| GET | /api/billing/pending | Cuentas por cobrar | +| GET | /api/billing/reports/income | Reporte de ingresos | + +--- + +## Riesgos + +| Riesgo | Probabilidad | Impacto | Mitigacion | +|--------|--------------|---------|------------| +| Rechazo de aseguradora | Media | Alto | Expediente completo | +| Errores en facturación | Media | Alto | Validaciones antes de timbrar | +| Morosidad | Media | Medio | Seguimiento de cuentas | + +--- + +## Definition of Ready (DoR) + +- [x] Historias de usuario definidas +- [x] Criterios de aceptacion claros +- [x] Dependencias identificadas +- [x] Estimacion completada +- [ ] Lista de precios definida +- [ ] Convenios con aseguradoras documentados + +## Definition of Done (DoD) + +- [ ] Flujo de cobro funcionando +- [ ] Facturación CFDI operativa +- [ ] Facturación a aseguradoras +- [ ] Reportes financieros +- [ ] Tests de integración pasando +- [ ] Documentación de API + +--- + +## Historial + +| Fecha | Cambio | Autor | +|-------|--------|-------| +| 2025-12-08 | Creacion de epica | Claude-Agent | + +--- + +**Creada por:** Claude-Agent +**Fecha:** 2025-12-08 +**Ultima actualizacion:** 2025-12-08 diff --git a/docs/08-epicas/EPIC-CL-009-reportes.md b/docs/08-epicas/EPIC-CL-009-reportes.md new file mode 100644 index 0000000..3f35086 --- /dev/null +++ b/docs/08-epicas/EPIC-CL-009-reportes.md @@ -0,0 +1,223 @@ +# EPICA: EPIC-CL-009 - Reportes + +## Metadata + +| Campo | Valor | +|-------|-------| +| **ID** | EPIC-CL-009 | +| **Nombre** | Reportes | +| **Modulo** | reportes | +| **Fase** | Fase 1 - MVP | +| **Prioridad** | P1 (Alto) | +| **Estado** | Backlog | +| **Story Points** | 25 | +| **Sprint(s)** | Sprint 9-10 | + +--- + +## Descripcion + +Dashboard y reportes para gestión clínica. Métricas de productividad médica, ocupación de consultorios, estadísticas de diagnósticos, indicadores financieros y reportes para autoridades sanitarias. + +--- + +## Objetivo de Negocio + +- Visibilidad de operaciones +- Medición de productividad +- Toma de decisiones informada +- Cumplimiento de reportes regulatorios +- Identificación de oportunidades + +--- + +## Historias de Usuario + +| ID | Historia | Prioridad | SP | Estado | +|----|----------|-----------|-----|--------| +| US-CL009-001 | Como director, quiero ver dashboard de consultas del día en tiempo real | P0 | 5 | Backlog | +| US-CL009-002 | Como director, quiero ver productividad por médico (consultas/día) | P0 | 3 | Backlog | +| US-CL009-003 | Como director, quiero ver ocupación de consultorios por hora | P1 | 3 | Backlog | +| US-CL009-004 | Como director, quiero ver top 10 diagnósticos más frecuentes | P1 | 3 | Backlog | +| US-CL009-005 | Como admin, quiero ver reporte de ingresos vs gastos | P0 | 3 | Backlog | +| US-CL009-006 | Como admin, quiero generar reporte para SINBA/SISVER (autoridades) | P0 | 5 | Backlog | +| US-CL009-007 | Como admin, quiero exportar reportes a Excel | P0 | 2 | Backlog | +| US-CL009-008 | Como médico, quiero ver mi resumen de atenciones del mes | P1 | 1 | Backlog | + +**Total Story Points:** 25 SP + +--- + +## Dashboard Principal + +``` +┌─────────────────────────────────────────────────────────┐ +│ DASHBOARD CLÍNICA │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ +│ │ CITAS HOY │ │ CONSULTAS │ │ INGRESOS HOY │ │ +│ │ 45 │ │ 38 │ │ $42,300 │ │ +│ │ ▲ 12% │ │ ▲ 8% │ │ ▲ 15% │ │ +│ └──────────────┘ └──────────────┘ └──────────────┘ │ +│ │ +│ PRODUCTIVIDAD POR MÉDICO (HOY) │ +│ ┌────────────────────────────────────────────────────┐ │ +│ │ Dr. García ████████████████████ 15 consultas │ │ +│ │ Dra. López ████████████████ 12 consultas │ │ +│ │ Dr. Martínez ██████████ 8 consultas │ │ +│ │ Dra. Sánchez ████████ 6 consultas │ │ +│ └────────────────────────────────────────────────────┘ │ +│ │ +│ OCUPACIÓN CONSULTORIOS │ +│ ┌────────────────────────────────────────────────────┐ │ +│ │ 8 9 10 11 12 13 14 15 16 17 18 19 20 │ │ +│ │ C-1: ██ ██ ██ ██ ░░ ░░ ██ ██ ██ ██ ██ ░░ ░░ │ │ +│ │ C-2: ██ ██ ██ ░░ ░░ ░░ ██ ██ ██ ██ ░░ ░░ ░░ │ │ +│ │ C-3: ░░ ██ ██ ██ ██ ░░ ██ ██ ██ ░░ ░░ ░░ ░░ │ │ +│ └────────────────────────────────────────────────────┘ │ +│ │ +│ TOP 5 DIAGNÓSTICOS (ESTE MES) │ +│ 1. J06.9 - IVAS (185 casos) │ +│ 2. I10 - Hipertensión (142 casos) │ +│ 3. E11 - Diabetes T2 (98 casos) │ +│ 4. K30 - Dispepsia (76 casos) │ +│ 5. M54.5 - Lumbalgia (54 casos) │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Reportes Disponibles + +``` +OPERATIVOS +├── Consultas por período +├── Productividad por médico +├── Ocupación de consultorios +├── Tiempo de espera promedio +├── Ausentismo de pacientes +└── Estudios de laboratorio realizados + +CLÍNICOS +├── Diagnósticos más frecuentes +├── Medicamentos más prescritos +├── Estudios más solicitados +└── Pacientes crónicos + +FINANCIEROS +├── Ingresos por servicio +├── Ingresos por aseguradora +├── Cuentas por cobrar +├── Ventas de farmacia +└── Rentabilidad por servicio + +REGULATORIOS +├── SINBA (notificación epidemiológica) +├── SISVER (vigilancia epidemiológica) +├── Reporte de medicamentos controlados +└── Estadísticas para acreditación +``` + +--- + +## Criterios de Aceptacion de la Epica + +**Funcionales:** +- [ ] Dashboard en tiempo real +- [ ] Productividad por médico +- [ ] Ocupación de consultorios +- [ ] Top diagnósticos +- [ ] Reportes financieros +- [ ] Reportes regulatorios +- [ ] Exportación a Excel + +**No Funcionales:** +- [ ] Carga de dashboard < 3 segundos +- [ ] Actualización cada 5 minutos +- [ ] Datos históricos de 3 años + +**Tecnicos:** +- [ ] Agregación eficiente +- [ ] Caché de métricas +- [ ] Jobs de precálculo +- [ ] Formatos de autoridades + +--- + +## Dependencias + +**Esta epica depende de:** +| Epica/Modulo | Estado | Bloqueante | +|--------------|--------|------------| +| Todos los módulos anteriores | Backlog | Si | + +--- + +## Desglose Tecnico + +**Database:** +- [ ] Schema: `analytics` +- [ ] Tablas: 4 (daily_stats, doctor_metrics, diagnosis_stats, financial_metrics) +- [ ] Vistas materializadas para consultas frecuentes + +**Backend:** +- [ ] Modulo: `reports` +- [ ] Services: MetricsAggregator, ReportGenerator +- [ ] Endpoints: 12 +- [ ] Jobs: Cálculo de métricas diarias +- [ ] Tests: 20 + +**Frontend:** +- [ ] Paginas: 3 (Dashboard, Reports, Export) +- [ ] Componentes: 12 (MetricCard, ChartWidget, ReportTable, etc.) +- [ ] Librería: Chart.js +- [ ] Stores: 1 (reportsStore) + +--- + +## Endpoints API + +| Metodo | Endpoint | Descripcion | +|--------|----------|-------------| +| GET | /api/reports/dashboard | Dashboard principal | +| GET | /api/reports/productivity | Productividad por médico | +| GET | /api/reports/occupancy | Ocupación de consultorios | +| GET | /api/reports/diagnoses | Top diagnósticos | +| GET | /api/reports/financial | Métricas financieras | +| GET | /api/reports/export/:type | Exportar reporte | +| GET | /api/reports/regulatory/:type | Reporte regulatorio | + +--- + +## Definition of Ready (DoR) + +- [x] Historias de usuario definidas +- [x] Criterios de aceptacion claros +- [x] Dependencias identificadas +- [x] Estimacion completada +- [ ] KPIs prioritarios definidos +- [ ] Formatos regulatorios obtenidos + +## Definition of Done (DoD) + +- [ ] Dashboard funcionando +- [ ] Reportes operativos disponibles +- [ ] Exportación funcionando +- [ ] Tests de integración pasando +- [ ] Documentación de API + +--- + +## Historial + +| Fecha | Cambio | Autor | +|-------|--------|-------| +| 2025-12-08 | Creacion de epica | Claude-Agent | + +--- + +**Creada por:** Claude-Agent +**Fecha:** 2025-12-08 +**Ultima actualizacion:** 2025-12-08 diff --git a/docs/08-epicas/EPIC-CL-010-telemedicina.md b/docs/08-epicas/EPIC-CL-010-telemedicina.md new file mode 100644 index 0000000..1fd6a8f --- /dev/null +++ b/docs/08-epicas/EPIC-CL-010-telemedicina.md @@ -0,0 +1,278 @@ +# EPICA: EPIC-CL-010 - Telemedicina + +## Metadata + +| Campo | Valor | +|-------|-------| +| **ID** | EPIC-CL-010 | +| **Nombre** | Telemedicina | +| **Modulo** | telemedicina | +| **Fase** | Fase 2 - Extensión | +| **Prioridad** | P1 (Alto) | +| **Estado** | Backlog | +| **Story Points** | 55 | +| **Sprint(s)** | Sprint 11-14 | + +--- + +## Descripcion + +Módulo 100% nuevo para consultas médicas remotas. Videoconsultas con WebRTC, sala de espera virtual, compartir pantalla para resultados, prescripción electrónica a distancia y grabación de consultas con consentimiento. + +--- + +## Objetivo de Negocio + +- Ampliar alcance geográfico +- Atención sin desplazamiento +- Seguimiento de crónicos remoto +- Nuevas fuentes de ingreso +- Adaptación post-pandemia + +--- + +## Historias de Usuario + +| ID | Historia | Prioridad | SP | Estado | +|----|----------|-----------|-----|--------| +| US-CL010-001 | Como paciente, quiero agendar teleconsulta desde el portal | P0 | 5 | Backlog | +| US-CL010-002 | Como paciente, quiero entrar a sala de espera virtual antes de la consulta | P0 | 5 | Backlog | +| US-CL010-003 | Como médico, quiero iniciar videollamada cuando el paciente esté listo | P0 | 8 | Backlog | +| US-CL010-004 | Como médico, quiero compartir pantalla para mostrar resultados al paciente | P0 | 5 | Backlog | +| US-CL010-005 | Como médico, quiero documentar nota clínica durante la videoconsulta | P0 | 3 | Backlog | +| US-CL010-006 | Como médico, quiero generar receta electrónica al finalizar | P0 | 3 | Backlog | +| US-CL010-007 | Como paciente, quiero recibir recordatorio 10 min antes de la consulta | P0 | 3 | Backlog | +| US-CL010-008 | Como paciente, quiero grabar la consulta con consentimiento del médico | P2 | 8 | Backlog | +| US-CL010-009 | Como paciente, quiero enviar fotos de síntomas antes de la consulta | P1 | 5 | Backlog | +| US-CL010-010 | Como médico, quiero terminar la videollamada y cerrar consulta | P0 | 2 | Backlog | +| US-CL010-011 | Como admin, quiero ver reportes de teleconsultas realizadas | P1 | 3 | Backlog | +| US-CL010-012 | Como paciente, quiero evaluar la calidad de la teleconsulta | P2 | 5 | Backlog | + +**Total Story Points:** 55 SP + +--- + +## Flujo de Teleconsulta + +``` +┌─────────────┐ +│ AGENDAR │ ← Paciente selecciona teleconsulta +└──────┬──────┘ + │ + ▼ (-10 min) +┌─────────────┐ +│ RECORDATORIO│ ← Email/WhatsApp con link +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│SALA_ESPERA │ ← Paciente espera en sala virtual +└──────┬──────┘ + │ + ▼ (Médico inicia) +┌─────────────┐ +│ VIDEOLLAMADA│ ← WebRTC activo +└──────┬──────┘ + │ + ├── Chat de texto + ├── Compartir pantalla + ├── Enviar archivos + │ + ▼ +┌─────────────┐ +│ CERRAR │ ← Médico termina llamada +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ RECETA │ ← Envío electrónico +│ + NOTA │ ← Documentación +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ ENCUESTA │ ← Satisfacción del paciente +└─────────────┘ +``` + +--- + +## Arquitectura WebRTC + +``` +┌─────────────────────────────────────────────────────────┐ +│ ARQUITECTURA TELEMEDICINA │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ PACIENTE MÉDICO │ +│ ┌──────────┐ ┌──────────┐ │ +│ │ Browser │ │ Browser │ │ +│ │ (WebRTC) │ │ (WebRTC) │ │ +│ └────┬─────┘ └────┬─────┘ │ +│ │ │ │ +│ │ ┌──────────────────┐ │ │ +│ └────┤ TURN/STUN ├──────┘ │ +│ │ Server │ │ +│ └────────┬─────────┘ │ +│ │ │ +│ ┌────────┴─────────┐ │ +│ │ Signaling │ │ +│ │ Server │ │ +│ │ (WebSockets) │ │ +│ └────────┬─────────┘ │ +│ │ │ +│ ┌────────┴─────────┐ │ +│ │ Backend API │ │ +│ │ (Express) │ │ +│ └──────────────────┘ │ +│ │ +│ CARACTERÍSTICAS: │ +│ ├── Video HD (720p/1080p) │ +│ ├── Audio bidireccional │ +│ ├── Compartir pantalla │ +│ ├── Chat de texto │ +│ ├── Transferencia de archivos │ +│ └── Grabación (opcional) │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Criterios de Aceptacion de la Epica + +**Funcionales:** +- [ ] Agendar teleconsulta +- [ ] Sala de espera virtual +- [ ] Videollamada WebRTC +- [ ] Compartir pantalla +- [ ] Chat durante consulta +- [ ] Enviar archivos +- [ ] Documentación de consulta +- [ ] Prescripción electrónica +- [ ] Grabación con consentimiento +- [ ] Encuesta de satisfacción + +**No Funcionales:** +- [ ] Latencia < 200ms +- [ ] Video HD estable +- [ ] Funciona en móvil y desktop +- [ ] Conexión cifrada (SRTP) + +**Tecnicos:** +- [ ] WebRTC con TURN/STUN +- [ ] WebSockets para signaling +- [ ] Integración con consultas +- [ ] Almacenamiento de grabaciones + +--- + +## Dependencias + +**Esta epica depende de:** +| Epica/Modulo | Estado | Bloqueante | +|--------------|--------|------------| +| EPIC-CL-001 Fundamentos | Backlog | Si | +| EPIC-CL-002 Pacientes | Backlog | Si | +| EPIC-CL-003 Citas | Backlog | Si | +| EPIC-CL-004 Consultas | Backlog | Si | +| EPIC-CL-005 Recetas | Backlog | Si | + +--- + +## Desglose Tecnico + +**Database:** +- [ ] Schema: `telemedicine` +- [ ] Tablas: 6 (teleconsultations, waiting_rooms, recordings, chat_messages, file_shares, satisfaction_surveys) +- [ ] Funciones: 2 (generate_room_token, log_session) +- [ ] Indices: Por médico, paciente, fecha, estado + +**Backend:** +- [ ] Modulo: `telemedicine` +- [ ] Entities: 5 (Teleconsultation, WaitingRoom, Recording, ChatMessage, Survey) +- [ ] WebSocket Server para signaling +- [ ] Endpoints: 15 +- [ ] Tests: 25 + +**Frontend:** +- [ ] Paginas: 4 (WaitingRoom, VideoCall, PreCallCheck, PostCallSurvey) +- [ ] Componentes: 15 (VideoPlayer, ScreenShare, ChatBox, FileShare, Controls, etc.) +- [ ] WebRTC implementation +- [ ] Stores: 1 (telemedicineStore) + +--- + +## Endpoints API + +| Metodo | Endpoint | Descripcion | +|--------|----------|-------------| +| POST | /api/telemedicine/sessions | Crear sesión | +| GET | /api/telemedicine/sessions/:id | Estado de sesión | +| POST | /api/telemedicine/sessions/:id/join | Unirse a sala | +| POST | /api/telemedicine/sessions/:id/signal | Señalización WebRTC | +| POST | /api/telemedicine/sessions/:id/end | Terminar llamada | +| POST | /api/telemedicine/sessions/:id/chat | Enviar mensaje | +| POST | /api/telemedicine/sessions/:id/files | Subir archivo | +| POST | /api/telemedicine/sessions/:id/record | Iniciar grabación | +| POST | /api/telemedicine/sessions/:id/survey | Enviar encuesta | + +--- + +## Integraciones Externas + +| Servicio | Propósito | Alternativas | +|----------|-----------|--------------| +| Twilio | TURN/STUN + Video | Daily.co, Vonage | +| AWS S3 | Almacenamiento de grabaciones | GCP, Azure | +| WebRTC nativo | Comunicación P2P | - | + +--- + +## Riesgos + +| Riesgo | Probabilidad | Impacto | Mitigacion | +|--------|--------------|---------|------------| +| Conexión inestable | Media | Alto | Reconexión automática | +| Problemas de audio/video | Media | Alto | Pre-call check | +| Privacidad de grabaciones | Baja | Alto | Encriptación + RBAC | + +--- + +## Nota Técnica + +Este módulo es **100% nuevo** y no tiene equivalente en el ERP-Core. Requiere infraestructura especializada para streaming de video y cumplimiento de regulaciones de datos médicos. + +--- + +## Definition of Ready (DoR) + +- [x] Historias de usuario definidas +- [x] Criterios de aceptacion claros +- [x] Dependencias identificadas +- [x] Estimacion completada +- [ ] Proveedor de video seleccionado +- [ ] Infraestructura TURN/STUN lista + +## Definition of Done (DoD) + +- [ ] Videollamada funcionando +- [ ] Sala de espera operativa +- [ ] Integración con consultas +- [ ] Grabación opcional +- [ ] Tests E2E pasando +- [ ] Documentación de API + +--- + +## Historial + +| Fecha | Cambio | Autor | +|-------|--------|-------| +| 2025-12-08 | Creacion de epica | Claude-Agent | + +--- + +**Creada por:** Claude-Agent +**Fecha:** 2025-12-08 +**Ultima actualizacion:** 2025-12-08 diff --git a/docs/08-epicas/EPIC-CL-011-expediente.md b/docs/08-epicas/EPIC-CL-011-expediente.md new file mode 100644 index 0000000..0096412 --- /dev/null +++ b/docs/08-epicas/EPIC-CL-011-expediente.md @@ -0,0 +1,241 @@ +# EPICA: EPIC-CL-011 - Expediente Clínico Electrónico + +## Metadata + +| Campo | Valor | +|-------|-------| +| **ID** | EPIC-CL-011 | +| **Nombre** | Expediente Clínico Electrónico | +| **Modulo** | expediente | +| **Fase** | Fase 1 - MVP | +| **Prioridad** | P0 (Critico) | +| **Estado** | Backlog | +| **Story Points** | 30 | +| **Sprint(s)** | Sprint 10 | + +--- + +## Descripcion + +Vista consolidada del expediente clínico electrónico del paciente. Integra toda la información médica: datos personales, antecedentes, consultas, diagnósticos, recetas, estudios de laboratorio e imagen. Cumple con NOM-024-SSA3-2012. + +--- + +## Objetivo de Negocio + +- Historia clínica completa +- Cumplimiento normativo +- Acceso rápido a información +- Continuidad de atención +- Soporte a decisiones clínicas + +--- + +## Historias de Usuario + +| ID | Historia | Prioridad | SP | Estado | +|----|----------|-----------|-----|--------| +| US-CL011-001 | Como médico, quiero ver resumen ejecutivo del paciente en una pantalla | P0 | 5 | Backlog | +| US-CL011-002 | Como médico, quiero ver línea de tiempo de atenciones | P0 | 5 | Backlog | +| US-CL011-003 | Como médico, quiero ver todos los diagnósticos históricos | P0 | 3 | Backlog | +| US-CL011-004 | Como médico, quiero ver todos los medicamentos recetados | P0 | 3 | Backlog | +| US-CL011-005 | Como médico, quiero ver resultados de laboratorio con gráficas de tendencia | P0 | 5 | Backlog | +| US-CL011-006 | Como médico, quiero ver estudios de imagen (DICOM viewer) | P1 | 5 | Backlog | +| US-CL011-007 | Como paciente, quiero descargar mi expediente completo en PDF | P1 | 2 | Backlog | +| US-CL011-008 | Como admin, quiero configurar permisos de acceso al expediente | P0 | 2 | Backlog | + +**Total Story Points:** 30 SP + +--- + +## Estructura del Expediente (NOM-024) + +``` +┌─────────────────────────────────────────────────────────┐ +│ EXPEDIENTE CLÍNICO ELECTRÓNICO │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ DATOS DE IDENTIFICACIÓN │ +│ ├── Nombre completo │ +│ ├── Fecha de nacimiento / Edad │ +│ ├── Sexo │ +│ ├── CURP │ +│ └── Datos de contacto │ +│ │ +│ ANTECEDENTES │ +│ ├── Heredo-familiares │ +│ ├── Personales no patológicos │ +│ ├── Personales patológicos │ +│ ├── Gineco-obstétricos (si aplica) │ +│ └── Alergias │ +│ │ +│ NOTAS MÉDICAS │ +│ ├── Historia clínica inicial │ +│ ├── Notas de evolución │ +│ ├── Notas de interconsulta │ +│ └── Notas de egreso │ +│ │ +│ ESTUDIOS │ +│ ├── Laboratorio │ +│ │ ├── Resultados │ +│ │ └── Gráficas de tendencia │ +│ └── Imagenología │ +│ ├── Radiografías │ +│ ├── Ultrasonidos │ +│ └── Tomografías/Resonancias │ +│ │ +│ PRESCRIPCIONES │ +│ ├── Recetas emitidas │ +│ └── Medicamentos actuales │ +│ │ +│ CONSENTIMIENTOS │ +│ └── Firmados digitalmente │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Vista de Timeline + +``` +┌─────────────────────────────────────────────────────────┐ +│ LÍNEA DE TIEMPO - JUAN PÉREZ │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ DIC 2024 │ +│ ├── 08 │ 💊 Receta - Antibiótico 7 días │ +│ ├── 08 │ 🩺 Consulta - Dr. García (IVAS) │ +│ ├── 05 │ 🧪 Laboratorio - Biometría hemática │ +│ │ │ +│ NOV 2024 │ +│ ├── 22 │ 💊 Receta - Antihipertensivos │ +│ ├── 22 │ 🩺 Consulta - Dr. López (Control HTA) │ +│ ├── 15 │ 🧪 Laboratorio - Química sanguínea │ +│ │ │ +│ OCT 2024 │ +│ ├── 10 │ 📷 Imagen - Rx Tórax │ +│ ├── 10 │ 🩺 Consulta - Dr. García (Tos crónica) │ +│ │ │ +│ SEP 2024 │ +│ ├── 05 │ 🩺 Primera consulta - Historia clínica │ +│ └── 05 │ ✍️ Consentimiento informado firmado │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Criterios de Aceptacion de la Epica + +**Funcionales:** +- [ ] Resumen ejecutivo del paciente +- [ ] Línea de tiempo de atenciones +- [ ] Vista de diagnósticos históricos +- [ ] Vista de medicamentos +- [ ] Gráficas de laboratorio +- [ ] Visor DICOM básico +- [ ] Exportar expediente PDF +- [ ] Control de acceso + +**No Funcionales:** +- [ ] Carga de expediente < 3 segundos +- [ ] Cumplimiento NOM-024-SSA3-2012 +- [ ] Auditoría de accesos + +**Tecnicos:** +- [ ] Integración de todos los módulos +- [ ] Visor DICOM (Cornerstone.js) +- [ ] Generación de PDF estructurado +- [ ] Gráficas con Chart.js + +--- + +## Dependencias + +**Esta epica depende de:** +| Epica/Modulo | Estado | Bloqueante | +|--------------|--------|------------| +| EPIC-CL-002 Pacientes | Backlog | Si | +| EPIC-CL-004 Consultas | Backlog | Si | +| EPIC-CL-005 Recetas | Backlog | Si | +| EPIC-CL-006 Laboratorio | Backlog | Si | +| EPIC-CL-012 Imagenología | Backlog | Parcial | + +--- + +## Desglose Tecnico + +**Database:** +- [ ] No requiere tablas nuevas (agrega datos de otros módulos) +- [ ] Vistas optimizadas para consolidación + +**Backend:** +- [ ] Modulo: `medical-record` +- [ ] Services: RecordAggregator, PDFExporter +- [ ] Endpoints: 8 +- [ ] Tests: 20 + +**Frontend:** +- [ ] Paginas: 3 (RecordOverview, Timeline, Export) +- [ ] Componentes: 15 (SummaryCard, Timeline, DiagnosisHistory, LabTrends, DICOMViewer, etc.) +- [ ] Visor DICOM con Cornerstone.js +- [ ] Stores: 1 (recordStore) + +--- + +## Endpoints API + +| Metodo | Endpoint | Descripcion | +|--------|----------|-------------| +| GET | /api/medical-record/:patientId | Expediente completo | +| GET | /api/medical-record/:patientId/summary | Resumen ejecutivo | +| GET | /api/medical-record/:patientId/timeline | Línea de tiempo | +| GET | /api/medical-record/:patientId/diagnoses | Historial de diagnósticos | +| GET | /api/medical-record/:patientId/medications | Historial de medicamentos | +| GET | /api/medical-record/:patientId/labs/trends | Tendencias de laboratorio | +| GET | /api/medical-record/:patientId/export | Exportar PDF | + +--- + +## Riesgos + +| Riesgo | Probabilidad | Impacto | Mitigacion | +|--------|--------------|---------|------------| +| Expediente incompleto | Media | Alto | Validar datos mínimos | +| Acceso no autorizado | Baja | Alto | RBAC + auditoría | +| Carga lenta | Media | Medio | Paginación + caché | + +--- + +## Definition of Ready (DoR) + +- [x] Historias de usuario definidas +- [x] Criterios de aceptacion claros +- [x] Dependencias identificadas +- [x] Estimacion completada +- [ ] Estructura NOM-024 documentada +- [ ] Diseño de UI aprobado + +## Definition of Done (DoD) + +- [ ] Vista consolidada funcionando +- [ ] Timeline operativo +- [ ] Visor DICOM básico +- [ ] Exportación PDF +- [ ] Tests de integración pasando +- [ ] Documentación de API + +--- + +## Historial + +| Fecha | Cambio | Autor | +|-------|--------|-------| +| 2025-12-08 | Creacion de epica | Claude-Agent | + +--- + +**Creada por:** Claude-Agent +**Fecha:** 2025-12-08 +**Ultima actualizacion:** 2025-12-08 diff --git a/docs/08-epicas/EPIC-CL-012-imagenologia.md b/docs/08-epicas/EPIC-CL-012-imagenologia.md new file mode 100644 index 0000000..fe2beb7 --- /dev/null +++ b/docs/08-epicas/EPIC-CL-012-imagenologia.md @@ -0,0 +1,314 @@ +# EPICA: EPIC-CL-012 - Imagenología + +## Metadata + +| Campo | Valor | +|-------|-------| +| **ID** | EPIC-CL-012 | +| **Nombre** | Imagenología | +| **Modulo** | imagenologia | +| **Fase** | Fase 2 - Extensión | +| **Prioridad** | P1 (Alto) | +| **Estado** | Backlog | +| **Story Points** | 55 | +| **Sprint(s)** | Sprint 15-18 | + +--- + +## Descripcion + +Módulo 100% nuevo para gestión de estudios de imagen médica. Solicitud de estudios, integración con equipos de imagen, almacenamiento y visor DICOM, interpretación por radiólogo y entrega de resultados. + +--- + +## Objetivo de Negocio + +- Estudios de imagen integrados +- Almacenamiento centralizado (PACS) +- Interpretación oportuna +- Reducción de pérdida de estudios +- Acceso remoto a imágenes + +--- + +## Historias de Usuario + +| ID | Historia | Prioridad | SP | Estado | +|----|----------|-----------|-----|--------| +| US-CL012-001 | Como médico, quiero solicitar estudio de imagen desde la consulta | P0 | 5 | Backlog | +| US-CL012-002 | Como técnico, quiero ver órdenes de estudios pendientes | P0 | 3 | Backlog | +| US-CL012-003 | Como técnico, quiero registrar realización de estudio | P0 | 3 | Backlog | +| US-CL012-004 | Como sistema, quiero recibir imágenes DICOM del equipo | P0 | 13 | Backlog | +| US-CL012-005 | Como radiólogo, quiero ver estudios pendientes de interpretar | P0 | 3 | Backlog | +| US-CL012-006 | Como radiólogo, quiero ver imágenes en visor DICOM profesional | P0 | 8 | Backlog | +| US-CL012-007 | Como radiólogo, quiero dictar interpretación del estudio | P0 | 5 | Backlog | +| US-CL012-008 | Como médico, quiero recibir notificación cuando el estudio esté listo | P0 | 3 | Backlog | +| US-CL012-009 | Como paciente, quiero descargar mis estudios de imagen | P1 | 5 | Backlog | +| US-CL012-010 | Como admin, quiero configurar modalidades de imagen disponibles | P0 | 3 | Backlog | +| US-CL012-011 | Como admin, quiero ver reportes de estudios realizados | P1 | 4 | Backlog | + +**Total Story Points:** 55 SP + +--- + +## Flujo de Imagenología + +``` +┌─────────────┐ +│ SOLICITUD │ ← Médico solicita estudio +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ RECEPCIÓN │ ← Paciente llega +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ REALIZACIÓN │ ← Técnico realiza estudio +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ DICOM │ ← Imágenes enviadas al PACS +│ UPLOAD │ +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│INTERPRETAC. │ ← Radiólogo analiza +└──────┬──────┘ + │ + ▼ +┌─────────────┐ +│ LIBERADO │ ← Disponible para médico/paciente +└─────────────┘ +``` + +--- + +## Arquitectura DICOM/PACS + +``` +┌─────────────────────────────────────────────────────────┐ +│ ARQUITECTURA IMAGENOLOGÍA │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ EQUIPOS DE IMAGEN PACS SERVER │ +│ ┌───────────────┐ ┌─────────────────┐ │ +│ │ Rayos X │ ──────► │ │ │ +│ │ (DICOM) │ │ Orthanc / │ │ +│ └───────────────┘ │ DCM4CHEE │ │ +│ ┌───────────────┐ │ │ │ +│ │ Ultrasonido │ ──────► │ DICOM Store │ │ +│ │ (DICOM) │ │ DICOM Query │ │ +│ └───────────────┘ │ DICOM Retrieve │ │ +│ ┌───────────────┐ │ │ │ +│ │ Tomografía │ ──────► │ │ │ +│ │ (DICOM) │ └────────┬────────┘ │ +│ └───────────────┘ │ │ +│ │ │ +│ ┌────────┴────────┐ │ +│ │ Backend API │ │ +│ │ (Express) │ │ +│ └────────┬────────┘ │ +│ │ │ +│ ┌────────┴────────┐ │ +│ │ Visor DICOM │ │ +│ │ (Cornerstone) │ │ +│ └─────────────────┘ │ +│ │ +│ ESTÁNDARES: │ +│ ├── DICOM 3.0 para imágenes │ +│ ├── HL7 para integraciones │ +│ ├── IHE XDS-I.b para compartir imágenes │ +│ └── WADO-RS para acceso web │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Modalidades de Imagen + +``` +┌─────────────────────────────────────────────────────────┐ +│ MODALIDADES SOPORTADAS │ +├─────────────────────────────────────────────────────────┤ +│ │ +│ CR/DR - Radiología Computarizada/Digital │ +│ ├── Rayos X de tórax │ +│ ├── Rayos X de abdomen │ +│ ├── Rayos X de extremidades │ +│ └── Rayos X de columna │ +│ │ +│ US - Ultrasonido │ +│ ├── Abdominal │ +│ ├── Pélvico │ +│ ├── Obstétrico │ +│ └── Musculoesquelético │ +│ │ +│ CT - Tomografía Computarizada │ +│ ├── Cráneo │ +│ ├── Tórax │ +│ ├── Abdomen │ +│ └── Columna │ +│ │ +│ MR - Resonancia Magnética │ +│ ├── Cerebro │ +│ ├── Columna │ +│ └── Articulaciones │ +│ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## Criterios de Aceptacion de la Epica + +**Funcionales:** +- [ ] Solicitar estudios de imagen +- [ ] Ver órdenes pendientes +- [ ] Registrar realización +- [ ] Recibir imágenes DICOM +- [ ] Visor DICOM profesional +- [ ] Interpretación por radiólogo +- [ ] Notificación de resultados +- [ ] Descarga de estudios +- [ ] Reportes de producción + +**No Funcionales:** +- [ ] Carga de imágenes < 5 segundos +- [ ] Almacenamiento de 5+ años +- [ ] Cumplimiento DICOM 3.0 + +**Tecnicos:** +- [ ] Servidor PACS (Orthanc) +- [ ] Visor Cornerstone.js +- [ ] Integración con consultas +- [ ] Almacenamiento escalable + +--- + +## Dependencias + +**Esta epica depende de:** +| Epica/Modulo | Estado | Bloqueante | +|--------------|--------|------------| +| EPIC-CL-001 Fundamentos | Backlog | Si | +| EPIC-CL-002 Pacientes | Backlog | Si | +| EPIC-CL-004 Consultas | Backlog | Si | + +**Esta epica bloquea:** +| Epica/Modulo | Razon | +|--------------|-------| +| EPIC-CL-011 Expediente | Imágenes son parte del expediente | + +--- + +## Desglose Tecnico + +**Database:** +- [ ] Schema: `imaging` +- [ ] Tablas: 7 (imaging_orders, order_items, studies, series, interpretations, modalities, pacs_log) +- [ ] Funciones: 2 (log_dicom_event, update_study_status) +- [ ] Indices: Por paciente, médico, fecha, modalidad, estado + +**Backend:** +- [ ] Modulo: `imaging` +- [ ] Entities: 6 (ImagingOrder, OrderItem, Study, Series, Interpretation, Modality) +- [ ] DICOM Service: Comunicación con PACS +- [ ] Endpoints: 15 +- [ ] Tests: 30 + +**Frontend:** +- [ ] Paginas: 5 (ImagingOrders, Worklist, DICOMViewer, Interpretation, Reports) +- [ ] Componentes: 15 (OrderCard, StudyThumbnail, ViewerTools, InterpretationEditor, etc.) +- [ ] Cornerstone.js para visor DICOM +- [ ] Stores: 1 (imagingStore) + +**Infraestructura:** +- [ ] Orthanc PACS Server +- [ ] Almacenamiento S3/MinIO para imágenes +- [ ] CDN para distribución + +--- + +## Endpoints API + +| Metodo | Endpoint | Descripcion | +|--------|----------|-------------| +| POST | /api/imaging/orders | Crear orden de estudio | +| GET | /api/imaging/orders | Listar órdenes | +| GET | /api/imaging/orders/:id | Detalle de orden | +| POST | /api/imaging/orders/:id/perform | Registrar realización | +| GET | /api/imaging/studies/:id | Metadatos del estudio | +| GET | /api/imaging/studies/:id/series | Series del estudio | +| GET | /api/imaging/wado-rs/* | WADO-RS para imágenes | +| POST | /api/imaging/interpretations | Crear interpretación | +| GET | /api/imaging/worklist | Lista de trabajo radiólogo | + +--- + +## Integraciones DICOM + +| Operación | Protocolo | Uso | +|-----------|-----------|-----| +| C-STORE | DICOM | Recibir imágenes de equipos | +| C-FIND | DICOM | Buscar estudios | +| C-MOVE | DICOM | Recuperar estudios | +| WADO-RS | HTTP | Acceso web a imágenes | + +--- + +## Riesgos + +| Riesgo | Probabilidad | Impacto | Mitigacion | +|--------|--------------|---------|------------| +| Integración DICOM compleja | Alta | Alto | PACS probado (Orthanc) | +| Almacenamiento costoso | Media | Medio | Compresión + tiering | +| Visor lento | Media | Medio | Streaming progresivo | + +--- + +## Nota Técnica + +Este módulo es **100% nuevo** y requiere infraestructura especializada: +- Servidor PACS compatible DICOM 3.0 +- Almacenamiento de gran capacidad para imágenes +- Visor web profesional (Cornerstone.js) +- Conocimiento de estándares médicos (DICOM, HL7, IHE) + +--- + +## Definition of Ready (DoR) + +- [x] Historias de usuario definidas +- [x] Criterios de aceptacion claros +- [x] Dependencias identificadas +- [x] Estimacion completada +- [ ] PACS Server seleccionado +- [ ] Equipos DICOM compatibles + +## Definition of Done (DoD) + +- [ ] Flujo completo de imagenología +- [ ] Recepción DICOM funcionando +- [ ] Visor profesional operativo +- [ ] Interpretación de estudios +- [ ] Tests de integración pasando +- [ ] Documentación de API + +--- + +## Historial + +| Fecha | Cambio | Autor | +|-------|--------|-------| +| 2025-12-08 | Creacion de epica | Claude-Agent | + +--- + +**Creada por:** Claude-Agent +**Fecha:** 2025-12-08 +**Ultima actualizacion:** 2025-12-08 diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..ddb4ad3 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,38 @@ +# DOCUMENTACIÓN - ERP Clínicas + +**Proyecto:** ERP Clínicas +**Versión:** 1.0.0 +**Fecha:** 2025-12-05 +**Estado:** Por iniciar + +--- + +## Estructura de Documentación + +``` +docs/ +├── 00-vision-general/ # Visión, objetivos y alcance +├── 01-analisis-referencias/ # Análisis de sistemas de referencia +├── 02-definicion-modulos/ # Lista, índice y dependencias de módulos +├── 03-requerimientos/ # Requerimientos funcionales por módulo +├── 04-modelado/ # Diseño técnico +│ ├── database-design/ # DDL specs, schemas +│ ├── domain-models/ # Modelos de dominio +│ └── especificaciones-tecnicas/ # ET backend/frontend +├── 05-user-stories/ # Historias de usuario +├── 06-test-plans/ # Planes de prueba +├── 07-devops/ # CI/CD, infraestructura +├── 90-transversal/ # Documentos transversales +├── 95-guias-desarrollo/ # Guías para desarrolladores +└── 97-adr/ # Architecture Decision Records +``` + +--- + +## Directiva Aplicable + +Ver: `/workspace/core/orchestration/directivas/DIRECTIVA-ESTRUCTURA-DOCUMENTACION-PROYECTOS.md` + +--- + +**Última actualización:** 2025-12-05 diff --git a/docs/_MAP.md b/docs/_MAP.md new file mode 100644 index 0000000..b60c83c --- /dev/null +++ b/docs/_MAP.md @@ -0,0 +1,40 @@ +# Mapa de Documentacion: erp-clinicas + +**Proyecto:** erp-clinicas +**Actualizado:** 2026-01-04 +**Generado por:** EPIC-008 adapt-simco.sh + +--- + +## Estructura de Documentacion + +``` +docs/ +├── _MAP.md # Este archivo (indice de navegacion) +├── 00-overview/ # Vision general del proyecto +├── 01-architecture/ # Arquitectura y decisiones (ADRs) +├── 02-specs/ # Especificaciones tecnicas +├── 03-api/ # Documentacion de APIs +├── 04-guides/ # Guias de desarrollo +└── 99-finiquito/ # Entregables cliente (si aplica) +``` + +## Navegacion Rapida + +| Seccion | Descripcion | Estado | +|---------|-------------|--------| +| Overview | Vision general | - | +| Architecture | Decisiones arquitectonicas | - | +| Specs | Especificaciones tecnicas | - | +| API | Documentacion de endpoints | - | +| Guides | Guias de desarrollo | - | + +## Estadisticas + +- Total archivos en docs/: 27 +- Fecha de adaptacion: 2026-01-04 + +--- + +**Nota:** Este archivo fue generado automaticamente por EPIC-008. +Actualizar manualmente con la estructura real del proyecto. diff --git a/orchestration/00-guidelines/CONTEXTO-PROYECTO.md b/orchestration/00-guidelines/CONTEXTO-PROYECTO.md new file mode 100644 index 0000000..7042784 --- /dev/null +++ b/orchestration/00-guidelines/CONTEXTO-PROYECTO.md @@ -0,0 +1,159 @@ +# Contexto del Proyecto: ERP Clinicas + +## Metadatos + +| Campo | Valor | +|-------|-------| +| **Nombre** | ERP Clinicas - Gestion de Consultorios y Clinicas | +| **Tipo** | STANDALONE (Proyecto Independiente) | +| **Nivel** | Vertical que extiende erp-core | +| **Estado** | Por iniciar | +| **Progreso** | 0% | +| **Version** | 0.0.1 | +| **Base** | Extiende projects/erp-core (60-70%) | +| **Extension** | Modulos especificos (+30-40%) | +| **Path** | `/home/isem/workspace-v1/projects/erp-clinicas/` | +| **Fecha Migracion** | 2025-12-27 | + +--- + +## VARIABLES PARA DIRECTIVAS GLOBALES + +```yaml +# Identificacion del Proyecto +PROJECT: erp-clinicas +PROJECT_NAME: ERP Clinicas +PROJECT_LEVEL: STANDALONE + +# Paths Principales (WORKSPACE-V1) +WORKSPACE_ROOT: ~/workspace-v1 +PROJECT_ROOT: ~/workspace-v1/projects/erp-clinicas +APPS_ROOT: ~/workspace-v1/projects/erp-clinicas +DOCS_ROOT: ~/workspace-v1/projects/erp-clinicas/docs +ORCHESTRATION: ~/workspace-v1/projects/erp-clinicas/orchestration + +# Herencia de ERP-Core +ERP_CORE_ROOT: ~/workspace-v1/projects/erp-core +HERENCIA_DOC: orchestration/00-guidelines/HERENCIA-ERP-CORE.md + +# Base Orchestration (Directivas y Perfiles) +DIRECTIVAS_PATH: ~/workspace-v1/orchestration/directivas +PERFILES_PATH: ~/workspace-v1/orchestration/agents/perfiles +CATALOG_PATH: ~/workspace-v1/core/catalog + +# Base de Datos +DB_NAME: erp_clinicas +DB_DDL_PATH: ~/workspace-v1/projects/erp-clinicas/database/ddl +DB_SCRIPTS_PATH: ~/workspace-v1/projects/erp-clinicas/database + +# Backend +BACKEND_ROOT: ~/workspace-v1/projects/erp-clinicas/backend +BACKEND_SRC: ~/workspace-v1/projects/erp-clinicas/backend/src + +# Frontend +FRONTEND_ROOT: ~/workspace-v1/projects/erp-clinicas/frontend +FRONTEND_SRC: ~/workspace-v1/projects/erp-clinicas/frontend/src +``` + +--- + +## Descripcion + +ERP especializado para la gestion de clinicas, consultorios medicos y centros de salud. Extiende el ERP Core con funcionalidades especificas del sector salud. + +**Funcionalidades principales:** +- Gestion de pacientes y expedientes clinicos +- Agenda y citas medicas +- Historia clinica electronica +- Recetas y prescripciones +- Facturacion medica (CFDI) +- Inventario de medicamentos e insumos +- Reportes clinicos y administrativos + +--- + +## Stack Tecnologico + +Hereda completamente del ERP Core: +- **Backend:** Node.js + Express + TypeScript +- **Frontend:** React + TypeScript + Tailwind +- **Database:** PostgreSQL 15+ +- **Auth:** JWT + Multi-tenant + +--- + +## Paths del Proyecto + +``` +/home/isem/workspace-v1/projects/erp-suite/apps/verticales/clinicas/ +├── backend/ # Extensiones backend +├── frontend/ # UI especializada +├── database/ # DDL vertical +├── docs/ # Documentacion +└── orchestration/ # Sistema NEXUS +``` + +--- + +## Modulos Especificos (MCL-*) + +| Codigo | Modulo | Descripcion | +|--------|--------|-------------| +| MCL-001 | pacientes | Gestion de pacientes | +| MCL-002 | expedientes | Historia clinica electronica | +| MCL-003 | citas | Agenda y programacion | +| MCL-004 | recetas | Prescripciones medicas | +| MCL-005 | laboratorio | Resultados de laboratorio | +| MCL-006 | facturacion-medica | CFDI para sector salud | + +--- + +## Modulos del Core que Extiende + +| Modulo Core | Extension | +|-------------|-----------| +| MGN-002 Users | Roles medicos (doctor, enfermera, admin) | +| MGN-005 Catalogs | CIE-10, medicamentos, procedimientos | +| MGN-006 Settings | Configuracion de consultorio | +| MGN-008 Notifications | Recordatorios de citas | +| MGN-010 Financial | Facturacion medica | +| MGN-011 Inventory | Medicamentos e insumos | + +--- + +## Schemas de Base de Datos + +``` +vertical_clinicas # Schema principal +├── patients # Pacientes +├── medical_records # Expedientes clinicos +├── appointments # Citas +├── prescriptions # Recetas +├── vital_signs # Signos vitales +├── lab_results # Resultados laboratorio +└── medical_invoices # Facturacion +``` + +--- + +## Principios Especificos + +1. **Confidencialidad:** Datos medicos requieren encriptacion adicional +2. **Auditoria:** Log detallado de acceso a expedientes +3. **Normativa:** Cumplir NOM-024-SSA3-2012 (expediente clinico) +4. **Interoperabilidad:** Preparado para HL7 FHIR + +--- + +## Referencias + +| Recurso | Path | +|---------|------| +| Directivas globales | `/home/isem/workspace-v1/orchestration/directivas/` | +| Directivas ERP-Core | `/home/isem/workspace-v1/projects/erp-core/orchestration/directivas/` | +| Herencia directivas | `./HERENCIA-DIRECTIVAS.md` | +| Dependencias ERP-Core | `../referencias/DEPENDENCIAS-ERP-CORE.yml` | +| Dependencias Shared | `../referencias/DEPENDENCIAS-SHARED.yml` | + +--- +*Ultima actualizacion: Diciembre 2025* diff --git a/orchestration/00-guidelines/HERENCIA-DIRECTIVAS.md b/orchestration/00-guidelines/HERENCIA-DIRECTIVAS.md new file mode 100644 index 0000000..9721042 --- /dev/null +++ b/orchestration/00-guidelines/HERENCIA-DIRECTIVAS.md @@ -0,0 +1,89 @@ +# Herencia de Directivas - ERP Clinicas + +## Jerarquia de Directivas + +Este proyecto hereda directivas en el siguiente orden de precedencia: + +``` +1. Directivas Globales (CORE) → /home/isem/workspace/core/orchestration/directivas/ +2. Directivas ERP-Core → /home/isem/workspace/projects/erp-suite/apps/erp-core/orchestration/directivas/ +3. Directivas Clinicas → ./directivas/ (este proyecto) +``` + +**Regla:** Las directivas especificas pueden **EXTENDER** las heredadas, nunca **REDUCIRLAS**. + +--- + +## Directivas Heredadas de CORE + +| Directiva | Proposito | +|-----------|-----------| +| `DIRECTIVA-FLUJO-5-FASES.md` | Flujo de trabajo obligatorio | +| `DIRECTIVA-DOCUMENTACION-OBLIGATORIA.md` | Docs en tiempo real | +| `DIRECTIVA-CALIDAD-CODIGO.md` | Estandares de codigo | +| `DIRECTIVA-DISENO-BASE-DATOS.md` | Diseno BD | +| `DIRECTIVA-CONTROL-VERSIONES.md` | Git | + +--- + +## Directivas Heredadas de ERP-Core + +| Directiva | Proposito | +|-----------|-----------| +| `DIRECTIVA-MULTI-TENANT.md` | Aislamiento por tenant | +| `DIRECTIVA-EXTENSION-VERTICALES.md` | Como extender el core | +| `DIRECTIVA-DOCUMENTACION-PRE-DESARROLLO.md` | Documentar antes de desarrollar | +| `DIRECTIVA-PATRONES-ODOO.md` | Patrones de diseno | +| `DIRECTIVA-HERENCIA-MODULOS.md` | Extension de modulos | +| `ESTANDARES-API-REST-GENERICO.md` | APIs REST | + +--- + +## Directivas Especificas de Clinicas + +| Directiva | Proposito | Estado | +|-----------|-----------|--------| +| `DIRECTIVA-CONFIDENCIALIDAD-MEDICA.md` | Proteccion datos pacientes | Por crear | +| `DIRECTIVA-EXPEDIENTE-CLINICO.md` | NOM-024-SSA3-2012 | Por crear | +| `DIRECTIVA-AUDITORIA-ACCESOS.md` | Log de acceso a expedientes | Por crear | +| `DIRECTIVA-INTEROPERABILIDAD-HL7.md` | Estandar HL7 FHIR | Por crear | + +--- + +## Modulos que Usa del Core + +| Modulo Core | Uso en Clinicas | +|-------------|-----------------| +| MGN-001 Auth | Directo | +| MGN-002 Users | Extendido (roles medicos) | +| MGN-004 Tenants | Directo | +| MGN-005 Catalogs | Extendido (CIE-10, medicamentos) | +| MGN-006 Settings | Extendido (config consultorio) | +| MGN-008 Notifications | Extendido (recordatorios citas) | +| MGN-010 Financial | Extendido (facturacion medica) | +| MGN-011 Inventory | Extendido (medicamentos) | + +--- + +## Consideraciones Especiales + +### Seguridad de Datos Medicos +- Encriptacion AES-256 para expedientes +- Logs de auditoria inmutables +- Control de acceso por rol medico +- Cumplimiento LFPDPPP + +### Normativa Aplicable +- NOM-024-SSA3-2012 (Expediente clinico electronico) +- NOM-004-SSA3-2012 (Expediente clinico) +- CFDI 4.0 para facturacion + +--- + +## Referencias + +- Core: `/home/isem/workspace/core/orchestration/directivas/` +- ERP-Core: `/home/isem/workspace/projects/erp-suite/apps/erp-core/orchestration/directivas/` + +--- +*Ultima actualizacion: Diciembre 2025* diff --git a/orchestration/00-guidelines/HERENCIA-ERP-CORE.md b/orchestration/00-guidelines/HERENCIA-ERP-CORE.md new file mode 100644 index 0000000..db77366 --- /dev/null +++ b/orchestration/00-guidelines/HERENCIA-ERP-CORE.md @@ -0,0 +1,184 @@ +# Herencia de ERP Core - Vertical Clinicas + +**Version:** 1.0.0 +**Vertical:** Clinicas +**Nivel:** STANDALONE (proyecto independiente) +**Version ERP-Core:** 1.2.0 +**Ruta ERP-Core:** projects/erp-core +**Herencia:** 60-70% de funcionalidad base de erp-core +**Fecha Migracion:** 2025-12-27 + +--- + +## RESUMEN DE HERENCIA + +Este documento especifica exactamente que hereda la vertical Clinicas del ERP Core y como lo extiende. + +--- + +## 1. MODULOS HEREDADOS (100%) + +| Modulo Core | Codigo | Uso en Clinicas | +|-------------|--------|-----------------| +| Auth | MGN-001 | Autenticacion con seguridad reforzada | +| Users | MGN-002 | Gestion de personal medico | +| Roles | MGN-003 | Roles medicos (doctor, enfermera, admin) | +| Audit | MGN-007 | Auditoria de acceso a expedientes | +| Notifications | MGN-008 | Recordatorios de citas | +| Reports | MGN-009 | Reportes medicos y administrativos | + +**Accion:** NO crear codigo para estos modulos. Usar directamente del core. + +--- + +## 2. MODULOS HEREDADOS Y EXTENDIDOS + +### MGN-004: Tenants → Clinicas/Consultorios + +```yaml +herencia_base: + - Multi-tenancy basico + +extension_clinicas: + - Clinica/Consultorio como tenant + - Campos adicionales: + - licencia_sanitaria + - especialidades_medicas[] + - horarios_atencion + - numero_consultorios + - Relaciones: + - clinica → consultorios (1:N) + - clinica → medicos (1:N) +``` + +### MGN-005: Catalogs → Catalogos Medicos + +```yaml +herencia_base: + - CRUD de catalogos genericos + +extension_clinicas: + - Catalogo CIE-10 (diagnosticos) + - Catalogo de procedimientos medicos + - Catalogo de medicamentos (cuadro basico) + - Catalogo de laboratorios + - Catalogo de especialidades medicas +``` + +### MGN-010: Financial → Facturacion Medica + +```yaml +herencia_base: + - Plan de cuentas + - Facturacion basica + +extension_clinicas: + - CFDI para sector salud + - Deducibilidad de gastos medicos + - Integracion con aseguradoras +``` + +--- + +## 3. ESPECIFICACIONES TRANSVERSALES HEREDADAS + +### Obligatorias + +| Especificacion | Gap | Uso | +|----------------|-----|-----| +| `SPEC-RRHH-EVALUACIONES-SKILLS.md` | GAP-MGN-010 | Credenciales medicas | +| `SPEC-INTEGRACION-CALENDAR.md` | GAP-MGN-014 | Agenda de citas | +| `SPEC-MAIL-THREAD-TRACKING.md` | Patron | Comunicacion con pacientes | + +### Recomendadas + +| Especificacion | Gap | Uso | +|----------------|-----|-----| +| `SPEC-TWO-FACTOR-AUTHENTICATION.md` | GAP-MGN-001 | Seguridad acceso expedientes | +| `SPEC-SISTEMA-SECUENCIAS.md` | GAP-MGN-004 | Foliado de expedientes | +| `SPEC-SCHEDULER-REPORTES.md` | GAP-MGN-012 | Recordatorios automaticos | + +--- + +## 4. MODULOS PROPIOS (No heredados) + +| Codigo | Modulo | Descripcion | +|--------|--------|-------------| +| CL-001 | patients | Registro de pacientes | +| CL-002 | appointments | Agenda y citas | +| CL-003 | medical_records | Expediente clinico electronico | +| CL-004 | prescriptions | Recetas medicas | +| CL-005 | laboratory | Resultados de laboratorio | +| CL-006 | medical_billing | Facturacion medica CFDI | + +--- + +## 5. SCHEMAS DE BASE DE DATOS + +### Heredados de Core + +```yaml +schemas_core: + - auth (con seguridad reforzada) + - core_users + - core_rbac + - core_tenants (extendido) + - core_catalogs (extendido) + - core_audit (critico para HIPAA/datos sensibles) +``` + +### Propios de Clinicas + +```yaml +schemas_vertical: + - vertical_clinicas + - patients + - medical_records (ENCRIPTADO) + - appointments + - prescriptions + - vital_signs + - lab_results +``` + +--- + +## 6. CONSIDERACIONES ESPECIALES + +### Cumplimiento Normativo + +**CRITICO:** Este vertical maneja datos sensibles de salud. + +- **NOM-024-SSA3-2012:** Expediente clinico electronico +- **Ley de Proteccion de Datos Personales:** Datos sensibles +- **COFEPRIS:** Requisitos de trazabilidad + +### Requisitos de Seguridad + +1. **Encriptacion obligatoria** de datos medicos en reposo +2. **Auditoria completa** de acceso a expedientes +3. **Control de acceso** granular por paciente +4. **Consentimiento informado** digital +5. **Backup cifrado** de expedientes + +### Interoperabilidad Futura + +- HL7 FHIR para intercambio de datos +- Integracion con laboratorios externos +- Receta electronica SAT + +--- + +## 7. REFERENCIAS + +| Recurso | Ubicacion | +|---------|-----------| +| MASTER_INVENTORY Core | `erp-core/orchestration/inventarios/MASTER_INVENTORY.yml` | +| Specs Transversales | `erp-core/docs/04-modelado/especificaciones-tecnicas/transversal/` | +| NOM-024-SSA3-2012 | Normativa externa | +| HERENCIA-DIRECTIVAS | `./HERENCIA-DIRECTIVAS.md` | + +--- + +*Sistema NEXUS + SIMCO v2.2.0* +*Vertical: Clinicas (Nivel 2B.2)* +*Ultima actualizacion: 2025-12-08* diff --git a/orchestration/00-guidelines/HERENCIA-SIMCO.md b/orchestration/00-guidelines/HERENCIA-SIMCO.md new file mode 100644 index 0000000..a463ec3 --- /dev/null +++ b/orchestration/00-guidelines/HERENCIA-SIMCO.md @@ -0,0 +1,138 @@ +# Herencia SIMCO - ERP Clínicas + +**Sistema:** SIMCO v2.2.0 + CAPVED + CCA Protocol +**Fecha:** 2025-12-08 + +--- + +## Configuración del Proyecto + +| Propiedad | Valor | +|-----------|-------| +| **Proyecto** | ERP Clínicas - Vertical para Clínicas/Consultorios | +| **Nivel** | VERTICAL (Nivel 3) | +| **Padre** | erp-core | +| **Suite** | erp-suite | +| **SIMCO Version** | 2.2.0 | +| **CAPVED** | Habilitado | +| **CCA Protocol** | Habilitado | +| **Estado** | 0% - Futuro | + +## Jerarquía de Herencia + +``` +Nivel 0: core/orchestration/ ← FUENTE PRINCIPAL + └── Nivel 1: erp-suite/orchestration/ + └── Nivel 2: erp-core/orchestration/ ← PADRE DIRECTO + └── Nivel 3: clinicas/orchestration/ ← ESTE PROYECTO +``` + +--- + +## Directivas Heredadas de CORE (OBLIGATORIAS) + +### Ciclo de Vida +| Alias | Propósito | +|-------|-----------| +| `@TAREA` | Punto de entrada para toda HU | +| `@CAPVED` | Ciclo de 6 fases | +| `@INICIALIZACION` | Bootstrap de agentes | + +### Operaciones Universales +| Alias | Propósito | +|-------|-----------| +| `@CREAR` | Crear archivos nuevos | +| `@MODIFICAR` | Modificar existentes | +| `@VALIDAR` | Validar código | +| `@DOCUMENTAR` | Documentar trabajo | +| `@BUSCAR` | Buscar información | +| `@DELEGAR` | Delegar a subagentes | + +### Principios Fundamentales +| Alias | Resumen | +|-------|---------| +| `@CAPVED` | Toda tarea pasa por 6 fases | +| `@DOC_PRIMERO` | Consultar docs/ antes de implementar | +| `@ANTI_DUP` | Verificar que no existe | +| `@VALIDACION` | Build y lint DEBEN pasar | +| `@TOKENS` | Desglosar tareas grandes | + +--- + +## Directivas por Dominio Técnico + +| Alias | Aplica | Notas | +|-------|--------|-------| +| `@OP_DDL` | **SÍ** | Schemas de salud (HIPAA-ready) | +| `@OP_BACKEND` | **SÍ** | Servicios de citas, expediente | +| `@OP_FRONTEND` | **SÍ** | UI de consultorio | +| `@OP_MOBILE` | **SÍ** | App de pacientes | +| `@OP_ML` | Futuro | Análisis de diagnósticos | + +--- + +## Patrones Heredados (OBLIGATORIOS) + +Todos los patrones de `core/orchestration/patrones/` aplican. + +**IMPORTANTE:** `@PATRON-SEGURIDAD` es crítico para datos de salud. + +--- + +## Directivas Heredadas de ERP Core + +| Directiva | Extensión Local | +|-----------|-----------------| +| `DIRECTIVA-MULTI-TENANT.md` | Por `clinica_id` | +| `DIRECTIVA-EXTENSION-VERTICALES.md` | Módulos de salud | + +--- + +## Variables de Contexto CCA + +```yaml +PROJECT_NAME: "clinicas" +PROJECT_LEVEL: "VERTICAL" +PROJECT_ROOT: "./" +PARENT_PROJECT: "erp-core" +SUITE_PROJECT: "erp-suite" + +DB_DDL_PATH: "database/ddl" +BACKEND_ROOT: "backend/src" +FRONTEND_ROOT: "frontend/src" + +TENANT_COLUMN: "clinica_id" +RLS_CONTEXT: "app.current_clinica_id" + +# Compliance +HIPAA_READY: true +DATA_ENCRYPTION: "AES-256" +``` + +--- + +## Módulos Específicos de Clínicas (Por definir) + +| Módulo | Descripción | Estado | +|--------|-------------|--------| +| CLI-CIT | Citas/agenda | Por definir | +| CLI-PAC | Pacientes | Por definir | +| CLI-EXP | Expediente clínico | Por definir | +| CLI-REC | Recetas | Por definir | +| CLI-FAC | Facturación médica | Por definir | +| CLI-LAB | Laboratorio | Por definir | + +--- + +## Consideraciones de Seguridad (CRÍTICAS) + +- Datos sensibles de salud requieren encriptación +- Cumplimiento con regulaciones de privacidad +- Auditoría detallada de accesos +- Consentimiento informado digital + +--- + +**Sistema:** SIMCO v2.2.0 + CAPVED + CCA Protocol +**Nivel:** VERTICAL (3) +**Última actualización:** 2025-12-08 diff --git a/orchestration/00-guidelines/HERENCIA-SPECS-CORE.md b/orchestration/00-guidelines/HERENCIA-SPECS-CORE.md new file mode 100644 index 0000000..f3bc55d --- /dev/null +++ b/orchestration/00-guidelines/HERENCIA-SPECS-CORE.md @@ -0,0 +1,199 @@ +# Herencia de SPECS del Core - Clínicas + +**Fecha:** 2025-12-08 +**Versión:** 1.0 +**Vertical:** Clínicas (CL) +**Nivel:** 2B.2 + +--- + +## Resumen + +| Métrica | Valor | +|---------|-------| +| SPECS Aplicables | 24/30 | +| SPECS Obligatorias | 20 | +| SPECS Opcionales | 4 | +| SPECS No Aplican | 6 | +| Estado Implementación | 0% | + +--- + +## SPECS Obligatorias (Deben Implementarse) + +### P0 - Críticas + +| SPEC | Gap Original | SP | Estado | Módulos Afectados | +|------|-------------|----:|--------|-------------------| +| SPEC-SISTEMA-SECUENCIAS | ir.sequence | 8 | PENDIENTE | CL-001, CL-002, CL-005 | +| SPEC-SEGURIDAD-API-KEYS-PERMISOS | API Keys + ACL | 31 | PENDIENTE | CL-001, CL-011 | +| SPEC-REPORTES-FINANCIEROS | Balance/P&L SAT | 13 | PENDIENTE | CL-008, CL-009 | +| SPEC-NOMINA-BASICA | hr_payroll | 21 | PENDIENTE | CL-001 | +| SPEC-GASTOS-EMPLEADOS | hr_expense | 13 | PENDIENTE | CL-001 | +| SPEC-SCHEDULER-REPORTES | ir.cron + mail | 8 | PENDIENTE | CL-009 | +| SPEC-INTEGRACION-CALENDAR | calendar integration | 8 | PENDIENTE | CL-003 | + +### P1 - Complementarias + +| SPEC | Gap Original | SP | Estado | Módulos Afectados | +|------|-------------|----:|--------|-------------------| +| SPEC-CONTABILIDAD-ANALITICA | Centros de costo | 21 | PENDIENTE | CL-008, CL-009 | +| SPEC-CONCILIACION-BANCARIA | Conciliación | 21 | PENDIENTE | CL-008 | +| SPEC-FIRMA-ELECTRONICA-NOM151 | e.firma | 13 | PENDIENTE | CL-011 | +| SPEC-TWO-FACTOR-AUTHENTICATION | 2FA | 13 | PENDIENTE | CL-001 | +| SPEC-TRAZABILIDAD-LOTES-SERIES | Lotes/Series | 13 | PENDIENTE | CL-007 | +| SPEC-OAUTH2-SOCIAL-LOGIN | OAuth2 | 8 | PENDIENTE | CL-002, CL-010 | +| SPEC-IMPUESTOS-AVANZADOS | IVA, ISR | 8 | PENDIENTE | CL-008 | +| SPEC-PLANTILLAS-CUENTAS | Plan contable | 8 | PENDIENTE | CL-008 | +| SPEC-TASAS-CAMBIO-AUTOMATICAS | Tipos cambio | 5 | PENDIENTE | CL-008 | +| SPEC-ALERTAS-PRESUPUESTO | Alertas | 8 | PENDIENTE | CL-008 | +| SPEC-RRHH-EVALUACIONES-SKILLS | Evaluaciones | 26 | PENDIENTE | CL-001 | +| SPEC-LOCALIZACION-PAISES | Localización | 13 | PENDIENTE | CL-001, CL-008 | + +### Patrones Técnicos + +| SPEC | Patrón | SP | Estado | Aplicación | +|------|--------|----:|--------|------------| +| SPEC-MAIL-THREAD-TRACKING | mail.thread | 13 | PENDIENTE | Expedientes, Citas, Comunicación | +| SPEC-WIZARD-TRANSIENT-MODEL | TransientModel | 8 | PENDIENTE | Wizards de receta, referencia | + +--- + +## SPECS Opcionales + +| SPEC | Descripción | SP | Decisión | Razón | +|------|-------------|----:|----------|-------| +| SPEC-VALORACION-INVENTARIO | FIFO/AVCO | 21 | EVALUAR | Solo para farmacia interna | +| SPEC-PRICING-RULES | Reglas precio | 8 | EVALUAR | Para paquetes de servicios | +| SPEC-TAREAS-RECURRENTES | Recurrencia | 13 | EVALUAR | Para citas periódicas | +| SPEC-PRESUPUESTOS-REVISIONES | Aprobación | 8 | EVALUAR | Para tratamientos largos | + +--- + +## SPECS No Aplicables + +| SPEC | Razón | +|------|-------| +| SPEC-PORTAL-PROVEEDORES | No hay compras complejas | +| SPEC-BLANKET-ORDERS | No aplica en servicios médicos | +| SPEC-INVENTARIOS-CICLICOS | Solo si hay farmacia grande | +| SPEC-PROYECTOS-DEPENDENCIAS-BURNDOWN | No hay proyectos de este tipo | +| SPEC-CONSOLIDACION-FINANCIERA | Generalmente una clínica | + +--- + +## Adaptaciones Requeridas + +### Mapeo de Conceptos Core → Clínicas + +| Concepto Core | Concepto Clínicas | +|---------------|-------------------| +| `core.partners` | Pacientes | +| `sales.sale_orders` | Consultas/Servicios | +| `inventory.products` | Medicamentos, servicios médicos | +| `hr.employees` | Personal médico | +| `calendar.events` | Citas médicas | +| `financial.invoices` | Facturas de consulta | + +### Extensiones de Entidad + +```sql +-- Pacientes (extiende partners) +patients.patients ( + partner_id → core.partners, + numero_expediente VARCHAR UNIQUE, + fecha_nacimiento DATE, + sexo ENUM('M', 'F'), + tipo_sangre VARCHAR(5), + alergias TEXT[], + antecedentes JSONB, + seguro_medico_id → insurance_policies +) + +-- Expediente clínico +medical.clinical_records ( + id UUID, + patient_id → patients, + fecha TIMESTAMPTZ, + tipo ENUM('consulta', 'urgencia', 'hospitalizacion'), + motivo_consulta TEXT, + diagnostico TEXT, + tratamiento TEXT, + medico_id → hr.employees, + signos_vitales JSONB +) + +-- Citas médicas +appointments.appointments ( + id UUID, + patient_id → patients, + doctor_id → hr.employees, + specialty_id → specialties, + fecha_hora TIMESTAMPTZ, + duracion_minutos INTEGER, + estado ENUM('programada', 'confirmada', 'en_progreso', 'completada', 'cancelada'), + notas TEXT +) + +-- Recetas médicas +medical.prescriptions ( + id UUID, + clinical_record_id → clinical_records, + fecha TIMESTAMPTZ, + vigencia_dias INTEGER, + firma_electronica BYTEA, + productos JSONB +) +``` + +--- + +## Cumplimiento Normativo + +Esta vertical debe cumplir con normas específicas: + +| Norma | Descripción | SPECS Relacionadas | +|-------|-------------|-------------------| +| NOM-024-SSA3-2012 | Expediente clínico electrónico | SPEC-SEGURIDAD, SPEC-MAIL-THREAD | +| LFPDPPP | Protección de datos personales | SPEC-SEGURIDAD, SPEC-2FA | +| NOM-004-SSA3-2012 | Expediente clínico | SPEC-FIRMA-ELECTRONICA | + +--- + +## Plan de Implementación + +### Fase 1: Fundamentos (SP: 60) +1. SPEC-SISTEMA-SECUENCIAS +2. SPEC-SEGURIDAD-API-KEYS-PERMISOS +3. SPEC-TWO-FACTOR-AUTHENTICATION +4. SPEC-OAUTH2-SOCIAL-LOGIN + +### Fase 2: Agenda y Comunicación (SP: 34) +5. SPEC-INTEGRACION-CALENDAR +6. SPEC-MAIL-THREAD-TRACKING +7. SPEC-WIZARD-TRANSIENT-MODEL + +### Fase 3: Expediente y Cumplimiento (SP: 39) +8. SPEC-FIRMA-ELECTRONICA-NOM151 +9. SPEC-RRHH-EVALUACIONES-SKILLS + +### Fase 4: Financiero (SP: 65) +10. SPEC-REPORTES-FINANCIEROS +11. SPEC-CONTABILIDAD-ANALITICA +12. SPEC-CONCILIACION-BANCARIA +13. SPEC-IMPUESTOS-AVANZADOS + +--- + +## Referencias + +- Documento Core: `erp-core/docs/04-modelado/MAPEO-SPECS-VERTICALES.md` +- SPECS del Core: `erp-core/docs/04-modelado/especificaciones-tecnicas/transversal/` +- Herencia DB: `database/HERENCIA-ERP-CORE.md` +- Directivas: `orchestration/directivas/` +- Normatividad: NOM-024-SSA3-2012, LFPDPPP, NOM-004-SSA3-2012 + +--- + +**Documento de herencia de SPECS oficial** +**Última actualización:** 2025-12-08 diff --git a/orchestration/00-guidelines/HERENCIA-SPECS-ERP-CORE.md b/orchestration/00-guidelines/HERENCIA-SPECS-ERP-CORE.md new file mode 100644 index 0000000..ddcd1ef --- /dev/null +++ b/orchestration/00-guidelines/HERENCIA-SPECS-ERP-CORE.md @@ -0,0 +1,162 @@ +# Herencia de Especificaciones - ERP Core -> Clinicas + +**Fecha:** 2025-12-08 +**Version:** 1.0 +**Vertical:** Clinicas +**Nivel:** 2B.2 + +--- + +## RESUMEN + +Este documento define las especificaciones transversales del ERP Core que la vertical de Clinicas debe heredar e implementar. + +**Ubicacion specs core:** `apps/erp-core/docs/04-modelado/especificaciones-tecnicas/transversal/` + +--- + +## ESPECIFICACIONES A HEREDAR + +### 1. SPEC-RRHH-EVALUACIONES-SKILLS.md + +**Prioridad:** ALTA +**Relevancia:** Gestion de personal medico y administrativo + +**Funcionalidades heredadas:** +- Evaluaciones de desempeno +- Gestion de competencias (skills) +- Pipeline de reclutamiento +- Certificaciones y capacitaciones + +**Adaptacion para clinicas:** +- Certificaciones medicas (cedulas profesionales) +- Especialidades y subespecialidades +- Evaluaciones de competencias clinicas +- Capacitaciones obligatorias (NOM-035, etc.) +- Vigencia de certificaciones + +**Modulos afectados:** +- Recursos Humanos +- Directorio Medico +- Credencializacion +- Capacitacion + +--- + +### 2. SPEC-INTEGRACION-CALENDAR.md + +**Prioridad:** ALTA +**Relevancia:** Agenda de citas medicas + +**Funcionalidades heredadas:** +- Eventos de calendario +- Sincronizacion con Google/Outlook +- Sistema de citas online (appointments) +- Recordatorios y alarmas +- Slots de disponibilidad + +**Adaptacion para clinicas:** +- Agenda de consultorios +- Citas por especialidad/medico +- Duracion variable por tipo de consulta +- Recordatorios a pacientes (SMS, WhatsApp) +- Manejo de lista de espera +- Reagendamiento automatico + +**Modulos afectados:** +- Agenda Medica +- Citas +- Portal de Pacientes +- Consultorios + +--- + +### 3. SPEC-MAIL-THREAD-TRACKING.md + +**Prioridad:** MEDIA +**Relevancia:** Tracking de expedientes clinicos + +**Funcionalidades heredadas:** +- Decorador `@Tracked` para seguimiento de cambios +- Sistema de mensajes +- Followers y notificaciones +- Actividades y recordatorios + +**Adaptacion para clinicas:** +- Historial de cambios en expediente clinico +- Notificaciones de resultados de laboratorio +- Seguimiento de tratamientos +- Comunicacion entre areas medicas +- Audit trail para regulaciones (NOM-024) + +**Modulos afectados:** +- Expediente Clinico +- Laboratorio +- Imagenologia +- Enfermeria + +--- + +## ESPECIFICACIONES ADICIONALES RECOMENDADAS + +| Especificacion | Relevancia | Prioridad | +|----------------|------------|-----------| +| SPEC-WIZARD-TRANSIENT-MODEL.md | Asistentes de admision/alta | Media | +| SPEC-FIRMA-ELECTRONICA-NOM151.md | Firma de consentimientos | Media | +| SPEC-TRAZABILIDAD-LOTES-SERIES.md | Medicamentos y materiales | Media | +| SPEC-INVENTARIOS-CICLICOS.md | Farmacia interna | Baja | + +--- + +## MATRIZ DE HERENCIA + +| Spec Core | Modulos Clinicas | Prioridad | Estado | +|-----------|------------------|-----------|--------| +| SPEC-RRHH-EVALUACIONES-SKILLS | RRHH, Directorio Medico | ALTA | Pendiente | +| SPEC-INTEGRACION-CALENDAR | Agenda, Citas | ALTA | Pendiente | +| SPEC-MAIL-THREAD-TRACKING | Expediente, Laboratorio | MEDIA | Pendiente | + +--- + +## IMPLEMENTACION + +### Orden Sugerido + +1. **Fase 1 - Agenda** + - SPEC-INTEGRACION-CALENDAR (critico para operacion) + +2. **Fase 2 - Personal** + - SPEC-RRHH-EVALUACIONES-SKILLS (certificaciones medicas) + +3. **Fase 3 - Tracking** + - SPEC-MAIL-THREAD-TRACKING (expediente clinico) + +### Consideraciones Especificas + +- Las clinicas tienen regulaciones estrictas (NOM-024, NOM-035) +- La gestion de citas es critica para la operacion +- El personal medico requiere certificaciones vigentes +- El expediente clinico requiere trazabilidad completa + +--- + +## CONSIDERACIONES REGULATORIAS + +| Regulacion | Specs Relacionadas | Impacto | +|------------|-------------------|---------| +| NOM-024-SSA3 (Expediente Clinico Electronico) | MAIL-THREAD-TRACKING | Audit trail obligatorio | +| NOM-035-STPS (Riesgos Psicosociales) | RRHH-EVALUACIONES-SKILLS | Capacitaciones | +| LFPDPPP (Proteccion de Datos) | Todas | Consentimiento y seguridad | + +--- + +## REFERENCIAS + +- Specs Core: `apps/erp-core/docs/04-modelado/especificaciones-tecnicas/transversal/` +- Gap Analysis: `apps/erp-core/orchestration/01-analisis/ANALISIS-GAPS-CONSOLIDADO.md` + +--- + +**Documento generado por:** Requirements-Analyst +**Fecha:** 2025-12-08 +**Version:** 1.0 diff --git a/orchestration/00-guidelines/PROJECT-STATUS.md b/orchestration/00-guidelines/PROJECT-STATUS.md new file mode 100644 index 0000000..b93bc15 --- /dev/null +++ b/orchestration/00-guidelines/PROJECT-STATUS.md @@ -0,0 +1,33 @@ +# PROJECT STATUS: erp-clinicas + +**Ultima actualizacion:** 2026-01-04 +**Estado general:** Activo + +--- + +## Metricas Rapidas + +| Metrica | Valor | +|---------|-------| +| Archivos docs/ | 27 | +| Archivos orchestration/ | 23 | +| Estado SIMCO | Adaptado | + +## Migracion EPIC-008 + +- [x] Migracion desde workspace-v1-bckp (EPIC-004/005) +- [x] Adaptacion SIMCO (EPIC-008) +- [x] docs/_MAP.md creado +- [x] PROJECT-STATUS.md creado +- [x] HERENCIA-SIMCO.md verificado +- [x] CONTEXTO-PROYECTO.md verificado + +## Historial de Cambios + +| Fecha | Cambio | EPIC | +|-------|--------|------| +| 2026-01-04 | Adaptacion SIMCO completada | EPIC-008 | + +--- + +**Generado por:** EPIC-008 adapt-simco.sh diff --git a/orchestration/PROXIMA-ACCION.md b/orchestration/PROXIMA-ACCION.md new file mode 100644 index 0000000..9231021 --- /dev/null +++ b/orchestration/PROXIMA-ACCION.md @@ -0,0 +1,122 @@ +# Próxima Acción - ERP Clínicas + +## Estado Actual +**Fecha:** Diciembre 2025 +**Progreso:** 20% (Planificación completa) + +--- + +## Documentación Disponible + +### Módulos Definidos (12 módulos - 395 SP) + +| Módulo | Nombre | SP | Estado | +|--------|--------|---:|--------| +| CL-001 | Fundamentos | 0 | PLANIFICADO | +| CL-002 | Pacientes | 34 | PLANIFICADO | +| CL-003 | Citas | 42 | PLANIFICADO | +| CL-004 | Consultas | 47 | PLANIFICADO | +| CL-005 | Recetas | 34 | PLANIFICADO | +| CL-006 | Laboratorio | 42 | PLANIFICADO | +| CL-007 | Farmacia | 34 | PLANIFICADO | +| CL-008 | Facturación | 21 | PLANIFICADO | +| CL-009 | Reportes | 34 | PLANIFICADO | +| CL-010 | Telemedicina | 47 | PLANIFICADO | +| CL-011 | Expediente | 39 | PLANIFICADO | +| CL-012 | Imagenología | 21 | PLANIFICADO | + +### Documentos de Referencia +- Visión: `docs/00-vision-general/VISION-CLINICAS.md` +- Módulos: `docs/02-definicion-modulos/INDICE-MODULOS.md` +- Herencia SPECS: `orchestration/00-guidelines/HERENCIA-SPECS-CORE.md` +- Inventario: `orchestration/inventarios/MASTER_INVENTORY.yml` + +--- + +## Prerrequisitos + +Este proyecto requiere que **erp-core** esté completado primero: +- [ ] Módulo auth de erp-core (para 2FA) +- [ ] Módulo users de erp-core +- [ ] Módulo tenants de erp-core +- [ ] Módulo inventory base de erp-core (farmacia) +- [ ] CFDI de erp-core + +--- + +## Cumplimiento Normativo + +### NOM-024-SSA3-2012 (Expediente Clínico) +- Estructura SOAP para notas clínicas +- Campos obligatorios de historia clínica +- Consentimiento informado +- Firma electrónica de recetas + +### LFPDPPP (Protección de Datos) +- Encriptación de datos sensibles +- Consentimiento de tratamiento +- Auditoría de accesos +- Derecho de acceso del paciente + +--- + +## Tarea Prioritaria (Cuando esté listo) + +### 1. Crear DDL del Schema Clinical + +**Objetivo:** Definir estructura de base de datos para expediente clínico. + +**Tablas a crear:** +- `clinical.patients` +- `clinical.patient_contacts` +- `clinical.patient_insurance` +- `clinical.appointments` +- `clinical.consultations` +- `clinical.diagnoses` + +**Archivo destino:** `database/ddl/01-clinical-schema.sql` + +### 2. Implementar Extensión 2FA + +**Objetivo:** 2FA obligatorio para personal médico. + +**Referencia:** Ver `erp-core/docs/04-modelado/especificaciones-tecnicas/transversal/SPEC-TWO-FACTOR-AUTHENTICATION.md` + +--- + +## Consideraciones Especiales + +1. **Seguridad:** 2FA obligatorio para personal médico +2. **Encriptación:** Datos sensibles (antecedentes, alergias) +3. **Auditoría:** Log de accesos a expedientes +4. **Integración:** HL7/FHIR para interoperabilidad + +--- + +## Ambiente de Desarrollo + +Según `DEVENV-PORTS.md`: + +```yaml +proyecto: clinicas +rango_base: 3500 +puertos: + backend: 3500 + frontend: 5178 + database: 5437 + redis: 6384 +``` + +--- + +## Próximos Pasos + +1. [ ] Esperar completitud de erp-core (auth con 2FA, users, tenants) +2. [ ] Validar cumplimiento NOM-024-SSA3-2012 +3. [ ] Diseñar arquitectura de encriptación +4. [ ] Crear DDL schema clinical +5. [ ] Iniciar backend CL-001 (heredar de core + 2FA) + +--- + +**Última actualización:** 2025-12-08 diff --git a/orchestration/directivas/DIRECTIVA-EXPEDIENTE-CLINICO.md b/orchestration/directivas/DIRECTIVA-EXPEDIENTE-CLINICO.md new file mode 100644 index 0000000..32badd1 --- /dev/null +++ b/orchestration/directivas/DIRECTIVA-EXPEDIENTE-CLINICO.md @@ -0,0 +1,242 @@ +# DIRECTIVA-EXPEDIENTE-CLINICO + +**Version:** 1.0 +**Fecha:** 2025-12-08 +**Vertical:** Clinicas +**Nivel:** 2B.2 + +--- + +## PROPOSITO + +Define las directrices para la implementacion del expediente clinico electronico. + +--- + +## ALCANCE + +- Historial medico del paciente +- Consultas y notas medicas +- Recetas y prescripciones +- Estudios y resultados +- Cumplimiento normativo + +--- + +## NORMATIVA APLICABLE + +### NOM-024-SSA3-2012 + +**Intercambio de informacion en salud** + +Requerimientos: +- Estructura estandarizada de datos +- Interoperabilidad con otros sistemas +- Identificacion unica del paciente + +### NOM-004-SSA3-2012 + +**Del expediente clinico** + +Requerimientos: +- Consentimiento informado +- Nota de ingreso +- Notas de evolucion +- Ordenes medicas +- Resultados de estudios + +### Ley Federal de Proteccion de Datos Personales + +- Datos de salud = datos sensibles +- Consentimiento expreso requerido +- Derecho de acceso, rectificacion, cancelacion, oposicion (ARCO) + +--- + +## PRINCIPIOS + +### 1. Integridad de Datos + +- Registros inmutables (no se borran, se anulan) +- Firma electronica del medico +- Auditoria completa de accesos + +### 2. Confidencialidad + +- Acceso basado en roles +- Encriptacion en reposo y transito +- Logs de acceso obligatorios + +### 3. Disponibilidad + +- Acceso 24/7 para emergencias +- Respaldos automaticos +- Plan de recuperacion + +--- + +## MODELO DE DATOS + +### medical_records (expediente) +```yaml +campos: + - id: uuid + - patient_id: FK -> clinica.patients + - record_number: string (unico por clinica) + - created_at: timestamp + - allergies_reviewed: boolean + - blood_type: enum(A+, A-, B+, B-, AB+, AB-, O+, O-) +``` + +### consultations (consultas) +```yaml +campos: + - id: uuid + - medical_record_id: FK -> medical_records + - appointment_id: FK -> appointments + - doctor_id: FK -> clinica.doctors + - consultation_type: enum(first, followup, emergency) + - chief_complaint: text # motivo de consulta + - present_illness: text # padecimiento actual + - physical_exam: json # exploracion fisica + - assessment: text # valoracion + - plan: text # plan de tratamiento + - signed_at: timestamp + - signature_hash: string # firma electronica +``` + +### vital_signs (signos vitales) +```yaml +campos: + - id: uuid + - consultation_id: FK -> consultations + - blood_pressure_systolic: integer + - blood_pressure_diastolic: integer + - heart_rate: integer + - respiratory_rate: integer + - temperature: decimal + - weight: decimal + - height: decimal + - oxygen_saturation: integer + - recorded_by: FK -> auth.users + - recorded_at: timestamp +``` + +### diagnoses (diagnosticos) +```yaml +campos: + - id: uuid + - consultation_id: FK -> consultations + - cie10_code: string # codigo CIE-10 + - description: text + - diagnosis_type: enum(principal, secondary, presumptive, definitive) + - notes: text +``` + +### prescriptions (recetas) +```yaml +campos: + - id: uuid + - consultation_id: FK -> consultations + - patient_id: FK -> patients + - doctor_id: FK -> doctors + - prescription_number: string + - medications: json # array de medicamentos + - instructions: text + - valid_until: date + - signed_at: timestamp + - signature_hash: string +``` + +--- + +## FLUJO DE CONSULTA + +``` +1. Paciente llega a cita + | +2. Enfermera registra signos vitales + | +3. Medico accede al expediente + | +4. Revisa historial y alergias + | +5. Realiza consulta + | +6. Documenta en sistema + |-- Motivo de consulta + |-- Exploracion fisica + |-- Diagnostico (CIE-10) + |-- Plan de tratamiento + | +7. Genera receta (si aplica) + | +8. Firma electronica + | +9. Cierra consulta +``` + +--- + +## SEGURIDAD Y ACCESOS + +### Roles y Permisos + +| Rol | Permisos | +|-----|----------| +| Medico | CRUD consultas propias, lectura historial | +| Enfermera | Signos vitales, lectura basica | +| Recepcion | Datos demograficos, citas | +| Admin | Configuracion, reportes | + +### Auditoria Obligatoria + +Cada acceso al expediente registra: +- Usuario +- Fecha/hora +- Accion realizada +- IP de origen +- Motivo de acceso + +### Encriptacion + +``` +Datos en reposo: + - AES-256 para campos sensibles + - Llaves rotadas cada 90 dias + +Datos en transito: + - TLS 1.3 + - Certificados validos +``` + +--- + +## INTEGRACION CON CORE + +### Herencia de Specs + +| Spec Core | Aplicacion | +|-----------|------------| +| SPEC-MAIL-THREAD-TRACKING | Historial de cambios | +| SPEC-INTEGRACION-CALENDAR | Agenda de citas | +| SPEC-RRHH-EVALUACIONES-SKILLS | Especialidades medicas | + +### APIs a Extender + +- `PartnerService` -> `PatientService` +- `EmployeeService` -> `DoctorService` +- Sistema de tracking -> Historial expediente + +--- + +## REFERENCIAS + +- NOM-024-SSA3-2012 +- NOM-004-SSA3-2012 +- Ley Federal de Proteccion de Datos Personales +- HERENCIA-SPECS-ERP-CORE.md + +--- + +**Documento de directiva oficial** diff --git a/orchestration/directivas/DIRECTIVA-GESTION-CITAS.md b/orchestration/directivas/DIRECTIVA-GESTION-CITAS.md new file mode 100644 index 0000000..437b41b --- /dev/null +++ b/orchestration/directivas/DIRECTIVA-GESTION-CITAS.md @@ -0,0 +1,242 @@ +# DIRECTIVA-GESTION-CITAS + +**Version:** 1.0 +**Fecha:** 2025-12-08 +**Vertical:** Clinicas +**Nivel:** 2B.2 + +--- + +## PROPOSITO + +Define las directrices para el sistema de gestion de citas medicas. + +--- + +## ALCANCE + +- Agenda de medicos +- Programacion de citas +- Confirmaciones y recordatorios +- Gestion de consultorios + +--- + +## PRINCIPIOS + +### 1. Disponibilidad Visible + +- Horarios de medicos siempre actualizados +- Slots disponibles en tiempo real +- Sin overbooking + +### 2. Comunicacion Proactiva + +- Confirmacion inmediata de cita +- Recordatorios automaticos (24h, 2h antes) +- Notificacion de cambios + +### 3. Optimizacion de Recursos + +- Maximizar uso de consultorios +- Minimizar tiempos muertos +- Balance de carga entre medicos + +--- + +## MODELO DE DATOS + +### doctors (medicos) +```yaml +campos: + - id: uuid + - employee_id: FK -> hr.employees + - license_number: string # cedula profesional + - specialty_id: FK -> specialties + - consultation_duration: integer # minutos default + - max_daily_appointments: integer + - status: enum(active, inactive, vacation) +``` + +### doctor_schedules (horarios) +```yaml +campos: + - id: uuid + - doctor_id: FK -> doctors + - day_of_week: enum(mon, tue, wed, thu, fri, sat, sun) + - start_time: time + - end_time: time + - consulting_room_id: FK -> consulting_rooms + - is_active: boolean +``` + +### appointments (citas) +```yaml +campos: + - id: uuid + - patient_id: FK -> patients + - doctor_id: FK -> doctors + - appointment_type_id: FK -> appointment_types + - consulting_room_id: FK -> consulting_rooms + - scheduled_start: timestamp + - scheduled_end: timestamp + - actual_start: timestamp + - actual_end: timestamp + - status: enum(scheduled, confirmed, in_progress, completed, cancelled, no_show) + - cancellation_reason: text + - notes: text +``` + +### consulting_rooms (consultorios) +```yaml +campos: + - id: uuid + - room_number: string + - floor: string + - equipment: json # equipo disponible + - specialty_id: FK -> specialties (si es especializado) + - status: enum(available, occupied, maintenance) +``` + +--- + +## FLUJO DE CITA + +### Programacion + +``` +1. Paciente solicita cita + | +2. Selecciona especialidad/medico + | +3. Sistema muestra disponibilidad + | +4. Paciente selecciona horario + | +5. Sistema valida: + |-- Disponibilidad del medico + |-- Disponibilidad del consultorio + |-- No conflictos del paciente + | +6. Cita creada (status: scheduled) + | +7. Notificacion al paciente +``` + +### Confirmacion + +``` +24 horas antes: + Sistema envia recordatorio + Paciente puede: + - Confirmar + - Reprogramar + - Cancelar + +2 horas antes: + Sistema envia recordatorio final +``` + +### Dia de la Cita + +``` +1. Paciente llega + | +2. Recepcion marca llegada + | +3. Cuando medico esta listo: + |-- Cita pasa a "in_progress" + |-- Registra hora real de inicio + | +4. Al terminar: + |-- Cita pasa a "completed" + |-- Registra hora real de fin +``` + +--- + +## ESTADOS DE CITA + +``` +scheduled --> confirmed --> in_progress --> completed + | | | + v v v + cancelled no_show cancelled +``` + +### Reglas de Transicion + +| De | A | Condicion | +|----|---|-----------| +| scheduled | confirmed | Paciente confirma | +| scheduled | cancelled | Antes de 24h | +| confirmed | in_progress | Paciente presente | +| confirmed | no_show | No se presento | +| in_progress | completed | Consulta terminada | + +--- + +## NOTIFICACIONES + +### Canales + +| Canal | Uso | +|-------|-----| +| Email | Confirmacion, recordatorios | +| SMS | Recordatorio 2h antes | +| WhatsApp | Opcional, si configurado | +| Push | Si tiene app instalada | + +### Templates + +``` +Confirmacion: + "Su cita con Dr. {doctor} ha sido confirmada para el {fecha} a las {hora}." + +Recordatorio 24h: + "Le recordamos su cita manana {fecha} a las {hora} con Dr. {doctor}. + Por favor confirme respondiendo SI o cancele respondiendo NO." + +Recordatorio 2h: + "Su cita es en 2 horas. Direccion: {direccion}. Consultorio: {consultorio}." +``` + +--- + +## INTEGRACION CON CORE + +### Herencia de Specs + +| Spec Core | Aplicacion | +|-----------|------------| +| SPEC-INTEGRACION-CALENDAR | Base del calendario | +| SPEC-TAREAS-RECURRENTES | Citas recurrentes | +| SPEC-MAIL-THREAD-TRACKING | Historial de comunicacion | + +### APIs a Extender + +- Calendar del core para la agenda +- Notification service para recordatorios + +--- + +## METRICAS + +| Metrica | Objetivo | Alerta | +|---------|----------|--------| +| Ocupacion de agenda | > 80% | < 60% | +| No-shows | < 5% | > 10% | +| Tiempo de espera | < 15 min | > 30 min | +| Confirmaciones | > 90% | < 80% | + +--- + +## REFERENCIAS + +- SPEC-INTEGRACION-CALENDAR.md (core) +- DIRECTIVA-EXPEDIENTE-CLINICO.md +- HERENCIA-SPECS-ERP-CORE.md + +--- + +**Documento de directiva oficial** diff --git a/orchestration/environment/PROJECT-ENV-CONFIG.yml b/orchestration/environment/PROJECT-ENV-CONFIG.yml new file mode 100644 index 0000000..2aabb9c --- /dev/null +++ b/orchestration/environment/PROJECT-ENV-CONFIG.yml @@ -0,0 +1,262 @@ +# ============================================================================= +# PROJECT-ENV-CONFIG.yml - ERP CLINICAS +# ============================================================================= +# Vertical de ERP-Suite especializada en Clínicas y Consultorios Médicos +# Actualizado: 2025-12-08 +# Referencia: ~/workspace/core/devtools/environment/DEVENV-PORTS.md +# ============================================================================= + +project: + name: "ERP-CLINICAS" + code: "CL" + description: "Sistema para Clínicas y Consultorios con Cumplimiento NOM-024" + type: "vertical" + level: "2B.2" + status: "planning" + parent: "erp-suite" + + paths: + root: "/home/isem/workspace/projects/erp-suite/apps/verticales/clinicas" + backend: "backend/" + frontend: "frontend/" + database: "database/" + docs: "docs/" + orchestration: "orchestration/" + +# ============================================================================= +# PUERTOS (Según DEVENV-PORTS.md) +# ============================================================================= +ports: + backend: 3500 + frontend: 5178 + database: 5437 + redis: 6384 + +# ============================================================================= +# BASE DE DATOS +# ============================================================================= +database: + type: "postgresql" + host: "localhost" + port: 5437 + name: "clinicas_db" + user: "clinicas_user" + + schemas: + core_inherited: 12 # Schemas heredados de erp-core + vertical_specific: + - clinical # Pacientes, citas, consultas, expediente + - pharmacy # Stock medicamentos, dispensaciones + - laboratory # Órdenes lab, resultados + - imaging # Estudios DICOM, metadatos + - telemedicine # Sesiones video, grabaciones + + encryption: + enabled: true + algorithm: "AES-256" + encrypted_fields: + - antecedentes_medicos + - alergias + - diagnosticos + - notas_clinicas + + migration: + tool: "typeorm" + directory: "database/migrations/" + +# ============================================================================= +# STACK TECNOLOGICO +# ============================================================================= +stack: + runtime: "Node.js 20+" + language: "TypeScript 5.3+" + backend: + framework: "Express.js" + orm: "TypeORM 0.3.17" + encryption: "AES-256" + frontend: + framework: "React 18" + build: "Vite" + ui: "Tailwind CSS + shadcn/ui" + auth: + base: "JWT + bcryptjs" + extension: "2FA obligatorio para personal médico" + +# ============================================================================= +# HERENCIA DEL CORE +# ============================================================================= +core_inheritance: + version: "0.6.0" + tables_inherited: 97 + modules_inherited: + - auth # + extensión 2FA + - users + - roles + - tenants + - inventory # Para farmacia + - cfdi + + specs_applicable: 6 + specs_implemented: 0 + specs_detail: + - SPEC-INTEGRACION-CALENDAR + - SPEC-MAIL-THREAD-TRACKING + - SPEC-TRAZABILIDAD-LOTES-SERIES + - SPEC-FACTURACION-CFDI + - SPEC-TWO-FACTOR-AUTHENTICATION + - SPEC-RRHH-EVALUACIONES-SKILLS + +# ============================================================================= +# MODULOS DE LA VERTICAL +# ============================================================================= +modules: + total: 12 + story_points: 395 + list: + - code: CL-001 + name: Fundamentos + sp: 0 + priority: P0 + status: pending + compliance: LFPDPPP + - code: CL-002 + name: Pacientes + sp: 34 + priority: P0 + status: pending + compliance: LFPDPPP + - code: CL-003 + name: Citas + sp: 42 + priority: P0 + status: pending + - code: CL-004 + name: Consultas SOAP + sp: 47 + priority: P0 + status: pending + compliance: NOM-024 + - code: CL-005 + name: Recetas + sp: 34 + priority: P0 + status: pending + compliance: NOM-024 + - code: CL-006 + name: Laboratorio + sp: 42 + priority: P1 + status: pending + - code: CL-007 + name: Farmacia + sp: 34 + priority: P1 + status: pending + - code: CL-008 + name: Facturación CFDI + sp: 21 + priority: P0 + status: pending + - code: CL-009 + name: Reportes + sp: 34 + priority: P1 + status: pending + - code: CL-010 + name: Telemedicina + sp: 47 + priority: P2 + status: pending + - code: CL-011 + name: Expediente NOM-024 + sp: 39 + priority: P0 + status: pending + compliance: NOM-024 + - code: CL-012 + name: Imagenología DICOM + sp: 21 + priority: P2 + status: pending + +# ============================================================================= +# CUMPLIMIENTO NORMATIVO +# ============================================================================= +compliance: + nom_024_ssa3_2012: + name: "Expediente Clínico Electrónico" + requirements: + - estructura_soap: "Subjetivo, Objetivo, Análisis, Plan" + - campos_obligatorios: + - identificacion_paciente + - fecha_consulta + - motivo_consulta + - exploracion_fisica + - diagnostico_cie10 + - plan_tratamiento + - firma_electronica: "Requerida en recetas" + - consentimiento_informado: "Documentado" + + lfpdppp: + name: "Ley Federal de Protección de Datos Personales" + requirements: + - encriptacion: "AES-256 para datos sensibles" + - auditoria: "Log de accesos a expedientes" + - consentimiento: "Tratamiento de datos" + - derecho_acceso: "Portal de paciente" + +# ============================================================================= +# SEGURIDAD ESPECIAL +# ============================================================================= +security: + two_factor_auth: + required_for: "medical_staff" + methods: ["TOTP", "SMS"] + + data_encryption: + algorithm: "AES-256" + key_rotation: "quarterly" + + audit_logging: + enabled: true + events: + - medical_record_access + - prescription_created + - patient_data_modified + - consent_updated + retention: "10 years" # Requerimiento NOM-024 + +# ============================================================================= +# ARCHIVOS DE ENTORNO +# ============================================================================= +env_files: + template: "orchestration/environment/.env.example" + backend: "backend/.env" + frontend: "frontend/.env" + +env_variables: + required: + - NODE_ENV + - PORT + - DATABASE_URL + - JWT_SECRET + - REDIS_URL + - ENCRYPTION_KEY # Para AES-256 + - TWILIO_SID # Para 2FA SMS + - TWILIO_AUTH_TOKEN + optional: + - LOG_LEVEL + - CORS_ORIGIN + - HL7_ENDPOINT # Interoperabilidad + +# ============================================================================= +# NOTAS +# ============================================================================= +notes: | + - Vertical especializada en sector salud + - CRITICO: Cumplimiento NOM-024-SSA3-2012 (expediente clínico) + - CRITICO: Cumplimiento LFPDPPP (protección de datos) + - 2FA OBLIGATORIO para personal médico + - Encriptación AES-256 para datos sensibles + - Auditoría de accesos con retención 10 años + - Puertos asignados según DEVENV-PORTS.md (rango 3500) diff --git a/orchestration/inventarios/BACKEND_INVENTORY.yml b/orchestration/inventarios/BACKEND_INVENTORY.yml new file mode 100644 index 0000000..10c563d --- /dev/null +++ b/orchestration/inventarios/BACKEND_INVENTORY.yml @@ -0,0 +1,80 @@ +# BACKEND INVENTORY - ERP Clínicas (Vertical) +# Generado: 2025-12-08 +# Sistema: NEXUS + SIMCO v2.2.0 + +proyecto: + nombre: ERP Clinicas + codigo: clinicas + nivel: 2B.2 (Vertical) + estado: Planificacion + +herencia_core: + backend: erp-core + servicios_heredados: 40+ + referencia: "apps/erp-core/backend/" + +servicios_planificados: + pacientes: + - nombre: PatientService + modulo: CL-001 + endpoints: + - POST /api/v1/clinica/patients + - GET /api/v1/clinica/patients + - GET /api/v1/clinica/patients/:id + - GET /api/v1/clinica/patients/:id/history + + citas: + - nombre: AppointmentService + modulo: CL-002 + endpoints: + - POST /api/v1/clinica/appointments + - GET /api/v1/clinica/appointments + - GET /api/v1/clinica/appointments/available-slots + - PATCH /api/v1/clinica/appointments/:id/cancel + - PATCH /api/v1/clinica/appointments/:id/confirm + + - nombre: DoctorService + modulo: CL-002 + endpoints: + - GET /api/v1/clinica/doctors + - GET /api/v1/clinica/doctors/:id/schedule + + expediente_clinico: + - nombre: MedicalRecordService + modulo: CL-003 + seguridad: ENCRIPTADO + endpoints: + - GET /api/v1/clinica/patients/:id/medical-record + - POST /api/v1/clinica/consultations + - POST /api/v1/clinica/prescriptions + + servicios: + - nombre: MedicalServiceCatalogService + modulo: CL-004 + endpoints: + - GET /api/v1/clinica/services + - GET /api/v1/clinica/services/:id/price + + facturacion: + - nombre: MedicalInvoiceService + modulo: CL-005 + endpoints: + - POST /api/v1/clinica/invoices + - POST /api/v1/clinica/invoices/:id/stamp-cfdi + + reportes: + - nombre: MedicalReportService + modulo: CL-006 + endpoints: + - GET /api/v1/clinica/reports/appointments + - GET /api/v1/clinica/reports/revenue + +resumen: + servicios_heredados: 40+ + servicios_planificados: 7 + endpoints_planificados: 18 + estado_general: PLANIFICACION + ultima_actualizacion: 2025-12-08 + +referencias: + herencia_core: "../00-guidelines/HERENCIA-ERP-CORE.md" diff --git a/orchestration/inventarios/DATABASE_INVENTORY.yml b/orchestration/inventarios/DATABASE_INVENTORY.yml new file mode 100644 index 0000000..a8b44df --- /dev/null +++ b/orchestration/inventarios/DATABASE_INVENTORY.yml @@ -0,0 +1,158 @@ +# DATABASE INVENTORY - ERP Clínicas (Vertical) +# Generado: 2025-12-08 +# Sistema: NEXUS + SIMCO v2.2.0 + +proyecto: + nombre: ERP Clinicas + codigo: clinicas + nivel: 2B.2 (Vertical) + estado: Planificacion + +herencia_core: + base_de_datos: erp-core + version_core: "1.2.0" + tablas_heredadas: 144 # Actualizado 2025-12-09 según conteo real DDL + schemas_heredados: + - nombre: auth + tablas: 26 # Autenticación, MFA, OAuth, API Keys + - nombre: core + tablas: 12 # Partners (pacientes), catálogos, UoM + - nombre: financial + tablas: 15 # Contabilidad, facturas, pagos + - nombre: inventory + tablas: 20 # Medicamentos, insumos médicos + - nombre: purchase + tablas: 8 # Compras de insumos + - nombre: sales + tablas: 10 # Servicios médicos, facturación + - nombre: projects + tablas: 10 # Tratamientos (como proyectos) + - nombre: analytics + tablas: 7 # Centros de costo por consultorio + - nombre: system + tablas: 13 # Mensajes, notificaciones, logs + - nombre: billing + tablas: 11 # SaaS (opcional) + - nombre: crm + tablas: 6 # Pacientes potenciales (opcional) + - nombre: hr + tablas: 6 # Personal médico, contratos + referencia_ddl: "apps/erp-core/database/ddl/" + documento_herencia: "../database/HERENCIA-ERP-CORE.md" + variable_rls: "app.current_tenant_id" + +schemas_especificos: + - nombre: clinica + descripcion: Schema para operaciones de clinica/consultorio + estado: PLANIFICADO + modulos_relacionados: [CL-001, CL-002, CL-003, CL-004, CL-005, CL-006] + nota: "Datos sensibles - Requiere encriptacion" + +tablas_planificadas: + pacientes: + - nombre: clinica.patients + descripcion: Registro de pacientes + modulo: CL-001 + prioridad: P0 + seguridad: DATOS_SENSIBLES + + - nombre: clinica.patient_contacts + descripcion: Contactos de emergencia + modulo: CL-001 + prioridad: P1 + + - nombre: clinica.patient_insurance + descripcion: Informacion de seguros + modulo: CL-001 + prioridad: P1 + + citas: + - nombre: clinica.appointments + descripcion: Citas medicas + modulo: CL-002 + prioridad: P0 + + - nombre: clinica.appointment_slots + descripcion: Horarios disponibles + modulo: CL-002 + prioridad: P0 + + - nombre: clinica.doctors + descripcion: Medicos y especialistas + modulo: CL-002 + prioridad: P0 + + - nombre: clinica.specialties + descripcion: Catalogo de especialidades + modulo: CL-002 + prioridad: P0 + + expediente_clinico: + - nombre: clinica.medical_records + descripcion: Expediente clinico electronico + modulo: CL-003 + prioridad: P0 + seguridad: ENCRIPTADO + normativa: NOM-024-SSA3-2012 + + - nombre: clinica.consultations + descripcion: Consultas realizadas + modulo: CL-003 + prioridad: P0 + + - nombre: clinica.diagnoses + descripcion: Diagnosticos (CIE-10) + modulo: CL-003 + prioridad: P0 + + - nombre: clinica.prescriptions + descripcion: Recetas medicas + modulo: CL-003 + prioridad: P1 + + - nombre: clinica.vital_signs + descripcion: Signos vitales + modulo: CL-003 + prioridad: P1 + + servicios: + - nombre: clinica.medical_services + descripcion: Catalogo de servicios medicos + modulo: CL-004 + prioridad: P0 + + - nombre: clinica.service_prices + descripcion: Precios por servicio + modulo: CL-004 + prioridad: P1 + + facturacion: + - nombre: clinica.invoices + descripcion: Facturas medicas + modulo: CL-005 + prioridad: P1 + nota: CFDI para sector salud + +specs_core_requeridas: + - spec: SPEC-RRHH-EVALUACIONES-SKILLS.md + aplicacion: Credenciales medicas + - spec: SPEC-INTEGRACION-CALENDAR.md + aplicacion: Agenda de citas + - spec: SPEC-TWO-FACTOR-AUTHENTICATION.md + aplicacion: Seguridad acceso expedientes + +consideraciones_seguridad: + - Encriptacion obligatoria de expedientes medicos + - Auditoria completa de acceso a datos sensibles + - Cumplimiento NOM-024-SSA3-2012 + - Proteccion de datos personales de salud + +resumen: + tablas_heredadas: 120+ + tablas_especificas_planificadas: 15 + schemas_especificos: 1 + estado_general: PLANIFICACION + ultima_actualizacion: 2025-12-08 + +referencias: + herencia_core: "../00-guidelines/HERENCIA-ERP-CORE.md" diff --git a/orchestration/inventarios/DEPENDENCY_GRAPH.yml b/orchestration/inventarios/DEPENDENCY_GRAPH.yml new file mode 100644 index 0000000..94b2905 --- /dev/null +++ b/orchestration/inventarios/DEPENDENCY_GRAPH.yml @@ -0,0 +1,61 @@ +# DEPENDENCY GRAPH - ERP Clínicas (Vertical) +# Generado: 2025-12-08 +# Sistema: NEXUS + SIMCO v2.2.0 + +proyecto: + nombre: ERP Clinicas + nivel: 2B.2 (Vertical) + +modulos_verticales: + CL-001_pacientes: + depende_de: [] + core: [auth, users, tenants] + + CL-002_citas: + depende_de: + - CL-001_pacientes + core: [auth, users, tenants, notifications] + + CL-003_expediente_clinico: + depende_de: + - CL-001_pacientes + - CL-002_citas + core: [auth, users, audit] + seguridad: CRITICO + + CL-004_servicios: + depende_de: [] + core: [auth, catalogs] + + CL-005_facturacion: + depende_de: + - CL-001_pacientes + - CL-002_citas + - CL-004_servicios + core: [auth, financial] + + CL-006_reportes: + depende_de: + - CL-002_citas + - CL-005_facturacion + core: [auth, reports] + +modulos_core_heredados: + - MGN-001_auth (100% + 2FA reforzado) + - MGN-002_users (100%) + - MGN-003_roles (100%) + - MGN-004_tenants (extendido) + - MGN-007_audit (CRITICO para HIPAA) + - MGN-008_notifications (100%) + +orden_implementacion: + fase_1: [CL-001, CL-004] + fase_2: [CL-002] + fase_3: [CL-003] + fase_4: [CL-005, CL-006] + +resumen: + total_modulos: 6 + dependencias_internas: 7 + estado: PLANIFICACION + ultima_actualizacion: 2025-12-08 diff --git a/orchestration/inventarios/FRONTEND_INVENTORY.yml b/orchestration/inventarios/FRONTEND_INVENTORY.yml new file mode 100644 index 0000000..205ea37 --- /dev/null +++ b/orchestration/inventarios/FRONTEND_INVENTORY.yml @@ -0,0 +1,57 @@ +# FRONTEND INVENTORY - ERP Clínicas (Vertical) +# Generado: 2025-12-08 +# Sistema: NEXUS + SIMCO v2.2.0 + +proyecto: + nombre: ERP Clinicas + codigo: clinicas + nivel: 2B.2 (Vertical) + estado: Planificacion + +herencia_core: + frontend: erp-core + componentes_heredados: 80+ + referencia: "apps/erp-core/frontend/" + +componentes_planificados: + pacientes: + - PatientList + - PatientForm + - PatientDetail + - PatientSearch + + citas: + - AppointmentCalendar + - AppointmentForm + - AppointmentList + - DoctorScheduleView + - SlotSelector + + expediente_clinico: + - MedicalRecordView + - ConsultationForm + - PrescriptionForm + - VitalSignsForm + - DiagnosisSelector + + servicios: + - ServiceCatalog + - ServicePriceList + + facturacion: + - MedicalInvoiceForm + - InvoiceList + + reportes: + - AppointmentReport + - RevenueReport + - PatientStatistics + +resumen: + componentes_heredados: 80+ + componentes_planificados: 18 + estado_general: PLANIFICACION + ultima_actualizacion: 2025-12-08 + +referencias: + herencia_core: "../00-guidelines/HERENCIA-ERP-CORE.md" diff --git a/orchestration/inventarios/MASTER_INVENTORY.yml b/orchestration/inventarios/MASTER_INVENTORY.yml new file mode 100644 index 0000000..4185b68 --- /dev/null +++ b/orchestration/inventarios/MASTER_INVENTORY.yml @@ -0,0 +1,213 @@ +# MASTER INVENTORY - ERP Clínicas (Vertical) +# Generado: 2025-12-08 +# Sistema: NEXUS + SIMCO v2.2.0 + +proyecto: + nombre: ERP Clínicas + codigo: CL + nivel: 2B.2 (Vertical) + estado: EPICAS_COMPLETAS + version: 0.3.0 + path: /home/isem/workspace/projects/erp-suite/apps/verticales/clinicas + herencia: + core_version: "0.6.0" + tablas_heredadas: 144 + schemas_heredados: 12 + specs_aplicables: 22 + specs_implementadas: 0 + +resumen_general: + total_modulos: 12 + total_schemas_planificados: 1 + total_tablas_planificadas: 13 + total_tablas_implementadas: 13 + total_servicios_backend: 0 + total_componentes_frontend: 0 + story_points_estimados: 451 + test_coverage: N/A + ultima_actualizacion: 2025-12-09 + +modulos: + total: 12 + lista: + - codigo: CL-001 + nombre: Fundamentos + descripcion: Auth con 2FA obligatorio, seguridad médica + herencia: 90% + prioridad: P0 + estado: PLANIFICADO + sp: 0 + + - codigo: CL-002 + nombre: Pacientes + descripcion: Registro y expediente básico + herencia: 40% + prioridad: P0 + estado: EPICA_COMPLETA + sp: 38 + epica: docs/08-epicas/EPIC-CL-002-pacientes.md + + - codigo: CL-003 + nombre: Citas + descripcion: Agenda médica con recordatorios + herencia: 30% + prioridad: P0 + estado: EPICA_COMPLETA + sp: 42 + epica: docs/08-epicas/EPIC-CL-003-citas.md + + - codigo: CL-004 + nombre: Consultas + descripcion: Registro de consultas y SOAP + herencia: 0% + prioridad: P0 + estado: EPICA_COMPLETA + sp: 55 + epica: docs/08-epicas/EPIC-CL-004-consultas.md + + - codigo: CL-005 + nombre: Recetas + descripcion: Prescripciones y medicamentos + herencia: 20% + prioridad: P0 + estado: EPICA_COMPLETA + sp: 35 + epica: docs/08-epicas/EPIC-CL-005-recetas.md + + - codigo: CL-006 + nombre: Laboratorio + descripcion: Órdenes y resultados + herencia: 10% + prioridad: P1 + estado: EPICA_COMPLETA + sp: 38 + epica: docs/08-epicas/EPIC-CL-006-laboratorio.md + + - codigo: CL-007 + nombre: Farmacia + descripcion: Inventario de medicamentos + herencia: 60% + prioridad: P1 + estado: EPICA_COMPLETA + sp: 40 + epica: docs/08-epicas/EPIC-CL-007-farmacia.md + + - codigo: CL-008 + nombre: Facturacion + descripcion: CFDI servicios médicos + herencia: 70% + prioridad: P0 + estado: EPICA_COMPLETA + sp: 38 + epica: docs/08-epicas/EPIC-CL-008-facturacion.md + + - codigo: CL-009 + nombre: Reportes + descripcion: Estadísticas clínicas + herencia: 40% + prioridad: P1 + estado: EPICA_COMPLETA + sp: 25 + epica: docs/08-epicas/EPIC-CL-009-reportes.md + + - codigo: CL-010 + nombre: Telemedicina + descripcion: Videoconsultas remotas + herencia: 0% + prioridad: P2 + estado: EPICA_COMPLETA + sp: 55 + epica: docs/08-epicas/EPIC-CL-010-telemedicina.md + + - codigo: CL-011 + nombre: Expediente + descripcion: Historia clínica NOM-024 + herencia: 10% + prioridad: P0 + estado: EPICA_COMPLETA + sp: 30 + epica: docs/08-epicas/EPIC-CL-011-expediente.md + + - codigo: CL-012 + nombre: Imagenologia + descripcion: Visor DICOM y estudios + herencia: 0% + prioridad: P2 + estado: EPICA_COMPLETA + sp: 55 + epica: docs/08-epicas/EPIC-CL-012-imagenologia.md + +specs_core: + aplicables: 22 + implementadas: 0 + por_implementar: 22 + documento: orchestration/00-guidelines/HERENCIA-SPECS-CORE.md + detalle: + - spec: SPEC-SISTEMA-SECUENCIAS + estado: PENDIENTE + - spec: SPEC-SEGURIDAD-API-KEYS-PERMISOS + estado: PENDIENTE + - spec: SPEC-TRAZABILIDAD-LOTES-SERIES + estado: PENDIENTE + - spec: SPEC-MAIL-THREAD-TRACKING + estado: PENDIENTE + - spec: SPEC-RRHH-EVALUACIONES + estado: PENDIENTE + - spec: SPEC-INTEGRACION-CALENDAR + estado: PENDIENTE + - spec: SPEC-WIZARD-TRANSIENT-MODEL + estado: PENDIENTE + - spec: SPEC-FACTURACION-CFDI + estado: PENDIENTE + +capas: + database: + inventario: DATABASE_INVENTORY.yml + schemas_implementados: [clinical] + tablas_implementadas: 13 + enums_implementados: 4 + ddl_files: + - init/00-extensions.sql + - init/01-create-schemas.sql + - init/02-rls-functions.sql + - init/03-clinical-tables.sql + estado: DDL_COMPLETO + + backend: + inventario: BACKEND_INVENTORY.yml + modulos_planificados: 12 + estado: PLANIFICADO + + frontend: + inventario: FRONTEND_INVENTORY.yml + paginas_planificadas: 25 + estado: PLANIFICADO + +dependencias_core: + obligatorias: + - auth (MGN-001) + - users (MGN-002) + - roles (MGN-003) + - tenants (MGN-004) + opcionales: + - catalogs (MGN-005) + - financial (MGN-010) + - inventory (MGN-011) + - cfdi (MGN-016) + - calendar (MGN-020) + +consideraciones_especiales: + - Cumplimiento NOM-024-SSA3-2012 + - LFPDPPP - Protección datos personales de salud + - 2FA obligatorio para personal médico + - Encriptación de datos sensibles (antecedentes, alergias) + - Integración HL7/FHIR para interoperabilidad + - Firma electrónica de recetas + +referencias: + docs: docs/ + vision: docs/00-vision-general/VISION-CLINICAS.md + modulos: docs/02-definicion-modulos/INDICE-MODULOS.md + orchestration: orchestration/ + herencia_specs: orchestration/00-guidelines/HERENCIA-SPECS-CORE.md + herencia_db: database/HERENCIA-ERP-CORE.md diff --git a/orchestration/inventarios/README.md b/orchestration/inventarios/README.md new file mode 100644 index 0000000..8020d92 --- /dev/null +++ b/orchestration/inventarios/README.md @@ -0,0 +1,103 @@ +# Inventarios - ERP Clínicas + +**Version:** 1.0.0 +**Fecha:** 2025-12-08 +**Nivel SIMCO:** 2B.2 + +--- + +## Descripción + +Este directorio contiene los inventarios YAML que sirven como **Single Source of Truth (SSOT)** para el proyecto ERP Clínicas. Estos archivos son la referencia canónica para métricas, trazabilidad y componentes del sistema. + +--- + +## Archivos de Inventario + +| Archivo | Descripción | Estado | +|---------|-------------|--------| +| [MASTER_INVENTORY.yml](./MASTER_INVENTORY.yml) | Inventario maestro con métricas globales | Completo | +| [DATABASE_INVENTORY.yml](./DATABASE_INVENTORY.yml) | Inventario de objetos de base de datos | Planificado | +| [BACKEND_INVENTORY.yml](./BACKEND_INVENTORY.yml) | Inventario de componentes backend | Planificado | +| [FRONTEND_INVENTORY.yml](./FRONTEND_INVENTORY.yml) | Inventario de componentes frontend | Planificado | +| [TRACEABILITY_MATRIX.yml](./TRACEABILITY_MATRIX.yml) | Matriz de trazabilidad RF->ET->US | Completo | +| [DEPENDENCY_GRAPH.yml](./DEPENDENCY_GRAPH.yml) | Grafo de dependencias entre módulos | Completo | + +--- + +## Herencia del Core + +Este proyecto hereda del **ERP Core** (nivel 2B.1): + +| Aspecto | Heredado | Específico | +|---------|----------|------------| +| **Tablas DB** | ~100 | Planificado | +| **Schemas** | 8+ | Planificado | +| **Specs** | 3 | - | + +### Specs Heredadas + +1. SPEC-RRHH-EVALUACIONES-SKILLS.md +2. SPEC-INTEGRACION-CALENDAR.md +3. SPEC-MAIL-THREAD-TRACKING.md + +--- + +## Resumen Ejecutivo + +### Métricas del Proyecto + +| Métrica | Valor | +|---------|-------| +| **Módulos** | 5 (CL-001 a CL-005) | +| **Estado** | PLANIFICACION_COMPLETA | +| **Completitud** | 15% | + +### Dominio del Negocio + +- Expediente clínico electrónico +- Gestión de citas médicas +- Control de consultorios +- Facturación de servicios médicos + +--- + +## Directivas Específicas + +1. [DIRECTIVA-EXPEDIENTE-CLINICO.md](../directivas/DIRECTIVA-EXPEDIENTE-CLINICO.md) +2. [DIRECTIVA-GESTION-CITAS.md](../directivas/DIRECTIVA-GESTION-CITAS.md) + +--- + +## Configuración de Puertos (Planificado) + +| Servicio | Puerto | +|----------|--------| +| Backend API | 3500 | +| Frontend Web | 5179 | +| Patient Portal | 5180 | + +--- + +## Cumplimiento Normativo + +Este proyecto debe cumplir con: +- NOM-024-SSA3-2012 (Expediente clínico electrónico) +- Ley de Protección de Datos Personales en Posesión de Particulares + +--- + +## Alineación con ERP Core + +Estos inventarios siguen la misma estructura que: +- `/erp-core/orchestration/inventarios/` (proyecto padre) + +### Referencias + +- Suite Master: `orchestration/inventarios/SUITE_MASTER_INVENTORY.yml` +- Core: `apps/erp-core/orchestration/inventarios/` +- Status Global: `orchestration/inventarios/STATUS.yml` + +--- + +**Última actualización:** 2025-12-08 diff --git a/orchestration/inventarios/TRACEABILITY_MATRIX.yml b/orchestration/inventarios/TRACEABILITY_MATRIX.yml new file mode 100644 index 0000000..0d3af01 --- /dev/null +++ b/orchestration/inventarios/TRACEABILITY_MATRIX.yml @@ -0,0 +1,514 @@ +# ============================================================================= +# TRACEABILITY MATRIX - ERP Clínicas (Vertical) +# ============================================================================= +# Generado: 2025-12-08 +# Sistema: NEXUS + SIMCO v2.2.0 +# Propósito: Matriz de trazabilidad Módulos -> SPECS -> Componentes +# ============================================================================= + +metadata: + proyecto: ERP Clínicas + codigo: CL + version: 1.0.0 + fecha_actualizacion: 2025-12-08 + base_core: erp-core v0.6.0 + normativa: NOM-024-SSA3-2012, LFPDPPP + +# ============================================================================= +# RESUMEN GLOBAL +# ============================================================================= +resumen: + modulos_total: 12 + modulos_documentados: 12 + story_points_total: 395 + specs_core_aplicables: 22 + specs_implementadas: 0 + cobertura_specs: 0% + estado: PLANIFICACION_COMPLETA + +# ============================================================================= +# TRAZABILIDAD POR MÓDULO +# ============================================================================= +trazabilidad: + # --------------------------------------------------------------------------- + # CL-001: Fundamentos (90% herencia + 2FA obligatorio) + # --------------------------------------------------------------------------- + CL-001: + nombre: Fundamentos + herencia: 90% + prioridad: P0 + sp: 0 + extiende: + - MGN-001 (auth) + - MGN-002 (users) + - MGN-003 (roles) + - MGN-004 (tenants) + database: + heredadas: [auth.users, auth.sessions, auth.roles, tenants.tenants] + extensiones: + - auth.two_factor_configs + - auth.medical_certifications + backend: + heredados: [AuthService, UserService, RoleService, TenantService] + extensiones: + - TwoFactorService + - MedicalAuthService + frontend: + heredados: [LoginForm, UserProfile, RoleSelector] + extensiones: + - TwoFactorSetup + - TwoFactorVerify + specs_core: + - SPEC-SISTEMA-SECUENCIAS + - SPEC-SEGURIDAD-API-KEYS-PERMISOS + seguridad: + - 2FA_obligatorio_personal_medico + - encriptacion_datos_sensibles + + # --------------------------------------------------------------------------- + # CL-002: Pacientes + # --------------------------------------------------------------------------- + CL-002: + nombre: Pacientes + herencia: 40% + prioridad: P0 + sp: 34 + database: + tablas: + - clinical.patients + - clinical.patient_contacts + - clinical.patient_insurance + - clinical.patient_allergies + - clinical.emergency_contacts + backend: + servicios: + - PatientService + - PatientSearchService + - InsuranceService + frontend: + componentes: + - PatientList + - PatientForm + - PatientDetail + - PatientSearch + - InsuranceCard + - AllergyBadge + specs_core: + - SPEC-MAIL-THREAD-TRACKING (comunicación pacientes) + seguridad: + - datos_encriptados: [allergies, medical_history] + - consentimiento_requerido: true + + # --------------------------------------------------------------------------- + # CL-003: Citas + # --------------------------------------------------------------------------- + CL-003: + nombre: Citas + herencia: 30% + prioridad: P0 + sp: 42 + database: + tablas: + - clinical.appointments + - clinical.appointment_slots + - clinical.doctors + - clinical.specialties + - clinical.appointment_reminders + backend: + servicios: + - AppointmentService + - DoctorService + - ScheduleService + - ReminderService + frontend: + componentes: + - AppointmentCalendar + - AppointmentForm + - DoctorScheduleView + - SlotSelector + - ReminderConfig + - AppointmentConfirmation + specs_core: + - SPEC-INTEGRACION-CALENDAR (Google Calendar, Outlook) + + # --------------------------------------------------------------------------- + # CL-004: Consultas + # --------------------------------------------------------------------------- + CL-004: + nombre: Consultas + herencia: 0% + prioridad: P0 + sp: 47 + database: + tablas: + - clinical.consultations + - clinical.vital_signs + - clinical.diagnoses + - clinical.icd10_codes + - clinical.consultation_notes + backend: + servicios: + - ConsultationService + - VitalSignsService + - DiagnosisService + - ICD10Service + frontend: + componentes: + - ConsultationForm + - SOAPNote + - VitalSignsCapture + - DiagnosisSearch + - ICD10Selector + - ConsultationHistory + specs_core: [] + normativa: + - NOM-024-SSA3-2012 (estructura SOAP) + + # --------------------------------------------------------------------------- + # CL-005: Recetas + # --------------------------------------------------------------------------- + CL-005: + nombre: Recetas + herencia: 20% + prioridad: P0 + sp: 34 + database: + tablas: + - clinical.prescriptions + - clinical.prescription_items + - clinical.medications + - clinical.drug_interactions + backend: + servicios: + - PrescriptionService + - MedicationService + - InteractionChecker + - PrescriptionPrintService + frontend: + componentes: + - PrescriptionForm + - MedicationSearch + - DosageCalculator + - InteractionAlert + - PrescriptionPrint + specs_core: + - SPEC-WIZARD-TRANSIENT-MODEL (asistente receta) + caracteristicas: + - firma_electronica: true + - validacion_interacciones: true + + # --------------------------------------------------------------------------- + # CL-006: Laboratorio + # --------------------------------------------------------------------------- + CL-006: + nombre: Laboratorio + herencia: 10% + prioridad: P1 + sp: 42 + database: + tablas: + - laboratory.lab_orders + - laboratory.lab_tests + - laboratory.test_results + - laboratory.reference_ranges + - laboratory.test_panels + backend: + servicios: + - LabOrderService + - TestResultService + - ReferenceRangeService + frontend: + componentes: + - LabOrderForm + - TestSelector + - ResultsCapture + - ResultsViewer + - AbnormalHighlight + - TrendChart + specs_core: + - SPEC-TRAZABILIDAD-LOTES-SERIES (muestras) + + # --------------------------------------------------------------------------- + # CL-007: Farmacia + # --------------------------------------------------------------------------- + CL-007: + nombre: Farmacia + herencia: 60% + prioridad: P1 + sp: 34 + database: + tablas: + - pharmacy.pharmacy_stock + - pharmacy.medication_lots + - pharmacy.dispensations + - pharmacy.controlled_substances + backend: + servicios: + - PharmacyStockService + - DispensationService + - ControlledSubstanceService + frontend: + componentes: + - PharmacyStock + - DispensationForm + - LotSelector + - ExpirationAlert + - ControlledLog + specs_core: + - SPEC-VALORACION-INVENTARIO + - SPEC-TRAZABILIDAD-LOTES-SERIES + - SPEC-INVENTARIOS-CICLICOS + caracteristicas: + - control_caducidades: true + - sustancias_controladas: true + + # --------------------------------------------------------------------------- + # CL-008: Facturación + # --------------------------------------------------------------------------- + CL-008: + nombre: Facturacion + herencia: 70% + prioridad: P0 + sp: 21 + database: + tablas: + - invoicing.medical_invoices + - invoicing.insurance_claims + - invoicing.service_charges + backend: + servicios: + - MedicalInvoiceService + - InsuranceClaimService + - CFDIService + frontend: + componentes: + - MedicalInvoiceForm + - InvoiceList + - InsuranceClaimForm + - PaymentCapture + specs_core: + - SPEC-FACTURACION-CFDI (servicios médicos) + + # --------------------------------------------------------------------------- + # CL-009: Reportes + # --------------------------------------------------------------------------- + CL-009: + nombre: Reportes + herencia: 40% + prioridad: P1 + sp: 34 + database: + tablas: [] + backend: + servicios: + - MedicalReportService + - StatisticsService + - ExportService + frontend: + componentes: + - AppointmentReport + - RevenueReport + - PatientStatistics + - DoctorProductivity + - DiagnosisDistribution + specs_core: [] + + # --------------------------------------------------------------------------- + # CL-010: Telemedicina + # --------------------------------------------------------------------------- + CL-010: + nombre: Telemedicina + herencia: 0% + prioridad: P2 + sp: 47 + database: + tablas: + - telemedicine.video_sessions + - telemedicine.session_recordings + - telemedicine.waiting_room + backend: + servicios: + - VideoSessionService + - WaitingRoomService + - RecordingService + frontend: + componentes: + - VideoConsultation + - WaitingRoom + - VirtualExamRoom + - ScreenShare + - ChatPanel + specs_core: [] + caracteristicas: + - encriptacion_e2e: true + - grabacion_opcional: true + + # --------------------------------------------------------------------------- + # CL-011: Expediente Clínico + # --------------------------------------------------------------------------- + CL-011: + nombre: Expediente + herencia: 10% + prioridad: P0 + sp: 39 + database: + tablas: + - clinical.medical_records + - clinical.clinical_notes + - clinical.attachments + - clinical.consent_forms + - clinical.record_access_log + backend: + servicios: + - MedicalRecordService + - ClinicalNoteService + - AttachmentService + - ConsentService + - AuditService + frontend: + componentes: + - MedicalRecordView + - TimelineView + - NoteEditor + - AttachmentViewer + - ConsentCapture + - AccessLog + specs_core: + - SPEC-MAIL-THREAD-TRACKING (notas clínicas) + normativa: + - NOM-024-SSA3-2012 (estructura expediente) + seguridad: + - encriptacion_completa: true + - auditoria_accesos: true + + # --------------------------------------------------------------------------- + # CL-012: Imagenología + # --------------------------------------------------------------------------- + CL-012: + nombre: Imagenologia + herencia: 0% + prioridad: P2 + sp: 21 + database: + tablas: + - imaging.imaging_studies + - imaging.dicom_metadata + - imaging.study_reports + backend: + servicios: + - ImagingStudyService + - DICOMService + - ReportService + frontend: + componentes: + - DICOMViewer + - StudyList + - ReportEditor + - ImageAnnotation + specs_core: [] + caracteristicas: + - dicom_viewer: true + - integracion_pacs: true + +# ============================================================================= +# REFERENCIAS CRUZADAS CON ERP-CORE +# ============================================================================= +referencias_core: + specs_implementadas: [] + + specs_pendientes: + - spec: SPEC-SISTEMA-SECUENCIAS + modulos: [CL-001, CL-003, CL-004] + prioridad: P0 + estado: PENDIENTE + + - spec: SPEC-SEGURIDAD-API-KEYS-PERMISOS + modulos: [CL-001] + prioridad: P0 + estado: PENDIENTE + adaptacion: "Permisos por especialidad médica" + + - spec: SPEC-INTEGRACION-CALENDAR + modulos: [CL-003] + prioridad: P0 + estado: PENDIENTE + adaptacion: "Sincronización agenda médica" + + - spec: SPEC-TRAZABILIDAD-LOTES-SERIES + modulos: [CL-006, CL-007] + prioridad: P1 + estado: PENDIENTE + adaptacion: "Trazabilidad muestras y medicamentos" + + - spec: SPEC-MAIL-THREAD-TRACKING + modulos: [CL-002, CL-011] + prioridad: P1 + estado: PENDIENTE + adaptacion: "Comunicación segura pacientes" + + modulos_extendidos: + - core: MGN-001 (auth) + vertical: CL-001 + tipo: extension_2fa_obligatorio + + - core: MGN-011 (inventory) + vertical: CL-007 + tipo: extension_farmacia + + - core: MGN-016 (cfdi) + vertical: CL-008 + tipo: extension_servicios_medicos + +# ============================================================================= +# CUMPLIMIENTO NORMATIVO +# ============================================================================= +cumplimiento_normativo: + NOM-024-SSA3-2012: + descripcion: "Expediente clínico electrónico" + modulos_afectados: [CL-004, CL-011] + requisitos: + - estructura_soap: CL-004 + - historia_clinica: CL-011 + - consentimiento_informado: CL-011 + - firma_electronica: CL-005 + + LFPDPPP: + descripcion: "Protección de datos personales" + modulos_afectados: [CL-002, CL-011] + requisitos: + - encriptacion_datos_sensibles: true + - consentimiento_tratamiento: true + - derecho_acceso: true + - auditoria_accesos: true + +# ============================================================================= +# VALIDACIONES +# ============================================================================= +validaciones: + modulos_huerfanos: 0 + specs_sin_modulo: 0 + + alertas: + - tipo: implementacion_pendiente + mensaje: "0% de código implementado - fase planificación" + + - tipo: seguridad_critica + modulo: CL-001 + mensaje: "2FA obligatorio para personal médico" + + - tipo: normativa + modulos: [CL-004, CL-011] + mensaje: "Requiere validación NOM-024-SSA3-2012" + + - tipo: encriptacion + modulos: [CL-002, CL-011] + mensaje: "Datos sensibles requieren encriptación" + +# ============================================================================= +# METADATA +# ============================================================================= +metadata_documento: + creado_por: Claude-Code + fecha_creacion: 2025-12-08 + ultima_actualizacion: 2025-12-08 + version_documento: 1.0.0 diff --git a/orchestration/prompts/PROMPT-CL-BACKEND-AGENT.md b/orchestration/prompts/PROMPT-CL-BACKEND-AGENT.md new file mode 100644 index 0000000..d791cd1 --- /dev/null +++ b/orchestration/prompts/PROMPT-CL-BACKEND-AGENT.md @@ -0,0 +1,182 @@ +# Prompt: Clínicas Backend Agent + +## Identidad + +Eres un agente especializado en desarrollo backend para ERP Clínicas. Tu expertise está en Node.js, Express, TypeScript, TypeORM y PostgreSQL, con conocimiento específico del dominio de salud y cumplimiento normativo mexicano (NOM-024-SSA3-2012, LFPDPPP). + +## Contexto del Proyecto + +```yaml +proyecto: ERP Clínicas +codigo: CL +tipo: Vertical de ERP-Suite +nivel: 2B.2 +stack: + runtime: Node.js 20+ + framework: Express.js + lenguaje: TypeScript 5.3+ + orm: TypeORM 0.3.17 + database: PostgreSQL 15+ + auth: JWT + bcryptjs + 2FA (heredado + extendido) + encriptacion: AES-256 para datos sensibles + +paths: + vertical: /home/isem/workspace/projects/erp-suite/apps/verticales/clinicas/ + backend: /home/isem/workspace/projects/erp-suite/apps/verticales/clinicas/backend/ + docs: /home/isem/workspace/projects/erp-suite/apps/verticales/clinicas/docs/ + core: /home/isem/workspace/projects/erp-suite/apps/erp-core/ + directivas: orchestration/directivas/ + +puertos: + backend: 3500 + frontend: 5178 + database: 5437 +``` + +## Herencia del Core + +Este proyecto HEREDA del ERP-Core: +- Módulos: auth (+ 2FA), users, roles, tenants, inventory, cfdi +- SPECS: Ver `orchestration/00-guidelines/HERENCIA-SPECS-CORE.md` +- Base de datos: 97 tablas heredadas + +**REGLA:** Extender, NUNCA modificar el core. + +## Módulos de la Vertical + +| Módulo | Descripción | Prioridad | Normativa | +|--------|-------------|-----------|-----------| +| CL-001 | Fundamentos (+ 2FA) | P0 | LFPDPPP | +| CL-002 | Pacientes | P0 | LFPDPPP | +| CL-003 | Citas | P0 | - | +| CL-004 | Consultas (SOAP) | P0 | NOM-024 | +| CL-005 | Recetas | P0 | NOM-024 | +| CL-006 | Laboratorio | P1 | - | +| CL-007 | Farmacia | P1 | - | +| CL-008 | Facturación CFDI | P0 | - | +| CL-009 | Reportes | P1 | - | +| CL-010 | Telemedicina | P2 | - | +| CL-011 | Expediente NOM-024 | P0 | NOM-024 | +| CL-012 | Imagenología DICOM | P2 | - | + +## Directivas Obligatorias + +### 1. Multi-Tenant (Heredada) +``` +OBLIGATORIO: Toda operación debe filtrar por tenant_id. +Ver: core/orchestration/directivas/DIRECTIVA-MULTI-TENANT.md +``` + +### 2. Expediente Clínico +``` +ESPECÍFICO: Cumplimiento NOM-024-SSA3-2012. +Ver: directivas/DIRECTIVA-EXPEDIENTE-CLINICO.md +``` + +### 3. Gestión de Citas +``` +ESPECÍFICO: Agenda médica, recordatorios. +Ver: directivas/DIRECTIVA-GESTION-CITAS.md +``` + +## Cumplimiento Normativo + +### NOM-024-SSA3-2012 (Expediente Clínico) +```yaml +requisitos: + - estructura_soap: Subjetivo, Objetivo, Análisis, Plan + - campos_obligatorios: + - identificacion_paciente + - fecha_consulta + - motivo_consulta + - exploracion_fisica + - diagnostico_cie10 + - plan_tratamiento + - firma_electronica: En recetas + - consentimiento_informado: Documentado +``` + +### LFPDPPP (Protección de Datos) +```yaml +requisitos: + - encriptacion: AES-256 para datos sensibles + - campos_encriptados: + - antecedentes_medicos + - alergias + - diagnosticos + - notas_clinicas + - auditoria: Log de accesos a expedientes + - consentimiento: Tratamiento de datos +``` + +## Schemas de Base de Datos + +```yaml +schemas_especificos: + - clinical: Pacientes, citas, consultas, expediente + - pharmacy: Stock medicamentos, dispensaciones + - laboratory: Órdenes lab, resultados + - imaging: Estudios DICOM, metadatos + - telemedicine: Sesiones video, grabaciones +``` + +## SPECS del Core Aplicables + +- SPEC-INTEGRACION-CALENDAR (agenda médica) +- SPEC-MAIL-THREAD-TRACKING (comunicación pacientes) +- SPEC-TRAZABILIDAD-LOTES-SERIES (muestras, medicamentos) +- SPEC-FACTURACION-CFDI (servicios médicos) +- SPEC-TWO-FACTOR-AUTHENTICATION (2FA obligatorio) +- SPEC-RRHH-EVALUACIONES-SKILLS (certificaciones médicas) + +## Seguridad Especial + +### 2FA Obligatorio +```typescript +// Personal médico REQUIERE 2FA +// Implementar en extensión de auth +@UseGuards(TwoFactorGuard) +export class MedicalController { } +``` + +### Encriptación de Datos Sensibles +```typescript +// Usar decorador para campos sensibles +@EncryptedColumn() +antecedentes_medicos: string; + +@EncryptedColumn() +alergias: string; +``` + +### Auditoría de Accesos +```typescript +// Log automático de accesos a expediente +@AuditAccess('medical_record') +async getMedicalRecord(patientId: string) { } +``` + +## Flujo de Trabajo + +``` +1. Leer especificación del módulo en docs/02-definicion-modulos/ +2. Verificar cumplimiento normativo (NOM-024, LFPDPPP) +3. Verificar SPECS aplicables en HERENCIA-SPECS-CORE.md +4. Revisar DDL existente en database/ +5. Implementar con encriptación y auditoría +6. Actualizar TRAZA-TAREAS-BACKEND.md +7. Actualizar BACKEND_INVENTORY.yml +``` + +## Referencias + +- Inventario: `orchestration/inventarios/MASTER_INVENTORY.yml` +- Trazabilidad: `orchestration/inventarios/TRACEABILITY_MATRIX.yml` +- Herencia: `orchestration/00-guidelines/HERENCIA-SPECS-CORE.md` +- NOM-024: Normativa expediente clínico electrónico +- LFPDPPP: Ley Federal de Protección de Datos Personales + +--- + +**Versión:** 1.0.0 +**Sistema:** SIMCO v2.2.0 diff --git a/orchestration/referencias/DEPENDENCIAS-ERP-CORE.yml b/orchestration/referencias/DEPENDENCIAS-ERP-CORE.yml new file mode 100644 index 0000000..b263b42 --- /dev/null +++ b/orchestration/referencias/DEPENDENCIAS-ERP-CORE.yml @@ -0,0 +1,97 @@ +# Dependencias de ERP-Core para ERP Clinicas +# ============================================ + +version: "1.0.0" +fecha_actualizacion: "2025-12-27" +proyecto: "erp-clinicas" + +# Base de la que hereda +base: + proyecto: "erp-core" + version_minima: "1.2.0" + ruta: "projects/erp-core" + ruta_absoluta: "/home/isem/workspace-v1/projects/erp-core" + +# Schemas de base de datos heredados +database: + herencia: "completa" + + schemas_usados: + - nombre: "auth_management" + tablas_heredadas: 26 + tablas_extendidas: 2 + uso: "Autenticacion con seguridad reforzada para datos medicos" + extensiones: + - "MFA obligatorio para acceso expedientes" + - "Consentimiento informado digital" + + - nombre: "core_management" + tablas_heredadas: 12 + tablas_extendidas: 3 + uso: "Partners (pacientes, proveedores medicos)" + extensiones: + - "Datos sensibles encriptados" + - "Historial medico referenciado" + + - nombre: "core_catalogs" + tablas_heredadas: 8 + tablas_extendidas: 5 + uso: "Catalogos medicos especializados" + extensiones: + - "CIE-10 (diagnosticos)" + - "Procedimientos medicos" + - "Medicamentos (cuadro basico)" + - "Laboratorios" + - "Especialidades medicas" + +# Schemas propios de clinicas (no heredados) +schemas_propios: + - nombre: "medical_management" + tablas: 15 + descripcion: "Expedientes, citas, recetas, laboratorio" + + - nombre: "billing_medical" + tablas: 8 + descripcion: "Facturacion CFDI sector salud, aseguradoras" + +# Variable RLS obligatoria +rls: + variable: "app.current_tenant_id" + tipo: "UUID" + nota: "TODAS las queries deben filtrar por esta variable" + +# Modulos backend importados +backend: + modulos_importados: + - nombre: "AuthModule" + desde: "@erp-core/auth" + version: "1.0.0" + + - nombre: "UsersModule" + desde: "@erp-core/users" + version: "1.0.0" + + - nombre: "RolesModule" + desde: "@erp-core/roles" + version: "1.0.0" + + - nombre: "TenantsModule" + desde: "@erp-core/tenants" + version: "1.0.0" + +# Cumplimiento normativo +normativas: + - codigo: "NOM-024-SSA3-2012" + descripcion: "Expediente clinico electronico" + - codigo: "LFPDPPP" + descripcion: "Ley de Proteccion de Datos Personales" + - codigo: "COFEPRIS" + descripcion: "Requisitos de trazabilidad" + +# Validaciones requeridas +validaciones: + - "Variable RLS correcta en todo DDL" + - "Encriptacion de datos medicos" + - "Auditoria completa de accesos" + - "Imports de erp-core funcionando" + - "Tests pasando" diff --git a/orchestration/referencias/DEPENDENCIAS-SHARED.yml b/orchestration/referencias/DEPENDENCIAS-SHARED.yml new file mode 100644 index 0000000..9bdbe9c --- /dev/null +++ b/orchestration/referencias/DEPENDENCIAS-SHARED.yml @@ -0,0 +1,62 @@ +# Dependencias de Modulos Compartidos para ERP Clinicas +# ====================================================== + +version: "1.0.0" +fecha_actualizacion: "2025-12-27" +proyecto: "erp-clinicas" + +# Modulos del catalogo usados +modulos_catalogo: + - id: "auth" + ruta: "core/catalog/auth" + version_usada: "1.0.0" + fecha_implementacion: "pendiente" + adaptaciones: + - descripcion: "MFA obligatorio para acceso expedientes" + archivo: "Por implementar" + tests_pasando: false + + - id: "multi-tenancy" + ruta: "core/catalog/multi-tenancy" + version_usada: "1.0.0" + fecha_implementacion: "pendiente" + adaptaciones: null + tests_pasando: false + + - id: "notifications" + ruta: "core/catalog/notifications" + version_usada: "1.0.0" + fecha_implementacion: "pendiente" + adaptaciones: + - descripcion: "Recordatorios de citas" + archivo: "Por implementar" + - descripcion: "Notificaciones de resultados laboratorio" + archivo: "Por implementar" + tests_pasando: false + + - id: "rate-limiting" + ruta: "core/catalog/rate-limiting" + version_usada: "1.0.0" + fecha_implementacion: "pendiente" + adaptaciones: null + tests_pasando: false + +# Modulos de core/modules usados +modulos_core: [] + +# Librerias de shared/libs usadas +librerias_shared: [] + +# Modulos pendientes de implementar +pendientes: + - id: "audit-logs" + prioridad: "alta" + justificacion: "Auditoria completa de acceso a expedientes medicos (COFEPRIS)" + + - id: "two-factor-auth" + prioridad: "alta" + justificacion: "Seguridad reforzada para datos sensibles" + + - id: "encryption" + prioridad: "alta" + justificacion: "Encriptacion de datos medicos en reposo" diff --git a/orchestration/trazas/TRAZA-TAREAS-BACKEND.md b/orchestration/trazas/TRAZA-TAREAS-BACKEND.md new file mode 100644 index 0000000..ebc83f9 --- /dev/null +++ b/orchestration/trazas/TRAZA-TAREAS-BACKEND.md @@ -0,0 +1,38 @@ +# TRAZA DE TAREAS - BACKEND LAYER +# Proyecto: ERP CLINICAS (Vertical) +# Sistema: NEXUS + SIMCO v2.2.0 +# Estado: TEMPLATE - Proyecto en planificación + +--- + +## Formato de Registro + +```yaml +[FECHA] - [ID_TAREA] - [OPERACION] +Descripcion: {descripcion} +Archivos: + - {archivo_1} +Estado: {COMPLETADO | EN_PROGRESO | BLOQUEADO} +Ejecutado_por: {AGENTE | USUARIO} +``` + +--- + +## Historial de Tareas + +*Sin tareas registradas - Proyecto en planificación* + +--- + +## Resumen + +| Métrica | Valor | +|---------|-------| +| Total tareas | 0 | +| Completadas | 0 | +| En progreso | 0 | +| Bloqueadas | 0 | +| Última actualización | 2025-12-08 | + +--- +*Traza de tareas - Sistema NEXUS* diff --git a/orchestration/trazas/TRAZA-TAREAS-DATABASE.md b/orchestration/trazas/TRAZA-TAREAS-DATABASE.md new file mode 100644 index 0000000..4048a7b --- /dev/null +++ b/orchestration/trazas/TRAZA-TAREAS-DATABASE.md @@ -0,0 +1,38 @@ +# TRAZA DE TAREAS - DATABASE LAYER +# Proyecto: ERP CLINICAS (Vertical) +# Sistema: NEXUS + SIMCO v2.2.0 +# Estado: TEMPLATE - Proyecto en planificación + +--- + +## Formato de Registro + +```yaml +[FECHA] - [ID_TAREA] - [OPERACION] +Descripcion: {descripcion} +Archivos: + - {archivo_1} +Estado: {COMPLETADO | EN_PROGRESO | BLOQUEADO} +Ejecutado_por: {AGENTE | USUARIO} +``` + +--- + +## Historial de Tareas + +*Sin tareas registradas - Proyecto en planificación* + +--- + +## Resumen + +| Métrica | Valor | +|---------|-------| +| Total tareas | 0 | +| Completadas | 0 | +| En progreso | 0 | +| Bloqueadas | 0 | +| Última actualización | 2025-12-08 | + +--- +*Traza de tareas - Sistema NEXUS* diff --git a/orchestration/trazas/TRAZA-TAREAS-FRONTEND.md b/orchestration/trazas/TRAZA-TAREAS-FRONTEND.md new file mode 100644 index 0000000..92c2683 --- /dev/null +++ b/orchestration/trazas/TRAZA-TAREAS-FRONTEND.md @@ -0,0 +1,38 @@ +# TRAZA DE TAREAS - FRONTEND LAYER +# Proyecto: ERP CLINICAS (Vertical) +# Sistema: NEXUS + SIMCO v2.2.0 +# Estado: TEMPLATE - Proyecto en planificación + +--- + +## Formato de Registro + +```yaml +[FECHA] - [ID_TAREA] - [OPERACION] +Descripcion: {descripcion} +Archivos: + - {archivo_1} +Estado: {COMPLETADO | EN_PROGRESO | BLOQUEADO} +Ejecutado_por: {AGENTE | USUARIO} +``` + +--- + +## Historial de Tareas + +*Sin tareas registradas - Proyecto en planificación* + +--- + +## Resumen + +| Métrica | Valor | +|---------|-------| +| Total tareas | 0 | +| Completadas | 0 | +| En progreso | 0 | +| Bloqueadas | 0 | +| Última actualización | 2025-12-08 | + +--- +*Traza de tareas - Sistema NEXUS*