# UAT Point-to-Point Trace - CRM -> Subsidiary -> Holding

## Tujuan
1. Menemukan titik putus proses secepat mungkin (bukan hanya tahu "gagal di akhir").
2. Memastikan data UI, session, DB, dan callback konsisten di setiap hop.
3. Menjaga integritas stok, accounting, dan audit trail.

## Prinsip Trace
Gunakan token yang sama dari awal sampai akhir:
1. `estimate_id`
2. `referensi_id`
3. `bridge_id` (jika ada)
4. `so_nomer` (subsidiary)
5. `po_nomer` (subsidiary -> holding)
6. `holding_so_nomer`
7. `variant_id` / `cart_key`

## Cara Pakai (Wajib)
1. Pilih satu transaksi uji (jangan campur dengan transaksi lain).
2. Isi token di tabel "Worksheet Trace".
3. Jalankan step berurutan P00 -> P10.
4. Setiap step harus lulus sebelum lanjut step berikutnya.
5. Jika gagal, catat di kolom "Putus di titik".

## Template Excel/CSV
1. File siap isi:
- `application/UAT_POINT_TO_POINT_TRACE_TEMPLATE.csv`
2. Cara pakai cepat:
- buka file CSV di Excel,
- filter kolom `status`,
- isi `actual_result`, `root_cause`, `next_action`, `evidence_link`.

## Worksheet Trace (Isi sebelum mulai)
1. `estimate_id`:
2. `referensi_id`:
3. `bridge_id`:
4. `so_nomer`:
5. `po_nomer`:
6. `holding_so_nomer`:
7. `produk_id`:
8. `variant_id/cart_key`:

## Matrix Point-to-Point

### P00 - CRM menulis order bridge
1. Trigger:
- CRM approve estimate.
2. Expected:
- Data order bridge CRM terbentuk untuk `estimate_id`.
3. Verifikasi:
- Cek tabel bridge order di CRM untuk `estimate_id` dan item count > 0.
4. Putus di titik:
- Tidak ada row bridge -> masalah di generator order CRM.

### P01 - Webhook CRM ke Subsidiary/Holding
1. Trigger:
- Setelah P00 sukses.
2. Expected:
- Endpoint target menerima payload `estimate_id` dan `referensi_id`.
3. Verifikasi:
- Cek log API receiver + response HTTP (2xx).
4. Putus di titik:
- HTTP != 2xx / timeout -> masalah jaringan, auth, endpoint, atau payload mandatory kurang.

### P02 - Subsidiary menerima order CRM (bridge intake)
1. Trigger:
- Endpoint receive_order hit.
2. Expected:
- Tabel `penjualan_transaksi_data_crm_bridge` berisi master/detail item untuk `estimate_id/referensi_id`.
3. Verifikasi SQL:
```sql
SELECT id, estimate_id, referensi_id, status, trash
FROM penjualan_transaksi_data_crm_bridge
WHERE estimate_id = ? OR referensi_id = ?
ORDER BY id DESC;
```
4. Putus di titik:
- Row tidak terbentuk -> intake API tidak commit atau gagal validasi.

### P03 - Preview CRM di Subsidiary
1. Trigger:
- Buka `Create/previewCrm/{user}/{estimate_id}`.
2. Expected:
- Item tampil sesuai bridge, status customer/pengiriman terbaca.
3. Verifikasi:
- UI tabel item dan ringkasan total muncul.
4. Putus di titik:
- UI kosong padahal P02 ada data -> mapping query/view preview bermasalah.

### P04 - Gate varian (legacy dan non-legacy)
1. Trigger:
- Klik picker varian bila item perlu varian.
2. Expected:
- Total qty split varian = qty item CRM.
- `variant_id/cart_key` tersimpan.
3. Verifikasi SQL:
```sql
SELECT id, estimate_id, produk_id, qty, variant_id, cart_key
FROM penjualan_transaksi_data_crm_bridge
WHERE estimate_id = ?
ORDER BY id ASC;
```
4. Putus di titik:
- Qty split tidak balance / variant tidak tersimpan -> masalah validator save split varian.

