Lesson 0004 · FHIR · Modul Resource · ±21 menit

Kerangka resource JSON; Patient: id vs identifier

Membaca JSON FHIR R4 seperti membaca tipe TypeScript: bagian bersama setiap resource, aturan JSON, cardinality, dan id vs Identifier

Di lesson 0003 Anda mengenal profile, extension, dan Implementation Guide sebagai konsep. Modul ini membuka isi resource-nya: JSON yang akan Anda baca dan tulis setiap hari. Mulai dari kerangka yang dimiliki semua resource, lalu Patient.

Target lesson ini: Anda bisa menyebut bagian bersama setiap resource (resourceType, id, meta, text, contained, extension), menerapkan aturan JSON FHIR (tanpa null, elemen berulang selalu array) dan membaca cardinality sebagai tipe TypeScript, serta menjelaskan beda id dan identifier tanpa catatan.

Semua JSON di lesson ini diadaptasi (dipendekkan) dari contoh resmi spesifikasi FHIR R4 (4.0.1); tautannya ada di setiap blok. Tanpa lab: cukup baca, jawab kuis, lalu latihan lisan. Kuis di sini adalah feedback cepat; bukti penguasaan hanya dari review campuran 0012.

1. Kerangka setiap resource, dan aturan JSON-nya (±8 menit)

Hampir semua resource diturunkan dari DomainResource, yang diturunkan dari Resource. Jadi setiap Patient, Encounter, atau Observation punya bagian bersama yang sama, lalu elemen khasnya sendiri. [1] [7]

PropertyDariIsi
resourceTypeJSONnama tipe resource; di JSON jenis resource "is carried as the property resourceType" [4]
idResourcelogical id (bagian 2)
metaResourceversionId, lastUpdated, profile, … (lesson 0007)
textDomainResourcenarrative XHTML untuk dibaca manusia
containedDomainResourceresource lain yang disisipkan (lesson 0007)
extension, modifierExtensionDomainResourcedata tambahan di luar definisi inti (lesson 0007)

Aturan JSON yang paling sering menjebak developer JavaScript [4]:

Yang menentukan "selalu array" atau "objek tunggal" adalah cardinality di definisi resource: "the lower and upper bounds on how many times this element is allowed to appear". [3] Cara membacanya sebagai tipe TypeScript:

CardinalityArtiPadanan TSContoh R4
0..1opsional, paling banyak satugender?: stringPatient.gender
1..1wajib, tepat satustatus: stringObservation.status, Observation.code
0..*opsional, boleh banyakname?: HumanName[]Patient.name, Patient.identifier
1..*wajib, minimal satutype: Coding[] (non-empty)Signature.type

Kardinalitas contoh: [5] [6] [2]. Di tabel definisi juga ada flag: ?! = modifier element (mengubah makna elemen lain, mis. Patient.active, Observation.status) dan Σ = bagian dari summary. [3]

Latihan 1 — JSON dan cardinality

2. Patient: id vs identifier (±10 menit)

Patient adalah "Demographics and other administrative information about an individual or animal receiving care". [5] Potongan contoh resmi: [8]

{
  "resourceType": "Patient",
  "id": "example",                          // logical id: dari server, bagian URL
  "identifier": [{                          // business identifier: 0..*, selalu array
    "use": "usual",
    "type": { "coding": [{ "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "MR" }] },
    "system": "urn:oid:1.2.36.146.595.217.0.1",   // namespace: "siapa yang menjamin unik"
    "value": "12345",                             // nomor rekam medis (MR)
    "assigner": { "display": "Acme Healthcare" }
  }],
  "active": true,
  "name": [
    { "use": "official", "family": "Chalmers", "given": ["Peter", "James"] },
    { "use": "usual", "given": ["Jim"] }
  ],
  "gender": "male",
  "birthDate": "1974-12-25",
  "deceasedBoolean": false,                 // choice type deceased[x] (lesson 0006)
  "managingOrganization": { "reference": "Organization/1" }
}
id (logical id)identifier (business identifier)
Siapa yang menetapkanserver yang menyimpan resourceorganisasi/sistem dunia nyata (RS, negara, lab)
Bentuksatu string, maks. 64 karakter [A-Za-z0-9\-\.]objek system + value (+ use, type, period, assigner), boleh banyak
Cakupan unikper tipe resource, di server itudi dalam system-nya
Berubah?"Once assigned by the server, the id is never changed"; tapi bisa berbeda di server laintetap sama di semua salinan resource
Dipakai untukURL: [base]/Patient/example, Referencemencocokkan entitas antar sistem; search ?identifier=system|value
Padananprimary key (surrogate) di database Andanatural key: nomor RM, NIK

Kutipan dan aturan tabel: [1] [2]

Latihan 2 — id atau identifier?

Latihan 3 — Ucapkan dengan suara keras

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

"Apa beda id dan identifier di resource FHIR? Bagaimana Observation menunjuk ke pasiennya?" (60 detik)
Bandingkan dengan jawaban contoh dan checklist-nya

"id adalah logical id: ditetapkan server yang menyimpan resource, unik per tipe resource di server itu, tidak pernah berubah, dan membentuk URL-nya, misalnya Patient/123. Kalau resource disalin ke server lain, id-nya bisa berbeda. identifier adalah business identifier, seperti nomor rekam medis atau NIK: pasangan system (URI namespace) + value, dan bisa banyak. Dua resource dengan identifier sama dianggap entitas yang sama. Observation menunjuk pasien lewat Reference di subject: biasanya literal reference relatif Patient/123, opsional dengan display untuk UI. Kalau URL-nya tidak diketahui, bisa logical reference lewat subject.identifier, tapi chaining dan _include tidak jalan. Padanannya: id itu primary key database, identifier itu natural key, reference itu foreign key."

Checklist: apakah Anda menyebut…

  • id = logical id dari server, unik per tipe di server itu, tidak berubah?
  • id membentuk URL resource ([base]/Patient/123) dan bisa berbeda antar server?
  • identifier = business identifier (system + value), mis. nomor rekam medis/NIK, boleh banyak?
  • identifier sama = entitas dunia nyata yang sama, dipakai untuk mencocokkan antar sistem?
  • Reference relatif Patient/123 di subject, display hanya teks untuk ditampilkan?
  • logical reference lewat Reference.identifier bila URL tidak diketahui (tanpa chaining/_include)?

Lulus kalau minimal 4 dari 6.

Ringkasan untuk dicetak: Reference: Anatomi resource + datatype · Istilah: GLOSSARY.md (bagian "Resource dan datatype")

Ada yang belum jelas? Tanyakan ke saya (agent) di terminal, misalnya: "kapan Observation memakai component alih-alih beberapa Observation?", "bagaimana mengetik resource FHIR di TypeScript tanpa menulis semuanya sendiri?", atau "apa beda ValueSet dan CodeSystem?"

Sumber (semua diakses 26 Oktober 2026): [1] Resource · [2] Data Types · [3] Resource Formats · [4] JSON Representation · [5] Patient · [6] Observation · [7] DomainResource · [8] Contoh Patient