tumbuh.ai
Panduan Pengguna

9 · Cabang & Manajemen Akses

Atur siapa boleh melakukan apa (pengguna, peran, persetujuan) dan di cabang mana (profil, jam, shift).

1 Daftar pengguna

Menu Manajemen Akses → Pengguna (izin user:read). Tampil nama, email, role, status, dan login terakhir. Filter: Cari pengguna, Status (bawaan Aktif; pilihan Tidak aktif / Semua status), Role, Urutkan. Klik baris untuk melihat panel Akses terpilih dengan tombol Lihat audit dan Edit akses.

Kata kunci pencarian tidak disimpan di alamat halaman: kata kunci hilang saat halaman dimuat ulang dan tidak ikut terbawa saat tautan halaman dibagikan, sedangkan filter lain tetap tersimpan.

💡 Tersedia juga Template dan Pilih berkas untuk impor user dari CSV/XLSX; tidak didemokan di sini.

Daftar pengguna

Daftar pengguna dengan panel Akses terpilih.

Menu aksi baris

Menu aksi baris (titik tiga) berisi Ubah.

2 Menambah dan mengubah pengguna

Akun pengguna selalu ditautkan ke satu Karyawan, jadi buat dulu data karyawan di HRIS.

  1. Klik Tambah user (izin user:create).
  2. Isi Telepon (opsional), Nama depan (wajib), Nama belakang, dan Password awal (aturan password sama seperti Ganti password).
  3. Pada Role assignment centang minimal satu role; kartu ringkasan menampilkan jumlah izin efektif.
  4. Pada Karyawan tertaut klik Cari dan pilih karyawan dan pilih karyawannya (wajib: "Pilih karyawan yang ditautkan.").
  5. Klik Buat pengguna (atau Buat pengguna & buat lagi).
  6. Untuk mengubah: Edit akses atau menu baris Ubah; ubah email/telepon/nama/role/karyawan, lalu Simpan perubahan akses (izin user:update, penetapan role user:assign_role).

⚠️ Mengubah email pengguna juga mengubah email Karyawan tertaut. Layar Pengguna tidak menyediakan tombol nonaktifkan atau reset password oleh admin; pengguna yang lupa password memakai Lupa kata sandi?.

💡 Galat umum: Nomor telepon user sudah digunakan. (kode USER_PHONE_EXISTS) bila telepon sudah dipakai akun lain; ganti nomornya. Email akun dibentuk otomatis dari karyawan terpilih (tampil di Email akun).

Memilih karyawan

Daftar pencarian karyawan yang belum punya akun.

Memilih karyawan

Memilih karyawan yang ditautkan lewat daftar pencarian.

Form pengguna

Formulir Tambah pengguna: identitas dan role Frontliner dicentang.

Ubah akses pengguna

Dialog Ubah akses pengguna.

3 Peran dan izin (Role): membuat peran baru dan mengatur izin

Untuk apa: peran adalah "paket izin" yang ditempelkan ke pengguna, misalnya Resepsionis hanya boleh melihat/mendaftarkan pasien dan membuat janji temu. Buat peran kustom bila 13 peran bawaan (tipe Peran sistem) tidak pas dengan pembagian kerja klinik Anda.

Menu Role (izin role:read) menampilkan daftar peran, jumlah izin, dan jumlah pengguna. Klik sebuah peran untuk membaca Rincian Izin per modul di panel kanan.

  1. Klik Tambah Peran (izin role:create).
  2. Isi Kode peran (huruf kecil, dipakai API dan audit; contoh resepsionis_demo), Nama peran (tampil di layar; contoh Resepsionis Demo), dan Deskripsi.
  3. Pada Matriks hak akses, centang izin yang dibutuhkan. Tiap izin menampilkan nama, penjelasan, dan kodenya (patient:read, dst.). Contoh peran ini: Lihat Pasien, Tambah Pasien, Lihat Janji Temu, Buat Janji Temu.
  4. Periksa kartu Izin dipilih dan Ringkasan dampak di bagian atas dialog (jumlah izin dan daftar nama izin).
  5. Klik Simpan Peran. (Simpan Peran & buat lagi menyimpan lalu mengosongkan formulir.)
  6. Untuk mengubah, pilih peran lalu klik Ubah Peran (izin role:update), centang/lepas izin, dan simpan.

Setelahnya: peran baru muncul di daftar dengan tipe Peran kustom dan jumlah izinnya (di demo: 4 izin). Panel Rincian Izin mengelompokkan izin per modul.

Siapa yang boleh

