﻿# Checklist Implementasi Estimate Activity History

Dokumen ini dipakai untuk eksekusi harian task-by-task.

## Cara Pakai
1. Centang `[x]` jika task selesai.
2. Isi `PIC`, `Tanggal Target`, dan `Tanggal Selesai`.
3. Jangan lanjut ke task dependen sebelum task prasyarat selesai.
4. Setiap task wajib punya bukti (PR, screenshot, query result, atau test report).

## Ringkasan Sprint
- Sprint 1: Fondasi data dan backend inti
- Sprint 2: Timeline UX, diff, hardening, UAT, go-live

---

## Sprint 1 - Fondasi (Minggu 1-2)

### A. Finalisasi Aturan dan Scope
- [ ] A1. Freeze activity code estimate: `DRAFT, SENT, ACCEPTED, DECLINED`
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] A2. Freeze rule validasi transisi estimate (doc status flow) dan sinkronisasi `activity_code <-> estimate.status`
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] A3. Freeze role akses snapshot full (admin/supervisor/owner)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:

### B. Database dan Integritas
- [ ] B1. Buat migration tabel `rise_estimate_activity_master`
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] B2. Seed data master activity
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] B3. Buat migration tabel `rise_estimate_activity_history`
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] B4. Buat migration tabel `rise_estimate_activity_state`
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] B5. Tambahkan index dan unique key (`estimate_id, version_no`) + index hash (`estimate_id, snapshot_hash`)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] B6. Terapkan DB privilege append-only (revoke update/delete pada tabel history)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] B7. Siapkan script rollback migration
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:

### C. Service Logging Inti
- [ ] C1. Implement service pembentuk canonical snapshot JSON (header, client, items, totals, tax_rules, attachments, audit)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] C2. Implement hash `SHA-256(snapshot_json_canonical)`
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] C3. Implement atomic transaction (update estimate + insert history + update state dalam 1 transaksi)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] C4. Implement lock state (`FOR UPDATE`) untuk cegah bentrok versi
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] C5. Implement versioning: `version_no, cycle_no, activity_entry_no, revision_no`
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] C6. Implement no-op detection (save tanpa perubahan tidak menambah versi)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] C7. Implement validasi transisi aktivitas sesuai spec
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:

### D. API Dasar Timeline
- [ ] D1. Endpoint list timeline (paged, filter event/activity)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] D2. Endpoint detail snapshot per version
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] D3. Endpoint compare dua version (diff field)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:

---

## Sprint 2 - UX, Hardening, UAT, Go-Live (Minggu 3-4)

### E. Implementasi Timeline UI
- [ ] E1. Tambah panel timeline di kanan halaman detail estimate
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] E2. Tampilkan item timeline: waktu, activity, rev, version, user, event type
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] E3. Tambah filter UI (Semua, Status Change, Edit, Activity)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] E4. Implement tombol `Lihat` (drawer/modal snapshot detail)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] E5. Implement tombol `Banding` + diff highlighter
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] E6. Implement pagination `Load more` (default 20 row)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:

### F. Security dan Performance Hardening
- [ ] F1. Batasi akses snapshot detail berdasarkan role
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] F2. Tambah validasi hash saat baca snapshot (full atau sampling)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] F3. Uji performa 5.000 history (target first paint <2 detik)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] F4. Uji concurrency edit 2 user (tidak ada duplikasi version)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] F5. Siapkan strategi retensi 24 bulan + desain archive table
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:

### G. Backfill dan Data Operasional
- [ ] G1. Buat script backfill `SYSTEM_SYNC` untuk data estimate existing
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] G2. Jalankan backfill di staging dan validasi sample
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] G3. Jalankan backfill di production saat off-peak
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:

### H. UAT dan Sign-Off
- [ ] H1. Jalankan UAT fungsional F-01 s.d. F-21
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] H2. Jalankan UAT non-fungsional N-01 s.d. N-08
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] H3. Jalankan checklist UX (keterbacaan, navigasi, diff, akses)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] H4. Perbaiki temuan UAT dan re-test
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] H5. Sign-off bisnis, QA, dan teknis
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:

### I. Go-Live dan Hypercare
- [ ] I1. Deploy migration + backend + frontend ke production
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] I2. Monitoring 48 jam pertama (error log, query lambat, data mismatch)
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:
- [ ] I3. Tutup hypercare dan buat laporan pasca implementasi
  - PIC:
  - Tanggal Target:
  - Tanggal Selesai:
  - Bukti:

---

## Definition of Done (Ringkas)
- [ ] Semua event estimate tercatat sebagai full snapshot valid.
- [ ] Hash snapshot terisi dan tervalidasi.
- [ ] History benar-benar append-only.
- [ ] Timeline + compare + diff berjalan stabil.
- [ ] UAT lulus >=95% dan tidak ada regresi kritikal.

## Catatan Risiko
- [ ] Risiko storage growth diantisipasi dengan retensi/arsip.
- [ ] Risiko bentrok versi ditutup dengan lock + transaksi.
- [ ] Risiko akses data sensitif ditutup dengan role policy.
