API Documentation

v2.1

Panduan integrasi teknis antara SIMRS KHANZA dan Laboratory Information System (LIS) BIOSYS melalui BIOSYS API.

Global Authentication

Semua request API memerlukan Header berikut:

X-API-KEY: LIS_SIMRS_123456

KONFIGURASI KONEKSI

Gunakan konfigurasi berikut pada sistem SIMRS Anda:

API Key / Username X-API-KEY
Secret Key / Password LIS_SIMRS_123456

* Masukkan API Key sebagai nama Header, dan Secret Key sebagai nilai Header pada setiap request.

Apa yang Baru di v2.1

  • PUT /order_update sekarang ADDITIVE — test lama tidak lagi hilang saat update; gunakan field baru RemoveItems untuk hapus eksplisit.
  • POST /lab_order strict validation — response 406 kalau sub-item HIS belum di-mapping; order disimpan dengan status ERROR supaya bisa dipetakan dari UI LIS.
  • GET /lab_result — field TestHis sekarang strict, hanya HIS code yang relevan dengan order (bukan seluruh mapping historis).

Post Laboratory Order

Mengirim pemesanan transaksi / tagihan tes laboratorium baru dari SIMRS ke LIS BIOSYS.

Endpoint

POST IP SERVER Atau URL SERVER/bridging_kz/lab_order.php

Base URL

https://kz.biosys.softwarelaboratorium.com

Contoh full URL:

https://kz.biosys.softwarelaboratorium.com/bridging_kz/lab_order.php

Request

Method

POST

Request Body (application/json)

Parameter Type Required Description
PatientCode string Yes Nomor Rekam Medis (RM) / Kode Pasien
OrderNumber string Yes Nomor order transaksi unik dari SIMRS
PatientName string Yes Nama Pasien sesuai identitas
IdentityNumber string Yes NIK / Nomor KTP Pasien
PatientDob date Yes Tanggal lahir (YYYY-MM-DD)
PatientSexCode string Yes Kode Jenis Kelamin: 1 (Laki-laki), 2 (Perempuan)
PatientAddress string Yes Alamat lengkap pasien
DiagnosisName string Yes Diagnosa sementara / klinis
OrderDateTime datetime Yes Waktu order dikirim (YYYY-MM-DD HH:MM:SS)
DoctorOrderCode string Yes Kode Dokter Pengirim
DoctorOrderName string Yes Nama Dokter Pengirim
DoctorInChargeCode string Yes Kode Dokter Penanggung Jawab (DPJP)
DoctorInChargeName string Yes Nama Dokter Penanggung Jawab (DPJP)
ServiceClassCode string Yes Kode Kelas Layanan
ServiceClassName string Yes Nama Kelas Layanan (cth: Kelas 1)
WardRoomCode string Yes Kode Ruangan / Poliklinik
WardRoomName string Yes Nama Ruangan / Poliklinik
GuarantorId string Yes ID Penjamin / Asuransi
GuarantorName string Yes Nama Penjamin (cth: BPJS KESEHATAN)
PatientType string Yes Tipe Pasien (cth: 1 untuk Rawat Inap)
IsCito int Yes 1 (Cito/Segera), 0 (Rutin)
IsBpjs int Yes 1 (BPJS), 0 (Non-BPJS)
InternalNote string Yes Catatan internal untuk petugas lab
PatientNote string Yes Catatan instruksi untuk pasien
OrderedItems array Yes Daftar test yang diorder (Array of Object). Mendukung 2 format: Flat (langsung ItemCode) atau Nested (panel/header dengan HeaderItemCode, HeaderItemName, dan array Items berisi sub-test).

OrderedItems — Struktur Nested (Panel / Header)

Gunakan struktur nested ketika SIMRS mengirim paket pemeriksaan (panel) yang berisi beberapa sub-test. Contoh: panel 10.001596.AK1 (PAKET Na/K/Cl) berisi sub-test 27178 (Natrium), 27179 (Kalium), 27180 (Chlorida).

