Saltar a contenido

Investigacion: RxNorm API - Especificaciones e Integracion

Identificador: MTS-INV-004 Version: 1.0.0 Fecha: 2025-12-02 Autor: SpecQueen Solicitado en: GAP-KB-003 (Round 10) Estado: Completado


Resumen Ejecutivo

Investigacion tecnica de RxNorm API del NIH para normalizacion de medicamentos e integracion complementaria en MedTime. RxNorm es gratuita y proporciona un vocabulario estandarizado para medicamentos en Estados Unidos.

Conclusion Principal

Aspecto Evaluacion Notas
Costo Gratis Sin restricciones comerciales
Cobertura USA Medicamentos aprobados FDA
Normalizacion Excelente Estandar de la industria
Interacciones Buena ~100K pares
HIPAA Compatible Servicio federal

1. Descripcion de RxNorm

1.1 Que es RxNorm

RxNorm es un vocabulario normalizado para medicamentos clinicos producido por la National Library of Medicine (NLM) de Estados Unidos. Proporciona nombres estandarizados y codigos unicos para medicamentos.

Aspecto Valor
Mantenido por NIH/NLM
Pais Estados Unidos
Costo Gratuito
Licencia Publica (UMLS)
Actualizacion Semanal

1.2 Estructura de Codigos RxNorm

Tipo Descripcion Ejemplo
RxCUI Identificador unico 207106
IN Ingrediente Acetaminophen
PIN Ingrediente preciso Acetaminophen
SCDC Clinical Drug Component Acetaminophen 500 MG
SCD Clinical Drug Acetaminophen 500 MG Oral Tablet
GPCK Generic Pack ...
BPCK Brand Pack ...
SBD Branded Drug Tylenol 500 MG Oral Tablet

2. RxNav APIs Disponibles

2.1 Servicios de API

API Proposito URL Base
RxNorm Normalizacion rxnav.nlm.nih.gov/REST/rxcui
RxClass Clasificacion rxnav.nlm.nih.gov/REST/rxclass
Interaction Interacciones rxnav.nlm.nih.gov/REST/interaction
Prescribable Medicamentos activos rxnav.nlm.nih.gov/REST/Prescribe

2.2 Endpoints Principales

Normalizacion

Endpoint Descripcion Uso MedTime
/rxcui.json?name={name} Buscar por nombre Normalizar entrada usuario
/rxcui/{rxcui}/allinfo.json Info completa Enriquecer datos
/approximateTerm.json?term={term} Busqueda fuzzy Correccion errores
/rxcui/{rxcui}/related.json?tty=IN Ingredientes Deteccion interacciones

Interacciones

Endpoint Descripcion Uso MedTime
/interaction/list.json?rxcuis={list} Verificar lista Motor interacciones
/interaction/interaction.json?rxcui={rxcui} Una droga Consulta individual

2.3 Formato de Respuesta

{
  "interactionTypeGroup": [
    {
      "sourceDisclaimer": "DrugBank is intended for...",
      "sourceName": "DrugBank",
      "interactionType": [
        {
          "minConceptItem": {
            "rxcui": "207106",
            "name": "aspirin",
            "tty": "IN"
          },
          "interactionPair": [
            {
              "interactionConcept": [
                {
                  "minConceptItem": {
                    "rxcui": "11289",
                    "name": "warfarin",
                    "tty": "IN"
                  }
                }
              ],
              "severity": "high",
              "description": "Aspirin may increase the anticoagulant..."
            }
          ]
        }
      ]
    }
  ]
}

3. Limites y Restricciones

3.1 Rate Limiting

Aspecto Valor
Requests/segundo 20
Daily limit No especificado
Throttling Si (429 responses)

3.2 Consideraciones de Uso

Restriccion Detalle
Solo USA Medicamentos aprobados FDA
Sin imagenes Solo datos textuales
Sin precios No incluye informacion de costos
Latencia 100-500ms tipico

4. Integracion en MedTime

4.1 Casos de Uso

Caso API Prioridad
Normalizar nombre medicamento RxNorm Alta
Busqueda fuzzy (errores) approximateTerm Alta
Verificar interacciones USA Interaction Media
Clasificar medicamento RxClass Baja

4.2 Flujo de Normalizacion

