Prerequisitos
Prerequisitos
Section titled “Prerequisitos”Antes de desplegar MedSync en un ambiente production-like, infraestructura debe cerrar estos requisitos. Si falta alguno, el ambiente puede servir para pruebas, pero no debe tratarse como release candidate ni como produccion.
Piensa esta pagina como una puerta de entrada:
- Si todo esta completo, puedes pasar a rollout controlado.
- Si algo falta, primero se corrige o se documenta como bloqueo.
- Si una prueba requiere credenciales, SMTP real o acceso infra, no se inventa: se pide al responsable humano.
Resumen de avance
Section titled “Resumen de avance”| Area | Estado esperado antes de la validacion production-like |
|---|---|
| Dominios | https://app.<dominio> y https://api.<dominio> definidos. |
| TLS | Certificados validos y HTTP redirigido a HTTPS. |
| Secrets | Secret manager o mecanismo seguro equivalente. |
| Backend | Env production-like de autenticacion por cookies listo. |
| Frontend | Build con flags de cookies listo. |
| DB | Backup previo y usuario de minimo privilegio. |
| SMTP | Sandbox o mecanismo humano autorizado para reset password. |
| Observabilidad | Logs y alertas minimas para auth/CORS/CSRF/DB/SMTP. |
| Rollback | Plan para expirar cookies, revocar sesiones y volver atras sin debilitar seguridad. |
Requisitos de runtime
Section titled “Requisitos de runtime”| Area | Requisito | Evidencia en repo |
|---|---|---|
| Backend | Node.js compatible con el proyecto. package.json declara 12.16.2, pero validar version soportada por seguridad antes de produccion. | hemia-assistance-back-legacy/package.json |
| Backend deps | npm install o npm ci segun politica de release. | package-lock.json existe. |
| Frontend | Vue CLI con NODE_OPTIONS=--openssl-legacy-provider en scripts Windows. | hemia-assistance-front-legacy/package.json |
| Docs | Astro + Starlight. | medsync-docs/package.json |
| DB | MySQL accesible desde backend. | src/db/Sequelize.connection.js usa dialect mysql. |
| SMTP | Proveedor SMTP real o sandbox productivo. | src/services/email/providers/nodemailer.provider.js |
| Reverse proxy | Proxy/LB con TLS, headers forward y limites. | No hay config real en repo. |
| Observabilidad | Logs centralizados y alertas. | No hay stack real definido. |
| Backups | Backups cifrados y restore probado. | No hay sistema real definido. |
Requisitos de seguridad
Section titled “Requisitos de seguridad”- Dominio final de frontend:
https://app.<dominio>. - Dominio final de API:
https://api.<dominio>. - Decision same-site vs cross-site.
- Certificados TLS emitidos y renovacion automatizada.
- Secret manager o mecanismo equivalente para secretos.
- Usuario DB con privilegios minimos.
- Credenciales SMTP rotables y no compartidas.
- CORS allowlist exacta por ambiente.
- CSRF habilitado y probado.
- Cookies de autenticacion con
Secure,HttpOnlydonde corresponde,SameSitedefinido yPath=/. REQUIRE_ACTIVE_SESSION=trueen production-like.- No secretos default.
- No valores reales en documentacion, tickets ni logs.
Validaciones obligatorias de auth
Section titled “Validaciones obligatorias de auth”El estado actual autoriza preparar una validacion production-like o release candidate, pero no declarar production-ready. Antes de produccion:
| Validacion | Estado al preparar este manual | Accion requerida |
|---|---|---|
| Refresh cookie-only | Cubierto localmente. | Repetir smoke production-like con cookies Secure=true. |
| Browser real | Cubierto localmente con Playwright Chromium. | Repetir con Browser/Playwright/DevTools en production-like HTTPS/domain. |
| Reset password invalidation | Pendiente end-to-end con OTP/SMTP. | Usar SMTP sandbox o intervencion humana autorizada. |
| Tenant restricted | Decision CTO/Product aprobada: hard-block en login para tenant restricted/suspended/inactive y usuario inactivo/bloqueado. | Validar que no emite sesion, access cookie, refresh cookie ni datos clinicos; /tenant-restricted queda para sesiones existentes con tenantOperational.allowed=false. |
No marcar production-ready si cualquiera de estas validaciones queda pendiente.
Decision tenant restricted
Section titled “Decision tenant restricted”Para el MVP/productivo inicial, no existe login limitado para tenant restricted. El comportamiento esperado es:
- Tenant restricted/suspended/inactive en login: hard-block.
- Usuario inactivo/bloqueado en login: hard-block.
- Sin sesion.
- Sin access cookie.
- Sin refresh cookie.
- Sin datos clinicos.
- Error generico de login.
La pantalla /tenant-restricted sigue siendo valida para sesiones ya existentes que detecten tenantOperational.allowed=false. El backlog futuro es Limited restricted tenant session for billing/self-service UX; no debe implementarse como parte del rollout inicial.
Accesos humanos requeridos
Section titled “Accesos humanos requeridos”| Acceso | Para que se usa | Regla de seguridad |
|---|---|---|
| Infra/cloud | DNS, TLS, proxy, servidores, red y storage. | MFA y principio de minimo privilegio. |
| DB admin | Crear usuario/app schema, backups, restore y migraciones SQL. | No usar cuenta root de DB para la app. |
| SMTP admin | Crear credenciales y validar envio. | Usar sandbox para QA; rotar si se expone. |
| Secret manager | Crear/rotar secretos. | Nunca copiar secretos a docs ni chats. |
| Super Admin QA | Cierre de sesiones y pruebas operativas. | Usar usuario QA ficticio, no cuenta humana real. |
Quien debe confirmar que
Section titled “Quien debe confirmar que”| Responsable | Confirma |
|---|---|
| Infra | DNS, TLS, proxy, headers, secrets, logs y rollback. |
| Backend | Env de cookies auth, CSRF, CORS, session, refresh, reset password y Super Admin close. |
| Frontend | Build con cookies, withCredentials, sin Authorization, cleanup 401/logout y browser QA. |
| DBA/owner DB | Backup, restore, migraciones y usuario de minimo privilegio. |
| QA/Product | Login, tenant hard-block, usuario inactivo, flujo clinico minimo y evidencia sin datos reales. |
Archivos a revisar antes de cada release
Section titled “Archivos a revisar antes de cada release”| Repo | Archivo o carpeta | Motivo |
|---|---|---|
| Backend | .env.example, .env.local | Usar solo como fuente de nombres de variables; no copiar valores. |
| Backend | package.json | Scripts reales: dev, dev:d2, dev:legacy, start. |
| Backend | src/config/security.js | Startup validation de auth, CORS, CSRF y secretos. |
| Backend | src/config/authCookie.config.js | Nombres y flags de cookies auth. |
| Backend | src/routes/mysql/auth.js | Endpoints auth y middleware CSRF. |
| Backend | src/middleware/corsCredentialed.middleware.js | CORS credentialed allowlist. |
| Backend | Scripts_ | SQL manual existente; no hay migracion automatica por package script. |
| Frontend | .env.local, .env.production, .env.staging | Variables de build; contienen valores que no deben copiarse sin revision. |
| Frontend | package.json | Scripts reales: serve, serve:d2, serve:legacy, serve:lan, build, build-stage, lint. |
| Frontend | src/services/config/authTransport.config.js | Flags de autenticacion por cookies. |
| Frontend | src/services/config/axios.helper.js | withCredentials, CSRF y ausencia de Authorization en navegador. |
| Docs | package.json, astro.config.mjs | Build docs y sidebar Starlight. |
No hacer
Section titled “No hacer”- No editar
.env.productiondel frontend con datos no aprobados. - No subir
.envcon secretos al repositorio. - No levantar backend con
NODE_ENV=productionsi falta un secreto fuerte. - No configurar
CORS_ALLOWED_ORIGINS=*conCORS_CREDENTIALS=true. - No servir API production-like por HTTP.
- No usar fixtures QA contra datos reales.
- No ejecutar scripts QA con flags de escritura contra produccion.