Field Type Required Description
HeaderItemCode string Yes Kode panel / header pemeriksaan SIMRS (mis. 10.001596.AK1 untuk PAKET Na/K/Cl). Kode ini harus sudah dimapping ke kodetest LIS (untuk kode ini didapatkan dari Kode Jenis Perawatan).
HeaderItemName string Yes Nama panel / header pemeriksaan (mis. PAKET Na/K/Cl). Ditampilkan sebagai informasi di LIS.
Items array Yes Daftar sub-test di bawah panel (mis. Natrium 27178, Kalium 27179, Chlorida 27180). Wajib berisi minimal 1 item.
Items[].ItemCode string Yes Kode HIS sub-test SIMRS (mis. 27180 untuk Chlorida). Wajib sudah dimapping ke kodetest LIS (untuk kode ini didapatkan dari Kode ID Template). Bila belum dimapping, order ditolak dengan error 406.
Items[].ItemName string Yes Nama sub-test (mis. Chlorida).

Example Request Body — Nested (Recommended)

{
    "PatientCode": "281295",
    "OrderNumber": "ORD-20260306-0005",
    "PatientName": "UNI 5",
    "IdentityNumber": "3201234567890005",
    "PatientDob": "2003-07-06",
    "PatientSexCode": "2",
    "PatientAddress": "Jl. Raya Bogor KM 50, No. 12",
    "DiagnosisName": "Demam tidak spesifik (Febris)",
    "OrderDateTime": "2026-03-06 20:54:00",
    "DoctorOrderCode": "DR001",
    "DoctorOrderName": "dr. Ahmad Spesialis",
    "DoctorInChargeCode": "DR005",
    "DoctorInChargeName": "dr. Siti Sarah, Sp.PK",
    "ServiceClassCode": "CL1",
    "ServiceClassName": "Kelas 1",
    "WardRoomCode": "MAWAR",
    "WardRoomName": "Ruang Mawar",
    "GuarantorId": "0012",
    "GuarantorName": "BPJS KESEHATAN",
    "PatientType": "1",
    "IsCito": 1,
    "IsBpjs": 1,
    "InternalNote": "Riwayat alergi antibiotik.",
    "PatientNote": "Puasa minimal 10 jam.",
    "OrderedItems": [
        {
            "HeaderItemCode": "10.001596.AK1",
            "HeaderItemName": "PAKET Na/K/Cl",
            "Items": [
                { "ItemCode": "27178", "ItemName": "Natrium" },
                { "ItemCode": "27179", "ItemName": "Kalium" },
                { "ItemCode": "27180", "ItemName": "Chlorida" }
            ]
        },
        {
            "HeaderItemCode": "10.000777.AK1",
            "HeaderItemName": "SGOT/AST",
            "Items": [
                { "ItemCode": "28863", "ItemName": "SGOT" }
            ]
        },
        {
            "HeaderItemCode": "10.000798.AK1",
            "HeaderItemName": "SGPT/ALT",
            "Items": [
                { "ItemCode": "28878", "ItemName": "SGPT" }
            ]
        }
    ]
}

Example Request Body — Flat (Legacy, Backward Compatible)

Format lama tanpa panel/header tetap didukung. Gunakan bila SIMRS hanya mengirim daftar test tanpa pengelompokan.

{
    "PatientCode": "281295",
    "OrderNumber": "ORD-20260306-0005",
    "PatientName": "UNI 5",
    "OrderDateTime": "2026-03-06 20:54:00",
    "OrderedItems": [
        { "ItemCode": "28863", "ItemName": "SGOT" },
        { "ItemCode": "28878", "ItemName": "SGPT" }
    ]
}

Success Response

{
    "message": "Data berhasil disimpan !",
    "status": "200",
    "payload": {
        "nolab": "2603130005",
        "specType": "00"
    }
}