flowchart TD
    A[Usuario ingresa Tylenol] --> B[RxNorm: /rxcui?name=tylenol]
    B --> C{RxCUI encontrado?}
    C -->|Si| D[Obtener ingredientes]
    D --> E[Mapear a ID interno MedTime]
    C -->|No| F[Busqueda aproximada]
    F --> G{Sugerencias?}
    G -->|Si| H[Mostrar Did you mean?]
    G -->|No| I[Permitir medicamento personalizado]

4.3 Complemento a DrugBank

Fuente Rol Cuando Usar
RxNorm Normalizacion primaria Siempre (gratis)
DrugBank Interacciones detalladas Pro/Perfect
RxNorm Interaction Backup interacciones Si DrugBank no disponible

4.4 Implementacion Cache

RxNorm Cache Strategy:
-----------------------
1. Cache perpetuo para mapeos RxCUI -> nombre (no cambian)
2. Cache 7 dias para interacciones
3. Prefetch semanal de top 1000 medicamentos USA
4. Actualizar cache con release semanal de RxNorm

5. Codigo de Ejemplo

5.1 Buscar RxCUI por Nombre

import requests

def get_rxcui(drug_name: str) -> str | None:
    url = f"https://rxnav.nlm.nih.gov/REST/rxcui.json"
    params = {"name": drug_name}

    response = requests.get(url, params=params)
    data = response.json()

    if "idGroup" in data and "rxnormId" in data["idGroup"]:
        return data["idGroup"]["rxnormId"][0]
    return None

# Ejemplo
rxcui = get_rxcui("metformin")
print(f"RxCUI: {rxcui}")  # Output: RxCUI: 6809

5.2 Verificar Interacciones

def check_interactions(rxcui_list: list[str]) -> list[dict]:
    rxcuis = "+".join(rxcui_list)
    url = f"https://rxnav.nlm.nih.gov/REST/interaction/list.json"
    params = {"rxcuis": rxcuis}

    response = requests.get(url, params=params)
    data = response.json()

    interactions = []
    if "fullInteractionTypeGroup" in data:
        for group in data["fullInteractionTypeGroup"]:
            for itype in group.get("fullInteractionType", []):
                for pair in itype.get("interactionPair", []):
                    interactions.append({
                        "severity": pair.get("severity", "unknown"),
                        "description": pair.get("description", "")
                    })
    return interactions

# Ejemplo: Warfarin + Aspirin
interactions = check_interactions(["11289", "1191"])

6. Mapeo con Catalogos Mexicanos

6.1 Estrategia de Mapeo

Catalogo MX Campo Mapeo Proceso
Cuadro Basico IMSS Nombre generico Fuzzy match a RxNorm
Compendio CSG Principio activo Exact/fuzzy match
COFEPRIS Denominacion Match con normalizacion

6.2 Tabla de Mapeo (Ejemplos)

Nombre MX RxCUI Nombre RxNorm
Metformina 6809 metformin
Paracetamol 161 acetaminophen
Losartan potasico 52175 losartan
Omeprazol 7646 omeprazole

6.3 Proceso de Enriquecimiento

flowchart LR
    A[Catalogo MX] --> B[Normalizar nombre]
    B --> C[Buscar en RxNorm]
    C --> D{Match?}
    D -->|Si| E[Agregar RxCUI]
    D -->|No| F[Fuzzy search]
    F --> G{Match probable?}
    G -->|Si| H[Revisar manualmente]
    G -->|No| I[Sin mapeo RxNorm]

7. Recomendaciones para MedTime

7.1 Implementacion Inmediata

Accion Prioridad Complejidad
Integrar normalizacion RxNorm Alta Baja
Cache de RxCUIs comunes Alta Baja
Mapear catalogo MX a RxCUI Media Media
Usar como backup de interacciones Baja Baja

7.2 Limitaciones a Considerar

Limitacion Mitigacion
Solo USA Mapeo manual para MX/BR
Sin severidad estandarizada Mapear a escala MedTime
Rate limiting Cache agresivo

7.3 Metricas de Monitoreo

Metrica Umbral Accion
Latencia API > 500ms Cache miss, revisar
Rate 429 > 5/hora Aumentar cache
Match rate < 70% Revisar catalogo

Referencias


Documento generado por SpecQueen - La especificacion funcional ES el sistema.