# Архитектура медицинских приложений

> Диаграммы и потоки данных: пациент к приложению, к Anpheros API, к записи FHIR и внешним сервисам, а также AI-агент к контекстному API для авторизованных данных.

Source: https://developers.anpheros.com/ru/guides/architecture

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

```
  Your application, backend or AI agent
  (mobile app, web app, clinic system, lab system, LLM-based assistant)
                        │  HTTPS · API key (sk_test_ / sk_live_) or OAuth token (at_…)
                        ▼
  Anpheros Platform API
  ├─ /v1        simplified REST: patients, observations, conditions, medications,
  │             documents, timeline, provenance, context, labs, webhooks
  ├─ /fhir/R4   strict FHIR R4: 26 resource types, search, history, transactions,
  │             $everything, $summary (IPS), $validate
  └─ /oauth     OAuth 2.1 + PKCE, SMART on FHIR, OpenID Connect
                        │  every request: project isolation · scopes · rate limits
                        ▼
  One FHIR R4 record per patient
  ├─ versions of every resource (history)   ├─ Provenance for every write
  ├─ Consent resources for every grant      └─ access log visible to the patient
                        │
                        ▼
  Events out: signed webhooks to your server (ids only, never clinical content)
```

## Представление пациента: от человека к внешним сервисам

```
Patient
   ↓   uses an app, chooses what to share, sees every access
Healthcare application          Anpheros Daily, or your own app
   ↓   REST v1 / FHIR R4 over HTTPS, API key or OAuth token
Anpheros API
   ↓   isolation, scopes, idempotency, provenance
FHIR medical data               the patient's record: 26 resource types, every version kept
   ↓   only what the patient allowed, only for as long as allowed
External healthcare services    laboratories (lab import), clinics (directory, acting-as),
                                other apps (OAuth / SMART), your backend (webhooks)
```

## ИИ-представление: от агента к авторизованным данным

```
AI agent or LLM application     runs the model you choose — hosted or local
   ↓   POST /v1/context  {patient, task, question, budget_tokens}
Medical context API             plans which parts of the record matter, fits them into the budget,
   ↓                            labels every item with author type and source, records a manifest
Authorised medical data         only records the project created or the patient granted;
                                the read appears in the patient's access log
```

