Lewati ke isi

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.

  1. Setiap data mutasi medis atau keuangan diberi penanda UUID versi 4 global dan vector clock timestamp.
  2. Setiap perubahan disimpan ke tabel local sync_queue sebagai outbox pattern event.
  3. Begitu daemon pendeteksi internet mendeteksi koneksi online kembali, Go-Edge Sync Daemon mengirimkan batch event tersebut ke SyncEngine di AWS Cloud.
  4. 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 MobileFlutter 3.x (Patient Portal App untuk booking antrean online dan tracking status kunjungan)
  • Edge Sync DaemonGo/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 SatuSehatAdapter untuk 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_hash pada tabel soap_notes sebagai 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.