Error Response — Mapping Belum Tersedia

HTTP Status: 406 Not Acceptable

Error ini terjadi ketika sub-item (dalam format nested) atau flat ItemCode belum dipetakan ke kodetest LIS (tb_test_his). Order tetap disimpan di staging (lab_order_simrs) dengan process_status = 'ERROR' sehingga bisa dimapping dari UI LIS (Mapping Test Modal); setelah mapping disimpan, order otomatis di-reprocess.

{
    "message": "Mapping HIS belum tersedia untuk: 27180 (Chlorida). Silakan mapping ke kodetest LIS terlebih dahulu (tb_test_his) sebelum submit order.",
    "status": "406",
    "payload": []
}

Error Response — Field Wajib Kosong

HTTP Status: 400 Bad Request

Terjadi kalau salah satu field wajib minimum (PatientCode, OrderNumber, PatientName, OrderDateTime, OrderedItems) kosong atau OrderedItems berupa array kosong.

{
    "status": "error",
    "message": "Field OrderNumber wajib diisi"
}

Update Order

Menambah test baru dan/atau menghapus test tertentu pada order laboratorium yang sudah ada. Endpoint ini beroperasi dalam mode ADDITIVE — test lama yang tidak disebut di payload tetap dipertahankan.

Semantik ADDITIVE (v2.1+):

  • OrderedItems → test di dalamnya akan ditambahkan ke order yang ada (dedupe otomatis, tidak replace).
  • RemoveItems (baru) → daftar HIS code yang akan dihapus dari order.
  • Test yang sudah ada di order tapi tidak disebut di OrderedItems maupun RemoveItemstidak tersentuh.
  • Untuk membatalkan seluruh order gunakan endpoint DELETE /order_delete.

Endpoint

PUT IP SERVER Atau URL SERVER/bridging_kz/order_update.php

Base URL

https://kz.biosys.softwarelaboratorium.com

Contoh full URL:

https://kz.biosys.softwarelaboratorium.com/bridging_kz/order_update.php

Request

Method

PUT

Request Body (application/json)

Parameter Type Required Description
OrderNumber string Yes Nomor order transaksi unik dari SIMRS (harus sudah pernah di-POST sebelumnya)
PatientCode string Yes Nomor Rekam Medis (RM) / Kode Pasien
OrderedItems array Yes* Daftar test baru yang akan ditambahkan ke order. Boleh array kosong [] bila tujuannya hanya menghapus (lihat RemoveItems). Dukung 2 format: Nested (panel dengan HeaderItemCode/Items[]) atau Flat (legacy).
*Wajib ada sebagai field, boleh [].
RemoveItems array<string> No Baru di v2.1. Daftar HIS ItemCode yang mau dihapus. Bisa berisi:
  • Kode panel/header → seluruh panel + semua sub-item dihapus
  • Kode sub-item → hanya sub tersebut dihapus dari panel; bila panel menjadi kosong panel ikut dihapus
  • Kode flat → test individu dihapus
Minimal salah satu dari OrderedItems (non-empty) atau RemoveItems (non-empty) harus diisi.
IsCito int No 1 (Cito), 0 (Rutin). Dipakai saat INSERT test baru. Default: 0.
DoctorOrderCode string No Kode Dokter Pengirim (untuk test yang baru ditambahkan)
GuarantorId string No ID Penjamin (untuk test yang baru ditambahkan)
PatientName, IdentityNumber, … dsb No Field lain (identitas pasien, dokter, ruangan, dsb) boleh dikirim untuk konsistensi, tapi tidak akan mengubah data pasien/order yang sudah tersimpan di LIS. Field-field ini cuma ikut tersimpan di raw_json.

OrderedItems — Struktur (sama dengan POST /lab_order)

