AnpherosAnpheros PlatformDevelopers

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

Як зберігати медичні записи за допомогою FHIR R4

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

Цей посібник зберігає невеликий медичний запис як ресурси HL7 FHIR R4: Patient, Спостереження (Observation) артеріального тиску Observation та діагноз як Condition, а потім пацієнта та вимірювання разом в одній транзакції. Він шукає їх, оновлює діагноз, не втрачаючи попередню версію, і читає, хто що написав. Кожен запит — це простий curl до безкоштовної пісочниці Anpheros, і кожна показана відповідь — це те, що повертає API.

Якщо ви новачок у FHIR, спочатку прочитайте FHIR platform для ознайомлення з концепціями. Ця сторінка є практичною частиною.

Три ресурси, з яких починається більшість записів

Ресурс Що містить Кодовано за допомогою
Patient інформацію про особу, до якої належить запис: ім'я, дата народження, стать, ідентифікатори з інших систем ваші системи ідентифікації
Observation будь-що виміряне або зафіксоване: життєві показники, результати лабораторних досліджень, вага, оцінка симптомів LOINC, одиниці UCUM
Condition діагноз або проблема зі здоров'ям, з її статусом протягом часу ICD-10 (SNOMED CT за ліцензійним прапором)

Медикаменти (MedicationStatement), алергії (AllergyIntolerance), імунізації та документи слідують тому ж шаблону; 26 підтримуваних типів ресурсів перелічені у заяві про можливості (capability statement) за адресою /fhir/R4/metadata.

Перед початком роботи

Отримайте ключ для пісочниці (sk_test_…) на platform.anpheros.com/dashboard за допомогою опції Get a sandbox key. Жодні дані, які ви створите там, не є реальними даними пацієнтів і не видимі для інших проєктів.

export BASE=https://platform.anpheros.com/fhir/R4
export KEY=sk_test_…

Крок 1: Створення пацієнта

curl -X POST "$BASE/Patient" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" -d '{
  "resourceType": "Patient",
  "identifier": [{"system": "https://clinic.example/mrn", "value": "MRN-10442"}],
  "name": [{"family": "Marin", "given": ["Ioana"]}],
  "gender": "female",
  "birthDate": "1979-04-12"
}'

201 Created, з ідентифікатором та версією, призначеними сервером:

{"resourceType": "Patient",
 "identifier": [{"system": "https://clinic.example/mrn", "value": "MRN-10442"}],
 "name": [{"family": "Marin", "given": ["Ioana"]}], "gender": "female", "birthDate": "1979-04-12",
 "id": "d09e3942-ed86-4458-b099-fa674ab21b84",
 "meta": {"versionId": "1", "lastUpdated": "2026-10-12T20:16:51.043Z"}}

Зберігайте власні ідентифікатори в identifier за допомогою system, який ви контролюєте (тут номер запису клініки), щоб ви завжди могли знайти пацієнта за допомогою GET $BASE/Patient?identifier=https://clinic.example/mrn|MRN-10442. FHIR id належить платформі та є специфічним для вашого проєкту: інший проєкт бачить ту саму особу під іншим ідентифікатором.

export PID=d09e3942-ed86-4458-b099-fa674ab21b84

Крок 2: Збереження вимірювання як Observation

Артеріальний тиск є одним спостереженням з двома компонентами: систолічним та діастолічним, кожен з яких має власний код LOINC. Вкажіть, хто проводив вимірювання: тут домашній пристрій.

