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:
- RabbitMQ Worker: 5 worker paralel yang mengambil job dari antrian FHIR.
- Exponential Backoff Retry: Jika SatuSehat mengembalikan
HTTP 429 Too Many RequestsatauHTTP 503, worker menunggu:2^attempt * base_delay_mssebelum retry. Maksimum 5 retry. - Dead Letter Queue (DLQ): Job yang gagal setelah 5 retry masuk ke DLQ. Admin menerima alert dan bisa melakukan manual re-trigger via dashboard.
- 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.