### P05 - To Shopping Cart + Session
1. Trigger:
- Klik `To Shopping Cart`.
2. Expected:
- Session cart terbentuk, `pihakMainExec` dan `cabang_pengiriman` terset.
3. Verifikasi:
- Cek halaman cart: item masuk benar, qty/uom/harga benar.
4. Putus di titik:
- Swal "Harap pilih cabang pengiriman" padahal sudah pilih -> mapping session pengiriman tidak terset.

### P06 - Save Sales Subsidiary
1. Trigger:
- Save transaksi penjualan.
2. Expected:
- Header/detail transaksi penjualan terbentuk + trace ke referensi bridge.
3. Verifikasi SQL:
```sql
SELECT id, nomer, referensi_id, status, trash
FROM penjualan_transaksi
WHERE nomer = ? OR referensi_id = ?
ORDER BY id DESC;
```
4. Putus di titik:
- Save gagal auth/locker/stock -> cek processor chain dan data otorisasi session.

### P07 - Bridge Subsidiary untuk auto PO ke Holding
1. Trigger:
- Save/followup untuk tujuan `SAN`.
2. Expected:
- Row bridge master/detail terbentuk siap diproses CLI.
3. Verifikasi SQL:
```sql
SELECT id, referensi_id, referensi_pengiriman, cli, status
FROM penjualan_transaksi_data_bridge_master
WHERE referensi_id = ?
ORDER BY id DESC;
```
4. Putus di titik:
- `referensi_pengiriman=0` atau row tidak ada -> auto PO tidak akan jalan.

### P08 - CLI Subsidiary publish bridge ke Holding
1. Trigger:
- Jalankan scheduler CLI.
2. Expected:
- Flag `cli` berubah `0 -> 1` bila publish sukses.
3. Verifikasi SQL:
```sql
SELECT id, referensi_id, cli, status, dtime_auto
FROM penjualan_transaksi_data_bridge_master
WHERE referensi_id = ?
ORDER BY id DESC;
```
4. Putus di titik:
- `cli` tetap 0 -> worker tidak jalan, response API gagal, atau payload ditolak.

### P09 - Holding intake dan bentuk SO
1. Trigger:
- Setelah P08 publish sukses.
2. Expected:
- Data masuk tabel bridge holding lalu terbentuk SO holding.
3. Verifikasi:
- Cek tabel bridge holding (`reseler_master_bridge` dkk) dan nomor SO holding.
4. Putus di titik:
- Bridge ada tapi SO tidak terbentuk -> scheduler holding atau mapping dedicated subsidiari bermasalah.

### P10 - Callback status balik ke Subsidiary
1. Trigger:
- Setelah SO holding berubah status (processed/approved/cancelled).
2. Expected:
- Endpoint callback subsidiary menerima event dan update status bridge.
3. Verifikasi:
- Cek log callback + status final di tabel bridge subsidiary.
4. Putus di titik:
- Callback orphan / referensi_id tidak ketemu -> mapping token lintas sistem tidak konsisten.

## Rule Isolasi Root Cause (Cepat)
1. Jika P00-P01 gagal: fokus CRM + network webhook.
2. Jika P02-P05 gagal: fokus Subsidiary intake, preview, session, picker varian.
3. Jika P07-P08 gagal: fokus bridge builder dan scheduler CLI subsidiary.
4. Jika P09 gagal: fokus scheduler dedicated di holding.
5. Jika P10 gagal: fokus endpoint callback dan mapping `referensi_id`.

## Checklist Lulus Satu Skenario
1. Semua P00..P10 lulus.
2. `variant_id/cart_key` konsisten dari preview -> cart -> transaksi -> bridge.
3. Tidak ada SQL error, notice, warning di proses utama.
4. Data UI preview, DB detail, dan hasil print/resume konsisten.
