# Объяснение происхождения медицинских данных

> Что такое запись происхождения при каждой записи в запись FHIR R4 — тип автора, человек, организация, исходная система, версии — как установить ее с помощью заголовков, как ее прочитать и как она маркирует данные, предоставленные моделям ИИ.

Source: https://developers.anpheros.com/ru/guides/medical-data-provenance

**Происхождение — это запись о том, откуда взялись медицинские данные: кто их написал, от имени какой организации, из какой системы, когда и что изменилось в каждой версии.** В записи, которая собирает данные от пациентов, устройств, клиник, лабораторий и ИИ, именно происхождение делает значение достоверным: показание артериального давления, введенное дома, и показание, измеренное в клинике, без него выглядят идентично. В Anpheros каждая запись в запись HL7 FHIR R4 автоматически создает ресурс FHIR `Provenance`. На этой странице объясняется, что он содержит, как его правильно заполнить и как его прочитать.

## Почему происхождение данных имеет значение

- **Клиническое доверие.** Врач оценивает лабораторный результат иначе, чем значение, введенное пациентом, или число, извлеченное ИИ из фотографии.
- **Безопасность ИИ.** Модель, получившая запись, должна знать, какие элементы являются фактами, а какие — заметками, написанными другой моделью. Без меток она обрабатывает их одинаково.
- **Исправления и споры.** Когда значение изменяется, все должны знать, каким оно было раньше, кто его изменил и почему.
- **Подотчетность.** В соответствии с GDPR и Европейским пространством данных о здоровье организация должна иметь возможность показать, что она сделала с медицинскими данными человека.
- **Обмен данными.** Когда пациент разрешает второй клинике прочитать свою запись, эта клиника должна знать, какие данные были записаны первой клиникой.

## Что Anpheros записывает при каждой записи

| Вопрос | Где это записывается | Как вы это устанавливаете |
|---|---|---|
| Тип автора? | `agent.who.identifier` (тип автора) | `author_type` в `/v1`, или заголовок `X-Anpheros-Author-Type`: `patient`, `practitioner`, `device`, `import`, `ai` |
| Какой человек? | `agent.who.reference` | `X-Anpheros-Author-Ref: Practitioner/<id>`, или `X-Anpheros-Acting-As` |
| Для какой организации? | `agent.onBehalfOf` | организация `PractitionerRole`, или `X-Anpheros-On-Behalf-Of: Organization/<id>` |
| Из какой системы? | `entity` с ролью `source` | `X-Anpheros-Source-System: <name>` |
| Какая запись в этой системе? | origin id | `X-Anpheros-Origin-Id: <id>` |
| Когда и что произошло? | `recorded`, `activity` (CREATE, UPDATE, DELETE) | автоматически |
| Какая версия? | `target` указывает на `<Resource>/<id>/_history/<version>` | автоматически |

Если вы не укажете, кто является автором, платформа запишет `import`. Она никогда не предполагает `patient`, потому что значение, ошибочно приписанное пациенту, хуже, чем значение, честно помеченное как импортированное.

## Запись с полным происхождением

Кардиолог в клинике записывает частоту сердечных сокращений во время визита через программное обеспечение клиники:

```bash
curl -X POST https://platform.anpheros.com/fhir/R4/Observation -H "Authorization: Bearer $KEY" \
     -H "Content-Type: application/fhir+json" \
     -H "X-Anpheros-Author-Type: practitioner" \
     -H "X-Anpheros-Acting-As: PractitionerRole/$ROLE" \
     -H "X-Anpheros-Source-System: ccn-emr" \
     -d '{ "resourceType": "Observation", "status": "final", "code": {"coding": [{"system": "http://loinc.org", "code": "8867-4"}]}, … }'
```

Данные о происхождении (Provenance), записываемые платформой:

```json
{"resourceType": "Provenance",
 "target": [{"reference": "Observation/8660eb7c-…/_history/1"}],
 "recorded": "2026-10-12T20:41:47.469000Z",
 "activity": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v3-DataOperation", "code": "CREATE"}]},
 "agent": [{"type": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/provenance-participant-type", "code": "author"}]},
            "who": {"reference": "PractitionerRole/e6d8c227-…",
                    "identifier": {"system": "https://anpheros.com/fhir/CodeSystem/author-type", "value": "practitioner"}},
            "onBehalfOf": {"reference": "Organization/c3a56a4b-…", "display": "Clinica Cardio Nord"}}],
 "entity": [{"role": "source", "what": {"identifier": {"system": "ccn-emr"}}}]}
```

Роль врача, его клиника, тип автора и исходная система — все это присутствует в стандартном формате FHIR. `PractitionerRole` должен существовать в каталоге вашего проекта и быть активным. Запрос, в котором указан практикующий врач, отличный от текущего, отклоняется:

```json
{"resourceType": "OperationOutcome", "issue": [{"severity": "error", "code": "invalid",
  "diagnostics": "Unknown or inactive Practitioner in X-Anpheros-Acting-As."}]}
```

