- Investigacion: Anonimizacion de Efectos Secundarios Reportados
- 1. Resumen Ejecutivo
- 2. Tipos de Efectos Secundarios
- 3. Datos que SI se Envian (Anonimizados)
- 4. Datos que NUNCA se Envian
- 5. Tecnicas de Anonimizacion
- 6. Umbrales de Seguridad
- 7. Flujo de Anonimizacion
- 8. Validacion y Auditoria
- 9. Farmacovigilancia
- 10. Cumplimiento Regulatorio
- 11. Referencias
Investigacion: Anonimizacion de Efectos Secundarios Reportados¶
Identificador: MTS-INV-014 Version: 1.0.0 Fecha: 2025-12-07 Autor: SpecQueen Solicitado por: Director del Proyecto Estado: Completado
1. Resumen Ejecutivo¶
Esta investigacion define el proceso de anonimizacion para efectos secundarios que los usuarios reportan sobre medicamentos, permitiendo enriquecer el catalogo de efectos secundarios sin comprometer la privacidad.
1.1. Riesgo Elevado - PHI Directo¶
ADVERTENCIA: Los efectos secundarios son datos dePHI DIRECTO con alto riesgo de re-identificacion. Un efecto secundario raro + medicamento especifico puede identificar a un individuo.
Ejemplo de riesgo: "Hemorragia gastrointestinal masiva con Imatinib" es tan especifico que puede identificar a una persona en una region.
1.2. Concepto Clave: Supresion Agresiva + Generalizacion¶
A diferencia de otros datos anonimizados, los efectos secundarios requieren:
- Supresion agresiva: Solo reportar si >= 1000 usuarios reportan el mismo efecto
- Generalizacion de efectos: "Nausea severa" → "Malestar gastrointestinal"
- Differential Privacy: Agregar ruido (15% falsos positivos) para proteccion adicional
1.3. Consentimiento Obligatorio¶
IMPORTANTE: Para usuarios CON cuenta, el consentimiento para el tratamiento de datos anonimizados es OBLIGATORIO y requisito para usar la aplicacion (no es opt-in).
2. Tipos de Efectos Secundarios¶
2.1. Clasificacion por Severidad¶
| Severidad | Ejemplos | Frecuencia Tipica | Riesgo Identificacion |
|---|---|---|---|
| Leve | Nausea, dolor de cabeza, fatiga | Alta (>10% usuarios) | Bajo |
| Moderado | Rash, insomnio, mareos | Media (1-10% usuarios) | Medio |
| Severo | Hemorragia, anafilaxia, hepatotoxicidad | Baja (<1% usuarios) | ALTO |
| Grave | Infarto, paro cardiaco, muerte | Muy baja (<0.1%) | CRITICO |
2.2. Clasificacion por Sistema Afectado¶
| Sistema | Ejemplos | Tratamiento Anonimizacion |
|---|---|---|
| Gastrointestinal | Nausea, vomito, diarrea | Generalizar a "GI" |
| Neurologico | Cefalea, mareos, convulsiones | Generalizar a "Neurologico" |
| Cardiovascular | Palpitaciones, hipotension | Generalizar a "Cardiovascular" |
| Dermatologico | Rash, urticaria, fotosensibilidad | Generalizar a "Dermatologico" |
| Hematologico | Anemia, trombocitopenia | Suprimir (muy especifico) |
| Hepatico | Hepatotoxicidad, ictericia | Suprimir (muy especifico) |
| Renal | Nefrotoxicidad | Suprimir (muy especifico) |
3. Datos que SI se Envian (Anonimizados)¶
3.1. Estructura de Datos¶
interface EfectoSecundarioAnonimo {
// Token efimero (no vinculado a usuario)
session_token: string; // 32 bytes, nuevo cada sesion
// Medicamento (SI se envia especifico)
medicamento: string; // "Metformina" (nombre generico preferido)
dosis_rango: string; // "500-1000 mg" (bucketing)
// Efecto secundario (GENERALIZADO)
efecto_categoria: string; // "Gastrointestinal" (NO "diarrea severa")
severidad: string; // "LEVE" | "MODERADO" (NO "severo")
// Metadata minima
region: string; // "Mexico" (pais, NO region especifica)
periodo: string; // "2025-Q4" (trimestre, NO mes)
rango_edad: string; // "40-60" (rangos amplios)
}
3.2. Lo que SI se Reporta¶
| Dato | Ejemplo Original | Ejemplo Anonimizado |
|---|---|---|
| Medicamento | "Metformina 850mg" | "Metformina" (sin dosis exacta) |
| Efecto | "Diarrea severa con sangre" | "Gastrointestinal" |
| Severidad | "Severo - hospitalizado" | NO SE REPORTA |
| Duracion | "5 dias" | NO SE REPORTA |
| Region | "CDMX" | "Mexico" (pais) |
| Fecha | "2025-12-07" | "2025-Q4" (trimestre) |
4. Datos que NUNCA se Envian¶
| Dato | Razon |
|---|---|
| user_id, email, device_id, IP | Identificadores directos |
| Efecto especifico (ej: "diarrea") | Puede ser unico con medicamento |
| Severidad "Severo" o "Grave" | Efectos raros son identificables |
| Duracion exacta | Puede ser unica |
| Medico que prescribio | PHI de tercero |
| Diagnostico asociado | PHI directo |
| Notas del usuario | Texto libre puede contener PHI |
| Timestamp exacto | Permite correlacion |
| Region especifica | Reduce anonimato |
5. Tecnicas de Anonimizacion¶
5.1. Supresion Agresiva¶
Los efectos secundarios requieren umbrales MUY altos para reportar:
# PSEUDOCODIGO - Supresion agresiva
UMBRAL_EFECTO = 1000 # Minimo 1000 usuarios con mismo efecto+medicamento
UMBRAL_SEVERO = float('inf') # NUNCA reportar efectos severos/graves
def debe_reportar_efecto(medicamento: str, efecto: str, severidad: str) -> bool:
# Efectos severos/graves NUNCA se reportan
if severidad in ["SEVERO", "GRAVE"]:
return False
# Verificar frecuencia global
freq = obtener_frecuencia(medicamento, efecto)
return freq >= UMBRAL_EFECTO
5.2. Generalizacion Jerarquica¶
Los efectos se generalizan a categorias del sistema afectado:
GENERALIZACION_EFECTOS = {
# Gastrointestinal
"nausea": "Gastrointestinal",
"vomito": "Gastrointestinal",
"diarrea": "Gastrointestinal",
"dolor abdominal": "Gastrointestinal",
"constipacion": "Gastrointestinal",
# Neurologico
"cefalea": "Neurologico",
"mareos": "Neurologico",
"somnolencia": "Neurologico",
"insomnio": "Neurologico",
# Cardiovascular
"palpitaciones": "Cardiovascular",
"hipotension": "Cardiovascular",
"taquicardia": "Cardiovascular",
# Dermatologico
"rash": "Dermatologico",
"prurito": "Dermatologico",
"urticaria": "Dermatologico",
# Musculoesqueletico
"mialgia": "Musculoesqueletico",
"artralgia": "Musculoesqueletico",
# General
"fatiga": "General",
"malestar": "General",
}
def generalizar_efecto(efecto_especifico: str) -> str:
return GENERALIZACION_EFECTOS.get(efecto_especifico.lower(), "Otro")
5.3. Differential Privacy (Randomized Response)¶
Para proteccion adicional, se agregan "falsos positivos" controlados:
# PSEUDOCODIGO - Randomized Response
EPSILON = 2.0 # Parametro de privacidad
P_REAL = exp(EPSILON) / (1 + exp(EPSILON)) # ~0.88
def aplicar_differential_privacy(reportar: bool) -> bool:
"""
Con 88% probabilidad reporta valor real.
Con 12% probabilidad reporta valor aleatorio.
"""
if random() < P_REAL:
return reportar # Valor real
else:
return random_bool() # Valor aleatorio (ruido)
Efecto: El servidor recibe ~12% de falsos positivos/negativos, haciendo imposible saber con certeza si un usuario especifico reporto un efecto.
6. Umbrales de Seguridad¶
6.1. Umbrales por Severidad¶
| Severidad | Umbral k-anonymity | Accion |
|---|---|---|
| Leve | >= 1000 | Reportar generalizado |
| Moderado | >= 2000 | Reportar generalizado |
| Severo | INFINITO | NUNCA reportar |
| Grave | INFINITO | NUNCA reportar |
6.2. Combinaciones Prohibidas¶
Ciertas combinaciones NUNCA se reportan por alto riesgo:
| Medicamento | Efecto | Razon |
|---|---|---|
| Antirretrovirales | Cualquiera | Revela VIH |
| Quimioterapicos | Cualquiera | Revela cancer |
| Psiquiatricos | Cualquiera | Revela salud mental |
| Inmunosupresores | Cualquiera | Revela transplante/autoinmune |
6.3. Regiones con Restriccion¶
Para regiones con < 100,000 usuarios activos, todos los efectos se agregan a nivel nacional:
def obtener_region(usuario_region: str, usuarios_region: int) -> str:
if usuarios_region < 100000:
return "Mexico" # Agregar a nacional
return generalizar_region(usuario_region)
7. Flujo de Anonimizacion¶
DISPOSITIVO SERVIDOR
+---------------------------+ +---------------------------+
| Usuario reporta: | | |
| Medicamento: Metformina | | |
| Efecto: Diarrea severa | | |
| Severidad: Moderado | | |
| Duracion: 3 dias | | |
| Region: Monterrey | | |
+------------+--------------+ | |
| | |
v | |
+---------------------------+ | |
| ANONIMIZADOR LOCAL | | |
| | | |
| 1. Verificar medicamento | | |
| ¿Es sensible? | | |
| Metformina → OK | | |
| | | |
| 2. Generalizar efecto | | |
| "Diarrea severa" → | | |
| "Gastrointestinal" | | |
| | | |
| 3. Verificar severidad | | |
| "Moderado" → OK | | |
| (Severo → NO reportar) | | |
| | | |
| 4. Verificar k-anonymity | | |
| Metformina+GI >= 1000? | | |
| SI → Continuar | | |
| | | |
| 5. Aplicar DP (12% ruido) | | |
| | | |
| 6. Generalizar region | | |
| "Monterrey" → "Mexico" | | |
| | | |
| 7. Generalizar tiempo | | |
| "2025-12" → "2025-Q4" | | |
+------------+--------------+ | |
| | |
v v |
+---------------------------+ +---------------------------+ |
| PAQUETE ANONIMO |---->| SERVIDOR RECIBE | |
| | | | |
| session_token: x9k2... | | NO SABE: | |
| medicamento: "Metformina" | | - Quien reporto | |
| efecto: "Gastrointestinal"| | - Efecto especifico | |
| severidad: "LEVE-MOD" | | - Si es real o ruido DP | |
| region: "Mexico" | | - Duracion | |
| periodo: "2025-Q4" | | - Region exacta | |
+---------------------------+ +---------------------------+ |
8. Validacion y Auditoria¶
8.1. Pruebas de Re-identificacion¶
Para efectos secundarios, el umbral es MAS ESTRICTO:
def test_reidentificacion_efectos(datos, conocimiento_auxiliar):
"""
Umbral: < 0.01% (10x mas estricto que otros datos)
"""
tasa = calcular_tasa_exito(datos, conocimiento_auxiliar)
assert tasa < 0.0001, f"Tasa muy alta: {tasa}"
8.2. Auditorias¶
| Tipo | Frecuencia | Responsable |
|---|---|---|
| Automatizada | Diaria | Sistema (verificar umbrales) |
| Interna | Semanal | Equipo Seguridad |
| Externa | Mensual | Auditor independiente |
| Regulatoria (COFEPRIS) | Semestral | Autoridad sanitaria |
9. Farmacovigilancia¶
9.1. Reportes a Autoridades¶
Los efectos secundarios graves se reportan a autoridades sanitarias SIN pasar por el sistema de anonimizacion de enriquecimiento:
FLUJO FARMACOVIGILANCIA (separado de enriquecimiento):
1. Usuario reporta efecto GRAVE
2. Sistema marca para revision manual
3. Equipo medico contacta usuario (consentimiento explicito)
4. Si procede, reporte a COFEPRIS con datos identificables
5. Este flujo es SEPARADO del enriquecimiento de catalogos
NOTA: Farmacovigilancia tiene requisitos legales diferentes.
No se anonimiza porque las autoridades NECESITAN identificar.
10. Cumplimiento Regulatorio¶
10.1. NOM-220-SSA1-2016¶
La Norma Oficial Mexicana de Farmacovigilancia requiere:
| Requisito | Cumplimiento |
|---|---|
| Reporte de sospechas RAM | Canal separado (no anonimizado) |
| Notificacion a COFEPRIS | Via oficial, no por enriquecimiento |
| Proteccion de identidad | Anonimizacion para catalogos |
10.2. HIPAA / LGPD / LFPDPPP¶
| Regulacion | Requisito | Cumplimiento |
|---|---|---|
| LFPDPPP | Datos sensibles de salud | Supresion agresiva + generalizacion |
| HIPAA | De-identification | Eliminacion identificadores + DP |
| LGPD | Anonimizacao | Datos no vinculables |
11. Referencias¶
11.1. Documentos MedTime¶
- INV-009: Consentimiento Datos de Salud
- INV-010: Anonimizacion de Medicamentos
- MTS-MED-001: Medicamentos
11.2. Normativas¶
- NOM-220-SSA1-2016 (Farmacovigilancia Mexico)
- ICH E2D (Post-approval safety data management)
- MedDRA (Medical Dictionary for Regulatory Activities)
Documento generado por SpecQueen - "Tus efectos secundarios seran anonimizados... con supresion agresiva."