Lesson 0001 · FHIR · Modul Fondasi · ±22 menit

Dari HL7 v2 ke FHIR, dan kenapa REST + JSON

Pertanyaan pembuka yang hampir pasti muncul, dijelaskan dengan bahasa developer JavaScript

Target lesson ini: Anda bisa menjawab "Apa itu FHIR, dan apa bedanya dengan HL7 v2?" tanpa catatan, dalam kurang dari satu menit: Resource sebagai unit modular ber-URL dibanding segment v2, Z-segment dibanding extension, dan FHIR di atas REST + JSON (application/fhir+json, resourceType).

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.

1. Dari HL7 v2 ke FHIR

FHIR (Fast Healthcare Interoperability Resources) adalah "a next generation standards framework created by HL7" yang menggabungkan "the best features of HL7's" v2, v3, dan CDA. [1] Untuk interview, pembandingnya hampir selalu HL7 v2: standar pesan lama yang masih banyak berjalan di rumah sakit.

MSH|^~\&|LAB|RSUD|EHR|RSUD|202410261030||ORU^R01|MSG0001|P|2.5
PID|1||RM-00123^^^RSUD^MR||Santoso^Budi||19800512|M
OBX|1|NM|2339-0^Glucose^LN||95|mg/dL|70-99|N|||F

Ilustrasi pesan v2 yang disederhanakan (bukan dikutip dari spesifikasi): satu pesan, baris = segment, field dipisah |, komponen dipisah ^, seperti contoh |^Smith^John| di halaman perbandingan v2. [2]

HL7 v2FHIR
Unitpesan dari "re-usable segments"; "segments can't be independently manipulated"Resource: "All exchangeable content is defined as a resource" [3], masing-masing punya URL sendiri
Variasi"One of the biggest challenges with HL7 v2 interoperability is the variation of implementation"core kecil, variasi dikelola eksplisit lewat profile (lesson 0003)
Data lokalZ-segment: maknanya "opaque without prior manual explanation by the sender"extension: "can appear at any level (including within data types)", punya URL definisi
Updatebisa kirim sebagian + kode penghapusan"requiring all data to be present as a snapshot"
Teks manusiatidak wajib"FHIR requires human readable content to be provided for each resource"

Kutipan kolom HL7 v2 dan baris extension/update/teks: [2]. Keduanya tidak saling meniadakan: FHIR menyebut "Evolutionary development path from HL7 Version 2 and CDA: standards can co-exist and leverage each other". [1] Di interview, sebut bahwa integrasi nyata sering memetakan pesan v2 lama ke resource FHIR (dibahas di lesson 0023).

Latihan 1 — v2 atau FHIR?

Jawab tanpa scroll ke atas. Soal yang sama muncul lagi, diacak, di review campuran 0012.

Kuis di lesson ini adalah feedback cepat, bukan bukti penguasaan; yang dicatat hanya hasil review 0012.

2. Kenapa REST + JSON: fondasi yang sudah Anda kuasai

FHIR berdiri di atas "Web standards: XML, JSON, HTTP, OAuth, etc." dan mendukung "RESTful architectures". [1] Halaman REST API-nya berstatus Normative dan menyebut FHIR "a 'RESTful' specification based on common industry level use of the term REST", dengan pola URL VERB [base]/[type]/[id]. [4] Jadi bagi developer Node, membaca satu pasien adalah fetch biasa:

// base = "https://fhir.contoh-rs.id/fhir" (contoh fiktif)
const res = await fetch(`${base}/Patient/123`, {
  headers: { Accept: "application/fhir+json" },
});
const patient = await res.json(); // { resourceType: "Patient", id: "123", ... }

Padanan TypeScript yang paling membantu: resourceType adalah discriminant dari union type, persis seperti field type di reducer Redux.

type Meta = { versionId?: string; lastUpdated?: string; profile?: string[] };
interface Resource { resourceType: string; id?: string; meta?: Meta }
interface Patient extends Resource { resourceType: "Patient"; birthDate?: string }
interface Observation extends Resource { resourceType: "Observation"; status: string }

function label(r: Patient | Observation): string {
  switch (r.resourceType) {            // TypeScript mempersempit tipe di tiap case
    case "Patient": return `Pasien, lahir ${r.birthDate ?? "?"}`;
    case "Observation": return `Observasi (${r.status})`;
  }
}

Tipe di atas sengaja diringkas. Kardinalitas aslinya: Patient.birthDate 0..1 [6], Observation.status 1..1 [7].

Latihan 2 — REST + JSON

Latihan 3 — Ucapkan dengan suara keras

Pasang timer dan jawab dengan suara keras, seolah sedang interview. Jangan buka jawaban contoh sebelum selesai.

"Apa itu FHIR, dan apa bedanya dengan HL7 v2?" (60 detik)
Bandingkan dengan jawaban contoh dan checklist-nya

"FHIR, Fast Healthcare Interoperability Resources, adalah standar HL7 untuk pertukaran data kesehatan yang dibangun dari komponen modular bernama Resource, misalnya Patient, Encounter, Observation. Setiap resource punya identitas URL, versi, dan bisa dibaca atau diubah sendiri lewat REST API, dengan format JSON (application/fhir+json) atau XML, di atas standar web yang sudah kita kenal: HTTP, JSON, OAuth. HL7 v2 adalah standar pesan yang lebih tua: pesan terdiri dari segment teks berdelimiter, segment tidak bisa dimanipulasi sendiri, dan implementasinya sangat bervariasi antar sistem; data lokal masuk Z-segment yang maknanya harus dijelaskan manual. Di FHIR, data lokal masuk extension yang punya URL ke definisinya, dan variasi dikelola lewat profile dan Implementation Guide. Keduanya bisa hidup berdampingan; banyak integrasi memetakan v2 ke FHIR."

Checklist: apakah Anda menyebut…

  • FHIR = standar HL7, dibangun dari Resource modular (contoh: Patient, Observation)?
  • Resource punya identitas URL dan versi, bisa dibaca/diubah sendiri?
  • REST API + JSON/XML di atas standar web (HTTP, OAuth)?
  • HL7 v2 = pesan dari segment, segment tidak bisa dimanipulasi sendiri?
  • masalah v2: variasi implementasi tinggi; Z-segment maknanya tidak jelas tanpa penjelasan manual?
  • padanan di FHIR: extension ber-URL + profile/IG; v2 dan FHIR bisa berdampingan?

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] FHIR Summary · [2] Comparison with HL7 v2 · [3] FHIR Overview · [4] RESTful API · [5] JSON Representation · [6] Patient · [7] Observation