Lewati ke isi

Module: SatuSehat Integration

SatuSehat adalah platform pertukaran data kesehatan nasional Indonesia yang dikelola oleh Kemenkes RI (Kementerian Kesehatan). Seluruh Fasyankes (fasilitas pelayanan kesehatan) diwajibkan oleh Permenkes No. 24/2022 untuk melaporkan data rekam medis elektronik ke SatuSehat dalam format HL7 FHIR Release 4 (R4).

IHS (Indonesia Health Services) adalah platform API gateway SatuSehat yang menjadi pintu masuk integrasi.

Arsitektur Integrasi

SentraClinic EMR Backend
        ▼ (async event setelah dokter sign SOAP)
 [RabbitMQ FHIR Queue]
        ▼ (5 parallel workers)
 [SatuSehatAdapter — HL7 FHIR R4 Builder]
        ▼ (HTTPS REST, rate limited)
 [SatuSehat IHS API — api-satusehat.kemkes.go.id]

Mengapa asinkron? SatuSehat IHS API memiliki rate limit dan sering mengalami keterlambatan respons dari sisi Kemenkes, terutama saat jam sibuk. Arsitektur asinkron via RabbitMQ memastikan: (1) kegagalan/lambatnya SatuSehat tidak memblokir kasir klinik, (2) payload dapat di-retry secara otomatis tanpa kehilangan data.

HL7 FHIR R4 Resource Mapping

Setiap kunjungan pasien di SentraClinic dipetakan ke beberapa FHIR Resource secara berurutan:

Data Klinik FHIR Resource Trigger
Profil Pasien (NIK, nama, lahir) Patient Saat registrasi pasien baru
Kunjungan / Encounter Encounter Saat pasien dipanggil ke poli
Vital Sign (TD, suhu, SpO2) Observation Setelah perawat input vital sign
Diagnosa ICD-10 Condition Setelah dokter submit SOAP
Resep / E-prescribing MedicationRequest Setelah dokter kirim resep
Prosedur Tindakan (ICD-9-CM) Procedure Setelah tindakan medis selesai

IHS ID: Setiap pasien di SatuSehat memiliki IHS ID unik nasional yang berbeda dari NIK. Proses lookup IHS ID dari NIK dilakukan melalui GET /fhir-r4/v1/Patient?identifier=https://fhir.kemkes.go.id/id/nik|{NIK}.

FHIR Payload Example — Encounter

{
  "resourceType": "Encounter",
  "id": "ca21b01c-6d1a-41d1-9311-bf17b0c34da8",
  "status": "finished",
  "class": {
    "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
    "code": "AMB",
    "display": "ambulatory"
  },
  "subject": {
    "reference": "Patient/P0002891789",
    "display": "Budi Santoso"
  },
  "participant": [
    {
      "individual": {
        "reference": "Practitioner/14f09d83-49a7-47ab-b29b-75f12dbefb01",
        "display": "Dr. Irfan Sp.PD"
      }
    }
  ],
  "period": {
    "start": "2026-05-21T20:18:15+07:00",
    "end": "2026-05-21T20:45:00+07:00"
  },
  "serviceProvider": {
    "reference": "Organization/99ea7b42-1200-4b32-8411-d00db60ab292"
  }
}

Rate Limiting & Retry Strategy

SatuSehat IHS API membatasi jumlah request per menit. Mekanisme yang diimplementasikan:

  1. RabbitMQ Worker: 5 worker paralel yang mengambil job dari antrian FHIR.
  2. Exponential Backoff Retry: Jika SatuSehat mengembalikan HTTP 429 Too Many Requests atau HTTP 503, worker menunggu: 2^attempt * base_delay_ms sebelum retry. Maksimum 5 retry.
  3. Dead Letter Queue (DLQ): Job yang gagal setelah 5 retry masuk ke DLQ. Admin menerima alert dan bisa melakukan manual re-trigger via dashboard.
  4. Fallback to Local Queue: Jika SatuSehat total tidak bisa dijangkau (timeout > 30 detik), payload disimpan ke SQLite lokal di server edge klinik dan ditandai sebagai sync_pending. Background sync daemon akan mencoba lagi begitu koneksi ke cloud pulih.

Compliance Requirement

Per Permenkes No. 24/2022, data encounter wajib terkirim ke SatuSehat dalam 24 jam setelah kunjungan selesai. SentraClinic memonitor persentase on-time sync dan menampilkan dashboard compliance rate per cabang klinik. Target: 100% terkirim dalam < 24 jam.

Patient IHS ID Lookup & Deduplication

Saat registrasi pasien baru: 1. Sistem melakukan GET /fhir-r4/v1/Patient?identifier={NIK} ke SatuSehat IHS. 2. Jika ditemukan, IHS ID disimpan ke kolom patients.ihs_id. 3. Jika tidak ditemukan (pasien belum terdaftar di SatuSehat), sistem melakukan POST /fhir-r4/v1/Patient untuk mendaftarkan pasien baru ke IHS dan mendapatkan IHS ID baru. 4. IHS ID menjadi foreign key global yang mencegah duplikasi profil pasien lintas Fasyankes di seluruh Indonesia.