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 |
{
"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
| 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.