Lewati ke konten utama

Tata Kelola Data

Kontrol tata kelola data yang tersedia di aplikasi: retensi data, permintaan ekspor data, dan permintaan penghapusan/anonymisasi data, termasuk verifikasi isolasi antar-penyewa (tenant). Semua kontrol ini dikelompokkan pada menu Governance dan hanya tampil bagi pengguna dengan izin yang sesuai.

Dokumentasi ini bersifat teknis-operasional dan bukan nasihat hukum. Untuk kepatuhan (misalnya GDPR, UU PDP), konsultasikan dengan penasihat hukum Anda.

Tujuan

  • Menjalankan pembersihan retensi untuk jenis entitas tertentu dan membaca hasilnya.
  • Membuat permintaan ekspor data serta memahami statusnya.
  • Membuat permintaan penghapusan atau anonymisasi data (satu kontak atau seluruh akun).
  • Memverifikasi bahwa data akun Anda terisolasi dari akun lain (tenant isolation).
  • Memahami dengan jujur apa yang belum tersedia (misalnya mengunduh file ekspor).

Untuk siapa

  • Admin/owner — menjalankan retensi dan verifikasi isolasi (izin manage_account, peran owner/admin).
  • Pengguna dengan izin export_data — membuat dan memantau permintaan ekspor.
  • Pengguna dengan izin manage_contacts — membuat dan membatalkan permintaan penghapusan.

Prasyarat

  • Masuk dengan akun yang memiliki izin sesuai (lihat Untuk siapa).
  • Memahami konsekuensi tindakan penghapusan/anonymisasi yang tidak dapat dibatalkan.

Langkah-langkah

1. Menjalankan retensi data

  1. Buka menu Governance.
  2. Pada bagian Run retention, pilih satu atau beberapa jenis entitas: contacts, conversations, messages, atau attachments. (Jenis audit_log dapat dipicu lewat API.)
  3. Klik Run.
  4. Periksa hasil pada daftar riwayat: tiap entitas menampilkan jenis, aksi yang diterapkan, jumlah baris terdampak, dan status (completed/failed).
  5. Bila sebuah jenis entitas tidak memiliki kebijakan retensi yang aktif, entitas itu dilaporkan skipped dengan alasan no policy — tidak ada data yang diubah.

Cara kerja retensi:

  • Kebijakan retensi disimpan per akun per jenis entitas: jumlah hari retensi (bawaan 730 hari ≈ 24 bulan), aksi (delete atau anonymize), dan bendera aktif (enabled).
  • Saat dijalankan, sistem memproses data yang lebih lama dari ambang hari retensi.
  • Percakapan yang dihapus/dianonimkan hanyalah percakapan berstatus resolved.
  • Riwayat audit (audit_log) selalu dihapus permanen (tidak pernah dianonimkan); trigger keabadian (immutable) audit dilepas sementara selama penghapusan lalu dipasang kembali.
  • Setiap run dicatat dalam riwayat dan jejak audit (retention.run).

2. Membuat permintaan ekspor data

  1. Buka menu Governance.
  2. Pada bagian Create export, pilih jenis entitas (contacts, conversations, messages) dan format (JSON atau CSV).
  3. Klik Create; sistem membuat permintaan dan menjalankannya secara sinkron.
  4. Pantau status permintaan di daftar: completed, failed, atau status antara lainnya. UI memuat ulang hingga mencapai status akhir.
  5. Bila berhasil, catat jumlah baris yang dilaporkan.

3. Membuat permintaan penghapusan / anonymisasi

  1. Buka menu Governance.
  2. Pada bagian Create deletion, pilih mode:
    • Anonymize (bawaan) — menimpa nilai identitas dengan penanda, tidak menghapus baris.
    • Hard delete — menghapus baris secara permanen (berjenjang lewat relasi).
  3. Pilih jenis entitas yang terdampak (contacts, conversations, messages).
  4. Opsional: isi Contact ID untuk membatasi tindakan ke satu kontak; kosongkan untuk memproses seluruh akun.
  5. Klik Create. Permintaan dijalankan seketika; status langsung menjadi completed atau failed.