Melihat peran: role:read. Membuat: role:create. Mengubah: role:update.

Aturan penting

Perubahan izin berlaku untuk semua pengguna berperan itu setelah disimpan. Hindari mengubah peran sistem bawaan; buat peran kustom.

⚠️ Izin yang berakhiran cross_branch ("Akses Lintas Cabang") tidak menambah hak baru, tetapi melepas batas cabang pada izin modul yang sama. Lihat bagian Cakupan cabang.

Daftar peran

Daftar peran dengan jumlah izin dan pengguna.

Form tambah peran

Formulir Tambah Peran: identitas peran dan ringkasan dampak.

Izin dicentang di matriks hak akses

Matriks hak akses: Tambah Pasien, Lihat Pasien, dan Buat Janji Temu dicentang.

Peran kustom tersimpan

Peran Resepsionis Demo tersimpan sebagai Peran kustom dengan 4 izin.

Rincian izin peran

Panel Rincian Izin untuk peran Frontliner.

4 Menugaskan peran ke pengguna

Untuk apa: peran baru belum berguna sampai dipasang ke akun seseorang. Satu pengguna boleh punya lebih dari satu peran; izin efektifnya gabungan semuanya.

  1. Buka Pengguna, klik Tambah user untuk akun baru, atau pilih pengguna lalu Edit akses untuk akun yang ada.
  2. Pada Role assignment centang peran, misalnya Resepsionis Demo (kartu menampilkan "Role custom · 4 izin"). Kartu ringkasan di atas dialog memperlihatkan Role dipilih dan Izin efektif.
  3. Simpan (Buat pengguna atau Simpan perubahan akses). Izin penetapan peran: user:assign_role.

Cara memeriksa: di daftar Role, kolom Pengguna peran itu bertambah; di panel Akses terpilih pengguna tampil peran barunya. Pengguna perlu login ulang agar menu barunya muncul.

Form pengguna dengan peran Resepsionis Demo

Role Resepsionis Demo dicentang: kartu Izin efektif menunjukkan 4.

5 Daftar dan detail cabang

Untuk apa: melihat semua klinik dalam satu layar, siapa yang bekerja di sana, dan apakah cabang siap beroperasi. Menu Cabang (izin branch:read).

  • Kartu ringkasan: Cabang tampil, Aktif, Setup / nonaktif, dan jumlah Dental chair.
  • Filter: Pencarian (kode, nama, alamat, telepon), Kota, Status (Semua/Aktif/Setup/Nonaktif), Tipe (Semua tipe/Kantor pusat/Cabang klinik), dan Urutkan.
  • Tiap baris menampilkan kontak, lingkup (jumlah dental chair, shift, staf), dan status. Klik baris untuk panel Konteks cabang dengan tombol Lihat detail dan Edit cabang.

Halaman detail berisi: ringkasan status, Profil cabang, Istirahat operasional, Shift operasional, Karyawan & mitra (tab Semua/Karyawan/Mitra, pencarian, urutan, Tampilkan nonaktif), panel Scope klinis (jumlah dental chair dan mapping unit), dan Kontrol status.

Daftar cabang

Daftar cabang: cabang baru KD2 berstatus Setup, dengan panel Konteks cabang.

Detail cabang

Detail cabang: profil, scope klinis, dan kontrol status.

Karyawan cabang

Bagian Karyawan & mitra pada detail cabang.

6 Menambah cabang baru

Untuk apa: mendaftarkan klinik baru. Cabang baru selalu berstatus Setup sampai Anda mengaktifkannya. Contoh di bawah: Klinik Demo Cabang Dua (KD2), Bandung.

  1. Klik Tambah cabang (izin branch:create).
  2. Identitas dan kontak: Kode cabang (maks. 20 karakter), Nama cabang, Kota, Telepon, Email, Nomor WA Cabang (tercetak di kop struk dan invoice), dan opsi Tandai sebagai kantor pusat.
  3. Alamat dan koordinat: Alamat lengkap, Latitude, Longitude, Foto cabang (opsional, tampil di widget reservasi), Radius GPS presensi (meter) (bawaan 50) untuk validasi Clock In/Clock Out, dan Target BMHP (% omzet) (kosong berarti 7%).
  4. Jam operasional klinik: per hari isi jam buka dan tutup; centang Tutup untuk hari libur (semua hari awalnya Tutup, jadi hilangkan centang pada hari buka). Tombol Copy ke semua jadwal menyalin satu hari ke hari lain.
  5. Istirahat operasional (opsional): Tambah istirahat atau pilih contoh Bandung / Karawang atau Bekasi / Depok.
  6. Shift cabang: satu shift awal (Full-day, FD) sudah tersedia; ubah nama, kode, jam, dan Hari kerja serta Hari libur (lihat langkah Shift). Tambah shift menambah shift lain.
  7. Mapping dental chair: isi Jumlah dental chair; untuk tiap unit pilih posisi yang boleh memakainya (Dokter Gigi dan/atau TGM) dan beri Nama unit bila perlu.
  8. Klik Simpan cabang (atau Simpan cabang & buat lagi).

