// types/simrs-roles.ts interface Roles { nama_role: string; deskripsi: string; tanggung_jawab: string[]; } interface KonfigurasiKeamanan { autentikasi: string; enkripsi: string; audit_trail: boolean; session_timeout: number; } interface KonfigurasiSistem { level_akses: string[]; modul_utama: string[]; keamanan: KonfigurasiKeamanan; } interface SIMRSRoles { role_administratif: Roles[]; role_klinis: Roles[]; role_penunjang_medis: Roles[]; role_manajemen: Roles[]; role_teknis: Roles[]; konfigurasi_sistem: KonfigurasiSistem; } // Enum untuk level akses enum LevelAkses { SUPER_ADMIN = "Super Admin", ADMIN_DEPARTEMEN = "Admin Departemen", USER_KLINIS = "User Klinis", USER_ADMINISTRATIF = "User Administratif", GUEST_READ_ONLY = "Guest/Read Only" } // Enum untuk modul utama enum ModulUtama { PENDAFTARAN_PASIEN = "Pendaftaran Pasien", REKAM_MEDIS_ELEKTRONIK = "Rekam Medis Elektronik", FARMASI = "Farmasi", LABORATORIUM = "Laboratorium", RADIOLOGI = "Radiologi", KEUANGAN = "Keuangan", INVENTORY = "Inventory", REPORTING = "Reporting" } // Data konstanta untuk SIMRS roles const simrsRoles: SIMRSRoles = { role_administratif: [ { nama_role: "Administrator Pendaftaran", deskripsi: "Mengelola proses pendaftaran pasien dan penjadwalan dalam sistem SIMRS", tanggung_jawab: [ "Mengelola pendaftaran pasien dan penjadwalan dokter", "Mengatur penjadwalan operasi atau pemeriksaan", "Mengelola antrian dan mengurangi waktu tunggu pasien", "Memastikan data pasien terinput dengan benar" ] }, { nama_role: "Staff Administrasi Keuangan", deskripsi: "Mengelola aspek keuangan dan penagihan dalam sistem rumah sakit", tanggung_jawab: [ "Mengelola penagihan dan klaim asuransi", "Mengintegrasikan sistem dengan BPJS Kesehatan", "Mengelola administrasi keuangan rumah sakit", "Memproses pembayaran dan verifikasi biaya" ] }, { nama_role: "Petugas Rekam Medis", deskripsi: "Mengelola dan memelihara rekam medis elektronik pasien", tanggung_jawab: [ "Mengelola Electronic Medical Records (EMR)", "Memastikan dokumentasi pasien yang akurat", "Menjaga keamanan dan kerahasiaan data pasien", "Melakukan backup dan archiving data medis" ] } ], role_klinis: [ { nama_role: "Dokter/Tenaga Medis", deskripsi: "Profesional medis yang menggunakan sistem untuk diagnosis dan pengobatan", tanggung_jawab: [ "Mengakses riwayat medis, alergi, dan catatan pengobatan pasien", "Menggunakan modul pendukung pengambilan keputusan klinis", "Melakukan pemantauan pasien secara berkelanjutan", "Menginput diagnosis dan resep obat ke sistem" ] }, { nama_role: "Perawat", deskripsi: "Tenaga keperawatan yang melakukan perawatan langsung kepada pasien", tanggung_jawab: [ "Mencatat parameter vital dan perkembangan pasien", "Mengakses informasi terintegrasi dari berbagai departemen", "Melakukan pemantauan pasien rawat inap", "Mengelola jadwal pemberian obat dan tindakan keperawatan" ] }, { nama_role: "Apoteker/Staff Farmasi", deskripsi: "Mengelola obat-obatan dan memastikan keamanan farmasi", tanggung_jawab: [ "Mengelola persediaan obat dan bahan medis", "Memastikan ketersediaan obat yang sesuai", "Mencegah risiko kekurangan atau kelebihan stok", "Melakukan verifikasi resep dan dispensing obat" ] } ], role_penunjang_medis: [ { nama_role: "Petugas Laboratorium", deskripsi: "Mengelola pemeriksaan laboratorium dan hasilnya", tanggung_jawab: [ "Menginput hasil tes laboratorium ke sistem", "Mengintegrasikan data laboratorium dengan rekam medis", "Melakukan quality control hasil laboratorium", "Mengelola sampel dan alat laboratorium" ] }, { nama_role: "Petugas Radiologi", deskripsi: "Mengelola pemeriksaan radiologi dan imaging", tanggung_jawab: [ "Mengelola hasil pemeriksaan radiologi", "Mengintegrasikan data radiologi dengan sistem", "Melakukan penjadwalan pemeriksaan radiologi", "Memastikan kualitas gambar dan interpretasi" ] } ], role_manajemen: [ { nama_role: "Manajer Rumah Sakit", deskripsi: "Mengelola operasional rumah sakit secara keseluruhan", tanggung_jawab: [ "Mengakses laporan dan analisis kinerja", "Melakukan monitoring operasional rumah sakit", "Menggunakan modul prediktif untuk perencanaan sumber daya", "Membuat keputusan strategis berdasarkan data sistem" ] }, { nama_role: "Supervisor Departemen", deskripsi: "Mengawasi dan mengoordinasikan departemen spesifik", tanggung_jawab: [ "Mengelola koordinasi antar-departemen", "Memastikan integrasi berbagai aspek operasional", "Monitoring kinerja staff departemen", "Melakukan evaluasi dan pelaporan departemen" ] } ], role_teknis: [ { nama_role: "Administrator Sistem SIMRS", deskripsi: "Mengelola infrastruktur dan keamanan sistem SIMRS", tanggung_jawab: [ "Mengelola keamanan sistem dan data terenkripsi", "Melakukan maintenance dan troubleshooting sistem", "Menangani masalah infrastruktur teknologi", "Mengatur hak akses user dan permission" ] }, { nama_role: "Staff IT Support", deskripsi: "Memberikan dukungan teknis kepada pengguna sistem", tanggung_jawab: [ "Memberikan pelatihan teknologi kepada pengguna", "Menangani masalah teknis harian", "Melakukan monitoring sistem dan evaluasi", "Membantu troubleshooting masalah user" ] } ], konfigurasi_sistem: { level_akses: [ LevelAkses.SUPER_ADMIN, LevelAkses.ADMIN_DEPARTEMEN, LevelAkses.USER_KLINIS, LevelAkses.USER_ADMINISTRATIF, LevelAkses.GUEST_READ_ONLY ], modul_utama: [ ModulUtama.PENDAFTARAN_PASIEN, ModulUtama.REKAM_MEDIS_ELEKTRONIK, ModulUtama.FARMASI, ModulUtama.LABORATORIUM, ModulUtama.RADIOLOGI, ModulUtama.KEUANGAN, ModulUtama.INVENTORY, ModulUtama.REPORTING ], keamanan: { autentikasi: "Multi-factor Authentication", enkripsi: "AES-256", audit_trail: true, session_timeout: 30 } } }; // Utility functions class SIMRSRoleManager { private roles: SIMRSRoles; constructor(roles: SIMRSRoles) { this.roles = roles; } // Mendapatkan semua role berdasarkan kategori getRolesByCategory(category: keyof Omit): Roles[] { return this.roles[category]; } // Mencari role berdasarkan nama findRoleByName(name: string): Roles | undefined { const allCategories = [ ...this.roles.role_administratif, ...this.roles.role_klinis, ...this.roles.role_penunjang_medis, ...this.roles.role_manajemen, ...this.roles.role_teknis ]; return allCategories.find(role => role.nama_role === name); } // Mendapatkan konfigurasi keamanan getSecurityConfig(): KonfigurasiKeamanan { return this.roles.konfigurasi_sistem.keamanan; } // Mendapatkan semua level akses getAccessLevels(): string[] { return this.roles.konfigurasi_sistem.level_akses; } } export type { Roles, KonfigurasiKeamanan, KonfigurasiSistem, SIMRSRoles, }; export { LevelAkses, ModulUtama, SIMRSRoleManager, simrsRoles as default, }; // Contoh penggunaan export const roleManager = new SIMRSRoleManager(simrsRoles);