Mendukung format Nested (HeaderItemCode + Items[]) atau Flat (langsung ItemCode). Semua sub-item / flat ItemCode wajib sudah memiliki mapping di LIS (lihat error 406 di bawah).


Contoh Skenario

1. Tambah panel baru ke order yang sudah ada

Order ORD-20260306-0005 sebelumnya berisi PAKET Na/K/Cl, SGOT/AST, SGPT/ALT. Payload berikut menambahkan panel Darah Rutin; panel-panel lama tetap tersimpan.

{
    "PatientCode": "281295",
    "OrderNumber": "ORD-20260306-0005",
    "PatientName": "UNI 5",
    "IsCito": 1,
    "OrderedItems": [
        {
            "HeaderItemCode": "01.000021.AVV",
            "HeaderItemName": "Darah Rutin",
            "Items": [
                { "ItemCode": "25197", "ItemName": "Hemoglobin" },
                { "ItemCode": "25199", "ItemName": "Leukosit" },
                { "ItemCode": "25198", "ItemName": "Hematokrit" },
                { "ItemCode": "25200", "ItemName": "Trombosit" }
            ]
        }
    ]
}

2. Hapus satu panel saja (tanpa menambah apa pun)

OrderedItems diisi []. Hanya panel SGPT/ALT yang dibuang; panel lain (PAKET Na/K/Cl, SGOT/AST) tetap ada di order.

{
    "PatientCode": "281295",
    "OrderNumber": "ORD-20260306-0005",
    "PatientName": "UNI 5",
    "IsCito": 1,
    "OrderedItems": [],
    "RemoveItems": ["10.000798.AK1"]
}

3. Hapus satu sub-item (Natrium) dari panel

Sub 27178 (Natrium) dihapus dari panel PAKET Na/K/Cl; sisa panel (Kalium + Chlorida) tetap. Bila panel kebetulan hanya berisi 1 sub dan sub itu dihapus, panel otomatis ikut dibuang.

{
    "PatientCode": "281295",
    "OrderNumber": "ORD-20260306-0005",
    "PatientName": "UNI 5",
    "IsCito": 1,
    "OrderedItems": [],
    "RemoveItems": ["27178"]
}

4. Kombinasi: tambah panel baru + hapus panel lama

Tambah Darah Rutin, hapus panel SGPT/ALT. Urutan eksekusi di server: RemoveItems dulu → lalu OrderedItems.

{
    "PatientCode": "281295",
    "OrderNumber": "ORD-20260306-0005",
    "PatientName": "UNI 5",
    "IsCito": 1,
    "OrderedItems": [
        {
            "HeaderItemCode": "01.000021.AVV",
            "HeaderItemName": "Darah Rutin",
            "Items": [
                { "ItemCode": "25197", "ItemName": "Hemoglobin" },
                { "ItemCode": "25199", "ItemName": "Leukosit" },
                { "ItemCode": "25198", "ItemName": "Hematokrit" },
                { "ItemCode": "25200", "ItemName": "Trombosit" }
            ]
        }
    ],
    "RemoveItems": ["10.000798.AK1"]
}

Jangan: memasukkan ItemCode yang sama di OrderedItems dan RemoveItems sekaligus. Server menjalankan RemoveItems dulu lalu meng-insert OrderedItems — hasilnya test akan ter-hapus lalu ter-insert lagi (efek nol).

Response

Success Response

HTTP Status: 200 OK
{
    "message": "Berhasil update order!",
    "status": "200",
    "payload": {
        "nolab": "2603130005",
        "specType": "00"
    }
}

Error Response — Parameter Tidak Lengkap

HTTP Status: 406 Not Acceptable

Terjadi kalau OrderNumber/PatientCode kosong, atau OrderedItems & RemoveItems dua-duanya kosong.

{
    "message": "Parameter tidak lengkap (butuh OrderedItems atau RemoveItems)",
    "status": "406",
    "payload": []
}

Error Response — Order Tidak Ditemukan