Модель никогда не получает учетные данные и никогда не вызывает Anpheros самостоятельно; ваше приложение запрашивает контекст и решает, что отправить модели. Два полных примера с вызовами API: приложение для ИИ в здравоохранении в разделе [Приложения ИИ в здравоохранении](https://developers.anpheros.com/ru/guides/ai-healthcare) и уполномоченный агент в разделе [ИИ-агенты и медицинские данные](https://developers.anpheros.com/ru/guides/ai-agents-medical-data). Подробности: [ИИ-агенты и медицинские данные](https://developers.anpheros.com/ru/guides/ai-agents-medical-data), [Приложения LLM и данные здравоохранения](https://developers.anpheros.com/ru/guides/llm-healthcare-data).

## Запись

Каждый пациент имеет одну запись, состоящую из ресурсов FHIR R4: `Observation` для жизненно важных показателей, результатов лабораторных исследований, симптомов и сводок ежедневной активности, `Condition` и `EpisodeOfCare`, `MedicationStatement` и `MedicationAdministration`, `DocumentReference`, `Immunization`, `AllergyIntolerance` и других — всего 26 типов, перечисленных в реальном времени в CapabilityStatement (`GET /fhir/R4/metadata`). Нет необходимости изучать проприетарную схему: REST API представляет собой упрощенное представление тех же ресурсов с теми же идентификаторами.

Ничто не перезаписывается молча. Каждое обновление создает новую версию (`/fhir/R4/{type}/{id}/_history`), и каждая версия записывает проект, который ее создал, и организацию, от имени которой она была создана.

## Два способа доступа

| | API-ключ | Токен доступа OAuth |
|---|---|---|
| Внешний вид | `sk_test_…` / `sk_live_…` | `at_…` |
| Используется | вашим сервером | приложением, действующим от имени одного пациента |
| Видит | пациентов, созданных вашим проектом | ровно одного пациента, в пределах областей действия, предоставленных пациентом |
| Типичное использование | бэкенд вашего собственного приложения, лабораторная система, интеграция с клиникой | стороннее приложение или ИИ-ассистент, получающий доступ к записи, которая уже есть у пациента |

Проект никогда не видит пациентов другого проекта, если пациент не предоставит доступ. Каждый проект получает свой собственный идентификатор для одного и того же человека (парные идентификаторы), поэтому идентификаторы не могут быть сопоставлены между приложениями, а запись вне вашего доступа возвращает `404`, а не `403`.

## Две среды

Песочница и продуктивная среда представляют собой отдельные базы данных. Ключ песочницы (`sk_test_`) физически не может получить доступ к реальным пациентам; каждый проект в песочнице получает свою копию из 30 синтетических пациентов, которую он может свободно изменять и сбрасывать. Ключи продуктивной среды (`sk_live_`) выдаются проверенным организациям.

## Потоки данных

**Ваше приложение записывает.** `POST /v1/patients/{id}/observations` с `Idempotency-Key`. Платформа сохраняет FHIR `Observation`, записывает `Provenance` (тип автора: patient, practitioner, device, import или ai), регистрирует доступ и отправляет `resource.created` webhook на подписанные конечные точки.

**Другое приложение читает с согласия.** Пациент одобряет это на странице согласия (`/oauth/authorize`), выбирая запись и срок действия (30–365 дней). Приложение обменивает код на токены и читает только то, что разрешено областями действия (scopes). Пациент видит приложение, его области действия и каждое чтение в своем журнале доступа, и может отозвать его в любое время.

**Лаборатория доставляет результаты.** `POST /v1/patients/{id}/labs/import` с отчетом в формате CSV, HL7 v2 ORU^R01 или JSON; каждый результат становится лабораторным `Observation` с кодами LOINC, где это известно, и повторная отправка того же отчета безопасна.

**Модели ИИ нужен контекст.** `POST /v1/context` возвращает части записи, относящиеся к задаче, в пределах бюджетного лимита токенов, каждый элемент помечен источником; вызов записывается с идентификатором манифеста. Сама модель работает там, где вы выберете.

## Место Anpheros по сравнению с самостоятельной разработкой

| Аспект | Самостоятельная разработка | С Anpheros |
|---|---|---|
| Модель медицинских данных | проектирование таблиц для каждого типа записей | ресурсы FHIR R4, 26 типов |
| Интероперабельность | пользовательские форматы экспорта | FHIR R4, International Patient Summary, SMART on FHIR |
| Согласие | создание логики предоставления, области действия, срока действия и отзыва | гранты OAuth 2.1, отраженные как FHIR `Consent` |
| Аудит | создание журналов и способа их отображения пациентам | каждое чтение и запись регистрируются и видны пациенту |
| Интеграция с лабораториями | парсинг формата каждой лаборатории | импорт CSV, HL7 v2 ORU и JSON |
| Контекст ИИ | написание кода для извлечения и суммирования | API контекста с бюджетными токенами и метками происхождения |

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

- [Что такое Anpheros?](https://developers.anpheros.com/ru/guides/what-is-anpheros)
- [Разработка медицинского программного обеспечения](https://developers.anpheros.com/ru/guides/healthcare-software)
- [Бэкенд и база данных медицинских приложений](https://developers.anpheros.com/ru/guides/medical-app-backend)
- [Создание медицинского приложения](https://developers.anpheros.com/ru/guides/build-a-healthcare-app)
- [Модель согласия и доступа](https://developers.anpheros.com/ru/guides/consent)
- [Безопасность, конфиденциальность и местоположение данных](https://developers.anpheros.com/ru/guides/security)