Setelahnya: cabang muncul di daftar dengan status Setup. Cabang baru belum bisa dipakai operasional sampai diaktifkan.

⚠️ Pesan galat yang muncul bila shift belum lengkap: Hari kerja shift wajib dinyatakan. dan Hari libur shift wajib dinyatakan. Tandai "tidak ada hari libur" bila shift ini memang tidak punya. Isi hari pada shift atau centang Tidak ada hari libur.

Identitas dan kontak cabang

Formulir Tambah Cabang: identitas dan kontak.

Alamat dan koordinat

Alamat, koordinat, dan kebijakan absensi.

Jam operasional

Jam operasional per hari; Senin sampai Sabtu dibuka, Minggu Tutup.

Mapping dental chair

Mapping dental chair dan nama unit.

Shift cabang

Shift cabang dengan hari kerja dan hari libur terisi.

7 Mengubah cabang, kursi, mengaktifkan dan menonaktifkan

Untuk apa: memperbarui data cabang, menambah kursi (dental chair), lalu membuka atau menutup cabang untuk operasional.

  1. Di detail cabang klik Edit (atau Edit profil; izin branch:update). Dialog Edit Cabang berisi bagian yang sama dengan formulir tambah.
  2. Kursi: ubah Jumlah dental chair, misalnya dari 2 menjadi 3. Kartu Unit baru muncul; centang posisi (Dokter Gigi/TGM) dan isi nama unit, contoh Unit C. Ringkasan di bawah menunjukkan "3 dental chair (3 Dokter Gigi / 0 TGM)".
  3. Istirahat: klik contoh Bandung / Karawang untuk mengisi Istirahat siang dan sore (30 menit).
  4. Klik Simpan cabang. Detail cabang menampilkan jumlah dental chair baru, mapping unit, dan istirahat.
  5. Mengaktifkan: klik Aktifkan (atau Aktifkan cabang pada Kontrol status). Status berubah ke Aktif seketika, tanpa dialog konfirmasi (izin branch:status_write).
  6. Menonaktifkan: klik Nonaktifkan. Status menjadi Nonaktif seketika. Aktifkan lagi kapan saja dengan tombol yang sama.

Siapa yang boleh

Membuat branch:create, mengubah branch:update, mengganti status branch:status_write.

Aturan penting

Menonaktifkan tidak menghapus data; riwayat tetap ada. Mengubah kode cabang meminta konfirmasi lebih dulu.

💡 Pemeriksaan: setelah cabang Aktif, ia muncul di pemilih Cabang pada bilah atas milik pengguna yang berhak (lihat Cakupan cabang).

Mengubah jumlah dental chair

Edit Cabang: jumlah dental chair menjadi 3 dan Unit C ditambahkan.

Cabang aktif

Cabang berstatus Aktif; tombol berganti menjadi Nonaktifkan.

Cabang nonaktif

Setelah Nonaktifkan: status Nonaktif, 3 dental chair, dua istirahat operasional, dan tombol Aktifkan.

8 Shift cabang

Untuk apa: menentukan jam kerja yang bisa dipilih saat menyusun jadwal staf. Di detail cabang, Shift operasional menampilkan nama, kode, asal (Cabang), jam, istirahat, hari kerja/libur, jumlah staf, dan status.

  1. Klik Tambah shift.
  2. Isi Nama shift, Kode shift (wajib), dan Urutan. Contoh: Shift Sore, kode SR, urutan 2.
  3. Isi Jam shift (Mulai/Selesai) dan Jam istirahat (Mulai/Selesai), mis. 13.00-21.00 dengan istirahat 17.00-18.00.
  4. Klik hari pada Hari kerja (Sen-Min) dan Hari libur; atau centang Tidak ada hari libur. Kotak Aktif mengatur status.
  5. Klik Simpan shift (atau Simpan shift & buat lagi).

Setelahnya: shift tampil di tabel dan kartu Shift aktif bertambah (di contoh dari 1 menjadi 2).