curl -X POST "$BASE/Observation" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
     -H "X-Anpheros-Author-Type: device" -H "Idempotency-Key: bp-2026-10-10-0830" -d '{
  "resourceType": "Observation",
  "status": "final",
  "category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "vital-signs"}]}],
  "code": {"coding": [{"system": "http://loinc.org", "code": "85354-9", "display": "Blood pressure panel"}]},
  "subject": {"reference": "Patient/'$PID'"},
  "effectiveDateTime": "2026-10-10T08:30:00Z",
  "component": [
    {"code": {"coding": [{"system": "http://loinc.org", "code": "8480-6"}]},
     "valueQuantity": {"value": 138, "unit": "mmHg", "system": "http://unitsofmeasure.org", "code": "mm[Hg]"}},
    {"code": {"coding": [{"system": "http://loinc.org", "code": "8462-4"}]},
     "valueQuantity": {"value": 88, "unit": "mmHg", "system": "http://unitsofmeasure.org", "code": "mm[Hg]"}}
  ]
}'

Відповідь — це збережений ресурс із id та meta.versionId: "1". Три деталі важливі для придатного для використання запису:

Лабораторні результати — це той самий ресурс із category laboratory та зазвичай referenceRange. Щоб імпортувати повні лабораторні звіти, див. Як імпортувати лабораторні результати до запису FHIR.

Крок 3: Запис діагнозу як Condition

curl -X POST "$BASE/Condition" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
     -H "X-Anpheros-Author-Type: practitioner" -d '{
  "resourceType": "Condition",
  "subject": {"reference": "Patient/'$PID'"},
  "clinicalStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-clinical", "code": "active"}]},
  "verificationStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-ver-status", "code": "confirmed"}]},
  "code": {"coding": [{"system": "http://hl7.org/fhir/sid/icd-10", "code": "I10", "display": "Essential (primary) hypertension"}]},
  "onsetDateTime": "2026-03-02"
}'

clinicalStatus (active, resolved, in remission) та verificationStatus (confirmed, provisional) навмисно розділені: підозрюваний діагноз — це не те саме, що підтверджений, а вирішена проблема все ще є частиною історії.

Крок 4: створення пов'язаних ресурсів в одній транзакції

Коли пацієнт та його перший вимір надходять разом, наприклад, із клінічної системи, надішліть їх як transaction Bundle. Або все зберігається, або нічого. Посилання між новими ресурсами використовують тимчасові urn:uuid: ідентифікатори, які сервер замінює:

curl -X POST "$BASE" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" -d '{
  "resourceType": "Bundle", "type": "transaction",
  "entry": [
    {"fullUrl": "urn:uuid:9f1c0d1e-0000-4000-8000-000000000001",
     "resource": {"resourceType": "Patient", "name": [{"family": "Stan", "given": ["Mihai"]}], "gender": "male", "birthDate": "1990-02-01"},
     "request": {"method": "POST", "url": "Patient"}},
    {"resource": {"resourceType": "Observation", "status": "final",
       "category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "vital-signs"}]}],
       "code": {"coding": [{"system": "http://loinc.org", "code": "29463-7", "display": "Body weight"}]},
       "subject": {"reference": "urn:uuid:9f1c0d1e-0000-4000-8000-000000000001"},
       "effectiveDateTime": "2026-10-10",
       "valueQuantity": {"value": 82.4, "unit": "kg", "system": "http://unitsofmeasure.org", "code": "kg"}},
     "request": {"method": "POST", "url": "Observation"}}
  ]
}'

transaction-response містить один запис на ресурс, з "status": "201 Created", його location та збереженим ресурсом. subject Observation тепер вказує на справжній Patient/fad3665a-….

Крок 5: Пошук

curl "$BASE/Observation?patient=$PID&code=http://loinc.org|85354-9&date=ge2026-10-01&_sort=-date" \
     -H "Authorization: Bearer $KEY"

Ви отримаєте searchset Bundle з total та відповідними ресурсами, відсортованими за датою створення (найновіші першими). Інші пошуки, які ви будете використовувати часто: Condition?patient=$PID&clinical-status=active, Observation?patient=$PID&category=laboratory та Patient/$PID/$everything для повного запису.

Крок 6: оновлення без втрати історії