HTTP Status: 204 No Content

OrderNumber tidak pernah di-POST ke LIS. Kirim POST /lab_order dulu.

{
    "message": "Order tidak ditemukan",
    "status": "204",
    "payload": []
}

Error Response — Mapping Belum Tersedia

HTTP Status: 406 Not Acceptable

Terjadi ketika sub-item / flat ItemCode di OrderedItems belum dipetakan di tb_test_his. Status order di-set ke ERROR dan bisa dipetakan dari dashboard LIS (Mapping LIS). Setelah mapping dilakukan, order otomatis di-reprocess.

{
    "message": "Mapping HIS belum tersedia untuk: 27180 (Chlorida). Silakan mapping ke kodetest LIS terlebih dahulu (tb_test_his) sebelum update order.",
    "status": "406",
    "payload": []
}

Delete Order

Membatalkan seluruh order laboratorium berdasarkan Nomor Order. Berbeda dari PUT /order_update dengan RemoveItems, endpoint ini menghapus:

  • Semua test (tb_pastest1, tb_pastest2)
  • Data dokter order (tb_pasdokter)
  • Data penjamin (tb_paskontrak)
  • Header order LIS (tb_paslab)
  • Item staging (lab_order_item_simrs)

Record di lab_order_simrs tidak dihapus, tapi status_order di-set ke DELETE untuk menjaga audit trail dan notifikasi di dashboard LIS.

Endpoint

DELETE IP SERVER Atau URL SERVER/bridging_kz/order_delete.php

Base URL

https://kz.biosys.softwarelaboratorium.com

Contoh full URL:

https://kz.biosys.softwarelaboratorium.com/bridging_kz/order_delete.php

Request

Method

DELETE

Request Body (application/json)

Parameter Type Required Description
OrderNumber string Yes Nomor order transaksi yang mau dihapus (harus sudah ada di LIS)

Example Request Body

{
    "OrderNumber": "ORD-20260306-0005"
}

Response

Success Response

HTTP Status: 200 OK
{
    "message": "Order berhasil dihapus total dari LIS",
    "status": 200,
    "payload": {
        "OrderNumber": "ORD-20260306-0005",
        "nolab": "2603130005"
    }
}

Error Response — Order Tidak Ditemukan / Gagal

HTTP Status: 406 Not Acceptable
{
    "message": "Delete Order Error: Order tidak ditemukan di LIS: ORD-20260306-0005",
    "status": 406,
    "payload": []
}

Error Response — Method Salah

HTTP Status: 405 Method Not Allowed

Terjadi kalau request dikirim dengan method selain DELETE (mis. GET, POST, PUT).

{
    "message": "Method not allowed",
    "status": 405,
    "payload": []
}

Get Laboratory Result

Mengambil hasil pemeriksaan laboratorium berdasarkan Order Number.

Endpoint

GET IP SERVER Atau URL SERVER/bridging_kz/lab_result.php

Base URL

https://kz.biosys.softwarelaboratorium.com

Contoh full URL:

https://kz.biosys.softwarelaboratorium.com/bridging_kz/lab_result.php?OrderNumber=ORD-20260306-0005

Request

Method

GET

Query Parameters

Parameter Type Required Description
OrderNumber string Yes Nomor order pemeriksaan laboratorium

Example Request

GET /bridging_kz/lab_result.php?OrderNumber=ORD-20260306-0005
Host: kz.biosys.softwarelaboratorium.com
X-API-KEY: LIS_SIMRS_123456

Response

Success Response

HTTP Status: 200 OK

Response Body — Grouped by Panel / Header

Hasil pemeriksaan sekarang dikelompokkan per panel (HeaderItemCode / HeaderItemName) yang berasal dari order awal. Test tanpa panel akan masuk ke group HeaderItemCode: null.

