# Модель згоди та доступу

> Хто що бачить: ізоляція проєктів, парні ідентифікатори, дозволи, право власності на запис, походження та інформація, яку пацієнт бачить про кожну програму з доступом.

Source: https://developers.anpheros.com/uk/guides/consent

**Правило:** за згодою пацієнта організація бачить повний запис — включно з тим, що написали інші клініки — але може змінювати або видаляти лише те, що написала сама. Кожна версія кожного ресурсу записує проєкт, який його написав, та організацію, від імені якої він був написаний.

## Хто що бачить
- **Проєкт** (API ключ) бачить пацієнтів, яких він створив. У межах **гранта** (OAuth токен) застосунок бачить рівно одного пацієнта, незалежно від усіх авторів, обмеженого наданими областями дії (scopes) та фільтрами категорій. Все інше повертає 404, ніколи 403, тому ідентифікатори неможливо перевірити.
- **Парні ідентифікатори:** кожен проєкт отримує власний ідентифікатор для однієї й тієї ж особи; внутрішні ідентифікатори ніколи не залишають платформу. Посилання на пацієнтів поза вашою областю дії маскуються непрозорим токеном для кожного проєкту.
- **Довідник** (Organization, Practitioner, PractitionerRole): читається за ідентифікатором по всій площині, щоб посилання розв'язувалися; пошук можливий лише в межах вашого проєкту; використовується як `X-Anpheros-Acting-As` / `X-Anpheros-On-Behalf-Of` лише коли він ваш.
- **Пісочниця (Sandbox) та продакшн** — це різні бази даних. Ключ пісочниці фізично не може отримати доступ до реальних пацієнтів.

## Записи та власність
- `project_id` на кожній версії ресурсу = автор запису. Оновлення/видалення іншим проєктом → 403 з поясненням; напишіть власний ресурс натомість.
- `Provenance.agent.onBehalfOf` = клініка/організація на момент запису: `X-Anpheros-On-Behalf-Of`, інакше організація діючої ролі PractitionerRole, інакше організація проєкту.
- Кожен запис створює ресурс Provenance та рядок аудиту (хто, що, коли, під яким грантом, яка програма, з якого відбитка джерела).

## Що бачить пацієнт
`/me/patients/{id}/grants` перелічує кожну програму з доступом, її області дії та термін дії; `…/access-log` перелічує, що кожна програма читала або записувала — під згодою **та** з власним ключем проєкту. Відкликання набуває чинності з наступним запитом; програма не може поновити доступ.
За допомогою `format=fhir` журнал доступу повертається як Bundle ресурсів FHIR R4 `AuditEvent`, сформованих за шаблонами IHE Basic Audit Log Patterns (тип `rest`, взаємодія як підтип, програма та особа, що діє через неї, як агенти, пацієнт і ресурс як сутності, без клінічних даних), тому інша система може об'єднати його в уявлення особи про те, хто мав доступ до її запису.

Що записує кожен ресурс Provenance та як його налаштувати: [Пояснення походження медичних даних](https://developers.anpheros.com/uk/guides/medical-data-provenance).

## SMART Health Links (обмін за допомогою QR-коду або посилання)

Людина може поділитися своїм записом без проміжного застосунку: `POST /me/patients/{id}/shl` створює
[SMART Health Link](https://hl7.org/fhir/uv/smart-health-cards-and-links/) для **екстреного** набору даних (алергії,
ліки, проблеми, щеплення — без результатів чи історії) або **повного** Міжнародного резюме пацієнта (International Patient Summary), з
необов'язковим паролем та терміном дії. Відповідь містить URI `shlink:/…` (для QR-коду) та адресу перегляду на `/shl/view`, яка відкривається в будь-якому браузері. Той, хто сканує, надсилає запит на URL маніфесту та отримує резюме у вигляді JWE (`dir` + `A256GCM`), зашифрованого ключем, що міститься в посиланні; працює будь-який зчитувач SMART Health Link.

- Вміст генерується при кожному відкритті (прапорець `L`, статус `can-change`), тому картка, збережена в телефоні, залишається актуальною.
- Пароль (прапорець `P`) перевіряється на сервері; після 10 невдалих спроб посилання перестає працювати.
- `GET /me/patients/{id}/shl` перелічує посилання із зазначенням частоти та часу кожного відкриття; `…/shl/{link}/revoke` вимикає
  одне посилання одночасно. Кожне відкриття записується в журнал доступу.
- Внутрішній ідентифікатор особи ніколи не залишає платформу: документ називає його псевдонімом посилання.

## ШІ-агенти пропонують, людина вирішує

За згодою людини, запис від ШІ-агента (додаток, зареєстрований як агент, наприклад, помічник, підключений через MCP) або будь-який запис з `author_type` `ai` не застосовується одразу. Платформа валідує його та відповідає `202 Accepted` з ідентифікатором пропозиції (заголовок `Anpheros-Proposal`); жодних змін у записі не відбувається. Людина бачить це в `GET /me/patients/{id}/proposals` — що це, який додаток надіслав його — і приймає або відхиляє його (`…/proposals/{proposal}/accept` або `…/reject`). Прийнята пропозиція записується точно так, як була надіслана, позначена як написана ШІ (HL7 AI Transparency). Проєкти, які можуть бачити запис, отримують тонкий `proposal.created` webhook. Записи, зроблені за допомогою власного ключа проєкту, у записах, створених проєктом, не утримуються.
