Profile, Extension, Implementation Guide; server yang sering disebut
Pertanyaan pembuka yang hampir pasti muncul, dijelaskan dengan bahasa developer JavaScript
modifierExtension), dan Implementation Guide,
dan mengenali nama server HAPI FHIR dan Medplum.
Semua fakta di bawah diambil dari spesifikasi FHIR R4 (v4.0.1) dan dikutip [n]. Contoh JSON dan TypeScript hanya untuk dibaca, tidak perlu dijalankan. REST, HTTP status, JSON, dan OAuth sudah Anda kuasai; lesson ini hanya mengajarkan yang khas FHIR.
Sebelumnya, di lesson 0002, Anda melihat Resource, datatype, dan status versi R4 (Normative, Trial Use, FMM). Lesson ini menutup modul Fondasi: bagaimana FHIR dasar disesuaikan ke konteks tertentu, dan server yang namanya sering disebut.
1. Profile, Extension, dan Implementation Guide (konsep)
Spesifikasi dasar FHIR sengaja menjadi "a common platform or foundation on which a variety of different solutions are implemented", dan karena itu "usually requires further adaptation to particular contexts of use". [1] Filosofinya: resource dasar memenuhi "the majority of common use cases", dan "There is a built-in extension mechanism to cover the remaining content". [2]
Profile
"A set of constraints on a resource represented as a structure definition", ditulis sebagai resource StructureDefinition. [1]
Profile bisa: mengubah kardinalitas ("One key function of profiles"), melarang elemen dengan max 0, memaku nilai tetap, membatasi tipe,
mengikat ke value set terminologi lain, dan menandai elemen yang "must be 'supported'". [1]
Must support berarti implementasi "SHALL provide 'support' for the element in some meaningful way". [3]
Contoh konkret: di Patient dasar, identifier dan name berkardinalitas 0..* [4];
profile US Core Patient (http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient) mempersempitnya menjadi 1..*. [5]
Resource bisa menyatakan kesesuaiannya di meta.profile.
Extension
{
"resourceType": "Patient",
"id": "123",
"extension": [{
"url": "http://hl7.org/fhir/StructureDefinition/patient-birthPlace",
"valueAddress": { "city": "Bandung", "country": "ID" }
}]
}
urlwajib dan "identifies a retrievable extension definition"; ia harus "the canonical URL of a StructureDefinition that defines the extension". [6] URL di contoh adalah extension resmi untuk tempat lahir dengan tipeAddress. [7]- Isinya
value[x]: nama "value" + nama tipe dalam TitleCase (valueAddress,valueCode,valueString), atau sub-extension, "but not both". [6] modifierExtensiondipakai "If it is not safe for an application processing the content of the resource to ignore the extension". Aplikasi yang tidak mengenalnya tidak boleh diam-diam mengabaikannya. [6]- Kenapa tidak menambah properti sembarang ke JSON: "The use of extensions is what allows the FHIR specification to retain a core simplicity for everyone." [6]
Padanan TypeScript untuk membaca extension: cari berdasarkan url, jangan berdasarkan posisi array.
const BIRTH_PLACE = "http://hl7.org/fhir/StructureDefinition/patient-birthPlace";
const birthPlace = patient.extension?.find(e => e.url === BIRTH_PLACE)?.valueAddress;
Implementation Guide (IG)
"A coherent and bounded set of adaptations that are published as a single unit" [1]:
profile, extension, value set, dan contoh untuk satu negara, organisasi, atau use case. US Core "defines the minimum constraints on the FHIR resources to create the US Core Profiles". [8]
Resource ImplementationGuide sendiri ("A set of rules of how a particular interoperability or standards problem is solved") masih Trial Use, FMM 1. [9]
| FHIR | Analogi TypeScript (hanya untuk mengingat) |
|---|---|
| Resource dasar | type yang longgar: banyak field opsional (mis. semua field Patient di atas 0..1 atau 0..*) |
| Profile | type yang lebih ketat + aturan validasi (seperti schema zod yang di-refine) |
| Extension | field tambahan yang wajib punya "namespace" (URL) dan definisi |
| Implementation Guide | package npm berisi kumpulan type, schema, dan contoh |
Latihan 1 — Profile, Extension, IG
2. Server yang mungkin disebut di interview
Cukup kenali namanya; menjalankannya di luar cakupan track ini.
- HAPI FHIR: "a complete implementation of the HL7 FHIR standard for healthcare interoperability in Java", open source dengan lisensi Apache 2.0. [10] Sering dipakai sebagai server referensi atau server uji.
- Medplum: "Medplum is a headless EHR", open source, dibangun di atas FHIR, dengan TypeScript SDK dan komponen React. [11] Relevan untuk tim Node/React.
Latihan 2 — Ucapkan dengan suara keras
Pasang timer dan jawab dengan suara keras, seolah sedang interview. Jangan buka jawaban contoh sebelum selesai.
"Kenapa FHIR 'dasar' tidak langsung cukup untuk sebuah negara atau organisasi? Jelaskan Profile, Extension, dan Implementation Guide." (90 detik)
Bandingkan dengan jawaban contoh dan checklist-nya
"Spesifikasi dasar FHIR sengaja menjadi platform bersama: resource-nya hanya memuat elemen yang akan didukung kebanyakan sistem, jadi spesifikasi menyatakan bahwa ia biasanya perlu diadaptasi ke konteks pemakaian.
Adaptasi itu ditulis sebagai profile, yaitu StructureDefinition berisi constraint: misalnya identifier pasien wajib (kardinalitas 1..*), elemen tertentu dilarang (max 0), kode harus dari value set tertentu, atau elemen ditandai must support.
Kebutuhan yang tidak ada di core ditambahkan sebagai extension: objek dengan url ke definisinya plus value[x]; kalau extension itu mengubah makna data, ia harus menjadi modifierExtension yang tidak boleh diabaikan.
Sekumpulan profile, extension, dan terminologi untuk satu konteks diterbitkan sebagai Implementation Guide, misalnya US Core di Amerika yang dibangun di atas R4. Resource bisa menyatakan kesesuaiannya lewat meta.profile.
Analogi TypeScript: resource dasar adalah type yang longgar, profile adalah type yang lebih ketat plus aturan validasi, dan IG adalah package berisi kumpulan type itu."
Checklist: apakah Anda menyebut…
- spesifikasi dasar = platform bersama dengan core kecil, biasanya perlu diadaptasi ke konteks?
- profile = StructureDefinition berisi constraint (kardinalitas, max 0, binding terminologi, must support)?
- extension =
urlke definisi +value[x]; menambah data yang tidak ada di core? modifierExtensionmengubah makna, tidak boleh diabaikan diam-diam?- Implementation Guide = kumpulan adaptasi yang diterbitkan sebagai satu unit (contoh US Core di atas R4)?
meta.profileuntuk menyatakan kesesuaian; analogi TS: type lebih ketat / package type?
Lulus kalau minimal 4 dari 6.
Istilah: GLOSSARY.md (bagian "Fondasi") · Sumber: RESOURCES.md · Komunitas: chat.fhir.org
Ada yang belum jelas? Tanyakan ke saya (agent) di terminal, misalnya: "apa beda id dan identifier?", "kapan sebuah extension harus jadi modifierExtension?", atau "bagaimana menjelaskan Normative vs Trial Use ke interviewer non-teknis?"
Sumber: [1] Profiling FHIR · [2] FHIR Overview · [3] Conformance Rules · [4] Patient · [5] US Core Patient Profile · [6] Extensibility · [7] Extension: patient-birthPlace · [8] US Core IG · [9] ImplementationGuide · [10] HAPI FHIR · [11] Medplum Docs