{
    "message": "OK",
    "status": 200,
    "payload": {
        "OrderNumber": "ORD-20260306-0005",
        "nolab": "2603130005",
        "PatientCode": "281295",
        "PatientName": "UNI 5",
        "OrderDateTime": "2026-03-06",
        "OrderNote": "",
        "Results": [
            {
                "HeaderItemCode": "10.001596.AK1",
                "HeaderItemName": "PAKET Na/K/Cl",
                "Items": [
                    {
                        "TestCodeHeader": "020106",
                        "TestNameHeader": "Elektrolit Darah",
                        "TestCodeSub": "020107",
                        "TestNameSub": "Natrium",
                        "TestHis": "27178,10.001596.AK1",
                        "ResultValue": "138",
                        "ResultNote": "",
                        "ReferenceRange": "",
                        "ResultUnit": "mmol/L",
                        "NormalRange": "135 - 145",
                        "Flag": "",
                        "ResultStatus": "Final",
                        "ResultDateTime": "2026-04-21 17:29:09",
                        "validasi": "admin",
                        "tgl_validasi": "2026-04-21 20:16:07",
                        "selesai": "admin",
                        "tgl_selesai": "2026-04-21 20:16:06",
                        "LoincNum": "",
                        "LoincComponent": "",
                        "UnitCode": "",
                        "SnomedCode": "365761000",
                        "UrutHasil": "020107",
                        "CriticalDoctor": "",
                        "CriticalReportTime": "",
                        "CriticalResponseTime": "",
                        "CriticalAction": ""
                    },
                    {
                        "TestCodeHeader": "020106",
                        "TestNameHeader": "Elektrolit Darah",
                        "TestCodeSub": "020108",
                        "TestNameSub": "Kalium",
                        "TestHis": "27179,10.001596.AK1",
                        "ResultValue": "3.4",
                        "ResultNote": "",
                        "ReferenceRange": "",
                        "ResultUnit": "mmol/L",
                        "NormalRange": "3.5 - 5.1",
                        "Flag": "L",
                        "ResultStatus": "Final",
                        "ResultDateTime": "2026-04-21 17:29:09",
                        "validasi": "admin",
                        "tgl_validasi": "2026-04-21 20:16:07",
                        "selesai": "admin",
                        "tgl_selesai": "2026-04-21 20:16:06",
                        "LoincNum": "",
                        "LoincComponent": "",
                        "UnitCode": "",
                        "SnomedCode": "312468003",
                        "UrutHasil": "020108",
                        "CriticalDoctor": "",
                        "CriticalReportTime": "",
                        "CriticalResponseTime": "",
                        "CriticalAction": ""
                    },
                    {
                        "TestCodeHeader": "020106",
                        "TestNameHeader": "Elektrolit Darah",
                        "TestCodeSub": "020109",
                        "TestNameSub": "Clorida",
                        "TestHis": "27180,10.001596.AK1",
                        "ResultValue": "111",
                        "ResultNote": "",
                        "ReferenceRange": "",
                        "ResultUnit": "mmol/L",
                        "NormalRange": "98 - 110",
                        "Flag": "H",
                        "ResultStatus": "Final",
                        "ResultDateTime": "2026-04-21 17:29:09",
                        "validasi": "admin",
                        "tgl_validasi": "2026-04-21 20:16:07",
                        "selesai": "admin",
                        "tgl_selesai": "2026-04-21 20:16:06",
                        "LoincNum": "",
                        "LoincComponent": "",
                        "UnitCode": "",
                        "SnomedCode": "60203004",
                        "UrutHasil": "020109",
                        "CriticalDoctor": "",
                        "CriticalReportTime": "",
                        "CriticalResponseTime": "",
                        "CriticalAction": ""
                    }
                ]
            },
            {
                "HeaderItemCode": "10.000777.AK1",
                "HeaderItemName": "SGOT/AST",
                "Items": [
                    {
                        "TestCodeHeader": "020001",
                        "TestNameHeader": "SGOT/AST",
                        "TestCodeSub": "020001",
                        "TestNameSub": "SGOT/AST",
                        "TestHis": "28863,10.000777.AK1",
                        "ResultValue": "30",
                        "ResultNote": "",
                        "ReferenceRange": "",
                        "ResultUnit": "U/L",
                        "NormalRange": "< 31",
                        "Flag": "",
                        "ResultStatus": "Final",
                        "ResultDateTime": "2026-04-21 17:29:09",
                        "validasi": "admin",
                        "tgl_validasi": "2026-04-21 20:16:07",
                        "selesai": "admin",
                        "tgl_selesai": "2026-04-21 20:16:06",
                        "LoincNum": "",
                        "LoincComponent": "",
                        "UnitCode": "",
                        "SnomedCode": "45896000",
                        "UrutHasil": "020001",
                        "CriticalDoctor": "",
                        "CriticalReportTime": "",
                        "CriticalResponseTime": "",
                        "CriticalAction": ""
                    }
                ]
            },
            {
                "HeaderItemCode": "10.000798.AK1",
                "HeaderItemName": "SGPT/ALT",
                "Items": [
                    {
                        "TestCodeHeader": "020002",
                        "TestNameHeader": "SGPT/ALT",
                        "TestCodeSub": "020002",
                        "TestNameSub": "SGPT/ALT",
                        "TestHis": "28878,10.000798.AK1",
                        "ResultValue": "58",
                        "ResultNote": "",
                        "ReferenceRange": "",
                        "ResultUnit": "U/L",
                        "NormalRange": "< 41",
                        "Flag": "H",
                        "ResultStatus": "Final",
                        "ResultDateTime": "2026-04-21 17:29:09",
                        "validasi": "admin",
                        "tgl_validasi": "2026-04-21 20:16:07",
                        "selesai": "admin",
                        "tgl_selesai": "2026-04-21 20:16:06",
                        "LoincNum": "",
                        "LoincComponent": "",
                        "UnitCode": "",
                        "SnomedCode": "56935002",
                        "UrutHasil": "020002",
                        "CriticalDoctor": "",
                        "CriticalReportTime": "",
                        "CriticalResponseTime": "",
                        "CriticalAction": ""
                    }
                ]
            }
        ]
    }
}

