Saltar a contenido

Modulo de Backup, Sincronizacion y Recuperacion

Identificador: MTS-BCK-001 Version: 2.0.0 Fecha de ultima actualizacion: 2025-12-05 Estado: Aprobado Autor: SpecQueen Revisores: Director del Proyecto


1. Historial de Versiones

Version Fecha Autor Cambios
2.0.0 2025-12-05 SpecQueen OBS-059: 4 roles con permisos diferenciados, backup incremental tiempo real Pro/Perfect, diferenciacion clara de mecanismos
1.1.0 2025-12-05 SpecQueen Iteracion 13: RPO/RTO definidos, estrategias de merge
1.0.0 2025-12-01 SpecQueen Version inicial con ACL6-003/004/005

2. Proposito

Este modulo especifica los mecanismos de respaldo, sincronizacion y recuperacion de datos para MedTime V1.0. Define cuatro conceptos distintos que no deben confundirse:

Concepto Descripcion Disponibilidad
Backup Manual Exportacion a archivo .medtime para almacenamiento externo Todos los tiers
Sync Cloud Sincronizacion automatica en tiempo real con Firebase Pro/Perfect
Backup Servidor Estrategia de respaldos en infraestructura Firebase Automatico (transparente)
Retencion Politica de versiones y tiempo de conservacion Por tier

2.1. Arquitectura V1.0: Firebase como Backend

ARQUITECTURA DE DATOS V1.0:

+------------------+     +------------------+     +------------------+
|   DISPOSITIVO    |     |  FIREBASE        |     |  BACKUP EXTERNO  |
|   (Local)        |     |  (Cloud)         |     |  (Usuario)       |
+------------------+     +------------------+     +------------------+
|                  |     |                  |     |                  |
| SQLite local     |<--->| Firestore        |     | .medtime file    |
| (datos cifrados) |     | (blobs cifrados) |     | (iCloud, Drive)  |
| Keychain/Store   |     | Cloud Storage    |     | USB, email       |
|                  |     | (imagenes)       |     |                  |
+------------------+     +------------------+     +------------------+
       |                        |                        ^
       |   Sync en tiempo real  |                        |
       +------------------------+         Export manual --+
               Pro/Perfect

NOTA: Todos los datos en Firebase estan cifrados E2E.
Firebase almacena "blobs opacos" que no puede descifrar.

3. Actores y Roles

3.1. Los 4 Roles y sus Permisos de Backup

Rol Codigo Puede Exportar Puede Sincronizar Datos que Respalda
Paciente Independiente PI Si (propios) Segun tier Sus propios datos
Paciente Dependiente PD No N/A Gestionado por CR
Cuidador Solidario CS No No No tiene datos propios de pacientes
Cuidador Responsable CR Si (propios + PD) Segun tier Sus datos + todos sus PD

3.2. Permisos Detallados por Rol

Funcion PI PD CS CR
Crear backup manual propio Si No No Si
Exportar datos de dependientes N/A N/A No Si
Restaurar backup propio Si N/A No Si
Ver historial de backups Si No No Si
Configurar sync cloud Si (Pro/Perfect) N/A N/A Si (Pro/Perfect)

3.3. Reglas de Negocio de Backup por Rol

Regla Descripcion
RN-BCK-001 Un CSno puede exportar ni respaldar datos de los PI a los que esta vinculado
RN-BCK-002 Un CR puede exportar un backup que incluye sus datos Y los de todos sus PD
RN-BCK-003 Un PD no tiene acceso a funciones de backup; todo es gestionado por su CR
RN-BCK-004 Al restaurar backup de CR, se restauran automaticamente los perfiles de todos los PD incluidos

4. Backup Manual (Exportacion .medtime)

4.1. Disponibilidad por Tier

Aspecto Free Pro Perfect
Exportar backup manual Si Si Si
Frecuencia maxima Sin limite Sin limite Sin limite
Cifrado AES-256 + password usuario AES-256 + Master Key AES-256 + Master Key
Incluye imagenes Si (comprimidas) Si Si (calidad original)
Tamano maximo Depende del dispositivo Depende del dispositivo Depende del dispositivo

4.2. Flujo de Backup Manual

