Standarisasi Kamus Istilah Klinis (Terminology Service) di SIMRS

Sobat IT RS, urusan mapping kode diagnosa kadang bikin kepala cenat-cenut. SIMRS warisan lama masih penuh kode lokal bikinan RS, kadang malah pakai kode singkatan: “DIA1”, “DBT2”, atau “G13”. Tapi sekarang tuntutan integrasi SatuSehat sudah mutlak—kode harus pakai ICD-10, bahkan idealnya SNOMED CT. Gak ada jalan pintas, kudu standarisasi. Biar lancar bridging data, yuk bahas step by step ngubah kamus istilah klinis lokal jadi terminology service kelas nasional.

Pembahasannya bakal gali:

  • Apa itu terminology service & kenapa penting buat SIMRS?
  • Struktur mapping dari kode lokal ke ICD-10 & SNOMED CT.
  • Contoh desain tabel mapping dan query lookup.
  • Tips pencegahan error mapping data.
  • Studi kasus bridging diagnosis ke SatuSehat.

Terminology Service: Pondasi Data Klinis Standar

SIMRS lama biasanya pegang kamus diagnosis di tabel lokal. Perawat/DPJP pilih kode, kadang cuma singkatan atau kode buat internal RS. Nah, terminology service itu sistem yang nyimpen hubungan antar istilah medis di berbagai standar (ICD, SNOMED, LOINC, dsb), termasuk mapping dari kode lokal. Ini wajib biar data SIMRS bisa keluar-masuk ke sistem eksternal (BPJS, SatuSehat, e-Klaim) tanpa nyasar makna.

Fungsi utama terminology service:

  • Central reference: Semua aplikasi SIMRS ambil istilah klinis dari satu layanan/tabel. Enggak bikin versi sendiri-sendiri.
  • Mapping: Satu kode lokal bisa dipetakan ke beberapa standar: ICD-10 buat BPJS, SNOMED CT buat SatuSehat.
  • Bridging: Translasi data otomatis waktu kirim ke pihak luar.

Struktur Mapping Diagnosis: Kode Lokal ke ICD-10 & SNOMED CT

Supaya valid, satu diagnosis di SIMRS kudu punya mapping minimal kayak gini:

  • Kode lokal RS (unik per RS, biasanya primary key lama di SIMRS).
  • Kode ICD-10 (standar WHO, wajib buat BPJS & e-Klaim).
  • Kode SNOMED CT (standar internasional, wajib buat SatuSehat & FHIR bundle).
  • Deskripsi diagnosis (Indonesia & Inggris, kalau bisa).
  • Status aktif/nonaktif (biar gampang maintain, kalau ada kode diagnosis pensiun).

Contoh struktur tabel mapping diagnosis

CREATE TABLE klinis_diagnosis_mapping (
  id SERIAL PRIMARY KEY,
  kode_lokal VARCHAR(20) NOT NULL,
  nama_lokal VARCHAR(255) NOT NULL,
  kode_icd10 VARCHAR(10) NOT NULL,
  nama_icd10 VARCHAR(255),
  kode_snomed VARCHAR(20),
  nama_snomed VARCHAR(255),
  aktif BOOLEAN DEFAULT TRUE,
  tanggal_update TIMESTAMP DEFAULT NOW()
);

Contoh isi:

| id  | kode_lokal | nama_lokal       | kode_icd10 | nama_icd10           | kode_snomed | nama_snomed               | aktif |
|-----|------------|------------------|------------|----------------------|-------------|---------------------------|-------|
| 1   | DIA1       | Diabetes Tipe 1  | E10        | Type 1 Diabetes      | 46635009    | Type 1 diabetes mellitus  | true  |
| 2   | DBT2       | Diabetes Tipe 2  | E11        | Type 2 Diabetes      | 44054006    | Type 2 diabetes mellitus  | true  |
| 3   | G13        | Gastritis Akut   | K29.0      | Acute gastritis      | 235595009   | Acute gastritis           | true  |

Kode lokal tetap ada, supaya aplikasi lama masih jalan. Tapi pas bridging/ekspor, sistem harus narik ICD-10 atau SNOMED sesuai target.

