meta, contained, extension; membaca resource utuh
Metadata dari server, resource tanpa identitas sendiri, data di luar definisi inti, lalu satu Observation dibaca dari awal sampai akhir
Di lesson 0006 Anda membaca kode dan value[x]. Tinggal tiga bagian dari kerangka resource di lesson 0004 yang belum dibahas: meta, contained, dan extension. Setelah itu, satu Observation resmi dibaca utuh.
meta (versionId, lastUpdated, profile) dan siapa yang mengisinya,
kapan contained boleh dipakai, beda extension dan modifierExtension,
lalu membaca Observation utuh baris per baris: siapa, apa, kapan, hasil, dan artinya.
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. meta, contained, extension (±12 menit)
meta: metadata teknis, diisi server
"meta": {
"versionId": "3", // berubah setiap konten berubah
"lastUpdated": "2024-05-01T08:15:00+07:00", // waktu server saat versi ini dibuat
"profile": ["http://example.org/fhir/StructureDefinition/my-patient"] // klaim conformance
}
versionId"Changes each time the content of the resource changes", dan pada write "the server SHALL update this item to the current value, or remove it". Jangan mengasumsikan urutan numerik: "clients cannot assume that a versionId that comes after another one either numerically or alphabetically represents a later version". Ini dasar ETag/If-Matchdi lesson 0010. [1]lastUpdated: pada write, server "SHALL update this item to the current time on the server". [1]profile: "Profiles this resource claims to conform to", "An assertion that the content conforms to a resource profile (a StructureDefinition)". Itu klaim: server "MAY elect to remove invalid claims". [1]- Juga ada
meta.source,meta.security(label keamanan),meta.tag. Nilaimetadi contoh di atas ilustrasi, bukan dari contoh resmi.
contained: resource tanpa identitas sendiri
{
"resourceType": "Condition",
"contained": [{ "resourceType": "Practitioner", "id": "p1",
"name": [{ "family": "Person", "given": ["Patricia"] }] }],
"asserter": { "reference": "#p1" }
}
Contoh resmi: interface engine membuat Condition dari pesan HL7 v2 dan hanya tahu nama dokter, yang tidak cukup untuk membuat Practitioner yang teridentifikasi. [2]
- "This SHOULD NOT be done when the content can be identified properly, as once the identification is lost, it is extremely difficult ... to restore it again."
- Contained tidak bisa berisi contained lagi, tidak boleh punya
meta.versionId/lastUpdated, dan harus dirujuk dari resource induknya (atau merujuk induknya). "References to contained resources are never resolved outside the container resource." - Padanan JS: objek yang di-embed di dokumen MongoDB tanpa
_idsendiri, dibanding dokumen terpisah yang dirujuk.
extension: data di luar definisi inti
Spesifikasi sengaja hanya memuat kebutuhan yang disepakati umum; kebutuhan lain "will be implemented as extensions". "Every element in a resource can have extension child elements", dan "Applications should not reject resources merely because they contain extensions". [3]
// Patient contoh resmi: jam lahir ditempel ke nilai primitif birthDate lewat _birthDate
"birthDate": "1974-12-25",
"_birthDate": {
"extension": [{
"url": "http://hl7.org/fhir/StructureDefinition/patient-birthTime", // WAJIB: canonical URL definisinya
"valueDateTime": "1974-12-25T14:35:45-05:00" // value[x] lagi
}]
}
urlwajib dan "SHALL be the canonical URL of a StructureDefinition that defines the extension". Extension "SHALL have either a value (i.e. a value[x] element) or sub-extensions, but not both". [3]- Extension pada elemen primitif (string, tanggal, angka) ditaruh di property bernama sama berawalan garis bawah:
_birthDate, karena nilai primitif JSON tidak bisa punya property. [4] - modifierExtension: "If it is not safe for an application processing the content of the resource to ignore the extension it SHALL be represented using a Modifier Extension". Aplikasi yang memproses elemen dengan modifierExtension wajib memilih salah satu: memahaminya, menolak resource, memakainya hanya untuk tampilan narrative, meminta manusia mengecek, atau membawa peringatan bahwa data belum dipahami penuh. [3]
- Hubungannya dengan lesson 0003: extension didefinisikan dan dipaketkan dalam profile/Implementation Guide, dan resource mengklaim profile lewat
meta.profile.
Latihan 1 — meta, contained, extension
2. Baca utuh (±5 menit)
Tutup bagian di atas. Baca Observation resmi ini dan jelaskan setiap baris dengan suara keras: siapa, apa, kapan, hasil, dan apa artinya. [7]
{
"resourceType": "Observation",
"id": "f001",
"identifier": [{ "use": "official", "system": "http://www.bmc.nl/zorgportal/identifiers/observations", "value": "6323" }],
"status": "final",
"code": { "coding": [{ "system": "http://loinc.org", "code": "15074-8", "display": "Glucose [Moles/volume] in Blood" }] },
"subject": { "reference": "Patient/f001", "display": "P. van de Heuvel" },
"effectivePeriod": { "start": "2013-04-02T09:30:10+01:00" },
"issued": "2013-04-03T15:30:10+01:00",
"performer": [{ "reference": "Practitioner/f005", "display": "A. Langeveld" }],
"valueQuantity": { "value": 6.3, "unit": "mmol/l", "system": "http://unitsofmeasure.org", "code": "mmol/L" },
"interpretation": [{ "coding": [{ "system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation",
"code": "H", "display": "High" }] }],
"referenceRange": [{ "low": { "value": 3.1, "unit": "mmol/l", "system": "http://unitsofmeasure.org", "code": "mmol/L" },
"high": { "value": 6.2, "unit": "mmol/l", "system": "http://unitsofmeasure.org", "code": "mmol/L" } }]
}
Bandingkan bacaan Anda
Observation dengan logical id f001 dan business identifier 6323 dari sistem rumah sakit. Status final.
Yang diukur: glukosa darah, LOINC 15074-8 (CodeableConcept dengan satu Coding). Pasiennya Patient/f001 (literal reference relatif + display).
Waktu klinisnya effectivePeriod (choice type effective[x]), dirilis (issued) sehari kemudian, oleh Practitioner/f005.
Hasil valueQuantity 6.3 mmol/L (UCUM), di atas rentang rujukan 3.1–6.2, jadi interpretation = H (High).
issued adalah "Date/Time this version was made available", berbeda dari effective[x] "Clinically relevant time/time-period for observation". [5]
Latihan 2 — Membaca resource
Latihan 3 — Ucapkan dengan suara keras
Pasang timer dan jawab dengan suara keras, seolah sedang interview. Jangan buka jawaban contoh sebelum selesai.
"Rumah sakit kami butuh data yang tidak ada di resource FHIR standar. Apa yang Anda lakukan? Jelaskan jugameta.profiledancontained." (60 detik)
Bandingkan dengan jawaban contoh dan checklist-nya
"FHIR sengaja menaruh kebutuhan di luar inti ke extension: setiap elemen boleh punya extension, yang wajib punya url ke StructureDefinition yang mendefinisikannya, plus satu value[x] atau sub-extension.
Aplikasi tidak boleh menolak resource hanya karena ada extension. Kalau data itu mengubah makna resource sehingga tidak aman diabaikan, wajib pakai modifierExtension.
Extension biasanya didefinisikan dalam profile, dan resource bisa mengklaim mematuhi profile lewat meta.profile; meta juga berisi versionId dan lastUpdated yang diisi server.
contained beda lagi: resource kecil yang disisipkan di dalam resource lain karena tidak bisa diidentifikasi sendiri, dirujuk dengan #id; jangan dipakai kalau datanya bisa punya identitas sendiri."
Checklist: apakah Anda menyebut…
- kebutuhan di luar inti memakai extension, bukan property JSON baru?
- extension wajib punya url (StructureDefinition) dan value[x] atau sub-extension?
- modifierExtension untuk data yang mengubah makna dan tidak aman diabaikan?
- meta.profile = klaim resource mematuhi profile (StructureDefinition)?
- meta.versionId dan meta.lastUpdated diisi server dan berubah setiap konten berubah?
- contained = resource tanpa identitas sendiri di dalam resource lain, dirujuk dengan #id?
Lulus kalau minimal 4 dari 6. Review 0012 akan menanyakan salah satunya lagi.
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] Resource References · [3] Extensibility · [4] JSON Representation · [5] Observation · [6] DomainResource · [7] Contoh Observation f001 (glukosa) · [8] Contoh Patient