sequenceDiagram
    participant U as Usuario (PI o CR)
    participant A as App MedTime
    participant FS as File System

    U->>A: Ir a Configuracion > Backup
    A->>U: Mostrar opciones de backup

    U->>A: Seleccionar "Crear Backup Manual"
    A->>U: Mostrar resumen de datos a incluir

    alt Tier Free
        A->>U: Solicitar password de cifrado
        U->>A: Ingresar y confirmar password
    else Tier Pro/Perfect
        A->>A: Usar Master Key automaticamente
        A->>U: Opcion de agregar password adicional
    end

    A->>A: Recopilar datos locales
    A->>A: Comprimir con gzip
    A->>A: Cifrar con AES-256-GCM
    A->>A: Generar checksum SHA-256

    A->>U: Seleccionar destino
    U->>A: Elegir destino (Files, iCloud, Share)
    A->>FS: Guardar archivo .medtime
    A->>U: Confirmar backup completado

4.3. Formato del Archivo .medtime

Nombre: medtime_backup_[YYYYMMDD]_[HHmm]_[hash8].medtime

Ejemplo: medtime_backup_20251205_1430_a7f2b9c3.medtime

Estructura interna (ZIP cifrado):

medtime_backup.medtime
├── manifest.json          # Metadatos del backup (NO cifrado)
├── profile.enc            # Perfil del usuario (cifrado)
├── medications.enc        # Lista de medicamentos (cifrado)
├── doses_history.enc      # Historial de tomas (cifrado)
├── prescriptions.enc      # Recetas digitalizadas (cifrado)
├── health_events.enc      # Eventos de salud (cifrado)
├── appointments.enc       # Citas medicas (cifrado)
├── settings.enc           # Configuracion (cifrado)
├── dependents/            # Solo para CR
│   ├── dependent_1.enc    # Perfil PD 1 (cifrado)
│   ├── dependent_2.enc    # Perfil PD 2 (cifrado)
│   └── ...
├── images/                # Imagenes cifradas
│   ├── rx_001.enc.jpg
│   ├── treatment_001.enc.jpg
│   └── ...
└── checksum.sha256        # Hash de verificacion

4.4. Contenido de manifest.json

{
  "format_version": "2.0",
  "app_version": "1.0.0",
  "created_at": "2025-12-05T14:30:00Z",
  "created_by_role": "CR",
  "tier_at_creation": "Pro",
  "encryption": {
    "algorithm": "AES-256-GCM",
    "key_derivation": "Argon2id",
    "has_user_password": true
  },
  "contents": {
    "profile": true,
    "medications": true,
    "doses_history": true,
    "prescriptions": true,
    "health_events": true,
    "appointments": true,
    "settings": true,
    "dependents_count": 2
  },
  "statistics": {
    "medications_active": 5,
    "medications_historical": 12,
    "doses_count": 1847,
    "prescriptions_count": 8,
    "health_events_count": 156,
    "appointments_count": 23,
    "images_count": 15,
    "total_size_bytes": 15728640
  },
  "checksum": "sha256:a7f2b9c3d4e5f6..."
}

5. Sincronizacion Cloud (Pro/Perfect)

5.1. Diferencia entre Sync y Backup

Aspecto Sync Cloud Backup Manual
Proposito Mantener datos actualizados entre dispositivos Respaldo externo para emergencias
Frecuencia Tiempo real / continuo Bajo demanda
Destino Firebase (controlado por MedTime) Usuario elige (iCloud, Drive, USB)
Cifrado E2E con Master Key E2E con password usuario
Restauracion Automatica al iniciar sesion Manual, requiere archivo

5.2. Mecanismo de Sync por Tier

Tier Sync Cloud Frecuencia Incrementalidad
Free No disponible N/A N/A
Pro Si Cada cambio + batch cada 5 min Incremental
Perfect Si Tiempo real (< 1 segundo) Incremental en tiempo real

5.3. Sync Incremental en Tiempo Real (Perfect)

OBS-059: Los usuarios Perfect tienen sincronizacion incremental en tiempo real.