Query Lookup Mapping Diagnosis

Frontend SIMRS biasanya search diagnosis pakai autocomplete. Lakukan query lookup ke tabel mapping. Contoh SQL search diagnosis “diabetes”, tampilkan kode lokal + ICD-10 + SNOMED:

SELECT kode_lokal, nama_lokal, kode_icd10, nama_icd10, kode_snomed, nama_snomed
FROM klinis_diagnosis_mapping
WHERE aktif = true
  AND (nama_lokal ILIKE '%diabetes%'
       OR nama_icd10 ILIKE '%diabetes%'
       OR nama_snomed ILIKE '%diabetes%')
ORDER BY nama_lokal
LIMIT 20;

Bisa juga filter via kode ICD-10/SNOMED langsung kalau ada input spesifik dari user atau API eksternal.

Lookup untuk bridging data ke SatuSehat (FHIR)

SELECT kode_icd10, kode_snomed
FROM klinis_diagnosis_mapping
WHERE kode_lokal = 'DBT2'
  AND aktif = true;

Return: Kode ICD-10 dan SNOMED CT siap buat packing ke bundle FHIR SatuSehat.

Langkah Standarisasi: Mapping Diagnosis Lokal ke ICD-10 & SNOMED CT

Proses mapping diagnosis lokal ke standar itu kerjaan setengah manual, setengah otomasi. Rekomendasi step:

  • 1. Ekspor semua diagnosis lokal dari SIMRS lama ke spreadsheet/csv. Sertakan kode, nama, deskripsi.
  • 2. Lakukan pencocokan semi-manual ke ICD-10 (pakai referensi buku ICD-10 digital atau web, misal: icd.who.int).
  • 3. Mapping ke SNOMED CT lebih ribet, karena isinya ribuan. Bisa pakai browser SNOMED: browser.ihtsdotools.org, atau minta support ke Kemenkes (ada subset/core set Bahasa Indonesia).
  • 4. Upload/migrasi hasil mapping ke tabel mapping di SIMRS. Pastikan import batch punya validasi (cek duplikat, cek kode kosong, cek nonaktif).
  • 5. Uji coba bridging ke SatuSehat. Pastikan diagnosis dikirim pakai kode standar, bukan kode lokal.

Contoh import batch mapping diagnosis dari CSV

-- Asumsi pakai PostgreSQL, file CSV format:
-- kode_lokal, nama_lokal, kode_icd10, nama_icd10, kode_snomed, nama_snomed

COPY klinis_diagnosis_mapping(kode_lokal, nama_lokal, kode_icd10, nama_icd10, kode_snomed, nama_snomed)
FROM '/tmp/diagnosis_mapping.csv' DELIMITER ',' CSV HEADER;

Pastikan kolom kode_icd10 & kode_snomed NOT NULL. Isi kosong? Flag kode sebagai nonaktif atau pending mapping.

Pencegahan Error Mapping Data

Mapping diagnosis sering error di lapangan. Sumber masalah:

  • Diagnosa baru belum dimapping, kode lokal tidak punya ICD-10/SNOMED.
  • Kode lokal sudah diganti/deskripsi berubah, mapping lama tidak update.
  • Diagnosa mirip—misal “Diabetes dengan komplikasi” vs “Tanpa komplikasi”—salah mapping.
  • Kode ICD-10 ganda dipakai buat banyak kode lokal beda.

Tips biar error mapping minimal:

  • Validasi di input diagnosis: Kalau user pilih kode lokal, cek langsung apa mapping ICD-10 & SNOMED sudah ada. Kalau enggak, blokir simpan (atau kasih warning + force user pilih mapping dulu).
  • Enforce unique constraint: Kode lokal harus unik, ICD-10 & SNOMED boleh duplicate (karena 1 kode standar bisa dipakai beberapa kode lokal mirip).
  • Audit mapping diagnosis: Log kalau ada mapping diagnosis baru tanpa ICD-10/SNOMED, atau ada edit mapping diagnosis.
  • Flag “pending mapping”: Kode diagnosis tanpa mapping dikasih status khusus, biar bisa difilter dan dikerjakan tim mapping.
  • Backup mapping: Selalu backup tabel mapping sebelum update massal, supaya kalau ada salah bisa rollback.

