Saltar a contenido

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

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


Documento generado por SpecQueen - "La resistencia es futil. Tu especificacion sera perfecta... o no sera."