Response Structure

Root Object

Field Type Description
message string Status message
status integer HTTP status code
payload object Data hasil laboratorium

Payload Object

Field Type Description
OrderNumber string Nomor order
nolab string Nomor laboratorium internal BIOSYS
PatientCode string Kode pasien / No. RM
PatientName string Nama pasien
OrderDateTime date Tanggal order
OrderNote string Catatan order
Results array Daftar hasil pemeriksaan dikelompokkan per panel/header. Tiap elemen berisi HeaderItemCode, HeaderItemName, dan Items.

Results Object (Group per Panel)

Field Type Description
HeaderItemCode string | null Kode panel / header dari order SIMRS (mis. 10.001596.AK1 untuk PAKET Na/K/Cl). null jika test dikirim tanpa panel (flat).
HeaderItemName string | null Nama panel / header (mis. PAKET Na/K/Cl)
Items array Daftar hasil sub-test di bawah panel ini (struktur detail pada tabel berikut)

Items Object (Array item — detail hasil per test)

Field Type Description
TestCodeHeader string Kode grup pemeriksaan (Parent)
TestNameHeader string Nama grup pemeriksaan
TestCodeSub string Kode test (Anak/Parameter)
TestNameSub string Nama test
TestHis string Kode Mapping SIMRS — HIS code yang di-order oleh SIMRS dan sesuai untuk test ini. Berupa string dipisah koma (,) bila satu kodetest LIS dipetakan ke banyak HIS code.
Sejak v2.1: strict 2-tier matching — hanya HIS code yang benar-benar ada di order (lab_order_item_simrs) yang dikembalikan; prioritas sub-item > header. Sehingga tidak akan keluar HIS code dari mapping historis yang tidak relevan dengan order ini.
ResultValue string Nilai hasil pemeriksaan
ResultNote string Catatan hasil pemeriksaan
ReferenceRange string Nilai rujukan (format teks)
ResultUnit string Satuan hasil (cth: mg/dL)
NormalRange string Nilai rujukan normal
Flag string Penanda abnormal (H / L / CH / CL)
ResultStatus string Status hasil (Final / Pending)
ResultDateTime datetime Waktu hasil final keluar
validasi string User yang validasi
tgl_validasi datetime Tanggal & waktu validasi
selesai string User yang menyelesaikan
tgl_selesai datetime Tanggal & waktu selesai
LoincNum string Kode LOINC
LoincComponent string Nama Komponen LOINC
UnitCode string Kode satuan standar
SnomedCode string Kode SNOMED CT
UrutHasil string Urutan tampil hasil
CriticalDoctor string Nama dokter pelaporan nilai kritis
CriticalReportTime datetime Waktu pelaporan nilai kritis
CriticalResponseTime string Waktu respon nilai kritis
CriticalAction string Tindakan yang dilakukan untuk nilai kritis

