Sentra Healthcare — Role & Permission Matrix¶
Kepatuhan perlindungan data pribadi (UU PDP No. 27/2022) memprioritaskan kontrol akses yang ketat. Prinsip least privilege diterapkan: setiap role hanya mendapatkan akses minimum yang dibutuhkan untuk menjalankan tugasnya.
RBAC Matrix¶
| Module Action | Owner | Clinic Manager | Doctor | Nurse | Pharmacist | Cashier | Lab Tech | Auditor |
|---|---|---|---|---|---|---|---|---|
| View Patient Profile | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Modify Patient Bio | ✗ | ✓ | ✗ | ✓ | ✗ | ✓ | ✗ | ✗ |
| Record Vital Signs | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ |
| Write SOAP Note | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Sign & Lock SOAP (BSrE) | ✗ | ✗ | ✓ (2FA) | ✗ | ✗ | ✗ | ✗ | ✗ |
| Amend SOAP (Addendum) | ✗ | ✗ | ✓ (Audit+BSrE) | ✗ | ✗ | ✗ | ✗ | ✗ |
| Create e-Prescription | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Dispense Medication | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ |
| Process Billing & Cash | ✗ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ |
| Void/Discount Billing | ✗ | ✓ (PIN) | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Order Lab Test | ✗ | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Input Lab Results | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ | ✗ |
| Access Audit Logs | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✓ |
| View Financial Reports | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Manage Doctor Payroll | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| View Payroll Slip (Own) | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
| BPJS Claim Submit | ✗ | ✓ | ✗ | ✗ | ✗ | ✓ | ✗ | ✗ |
| SatuSehat Sync Monitor | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Emergency Bypass | ✗ | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ |
| Merge Medical Record | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
Catatan Khusus¶
-
Sign & Lock SOAP (BSrE): Hanya Dokter yang berwenang, dan memerlukan 2FA (PIN khusus BSrE) terpisah dari password login. PIN ini teregister ke BSrE dan terikat pada identitas dokter (NIK + SIP dokter).
-
Amend SOAP (Addendum): SOAP yang sudah terkunci hanya bisa diamendemen melalui mekanisme Addendum dengan penulisan riwayat koreksi lengkap, tanpa menghapus data SOAP lama, dan dicatat langsung ke dalam database log audit dengan log tingkat tinggi.
-
Void/Discount Billing: Kuitansi/Faktur billing kasir yang sudah terbit dikunci secara absolut. Segala bentuk pembatalan (void) atau pemberian diskon manual wajib memasukkan PIN Supervisor (Klinik Manager) dan dicatat ke
audit_logssecara permanen. -
Emergency Bypass: Dapat digunakan oleh Nurse, Dokter, Clinic Manager, dan Cashier dalam kondisi darurat untuk melewati prosedur pendaftaran lengkap dan langsung membuka RME darurat.
Implementasi RBAC¶
RBAC diimplementasikan menggunakan Keycloak sebagai Identity Broker:
- Setiap role dipetakan ke Keycloak Realm Role.
- Token JWT yang diterbitkan oleh Keycloak memuat klaim
roles[]yang divalidasi oleh NestJS Guards pada setiap request. - Role ditambahkan ke user oleh Admin/Owner melalui Keycloak Admin Console.
- Perubahan role berlaku secara instan tanpa perlu restart aplikasi (token refresh cycle < 5 menit).
// NestJS RBAC Guard contoh
@Roles(Role.DOCTOR)
@UseGuards(JwtAuthGuard, RolesGuard)
@Put('/encounters/:id/soap')
async submitSoap(@Param('id') id: string, @Body() dto: SoapDto) {
// Hanya Doctor yang bisa mengakses endpoint ini
return this.clinicalService.submitSoap(id, dto);
}
Audit Trail untuk Setiap Akses RME¶
Sesuai UU PDP No. 27/2022 dan Permenkes 24/2022, setiap aksi berikut dilog ke audit_logs:
READ_EMR: Dokter/Nurse membuka halaman riwayat rekam medis pasien.INSERT: Vital sign, SOAP notes, prescription baru dibuat.UPDATE: Modifikasi data (sebelum lock) — termasukold_valuesdannew_valuessebagai JSON diff.DELETE: Tidak diperbolehkan untuk entitas klinis. Hanya soft-delete yang diizinkan untuk data non-klinis.
Log mencatat: user_id, action_time, ip_address, user_agent, record_id, dan diff nilai lama vs baru.