Apa yang terjadi pada masing-masing mode:

  • Anonymize kontak: nama → [deleted], email dan telepon → NULL, atribut kustom → {}.
  • Anonymize pesan: konten → [anonymized], metadata → {}.
  • Anonymize percakapan: prioritas → 0, atribut kustom → {}.
  • Hard delete: penghapusan berjenjang lewat kunci asing. Untuk entitas messages, pembersihan objek media di MinIO hanya dilakukan bila contact_id diisi dan penyimpanan objek terkonfigurasi.

4. Membatalkan permintaan penghapusan

  1. Lihat daftar permintaan penghapusan di menu Governance.
  2. Tombol Cancel hanya muncul untuk permintaan berstatus pending.

5. Memverifikasi isolasi antar-penyewa

  1. Pastikan Anda berperan owner/admin.
  2. Panggil verifikasi isolasi (tersedia lewat API di bawah /data-governance/verify-isolation).
  3. Periksa hasil per tabel: jumlah baris milik akun Anda (owned) dan jumlah baris yang terlihat (total).
  4. Bila RLS bekerja, total = owned untuk setiap tabel — nilai isolated: true.

Tanda berhasil

  • Run retensi muncul di riwayat dengan status dan jumlah baris; entitas tanpa kebijakan dilaporkan skipped: no policy.
  • Permintaan ekspor mencapai status completed dan melaporkan jumlah baris.
  • Permintaan penghapusan mencapai status completed/failed seketika, tercatat di riwayat.
  • Verifikasi isolasi melaporkan isolated: true untuk tabel yang ada.

Jika terjadi masalah

  • Status skipped: no policy pada retensi: akun belum memiliki kebijakan aktif untuk jenis entitas itu. Kebijakan disimpan sebagai data (baris per akun); tidak ada editor kebijakan di UI — atur lewat akses data/DB yang dikelola tim Anda, lalu jalankan ulang.
  • Status failed dengan error_message: baca pesan galat pada riwayat; perbaiki penyebab (misalnya koneksi penyimpanan objek), lalu jalankan ulang.
  • Cancel mengembalikan "request not found or not pending": karena eksekusi bersifat sinkron, permintaan tidak pernah tertinggal berstatus pending; pembatalan hanya berlaku untuk permintaan yang benar-benar masih antre.
  • Ekspor melaporkan 0 baris padahal ada data: pastikan jenis entitas yang dipilih sesuai dan data berada di akun yang sama.

Batasan

  • Unduhan file ekspor belum tersedia. Permintaan ekspor berjalan sinkron dan hanya menghitung baris (tanpa membuat/menyimpan berkas); kolom ukuran berkas selalu 0 dan URL unduhan tercatat tanpa rute pengunduhan yang terdaftar. Gunakan ekspor CSAT (CSV) yang tersedia pada laporan untuk kebutuhan berkala.
  • Editor kebijakan retensi tidak ada di UI/API — kebijakan dikelola sebagai baris data per akun; UI hanya menjalankan dan menampilkan hasilnya.
  • Tidak ada dialog konfirmasi sebelum membuat permintaan penghapusan di UI saat ini. Tindakan anonymize dan hard_delete tidak dapat dibatalkan: anonymize menimpa nilai dengan penanda, hard delete menghapus baris permanen. Periksa Contact ID dan mode sebelum mengirim.
  • Penghapusan seluruh akun dengan mode hard_delete untuk entitas messages tidak membersihkan objek media di penyimpanan objek (pembersihan MinIO hanya berjalan saat contact_id diisi).
  • Riwayat yang ditampilkan dibatasi 50 entri terbaru per kategori.
  • Satu operasi dijalankan pada satu waktu dari UI (tombol dinonaktifkan selama proses berjalan).

Tugas terkait