AnpherosAnpheros PlatformDevelopers

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Приложение персональной медицинской карты (PHR) с FHIR

Руководство: бэкенд подключенной PHR на FHIR R4 — данные от людей, лабораторий, документов и устройств, временная шкала, IPS для обмена, согласие. Проверенный код.

Приложение для ведения личной медицинской карты (PHR) хранит медицинскую информацию одного человека — результаты анализов, измерения, диагнозы, лекарства, документы — в записи, которую контролирует сам человек. Эти данные собираются из множества источников, а не из одной больницы. Сложности заключаются не в интерфейсах: они в получении данных из лабораторий, клиник и от устройств в удобном для использования виде, отслеживании происхождения каждого элемента и предоставлении человеку возможности делиться картой, не теряя над ней контроля. Данное руководство описывает бэкенд PHR на HL7 FHIR R4 с использованием Anpheros TypeScript SDK; приведенный ниже код был запущен локально на экземпляре платформы с использованием sandbox-ключа.

Привязанные, автономные и подключенные PHR

Тип Где хранятся данные Ограничение
Привязанные (портал пациента больницы) EHR поставщика услуг Отображает только данные этого поставщика; меняется при смене врача
Автономные (отдельное приложение или блокнот) Собственная база данных приложения Человек вводит все вручную; данные редко покидают приложение
Подключенные Стандартная запись, которую приложения, лаборатории и клиники читают и записывают с согласия человека Требует стандартов, согласия и происхождения данных

Подключенный PHR — это то, что стоит создавать сегодня. Это также то, к чему движется политика: в Соединенных Штатах сертифицированные EHR должны предоставлять пациентам доступ к своим данным через API на основе FHIR (US Core), а в Европейском Союзе Европейское пространство данных здравоохранения (European Health Data Space) дает людям право доступа к своим электронным медицинским данным и их передачи выбранным поставщикам услуг, поэтапно с 2029 года.

Откуда берутся данные PHR

  1. Человек: домашние измерения, симптомы, принимаемые лекарства, известные заболевания. Отметьте их как сообщенные пациентом.
  2. Лабораторные отчеты: большинство людей получают PDF-файлы; некоторые лаборатории могут отправлять HL7 v2 или CSV. Каждый результат должен стать кодированным наблюдением (Lab results API).
  3. Документы: выписные письма, отчеты об исследованиях, рецепты. Сохраните исходный файл без изменений рядом со структурированными данными.
  4. Устройства и носимые гаджеты: ежедневные шаги, частота сердечных сокращений, сон, артериальное давление из Apple Health или Health Connect (wearable data in FHIR).
  5. Поставщики медицинских услуг: в США — FHIR API больниц и страховщиков с доступом для пациентов, к которым осуществляется доступ с помощью SMART on FHIR; в других странах — в основном документы и сводки, такие как International Patient Summary.

Каждый источник записывает данные в одну и ту же запись. Достоверность обеспечивается тем, что каждый элемент записывает, кто его создал и из какой системы (medical data provenance).

Архитектура

 person ──► your PHR app (mobile / web) ──► your backend ──► Anpheros: one FHIR R4 record per person
                                               │                 ├─ Observations, Conditions, Medications, Documents…
   lab report, PDF, device data ───────────────┘                 ├─ Provenance on every write
                                                                 ├─ access log the person can see
   other apps, doctors, AI assistants ◄── consent (OAuth) ───────┴─ $summary (IPS) to share

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

Пошаговое руководство

Установите SDK (npm install @anpheros/sdk) и получите бесплатный ключ для песочницы на панели управления. В примере используется двухрезультатный HL7 v2 липидный профиль (lipid-panel.hl7) и любой PDF-файл (report.pdf).

import { readFile } from 'node:fs/promises';
import { Anpheros, apiKey } from '@anpheros/sdk';

const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });

// 1. One record per person who signs up in your PHR app
const jane = await anpheros.patients.create({ given: 'Jane', family: 'Doe', birth_date: '1984-07-19', gender: 'female' });

// 2. Something the person measured at home
await anpheros.observations.create(jane.id, {
  code: '85354-9', category: 'vital-signs', effective_at: '2026-10-01T08:30:00-05:00', author_type: 'patient',
  components: [{ code: '8480-6', value: 128, unit: 'mm[Hg]' }, { code: '8462-4', value: 82, unit: 'mm[Hg]' }],
});

// 3. A diagnosis and a medication the person reports
await anpheros.conditions.create(jane.id, { code: 'E11.9', system: 'http://hl7.org/fhir/sid/icd-10',
  display: 'Type 2 diabetes mellitus without complications', clinical_status: 'active', onset: '2021-03-15', author_type: 'patient' });