sequenceDiagram
    participant D1 as Dispositivo 1
    participant FS as Firestore
    participant D2 as Dispositivo 2

    Note over D1,D2: Sync Incremental en Tiempo Real (Perfect)

    D1->>D1: Usuario registra toma
    D1->>D1: Cifrar cambio localmente
    D1->>FS: Enviar delta cifrado
    FS-->>D2: Push notification
    D2->>FS: Solicitar delta
    FS->>D2: Enviar delta cifrado
    D2->>D2: Descifrar y aplicar cambio

    Note over D1,D2: Latencia tipica: < 2 segundos

5.4. Sync por Lotes (Pro)

sequenceDiagram
    participant D as Dispositivo
    participant Q as Cola Local
    participant FS as Firestore

    Note over D,FS: Sync por Lotes (Pro)

    D->>Q: Cambio 1 (registrar toma)
    D->>Q: Cambio 2 (editar medicamento)
    D->>Q: Cambio 3 (nueva medicion)

    Note over Q: Esperar 5 minutos o 10 cambios

    Q->>Q: Consolidar cambios
    Q->>Q: Cifrar batch
    Q->>FS: Enviar batch cifrado

    FS->>FS: Almacenar
    FS-->>D: Confirmar sync

5.5. Recovery Objectives

Metrica Free Pro Perfect
RPO (Recovery Point Objective) N/A (solo local) 5 minutos < 1 minuto
RTO (Recovery Time Objective) N/A 4 horas 1 hora
Maxima perdida de datos Todo si pierde dispositivo 5 min de cambios Casi nada

6. Estrategia de Respaldos en Servidor

6.1. Backups Automaticos de Firebase (Transparente)

Esta seccion describe los backups que MedTime realiza de la infraestructura Firebase, no backups visibles al usuario.

Aspecto Configuracion
Backup de Firestore Diario automatico via Firebase
Backup de Cloud Storage Replicacion geografica activa
Retencion 30 dias (estandar Firebase)
Ubicacion Multi-region Americas
Cifrado en reposo AES-256 (gestionado por Google)

6.2. Nota sobre Zero-Knowledge

IMPORTANTE: Aunque Firebase realiza backups, los datos estan cifrados E2E. Un backup de Firebase contiene "blobs opacos" que no pueden descifrarse sin la Master Key del usuario.


7. Politica de Retencion

7.1. Retencion de Versiones en Cloud

Aspecto Free Pro Perfect
Sync cloud N/A Si Si
Versiones almacenadas N/A 7 versiones 14 versiones
Tiempo de retencion N/A 30 dias 90 dias
Recuperacion selectiva N/A Si Si
Point-in-time recovery N/A No Si (ultimos 7 dias)

7.2. Historial de Cambios (Versionado)

Para Pro/Perfect, cada entidad mantiene historial de versiones:

{
  "medication_id": "med_abc123",
  "current_version": 5,
  "versions": [
    {
      "version": 5,
      "timestamp": "2025-12-05T14:30:00Z",
      "action": "UPDATE",
      "changes": ["dosage", "schedule"],
      "blob_encrypted": "base64..."
    },
    {
      "version": 4,
      "timestamp": "2025-12-04T10:15:00Z",
      "action": "UPDATE",
      "changes": ["name"],
      "blob_encrypted": "base64..."
    }
  ]
}

8. Restauracion de Datos

8.1. Metodos de Restauracion por Tier

Metodo Free Pro Perfect
Desde archivo .medtime Si Si Si
Desde cloud (nuevo dispositivo) No Si Si
Version anterior especifica No Si Si
Point-in-time No No Si

8.2. Flujo de Restauracion desde Archivo

sequenceDiagram
    participant U as Usuario
    participant A as App MedTime
    participant FS as File System

    U->>A: Ir a Configuracion > Backup > Restaurar
    A->>U: Seleccionar origen del backup
    U->>FS: Seleccionar archivo .medtime
    FS->>A: Cargar archivo

    A->>A: Verificar checksum

    alt Checksum invalido
        A->>U: Error: Archivo corrupto
    else Checksum valido
        A->>A: Leer manifest.json
        A->>U: Mostrar resumen del backup
        A->>U: Solicitar password de descifrado
        U->>A: Ingresar password
        A->>A: Derivar clave con Argon2id
        A->>A: Intentar descifrar

        alt Descifrado fallido
            A->>U: Error: Password incorrecta
        else Descifrado exitoso
            A->>U: Seleccionar estrategia de merge
            U->>A: Elegir estrategia
            A->>A: Aplicar restauracion
            A->>U: Restauracion completada
        end
    end

