Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Дані про ліки для додатків та ШІ-агентів
Списки ліків пацієнтів проти знань про ліки: ресурси FHIR, RxNorm, ATC, джерела openFDA та EMA, а також перевірене об'єднання запису FHIR з мітками RxNorm та FDA.
Медичне програмне забезпечення потребує двох різних видів даних про медикаменти: список медикаментів пацієнта — що ця людина приймає, з якого часу, в якій дозі, хто це записав — і знання про ліки — що містить продукт, його офіційна етикетка, попередження та взаємодії. Перше належить до запису пацієнта; друге надходить з авторитетних баз даних ліків. Їх змішування призводить до того, що ШІ-агенти надають факти про ліки з пам'яті моделі. Ця сторінка пояснює обидва, ресурси FHIR R4 та задіяні кодові системи, які загальнодоступні джерела існують у США та ЄС, а також робочий приклад, який об'єднує список пацієнта з запису FHIR з RxNorm та етикеткою FDA.
Два типи даних про лікарські засоби
| Список ліків пацієнта | Знання про препарат | |
|---|---|---|
| Відповіді | Що приймає Ана, відколи, як часто? | Що таке метформін 500 мг, про що попереджає його етикетка? |
| Зміни | Коли пацієнт або клініцист оновлює його | Коли регулятор або видавець оновлює його |
| Зберігається в | Запис пацієнта (EHR, PHR, FHIR-сервер) | Бази даних препаратів та термінології |
| FHIR | MedicationStatement, MedicationRequest, MedicationAdministration, Medication |
Переважно поза записом; інформація про продукт може бути сама по собі FHIR |
| Хто може читати | Тільки за згодою пацієнта | Публічно або за ліцензією |
Додаток або агент, який відповідає на запитання "чи можу я приймати ібупрофен разом із моїми ліками від тиску?", потребує обох: списку пацієнта, щоб знати, які ліки, і джерела знань про препарати, щоб знати, що відомо про комбінацію — плюс клініциста або фармацевта для відповіді.
Ресурси FHIR для списку медикаментів
- MedicationStatement: особа приймає, приймала або припинила прийом ліків (повідомлено пацієнтом або зареєстровано клініцистом). Звичайний ресурс для PHR або списку узгодження.
- MedicationRequest: рецепт або замовлення.
- MedicationAdministration: одна доза, надана або прийнята (або пропущена), корисна для відстеження дотримання.
- Medication: сам продукт, коли потрібна детальніша інформація, ніж код (інгредієнти, форма, партія).
Ліки кодуються: у США за допомогою RxNorm (від Національної медичної бібліотеки США) та кодів продуктів NDC; на міжнародному рівні за класифікацією ATC ВООЗ; у Європі також за національними кодами продуктів і, все частіше, за електронною інформацією про продукт EMA на основі FHIR. Заява може містити кілька кодувань для одних і тих самих ліків.
Джерела інформації про лікарські засоби
Сполучені Штати
- RxNorm API (NLM): нормалізовані назви та ідентифікатори (RXCUI) для клінічних лікарських засобів; безкоштовно, і за одним винятком ліцензія не потрібна.
- openFDA drug label API (FDA): структуровані етикетки продуктів — показання, попередження в рамці, протипоказання, розділи про взаємодію ліків — з можливістю пошуку за RXCUI.
- DailyMed (NLM): ті ж етикетки для читання людьми.
Європейський Союз
- Європейське агентство з лікарських засобів публікує інформацію про продукти для централізовано авторизованих лікарських засобів, а його електронна інформація про продукт (ePI) побудована на FHIR. Продукти, авторизовані на національному рівні, містяться в національних реєстрах.
- Коди ATC та визначені добові дози підтримуються Співпрацюючим центром ВООЗ з методології статистики лікарських засобів.
Взаємодії — найскладніша частина. NLM припинило роботу свого API взаємодії ліків приблизно в січні 2024 року, і комплексний перевірка взаємодії сьогодні покладається на ліцензовані бази клінічних знань. Розділ взаємодії етикетки — це текст, написаний для клініцистів, а не для перевірки.
Об'єднання запису з інформацією про ліки
Приклад зчитує активні медикаменти пацієнта з Anpheros, співставляє кожну назву з концепцією RxNorm та отримує етикетку FDA. Він був запущений проти локального екземпляра платформи та живих API RxNorm і openFDA.
import { Anpheros, apiKey } from '@anpheros/sdk';
const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });
// 1. What the person takes: from their record (ATC codes, names as they were entered)
const { data: meds } = await anpheros.medications.list(patientId, { status: 'active' });
// 2. What each medicine is: RxNorm (US National Library of Medicine), free, no key
async function rxcui(name: string): Promise<string | null> {
const r = await fetch(`https://rxnav.nlm.nih.gov/REST/approximateTerm.json?term=${encodeURIComponent(name)}&maxEntries=1`);
const j: any = await r.json();
const id = j.approximateGroup?.candidate?.[0]?.rxcui;
if (!id) return null;
// An approximate match can be an outdated concept: keep it only if RxNorm still describes it as a drug
const props: any = await (await fetch(`https://rxnav.nlm.nih.gov/REST/rxcui/${id}/properties.json`)).json();
return ['SCD', 'SBD', 'GPCK', 'BPCK'].includes(props.properties?.tty) ? id : null;
}
// 3. What the official label says: openFDA drug label API (US FDA), free
async function label(id: string) {
const r = await fetch(`https://api.fda.gov/drug/label.json?search=openfda.rxcui:%22${id}%22&limit=1`);
if (!r.ok) return null;
const doc: any = (await r.json()).results?.[0];
return doc && { set_id: doc.set_id, boxed_warning: doc.boxed_warning?.[0]?.slice(0, 120), has_interactions_section: !!doc.drug_interactions };
}
for (const m of meds) {
const id = await rxcui(m.display);
console.log(JSON.stringify({ record: { display: m.display, atc: m.code, dosage: m.dosage }, rxnorm: id, fda_label: id ? await label(id) : null }));
}
Результат для пацієнта, який повідомив про метформін та еналаприл:
{"record":{"display":"Metformin 500 mg tablet","atc":"A10BA02","dosage":"500 mg twice a day"},"rxnorm":"861007",
"fda_label":{"set_id":"011de1a5-…","boxed_warning":"BOXED WARNING WARNING: LACTIC ACIDOSIS …","has_interactions_section":true}}
{"record":{"display":"Enalapril maleate 10 mg oral tablet","atc":"C09AA02","dosage":"10 mg once a day"},"rxnorm":"858817",
"fda_label":{"set_id":"074fe718-…","boxed_warning":"WARNING: FETAL TOXICITY …","has_interactions_section":true}}
Що ми дізналися під час запуску. З назвою, написаною як "Enalapril 10 mg tablet", приблизний збіг RxNorm повернув RXCUI 328290, концепцію, яку RxNorm більше не описує, без відповідної етикетки. З повним клінічним ім'ям, "enalapril maleate 10 mg oral tablet", він повернув 858817, поточний клінічний препарат з етикеткою. Назви, введені людьми, є приблизними; перевіряйте, до чого призводить збіг, зберігайте код після його підтвердження та показуйте людині, що було співставлено.
Правила для ШІ-агентів
- Ніколи не дозволяйте моделі надавати факти про ліки з пам'яті. Надайте їй список пацієнта з запису та відповідний текст з авторитетного джерела, і попросіть процитувати їх.
- Тримайте два джерела видимими. "Ви приймаєте метформін (ваш запис, внесений вами 3 березня)" та "інструкція FDA попереджає про лактоацидоз (інструкція ⟦011de1a5…⟧)" є різними твердженнями з різними власниками.
- Звужуйте області. Агент, якому потрібен лише список ліків, повинен мати доступ для читання до
MedicationStatement, а не до всього запису. З Anpheros це є область згоди або інструменти MCP сервера тільки для читання. - Не відповідайте на те, що потребує клініциста. Взаємодії, зміни дозування та припинення прийому ліків передаються фармацевту або лікарю; агент може підготувати запитання.
Де Anpheros вписується
Anpheros зберігає список медикаментів: MedicationStatement та MedicationAdministration з кодами ATC або іншими кодами, хто записав кожен елемент, історію та згоду для інших додатків; API контексту включає активні медикаменти у зведенні, яке він готує для моделі, а MCP сервер надає до них доступ агентам у режимі читання. Він містить невеликий підмножину ATC (близько 50 поширених ліків) для автоматичного найменування кодів; будь-який інший код приймається без автоматичного найменування.
Це не база даних ліків: вона не надає етикеток, взаємодій, дозування або протипоказань, і наразі не підтримує ресурси MedicationRequest або Medication.
Часті запитання
Який ресурс FHIR слід використовувати для списку ліків?
MedicationStatement для того, що людина приймає або приймала, включаючи ліки, повідомлені пацієнтом. Рецепти — це MedicationRequest; окремі дози — це MedicationAdministration.
Чи існує безкоштовний API бази даних ліків?
У США RxNorm (NLM) для ідентифікаторів та назв ліків, а також openFDA для офіційних етикеток продуктів є безкоштовними. У Європі EMA та національні агентства публікують інформацію про продукти. Комплексна перевірка взаємодій зазвичай потребує ліцензованої бази знань.
Як агент зі штучним інтелектом має отримувати інформацію про ліки?
За допомогою двох інструментів: один, який зчитує список ліків пацієнта з його запису за згодою, і один, який шукає авторитетне джерело ліків. Агент повинен цитувати обидва та залишати клінічні рішення професіоналу.
Чи перевіряє Anpheros взаємодії ліків?
Ні. Він зберігає те, що людина приймає, з походженням та згодою. Перевірка взаємодій належить до джерела знань про ліки та клініциста.
Пов'язане
- AI-агенти та медичні дані
- Як надати AI-агенту доступ до медичних записів
- FHIR MCP сервер для AI-агентів
- Системи кодування FHIR
- Приклад FHIR R4 MedicationStatement
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card