# Estimate Activity History - PII Policy (Phase 3)

Dokumen ini mendefinisikan kebijakan proteksi data sensitif pada `snapshot_json` untuk modul Estimate Activity History.

## Tujuan
- Mengurangi risiko eksposur data sensitif pada tabel histori.
- Tetap menjaga konsistensi hash snapshot untuk kebutuhan audit trail.

## Mode Proteksi Saat Ini
- `mode`: `mask` (deterministik)
- Data sensitif dimask sebelum disimpan ke `rise_estimate_activity_history.snapshot_json`.
- Snapshot tetap bisa dipakai compare/timeline tanpa membuka data mentah.

## Field Sensitif (PII) yang Dimask
Daftar key saat ini:
- `phone`
- `mobile`
- `mobile_phone`
- `cellphone`
- `wa`
- `whatsapp`
- `email`
- `contact_email`
- `address`
- `alamat`
- `pic_phone`
- `pic_email`
- `npwp`
- `no_npwp`
- `nik`
- `ktp`
- `no_ktp`
- `identity_no`
- `identity_number`
- `rekening`
- `account_number`
- `account_no`
- `bank_account`
- `iban`
- `swift`
- `routing_number`
- `akun_1`
- `akun_2`

## Aturan Masking
1. Email:
- Format: local-part dimask, domain dipertahankan.
- Contoh: `janson@example.com` -> `ja****@example.com`

2. Nomor identitas/telepon/rekening:
- Digit disamarkan kecuali 4 digit akhir.
- Separator tetap dipertahankan bila ada.

3. Alamat:
- Prefix pendek dipertahankan, sisanya dimask.

4. Nilai non-scalar (array/object):
- Disimpan sebagai `[MASKED]`.

## Metadata Privacy di Snapshot
Setiap snapshot menyertakan:
- `_privacy.mode`
- `_privacy.masked_fields`
- `_privacy.policy_version`

Tujuan metadata:
- Transparansi audit bahwa proteksi sudah diterapkan.

## Catatan Implementasi
- Masking dilakukan di service sebelum proses `to_canonical_json()` dan sebelum hash SHA256 dihitung.
- Masking bersifat deterministik agar mekanisme no-op detection (skip jika tidak ada perubahan material) tetap stabil.

## Next Step (Belum Selesai)
- Kebijakan retensi/arsip history.
- Kontrol akses lebih granular untuk pembacaan snapshot detail.