8.3. Estrategias de Merge

Estrategia Descripcion Caso de Uso
Reemplazar todo Borra datos actuales, usa solo backup Nuevo dispositivo, datos locales corruptos
Combinar (preferir backup) Merge, en conflicto usa backup Restaurar desde backup mas reciente
Combinar (preferir local) Merge, en conflicto usa local Recuperar items especificos de backup viejo
Solo agregar Agrega items que no existen localmente Recuperar medicamentos eliminados

8.4. Resolucion de Conflictos

flowchart TD
    A[Item en backup y local] --> B{Mismo ID?}
    B -->|No| C[Agregar como nuevo]
    B -->|Si| D{Cual es mas reciente?}

    D -->|Backup| E{Estrategia?}
    D -->|Local| F{Estrategia?}
    D -->|Igual| G[Sin conflicto]

    E -->|Preferir backup| H[Usar backup]
    E -->|Preferir local| I[Usar local]

    F -->|Preferir backup| H
    F -->|Preferir local| I

    H --> J[Registrar en log de merge]
    I --> J
    C --> J
    G --> J

9. Migracion entre Dispositivos

9.1. Metodos de Migracion por Tier

Metodo Free Pro Perfect
Via archivo .medtime Si Si Si
Via login cloud No Si Si
Via QR local (futuro v1.5) No No No

9.2. Migracion Free (Via Archivo)

sequenceDiagram
    participant D1 as Dispositivo Antiguo
    participant E as Almacenamiento Externo
    participant D2 as Dispositivo Nuevo

    Note over D1: Dispositivo a reemplazar

    D1->>D1: Crear backup manual
    D1->>E: Exportar .medtime a iCloud/Drive/USB

    Note over D2: Nuevo dispositivo

    D2->>D2: Instalar MedTime
    D2->>D2: Seleccionar "Restaurar backup"
    D2->>E: Seleccionar archivo .medtime
    E->>D2: Cargar archivo
    D2->>D2: Ingresar password
    D2->>D2: Restaurar datos
    D2->>D2: Configurar nuevo PIN

9.3. Migracion Pro/Perfect (Via Cloud)

sequenceDiagram
    participant D1 as Dispositivo Antiguo
    participant F as Firebase
    participant D2 as Dispositivo Nuevo

    Note over D1: Dispositivo a reemplazar (opcional)

    D2->>D2: Instalar MedTime
    D2->>D2: Seleccionar tier Pro/Perfect
    D2->>F: Login con Google/Apple
    F->>D2: Autenticar

    alt Tier Perfect
        D2->>D2: Verificar MFA
    end

    D2->>F: Solicitar datos
    F->>D2: Enviar blobs cifrados
    D2->>D2: Descifrar con Master Key
    D2->>D2: Datos restaurados

    Note over D2: Listo para usar

10. Recuperacion de Cuenta

10.1. Escenarios de Recuperacion por Tier

Escenario Free Pro Perfect
Olvido de PIN Reinicio (pierde datos) Reset via Firebase Reset + MFA
Perdida de dispositivo Datos perdidos* Restaurar de cloud Restaurar de cloud
Olvido de password (backup) Datos de backup perdidos N/A N/A

*Si tiene archivo .medtime guardado externamente, puede restaurar

10.2. Niveles de Recuperacion (Pro/Perfect)

Nivel Metodo Tiempo Disponibilidad
1 Email de verificacion Inmediato Pro/Perfect
2 SMS de verificacion Inmediato Pro/Perfect
3 Recovery Key (24 palabras) Inmediato Perfect
4 Soporte manual 24-72 horas Pro/Perfect

10.3. Flujo de Recuperacion con Recovery Key (Perfect)

