# 📘 DOKUMEN HANDOVER & RESUME REFAKTORISASI ERP EVEREST (MODUL PENJUALAN)

Dokumen ini memuat seluruh ringkasan teknis, arsitektur *Domain Service*, status efisiensi kode, catatan investigasi anomali UAT, dan panduan langkah lanjutan untuk mempermudah kelanjutan sesi refaktorisasi.

---

## 📊 1. Ringkasan Status Efisiensi Controller & Model

| Berkas Program | Ukuran Monolit Awal | Ukuran Terkini | Total Baris Tereliminasi | Efisiensi Reduksi | Status Sintaks (Tokenizer) |
| :--- | :---: | :---: | :---: | :---: | :---: |
| [Create.php](file:///z:/everest_refaktor/application/modules/penjualan/controllers/Create.php) | 16.000+ baris | **699 baris** | **-15.301 baris** | **95,6% Terpangkas** 🚀 | **Brace: 0 \| Error: 0** ✅ |
| [FollowUp.php](file:///z:/everest_refaktor/application/modules/penjualan/controllers/FollowUp.php) | 24.000+ baris | **1.526 baris** | **-22.474 baris** | **93,6% Terpangkas** 🚀 | **Brace: 0 \| Error: 0** ✅ |
| [Transaksi.php](file:///z:/everest_refaktor/application/modules/penjualan/controllers/Transaksi.php) | 14.993 baris | **2.538 baris** | **-12.454 baris** | **83,1% Terpangkas** 🚀 | **Brace: 0 \| Error: 0** ✅ |
| **TOTAL KESELURUHAN** | **54.993+ baris** | **4.763 baris** | **-50.230 baris** | **91,3% Reduksi Total** | **19 Unit Lolos Audit** ✅ |

---

## 🏛️ 2. Peta Domain Services & Universal Pipeline Engines (`application/models/Coms/`)

1. **[ComStockEngine.php](file:///z:/everest_refaktor/application/models/Coms/ComStockEngine.php)**:
   - Core mutasi stok, validasi FIFO/Average, multi-warehouse locker.
2. **[ComPricingEngine.php](file:///z:/everest_refaktor/application/models/Coms/ComPricingEngine.php)**:
   - Kalkulasi harga, diskon bertingkat, PPN/Non-PPN, pembulatan desimal, dan total kalkulasi keranjang.
3. **[ComTransactionPipelineEngine.php](file:///z:/everest_refaktor/application/models/Coms/ComTransactionPipelineEngine.php)**:
   - Orkestrator pembuatan transaksi penjualan, registri data, pre/post processor, dan pembukuan jurnal ACID.
4. **[ComSalesOrderService.php](file:///z:/everest_refaktor/application/models/Coms/ComSalesOrderService.php)**:
   - Layanan perakitan ViewModel formulir pembuatan (`assembleSalesOrderCreateData`), pratinjau (`assembleSalesOrderPreviewData`), edit pratinjau (`assembleSalesOrderEditPreviewData`), pipeline update penjualan (`editSalesOrder`), selector radio pihak/tipe penjualan, dan konversi paket reguler.
5. **[ComSalesOrderFollowupService.php](file:///z:/everest_refaktor/application/models/Coms/ComSalesOrderFollowupService.php)**:
   - Layanan perakitan ViewModel formulir follow-up (`assembleFollowupFormData`), pratinjau pemindai barcode mobile (`assembleFollowupPreviewMobileData`), eksekusi alur follow-up (`executeFollowupPrePreview`, `assembleFollowupPreviewData`, `executeFollowupPrePreviewAuto`), pratinjau pembatalan packing (`assembleFollowupCancelPackingPreviewData`), inisialisasi form edit (`executeDoPreEdit`, `assembleEditFormData`), shopping cart mobile, scanner barcode/serial, dan penugasan worker/pengirim.
6. **[ComTransactionResumeEngine.php](file:///z:/everest_refaktor/application/models/Coms/ComTransactionResumeEngine.php)**:
   - Universal resume engine untuk pelacakan status transaksi lintas modul.
7. **[ComTransactionReversalEngine.php](file:///z:/everest_refaktor/application/models/Coms/ComTransactionReversalEngine.php)**:
   - Engine pembalik/reversal transaksi (storno & pembatalan langkah) yang aman audit.
8. **[ComTransactionUndoneEngine.php](file:///z:/everest_refaktor/application/models/Coms/ComTransactionUndoneEngine.php)**:
   - Layanan monitoring transaksi tertunda (*undone/incomplete steps*) antar cabang.
9. **[ComTransactionPaymentSourceEngine.php](file:///z:/everest_refaktor/application/models/Coms/ComTransactionPaymentSourceEngine.php)**:
   - Penanganan payment source internal & eksternal.
10. **[ComSalesOrderValidationService.php](file:///z:/everest_refaktor/application/models/Coms/ComSalesOrderValidationService.php)**:
    - Validasi limit kredit, payment locker, dan integritas data order.
11. **[ComAutoAuthorizationService.php](file:///z:/everest_refaktor/application/models/Coms/ComAutoAuthorizationService.php)**:
    - Penanganan otorisasi otomatis antar-langkah (auto approval).

---

## 🔍 3. Catatan Investigasi & Resolusi Anomali UAT (Sesi 19)

### A. Anomali Header Transaksi & Konsumen Hilang di Follow-up:
*   **Root Cause**: Key layout header dipanggil sebagai `receiptMasterFields` alih-alih **`receiptMainFields`** (sesuai `heTransaksi_layout.php`), sehingga `$mainLabels` kosong dan header tidak dirender.
*   **Solusi**: Menerapkan hirarki fallback cerdas (`receiptMainFields[$targetStepNum] -> receiptMainFields -> receiptMasterFields`) dan melakukan enrichment `$mainObj` dari baris tabel database `$tmpTr[0]`.

### B. Anomali Kolom Elemen Dinamis Hilang di Follow-up:
*   **Root Cause**: Key `receiptElements` belum diproses dengan traversal `relativeElements` & `relativeOptions` dari sesi `main_elements`.
*   **Solusi**: Menerapkan loop resolusi lengkap ke `$elementConfig` dan menyertakan `$appletConfig`.

### C. Anomali Numfield (Harga, Diskon, Subtotal) Hilang di Rincian Produk:
*   **Root Cause**: Tabel rincian produk pada [views/transaksi.php:4756-4876](file:///z:/everest_refaktor/application/modules/penjualan/views/transaksi.php#L4756-L4786) mengiterasi kolom hanya dari `$itemLabels`. Konfigurasi numfield dari **`shoppingCartNumFields`**, **`receipCartNumFields`**, **`receiptCartNumFields`**, dan kolom kalkulasi **`subtotal`** belum digabung ke `$itemLabels`.
*   **Solusi**: Menyatukan dan menggabungkan numfield ke dalam `$itemLabels` dan `$itemLabels2` di `ComSalesOrderFollowupService::assembleFollowupPreviewData()`.

### D. Anomali Auto-Otorisasi & Penomoran Dokumen (Sesi 22):
*   **Fatal Error `trans_depth()`**: Driver database CI3 tidak memiliki method `trans_depth()`. Diganti dengan pengecekan native property `$this->db->_trans_depth > 0`.
*   **Duplicate Entry `no_transaksi`**: Pada `ComAutoAuthorizationService`, state `$payload['main']['stepCode']` dan `$payload['main']['stepNumber']` diinisialisasi sebelum pemanggilan `$this->generateCounters()` sehingga nomor transaksi baru (`5822spd.1.23.1`) terbit secara unik sesuai urutan sekuensial legacy aslinya. Status: **UAT Berhasil 100%**.

### E. Anomali Phantom Item HPP / Array Key Mismatch (Sesi 23):
*   **Root Cause**: Di legacy Everest, array `items` dan `rsltItems` selalu dikunci dengan `$produk_id` (numeric key). Penggunaan `array_merge` pada hidrasi registry dan index integer `0` pada DTO menyebabkan `PreFifoAverage` menyisipkan hasil kalkulasi HPP ke index baru `$produk_id` (tercipta 2 baris item: 1 produk tanpa HPP, 1 baris HPP tanpa identitas produk/cabang).
*   **Solusi**: 
    1. Mengganti `array_merge` dengan array union operator `+` pada `ComAutoAuthorizationService`.
    2. Menambahkan normalisasi index array `items` dan `rsltItems` agar selalu dikunci dengan `$produk_id` di `ComSalesOrderFollowupService`.
    3. Menerapkan *smart target key resolution* pada merger `$gotParams` di `executeFollowupPreProcessors` dan `ComTransactionPipelineEngine` sehingga nilai HPP langsung terinjeksi ke baris produk terkait.

### F. Standarisasi Value Builder Tanpa Sesi (`fillValues_he_value_builder_ns`):
*   **Root Cause**: Pemanggilan `fillValues_he_value_builder` (versi sesi) di dalam *Domain Service* hanya memanipulasi `$_SESSION` global sehingga variabel `$transactionPayload` (DTO) di dalam memori tidak pernah ter-update. Selain itu, fungsi `fillValues_he_value_builder_ns` lama belum memuat beberapa fitur mutakhir dari `fillValues_he_value_builder` (seperti kalkulasi gerbang `detail4_sum`, `pairModelKeyReplacer`, `targetValueReplacer`, `pairMakersProject`, `pairInjectorsProject`, penanganan diskon pembulatan transaksi kas, dan `rebuilderCoreDetail`).
*   **Solusi**: 
    1. Melakukan **Full Parity Sync** pada [he_value_builder_helper.php](file:///z:/everest_refaktor/application/helpers/he_value_builder_helper.php) sehingga `fillValues_he_value_builder_ns` menjadi cerminan 100% dari versi `fillValues_he_value_builder` legacy terlengkap secara murni *stateless* (menerima dan mengembalikan `$sessionData`).
    2. Menstandarisasi seluruh pemanggilan kalkulasi gerbang nilai di [ComSalesOrderFollowupService.php](file:///z:/everest_refaktor/application/models/Coms/ComSalesOrderFollowupService.php) dan [ComAutoAuthorizationService.php](file:///z:/everest_refaktor/application/models/Coms/ComAutoAuthorizationService.php) ke **`fillValues_he_value_builder_ns`**. Status sintaks: **Brace: 0 | Error: 0** pada seluruh unit.


### G. Standardisasi Kontrak Konfigurasi Modul & Paritas AS-IS Post-Processor (Sesi 24):
*   **Dualisme Kontrak Konfigurasi**:
    *   *Problem*: `Create.php` memotong-motong konfigurasi secara lokal (`steps`, `components`, `preProcessor`, `postProcessor`), sedangkan `FollowUp.php` mengirim modul raw dump. Di `ComSalesOrderFollowupService::postFinancialLedgerAndPaymentSources`, pemanggilan `$customConfig['postProcessor'][$stepCodeTarget]` menghasilkan array kosong karena key tersebut berada di dalam `$customConfig['configCore'][$jenisTr]`.
    *   *Solusi*: 
        1. Menstandarisasi **Thin Controller** (`Create.php` & `FollowUp.php`) untuk mengirimkan paket modul utuh (`configCore`, `configUi`, `configLayout`, `configValues`, `payment_source`, `validators`) tanpa membocorkan logika step ke controller.
        2. Menstandarisasi **Domain Service** (`ComSalesOrderService` & `ComSalesOrderFollowupService`) sebagai *Orchestrator* yang mengekstrak `$configCoreMaster` khusus `$jenisTr` dan membagi (*slicing*) potongan step target sebelum diteruskan ke pipeline engine.
*   **Pemulihan Paritas AS-IS Post-Processor (`ComTransactionPipelineEngine`)**:
    *   *Pemisahan Detail vs Sub-Detail*: Loop flat 1-dimensi untuk `detail`, dan loop multidimensional 2-dimensi (`foreach ... foreach`) untuk `sub_detail` sehingga `makeValue` menerima data baris sub-item yang valid.
    *   *Dukungan Blok `static2`*: Menambahkan pemrosesan blok `static2` pada komponen `master` (seperti `TransaksiStepUpdater`) untuk memperbarui status substep rujukan.
    *   *Pembersihan Debug Breakpoint*: Menghapus `matiHere` di baris 832 dan `cekLime`. Status sintaks: **Brace: 0 | Error: 0**.

---

## 🎯 4. Rencana Langkah Lanjutan (Next Action Plan)

Saat sesi refaktorisasi dilanjutkan kembali, fokus pengerjaan berikutnya adalah:

1. **Uji Transaksi Follow-Up End-to-End**:
   - Memastikan seluruh post-processor di step `582spd` / `5822spd` (`Signature`, `TransaksiStepUpdater`, `PaymentSourceReference`, `TransaksiStatus`) berjalan sempurna.
2. **Desain Posting Jurnal Otomatis HPP Persediaan Moving Average (5822spd)**:
   - Pemetaan akun Debit HPP Penjualan dan Kredit Persediaan Barang Dagang berdasarkan nilai rata-rata bergerak saat penyerahan fisik barang.
3. **Kesiapan Porting Domain ke Laravel DDD**:
   - Pemetaan *Domain Service* `application/models/Coms/` ke *Actions*, *Entities*, dan *Aggregates* Laravel.

---

## 🛠️ 5. Perintah Validasi Cepat

Untuk memverifikasi sintaks seluruh berkas sebelum dan sesudah modifikasi:
```powershell
powershell -ExecutionPolicy Bypass -File "C:\Users\widi\.gemini\antigravity-ide\brain\38b779e0-2548-4081-b397-4f0b2bcd6118\scratch\tokenizer_audit.ps1"
```
Semua unit **wajib** menghasilkan `Final Brace: 0 | Errors: 0`.