Настройка каталога описана в разделе [Как интегрировать системы клиник с FHIR-бэкендом](https://developers.anpheros.com/ru/guides/integrate-clinic-systems-fhir).

## Версии: ничего не перезаписывается молча

Каждое обновление создает новую версию ресурса и новый Provenance для нее. После того как частота сердечных сокращений выше будет исправлена с 92 до 88:

```bash
curl https://platform.anpheros.com/fhir/R4/Observation/$OBS/_history -H "Authorization: Bearer $KEY"
```

возвращает версию 2 (88) и версию 1 (92). REST-представление обобщает Provenance каждой версии:

```bash
curl https://platform.anpheros.com/v1/patients/$PID/provenance/Observation/$OBS -H "Authorization: Bearer $KEY"
```

```json
{"data": [
  {"version": 1, "activity": "CREATE", "recorded": "2026-10-12T20:41:47.469000Z", "author_type": "practitioner", "author": "PractitionerRole/e6d8c227-…", "source_system": "ccn-emr", "fhir": "Provenance/6ed91529-…"},
  {"version": 2, "activity": "UPDATE", "recorded": "2026-10-12T20:41:47.500000Z", "author_type": "practitioner", "fhir": "Provenance/3fbf270f-…"}],
 "total": 2}
```

Удаления являются "мягкими": удаленный ресурс исчезает из поисковых запросов, но его история и Provenance остаются.

## Чтение provenance

```bash
# who wrote this resource (all versions)
GET /fhir/R4/Provenance?target=Observation/{id}
# everything a practitioner recorded
GET /fhir/R4/Provenance?agent=PractitionerRole/{id}
# the same, summarised, per resource
GET /v1/patients/{pid}/provenance/Observation/{id}
```

## Происхождение в контекстах ИИ

[API контекста](https://developers.anpheros.com/ru/guides/llm-healthcare-data) передает информацию о происхождении в каждый элемент, который он предоставляет модели, как `author_type` и `source`. В текстовом виде:

```
- Type 2 diabetes mellitus (E11), active, onset 2024-10-15 [import/anpheros-sandbox]
- Metformin 1000 mg 1 tablet twice daily with meals, active [patient/anpheros-sandbox]
- Glucose [Mass/volume] in Blood: 2026-09-16: 140.0 mg/dL [device/anpheros-sandbox]
```

Измерения, записанные с помощью `author_type: ai`, никогда не появляются среди этих фактов. Они перечислены отдельно в разделе `ai_notes` и помечены как непроверенные, поэтому модель не может ошибочно принять предположение предыдущей модели за измерение. Сообщите модели, что означают метки, и попросите ее сослаться на них; [Как создать приложение для здравоохранения с использованием ИИ и бэкенда FHIR](https://developers.anpheros.com/ru/guides/build-ai-healthcare-app) демонстрирует соответствующий запрос.

## Что видит пациент

Происхождение (Provenance) — это также то, что видит пациент. В его записи показано, кто добавил каждый элемент, а в списке подключений показано, кто и к чему обращался из каждого приложения, с указанием имени, когда действовал практикующий врач («Д-р Ана Попеску · Клиника Кардио Норд прочитал(а) ваши результаты анализов»). См. [Модель согласия и доступа](https://developers.anpheros.com/ru/guides/consent).

## Правила, делающие происхождение полезным

1. **Всегда указывайте тип автора.** Это требует одного поля и является самой важной меткой в записи.
2. **Указывайте имя человека, когда его написал человек.** Используйте `X-Anpheros-Acting-As` для клинического персонала.
3. **Указывайте исходную систему** и передавайте собственный идентификатор источника в качестве идентификатора происхождения, если он есть.
4. **Исправляйте путем обновления, никогда путем удаления и повторного создания.** Обновление сохраняет связь между старым и новым значением.
5. **Маркируйте вывод ИИ как `ai`**, включая значения, извлеченные моделью из документа. Значения, полученные из документа, также могут ссылаться на него с помощью `derived_from`.

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

### Что такое происхождение данных (data provenance) в здравоохранении?
Документированное происхождение и история фрагмента медицинских данных: кто создал или изменил его, от чьего имени, из какой системы и когда. В HL7 FHIR это представлено ресурсом `Provenance`, который указывает на точную версию ресурса, который он описывает.

### Является ли происхождение данных тем же, что и журнал аудита?
Нет. Происхождение данных описывает сами данные: кто записал каждую версию. Журнал аудита описывает доступ: кто, когда и под каким согласием читал или записывал что-либо. Anpheros ведет оба; пациент видит журнал доступа для каждого приложения, подключенного к его записи.

### Могу ли я создавать собственные ресурсы Provenance?
Anpheros создает один ресурс для каждого создания, обновления и удаления, поэтому обычно вам это не нужно. Используйте заголовки выше, чтобы сделать его точным. Предоставленный клиентом ресурс Provenance должен быть нацелен на ресурсы одного пациента.

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

- [Модель согласия и доступа](https://developers.anpheros.com/ru/guides/consent)
- [Интеграция клинических систем с FHIR-бэкендом](https://developers.anpheros.com/ru/guides/integrate-clinic-systems-fhir)
- [Нормализация медицинских данных](https://developers.anpheros.com/ru/guides/normalize-medical-data)
- [Интероперабельность медицинских данных](https://developers.anpheros.com/ru/guides/interoperability)
- [Безопасность, конфиденциальность и местоположение данных](https://developers.anpheros.com/ru/guides/security)