sequenceDiagram
    participant U as Usuario
    participant A as App MedTime
    participant F as Firebase

    U->>A: Seleccionar "Recuperar cuenta"
    A->>U: Mostrar opciones de recuperacion
    U->>A: Seleccionar "Recovery Key"
    A->>U: Solicitar las 24 palabras
    U->>A: Ingresar palabras BIP-39

    A->>A: Derivar Master Key de palabras
    A->>F: Verificar contra hash almacenado

    alt Verificacion exitosa
        F->>A: Confirmar identidad
        A->>U: Configurar nuevo password
        A->>U: Configurar nuevo MFA
        A->>A: Re-derivar Master Key
        A->>U: Cuenta recuperada
    else Verificacion fallida
        A->>U: Error: Recovery Key incorrecta
    end

11. Reglas de Negocio

Regla Descripcion
RN-BCK-010 Backup manual no puede exceder 500MB por archivo
RN-BCK-011 Sync cloud requiere al menos 10% de bateria
RN-BCK-012 Sync Pro espera WiFi si archivo > 50MB
RN-BCK-013 Sync Perfect usa cualquier conexion (datos o WiFi)
RN-BCK-014 Restauracion siempre pide confirmacion antes de modificar datos
RN-BCK-015 Un CR que restaura backup restaura todos sus PD automaticamente
RN-BCK-016 Password de backup tiene minimo 8 caracteres
RN-BCK-017 Despues de 5 intentos fallidos de password, esperar 15 minutos

12. Consideraciones de Seguridad

12.1. Cifrado

Capa Algoritmo Notas
Archivo .medtime AES-256-GCM Password derivada con Argon2id
Transporte TLS 1.3 Conexion a Firebase
Datos en Firebase AES-256-GCM Cifrado E2E con Master Key
Imagenes AES-256-GCM Mismo cifrado que datos

12.2. Proteccion de Claves

Componente Almacenamiento
Master Key Keychain (iOS) / Keystore (Android)
Recovery Key Nunca almacenada digitalmente (usuario guarda en papel)
Password de backup Nunca almacenada (usuario debe recordar)
Salt Almacenado con datos cifrados

12.3. Zero-Knowledge en Backups

PRINCIPIO ZERO-KNOWLEDGE EN BACKUPS:

1. Firebase almacena blobs cifrados
2. Las claves de cifrado NUNCA salen del dispositivo
3. Un backup de Firebase es inutil sin Master Key
4. MedTime (empresa) no puede acceder a datos de usuarios
5. Archivo .medtime es inutil sin password del usuario

13. Integracion con Otros Modulos

Modulo Integracion
MTS-AUTH-001 Master Key derivada de credenciales
MTS-PRI-001 Consentimiento para sync cloud
MTS-SEC-001 Algoritmos de cifrado
MTS-ONB-001 Configuracion inicial de backup

14. Criterios de Aceptacion

14.1. Backup Manual

  • Usuario puede crear archivo .medtime con password
  • Archivo incluye todos los datos del usuario
  • CR puede exportar datos de todos sus PD
  • CS no tiene acceso a funciones de backup

14.2. Sync Cloud

  • Pro sincroniza cada 5 minutos o 10 cambios
  • Perfect sincroniza en tiempo real
  • Sync funciona offline (encola cambios)
  • Conflictos se resuelven segun estrategia seleccionada

14.3. Restauracion

  • Archivo .medtime se puede restaurar en nuevo dispositivo
  • Pro/Perfect restauran automaticamente al hacer login
  • Estrategias de merge funcionan correctamente
  • Checksum invalido muestra error claro

15. Glosario

Termino Definicion
.medtime Formato de archivo de backup exportable de MedTime
RPO Recovery Point Objective - maxima perdida de datos aceptable
RTO Recovery Time Objective - tiempo maximo para restaurar servicio
Sync Sincronizacion continua de datos entre dispositivos
Backup Copia de seguridad en un momento especifico
Master Key Clave criptografica derivada de credenciales del usuario
Recovery Key 24 palabras BIP-39 para recuperar cuenta Perfect
Zero-Knowledge Arquitectura donde el servidor no puede ver datos

Documento generado por SpecQueen - "Tus datos son tu activo mas valioso. Esta especificacion los protege como se merecen."