# Дані про медикаменти для додатків та ШІ-агентів

> Списки медикаментів пацієнта проти знань про ліки: ресурси FHIR, RxNorm, ATC, джерела openFDA та EMA, а також протестоване об'єднання запису FHIR з RxNorm та етикетками FDA.

Source: https://developers.anpheros.com/uk/guides/medication-data-ai-agents

**Медичне програмне забезпечення потребує двох різних видів даних про медикаменти: список медикаментів пацієнта — що ця людина приймає, з якого часу, в якій дозі, хто це записав — і знання про ліки — що містить продукт, його офіційна етикетка, попередження та взаємодії.** Перше належить до запису пацієнта; друге надходить з авторитетних баз даних ліків. Їх змішування призводить до того, що ШІ-агенти надають факти про ліки з пам'яті моделі. Ця сторінка пояснює обидва, ресурси 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](https://lhncbc.nlm.nih.gov/RxNav/APIs/RxNormAPIs.html) (NLM): нормалізовані назви та ідентифікатори (RXCUI) для клінічних лікарських засобів; безкоштовно, і за одним винятком ліцензія не потрібна.
- [openFDA drug label API](https://open.fda.gov/apis/drug/label/) (FDA): структуровані етикетки продуктів — показання, попередження в рамці, протипоказання, розділи про взаємодію ліків — з можливістю пошуку за RXCUI.
- DailyMed (NLM): ті ж етикетки для читання людьми.

**Європейський Союз**

- Європейське агентство з лікарських засобів публікує інформацію про продукти для централізовано авторизованих лікарських засобів, а його електронна інформація про продукт (ePI) побудована на FHIR. Продукти, авторизовані на національному рівні, містяться в національних реєстрах.
- Коди ATC та визначені добові дози підтримуються Співпрацюючим центром ВООЗ з методології статистики лікарських засобів.

**Взаємодії** — найскладніша частина. NLM припинило роботу свого API взаємодії ліків приблизно в січні 2024 року, і комплексний перевірка взаємодії сьогодні покладається на ліцензовані бази клінічних знань. Розділ взаємодії етикетки — це текст, написаний для клініцистів, а не для перевірки.

## Об'єднання запису з інформацією про ліки

Приклад зчитує активні медикаменти пацієнта з Anpheros, співставляє кожну назву з концепцією RxNorm та отримує етикетку FDA. Він був запущений проти локального екземпляра платформи та живих API RxNorm і openFDA.

```ts
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, поточний клінічний препарат з етикеткою. Назви, введені людьми, є приблизними; перевіряйте, до чого призводить збіг, зберігайте код після його підтвердження та показуйте людині, що було співставлено.

## Правила для ШІ-агентів

1. **Ніколи не дозволяйте моделі надавати факти про ліки з пам'яті.** Надайте їй список пацієнта з запису та відповідний текст з авторитетного джерела, і попросіть процитувати їх.
2. **Тримайте два джерела видимими.** "Ви приймаєте метформін (ваш запис, внесений вами 3 березня)" та "інструкція FDA попереджає про лактоацидоз (інструкція ⟦011de1a5…⟧)" є різними твердженнями з різними власниками.
3. **Звужуйте області.** Агент, якому потрібен лише список ліків, повинен мати доступ для читання до `MedicationStatement`, а не до всього запису. З Anpheros це є область згоди або інструменти MCP сервера тільки для читання.
4. **Не відповідайте на те, що потребує клініциста.** Взаємодії, зміни дозування та припинення прийому ліків передаються фармацевту або лікарю; агент може підготувати запитання.

## Де Anpheros вписується

Anpheros зберігає список медикаментів: `MedicationStatement` та `MedicationAdministration` з кодами ATC або іншими кодами, хто записав кожен елемент, історію та згоду для інших додатків; [API контексту](https://developers.anpheros.com/uk/guides/ai-healthcare) включає активні медикаменти у зведенні, яке він готує для моделі, а [MCP сервер](https://developers.anpheros.com/uk/guides/mcp) надає до них доступ агентам у режимі читання. Він містить невеликий підмножину ATC (близько 50 поширених ліків) для автоматичного найменування кодів; будь-який інший код приймається без автоматичного найменування.

Це не база даних ліків: вона не надає етикеток, взаємодій, дозування або протипоказань, і наразі не підтримує ресурси `MedicationRequest` або `Medication`.

## Часті запитання

### Який ресурс FHIR слід використовувати для списку ліків?
`MedicationStatement` для того, що людина приймає або приймала, включаючи ліки, повідомлені пацієнтом. Рецепти — це `MedicationRequest`; окремі дози — це `MedicationAdministration`.

### Чи існує безкоштовний API бази даних ліків?
У США RxNorm (NLM) для ідентифікаторів та назв ліків, а також openFDA для офіційних етикеток продуктів є безкоштовними. У Європі EMA та національні агентства публікують інформацію про продукти. Комплексна перевірка взаємодій зазвичай потребує ліцензованої бази знань.

### Як агент зі штучним інтелектом має отримувати інформацію про ліки?
За допомогою двох інструментів: один, який зчитує список ліків пацієнта з його запису за згодою, і один, який шукає авторитетне джерело ліків. Агент повинен цитувати обидва та залишати клінічні рішення професіоналу.

### Чи перевіряє Anpheros взаємодії ліків?
Ні. Він зберігає те, що людина приймає, з походженням та згодою. Перевірка взаємодій належить до джерела знань про ліки та клініциста.

## Пов'язане

- [AI-агенти та медичні дані](https://developers.anpheros.com/uk/guides/ai-agents-medical-data)
- [Як надати AI-агенту доступ до медичних записів](https://developers.anpheros.com/uk/guides/ai-agent-access-medical-records)
- [FHIR MCP сервер для AI-агентів](https://developers.anpheros.com/uk/guides/mcp)
- [Системи кодування FHIR](https://developers.anpheros.com/uk/guides/fhir-code-systems)
- [Приклад FHIR R4 MedicationStatement](https://developers.anpheros.com/tools/fhir-examples/medication-statement)
