Modulo de Notificaciones Inteligentes¶
Identificador: MTS-NTF-001 Version: 1.1.0 Fecha: 2025-12-05 Autor: SpecQueen Decision: ACL7-009 - Implementar desde v1.0, OBS-066 - 100% OFFLINE Dependencias: MTS-ALT-001, MTS-ADH-001, MTS-USR-001
PRINCIPIO FUNDAMENTAL - 100% OFFLINE (OBS-066):
Las notificaciones inteligentes funcionan completamente OFFLINE utilizando solo recursos del dispositivo. No hay dependencias del servidor para: - Deteccion de patrones (procesamiento local) - Generacion de sugerencias (algoritmos on-device) - Alertas predictivas (modelo ML local) - Programacion de notificaciones (APIs nativas iOS/Android)
Toggle on/off: Usuario puede activar/desactivar notificaciones inteligentes en Configuracion, sin afectar las alertas basicas de medicamentos.
- 1. Proposito
- 2. Objetivos del Sistema
- 3. Arquitectura del Sistema
- 3.1. Componentes
- 3.2. Flujo de Datos
- 4. Funcionalidades
- 4.1. Aprendizaje de Patrones (MTS-NTF-001-F01)
- 4.2. Sugerencias de Optimizacion (MTS-NTF-001-F02)
- 4.3. Alertas Predictivas (MTS-NTF-001-F03)
- 4.4. Optimizacion de Momento de Entrega (MTS-NTF-001-F04)
- 4.5. Dashboard de Insights (MTS-NTF-001-F05)
- 5. Privacidad y Almacenamiento
- 5.1. Principios de Privacidad
- 5.2. Configuracion de Toggle On/Off (OBS-066)
- 5.3. Almacenamiento Local
- 5.4. Retencion de Datos
- 6. Disponibilidad por Tier
- 6.1. Detalle por Tier
- 7. Modelo de Machine Learning
- 7.1. Arquitectura (Perfect Tier)
- 7.2. Entrenamiento
- 7.3. Metricas de Evaluacion
- 8. Integracion con Otros Modulos
- 8.1. MTS-ALT-001 (Alertas)
- 8.2. MTS-ADH-001 (Adherencia)
- 8.3. MTS-GAM-001 (Gamificacion)
- 9. Criterios de Aceptacion
- 10. Reglas de Negocio Consolidadas
- 11. Referencias
1. Proposito¶
Este modulo implementa un sistema de notificaciones que aprende de los patrones de comportamiento del usuario para optimizar la efectividad de los recordatorios de medicamentos, maximizando la adherencia mediante personalizacion automatica.
OBS-066 - Arquitectura 100% OFFLINE:
Todo el procesamiento de notificaciones inteligentes ocurre localmente en el dispositivo:
Componente Ubicacion Tecnologia Recoleccion de datos Dispositivo SQLite local Analisis de patrones Dispositivo Algoritmos nativos Modelo ML predictivo Dispositivo CoreML (iOS) / TFLite (Android) Programacion alertas Dispositivo UNUserNotificationCenter / AlarmManager Almacenamiento Dispositivo Cifrado local Beneficios: - Funciona sin conexion a internet - Maxima privacidad (datos nunca salen del dispositivo) - Respuesta instantanea - Sin dependencia de servidor
2. Objetivos del Sistema¶
| Objetivo | Metrica | Meta v1.0 |
|---|---|---|
| Mejorar tasa de respuesta a alertas | Tiempo desde alerta hasta accion | < 5 minutos promedio |
| Reducir alertas ignoradas | % de alertas sin respuesta | < 15% |
| Personalizar horarios optimos | Precision de sugerencias | > 80% aceptacion |
| Predecir omisiones | Deteccion de dias problematicos | > 70% precision |
3. Arquitectura del Sistema¶
3.1. Componentes¶
flowchart TB
subgraph Motor["MOTOR DE NOTIFICACIONES"]
RD[Recolector de<br/>Datos]
AP[Analizador de<br/>Patrones]
MP[Modelo de<br/>Predicción]
GS[Generador de<br/>Sugerencias]
DN[Despachador de<br/>Notificaciones]
RD --> MP
AP --> GS
MP --> DN
GS --> DN
end
3.2. Flujo de Datos¶
flowchart TD
A[Usuario interactua con alertas] --> B[Recolector registra eventos]
B --> C[Datos almacenados localmente]
C --> D{Suficientes datos?}
D -->|< 14 dias| E[Usar configuracion manual]
D -->|>= 14 dias| F[Analizador procesa patrones]
F --> G[Modelo genera predicciones]
G --> H{Confianza > 80%?}
H -->|Si| I[Generar sugerencia al usuario]
H -->|No| J[Continuar recopilando datos]
I --> K{Usuario acepta?}
K -->|Si| L[Aplicar optimizacion]
K -->|No| M[Registrar preferencia]
L --> N[Monitorear resultados]
M --> N
N --> B
4. Funcionalidades¶
4.1. Aprendizaje de Patrones (MTS-NTF-001-F01)¶
4.1.1. Descripcion¶
El sistema recopila y analiza datos de comportamiento para identificar patrones de toma de medicamentos.
4.1.2. Datos Recopilados¶
| Dato | Descripcion | Uso |
|---|---|---|
| hora_alerta | Hora programada de la alerta | Baseline |
| hora_respuesta | Hora real de la accion del usuario | Delta analysis |
| tipo_respuesta | Tomada/Pospuesta/Omitida | Efectividad |
| tiempo_respuesta | Segundos entre alerta y accion | Engagement |
| dia_semana | Lunes-Domingo | Patrones semanales |
| contexto_dispositivo | Activo/Bloqueado/Background | Disponibilidad |
4.1.3. Patrones Detectables¶
| Patron | Descripcion | Ejemplo |
|---|---|---|
| HORARIO_CONSISTENTE | Usuario toma siempre a la misma hora | Siempre a las 7:32 AM (+/- 5 min) |
| HORARIO_VARIABLE | Hora varia pero dentro de rango | Entre 7:00 y 8:30 AM |
| DIA_PROBLEMATICO | Ciertos dias tienen mas omisiones | Sabados 40% omision |
| RESPUESTA_LENTA | Tarda mucho en responder | Promedio 45 min |
| POSPONEDOR_SERIAL | Siempre pospone al menos una vez | 80% de tomas pospuestas |
4.1.4. Algoritmo de Deteccion¶
# Pseudocodigo del analizador de patrones
def analizar_patron_horario(historial_tomas):
"""
Analiza si el usuario tiene un patron de horario consistente
"""
# Agrupar por medicamento
for medicamento in historial_tomas.group_by('medicamento_id'):
horas_reales = [t.hora_respuesta for t in medicamento.tomas]
# Calcular estadisticas
media = mean(horas_reales)
desviacion = std(horas_reales)
if desviacion < 10_minutos:
return PatronHorario(
tipo='CONSISTENTE',
hora_sugerida=media,
confianza=0.95
)
elif desviacion < 30_minutos:
return PatronHorario(
tipo='VARIABLE',
rango_sugerido=(media - desviacion, media + desviacion),
confianza=0.80
)
else:
return PatronHorario(
tipo='IRREGULAR',
confianza=0.50
)
4.1.5. Reglas de Negocio¶
| ID | Regla |
|---|---|
| RN-NTF-001 | Minimo 14 dias de datos para generar patrones |
| RN-NTF-002 | Minimo 10 tomas de un medicamento para patron especifico |
| RN-NTF-003 | Patrones se recalculan semanalmente |
| RN-NTF-004 | Datos de patrones nunca salen del dispositivo |
4.2. Sugerencias de Optimizacion (MTS-NTF-001-F02)¶
4.2.1. Descripcion¶
Genera sugerencias personalizadas basadas en los patrones detectados.
4.2.2. Tipos de Sugerencias¶
| Tipo | Trigger | Sugerencia |
|---|---|---|
| AJUSTE_HORARIO | Patron consistente diferente a configurado | "Cambiar alerta de 8:00 a 7:30" |
| ALERTA_ANTICIPADA | Usuario siempre pospone | "Enviar alerta 15 min antes" |
| REFUERZO_DIA | Dia problematico detectado | "Alerta especial los sabados" |
| PRE_ALERTA | Respuesta lenta | "Agregar recordatorio previo" |
4.2.3. UI de Sugerencia - Ajuste de Horario¶
+------------------------------------------+
| SUGERENCIA INTELIGENTE |
+------------------------------------------+
| |
| Hemos notado que usualmente tomas tu |
| Metformina alrededor de las 7:30 AM, |
| no a las 8:00 AM como esta configurado. |
| |
| Basado en 28 dias de datos: |
| - Hora promedio real: 7:32 AM |
| - Desviacion: +/- 8 minutos |
| - Confianza: 94% |
| |
| Quieres cambiar el horario a 7:30 AM? |
| |
| [Si, cambiar] [Mantener 8:00] [Ignorar]|
+------------------------------------------+
4.2.4. UI de Sugerencia - Dia Problematico¶
+------------------------------------------+
| RECORDATORIO ESPECIAL |
+------------------------------------------+
| |
| Hoy es sabado |
| |
| Hemos notado que los sabados tienes |
| mayor dificultad para recordar tus |
| medicamentos de la manana. |
| |
| Tasa de omision sabados: 35% |
| Tasa normal: 8% |
| |
| Quieres que te envie un recordatorio |
| adicional los sabados? |
| |
| [Si, agregar recordatorio] [No, gracias]|
+------------------------------------------+
4.2.5. Flujo de Sugerencia¶
sequenceDiagram
participant S as Sistema
participant U as Usuario
S->>S: Detecta patron con confianza > 80%
S->>S: Genera sugerencia
S->>U: Muestra sugerencia (no intrusiva)
alt Usuario acepta
U->>S: Acepta sugerencia
S->>S: Aplica cambio automaticamente
S->>U: Confirma: "Horario actualizado"
S->>S: Registra aceptacion para aprendizaje
else Usuario rechaza
U->>S: Rechaza sugerencia
S->>S: Registra rechazo
S->>S: No volver a sugerir lo mismo por 30 dias
else Usuario ignora
U->>S: Cierra sin responder
S->>S: Reintentar en 7 dias
end
4.2.6. Reglas de Negocio¶
| ID | Regla |
|---|---|
| RN-NTF-010 | Sugerencias solo con confianza > 80% |
| RN-NTF-011 | Maximo 1 sugerencia por dia |
| RN-NTF-012 | Sugerencia rechazada no se repite por 30 dias |
| RN-NTF-013 | Usuario puede desactivar sugerencias |
| RN-NTF-014 | Sugerencias se muestran en momento no intrusivo |
4.3. Alertas Predictivas (MTS-NTF-001-F03)¶
4.3.1. Descripcion¶
Envia alertas proactivas cuando el sistema predice alta probabilidad de omision.
4.3.2. Factores de Prediccion¶
| Factor | Peso | Descripcion |
|---|---|---|
| dia_semana | 0.30 | Historico de omisiones por dia |
| hora_del_dia | 0.25 | Efectividad historica por hora |
| racha_actual | 0.20 | Si usuario tiene racha activa |
| ultimo_acceso | 0.15 | Tiempo desde ultimo uso de app |
| contexto_calendario | 0.10 | Eventos que puedan interferir |
4.3.3. Calculo de Riesgo¶
riesgo_omision = (
peso_dia * tasa_omision_dia +
peso_hora * (1 - tasa_respuesta_hora) +
peso_racha * (1 si racha_activa else 0.5) +
peso_acceso * factor_inactividad +
peso_calendario * factor_eventos
)
if riesgo_omision > 0.6:
enviar_alerta_preventiva()
4.3.4. UI de Alerta Predictiva¶
+------------------------------------------+
| RECORDATORIO PREVENTIVO |
+------------------------------------------+
| |
| Hola! Solo un recordatorio amigable |
| |
| Tienes una toma de Metformina |
| programada para las 8:00 AM |
| |
| Los sabados sueles tener mas |
| dificultad con esta toma. |
| |
| Llevas una racha de 15 dias! |
| No la pierdas |
| |
| [Entendido] [Configurar alerta]|
+------------------------------------------+
4.3.5. Reglas de Negocio¶
| ID | Regla |
|---|---|
| RN-NTF-020 | Alertas predictivas solo si riesgo > 60% |
| RN-NTF-021 | Maximo 1 alerta predictiva por dia por medicamento |
| RN-NTF-022 | Alerta predictiva se envia 30-60 min antes |
| RN-NTF-023 | No enviar si usuario ya confirmo la toma |
4.4. Optimizacion de Momento de Entrega (MTS-NTF-001-F04)¶
4.4.1. Descripcion¶
Ajusta el momento exacto de entrega de notificaciones para maximizar la probabilidad de respuesta.
4.4.2. Estrategias de Entrega¶
| Estrategia | Descripcion | Cuando Aplicar |
|---|---|---|
| EXACTA | Enviar a la hora configurada | Default |
| ANTICIPADA | Enviar X minutos antes | Si usuario pospone frecuentemente |
| VENTANA | Enviar cuando dispositivo activo | Si respuesta es lenta |
| RAFAGA | Multiples alertas espaciadas | Si omision es frecuente |
4.4.3. Configuracion de Estrategia por Usuario¶
+------------------------------------------+
| CONFIGURACION DE ALERTAS INTELIGENTES |
+------------------------------------------+
| |
| Modo de alertas: |
| |
| ( ) Estandar |
| Alertas a la hora exacta configurada |
| |
| (o) Inteligente (recomendado) |
| Sistema optimiza momento de entrega |
| basado en tus patrones |
| |
| ( ) Agresivo |
| Multiples recordatorios hasta |
| confirmar la toma |
| |
| Nivel de personalizacion: |
| |
| [x] Permitir ajuste automatico de hora |
| [x] Permitir alertas preventivas |
| [ ] Permitir alertas de refuerzo |
| |
| [Guardar] |
+------------------------------------------+
4.5. Dashboard de Insights (MTS-NTF-001-F05)¶
4.5.1. Descripcion¶
Muestra al usuario sus patrones detectados y como el sistema esta optimizando sus alertas.
4.5.2. Pantalla de Insights¶
+------------------------------------------+
| MIS PATRONES DE ADHERENCIA |
+------------------------------------------+
| |
| RESUMEN SEMANAL |
| Semana del 25 Nov - 1 Dic |
| |
| Tomas a tiempo: 45/52 (87%) |
| Tiempo promedio resp: 4.2 min |
| Mejor dia: Martes (95%) |
| Dia a mejorar: Sabado (72%) |
| |
| PATRONES DETECTADOS |
| |
| Metformina 850mg |
| - Hora real promedio: 7:32 AM |
| - Configurada: 8:00 AM |
| - Sugerencia: Cambiar a 7:30 AM |
| [Aplicar] [Ignorar] |
| |
| Lisinopril 10mg |
| - Patron: Consistente |
| - Sin ajustes sugeridos |
| |
| PREDICCIONES PARA MANANA |
| |
| Riesgo de omision: Bajo (15%) |
| Razon: Domingo, pero racha activa |
| |
+------------------------------------------+
4.5.3. Grafico de Patrones Semanales¶
+------------------------------------------+
| ADHERENCIA POR DIA DE SEMANA |
+------------------------------------------+
| |
| Lun |████████████████████| 95% |
| Mar |█████████████████████| 98% |
| Mie |███████████████████| 92% |
| Jue |████████████████████| 95% |
| Vie |██████████████████| 88% |
| Sab |██████████████| 72% [!] |
| Dom |████████████████| 80% |
| |
| [!] Dia problematico detectado |
| Quieres agregar alerta extra? |
| [Si] [No] |
+------------------------------------------+
5. Privacidad y Almacenamiento¶
OBS-066 - Confirmacion de Arquitectura OFFLINE:
Esta seccion refuerza el principio de funcionamiento 100% offline del modulo.
5.1. Principios de Privacidad¶
| Principio | Implementacion | Garantia OFFLINE |
|---|---|---|
| Datos locales | Patrones se calculan y almacenan solo en dispositivo | Sin transmision |
| Sin tracking | No se envian datos de comportamiento al servidor | Sin conexion requerida |
| Opt-in | Usuario debe activar notificaciones inteligentes | Toggle en Configuracion |
| Transparencia | Usuario puede ver todos los patrones detectados | Dashboard local |
| Control | Usuario puede eliminar datos de patrones | Eliminacion inmediata |
| Funcionamiento offline | Todas las funciones operan sin internet | 100% garantizado |
5.2. Configuracion de Toggle On/Off (OBS-066)¶
+------------------------------------------+
| CONFIGURACION > NOTIFICACIONES |
+------------------------------------------+
| |
| Recordatorios basicos [ON] |
| Alertas de toma de medicamentos |
| |
| Notificaciones inteligentes [ON/OFF] |
| Aprendizaje de patrones |
| Sugerencias de optimizacion |
| Alertas predictivas |
| |
| Cuando desactivas las notificaciones |
| inteligentes: |
| - Alertas basicas siguen funcionando |
| - Datos de patrones se conservan |
| - Puedes reactivar cuando quieras |
| |
+------------------------------------------+
5.3. Almacenamiento Local¶
// Estructura de datos en SQLite local
PatternData {
id: INTEGER PRIMARY KEY
medication_id: TEXT
day_of_week: INTEGER (0-6)
hour_scheduled: INTEGER (0-23)
hour_actual: INTEGER (0-23)
response_type: TEXT (TAKEN, POSTPONED, SKIPPED)
response_time_seconds: INTEGER
timestamp: INTEGER
dispositivo_destino: TEXT (device_id del dispositivo que recibio la alerta) // Iteracion 13
}
DetectedPattern {
id: INTEGER PRIMARY KEY
medication_id: TEXT
pattern_type: TEXT
confidence: REAL
suggested_action: TEXT
created_at: INTEGER
user_response: TEXT (ACCEPTED, REJECTED, PENDING)
}
5.4. Retencion de Datos¶
| Tipo de Dato | Retencion | Razon |
|---|---|---|
| Eventos de respuesta | 90 dias | Calculo de patrones |
| Patrones detectados | Indefinido | Personalizacion |
| Sugerencias aceptadas | Indefinido | Configuracion |
| Sugerencias rechazadas | 30 dias | Evitar repeticion |
6. Disponibilidad por Tier¶
| Funcionalidad | Free | Pro | Perfect |
|---|---|---|---|
| Alertas estandar | Si | Si | Si |
| Deteccion de patrones | No | Basico | Completo |
| Sugerencias de horario | No | Si | Si |
| Alertas predictivas | No | No | Si |
| Dashboard de insights | No | Basico | Completo |
| Optimizacion de entrega | No | Si | Si |
6.1. Detalle por Tier¶
Free: Alertas a hora fija configurada manualmente. Sin aprendizaje.
Pro:
- Deteccion de patron de horario
- Sugerencias de ajuste de hora
- Optimizacion basica de momento de entrega
Perfect:
- Todos los patrones (horario, dia problematico, respuesta lenta)
- Alertas predictivas
- Dashboard completo de insights
- Optimizacion avanzada multi-factor
7. Modelo de Machine Learning¶
7.1. Arquitectura (Perfect Tier)¶
graph TB
subgraph Modelo["MODELO DE PREDICCION LOCAL"]
direction TB
subgraph Config["Configuración"]
FW[Framework: TensorFlow Lite / CoreML]
TIPO[Tipo: Clasificador binario]
SIZE[Tamaño: < 500KB]
MODEL[Modelo: Random Forest ligero]
end
subgraph IO["Input/Output"]
INPUT[Input: Features de contexto]
OUTPUT[Output: Probabilidad de omisión]
end
subgraph Features["Features Total: 12"]
F1[dia_semana<br/>one-hot, 7]
F2[hora_del_dia<br/>normalizado, 1]
F3[dias_desde_ultima_omision<br/>1]
F4[racha_actual<br/>1]
F5[tasa_omision_historica<br/>1]
F6[tiempo_respuesta_promedio<br/>1]
end
INPUT --> Features
Features --> OUTPUT
end
7.2. Entrenamiento¶
| Aspecto | Valor |
|---|---|
| Entrenamiento | On-device, incremental |
| Datos minimos | 14 dias de uso |
| Re-entrenamiento | Semanal automatico |
| Validacion | 20% holdout de datos recientes |
7.3. Metricas de Evaluacion¶
| Metrica | Objetivo | Accion si no cumple |
|---|---|---|
| Precision (omision) | > 70% | No enviar alertas predictivas |
| Recall (omision) | > 60% | Bajar umbral de riesgo |
| False positive rate | < 20% | Subir umbral de confianza |
8. Integracion con Otros Modulos¶
8.1. MTS-ALT-001 (Alertas)¶
- Notificaciones inteligentes extienden el sistema de alertas base
- Respetan configuracion de horarios de silencio
- Usan mismos canales de notificacion (push, local)
8.2. MTS-ADH-001 (Adherencia)¶
- Recibe datos de tomas para calcular patrones
- Alimenta dashboard de insights
- Rachas afectan predicciones
8.3. MTS-GAM-001 (Gamificacion)¶
- Alertas preventivas mencionan rachas activas
- Logros por mejorar en dias problematicos
- Insights muestran progreso
9. Criterios de Aceptacion¶
| ID | Criterio |
|---|---|
| AC-NTF-001 | Sistema detecta patron de horario con 14+ dias de datos |
| AC-NTF-002 | Sugerencias solo aparecen con confianza > 80% |
| AC-NTF-003 | Usuario puede aceptar/rechazar sugerencias |
| AC-NTF-004 | Sugerencia rechazada no reaparece por 30 dias |
| AC-NTF-005 | Alertas predictivas se envian 30-60 min antes |
| AC-NTF-006 | Dashboard muestra patrones detectados |
| AC-NTF-007 | Datos de patrones permanecen en dispositivo |
| AC-NTF-008 | Usuario puede desactivar notificaciones inteligentes |
| AC-NTF-009 | Precision de prediccion de omision > 70% |
| AC-NTF-010 | Sistema funciona offline (calculo local) |
10. Reglas de Negocio Consolidadas¶
| ID | Regla | Garantia OFFLINE |
|---|---|---|
| RN-NTF-001 | Minimo 14 dias de datos para generar patrones | Local |
| RN-NTF-002 | Minimo 10 tomas de un medicamento para patron especifico | Local |
| RN-NTF-003 | Patrones se recalculan semanalmente | Local |
| RN-NTF-004 | Datos de patrones nunca salen del dispositivo | 100% OFFLINE |
| RN-NTF-005 | Toggle on/off no afecta alertas basicas (OBS-066) | Local |
| RN-NTF-006 | Todo procesamiento ocurre en dispositivo (OBS-066) | 100% OFFLINE |
| RN-NTF-010 | Sugerencias solo con confianza > 80% | Local |
| RN-NTF-011 | Maximo 1 sugerencia por dia | Local |
| RN-NTF-012 | Sugerencia rechazada no se repite por 30 dias | Local |
| RN-NTF-013 | Usuario puede desactivar sugerencias | Toggle |
| RN-NTF-014 | Sugerencias se muestran en momento no intrusivo | Local |
| RN-NTF-020 | Alertas predictivas solo si riesgo > 60% | ML Local |
| RN-NTF-021 | Maximo 1 alerta predictiva por dia por medicamento | Local |
| RN-NTF-022 | Alerta predictiva se envia 30-60 min antes | Local |
| RN-NTF-023 | No enviar alerta predictiva si toma ya confirmada | Local |
| RN-NTF-030 | Sin dependencia de servidor para notificaciones (OBS-066) | 100% OFFLINE |
11. Referencias¶
- ACL7-009: Decision de Notificaciones Inteligentes
- MTS-ALT-001: Alertas y Notificaciones
- MTS-ADH-001: Adherencia
- MTS-GAM-001: Gamificacion
Documento generado por SpecQueen - "La resistencia es futil. Tu especificacion sera perfecta... o no sera."