Contoh validasi mapping diagnosis di backend (pseudo-code):

def save_diagnosis(patient_id, kode_lokal):
    mapping = query_mapping_by_kode_lokal(kode_lokal)
    if not mapping or not mapping.kode_icd10 or not mapping.kode_snomed:
        raise Exception("Diagnosis belum lengkap mapping ICD-10/SNOMED. Mohon lengkapi mapping.")
    # Lanjut simpan diagnosis

Studi Kasus: Bridging Diagnosis ke SatuSehat via FHIR API

SatuSehat FHIR minta diagnosis pakai kode standar, bukan kode lokal. Payload contoh (FHIR Condition):

{
  "resourceType": "Condition",
  "code": {
    "coding": [
      {
        "system": "http://hl7.org/fhir/sid/icd-10",
        "code": "E11",
        "display": "Type 2 diabetes mellitus"
      },
      {
        "system": "http://snomed.info/sct",
        "code": "44054006",
        "display": "Type 2 diabetes mellitus"
      }
    ],
    "text": "Diabetes Tipe 2"
  }
}

Workflow bridging diagnosis SIMRS ke SatuSehat:

  1. User pilih diagnosis di SIMRS (misal kode lokal “DBT2”).
  2. Backend query mapping ke tabel klinis_diagnosis_mapping:
SELECT kode_icd10, nama_icd10, kode_snomed, nama_snomed
FROM klinis_diagnosis_mapping
WHERE kode_lokal = 'DBT2'
  AND aktif = true;
  1. Format payload FHIR Condition pakai ICD-10 dan SNOMED.
  2. Kirim ke SatuSehat API.
  3. Tangani error response (misal: kode diagnosis enggak dikenal, mapping kosong).

Contoh mapping error & handling:

  • Mapping diagnosis kosong: Tampilkan error “Kode diagnosis belum mapping ke ICD-10/SNOMED. Data tidak dikirim.”
  • Kode tidak aktif: Blokir kirim, minta user pakai diagnosis aktif.
  • Kode standar salah ketik: Validasi dulu sebelum kirim ke API, cek format ICD-10 dan SNOMED sesuai referensi.

Perawatan & Update Mapping Diagnosis

Mapping diagnosis bukan pekerjaan sekali jadi, kudu dipelihara:

  • Setiap ada diagnosa baru di SIMRS, lakukan mapping manual secepatnya.
  • Update mapping jika ada perubahan ICD-10/SNOMED (release baru, revisi deskripsi).
  • Rekonsiliasi mapping secara periodik—cek ada diagnosis lokal belum mapping, lakukan audit & update.
  • Backup mapping sebelum update massal.

Best Practice: Terminology Service Lokal atau Pusat?

Pilih terminology service pusat (satu server, beberapa SIMRS konsumsi) atau lokal (masing-masing SIMRS punya copy)? Plus-minus:

  • Pusat: Mudah di-maintain, mapping konsisten, update sekali semua langsung pakai. Tapi, kalau server terminology down, semua SIMRS ikut lumpuh.
  • Lokal: Resilient, SIMRS tetap jalan walau offline. Tapi, mapping diagnosis rawan beda-beda, rawan “fork”.

Rekomendasi:

  • Buat RS besar/jaringan: Pakai terminology service pusat. Deploy ulang ke lokal via sync periodik.
  • RS standalone: Boleh lokal, tapi pastikan SOP update mapping diagnosis jelas, audit periodik wajib.

Kesimpulan Praktis

Mapping kode diagnosis lokal ke ICD-10 & SNOMED CT itu proses krusial buat bridging ke SatuSehat. Kunci: struktur tabel mapping rapi, validasi input diagnosis, maintenance mapping rutin, dan backup sebelum update. Enggak ada mapping diagnosis, bridging ke SatuSehat jalan di tempat—jangan tunggu deadline mepet baru mapping, Sobat IT RS!