Halaman ini menjelaskan cara mengonfigurasi skema kustom untuk mengurai pesan HL7v2 yang tidak sesuai dengan standar HL7v2.
Jika mengonversi pesan HL7v2 ke format lain, seperti FHIR atau OMOP, Anda harus dapat mengurai dan menyerap pesan HL7v2 ke dalam penyimpanan HL7v2 terlebih dahulu. Gunakan panduan ini untuk memastikan bahwa Anda berhasil mengurai dan menyerap pesan HL7v2.
Ringkasan
Terkadang, pesan HL7v2 Anda mungkin tidak sesuai dengan standar HL7v2. Misalnya, pesan HL7v2 Anda mungkin berisi segmen yang tidak disertakan dalam standar HL7v2, atau segmen mungkin tidak berurutan. Saat mencoba mengasimilasikan pesan yang tidak sesuai, Anda mungkin mengalami error.
Untuk menyerap pesan HL7v2 yang tidak sesuai, Anda harus mengubah objek ParserConfig
saat membuat atau mengedit penyimpanan HL7v2. Di dalam ParserConfig
, Anda
dapat mengonfigurasi penguraian skema berdasarkan jenis dan segmen kustom, menentukan cara pesan HL7v2 yang ditolak
ditangani, dan lainnya.
Sebelum mengonfigurasi ParserConfig
, baca bagian berikut untuk memahami
pesan HL7v2, definisi jenis, dan definisi grup.
Pesan HL7v2
Bagian ini memberikan ringkasan singkat tentang struktur pesan HL7v2, yang akan berguna saat mengonfigurasi parser skema kustom.
Pesan HL7v2 berbasis peristiwa dan menjelaskan transisi status serta update sebagian pada catatan klinis. Setiap pesan HL7v2 memiliki jenis pesan yang menentukan tujuan pesan. Jenis pesan menggunakan kode tiga karakter dan ditentukan dalam header segmen utama wajib (MSH) pesan. Ada puluhan jenis pesan, termasuk yang berikut:
ADT
: digunakan untuk mengirimkan bagian dari data Administrasi Pasien pasienORU
: digunakan untuk mengirimkan hasil pengamatanORM
: digunakan untuk mengirimkan informasi tentang pesanan
Tinjau struktur pesan HL7v2, yang terdiri dari segmen, kolom, komponen, dan sub-komponen:
Dalam gambar 1, bagian pesan HL7v2 berikut diberi label: segmen, header segmen, kolom, dan komponen.
Secara default, pesan HL7v2 menggunakan karakter berikut untuk
memisahkan informasi. Anda dapat mengganti pemisah,
pemisah, dan terminator pesan HL7v2 berdasarkan per pesan di segmen MSH
.
Terminator segmen:
\r
Jika pesan HL7v2 Anda menggunakan pemisah segmen yang berbeda, lihat contoh Terminator segmen kustom dan kolom kustom.
Pemisah kolom:
|
Pemisah komponen:
^
Pemisah subkomponen:
&
Pemisah pengulangan:
~
Karakter escape:
\
Definisi jenis dan grup
Memahami parser skema melibatkan penggunaan definisi jenis dan definisi grup.
Definisi jenis
Istilah "jenis" mencakup hal berikut:
Jenis segmen HL7v2, seperti
MSH
(Header Segmen Pesan),DG1
(Diagnosis), danPID
(Identifikasi Pasien)Untuk mengetahui daftar semua jenis segmen HL7v2, lihat Definisi segmen.
Jenis data HL7v2, seperti
ST
(Data String),TS
(Stempel Waktu), danSI
(ID Urutan)Untuk mengetahui daftar semua jenis data default HL7v2, lihat Jenis data.
Anda menentukan jenis di kolom name
di dalam objek Type
.
Jenis menggunakan format modular yang terdiri dari segmen dan kolom, komponen, dan
sub-komponen segmen. Informasi dalam objek Type
menunjukkan cara mengurai atau menafsirkan segmen dan
menjawab pertanyaan seperti berikut:
- Kolom apa yang ada dalam segmen?
- Apa jenis data kolom?
Contoh berikut menunjukkan definisi jenis untuk segmen ZCD
kustom:
{ "type": { "name": "ZCD", // Segment type "fields": [ { "name": "1", "type": "ST", // Primitive string data type "minOccurs": 1, // Must occur at least once "maxOccurs": 1 // Not repeated, because it can only occur once }, { "name": "2", "type": "A", // Custom data type "minOccurs": 1 // Repeated, because maxOccurs is not defined } ] } }
Dalam contoh ini, segmen ZCD
berisi dua kolom, bernama 1
dan 2
.
Jenis data untuk 1
adalah ST
, yang merupakan jenis data string primitif. Jenis data untuk 2
adalah A
, yang merupakan jenis data kustom.
Definisi jenis berikut untuk jenis data kustom A
menunjukkan bahwa jenis data ini juga berisi
jenis data kustom lain, bernama B
.
{ "type": { "name": "A", // Custom data type "fields": [ { "name": "1", "type": "ST", // Primitive string data type "minOccurs": 1, // Must occur at least once "maxOccurs": 1 // Not repeated, because it can only occur once }, { "name": "2", "type": "B", // Custom data type "minOccurs": 1, "maxOccurs": 1 } ] } }
Contoh berikut menunjukkan definisi jenis untuk jenis data kustom B
,
yang memiliki kolom bernama 1
dengan jenis data ST
dan kolom bernama
2
yang memiliki jenis data ST
yang berulang:
{ "type": { "name": "B", // Custom data type "fields": [ { "name": "1", "type": "ST", // Primitive string data type "minOccurs": 1, // Must occur at least once "maxOccurs": 1 // Not repeated, because it can only occur once }, { "name": "2", "type": "ST" "minOccurs": 1, "maxOccurs": 1 } ] } }
Dengan mengetahui informasi tentang segmen dan jenis data, Anda dapat memperkirakan tampilan
segmen ZCD
dalam pesan HL7v2 asli. Contoh ini menunjukkan
pesan HL7v2 dengan kolom A
yang diulang sekali, yang diizinkan untuk
dilakukan karena maxOccurs
tidak ditetapkan di kolom A
:
ZCD|ZCD_field_1|A_field_1^B_component_1&B_component_2_repetition_1~A_field_1^B_component_1&B_component_2_repetition_2
Dalam gambar 2, bagian definisi jenis berikut diberi label: segmen, header segmen, kolom, komponen, subkomponen, dan pengulangan.
Definisi grup
Grup ditentukan di tingkat segmen dan memberi tahu Anda informasi tentang jenis segmen yang dapat muncul di setiap pesan HL7v2.
Anda menentukan grup dalam array groups
di dalam objek GroupOrSegment
.
Pertimbangkan cuplikan struktur grup berikut untuk pesan HL7v2 ADT_A01
:
segment
pertama dalam arraymembers
adalahMSH
(Header Segmen Pesan), karenaMSH
diperlukan dalam setiap pesan HL7v2.group
bernamaGroup 1
.Grup ini hanya dapat terjadi maksimal
2
kali dan berisi segmenZCD
kustom.Biasanya,
group
berisi beberapa segmen bertingkat yang dikelompokkan secara logis dan grup lainnya, tetapi dalam contoh iniGroup 1
hanya berisi satu segmen:ZCD
.
{ "ADT_A01": { "members": [ { "segment": { "type": "MSH" } }, { "group": { "name": "Group 1", "minOccurs": 1, "maxOccurs": "2", "members": [ { "segment": { "type": "ZCD" } } ] } } ] } }
Dengan mengetahui informasi tentang grup, Anda dapat memperkirakan
tampilan pesan HL7v2 asli jika ZCD
muncul dua kali dalam pesan HL7v2,
yang diizinkan karena maxOccurs
di Group 1
ditetapkan ke 2
.
Sisa segmen ZCD
tidak diketahui tanpa mengetahui
definisi jenis.
MSH|^~\&|||||20100308000000||ADT^A01|23701|1|2.3|| ZCD|ZCD_CONTENT ZCD|ZCD_CONTENT
Dalam gambar 3, bagian definisi grup berikut diberi label: segmen dan header segmen.
Mengonfigurasi skema kustom di penyimpanan HL7v2
Bagian berikut menjelaskan komponen skema kustom dan cara mengonfigurasi skema di penyimpanan HL7v2.
Konfigurasi jenis penyimpanan HL7v2
Setelah memahami definisi jenis pesan HL7v2, Anda dapat menentukan
konfigurasi jenis di penyimpanan HL7v2. Untuk menentukan konfigurasi, tambahkan
array types
dan array version
.
Contoh berikut menunjukkan cara menentukan konfigurasi untuk jenis yang ditampilkan di Definisi jenis di penyimpanan HL7v2.
Perhatikan bahwa konfigurasi menggunakan array version
untuk
menentukan kolom mshField
dan value
. Kolom
ini sesuai dengan kolom dan komponen di segmen MSH.
Array types
yang Anda tentukan hanya berlaku untuk pesan yang memiliki segmen MSH yang sesuai dengan nilai untuk mshField
dan value
dalam array version
. Hal ini memungkinkan Anda menyerap pesan HL7v2 dengan versi yang berbeda
ke dalam penyimpanan HL7v2 yang sama.
{ "types": [ { "version": [ { "mshField": "12", "value": "2.3" } ], "type": [ { "name": "ZCD", // Segment type "fields": [ { "name": "1", "type": "ST", "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "A", "minOccurs": 1 } ] }, { "name": "A", // Data type "fields": [ { "name": "1", "type": "ST", "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "B", "minOccurs": 1, "maxOccurs": 1 } ] }, { "name": "B", // Data type "fields": [ { "name": "1", "type": "ST", "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "ST" } ] } ] } ] }
Konfigurasi grup penyimpanan HL7v2
Anda dapat menggunakan grup untuk mengonfigurasi struktur bertingkat di tingkat "keanggotaan".
Grup ditentukan dalam array
members
di tingkat segmen. Struktur segmen dapat diprediksi dan biasanya
berisi kolom, komponen, dan sub-komponen, tetapi segmen itu sendiri dapat berada di
level pesan HL7v2 mana pun.
Seperti konfigurasi jenis, konfigurasi grup menggunakan
filter version
agar Anda dapat menyerap pesan HL7v2 dengan versi yang berbeda ke dalam penyimpanan HL7v2 yang sama.
Contoh berikut menunjukkan cara menentukan konfigurasi untuk grup yang ditampilkan di Definisi grup di penyimpanan HL7v2:
{ "version": [ { "mshField": "12", "value": "2.3" } ], "messageSchemaConfigs": { "ADT_A01": { "members": [ { "segment": { "type": "MSH" } }, { "group": { "name": "Group 1", "maxOccurs": "2", "members": [ "segment": { "type": "ZCD" } ] } } ] } } }
Menyelesaikan konfigurasi penyimpanan HL7v2
Saat menggabungkan konfigurasi type dan konfigurasi group, Anda dapat menentukan tampilan konfigurasi skema kustom lengkap di penyimpanan HL7v2. Anda juga dapat menentukan bahwa skema kustom cocok dengan pesan HL7v2 yang terlihat seperti berikut:
MSH|^~\&|||||20100101000000||ADT^A01^A01|23701|1|2.3||
ZCD|ZCD_field_1|A_field_1^B_component_1&B_component_2_repetition_1~A_field_1^B_component_1&B_component_2_repetition_2
Luaskan bagian berikut untuk melihat skema kustom lengkap di penyimpanan HL7v2, lalu lanjutkan untuk membuat penyimpanan HL7v2 yang menggunakan skema kustom:
Luaskan
{ "parserConfig": { "schema": { "schemas": [ { "version": [ { "mshField": "12", "value": "2.3" } ], "messageSchemaConfigs": { "ADT_A01": { "name": "ADT_A01", "members": [ { "segment": { "type": "MSH", "minOccurs": 1, "maxOccurs": 1 } }, { "group": { "name": "Group 1", "minOccurs": 1, "maxOccurs": "2", "members": [ { "segment": { "type": "ZCD" } } ] } } ] } } } ], "types": [ { "version": [ { "mshField": "12", "value": "2.3" } ], "type": [ { "name": "ZCD", // Segment type "fields": [ { "name": "1", "type": "ST", "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "A" "minOccurs": 1, "maxOccurs": 1 } ] }, { "name": "A", // Data type "fields": [ { "name": "1", "type": "ST" "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "B" "minOccurs": 1, "maxOccurs": 1 } ] }, { "name": "B", // Data type "fields": [ { "name": "1", "type": "ST" "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "ST" "minOccurs": 1 } ] } ] } ] }, "version": "V3" } }
Membuat penyimpanan HL7v2 dengan skema kustom
Untuk membuat penyimpanan HL7v2 yang menggunakan skema kustom lengkap, selesaikan bagian ini.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- PROJECT_ID: ID project Google Cloud Anda
- LOCATION: lokasi set data
- DATASET_ID: set data induk penyimpanan HL7v2
- HL7V2_STORE_ID: ID penyimpanan HL7v2
Meminta isi JSON:
{ "parserConfig": { "schema": { "schemas": [ { "version": [ { "mshField": "12", "value": "2.3" } ], "messageSchemaConfigs": { "ADT_A01": { "name": "ADT_A01", "members": [ { "segment": { "type": "MSH", "minOccurs": 1 } }, { "group": { "name": "Group 1", "minOccurs": 1, "members": [ { "segment": { "type": "ZCD" } } ] } } ] } } } ], "types": [ { "version": [ { "mshField": "12", "value": "2.3" } ], "type": [ { "name": "ZCD", "fields": [ { "name": "1", "type": "ST", "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "A", "minOccurs": 1 } ] }, { "name": "A", "fields": [ { "name": "1", "type": "ST", "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "B", "minOccurs": 1, "maxOccurs": 1 } ] }, { "name": "B", "fields": [ { "name": "1", "type": "ST", "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "ST", "minOccurs": 1, "maxOccurs": 1 } ] } ] } ] }, "version": "V3" } }
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Simpan isi permintaan dalam file bernama request.json
.
Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:
cat > request.json << 'EOF' { "parserConfig": { "schema": { "schemas": [ { "version": [ { "mshField": "12", "value": "2.3" } ], "messageSchemaConfigs": { "ADT_A01": { "name": "ADT_A01", "members": [ { "segment": { "type": "MSH", "minOccurs": 1 } }, { "group": { "name": "Group 1", "minOccurs": 1, "members": [ { "segment": { "type": "ZCD" } } ] } } ] } } } ], "types": [ { "version": [ { "mshField": "12", "value": "2.3" } ], "type": [ { "name": "ZCD", "fields": [ { "name": "1", "type": "ST", "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "A", "minOccurs": 1 } ] }, { "name": "A", "fields": [ { "name": "1", "type": "ST", "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "B", "minOccurs": 1, "maxOccurs": 1 } ] }, { "name": "B", "fields": [ { "name": "1", "type": "ST", "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "ST", "minOccurs": 1, "maxOccurs": 1 } ] } ] } ] }, "version": "V3" } } EOF
Kemudian, jalankan perintah berikut untuk mengirim permintaan REST Anda:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID"
PowerShell
Simpan isi permintaan dalam file bernama request.json
.
Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:
@' { "parserConfig": { "schema": { "schemas": [ { "version": [ { "mshField": "12", "value": "2.3" } ], "messageSchemaConfigs": { "ADT_A01": { "name": "ADT_A01", "members": [ { "segment": { "type": "MSH", "minOccurs": 1 } }, { "group": { "name": "Group 1", "minOccurs": 1, "members": [ { "segment": { "type": "ZCD" } } ] } } ] } } } ], "types": [ { "version": [ { "mshField": "12", "value": "2.3" } ], "type": [ { "name": "ZCD", "fields": [ { "name": "1", "type": "ST", "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "A", "minOccurs": 1 } ] }, { "name": "A", "fields": [ { "name": "1", "type": "ST", "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "B", "minOccurs": 1, "maxOccurs": 1 } ] }, { "name": "B", "fields": [ { "name": "1", "type": "ST", "minOccurs": 1, "maxOccurs": 1 }, { "name": "2", "type": "ST", "minOccurs": 1, "maxOccurs": 1 } ] } ] } ] }, "version": "V3" } } '@ | Out-File -FilePath request.json -Encoding utf8
Kemudian jalankan perintah berikut untuk mengirim permintaan REST Anda:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID" | Select-Object -Expand Content
Anda akan melihat respons JSON seperti berikut:
Menyerap dan mengurai pesan HL7v2 menggunakan skema kustom
Untuk menyerap pesan HL7v2 versi berenkode base64, selesaikan bagian ini.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
- PROJECT_ID: project ID Google Cloud Anda
- LOCATION: lokasi set data induk
- DATASET_ID: set data induk penyimpanan HL7v2
- HL7V2_STORE_ID: ID penyimpanan HL7v2
Meminta isi JSON:
{ "message": { "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxBRFReQTAxXkEwMXwyMzcwMXwxfDIuM3x8DVpDRHxaQ0RfZmllbGRfMXxBX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMX5BX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMQ==" } }
Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:
curl
Simpan isi permintaan dalam file bernama request.json
.
Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:
cat > request.json << 'EOF' { "message": { "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxBRFReQTAxXkEwMXwyMzcwMXwxfDIuM3x8DVpDRHxaQ0RfZmllbGRfMXxBX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMX5BX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMQ==" } } EOF
Kemudian, jalankan perintah berikut untuk mengirim permintaan REST Anda:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages:ingest"
PowerShell
Simpan isi permintaan dalam file bernama request.json
.
Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:
@' { "message": { "data": "TVNIfF5+XCZ8fHx8fDIwMTAwMTAxMDAwMDAwfHxBRFReQTAxXkEwMXwyMzcwMXwxfDIuM3x8DVpDRHxaQ0RfZmllbGRfMXxBX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMX5BX2ZpZWxkXzJeQl9jb21wb25lbnRfMSZCX2NvbXBvbmVudF8yX3JlcGV0aXRpb25fMQ==" } } '@ | Out-File -FilePath request.json -Encoding utf8
Kemudian jalankan perintah berikut untuk mengirim permintaan REST Anda:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages:ingest" | Select-Object -Expand Content
Anda akan melihat respons JSON seperti berikut:
Menentukan kardinalitas kolom
Anda dapat menentukan kardinalitas kolom dalam pesan HL7v2 dengan menetapkan kolom berikut di penyimpanan HL7v2:
minOccurs
: menentukan frekuensi minimum grup, segmen, kolom, komponen, atau subkomponen yang harus ada atau diulang dalam pesan HL7v2 yang masukmaxOccurs
: menentukan jumlah maksimum frekuensi grup, segmen, kolom, komponen, atau subkomponen yang dapat ada atau diulang dalam pesan HL7v2 yang masuk
Mengabaikan elemen yang tidak ada
Tetapkan ignoreMinOccurs
ke true
jika Anda ingin HL7v2 API menerima semua pesan HL7v2 yang masuk, terlepas
dari elemen yang hilang. Artinya, pesan tidak akan ditolak
jika tidak memiliki grup, segmen, kolom, komponen, atau subkomponen yang diperlukan.
Jika Anda tidak dapat menyerap pesan HL7v2 karena pesan tersebut tidak memiliki kolom wajib, sebaiknya tetapkan ignoreMinOccurs
ke true
.
Jenis kolom karakter pengganti
Karakter pengganti, *
, adalah jenis khusus yang digunakan untuk kolom. Penggunaan *
menunjukkan kepada
parser HL7v2 bahwa kolom harus diuraikan berdasarkan struktur dalam
pesan HL7v2. Menggunakan *
sebagai pengganti nilai untuk kolom berguna
saat Anda tidak ingin menerapkan jenis data kolom yang ketat. Selama
konten dalam kolom mengikuti standar HL7v2, Cloud Healthcare API dapat
menguraikan pesan HL7v2.
Misalnya, pertimbangkan definisi jenis berikut. Kolom 2
menggunakan karakter karakter pengganti, bukan jenis data kolom. Definisi ini
setara dengan definisi pertama di Definisi jenis, dan tidak
memerlukan Anda untuk menentukan jenis A
dan B
:
"type": { "name": "ZCD" "fields": [ { "name": "1", "type": "ST" }, { "name": "2", "type": "*" } ] }
Langkah selanjutnya
Pelajari lebih lanjut cara mengonfigurasi parser skema kustom dengan Contoh parser skema kustom.