Гіпертонія зникає. Змініть статус та додайте дату завершення, і використовуйте If-Match з версією, яку ви прочитали, щоб ніколи не перезаписати чиюсь іншу зміну:

curl -X PUT "$BASE/Condition/$CID" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
     -H 'If-Match: W/"1"' -d '{ …the same Condition…, "clinicalStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-clinical", "code": "resolved"}]}, "abatementDateTime": "2026-10-11" }'

200 OK з ETag: W/"2". Якщо інший запис був там першим, ви отримаєте 412 і прочитаєте знову. Попередня версія все ще там:

curl "$BASE/Condition/$CID/_history" -H "Authorization: Bearer $KEY"

повертає обидві версії: versionId 2 (resolved) та 1 (active). GET $BASE/Condition/$CID/_history/1 читає стару. Ніщо в записі не перезаписується мовчки.

Крок 7: перегляньте, хто що написав

Кожне записування створює ресурс Provenance. Для показника артеріального тиску:

curl "$BASE/Provenance?target=Observation/$OBS" -H "Authorization: Bearer $KEY"
{"resourceType": "Provenance",
 "target": [{"reference": "Observation/d83d9075-…/_history/1"}],
 "recorded": "2026-10-12T20:16:51.056000Z",
 "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": {"identifier": {"system": "https://anpheros.com/fhir/CodeSystem/author-type", "value": "device"}, "display": "proj_…"},
            "onBehalfOf": {"identifier": {"system": "https://anpheros.com/fhir/sid/organization", "value": "org_…"}, "display": "…"}}]}

Тип автора, який ви надіслали (device), записується разом із проєктом та організацією. Надішліть X-Anpheros-Author-Ref: Practitioner/<id>, щоб назвати клініциста, який стоїть за записуванням.

Крок 8: запис як резюме

curl "$BASE/Patient/$PID/\$summary" -H "Authorization: Bearer $KEY"

повертає Міжнародне резюме пацієнта (International Patient Summary): document Bundle, який починається з Composition і містить розділи, такі як Проблеми, Ліки, Алергії та Життєві показники, побудовані з наведених вище ресурсів. Це формат для передачі іншій системі або для друку для лікаря (FHIR platform).

Віддаєте перевагу JSON без FHIR?

Ті самі дані доступні через простіший REST-інтерфейс, /v1, з тими самими ідентифікаторами: POST /v1/patients/{id}/observations приймає {"code": "85354-9", "category": "vital-signs", "effective_at": "…", "components": […]} і зберігає той самий FHIR Observation. Використовуйте той варіант, який краще підходить для вашого коду. Дивіться Medical data API та SDKs.

Часті запитання

Який найкращий спосіб зберігати медичні записи?

Як закодовані, версіоновані ресурси із записом про те, хто їх створив. HL7 FHIR R4 надає вам структуру (Patient, Observation, Condition та інші), стандартні системи кодування, такі як LOINC та ICD-10, і історію; FHIR бекенд додає пошук, згоду та походження зверху.

Чи потрібен мені FHIR сервер для використання FHIR?

Вам потрібне місце, яке зберігає та шукає FHIR ресурси та контролює, хто може їх читати. Ви можете самостійно запустити FHIR сервер з відкритим кодом або використовувати керований, як-от Anpheros; Як Anpheros порівнюється з іншими FHIR серверами зважує варіанти, а FHIR проти власної бази даних медичних записів охоплює створення власної схеми натомість.

Як зберігати артеріальний тиск у FHIR?

Як один Observation з кодом LOINC 85354-9 та два component записи: систолічний 8480-6 та діастолічний 8462-4, кожен з valueQuantity у mm[Hg].

Чи можу я змінити збережений ресурс?

Так, за допомогою PUT та If-Match. Кожна зміна створює нову версію; попередні версії залишаються доступними для читання через _history, а Provenance записує, хто зробив кожну зміну. Видалення є м'якими та зберігають історію.

Пов'язане

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