await anpheros.medications.create(jane.id, { code: 'A10BA02', display: 'Metformin 500 mg', status: 'active',
  dosage: '500 mg twice a day', start: '2021-03-20', author_type: 'patient' });

// 4. A lab report the person received, as the lab sent it (HL7 v2)
const lab = await anpheros.labs.importHl7(jane.id, await readFile('lipid-panel.hl7', 'utf8'), { sourceSystem: 'springfield-lis' });

// 5. A PDF they want to keep with the record
const doc = await anpheros.documents.upload(jane.id,
  { title: 'Chest X-ray report', kind: 'imaging_report', content_type: 'application/pdf', date: '2026-10-03' },
  await readFile('report.pdf'));

// 6. One timeline for the home screen
const timeline = await anpheros.timeline.list(jane.id, { limit: 10 });

// 7. A summary to share with a new doctor: the International Patient Summary
const ips = await anpheros.fhir.summary(jane.id);

// 8. Who else can read this record (empty until the person consents to another app)
const grants = await anpheros.grants.of(jane.id);

Напечатано из этого запуска:

lab:       created 2, unmapped []
document:  final
timeline:  2026-10-03  document    Chest X-ray report
           2026-10-02  observation Cholesterol in HDL [Mass/volume] in Serum or Plasma
           2026-10-02  observation Cholesterol [Mass/volume] in Serum or Plasma
           2026-10-01  observation Blood pressure panel
           2021-03-20  medication  Metformin 500 mg
           2021-03-15  condition   Type 2 diabetes mellitus without complications
IPS:       Allergies, Medications, Problems, Results, Vital signs
grants:    0

Все вышеперечисленное хранится в формате FHIR R4 — Patient, Observation, Condition, MedicationStatement, DocumentReference — поэтому ту же запись можно прочитать с помощью любого FHIR-клиента (GET /fhir/R4/Patient/{id}/$everything) и переместить в другое место без изменений. Вызовы /v1 в SDK представляют собой упрощенное представление тех же ресурсов; Medical data API перечисляет их.

Совместное использование без потери контроля

PHR существует для того, чтобы им можно было делиться на условиях пользователя:

Семьи

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

Что создавать самостоятельно, а что нет

Вы создаете пользовательский опыт: онбординг, объяснение результатов, напоминания, графики, язык, на котором читает пользователь. Anpheros предоставляет запись, стандартные форматы, согласие, происхождение данных, журнал доступа, а также операции с лабораторными данными, документами и сводками.

Что Anpheros сегодня не делает для PHR: он не выполняет вход в больничные порталы пациентов или API доступа пациентов США от имени пользователя (ваше приложение может сделать это с помощью клиента SMART on FHIR и записать полученные данные), он не читает PDF-отчеты через API и не дает медицинских советов. Собственное PHR-приложение Anpheros, Anpheros Daily, построено на этом же API.

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

Что такое персональная медицинская карта (PHR)?

Запись информации о здоровье человека, которую ведет и контролирует сам человек. Эта информация собирается из нескольких источников — собственных записей, лабораторий, клиник, устройств — а не хранится у одного поставщика медицинских услуг.

В чем разница между PHR и EHR?

EHR ведется организацией здравоохранения и охватывает то, что записали ее поставщики медицинских услуг. PHR ведется самим человеком и может объединять данные от всех его поставщиков медицинских услуг и устройств. Привязанная PHR — это окно в EHR одного поставщика; подключенная PHR использует стандарты для объединения нескольких источников.

Должна ли PHR использовать FHIR?

Если данные когда-либо будут передаваться врачу, другому приложению или AI-ассистенту, то да: FHIR R4 предоставляет кодированные, версионированные ресурсы, которые другие системы уже понимают, и это формат API для доступа пациентов в США, а также европейской сводки данных пациента.

Как приложение PHR получает данные из больниц?

В США — через API для доступа пациентов FHIR, которые предоставляют сертифицированные EHR и многие страховщики, используя SMART on FHIR, чтобы позволить человеку авторизовать приложение. В других странах это в основном документы и сводки, импортируемые и хранящиеся рядом со структурированными данными.

Где приложение PHR должно хранить API-ключи?

На вашем сервере. Ключ проекта может читать каждую запись, созданную вашим проектом, поэтому он никогда не должен передаваться внутри мобильного или веб-приложения; приложение взаимодействует с вашим бэкендом, а приложения других людей используют OAuth с согласия пользователя.

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

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Product updates by email

New features, guides and the end of the beta. One email a month at most.

Send me occasional Anpheros Platform updates by email (new features, API changes, guides). I'll confirm by email and can unsubscribe in one click from any email. Privacy