# Данные о медикаментах для приложений и ИИ-агентов

> Списки медикаментов пациента против знаний о препаратах: ресурсы FHIR, RxNorm, ATC, openFDA и EMA, а также протестированное объединение записи FHIR с RxNorm и этикетками FDA.

Source: https://developers.anpheros.com/ru/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, текущий клинический препарат с этикеткой. Названия, введенные людьми, являются приблизительными; проверяйте, к чему приводит совпадение, сохраняйте код после его подтверждения и показывайте человеку, что было сопоставлено.

## Правила для AI-агентов

1. **Никогда не позволяйте модели предоставлять факты о лекарствах из памяти.** Предоставьте ей список пациента из записи и соответствующий текст из авторитетного источника, и попросите указать их.
2. **Держите два источника видимыми.** "Вы принимаете метформин (ваша запись, введенная вами 3 марта)" и "инструкция FDA предупреждает о лактат-ацидозе (инструкция 011de1a5…)" — это разные утверждения с разными владельцами.
3. **Сужайте области действия.** Агент, которому нужен только список лекарств, должен получить доступ на чтение к `MedicationStatement`, а не ко всей записи. В Anpheros это область действия согласия или инструменты MCP сервера только для чтения.
4. **Не отвечайте на вопросы, требующие участия клинициста.** Взаимодействия, изменения дозировки и прекращение приема лекарств должны решаться фармацевтом или врачом; агент может подготовить вопрос.

## Место Anpheros в экосистеме

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

Это не база данных лекарств: она не предоставляет информацию о маркировке, взаимодействиях, дозировке или противопоказаниях, а также сегодня не поддерживает ресурсы `MedicationRequest` или `Medication`.

## Часто задаваемые вопросы

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

### Существует ли бесплатный API базы данных лекарств?
В США RxNorm (NLM) для идентификаторов и названий лекарств, а также openFDA для официальных этикеток продуктов являются бесплатными. В Европе EMA и национальные агентства публикуют информацию о продуктах. Комплексная проверка взаимодействий обычно требует лицензированной базы знаний.

### Как агент ИИ должен получать информацию о лекарствах?
Из двух инструментов: один, который считывает список лекарств пациента из его записи с согласия, и один, который ищет авторитетный источник лекарств. Агент должен ссылаться на оба и оставлять клинические решения профессионалу.

### Проверяет ли Anpheros взаимодействия лекарств?
Нет. Он хранит то, что человек принимает, с указанием источника и согласия. Проверка взаимодействий относится к базе знаний о лекарствах и клиницисту.

## Связанные материалы

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