Sentra Healthcare — Architecture & Tech Stack Delta¶
Baseline tech stack: lihat
_shared/tech-stack-baseline.md. Section ini hanya mencatat yang berbeda atau spesifik untuk Sentra Healthcare.
System Architecture¶
SentraClinic EMR menggunakan Hybrid Cloud-Edge Architecture dengan pola Modular Monolithic di sisi backend untuk menjamin skalabilitas, integrasi yang cepat, serta ketahanan operasional lokal (100% uptime) di Indonesia yang memiliki infrastruktur internet tidak merata di daerah-daerah rural.
C4 Container Diagram¶
graph TB
subgraph "Client Applications"
DesktopApp["Electron RME App — React Desktop (Dokter/Frontdesk)"]
MobileApp["Patient Portal App — Flutter Mobile"]
QueueDisplay["Smart TV Queue Board WebApp"]
end
subgraph "Edge Local Clinic Server — Offline Resilient Node"
LocalGateway["Go-Edge Sync Daemon & Reverse Proxy"]
SQLiteDB[("Local SQLCipher DB — Encrypted")]
LocalGateway --> SQLiteDB
end
subgraph "AWS Cloud Infrastructure — High Availability"
APIGateway["AWS API Gateway / Nginx Ingress"]
subgraph "Modular Monolith Backend"
CoreService["Core NestJS Engine"]
SyncEngine["Bi-directional Sync Service"]
SatuSehatAdapter["SatuSehat IHS FHIR Connector (HL7 FHIR R4)"]
BPJSAdapter["BPJS Bridging Gateway VClaim/PCare"]
end
CloudDB[("PostgreSQL Multi-Tenant DB")]
CacheStore[("Redis Distributed Lock & Cache")]
JobQueue["RabbitMQ Sync & Event Queue"]
CoreService --> CloudDB
CoreService --> CacheStore
SyncEngine --> JobQueue
SyncEngine --> CloudDB
SatuSehatAdapter --> JobQueue
end
subgraph "External Government & Insurance APIs"
SatuSehatAPI["Kemenkes RI SatuSehat IHS API — HTTPS / HL7 FHIR R4"]
BPJSAPI["BPJS Kesehatan Trust API — PCare (FKTP) / VClaim (FKRTL)"]
BSrEAPI["BSrE Balai Sertifikasi Elektronik — Digital Signature API"]
end
DesktopApp --> LocalGateway
LocalGateway <-->|"Secure Edge VPN / TLS 1.3"| APIGateway
APIGateway --> CoreService
APIGateway --> SyncEngine
CoreService --> BPJSAdapter
SatuSehatAdapter --> SatuSehatAPI
BPJSAdapter --> BPJSAPI
CoreService --> BSrEAPI
MobileApp --> APIGateway
QueueDisplay --> LocalGateway
Bidirectional Edge-to-Cloud Sync Protocol¶
Untuk mengatasi pemadaman internet, sistem lokal klinik menyimpan transaksi secara lokal ke database SQLite yang dienkripsi dengan SQLCipher.
- Setiap data mutasi medis atau keuangan diberi penanda UUID versi 4 global dan vector clock timestamp.
- Setiap perubahan disimpan ke tabel local
sync_queuesebagai outbox pattern event. - Begitu daemon pendeteksi internet mendeteksi koneksi online kembali, Go-Edge Sync Daemon mengirimkan batch event tersebut ke
SyncEnginedi AWS Cloud. - AWS Cloud menggunakan teknik Conflict-Free Replicated Data Types (CRDTs) untuk meresolusi konflik data: jika terjadi modifikasi rekam medis yang sama di luar jaringan, sistem akan memprioritaskan tanda tangan digital dokter yang sah dengan timestamp terlama atau melakukan auto-merge data vital sign terpisah.
Tech Stack — Sentra Healthcare Delta¶
Baseline:
_shared/tech-stack-baseline.md
Overrides¶
- Client Frontend (Dokter) → Electron + React 19 (alasan: Aplikasi Desktop untuk integrasi scanner KTP fisik dan printer label gelang pasien via USB; akses offline ke SQLite edge lokal)
- Client Mobile → Flutter 3.x (Patient Portal App untuk booking antrean online dan tracking status kunjungan)
- Edge Sync Daemon → Go/Golang (performa goroutine untuk sinkronisasi edge-to-cloud yang efisien dan ringan pada mini PC lokal klinik)
Tambahan Sistem-Spesifik¶
-
HL7 FHIR R4 SDK / Library: Digunakan oleh
SatuSehatAdapteruntuk memformat dan memvalidasi payload klinis (Encounter, Patient, Condition, Observation, MedicationRequest) sesuai standar internasional HL7 FHIR Release 4 yang diwajibkan oleh SatuSehat IHS Kemenkes RI. Integrasi melalui REST API HTTPS ke endpoint IHS Kemenkes (https://api-satusehat.kemkes.go.id/). RabbitMQ digunakan sebagai buffer asinkron karena IHS API memiliki rate limit dan sering mengalami keterlambatan respons dari sisi Kemenkes. -
BSrE (Balai Sertifikasi Elektronik) Digital Signature SDK: Digunakan untuk memberikan tanda tangan digital yang sah secara hukum pada dokumen rekam medis elektronik (RME). BSrE adalah infrastruktur kunci publik (PKI) resmi pemerintah Indonesia di bawah BSSN. Setelah dokter mengklik "Sign & Lock SOAP", sistem memanggil BSrE API untuk menghasilkan sertifikat tanda tangan digital yang terikat pada identitas dokter (NIK + SIP dokter). Hash BSrE disimpan di kolom
digital_signature_hashpada tabelsoap_notessebagai bukti keaslian yang tidak dapat dipalsukan. -
BPJS PCare API Client (FKTP — Fasilitas Kesehatan Tingkat Pertama): Digunakan oleh klinik pratama/umum untuk: (1) validasi eligibilitas peserta BPJS, (2) pembuatan Surat Eligibilitas Peserta (SEP) digital, (3) pengiriman data kunjungan dan diagnosa ICD-10 untuk klaim kapitasi/non-kapitasi. Komunikasi menggunakan HTTPS dengan autentikasi JWT spesifik BPJS (consumer key + consumer secret). IP klinik wajib didaftarkan ke whitelist BPJS sebelum bisa mengakses API ini.
-
BPJS VClaim API Client (FKRTL — Fasilitas Kesehatan Rujukan Tingkat Lanjut): Digunakan oleh klinik utama/spesialis untuk pengajuan klaim rawat inap dan rawat jalan rujukan. Protocol berbeda dari PCare — VClaim menggunakan format data berbasis XML dengan enkripsi RSA untuk beberapa endpoint. Memerlukan Dedicated Gateway Network (VPN/IP Whitelist khusus BPJS FKRTL).
-
SQLCipher (SQLite Encrypted): Database lokal di server edge setiap cabang klinik. Dienkripsi dengan AES-256 menggunakan passphrase yang disimpan di HashiCorp Vault Agent lokal. Memungkinkan operasi offline penuh — pendaftaran pasien baru, input SOAP EMR dasar, dispensing resep — selama koneksi internet terputus.
-
HashiCorp Vault Agent (Lokal): Manajemen rahasia kriptografi di edge node. Menyimpan SQLCipher passphrase, JWT credentials BPJS, dan BSrE private key cert. Vault Agent berjalan sebagai proses terpisah di server lokal klinik, memastikan kunci enkripsi tidak pernah tersimpan dalam plaintext di disk.
-
CRDTs (Conflict-Free Replicated Data Types): Mekanisme resolusi konflik untuk skenario offline-split-brain. Ketika dua dokter di cabang berbeda memodifikasi data yang sama saat offline, CRDTs memastikan merge deterministik berdasarkan vector clock timestamp, tanpa data yang hilang. Khusus RME yang sudah ditandatangani BSrE: data bersifat append-only (tidak bisa di-overwrite — hanya bisa ditambah Addendum).
-
RabbitMQ HL7 FHIR Broker Queue: Antrian asinkron untuk pengiriman payload FHIR ke SatuSehat IHS. Memiliki 5 worker paralel dengan mekanisme exponential backoff retry jika SatuSehat API mengalami downtime atau rate-limiting dari sisi Kemenkes. Memastikan kegagalan SatuSehat tidak memblokir transaksi kasir klinik.