# Платформа согласия пациента для приложений для здоровья

> Согласие встроено в слой данных: OAuth 2.1 и области SMART, цель и срок действия выбраны пользователем, журнал доступа, который он может просмотреть, отзыв при следующем запросе и то, что ваше приложение все еще имеет.

Source: https://developers.anpheros.com/ru/guides/patient-consent-platform

**Платформа согласия пациента позволяет человеку решать, каким приложениям разрешено читать или изменять его медицинскую карту, для каких целей и на какой срок, а также позволяет ему просматривать и отзывать этот доступ в любое время.** Anpheros встраивает согласие в слой данных: приложение получает доступ к записи FHIR R4 пациента только через разрешение, одобренное человеком на странице согласия Anpheros, каждое чтение и запись в рамках этого разрешения регистрируются там, где человек может их увидеть, а отзыв вступает в силу при следующем запросе. На этой странице показано, как это работает, что должно сделать ваше приложение и что ему не нужно создавать.

<!-- visual:consent-flow -->

## Почему согласие должно находиться на уровне данных

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

| | Согласие как флаг в вашем приложении | Согласие на уровне данных (Anpheros) |
|---|---|---|
| Где применяется | В коде каждого приложения | При каждом запросе к API, платформой |
| Область доступа | Все, что приложение решает прочитать | Только предоставленные типы ресурсов и категории |
| Срок действия | Редко реализуется | Выбирается человеком: 30, 90, 180 или 365 дней |
| Что видит человек | Зависит от приложения | Каждое приложение, его области действия и срок действия, а также журнал доступа |
| Отзыв | Должен распространяться вручную | Следующий запрос завершается ошибкой; токен обновления перестает работать |

## Что контролирует пациент

<!-- visual:consent-controls -->

## Как ваше приложение запрашивает согласие

Anpheros использует OAuth 2.1 с PKCE и области действия SMART on FHIR v2. Ваше приложение направляет пользователя на страницу согласия с необходимыми областями действия и необязательной целью; после одобрения оно получает токен доступа (30 минут) и ротируемый токен обновления (30 дней) для одного конкретного пациента.

```ts
import { OAuthFlow, generatePkce } from '@anpheros/sdk';

const flow = new OAuthFlow({
  baseUrl: 'https://platform.anpheros.com',
  clientId: process.env.ANPHEROS_CLIENT_ID!,
  redirectUri: 'https://your.app/callback',
});
const pkce = await generatePkce();
const url = flow.authorizeUrl({
  scopes: ['patient/Observation.rs?category=laboratory', 'patient/Condition.rs', 'offline_access'],
  purpose: 'treatment',
  state: crypto.randomUUID(),
  pkce,
  lang: 'en',
});
// redirect the person to `url`; on the callback exchange the code (see the authentication guide)
```

Область действия, такая как `patient/Observation.rs?category=laboratory`, ограничивает чтение результатами лабораторных исследований; фильтр категорий применяется сервером. Тип ресурса вне предоставленного доступа возвращает `403`; пациент вне предоставленного доступа возвращает `404`, поэтому идентификаторы не могут быть исследованы.

## Реакция на отзыв

Когда пользователь прекращает действие разрешения, следующий запрос с этим токеном завершается ошибкой, и токен обновления не может восстановить доступ. Чтобы немедленно выполнить очистку, подпишитесь на вебхук `consent.revoked`, который передает `grant_id`, идентификатор пациента, который вы видите, области действия и `revoked_at`.

```ts
await anpheros.webhooks.create('https://your.app/anpheros/hook', { events: ['consent.granted', 'consent.revoked'] });
```

## Что Anpheros не делает

- Anpheros не собирает согласие для целей, выходящих за рамки доступа к данным, таких как маркетинг или участие в исследованиях.
- Anpheros не определяет вашу правовую основу. Согласие на доступ является одним из механизмов контроля; ваше уведомление о конфиденциальности, контракты и записи об обработке данных остаются вашими.
- API-ключ проекта видит пациентов, созданных этим проектом, без предоставления разрешения. Согласие регулирует доступ других приложений.

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

### Что такое платформа согласия пациента?
Программное обеспечение, которое записывает, каким приложениям человек разрешает доступ к своим медицинским данным, обеспечивает соблюдение этих решений при каждом запросе, показывает человеку, кто и что получил доступ, и позволяет ему отозвать доступ. В Anpheros согласие является частью самой записи FHIR R4, а не отдельной службой.

### Какие стандарты Anpheros использует для согласия пациента?
OAuth 2.1 с PKCE для потока авторизации и пациентские области действия SMART on FHIR v2 (`patient/<Type>.<cruds>` с необязательным фильтром `?category=`) для того, что приложение может читать или записывать. OpenID Connect добавляет токен идентификации при запросе `openid fhirUser`.

### Может ли пациент ограничить доступ только к части своих данных?
Да. Доступ ограничен типами ресурсов и категориями в предоставленных областях действия, например, только лабораторными наблюдениями (Observations). Все остальное возвращает ошибку.

### Как долго действует согласие?
Человек выбирает 30, 90, 180 или 365 дней на странице согласия. После этого разрешение истекает, и приложение должно запросить его снова.

### Может ли пациент видеть, что приложение сделало с полученным доступом?
Да. Человек видит каждое приложение с доступом, его области действия и срок действия, а также журнал доступа, перечисляющий, что каждое приложение прочитало или записало.

### Что происходит при отзыве согласия?
Следующий запрос с этим токеном доступа завершается ошибкой, токен обновления не может быть использован для получения нового, и ваш сервер получает вебхук `consent.revoked`, если он подписан.

<!-- visual:cta-consent -->

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

- [Модель согласия и доступа](https://developers.anpheros.com/ru/guides/consent): полные правила
- [Аутентификация и OAuth](https://developers.anpheros.com/ru/guides/authentication): токены, области действия и обмен кодом
- [Как реализовать согласие пациента с помощью SMART on FHIR](https://developers.anpheros.com/ru/guides/smart-on-fhir-backend)
- [Вебхуки](https://developers.anpheros.com/ru/guides/webhooks): `consent.granted` и `consent.revoked`
- [Объяснение происхождения медицинских данных](https://developers.anpheros.com/ru/guides/medical-data-provenance)
- [API для продольных данных пациента](https://developers.anpheros.com/ru/guides/longitudinal-patient-data-api)
