Aldo V

Todos los proyectos

Rol
Producto, frontend y backend
Años
2025–
Stack
React · TypeScript · Go · PostgreSQL · Redis · AWS
Código
Privado

Clineo

Software de expediente clínico para consultorios en México. La meta es que el médico termine un expediente correcto y conforme a la norma durante la consulta, sin que el software le estorbe.

Vista de cumplimiento de Clineo: 76 % global de NOM-004 con una barra por requisito, como notas firmadas y cobertura de consentimientos.Vista de cumplimiento de Clineo: 76 % global de NOM-004 con una barra por requisito, como notas firmadas y cobertura de consentimientos.

El problema

En México el expediente clínico está regulado. La NOM-004 dice qué debe contener, que una nota firmada ya no puede cambiar y que el expediente se conserva al menos cinco años. La NOM-024 pone reglas a los sistemas que lo guardan: identidad, acceso, trazabilidad, seguridad.

La mayoría de las herramientas lo tratan como papeleo para después. Clineo lo mete en el flujo de trabajo: el médico ve lo que la norma todavía pide mientras escribe, y las reglas que nunca deben romperse las aplica el sistema, no la buena voluntad.

Qué hace

Pacientes, agenda con reservas públicas, notas clínicas estructuradas con plantillas, signos vitales, consentimientos, documentos y archivos. Médicos, enfermería y asistentes tienen cada uno la navegación y el acceso que su rol necesita. Un panel de administración cubre cumplimiento y bitácora de auditoría.

Redacción de una nota clínica SOAP en Clineo, con un panel lateral que lista los campos de la NOM-004 que faltan.Redacción de una nota clínica SOAP en Clineo, con un panel lateral que lista los campos de la NOM-004 que faltan.
Pantallas con datos de prueba; los pacientes y la médica son ficticios.

Decisiones

  1. Cumplimiento medido mientras se escribe

    Cada nota muestra su completitud según la NOM-004 y los campos que faltan, sección por sección. El mismo cálculo se agrega por paciente y por médico en las vistas de cumplimiento.

  2. Una nota firmada es definitiva

    Cada médico tiene un par de llaves Ed25519; la semilla privada se guarda envuelta por KMS. La firma cubre el SHA-256 de una forma canónica de la nota, se hace con passkey, y un trigger de la base de datos rechaza cualquier cambio a una nota firmada.

  3. Cifrado por paciente

    Los datos personales y clínicos se cifran en la aplicación con AES-256-GCM, con una llave por paciente generada y envuelta por KMS. Las llaves en caché nunca quedan en claro en Redis.

  4. Reglas que aplica la base de datos

    Lo que no debe cambiar se protege con permisos de Postgres: la bitácora de auditoría solo acepta inserciones, en las tablas clínicas no se puede borrar (solo borrado lógico) y las llaves de firma se escriben una sola vez.

  5. El administrador nunca ve pacientes

    Los administradores no tienen acceso a pacientes y el módulo de administración no puede descifrar. Cuando tiene que referirse a un paciente, solo recibe un identificador opaco.

  6. Una superficie pública aislada

    Las rutas anónimas, como las reservas públicas, corren en un binario aparte. Una prueba falla si enlaza código clínico, y su rol de base de datos solo puede leer columnas concretas e insertar solicitudes que no puede volver a leer.

  7. Una instancia por clínica

    Cada clínica tiene su propia base de datos, caché, pool de identidad, llave de cifrado y bucket. Nada se comparte, así que no hay columna de tenencia que pueda fallar.

  8. La IA solo extrae

    La IA ayuda a estructurar y resumir lo que el médico escribió o dictó. Nunca diagnostica ni agrega información, y nada generado entra al expediente sin la firma del médico.

Cómo está hecho

El backend es un monolito modular en Go: un proceso sirve la API autenticada, cada módulo conserva su router y sus fronteras, y la superficie pública corre aparte. Cada decisión de arquitectura queda escrita; van 25 registros de decisión.

Frontend y backend se ponen de acuerdo con contratos escritos: el frontend nunca inventa un endpoint, y un script revisa que cada endpoint de un contrato exista en las rutas del backend. Snapshots de rutas, pruebas de integración contra un AWS local y pruebas end-to-end con Playwright cubren cada cambio.