Form tambah shift

Dialog Tambah shift: Shift Sore, Senin sampai Sabtu kerja, Minggu libur.

9 Cakupan cabang dan akses lintas cabang

Untuk apa: pengguna biasa hanya melihat data cabang tempat ia bekerja. Pemilik atau manajer area yang perlu melihat banyak cabang diberi izin "Akses Lintas Cabang".

  • Setiap modul punya izin sendiri berkode <modul>:cross_branch, misalnya Akses Lintas Cabang: Pasien (patient:cross_branch) atau Akses Lintas Cabang: Laporan. Izin ini hanya memperluas jangkauan izin modul yang sudah dipegang, tidak memberi hak baru.
  • Tanpa izin lintas cabang, data dibatasi ke cabang aktif yang dipilih di pemilih Cabang pada bilah atas. Aksi tulis dalam konteks cabang memakai cabang aktif itu.
  • Peran Direktur memegang seluruh izin (224) termasuk semua izin lintas cabang.

Contoh nyata di demo: Dewi Anggraini (peran Resepsionis Demo, tanpa izin lintas cabang) membuka pemilih Cabang dan hanya melihat Klinik Demo Tumbuh. Berandanya menampilkan 3 modul (Presensi, Operasional, Pengaturan). Direktur, yang memegang semua izin lintas cabang, melihat tiga cabang (Klinik Demo Cabang Dua, Kantor Pusat Demo, Klinik Demo Tumbuh) dan 9 modul. Bila Dewi membuka halaman di luar izinnya, misalnya Role, muncul pesan Akses dibatasi dengan kode izin yang dibutuhkan (role:read).

Pemilih cabang Direktur

Direktur: pemilih Cabang menampilkan semua cabang.

Pemilih cabang Dewi

Dewi (Resepsionis Demo): hanya satu cabang dan 3 modul.

Akses dibatasi

Halaman di luar izin: Akses dibatasi, Kode hak akses role:read.

Izin Akses Lintas Cabang di matriks hak akses

Izin Akses Lintas Cabang: Pasien di matriks hak akses.

10 Kredensial Agent (AI Agent / MCP)

Untuk apa: memberi program AI (misalnya bot WhatsApp penjadwal) kunci akses terbatas ke ERP lewat MCP, tanpa memakai akun orang. Menu Pengaturan → Kredensial Agent (izin agent:read).

Di halaman ini ada Saklar akses agent (Matikan seluruh akses menghentikan semua agent sekaligus), Akses per cabang (tombol Matikan per cabang), dan tabel Kredensial diterbitkan (nama, prefiks, jumlah permission, cabang, masa berlaku, pemakaian 24 jam, status).

  1. Klik Terbitkan Kredensial.
  2. Isi Nama agent (wajib) dan Keterangan (opsional).
  3. Pilih Cabang yang boleh diakses (wajib; agent hanya menyentuh cabang itu) dan Masa berlaku (30, 90, 180, atau 365 hari).
  4. Pada Permission centang kewenangan per modul (atau Pilih semua per modul). Kewenangan bertanda Sulit dibalik (pembatalan bernilai uang, rekam klinis, payroll, tata kelola akses) berikan hanya bila benar-benar perlu.
  5. Klik Terbitkan. Dialog Simpan rahasia ini sekarang menampilkan rahasia berawalan tmbh_agt_ dan contoh perintah untuk Claude Code, Cursor, Claude Desktop, atau cURL. Klik Salin rahasia, simpan di pengelola rahasia, lalu Selesai.

⚠️ Rahasia hanya tampil sekali dan tidak bisa dilihat lagi. Cabang dan kewenangan terkunci sejak diterbitkan: untuk menambah kewenangan, cabut lalu terbitkan ulang. Layar rahasia tidak disertakan sebagai gambar di panduan ini.

Mengelola: klik nama kredensial untuk Detail: cabang, permission, Panduan MCP, Pemakaian (60 menit dan 24 jam terakhir), Batas kuota (Ubah batas kuota), Pemanggilan terakhir, dan Riwayat tindakan. Menu titik tiga di baris berisi Jeda (berhenti sementara; bisa Lanjutkan) dan Cabut (permanen, konfirmasi Ya, cabut). Agent yang dijeda menerima galat 403 AGENT_CREDENTIAL_SUSPENDED.