Contoh Hasil Penampilan Data

Test Result Unit Range Flag
Hemoglobin 1 g/dL 14.0 - 16.0 CL
Hematokrit 30 % 37 - 47 L
Trombosit 450 10^3/uL 150 - 400 H
SGOT/AST 30 U/L < 31

Error Response Example

Kasus: Order Number Tidak Ditemukan

{
  "message": "Order Number not found",
  "status": 404,
  "payload": null
}

Acknowledge Result (Flag)

Menandai bahwa SIMRS/HIS telah berhasil menarik dan menerima hasil lab secara utuh, sehingga transaksi bisa ditutup.

Efek server-side bila Flag=1:

  • Record baru di-insert ke lab_result_flag_his (audit trail).
  • tb_paslab.upload_simrs di-set 1 untuk order yang sesuai (menandai hasil sudah berhasil di-upload ke SIMRS).

Endpoint

POST IP SERVER Atau URL SERVER/bridging_kz/post_flag.php

Base URL

https://kz.biosys.softwarelaboratorium.com

Contoh full URL:

https://kz.biosys.softwarelaboratorium.com/bridging_kz/post_flag.php

Request

Method

POST

Request Body (application/json)

Parameter Type Required Description
OrderNumber string Yes Nomor order transaksi SIMRS
PatientCode string Yes Nomor Rekam Medis (RM) / Kode Pasien
Flag integer Yes 1 = hasil berhasil ditarik oleh SIMRS (memicu update upload_simrs=1). 0 = hanya mencatat log tanpa update status order.
ReceivedDate datetime Yes Waktu hasil diterima SIMRS (format YYYY-MM-DD HH:MM:SS)

Example Request Body

{
    "OrderNumber": "ORD-20260306-0005",
    "PatientCode": "281295",
    "Flag": 1,
    "ReceivedDate": "2026-03-13 14:05:00"
}

Response

Success Response

HTTP Status: 200 OK
{
    "message": "Berhasil menandai pengambilan hasil",
    "status": "200"
}

Error Response — Field Kosong

HTTP Status: 204 No Content

Terjadi bila salah satu field wajib kosong.

{
    "message": "Gagal menandai pengambilan hasil",
    "status": "204"
}

Error Response — Invalid JSON

HTTP Status: 400 Bad Request
{
    "message": "Invalid JSON",
    "status": "400"
}

Error Response — Method Salah

HTTP Status: 405 Method Not Allowed
{
    "status": "error",
    "message": "Method not allowed"
}

Error Response — Internal Error

HTTP Status: 500 Internal Server Error
{
    "message": "Kesalahan system",
    "status": "500"
}