MedTime - Integraciones
Identificador: MTS-INT-001
Version: 1.6.1
Fecha: 2025-12-05
Ultima Revision: Iteracion 13 - Referencias a investigaciones de cifrado
Autor: SpecQueen
1. Introducción
Este documento describe las integraciones externas del sistema MedTime con servicios de terceros y APIs.
2. Mapa de Integraciones
flowchart TB
MT[MedTime App]
MT --> AUTH[Firebase Auth - Social Login]
MT --> PUSH[Push Notif]
MT --> OCR[OCR/IA Servidor]
MT --> DRUG[Drug DB Propia]
MT --> LOCAL[Almacenamiento Local]
MT --> CLOUD[Cloud Sync Opcional]
MT --> FHIR[FHIR futuro]
Arquitectura V1.0: MedTime V1.0 NO tiene backend propio. Toda la autenticacion se delega a Firebase Auth con proveedores sociales (Google/Apple). Los datos se almacenan 100% local con sincronizacion cloud opcional para Pro/Perfect.
Nota: Esta especificación funcional no define proveedores específicos.
Las decisiones de implementación serán tomadas por el equipo de desarrollo.
3. Integraciones de Autenticación
3.1. Sistema de Autenticación (Firebase Auth)
OBS-IT13-046: V1.0 NO tiene backend propio. Solo Firebase Auth con proveedores sociales.
| Aspecto |
Especificación |
| Propósito |
Gestión de identidad y autenticación |
| Tipo |
Firebase Authentication (sin backend propio) |
| Proveedores V1.0 |
Google Sign-In, Apple Sign-In |
| Protocolo |
OAuth 2.0 / OpenID Connect (gestionado por Firebase) |
| Flujos soportados |
Authorization Code + PKCE (automatico Firebase SDK) |
| Backend |
NO requerido - Firebase gestiona tokens y sesiones |
3.1.1. Funcionalidades Requeridas (V1.0)
OBS-IT13-047: V1.0 solo soporta autenticacion social (Google/Apple). Email/password NO esta disponible en V1.0.
| Funcionalidad |
Uso en MedTime |
Disponibilidad V1.0 |
| Google Sign-In |
Autenticacion via cuenta Google |
Pro/Perfect |
| Apple Sign-In |
Autenticacion via Apple ID |
Pro/Perfect |
| Cuenta local (sin servidor) |
Uso offline sin autenticacion cloud |
Free |
| ~~Email/Password~~ |
~~Autenticacion principal~~ |
NO disponible V1.0 |
| ~~MFA~~ |
~~TOTP, SMS~~ |
NO disponible V1.0 |
| Brute Force Protection |
Gestionado automaticamente por Firebase |
Pro/Perfect |
Nota V1.0: Firebase Auth gestiona toda la seguridad de autenticacion. El tier Free opera 100% offline sin autenticacion cloud (cuenta local sin sincronizacion).
Futuro (V1.5+): Email/password y MFA podrian agregarse si hay demanda de usuarios.
3.1.2. Requisitos de Seguridad (V1.0)
OBS-IT13-048: Politicas de longitud/complejidad/historial de contrasena NO aplican en V1.0 (solo autenticacion social).
| Requisito |
Especificación V1.0 |
Notas |
| ~~Longitud minima contrasena~~ |
N/A |
Solo social login |
| ~~Complejidad~~ |
N/A |
Solo social login |
| ~~Historial de contrasenas~~ |
N/A |
Solo social login |
| Proteccion brute force |
Gestionado por Firebase Auth |
Automatico |
| Timeout de sesion inactiva |
15 minutos |
Aplica a sesion local de app |
| Timeout absoluto de sesion |
24 horas |
Requiere re-autenticacion |
| Biometria/PIN local |
Requerido para acceso a app |
Ver seccion 3.2 |
Seguridad V1.0: La seguridad de autenticacion es delegada 100% a Firebase Auth y los proveedores de identidad (Google/Apple). Estos proveedores implementan sus propias politicas de seguridad robustas incluyendo MFA opcional del lado del usuario.
3.2. Biometría (Nativa)
| Plataforma |
Tecnología |
API |
| iOS |
Face ID / Touch ID |
LocalAuthentication Framework |
| Android |
Fingerprint / Face |
BiometricPrompt API |
4. Integraciones de Notificaciones
4.1. Notificaciones Push (Android)
| Aspecto |
Especificación |
| Propósito |
Push notifications Android y Web |
| Disponibilidad |
Pro/Perfect (requiere conexión) |
| Fallback |
Notificaciones locales para Free y offline |
4.1.1. Tipos de Mensaje
| Tipo |
Uso |
Prioridad |
| Notification |
Recordatorios visibles |
High |
| Data |
Actualizaciones silenciosas |
Normal |
| Notification + Data |
Alertas con acción |
High |
4.2. Notificaciones Push (iOS)
| Aspecto |
Especificación |
| Propósito |
Push notifications iOS |
| Disponibilidad |
Pro/Perfect (requiere conexión) |
| Fallback |
Notificaciones locales para Free y offline |
4.2.1. Categorías de Notificación
| Categoría |
Acciones |
Interrupción |
| MEDICATION_REMINDER |
Tomado, Posponer, Ver |
Time Sensitive |
| CAREGIVER_ALERT |
Ver, Contactar |
Time Sensitive |
| EMERGENCY |
Responder |
Critical |
| INFO |
Ver |
Passive |
4.3. Notificaciones SMS
| Aspecto |
Especificación |
| Propósito |
Backup para push y alertas críticas |
| Disponibilidad |
Pro/Perfect (3 SMS/mes incluidos) |
| Uso |
Alertas a cuidadores, emergencias |
5. Integraciones de OCR e IA
5.1. Procesamiento OCR de Recetas
| Aspecto |
Especificación |
| Propósito |
Extracción de texto de recetas médicas |
| Disponibilidad por Tier |
Ver tabla abajo |
| Requisito |
Servicio de OCR con detección de texto en documentos |
5.1.1. Disponibilidad por Tier
OBS-IT13-049: OCR incluido en suscripcion para Pro y Perfect. La diferencia entre tiers es el limite de usos, no costo adicional.
| Tier |
Funcionalidad OCR |
Limite Mensual |
Costo Adicional |
| Free |
Solo captura de foto + entrada manual de datos |
N/A |
N/A |
| Pro |
OCR + IA incluido en suscripcion |
50 recetas/mes |
Incluido |
| Perfect |
OCR + IA incluido en suscripcion |
Ilimitado |
Incluido |
Nota: El OCR es independiente de la sincronizacion cloud. Un usuario Pro/Perfect puede usar OCR incluso si tiene desactivada la sincronizacion.
Diferencia Pro vs Perfect: Ambos tiers incluyen OCR en la suscripcion. La unica diferencia es el limite mensual: Pro tiene 50 recetas/mes, Perfect es ilimitado. NO hay costo adicional por uso de OCR en ninguno de los tiers pagos.
Ver MTS-RX-001 para especificacion completa del modulo de recetas.
5.1.2. Flujo de Procesamiento
OBS-IT13-050: Incluir preprocesamiento de imagen, anonimizacion manual y disclaimer de privacidad.
flowchart TD
A[Usuario captura imagen de receta] --> B[Preprocesamiento Local]
B --> C{Usuario revisa preview}
C -->|Acepta| D[Anonimizacion Manual]
C -->|Rechaza| A
D --> E[Muestra disclaimer privacidad]
E --> F{Usuario acepta enviar?}
F -->|Si| G[Envio a servidor OCR]
F -->|No| H[Solo almacenamiento local]
G --> I[Extraccion OCR]
I --> J[IA Estructuracion]
J --> K[Resultado a dispositivo]
K --> L[Almacenamiento local cifrado]
5.1.2.1. Preprocesamiento de Imagen (Local)
| Paso |
Descripcion |
Proposito |
| 1. Deteccion de documento |
Identificar bordes de la receta |
Recortar solo area relevante |
| 2. Correccion de perspectiva |
Enderezar imagen inclinada |
Mejorar precision OCR |
| 3. Mejora de contraste |
Optimizar legibilidad del texto |
Mejorar precision OCR |
| 4. Reduccion de ruido |
Filtrar artefactos de imagen |
Reducir errores de lectura |
| 5. Compresion optimizada |
Reducir tamano sin perder calidad |
Minimizar datos enviados |
5.1.2.2. Anonimizacion Manual (Usuario)
Antes de enviar la imagen al servidor OCR, el usuario puede:
| Accion |
Descripcion |
Herramienta |
| Ocultar datos personales |
Cubrir nombre del paciente, direccion, etc. |
Herramienta de borrado/difuminado |
| Ocultar datos del medico |
Opcional: ocultar datos si desea privacidad |
Herramienta de borrado/difuminado |
| Preview antes de envio |
Ver exactamente que se enviara al servidor |
Vista previa final |
Importante: La anonimizacion es MANUAL y OPCIONAL. El usuario decide que ocultar. MedTime no anonimiza automaticamente para no afectar la precision del OCR.
5.1.2.3. Disclaimer de Privacidad
Antes del envio, se muestra al usuario:
AVISO DE PRIVACIDAD - Procesamiento OCR
La imagen de su receta sera enviada temporalmente a un servidor
para extraer el texto. Al continuar, usted acepta que:
- La imagen se procesara y se eliminara del servidor inmediatamente
- Solo el texto extraido se devuelve a su dispositivo
- MedTime NO almacena la imagen en la nube
- Usted puede ocultar datos personales antes del envio
[Ver politica de privacidad completa]
[Cancelar] [Acepto y Continuar]
Cumplimiento: Este flujo cumple con requisitos de consentimiento informado de LGPD, Ley Federal de Proteccion de Datos (Mexico), y mejores practicas HIPAA para transmision de PHI.
5.2. Estructuración con IA
| Aspecto |
Especificación |
| Propósito |
Estructuración de texto OCR |
| Uso |
Extraer campos de texto libre |
| Privacidad |
Sin envío de PII identificable |
| Disponibilidad |
Junto con OCR (Pro: 50/mes, Perfect: ilimitado) |
OBS-IT13-051: Incluir institucion emisora (hospital, clinica) y datos de contacto.
5.2.2. Datos del Prescriptor
- Nombre del medico
- Cedula profesional
- Especialidad (si aparece)
5.2.3. Institucion Emisora
- Nombre de la institucion (hospital, clinica, consultorio)
- Direccion de la institucion
- Telefono de contacto
- Email de contacto (si disponible)
5.2.4. Datos de la Receta
- Fecha de emision
- Diagnostico (si aparece)
- Instrucciones especiales
5.2.5. Medicamentos (por cada uno)
- Nombre del medicamento (generico y/o comercial)
- Dosis/concentracion
- Frecuencia de toma
- Duracion del tratamiento
- Via de administracion
- Instrucciones especificas
Nota: La IA extrae todos los campos que pueda identificar. El usuario puede editar/completar campos manualmente. Los campos no encontrados quedan vacios para entrada manual.
6. Integraciones de Base de Datos de Medicamentos
6.1. Base de Datos Propia (v1.0)
| Aspecto |
Especificación |
| Propósito |
Catálogo de medicamentos para México |
| Fuente base |
Compendio de Medicamentos CSG (Consejo de Salubridad General) |
| Acceso |
Base de datos interna |
| Cobertura |
México (medicamentos de uso común) |
| Actualización |
Periódica (mensual recomendado) |
6.1.1. Fuente Oficial del Catálogo
| Aspecto |
Detalle |
| Institución |
Consejo de Salubridad General (CSG) - Gobierno de México |
| Recurso |
Compendio Nacional de Insumos para la Salud |
| URL de referencia |
https://csg.gob.mx/ (sección de Compendio de Medicamentos) |
| Formato |
Excel (XLSM) con actualizaciones periódicas |
| Licencia |
Datos públicos del gobierno mexicano |
6.1.2. Proceso de Curación de Datos
| Paso |
Descripción |
| 1. Extracción |
Descarga periódica del compendio oficial CSG |
| 2. Transformación |
Normalización de campos a estructura interna |
| 3. Validación |
Verificación de integridad y consistencia |
| 4. Enriquecimiento |
Adición de presentaciones comerciales comunes |
| 5. Revisión |
Validación por profesional de la salud (recomendado) |
| 6. Publicación |
Actualización de la base de datos interna |
6.1.3. Mecanismo de Colección Anónima
OBS-IT13-052: Todos los datos de medicamentos se colectan de forma anonima. El usuario NO puede hacer opt-out porque es esencial para la base de datos.
Para enriquecer el catálogo con medicamentos no incluidos en CSG:
| Aspecto |
Especificación |
| Propósito |
Identificar medicamentos faltantes en el catálogo |
| Datos colectados |
Solo nombre del medicamento (100% anonimo) |
| Privacidad |
100% anonimo,SIN trazabilidad al paciente |
| Vinculacion a usuario |
NINGUNA - imposible identificar quien busco el medicamento |
| Proceso |
Medicamentos no encontrados se envian automaticamente |
| Curacion |
Equipo revisa periodicamente y agrega al catalogo |
| Opt-out |
NO DISPONIBLE - datos son esenciales y 100% anonimos |
flowchart TD
A[Usuario busca medicamento] --> B{Existe en catalogo?}
B -->|Si| C[Mostrar resultado]
B -->|No| D[Permitir entrada manual]
D --> E[Enviar nombre a cola anonima]
E --> F[Cola de revision - Solo nombre]
F --> G[Curacion manual por equipo]
G --> H[Agregar a catalogo]
Justificacion Legal y Etica:
- Los datos colectados son exclusivamente el nombre del medicamento - no hay datos personales
- Es imposible vincular una busqueda con un usuario especifico
- NO constituye dato personal bajo LGPD, LFPDPPP, ni HIPAA
- La coleccion anonima es esencial para mantener un catalogo actualizado y completo
- Beneficia a todos los usuarios al enriquecer la base de datos
- Similar al modelo de "mejora de productos" anonimo usado por la industria
6.1.4. Estructura de Datos
| Campo |
Descripción |
| nombre_generico |
Nombre del principio activo (denominación común internacional) |
| nombre_comercial |
Nombres comerciales disponibles en México |
| presentacion |
Formas farmacéuticas (tableta, cápsula, solución, etc.) |
| dosis_disponibles |
Concentraciones disponibles |
| indicaciones |
Usos terapéuticos principales |
| via_administracion |
Oral, inyectable, tópica, etc. |
| interacciones_conocidas |
Interacciones documentadas |
| fuente |
CSG, Colección Anónima, u otra fuente autorizada |
| fecha_actualizacion |
Última fecha de verificación del registro |
6.2. Expansión Futura (EE.UU., Brasil)
| Aspecto |
Especificación |
| Propósito |
Nomenclatura estándar por país |
| Cobertura |
Estados Unidos, Brasil (futuro) |
| Estado |
Planificado para expansión geográfica |
| Requisito |
Fuentes oficiales de cada país |
6.3. Verificación de Interacciones
| Aspecto |
Especificación |
| Propósito |
Detectar posibles interacciones medicamentosas |
| Fuente primaria |
Base de datos local (caché) |
| Fuente secundaria |
Consulta con IA (on-demand) |
| Disponibilidad |
Ver tabla por tier |
| Disclaimer |
OBLIGATORIO: "Información solo orientativa. Consulte siempre con su médico o farmacéutico." |
6.3.1. Disponibilidad por Tier
OBS-IT13-053: Free tiene verificacion local limitada a un subconjunto basico de medicamentos criticos.
| Tier |
Verificacion de Interacciones |
Detalle |
| Free |
Verificacion local limitada |
Solo subconjunto basico de medicamentos criticos |
| Pro |
Cache local completa + IA on-demand |
IA incluida en suscripcion |
| Perfect |
Cache local completa + IA ilimitada |
IA incluida en suscripcion |
6.3.1.1. Subconjunto Basico (Free)
El tier Free incluye verificacion de interacciones para medicamentos criticos mas comunes:
| Categoria |
Ejemplos |
Justificacion |
| Anticoagulantes |
Warfarina, Aspirina |
Alto riesgo de interacciones graves |
| Antidiabeticos |
Metformina, Insulina |
Uso muy comun, interacciones criticas |
| Cardiovasculares |
Losartan, Enalapril, Atorvastatina |
Alta prevalencia, interacciones conocidas |
| Antibioticos comunes |
Amoxicilina, Azitromicina |
Interacciones con warfarina y otros |
| Analgesicos |
Paracetamol, Ibuprofeno |
Uso masivo, interacciones hepaticas/renales |
Nota: El subconjunto basico cubre aproximadamente los 100 medicamentos mas prescritos en Mexico con interacciones documentadas mas graves. Para verificacion completa, el usuario debe usar Pro o Perfect.
6.3.2. Flujo de Verificación
OBS-IT13-054: Flujo actualizado: primero BD MedTime, si no existe usa IA servidor, guarda resultado en BD, envia con disclaimer, cachea localmente.
flowchart TD
A[Usuario agrega medicamento] --> B[Verificar contra Cache Local]
B --> C{Existe en cache local?}
C -->|Si - Interaccion| D[Mostrar alerta con disclaimer]
C -->|Si - Sin interaccion| E[Continuar sin alerta]
C -->|No existe| F{Tier Pro/Perfect?}
F -->|No - Free| G[Verificar solo subconjunto basico]
G --> H{En subconjunto?}
H -->|Si| I[Mostrar resultado basico]
H -->|No| J[Sin info - sugerir upgrade]
F -->|Si| K[Consultar BD MedTime servidor]
K --> L{Existe en BD MedTime?}
L -->|Si| M[Obtener interacciones de BD]
L -->|No| N[Consultar IA servidor]
N --> O[IA procesa y responde]
O --> P[Guardar resultado en BD MedTime]
P --> M
M --> Q[Enviar resultado con disclaimer]
Q --> R[Cachear resultado localmente]
R --> D
6.3.2.1. Jerarquia de Fuentes de Datos
| Prioridad |
Fuente |
Cuando se usa |
| 1 |
Cache local |
Siempre primero (offline-first) |
| 2 |
BD MedTime servidor |
Si no existe en cache y usuario Pro/Perfect |
| 3 |
IA servidor |
Solo si no existe en BD MedTime |
| 4 |
Subconjunto basico |
Free - solo medicamentos criticos |
6.3.2.2. Persistencia de Resultados
| Accion |
Descripcion |
| Guardar en BD MedTime |
Resultado de IA se guarda en servidor para futuros usuarios |
| Cachear localmente |
Usuario Pro/Perfect descarga resultado para uso offline |
| TTL de cache |
30 dias - despues se re-verifica |
Beneficio del modelo: Cada consulta a IA enriquece la BD MedTime. Con el tiempo, la BD cubrira la mayoria de combinaciones de medicamentos y las consultas a IA seran minimas.
7. Integraciones de Almacenamiento
OBS-IT13-055: Arquitectura 100% local para todos los tiers. Cloud es cache/backup OPCIONAL para Pro/Perfect. E2E obligatorio para Pro/Perfect.
7.1. Almacenamiento Local (Todos los Tiers) - FUENTE PRIMARIA
| Aspecto |
Especificación |
| Propósito |
AlmacenamientoPRIMARIO de todos los datos |
| Uso |
100% de datos para TODOS los tiers |
| Arquitectura |
Offline-first - local es la fuente de verdad |
| Contenido |
Todos los datos del usuario sin excepcion |
| Cifrado |
AES-256 con clave derivada de biometria/PIN |
| Requisito |
Base de datos cifrada nativa del sistema operativo |
Principio Fundamental: El dispositivo del usuario es la UNICA fuente de verdad. Incluso usuarios Pro/Perfect almacenan 100% de sus datos localmente. El cloud es solo un respaldo opcional.
7.2. Almacenamiento Cloud (Pro/Perfect) - CACHE/BACKUP OPCIONAL
| Aspecto |
Especificación |
| Propósito |
Cache/BackupOPCIONAL - no es fuente primaria |
| Disponibilidad |
Solo Pro/Perfect |
| Obligatorio |
NO - usuario puede desactivar completamente |
| Contenido |
Copia cifrada de datos locales (backup) |
| Cifrado |
E2E obligatorio - Zero-Knowledge Architecture |
| Control |
Usuario puede pausar/desactivar/eliminar en cualquier momento |
Zero-Knowledge: MedTime NO puede leer los datos en el cloud. Solo el usuario con su clave puede descifrarlos.
7.2.1. Cifrado End-to-End (E2E) Obligatorio
| Aspecto |
Especificacion |
| Obligatoriedad |
OBLIGATORIO para todo dato que suba a cloud |
| Algoritmo |
AES-256-GCM con clave derivada del usuario |
| Clave de cifrado |
Derivada de biometria/PIN del usuario - NUNCA sale del dispositivo |
| Zero-Knowledge |
Servidor almacena solo datos cifrados - imposible leer sin clave usuario |
| Recuperacion |
Si usuario pierde clave, datos cloud son irrecuperables |
flowchart LR
A[Datos Usuario] --> B[Cifrado E2E Local]
B --> C[Datos Cifrados]
C --> D{Sync habilitado?}
D -->|Si| E[Upload a Cloud]
D -->|No| F[Solo Local]
E --> G[Cloud Storage]
G --> H[Datos cifrados - MedTime NO puede leer]
Advertencia al Usuario Pro/Perfect: "Sus datos se cifran en su dispositivo antes de sincronizarse. Si pierde acceso a su cuenta y dispositivo, MedTime NO puede recuperar sus datos. Recomendamos activar backup local adicional."
Documentacion tecnica de cifrado: Ver investigaciones INV-008 (Blind Index, Split-Key, Argon2id) e INV-010 (Differential Privacy, k-anonymity).
7.2.2. Estructura Lógica de Almacenamiento
/usuarios/{user_id}/
├── recetas/
│ └── {prescription_id}/
├── analisis/
│ └── {result_id}/
├── exportaciones/
│ └── {export_id}/ (TTL: 24h)
└── backups/
└── {date}/
7.2.3. Políticas de Retención
| Tipo de Dato |
Acceso |
Retención |
| Recetas |
Privado, URLs temporales |
7 años |
| Análisis |
Privado, URLs temporales |
10 años |
| Exportaciones |
Privado, TTL 24h |
24 horas |
| Backups |
Solo sistema |
30 días |
8. Integraciones de Calendario (ACL4-013)
Decision Round 4: Usuario elige si exportar tomas de medicamentos a calendario externo.
8.1. Vision General de Integracion
OBS-IT13-056: Exportacion es opt-in POR TIPO DE EVENTO. Informacion sensible se omite o anonimiza segun configuracion de privacidad del usuario.
flowchart TD
A[MedTime] --> B{Tipo de evento?}
B -->|Cita medica| C{Opt-in citas?}
B -->|Cita de estudio| D{Opt-in estudios?}
B -->|Toma de medicamento| E{Opt-in tomas?}
C -->|Si| F[Aplicar config privacidad]
C -->|No| G[Solo en MedTime]
D -->|Si| F
D -->|No| G
E -->|Si| F
E -->|No| G
F --> H[Anonimizar info sensible]
H --> I{Calendario destino?}
I -->|Google Calendar| J[API Calendar]
I -->|Apple Calendar| K[EventKit]
I -->|Outlook| L[Microsoft Graph]
8.1.1. Opt-in por Tipo de Evento
| Tipo de Evento |
Default |
Configurable |
Nota |
| Citas medicas |
OFF |
Si |
Opt-in explicito requerido |
| Citas de estudios/analisis |
OFF |
Si |
Opt-in explicito requerido |
| Tomas de medicamentos |
OFF |
Si |
Opt-in explicito requerido |
| Eventos de salud |
OFF |
Si |
Opt-in explicito requerido |
Importante: TODOS los tipos de evento estan desactivados por defecto. El usuario debe activar explicitamente cada tipo que desea exportar.
Segun la configuracion de privacidad del usuario, la informacion sensible se:
| Config Privacidad |
Tratamiento de Info Sensible |
Ejemplo |
| Privado(default) |
OMITIDA completamente |
Titulo: "MedTime - Recordatorio" |
| Basico |
ANONIMIZADA parcialmente |
Titulo: "Cita medica - 10:00" |
| Detallado |
Incluida con consentimiento |
Titulo: "Dr. Garcia - Cardiologia" |
| Dato |
Tratamiento Privado |
Tratamiento Basico |
Tratamiento Detallado |
| Nombre del medico |
Omitido |
"Medico" |
Nombre completo |
| Especialidad |
Omitida |
"Especialista" |
Especialidad real |
| Nombre de medicamento |
Omitido |
"Medicamento" |
Nombre real |
| Dosis |
Omitida |
Omitida |
Dosis real |
| Diagnostico |
Omitido |
Omitido |
Omitido siempre |
| Tipo de estudio |
Omitido |
"Estudio" |
Tipo real |
| Ubicacion clinica |
Omitida |
Ciudad solamente |
Direccion completa |
Nota: El diagnostico NUNCA se exporta a calendario externo, independientemente del nivel de privacidad configurado.
8.2. Google Calendar API
| Aspecto |
Especificacion |
| Proposito |
Sincronizacion de citas y tomas (opcional) |
| Scopes |
calendar.events |
| Autenticacion |
OAuth 2.0 |
| Direccion |
Unidireccional (MedTime -> Calendar) |
8.3. Apple EventKit
| Aspecto |
Especificacion |
| Proposito |
Sincronizacion con Apple Calendar |
| Framework |
EventKit |
| Permisos |
NSCalendarsUsageDescription |
| Direccion |
Unidireccional (MedTime -> Calendar) |
8.4. Microsoft Outlook (Futuro v1.5)
| Aspecto |
Especificacion |
| Proposito |
Sincronizacion con Outlook Calendar |
| API |
Microsoft Graph |
| Estado |
Placeholder para v1.5 |
8.5. Datos Exportados a Calendario
8.5.1. Citas Medicas y Estudios (Siempre Exportables)
| Dato |
Exportado |
Formato |
| Titulo |
Si |
"MedTime - Cita medica" o personalizado |
| Fecha y hora |
Si |
Fecha/hora de la cita |
| Duracion |
Si |
Default 1 hora o configurado |
| Ubicacion |
Si (si disponible) |
Direccion del consultorio |
| Recordatorio |
Si |
1 hora y 1 dia antes |
| Notas |
Opcional |
Instrucciones de preparacion |
8.5.2. Tomas de Medicamento (Opt-in por Usuario)
| Dato |
Exportado |
Formato |
| Titulo |
Configurable |
Privado: "MedTime - Recordatorio" / Detallado: "Tomar Metformina" |
| Fecha y hora |
Si |
Hora programada de toma |
| Duracion |
Si |
15 minutos |
| Recordatorio |
Si |
5 minutos antes |
| Descripcion |
Configurable |
Solo dosis o instrucciones completas |
8.6. Configuracion de Privacidad en Exportacion
| Opcion |
Descripcion |
Default |
| Exportar citas |
Citas medicas y estudios |
Si |
| Exportar tomas |
Tomas de medicamentos |
No |
| Nivel de detalle |
Privado / Basico / Detallado |
Privado |
| Calendario destino |
Cual calendario usar |
Principal |
8.6.1. Niveles de Detalle
| Nivel |
Titulo del Evento |
Descripcion |
| Privado |
"MedTime - Recordatorio" |
Sin detalles |
| Basico |
"Medicamento - 10:00" |
Solo hora |
| Detallado |
"Tomar Metformina 850mg" |
Nombre y dosis |
8.7. Flujo de Exportacion
flowchart TD
A[Usuario crea cita/medicamento] --> B{Exportacion activa?}
B -->|No| C[Solo guardar en MedTime]
B -->|Si| D{Tipo de evento?}
D -->|Cita| E[Crear evento en calendario]
D -->|Toma| F{Tomas habilitadas?}
F -->|No| C
F -->|Si| G[Aplicar nivel de privacidad]
G --> E
E --> H{Exito?}
H -->|Si| I[Guardar referencia de evento]
H -->|No| J[Reintentar / Notificar error]
I --> K[Evento creado]
8.8. Sincronizacion y Conflictos
| Escenario |
Comportamiento |
| Evento modificado en MedTime |
Actualizar en calendario externo |
| Evento eliminado en MedTime |
Eliminar de calendario externo |
| Evento modificado en calendario externo |
NO afecta MedTime |
| Evento eliminado en calendario externo |
NO afecta MedTime |
Nota: La sincronizacion es unidireccional. Cambios en el calendario externo no se reflejan en MedTime.
8.9. Reglas de Negocio de Calendarios
Actualizado OBS-IT13-056: Todas las exportaciones estan OFF por defecto (opt-in explicito).
| ID |
Regla |
| RN-CAL-001 |
Exportacion de citas DESACTIVADA por defecto (opt-in explicito) |
| RN-CAL-002 |
Exportacion de tomas DESACTIVADA por defecto (opt-in explicito) |
| RN-CAL-003 |
Usuario puede revocar acceso a calendario en cualquier momento |
| RN-CAL-004 |
Eventos eliminados en MedTime se eliminan del calendario |
| RN-CAL-005 |
Cambios en calendario externo no afectan MedTime |
| RN-CAL-006 |
Nivel de detalle "Privado" por defecto para todos los tipos |
| RN-CAL-007 |
Re-autenticacion si token expira |
| RN-CAL-008 |
Informacion sensible se anonimiza segun nivel de privacidad |
| RN-CAL-009 |
Diagnostico NUNCA se exporta a calendario externo |
9. Integraciones de Salud (ACL5-010)
Decision Round 5: Health Connect (Android) y HealthKit (iOS) disponibles desde v1.0 para eventos de salud.
OBS-IT13-057: Integraciones Health Connect y HealthKit solo disponibles para tiers Pro y Perfect. Free NO tiene acceso a estas integraciones.
9.1. Disponibilidad por Tier
| Integracion |
Free |
Pro |
Perfect |
| Health Connect (Android) |
NO |
Si |
Si |
| Apple HealthKit (iOS) |
NO |
Si |
Si |
| Entrada manual de mediciones |
Si |
Si |
Si |
Justificacion: Las integraciones con Health Connect y HealthKit requieren sincronizacion con servicios externos y generan carga en el sistema. Se reservan para usuarios de pago. Los usuarios Free pueden registrar mediciones manualmente.
9.2. Health Connect (Android) - v1.0 (Pro/Perfect)
| Aspecto |
Especificacion |
| Proposito |
Sincronizacion bidireccional de mediciones de salud |
| API |
Health Connect API (reemplazo de Google Fit) |
| Version minima |
Android 9+ (Pie) |
| Disponibilidad |
Solo Pro/Perfect |
9.2.1. Tipos de Datos Soportados (Lectura/Escritura)
| Tipo Health Connect |
Tipo MedTime |
Direccion |
Permisos |
| BloodGlucose |
Glucosa |
Bidireccional |
HEALTH_PERMISSION_BLOOD_GLUCOSE |
| BloodPressure |
Presion arterial |
Bidireccional |
HEALTH_PERMISSION_BLOOD_PRESSURE |
| Weight |
Peso |
Bidireccional |
HEALTH_PERMISSION_WEIGHT |
| BodyTemperature |
Temperatura |
Bidireccional |
HEALTH_PERMISSION_BODY_TEMPERATURE |
| HeartRate |
Frecuencia cardiaca |
Lectura |
HEALTH_PERMISSION_HEART_RATE |
| OxygenSaturation |
SpO2 |
Lectura |
HEALTH_PERMISSION_OXYGEN_SATURATION |
9.2.2. Flujo de Integracion Health Connect
flowchart TD
A[Usuario activa integracion Health Connect] --> B[MedTime solicita permisos]
B --> C{Usuario autoriza?}
C -->|Si| D[Leer datos existentes de Health Connect]
C -->|No| E[Continuar sin integracion]
D --> F[Importar mediciones como eventos MedTime]
F --> G[Configurar sincronizacion automatica]
G --> H{Nueva medicion?}
H -->|En MedTime| I[Escribir a Health Connect]
H -->|En otra app| J[Leer de Health Connect]
I --> K[Dato disponible en ambos sistemas]
J --> L[Crear evento de salud en MedTime]
L --> K
9.2.3. Configuracion por Usuario
| Opcion |
Descripcion |
Default |
| Sincronizar automaticamente |
Leer/escribir en tiempo real |
Si |
| Importar historico |
Importar mediciones anteriores |
Solo ultimos 30 dias |
| Tipos a sincronizar |
Seleccionar tipos de medicion |
Todos habilitados |
| Direccion |
Lectura/Escritura/Bidireccional |
Bidireccional |
| Notificar importaciones |
Alertar de datos importados |
No |
9.2.4. Manejo de Conflictos
| Escenario |
Comportamiento |
| Misma medicion en ambos sistemas |
Priorizar dato mas reciente (timestamp) |
| Medicion duplicada |
No duplicar, marcar como sincronizada |
| Dato sin fuente conocida |
Preguntar al usuario si importar |
| Conexion perdida |
Encolar y sincronizar al reconectar |
9.3. Apple HealthKit (iOS) - v1.0 (Pro/Perfect)
| Aspecto |
Especificacion |
| Proposito |
Sincronizacion bidireccional de mediciones de salud |
| Framework |
HealthKit |
| Version minima |
iOS 14+ |
| Disponibilidad |
Solo Pro/Perfect |
9.3.1. Tipos de Datos Soportados (Lectura/Escritura)
| Tipo HealthKit |
Tipo MedTime |
Direccion |
Identificador |
| HKQuantityTypeIdentifierBloodGlucose |
Glucosa |
Bidireccional |
bloodGlucose |
| HKQuantityTypeIdentifierBloodPressureSystolic |
Presion sistolica |
Bidireccional |
bloodPressureSystolic |
| HKQuantityTypeIdentifierBloodPressureDiastolic |
Presion diastolica |
Bidireccional |
bloodPressureDiastolic |
| HKQuantityTypeIdentifierBodyMass |
Peso |
Bidireccional |
bodyMass |
| HKQuantityTypeIdentifierBodyTemperature |
Temperatura |
Bidireccional |
bodyTemperature |
| HKQuantityTypeIdentifierHeartRate |
Frecuencia cardiaca |
Lectura |
heartRate |
| HKQuantityTypeIdentifierOxygenSaturation |
SpO2 |
Lectura |
oxygenSaturation |
9.3.2. Flujo de Integracion HealthKit
flowchart TD
A[Usuario activa integracion HealthKit] --> B[MedTime solicita permisos via Health app]
B --> C{Usuario autoriza en Health?}
C -->|Si| D[Registrar observadores para cambios]
C -->|No| E[Continuar sin integracion]
D --> F[Leer datos historicos autorizados]
F --> G[Importar como eventos MedTime]
G --> H[Escuchar cambios en background]
H --> I{Nueva medicion?}
I -->|En MedTime| J[HKHealthStore.save]
I -->|En otra app via HealthKit| K[Observer notifica a MedTime]
J --> L[Dato disponible en Health y MedTime]
K --> M[Crear evento de salud en MedTime]
M --> L
9.3.3. Background Delivery
| Aspecto |
Especificacion |
| HKObserverQuery |
Notifica cambios mientras app en background |
| Frecuencia |
Batch cada 1-2 horas (gestionado por iOS) |
| Tipos prioritarios |
Glucosa, Presion arterial |
| Limitaciones |
iOS puede limitar en modo bajo consumo |
9.4. Reglas de Negocio - Integraciones de Salud
| ID |
Regla |
| RN-INT-HC-001 |
Usuario debe autorizar explicitamente cada tipo de dato |
| RN-INT-HC-002 |
Datos importados de Health Connect/HealthKit se marcan con fuente externa |
| RN-INT-HC-003 |
Usuario puede desactivar sincronizacion en cualquier momento |
| RN-INT-HC-004 |
Conflictos se resuelven por timestamp mas reciente |
| RN-INT-HC-005 |
No se importan automaticamente datos de mas de 30 dias |
| RN-INT-HC-006 |
Alertas de valores criticos aplican a datos importados |
| RN-INT-HC-007 |
Datos eliminados en MedTime no se eliminan de Health Connect/HealthKit |
| RN-INT-HC-008 |
Integracion disponible SOLO en Pro/Perfect (Free no tiene acceso) |
9.5. Comparativa Health Connect vs HealthKit
| Aspecto |
Health Connect (Android) |
HealthKit (iOS) |
| Version minima |
Android 9 (Pie) |
iOS 14 |
| Permisos |
Por tipo de dato |
Por tipo de dato |
| Background sync |
Si, con restricciones |
Si, via observers |
| Almacenamiento |
Centralizado en Health Connect |
Centralizado en Health app |
| Compartir con otras apps |
Si |
Si |
| Datos de medicamentos |
Placeholder v1.5 |
Placeholder v1.5 |
9.6. Integraciones Directas con Dispositivos (Placeholder v1.5)
Nota: Integraciones directas con dispositivos medicos (glucometros, tensiometros Bluetooth) estan planificadas para v1.5. En v1.0, los datos se obtienen via Health Connect/HealthKit.
| Tipo de Dispositivo |
Estado v1.0 |
Planificado |
| Glucometros Bluetooth |
Via Health Connect/HealthKit |
v1.5 |
| Tensiometros Bluetooth |
Via Health Connect/HealthKit |
v1.5 |
| Basculas inteligentes |
Via Health Connect/HealthKit |
v1.5 |
| CGM (Monitoreo Continuo Glucosa) |
Via Health Connect/HealthKit |
v1.5 |
| Oximetros de pulso |
Via Health Connect/HealthKit |
v1.5 |
10. Integraciones Futuras (v2.0+)
10.1. HL7 FHIR
| Aspecto |
Especificación |
| Propósito |
Interoperabilidad con sistemas de salud |
| Versión |
FHIR R4 |
| Recursos |
Patient, Medication, MedicationRequest, Observation |
| Estado |
Planificado v2.0 |
10.2. Datos de Medicamentos en Health Apps
| Aspecto |
Especificación |
| Propósito |
Compartir registros de medicamentos con Health apps |
| HealthKit |
HKClinicalTypeIdentifierMedicationRecord |
| Health Connect |
MedicationRecord (en desarrollo) |
| Estado |
Placeholder v1.5 |
11. Seguridad en Integraciones
11.1. Gestión de Credenciales
| Tipo |
Almacenamiento |
| API Keys |
Gestor de secretos del proveedor cloud |
| OAuth Tokens |
Cifrado en BD + cache |
| Claves de servicio |
Gestor de secretos |
11.2. Comunicación Segura
| Requisito |
Especificación |
| TLS |
Mínimo 1.2, preferido 1.3 |
| Certificate Pinning |
Para APIs críticas |
| Mutual TLS |
Para integraciones B2B |
11.3. Rate Limiting
| Tipo de Integración |
Límite Recomendado |
Acción |
| OCR/IA |
Según proveedor |
Cola de espera |
| Base de datos medicamentos |
100/min |
Cache |
| Push notifications |
5000/min |
Batch |
12. Monitoreo de Integraciones
12.1. Métricas
| Métrica |
Descripción |
Alerta |
| Latencia |
Tiempo de respuesta |
> 2s |
| Error Rate |
% de errores |
> 1% |
| Disponibilidad |
Uptime del servicio |
< 99% |
| Cuota |
Uso de límites |
> 80% |
12.2. Circuit Breaker
| Estado |
Condición |
Acción |
| Closed |
Normal |
Permitir requests |
| Open |
> 50% errores en 1 min |
Rechazar requests |
| Half-Open |
Después de 30s |
Probar con 1 request |
13. Referencias
Documento generado por SpecQueen - La especificación funcional ES el sistema.