Demonstrasi: pada kredensial uji, Jeda mengubah status menjadi Dijeda; Lanjutkan mengaktifkannya lagi. Cabut membuka dialog Cabut kredensial? ("akan berhenti bekerja seketika... tidak dapat dibatalkan"); setelah Ya, cabut status menjadi Dicabut dan menu baris tidak lagi menyediakan aksi.

Kredensial dijeda

Status Dijeda; hitungan berjalan menjadi 1 dari 2.

Konfirmasi cabut

Dialog konfirmasi Cabut kredensial.

Kredensial dicabut

Status Dicabut.

Daftar kredensial agent

Saklar akses agent dan daftar kredensial.

Formulir terbitkan kredensial

Formulir Terbitkan Kredensial Agent: nama, cabang, masa berlaku.

Pemilihan permission

Permission per modul; Janji Temu terpilih 4/4.

Detail kredensial agent

Detail kredensial: permission dan Panduan MCP.

Menu baris kredensial

Menu baris: Jeda dan Cabut.

11 Jejak audit

Untuk apa: melihat siapa mengubah apa, kapan, dan dari nilai apa ke nilai apa; berguna saat ada selisih data atau perubahan akses yang mencurigakan.

  • Pengaturan → Audit Trail (izin audit:read): filter Modul, Jenis pelaku (Manusia, Mesin/kredensial agent, Sistem), Aksi, ID atau nomor entitas, Dari/Sampai tanggal, Urutkan, dan Hanya aksi lintas cabang. Kolom: Waktu, Pelaku, Modul, Aksi, Entitas, Cabang, Asal, Perubahan.
  • Log Audit (/settings/audit): khusus perubahan konfigurasi, dengan filter kunci, lingkup, dan tanggal; menampilkan nilai lama dan baru.
  • Exports: riwayat siapa mengunduh data apa; kosong sampai ada ekspor.
  • Dari Pengguna, tombol Lihat audit membuka riwayat satu pengguna.

⚠️ Isi audit memuat data pribadi lintas modul; berikan audit:read hanya pada peran yang memerlukan.

Jejak audit

Jejak Audit: login dan perubahan tercatat dengan pelaku, cabang, dan perubahan nilai.

Log audit konfigurasi

Log Audit konfigurasi.

Riwayat ekspor

Riwayat Ekspor.

12 Persetujuan (approval)

Menu Persetujuan (izin approval:read) berisi permintaan yang menunggu keputusan Anda. Filter Status (Menunggu, Disetujui, Ditolak, Semua status) dan Tipe (Role / akses, Finance, Clinical, Inventory).

  1. Klik sebuah permintaan untuk melihat konteks, lalu buka halamannya (Detail approval).
  2. Isi Catatan persetujuan lalu klik Setujui approval, atau isi Alasan penolakan lalu klik Tolak approval.
  3. Bila berwenang, Delegasikan keputusan: isi User ID tujuan dan Alasan delegasi. Riwayat approval mencatat setiap langkah.

💡 Contoh nyata di demo: dua permintaan refund dari modul Tagihan (pengembalian dana ke pasien) ditangani sebagai berikut.

Menyetujui: buka permintaan, isi Catatan persetujuan (opsional, tercatat di audit), klik Setujui approval. Status menjadi Disetujui, kolom Respons berisi catatan, dan Riwayat approval menambah baris approved.

Menolak: isi Alasan penolakan (wajib; tombol Tolak approval baru aktif setelah diisi), lalu klik tombolnya. Status menjadi Ditolak dan riwayat menambah baris rejected.

Mendelegasikan: klik Delegasikan keputusan, isi User ID tujuan (approver pengganti) dan Alasan delegasi, lalu Konfirmasi delegasi; Batal delegasi menutup formulir. Formulir delegasi sudah diperagakan, tetapi pengiriman delegasi tidak dijalankan.

⚠️ Keputusan tidak bisa diubah setelah disetujui atau ditolak: panel Keputusan hanya aktif untuk status Menunggu.

Detail approval

Halaman Detail approval: konteks, Riwayat approval, dan panel Keputusan (Catatan persetujuan, Setujui approval, Alasan penolakan, Tolak approval, Delegasikan keputusan). Tombol Tolak baru aktif setelah alasan diisi.

Approval disetujui

Refund INV-20261003-001 Disetujui dengan catatan; riwayat mencatat approved.

Formulir delegasi

Formulir Delegasi approval: User ID tujuan dan Alasan delegasi.

Approval ditolak

Refund INV-20261003-010 Ditolak dengan alasan; riwayat mencatat rejected.

Daftar persetujuan

Daftar persetujuan dengan panel Konteks terpilih.

Terakhir diperbarui pada