# Flowchart Jaringan Keterhubungan Modul ERP SAN5

> **Sumber Data**: [`heTransaksi_ui.php`](../application/config/heTransaksi_ui.php) — Alur dokumen (source → target)
> **Dibuat**: 18 Mei 2026
> **Tahap**: 1, 2 & 3 — Alur Dokumen + Relasi Database + Model Dependencies

---

## Daftar Modul Aktif (Berdasarkan `heTransaksi_ui.php`)

| # | Modul | Kode Transaksi | Label | Place |
|---|-------|---------------|-------|-------|
| 1 | `pembelian` | 466 | FG Purchasing | center |
| 2 | `pembelianjasa` | 463 | Service Purchasing | center |
| 3 | `distribusi` | 583 | FG Distribution | center |
| 4 | `distribusi` | 585 | FG Stock Reception | branch |
| 5 | `penjualan` | 5822 | Sales Support Mode | branch |
| 6 | `pembayaran` | 489 | FG A/P Payment | center |
| 7 | `pembayaran` | 462 | Service A/P Payment | center |
| 8 | `pembayaran` | 477 | Expense Payment (Biaya Usaha Cabang) | center |
| 9 | `pembayaran` | 1483 | PPh 21 A/P Payment | center |
| 10 | `pembayaran` | 1485 | Hutang Gaji A/P Payment | center |
| 11 | `pembayaran` | 1487 | BPJS A/P Payment | center |
| 12 | `penerimaan` | 749 | A/R Receipt | branch |
| 13 | `kas` | 1757 | Cash Balance Interchange (Pusat) | center |
| 14 | `biaya` | 677 | Biaya Usaha (Cabang) | branch |
| 15 | `biaya` | 2677 | Otorisasi Biaya Usaha (Cabang) | center |
| 16 | `biaya` | 1674 | Salary Expense (Branch) | center |
| 17 | `biaya` | 2674 | Salary Expense (Pusat) | center |
| 18 | `taxes` | 111 | Realisasi PPN Masukan | center |
| 19 | `taxes` | 110 | E-Faktur PPN Keluaran | center |
| 20 | `taxes` | 5683 | PPh 29 | center |
| 21 | `taxes` | 117 | PPh 25 | center |
| 22 | `taxes` | 118 | PPh Pasal 4(2) | center |
| 23 | `taxes` | 116 | Bukti Bayar PPh 23 | center |

---

## Flowchart Mermaid.js

```mermaid
flowchart TB
    %% ========================
    %% STYLE DEFINITIONS
    %% ========================
    classDef pembelian fill:#e1f5fe,stroke:#0288d1,color:#01579b
    classDef pembelianjasa fill:#e1f5fe,stroke:#0288d1,color:#01579b
    classDef distribusi fill:#fff3e0,stroke:#f57c00,color:#e65100
    classDef penjualan fill:#e8f5e9,stroke:#388e3c,color:#1b5e20
    classDef pembayaran fill:#fce4ec,stroke:#c62828,color:#b71c1c
    classDef penerimaan fill:#fce4ec,stroke:#c62828,color:#b71c1c
    classDef kas fill:#f3e5f5,stroke:#7b1fa2,color:#4a148c
    classDef biaya fill:#fff8e1,stroke:#f9a825,color:#f57f17
    classDef taxes fill:#e0f2f1,stroke:#00695c,color:#004d40
    classDef state fill:#f5f5f5,stroke:#9e9e9e,color:#616161,stroke-dasharray: 5 5

    %% ========================
    %% MODUL: PEMBELIAN (466)
    %% ========================
    subgraph PEMBELIAN["🛒 Pembelian (466)"]
        direction TB
        P1["466r<br/>PRE PO<br/>(Pending Approval)"]:::state
        P2["466<br/>PO<br/>(Purchased)"]:::state
        P3["467r<br/>PRE GRN"]:::state
        P4["467<br/>GRN<br/>(Goods Received)"]:::state
    end
    class PEMBELIAN pembelian

    "" -->|"Step 1: Make PO"| P1
    P1 -->|"Step 2: Approve"| P2
    P2 -->|"Step 3: Receive & PRE GRN"| P3
    P3 -->|"Step 4: GRN"| P4

    %% ========================
    %% MODUL: PEMBELIANJASA (463)
    %% ========================
    subgraph PEMBELIANJASA["🔧 Service Purchasing (463)"]
        direction TB
        SJ1["463ro<br/>PRE PO<br/>(Pending Approval)"]:::state
        SJ2["463o<br/>PO<br/>(Purchased)"]:::state
        SJ3["463<br/>SRN<br/>(Service Received)"]:::state
    end
    class PEMBELIANJASA pembelianjasa

    "" -->|"Step 1: Make PO"| SJ1
    SJ1 -->|"Step 2: Approve"| SJ2
    SJ2 -->|"Step 3: Service Receipt"| SJ3
    SJ3 -->|"Step 4: Realisasi PPN"| TAX_113["113<br/>(PPN Masukan)"]:::state

    %% ========================
    %% MODUL: DISTRIBUSI (583)
    %% ========================
    subgraph DISTRIBUSI_KELUAR["🚚 FG Distribution (583)"]
        direction TB
        D1["583r<br/>Request<br/>(Pending Approval)"]:::state
        D2["583sc<br/>Scan QR/Barcode"]:::state
        D3["583<br/>Authorized"]:::state
    end
    class DISTRIBUSI_KELUAR distribusi

    "" -->|"Step 1: Request"| D1
    D1 -->|"Step 2: Scan"| D2
    D2 -->|"Step 3: Authorize"| D3

    %% ========================
    %% MODUL: DISTRIBUSI (585) - Penerimaan
    %% ========================
    subgraph DISTRIBUSI_MASUK["🚢 FG Stock Reception (585)"]
        direction TB
        DR1["585r<br/>Init Reception"]:::state
        DR2["585<br/>Stock Received"]:::state
    end
    class DISTRIBUSI_MASUK distribusi

    "" -->|"Step 1: Init"| DR1
    DR1 -->|"Step 2: Receive"| DR2

    %% Hubungan Distribusi → Penerimaan
    D3 -.->|"Barang dikirim<br/>(trigger 585)"| DR1

    %% ========================
    %% MODUL: PENJUALAN (5822)
    %% ========================
    subgraph PENJUALAN["🛍️ Sales Support Mode (5822)"]
        direction TB
        S1["5822spo<br/>Sales Pre-Order"]:::state
        S2["5822so<br/>Sales Order<br/>(Approved)"]:::state
        S3["5822pkd<br/>Packed"]:::state
        S4["5822spd<br/>Shipped"]:::state
        S5["582<br/>Invoice"]:::state
    end
    class PENJUALAN penjualan

    "" -->|"Step 1: Make Order"| S1
    S1 -->|"Step 2: Approve"| S2
    S2 -->|"Step 3: Pack"| S3
    S3 -->|"Step 4: Ship"| S4
    S4 -->|"Step 5: Create Invoice"| S5

    %% ========================
    %% MODUL: PEMBAYARAN (AP)
    %% ========================
    subgraph PEMBAYARAN_AP["💰 A/P Payment"]
        direction TB
        AP1["489<br/>FG A/P Payment"]:::state
        AP2["462<br/>Service A/P Payment"]:::state
    end
    class PEMBAYARAN_AP pembayaran

    "" -->|"Pay FG Supplier"| AP1
    "" -->|"Pay Service Vendor"| AP2

    %% Hubungan Pembelian → Pembayaran AP
    P4 -.->|"Hutang dibayar"| AP1
    SJ3 -.->|"Hutang dibayar"| AP2

    %% ========================
    %% MODUL: PENERIMAAN (AR)
    %% ========================
    subgraph PENERIMAAN["💵 A/R Receipt (749)"]
        direction TB
        AR1["749<br/>A/R Receipt"]:::state
    end
    class PENERIMAAN penerimaan

    "" -->|"Receive Payment"| AR1

    %% Hubungan Penjualan → Penerimaan
    S5 -.->|"Piutang dibayar"| AR1

    %% ========================
    %% MODUL: KAS (1757)
    %% ========================
    subgraph KAS["💳 Cash Balance Interchange (1757)"]
        direction TB
        K1["1757r<br/>Request"]:::state
        K2["1757<br/>Approved"]:::state
    end
    class KAS kas

    "" -->|"Step 1: Request"| K1
    K1 -->|"Step 2: Approve"| K2

    %% ========================
    %% MODUL: BIAYA
    %% ========================
    subgraph BIAYA_CABANG["📋 Biaya Usaha Cabang (677)"]
        direction TB
        B1["677r<br/>Request"]:::state
    end
    class BIAYA_CABANG biaya

    subgraph BIAYA_OTORISASI["📋 Otorisasi Biaya Usaha (2677)"]
        direction TB
        B2["2677r<br/>Request"]:::state
        B3["2677<br/>Approved"]:::state
    end
    class BIAYA_OTORISASI biaya

    subgraph BIAYA_GAJI_BRANCH["📋 Salary Expense Branch (1674)"]
        direction TB
        G1["1674r<br/>Request"]:::state
        G2["1674<br/>Approved"]:::state
    end
    class BIAYA_GAJI_BRANCH biaya

    subgraph BIAYA_GAJI_PUSAT["📋 Salary Expense Pusat (2674)"]
        direction TB
        G3["2674r<br/>Request"]:::state
        G4["2674<br/>Approved"]:::state
    end
    class BIAYA_GAJI_PUSAT biaya

    "" -->|"Request Biaya"| B1
    "" -->|"Request Otorisasi"| B2
    B2 -->|"Approve"| B3
    "" -->|"Request Gaji Branch"| G1
    G1 -->|"Approve"| G2
    "" -->|"Request Gaji Pusat"| G3
    G3 -->|"Approve"| G4

    %% ========================
    %% MODUL: PEMBAYARAN (Expense)
    %% ========================
    subgraph PEMBAYARAN_EXPENSE["💸 Expense Payments"]
        direction TB
        EP1["477<br/>Expense Payment<br/>(Biaya Usaha Cabang)"]:::state
        EP2["1483<br/>PPh 21 Payment"]:::state
        EP3["1485<br/>Hutang Gaji Payment"]:::state
        EP4["1487<br/>BPJS Payment"]:::state
    end
    class PEMBAYARAN_EXPENSE pembayaran

    "" -->|"Pay Biaya Usaha"| EP1
    "" -->|"Pay PPh 21"| EP2
    "" -->|"Pay Gaji"| EP3
    "" -->|"Pay BPJS"| EP4

    %% Hubungan Biaya → Pembayaran
    B1 -.->|"Biaya dibayar"| EP1
    B3 -.->|"Biaya diotorisasi & dibayar"| EP1
    G2 -.->|"Gaji dibayar"| EP3
    G4 -.->|"Gaji dibayar"| EP3

    %% ========================
    %% MODUL: TAXES
    %% ========================
    subgraph TAXES["🧾 Tax Management"]
        direction TB
        T1["111r<br/>Prepare PPN Masukan"]:::state
        T2["111<br/>Realisasi PPN Masukan"]:::state
        T3["110r<br/>Prepare E-Faktur"]:::state
        T4["110e<br/>Entry E-Faktur"]:::state
        T5["110<br/>Approve E-Faktur"]:::state
        T6["5683r<br/>Request PPh 29"]:::state
        T7["5683<br/>Approve PPh 29"]:::state
        T8["117r<br/>Request PPh 25"]:::state
        T9["117<br/>Approve PPh 25"]:::state
        T10["118r<br/>Request PPh 4(2)"]:::state
        T11["118<br/>Approve PPh 4(2)"]:::state
        T12["116r<br/>Entry PPh 23"]:::state
        T13["116<br/>Approve PPh 23"]:::state
    end
    class TAXES taxes

    "" -->|"Prepare"| T1
    T1 -->|"Realisasi"| T2
    "" -->|"Prepare"| T3
    T3 -->|"Entry"| T4
    T4 -->|"Approve"| T5
    "" -->|"Request"| T6
    T6 -->|"Approve"| T7
    "" -->|"Request"| T8
    T8 -->|"Approve"| T9
    "" -->|"Request"| T10
    T10 -->|"Approve"| T11
    "" -->|"Entry"| T12
    T12 -->|"Approve"| T13

    %% Hubungan cross-module PPN
    P4 -.->|"PPN Masukan (commented)"| T1
    SJ3 ==>|"PPN Masukan (active)"| TAX_113

    %% ========================
    %% CROSS-MODULE CONNECTIONS (Payment Links)
    %% ========================
    EP2 -.->|"PPh 21 dibayar"| TAXES
    EP4 -.->|"BPJS dibayar"| TAXES

    %% ========================
    %% LEGEND
    %% ========================
    subgraph LEGEND["📖 Legend"]
        L1["🛒 Pembelian"]:::pembelian
        L2["🔧 Pembelian Jasa"]:::pembelianjasa
        L3["🚚 Distribusi"]:::distribusi
        L4["🛍️ Penjualan"]:::penjualan
        L5["💰 Pembayaran (AP)"]:::pembayaran
        L6["💵 Penerimaan (AR)"]:::penerimaan
        L7["💳 Kas"]:::kas
        L8["📋 Biaya"]:::biaya
        L9["🧾 Pajak"]:::taxes
        L10["⚪ State/Document"]:::state
    end
```

---

## Ringkasan Alur Dokumen per Modul

### 1. Pembelian (`pembelian`) — Kode: 466
| Step | Label | Source → Target | Deskripsi |
|------|-------|----------------|-----------|
| 1 | PRE PURCHASE ORDER | `""` → `"466r"` | Membuat PO (Pending Approval) |
| 2 | PURCHASE ORDER | `"466r"` → `"466"` | Otorisasi PO |
| 3 | PRE GOODS RECEIVED NOTE | `"466"` → `"467r"` | Terima barang (PRE GRN) |
| 4 | GOODS RECEIVED NOTE | `"466"` → `"467"` | GRN final (allowJoin=true) |
| ~~5~~ | ~~Realisasi PPN Masukan~~ | ~~`"467"` → `"111"`~~ | ~~(COMMENTED)~~ |

> **Catatan**: Step 5 (PPN Masukan) dikomentari. PPN Masukan sekarang jadi satu dengan A/P Payment.

### 2. Pembelian Jasa (`pembelianjasa`) — Kode: 463
| Step | Label | Source → Target | Deskripsi |
|------|-------|----------------|-----------|
| 1 | PURCHASE PRE ORDER | `""` → `"463ro"` | Membuat PO Jasa |
| 2 | PURCHASE ORDER | `"463ro"` → `"463o"` | Otorisasi PO |
| 3 | SERVICE RECEIVED NOTE | `"463o"` → `"463"` | Terima jasa |
| 4 | **Realisasi PPN Masukan** | `"463"` → `"113"` | **Cross-module ke Taxes** |

> **Catatan**: Step 4 aktif — PPN Masukan langsung direalisasikan ke kode `113` (taxes).

### 3. Distribusi (`distribusi`) — Kode: 583
| Step | Label | Source → Target | Deskripsi |
|------|-------|----------------|-----------|
| 1 | FG DISTRIBUTION REQUEST | `""` → `"583r"` | Request distribusi |
| 2 | SCAN QR/BARCODE | `"583r"` → `"583sc"` | Scan barang |
| 3 | DISTRIBUTION AUTHORIZATION | `"583sc"` → `"583"` | Otorisasi pengiriman |

### 4. Penerimaan Distribusi (`distribusi`) — Kode: 585
| Step | Label | Source → Target | Deskripsi |
|------|-------|----------------|-----------|
| 1 | STOCK INITIATION | `""` → `"585r"` | Inisiasi penerimaan |
| 2 | STOCK RECEPTION | `"585r"` → `"585"` | Terima stok di cabang |

> **Hubungan**: Distribusi (583) → Penerimaan Distribusi (585) — barang dikirim dari pusat, diterima cabang.

### 5. Penjualan (`penjualan`) — Kode: 5822
| Step | Label | Source → Target | Deskripsi |
|------|-------|----------------|-----------|
| 1 | SALES | `""` → `"5822spo"` | Sales Pre-Order |
| 2 | SALES (otorisasi diskon) | `"5822spo"` → `"5822so"` | Otorisasi |
| 3 | PRE PACKING | `"5822so"` → `"5822pkd"` | Packing (cek paymentSrc) |
| 4 | PACKING LIST | `"5822pkd"` → `"5822spd"` | Shipment |
| 5 | INVOICE | `"5822spd"` → `"582"` | Buat invoice (allowJoin=true) |

> **Catatan**: Step 3 memiliki `paymentSrc` — mengecek pembayaran uang muka sebelum packing.

### 6. Pembayaran AP (`pembayaran`)
| Kode | Label | Flow | Deskripsi |
|------|-------|------|-----------|
| 489 | FG A/P Payment | `""` → `"489"` | Bayar hutang supplier FG |
| 462 | Service A/P Payment | `""` → `"462"` | Bayar hutang vendor jasa |

### 7. Penerimaan AR (`penerimaan`) — Kode: 749
| Step | Label | Source → Target | Deskripsi |
|------|-------|----------------|-----------|
| 1 | A/R RECEIPT | `""` → `"749"` | Terima pembayaran konsumen |

### 8. Kas (`kas`) — Kode: 1757
| Step | Label | Source → Target | Deskripsi |
|------|-------|----------------|-----------|
| 1 | REQUEST BALANCE INTERCHANGE | `""` → `"1757r"` | Request pemindahan kas |
| 2 | OTORISASI | `"1757r"` → `"1757"` | Approve pemindahan |

### 9. Biaya (`biaya`)
| Kode | Label | Flow | Deskripsi |
|------|-------|------|-----------|
| 677 | Biaya Usaha Cabang | `""` → `"677r"` | Request biaya (tanpa otorisasi) |
| 2677 | Otorisasi Biaya Usaha | `""` → `"2677r"` → `"2677"` | Request → Approve |
| 1674 | Salary Expense Branch | `""` → `"1674r"` → `"1674"` | Request → Approve |
| 2674 | Salary Expense Pusat | `""` → `"2674r"` → `"2674"` | Request → Approve |

### 10. Pembayaran Expense (`pembayaran`)
| Kode | Label | Flow | Deskripsi |
|------|-------|------|-----------|
| 477 | Expense Payment (Biaya Usaha) | `""` → `"477"` | Bayar biaya usaha cabang |
| 1483 | PPh 21 A/P Payment | `""` → `"1483"` | Bayar PPh 21 |
| 1485 | Hutang Gaji A/P Payment | `""` → `"1485"` | Bayar gaji |
| 1487 | BPJS A/P Payment | `""` → `"1487"` | Bayar BPJS |

### 11. Pajak (`taxes`)
| Kode | Label | Flow | Deskripsi |
|------|-------|------|-----------|
| 111 | Realisasi PPN Masukan | `""` → `"111r"` → `"111"` | Prepare → Realisasi |
| 110 | E-Faktur PPN Keluaran | `""` → `"110r"` → `"110e"` → `"110"` | Prepare → Entry → Approve |
| 5683 | PPh 29 | `""` → `"5683r"` → `"5683"` | Request → Approve |
| 117 | PPh 25 | `""` → `"117r"` → `"117"` | Request → Approve |
| 118 | PPh Pasal 4(2) | `""` → `"118r"` → `"118"` | Request → Approve |
| 116 | Bukti Bayar PPh 23 | `""` → `"116r"` → `"116"` | Entry → Approve |

---

## Cross-Module Connections (Document Flow)

| Dari Modul | Dari State | Ke Modul | Ke State | Keterangan |
|-----------|-----------|---------|---------|------------|
| `pembelianjasa` (463) | `"463"` (SRN) | `taxes` | `"113"` (PPN Masukan) | Realisasi PPN Masukan dari pembelian jasa |
| `pembelian` (466) | `"467"` (GRN) | `taxes` | `"111"` (PPN Masukan) | **COMMENTED** — PPN jadi satu dengan A/P |
| `distribusi` (583) | `"583"` (Authorized) | `distribusi` (585) | `"585r"` (Init) | Barang dikirim pusat → diterima cabang |
| `penjualan` (5822) | `"582"` (Invoice) | `penerimaan` (749) | `"749"` (AR Receipt) | Piutang penjualan dibayar konsumen |
| `pembelian` (466) | `"467"` (GRN) | `pembayaran` (489) | `"489"` (FG AP) | Hutang supplier dibayar |
| `pembelianjasa` (463) | `"463"` (SRN) | `pembayaran` (462) | `"462"` (Service AP) | Hutang vendor jasa dibayar |
| `biaya` (677/2677) | `"677r"`/`"2677"` | `pembayaran` (477) | `"477"` (Expense) | Biaya usaha dibayar |
| `biaya` (1674/2674) | `"1674"`/`"2674"` | `pembayaran` (1485) | `"1485"` (Gaji) | Gaji dibayar |

---

## Catatan Penting

1. **allowJoin=true**: Step 4 (466→467), Step 5 (5822spd→582) — memungkinkan penggabungan multiple source documents ke satu target.
2. **paymentConfig=true**: 489, 462, 477, 749, 1483, 1485, 1487 — transaksi pembayaran yang terintegrasi dengan modul kas/bank.
3. **paymentSrc**: Step 3 penjualan (5822so→5822pkd) — mengecek apakah uang muka sudah diterima sebelum packing.
4. **Place**: `center` = Pusat/DC, `branch` = Cabang — menentukan lokasi transaksi.
5. **Modul tanpa controller aktif** (hanya config): `addons`, `diskon`, `valas`, `umproject` — hanya memiliki config atau helper, bukan transaksi penuh.

---

# Tahap 2: Relasi Database dari Config Masing-masing Modul

> **Sumber Data**: [`coTransaksiValues.php`] dari masing-masing modul — `tableIn`, `components` (Jurnal/Rekening), `postProcessor` (LockerStock)
> **Sumber Referensi**: [`heComponents.php`](../application/config/heComponents.php) — Definisi reversable preProcessor/postProcessor

---

## Arsitektur Database Transaksi

Semua modul transaksi menggunakan **satu tabel master transaksi** yang sama, dengan struktur `tableIn` yang konsisten:

### Common Master Fields (Semua Modul)

| Field Database | Value Gate | Deskripsi |
|---------------|-----------|-----------|
| `jenis_master` | `jenisTrMaster` | Tipe master transaksi |
| `jenis_top` | `jenisTrTop` | Tipe TOP (Term of Payment) |
| `jenis` | `jenisTr` | Kode jenis transaksi |
| `jenis_label` | `jenisTrName` | Label jenis transaksi |
| `div_id` | `divID` | ID divisi |
| `div_nama` | `divName` | Nama divisi |
| `dtime` | `dtime` | Datetime |
| `fulldate` | `fulldate` | Tanggal penuh |
| `oleh_id` | `olehID` | ID pembuat |
| `oleh_nama` | `olehName` | Nama pembuat |
| `cabang_id` | `placeID` | ID cabang (sumber) |
| `cabang_nama` | `placeName` | Nama cabang (sumber) |
| `transaksi_nilai` | *(variatif)* | Nilai transaksi utama |
| `transaksi_jenis` | `jenisTr` | Jenis transaksi |
| `keterangan` | `description` | Deskripsi |

### Common Detail Fields (Semua Modul)

| Field Database | Value Gate | Deskripsi |
|---------------|-----------|-----------|
| `dtime` | `dtime` | Datetime |
| `produk_id` | `id` | ID produk/item |
| `produk_kode` | `code` / `produk_kode` | Kode produk |
| `produk_label` | `label` | Label produk |
| `produk_nama` | `name` / `nama` | Nama produk |
| `variant_id` | `variant_id` | ID varian (jika ada) |
| `variant_sku` | `variant_sku` | SKU varian |
| `variant_label` | `variant_label` | Label varian |
| `variant_key` | `variant_key` | Key varian |
| `produk_ord_jml` | `qty` / `jml` | Quantity |
| `produk_ord_hrg` | `harga` / `hpp` / `nilai_bayar` | Harga satuan |
| `satuan` | `satuan` | Satuan |

---

## Per Modul: Database Fields & Accounting Components

### 1. Modul `pembelian` (FG Purchasing — 466/467)

**File**: [`application/modules/pembelian/config/coTransaksiValues.php`](../application/modules/pembelian/config/coTransaksiValues.php)

**Master Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `suppliers_id` | `supplierID` | **Foreign Key** ke tabel suppliers |
| `suppliers_nama` | `supplierName` | Nama supplier |
| `gudang_id` | `gudangID` | **Foreign Key** ke tabel gudang |
| `gudang_nama` | `gudangName` | Nama gudang |

**Detail Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `produk_ord_hrg` | `harga` | Harga beli (HPP awal) |
| `hpp` | *(via valueBuilder)* | HPP setelah PPV |

**Static Values**:
- `detail.produk_jenis` = `"produk"` (produk riil)

**Components (Jurnal — Step 467/GRN)**:
| Account Code | Account Name | Debit/Credit | Sumber Nilai |
|-------------|-------------|-------------|-------------|
| `010306` | Persediaan Produk Riil | Debit | `harga` |
| `01040100005` | PPN In (Belum Faktur) | Debit | `nilai_tambah_ppn_in` |
| `020101` | Hutang Dagang | Credit | `nilai_tambah_piutang_pembelian` |
| `010203` | Piutang Pembelian | Credit | `-nilai_dipakai_piutang_pembelian` |

**Components (Jurnal — Step 467/PPV Transfer)**:
| Account Code | Account Name | Debit/Credit | Sumber Nilai |
|-------------|-------------|-------------|-------------|
| `010304` | Persediaan Produk (Std) | Debit | `hpp_nppv` |
| `010306` | Persediaan Produk Riil | Credit | `-harga` |
| `020407` | Hutang Lain PPV | Credit | `ppv` |

**Rekening Pembantu**:
- `RekeningPembantuSupplier` — Melacak hutang per supplier (account `020101`, `010203`, `01040100005`)

**PreProcessor**:
- `ProdukSerialNumberExtractor` — Extract serial number saat GRN
- `LockerValue` — Lock nilai `ppn_in`, `piutang_pembelian`
- `SyncDiskonPembelian` — Sinkronisasi diskon pembelian
- `LockerStockFreeProduk` — Lock stok free produk

---

### 2. Modul `penjualan` (Sales — 5822/582)

**File**: [`application/modules/penjualan/config/coTransaksiValues.php`](../application/modules/penjualan/config/coTransaksiValues.php)

**Master Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `customers_id` | `pihakID` | **Foreign Key** ke tabel customers |
| `customers_nama` | `pihakName` | Nama customer |
| `gudang_id` | `gudangID` | **Foreign Key** ke tabel gudang |
| `gudang_nama` | `gudangName` | Nama gudang |
| `seller_id` | `sellerID` | **Foreign Key** ke tabel sales/seller |
| `seller_nama` | `sellerName` | Nama seller |
| `top` | `top` | Term of Payment ID |
| `top_nama` | `top__nama` | TOP name |
| `tos` | `tos` | Term of Shipping ID |
| `tos_nama` | `tos__nama` | TOS name |
| `referensi_id` | `referenceID` | Referensi transaksi |
| `referensi_nomer` | `referenceNomer` | No referensi |
| `referensi_jenis` | `referenceJenis` | Jenis referensi |
| `pembayaran` | `paymentMethod` | Metode pembayaran (cash/credit/cia) |
| `pembayaran_sys` | `paymentMethod` | Sistem pembayaran |

**Detail Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `produk_ord_hrg` | `harga` | Harga jual |

**Additional Detail Sections**:
- `rsltItems` — Result items (sama struktur dengan detail)
- `detailValues` (commented) — `harga`, `hpp`, `disc`, `ppn`, `nett1`, `nett2`, `ppv`, `berat_gross`, `volume_gross`

**Static Values**:
- `detail.produk_jenis` = `"produk"`
- `detail_rsltItems.produk_jenis` = `"produk"`

**Components (Jurnal — Step 582spd/Invoice)**:
| Account Code | Account Name | Debit/Credit | Sumber Nilai |
|-------------|-------------|-------------|-------------|
| `020403` | Hutang ke Konsumen | Credit | `-nilai_dipakai_020403` |
| `010201` | Piutang Dagang | Debit | `nilai_tambah_020403` |
| `0401` | Penjualan | Credit | `nett1` |
| `0702` | Ongkos Kirim | Credit
| `0702` | Ongkos Kirim | Credit | `ongkir` |
| `010304` | Persediaan Produk | Credit | `-hpp` |
| `0501` | HPP | Debit | `hpp` |

**Rekening Pembantu**:
- `RekeningPembantuCustomer` — Melacak piutang per customer

**Payment Methods**:
- `cash` — Tunai
- `cia` — Cash In Advance (uang muka)
- `credit` — Kredit (dengan `kredit_limit_order`)

**Shipping Services**:
- `ongkir_ppn_by_cust` — Ongkir + PPN ditanggung customer
- `ongkir_tanpa_ppn_by_cust` — Ongkir tanpa PPN ditanggung customer
- `ongkir_tanpa_ppn_by_company` — Ongkir tanpa PPN ditanggung perusahaan
- `tanpa_ongkir` — Tanpa ongkir

**Injector Pajak**:
- `injectorPajak.source` = `"grand_total_ui"`
- `pairPajak`: `ppn`, `grand_ppn`, `new_grand_ppn`

---

### 3. Modul `distribusi` (FG Distribution — 583/585)

**File**: [`application/modules/distribusi/config/coTransaksiValues.php`](../application/modules/distribusi/config/coTransaksiValues.php)

**Master Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `cabang2_id` | `place2ID` | **Foreign Key** ke cabang tujuan |
| `cabang2_nama` | `place2Name` | Nama cabang tujuan |
| `gudang_id` | `gudangID` | Gudang sumber |
| `gudang_nama` | `gudangName` | Nama gudang sumber |
| `gudang2_id` | `gudang2ID` | **Foreign Key** ke gudang tujuan |
| `gudang2_nama` | `gudang2Name` | Nama gudang tujuan |

**Detail Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `produk_ord_hrg` | `hpp` | HPP (harga pokok penjualan) |
| `hpp` | `harga` | HPP asli |

**Additional Detail Sections**:
- `rsltItems` — Result items (sama struktur dengan detail)

**Static Values**:
- `detail.produk_jenis` = `"produk"`
- `rsltItems.produk_jenis` = `"produk"`

**Components**:
- Step `583r`: Empty (no Jurnal/Rekening components)
- Step `583sc`: `ProdukSerialNumberExtractor`, `ProdukSerialNumberExtractorPaket` (preProcessor)
- Step `583sc.sub_detail`: `LockerStock` (from `items10_sum` for paket)

**PostProcessor (Step 583r)**:
| Component | Aksi | Keterangan |
|-----------|------|------------|
| `Jurnal_activityMain` | Create activity log | Mencatat aktivitas distribusi |
| `LockerStock` | Hold stok (-qty) | Mengurangi stok di gudang sumber (state: `.hold`) |
| `LockerStock` | Hold stok (+qty) | Menambah stok di gudang sumber (state: `.hold`, dengan transaksi_id) |

> **Reversable**: Semua `LockerStock` di postProcessor bersifat reversable.

---

### 4. Modul `pembayaran` (A/P Payment)

**File**: [`application/modules/pembayaran/config/coTransaksiValues.php`](../application/modules/pembayaran/config/coTransaksiValues.php)

**Master Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `suppliers_id` | `pihakID` | **Foreign Key** ke suppliers |
| `suppliers_nama` | `pihakName` | Nama supplier |
| `bank_rekening_id` | `cash_id` | **Foreign Key** ke rekening bank/kas |
| `bank_rekening_nama` | `bank_rekening_nama` | Nama rekening bank |
| `ids_ref` | `refs` | **Reference IDs** ke transaksi sumber (hutang) |
| `ids_ref_intext` | `refs_intext` | Reference in text |

**Detail Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `produk_ord_jml` | `.1` | Fixed quantity = 1 |
| `produk_ord_hrg` | `nilai_bayar` | Nilai pembayaran |

**Additional Detail Sections**:
- `rsltItems` — Items sumber (produk_source)

**Static Values**:
- `detail.produk_jenis` = `"invoice"` (tagihan)
- `detail_rsltItems.produk_jenis` = `"produk_source"` (produk asal)

**Components (Jurnal — Step 682)**:
| Account Code | Account Name | Debit/Credit | Sumber Nilai |
|-------------|-------------|-------------|-------------|
| `010101` | Kas | Credit | `-kas_value` |
| `020202` | Hutang Bank | Debit | `rekening_koran_value` |
| `01040100011` | PIB | Debit | `nilai_entry` |

**Rekening Pembantu**:
- `RekeningPembantuKas` — Melacak mutasi per rekening kas
- `RekeningPembantuBank` — Melacak hutang per bank (rekening koran)
- `RekeningPembantuRelasiRekeningKoran` — Relasi rekening koran level 2
- `RekeningPembantuRekeningKoranMain` — Rekening koran level 3

---

### 5. Modul `penerimaan` (A/R Receipt — 749)

**File**: [`application/modules/penerimaan/config/coTransaksiValues.php`](../application/modules/penerimaan/config/coTransaksiValues.php)

**Master Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `customers_id` | `pihakID` | **Foreign Key** ke customers |
| `customers_nama` | `pihakName` | Nama customer |
| `bank_rekening_id` | `cash_id` | **Foreign Key** ke rekening bank/kas |
| `bank_rekening_nama` | `bank_rekening_nama` | Nama rekening bank |
| `ids_ref` | `refs` | **Reference IDs** ke transaksi sumber (piutang) |
| `ids_ref_intext` | `refs_intext` | Reference in text |

**Additional Master Values**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `tagihan` | `tagihan` | Total tagihan |
| `terbayar` | `terbayar` | Total terbayar |
| `sisa` | `sisa` | Sisa tagihan |
| `nilai_bayar` | `nilai_bayar` | Nilai pembayaran |
| `harus_bayar` | `harus_bayar` | Yang harus dibayar |
| `creditAmount` | `creditAmount` | Nilai kredit |
| `nilai_entry` | `nilai_entry` | Nilai entry |
| `new_sisa` | `new_sisa` | Sisa baru setelah bayar |

**Detail Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `produk_ord_jml` | `.1` | Fixed quantity = 1 |
| `produk_ord_hrg` | `nilai_bayar` | Nilai pembayaran |

**Additional Detail Values**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `tagihan` | `tagihan` | Tagihan per item |
| `terbayar` | `terbayar` | Terbayar per item |
| `sisa` | `sisa` | Sisa per item |
| `nilai_bayar` | `nilai_bayar` | Nilai bayar per item |

**Static Values**:
- `detail.produk_jenis` = `"invoice"`

**Components (Jurnal — Step 749)**:
| Account Code | Account Name | Debit/Credit | Sumber Nilai |
|-------------|-------------|-------------|-------------|
| `2010050` | Hutang ke Konsumen | Credit | `-(credit_note_dipakai+uang_muka_dipakai)` |
| `1010010010` | Kas | Debit | `nilai_cash` |
| `1010020010` | Piutang Dagang | Credit | `-nilai_dipakai_1010020010` |
| `6010` | Biaya Usaha | Debit | `nilai_biaya` |
| `7010110` | Selisih Pembulatan | Debit | `selisih_round` |
| `1010040020` | PPh 22 Dibayar Dimuka | Debit | `pph22_nilai` |
| `1010040080` | PPN Dibayar Bendahara | Debit | `ppn_nilai_dibayar` |

**Jurnal Kedua (Deposit)**:
| Account Code | Account Name | Debit/Credit | Sumber Nilai |
|-------------|-------------|-------------|-------------|
| `7010150` | Pendapatan Lain-lain | Credit | `pendapatan_lain_lain` |
| `2010050` | Hutang ke Konsumen | Credit | `deposit_konsumen` |
| `1010010010` | Kas | Debit | `deposit_konsumen+pendapatan_lain_lain` |

**Rekening Pembantu**:
- `RekeningPembantuCustomer` — Melacak piutang per customer (account `1010020010`, `1010040080`)

---

### 6. Modul `kas` (Cash Balance Interchange — 1757)

**File**: [`application/modules/kas/config/coTransaksiValues.php`](../application/modules/kas/config/coTransaksiValues.php)

**Master Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `customers_id` | `pihakID` | Pihak terkait |
| `customers_nama` | `pihakName` | Nama pihak |
| `cabang2_id` | `place2ID` | **Foreign Key** ke cabang tujuan |
| `cabang2_nama` | `place2Name` | Nama cabang tujuan |
| `gudang_id` | `gudangID` | Gudang sumber |
| `gudang_nama` | `gudangName` | Nama gudang sumber |
| `gudang2_id` | `gudang2ID` | Gudang tujuan |
| `gudang2_nama` | `gudang2Name` | Nama gudang tujuan |
| `bank_rekening_id` | `cash_id` | **Foreign Key** ke rekening bank/kas |
| `bank_rekening_nama` | `bank_rekening_nama` | Nama rekening bank |
| `ids_ref` | `refs` | Reference IDs |
| `ids_ref_intext` | `refs_intext` | Reference in text |

**Additional Master Values**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `tagihan` | `tagihan` | Tagihan |
| `terbayar` | `terbayar` | Terbayar |
| `sisa` | `sisa` | Sisa |
| `nilai_bayar` | `nilai_bayar` | Nilai bayar |
| `harus_bayar` | `harus_bayar` | Harus bayar |
| `creditAmount` | `creditAmount` | Nilai kredit |
| `nilai_entry` | `nilai_entry` | Nilai entry |

**Detail Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `produk_ord_jml` | `.1` | Fixed quantity = 1 |
| `produk_ord_hrg` | `nilai_bayar` | Nilai pembayaran |

**Additional Detail Values**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `tagihan` | `tagihan` | Tagihan per item |
| `terbayar` | `terbayar` | Terbayar per item |
| `sisa` | `sisa` | Sisa per item |
| `nilai_bayar` | `nilai_bayar` | Nilai bayar per item |
| `new_sisa` | `new_sisa` | Sisa baru |

**Static Values**:
- `detail.produk_jenis` = `"invoice"`

**Components**: Empty (no Jurnal/Rekening components in `components` section)

**PostProcessor (Step 759r)**:
| Component | Aksi | Keterangan |
|-----------|------|------------|
| `LockerValue` | Lock nilai kas (-) | Mengurangi nilai kas sumber (state: `.active`) |
| `LockerValue` | Lock nilai kas (+) | Menambah nilai kas tujuan (state: `.hold`) |
| `Jurnal_activity` | Create activity | Mencatat aktivitas |
| `Jurnal_activityMain` | Create main activity | Mencatat aktivitas utama |
| `PaymentSrcItem` | Update payment source | Update status pembayaran sumber |

---

### 7. Modul `biaya` (Expenses)

**File**: [`application/modules/biaya/config/coTransaksiValues.php`](../application/modules/biaya/config/coTransaksiValues.php)

**Master Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `cabang2_id` | `place2ID` | Cabang tujuan (jika ada) |
| `cabang2_nama` | `place2Name` | Nama cabang tujuan |
| `gudang_id` | `gudangID` | Gudang |
| `gudang_nama` | `gudangName` | Nama gudang |
| `ids_ref` | `refs` | Reference IDs |
| `ids_ref_intext` | `refs_intext` | Reference in text |

**Detail Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `produk_ord_jml` | `jml` | Quantity |
| `produk_ord_hrg` | `hpp` | Harga |
| `hpp` | `harga` | HPP |

**Additional Detail Sections**:
- `detailValues` — `hpp`, `harga`
- `rsltItems` — Result items
- `rsltItemsValues` — `hpp`, `harga`

**Static Values**:
- `detail.produk_jenis` = `"supplies"` (supplies/perlengkapan)
- `detail_rsltItems.produk_jenis` = `"supplies"`

**Components**: Empty (no Jurnal/Rekening components in `components` section)

**PostProcessor (Step 7762r)**:
| Component | Aksi | Keterangan |
|-----------|------|------------|
| `LockerStockSupplies` | Kurangi stok supplies | `-qty` (state: `.active`) |
| `LockerStockSupplies` | Hold stok supplies | `+qty` (state: `.hold`) |
| `TransaksiItemUpdate` | Update reference item | Update status item di transaksi sumber |

> **Reversable**: Semua `LockerStockSupplies` bersifat reversable.

---

### 8. Modul `taxes` (Tax Management)

**File**: [`application/modules/taxes/config/coTransaksiValues.php`](../application/modules/taxes/config/coTransaksiValues.php)

**Master Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `cabang2_id` | `place2ID` | Cabang tujuan |
| `cabang2_nama` | `place2Name` | Nama cabang tujuan |
| `gudang_id` | `gudangID` | Gudang |
| `gudang_nama` | `gudangName` | Nama gudang |
| `gudang2_id` | `gudang2ID` | Gudang tujuan |
| `gudang2_nama` | `gudang2Name` | Nama gudang tujuan |
| `customers_id` | `pihakID` | **Foreign Key** ke customers/suppliers |
| `customers_nama` | `pihakName2` | Nama pihak |

**Detail Fields (unique)**:
| Field Database | Value Gate | Keterangan |
|---------------|-----------|------------|
| `produk_ord_jml` | `qty` | Quantity |
| `produk_ord_hrg` | `harga` | Harga |
| `hpp` | `harga` | HPP |
| `note` | `note` | Catatan |
| `reference` | `reference` | Referensi |

**Additional Detail Sections**:
- `detail2` — Detail kedua (produk_target)
- `rsltItems` — Result items

**Static Values**:
- `detail.produk_jenis` = `"produk_source"` (produk sumber)
- `detail2.produk_jenis` = `"produk_target"` (produk target)
- `detail_rsltItems.produk_jenis` = `"produk_source"`

**PostProcessor**: Empty (no postProcessor for tax transactions)

---

## Cross-Module Database Relationships

### Foreign Key Relationships

| Modul | Field Database | Referensi Tabel | Keterangan |
|-------|---------------|----------------|------------|
| `pembelian` | `suppliers_id` | `suppliers` | Supplier pembelian |
| `penjualan` | `customers_id` | `customers` | Customer penjualan |
| `penjualan` | `seller_id` | `sellers` | Sales/seller |
| `pembayaran` | `suppliers_id` | `suppliers` | Supplier yang dibayar |
| `pembayaran` | `bank_rekening_id` | `bank_rekening` | Rekening bank sumber dana |
| `penerimaan` | `customers_id` | `customers` | Customer yang bayar |
| `penerimaan` | `bank_rekening_id` | `bank_rekening` | Rekening bank tujuan dana |
| `kas` | `bank_rekening_id` | `bank_rekening` | Rekening bank yang dipindah |
| `kas` | `customers_id` | `customers` | Pihak terkait |
| `distribusi` | `cabang2_id` | `cabang` | Cabang tujuan distribusi |
| `distribusi` | `gudang2_id` | `gudang` | Gudang tujuan distribusi |
| `biaya` | `cabang2_id` | `cabang` | Cabang tujuan biaya |
| `taxes` | `customers_id` | `customers` | Pihak terkait pajak |
| `taxes` | `cabang2_id` | `cabang` | Cabang tujuan pajak |

### Shared Transaction Tables

Semua modul menulis ke **satu tabel transaksi utama** yang sama, dibedakan oleh field `jenis` (kode transaksi). Struktur tabel ini mencakup:

1. **Master Record**: `jenis_master`, `jenis_top`, `jenis`, `jenis_label`, `div_id`, `cabang_id`, `suppliers_id`/`customers_id`, `gudang_id`, `transaksi_nilai`, `keterangan`, `bank_rekening_id`, `ids_ref`
2. **Detail Records**: `produk_id`, `produk_kode`, `produk_label`, `produk_nama`, `variant_id`, `produk_ord_jml`, `produk_ord_hrg`, `satuan`, `produk_jenis`
3. **Value Records**: Nilai-nilai tambahan seperti `hpp`, `ppn`, `diskon`, `nett1`, `nett2`, `ppv`

### Accounting (Jurnal) Integration

Semua modul yang memiliki `components` dengan `comName => "Jurnal"` menulis ke **tabel jurnal umum** yang sama, dengan struktur:

| Field | Sumber | Keterangan |
|-------|--------|------------|
| `account_code` | Key dari `loop` array | Kode akun (coa) |
| `debit` | Value dari `loop` array (positif) | Nilai debit |
| `credit` | Value dari `loop` array (negatif) | Nilai kredit |
| `cabang_id` | `static.cabang_id` | Cabang |
| `jenis` | `static.jenis` | Jenis transaksi |
| `transaksi_no` | `static.transaksi_no` | No transaksi |

### Inventory (LockerStock) Integration

Modul yang memanipulasi stok menggunakan komponen `LockerStock` yang menulis ke **tabel locker_stock**:

| Modul | Aksi | State | Keterangan |
|-------|------|-------|------------|
| `pembelian` | `LockerStockFreeProduk` | - | Lock stok free produk (preProcessor) |
| `distribusi` | `LockerStock` (postProcessor) | `.hold` | Hold stok saat distribusi |
| `biaya` | `LockerStockSupplies` (postProcessor) | `.active` / `.hold` | Kelola stok supplies |
| `kas` | `LockerValue` (postProcessor) | `.active` / `.hold` | Kelola nilai kas |

### Payment Source Integration

Modul pembayaran (`pembayaran`, `penerimaan`, `kas`) menggunakan `ids_ref` untuk merujuk ke transaksi sumber (hutang/piutang). Komponen `PaymentSrcItem` di postProcessor memperbarui status pembayaran di transaksi sumber.

---

## Diagram Relasi Database (Mermaid.js ERD)

```mermaid
erDiagram
    TRANSAKSI_MASTER ||--o{ TRANSAKSI_DETAIL : has
    TRANSAKSI_MASTER ||--o{ JURNAL : generates
    TRANSAKSI_MASTER ||--o{ LOCKER_STOCK : locks
    TRANSAKSI_MASTER ||--o{ LOCKER_VALUE : values

    SUPPLIERS ||--o{ TRANSAKSI_MASTER : "suppliers_id"
    CUSTOMERS ||--o{ TRANSAKSI_MASTER : "customers_id"
    CABANG ||--o{ TRANSAKSI_MASTER : "cabang_id"
    GUDANG ||--o{ TRANSAKSI_MASTER : "gudang_id"
    BANK_REKENING ||--o{ TRANSAKSI_MASTER : "bank_rekening_id"

    TRANSAKSI_MASTER {
        int id PK
        string jenis_master
        string jenis_top
        string jenis "Kode transaksi (466, 582, etc)"
        string jenis_label
        int div_id FK
        int cabang_id FK
        int cabang2_id FK "Cabang tujuan (distribusi)"
        int suppliers_id FK "Pembelian"
        int customers_id FK "Penjualan"
        int gudang_id FK
        int gudang2_id FK "Gudang tujuan"
        int bank_rekening_id FK "Kas/Bank"
        decimal transaksi_nilai
        string keterangan
        string ids_ref "Reference ke transaksi lain"
        int trash
    }

    TRANSAKSI_DETAIL {
        int id PK
        int master_id FK
        int produk_id FK
        string produk_kode
        string produk_label
        string produk_nama
        int variant_id
        string variant_sku
        decimal produk_ord_jml
        decimal produk_ord_hrg
        string satuan
        string produk_jenis "produk|invoice|supplies"
        decimal hpp
        decimal ppn
        decimal diskon
        decimal nett1
    }

    JURNAL {
        int id PK
        int master_id FK
        string account_code "010306, 020101, etc"
        decimal debit
        decimal credit
        int cabang_id FK
        string jenis
        string transaksi_no
    }

    LOCKER_STOCK {
        int id PK
        int cabang_id FK
        string jenis
        string state "active|hold"
        decimal jumlah
        int produk_id FK
        string nama
        string satuan
        int gudang_id FK
        int transaksi_id FK
    }

    LOCKER_VALUE {
        int id PK
        int cabang_id FK
        string jenis
        string state
        decimal nilai
        int produk_id FK
        int transaksi_id FK
    }
```

---

## Ringkasan Komponen per Modul

| Modul | tableIn | Jurnal | Rekening Pembantu | LockerStock/Value | PostProcessor |
|-------|---------|--------|-------------------|-------------------|---------------|
| `pembelian` | ✅ | ✅ (467) | ✅ Supplier | ✅ FreeProduk | ✅ |
| `penjualan` | ✅ | ✅ (582spd) | ✅ Customer | ❌ | ✅ |
| `distribusi` | ✅ | ❌ | ❌ | ✅ (583r) | ✅ |
| `pembayaran` | ✅ | ✅ (682) | ✅ Kas, Bank, RekKoran | ❌ | ✅ |
| `penerimaan` | ✅ | ✅ (749) | ✅ Customer | ❌ | ✅ |
| `kas` | ✅ | ❌ | ❌ | ✅ LockerValue | ✅ |
| `biaya` | ✅ | ❌ | ❌ | ✅ LockerStockSupplies | ✅ |
| `taxes` | ✅ | ❌ | ❌ | ❌ | ❌ |

---

# Tahap 3: Model Dependencies per Modul

> **Sumber Data**:
> - [`coTransaksiUi.php`] dari masing-masing modul — `selectorModel`, `selectorSrcModel`, `selectedPrice.model`, `pihakModel`, `paymentSource.model`, `elementType => "dataModel"`
> - Controller masing-masing modul — `$this->load->model()`
> - [`coTransaksiCore.php`] dari masing-masing modul — `preProcessor`, `postProcessor`, `components`
> - [`heTransaksi_core.php`](../application/config/heTransaksi_core.php) — `valueGates`, `valueBuilders`, `components`
> - [`autoload.php`](../application/config/autoload.php) — Global auto-loaded models
> - [`routes.php`](../application/config/routes.php) — URL routing
> - [`heNavigation.php`](../application/config/heNavigation.php) — Navigation structure

---

## Global Auto-loaded Models

Dari [`autoload.php`](../application/config/autoload.php), model berikut di-load secara global (tersedia di semua controller):

| Model | Path | Fungsi |
|-------|------|--------|
| `MdlMother` | `application/models/Mdls/MdlMother` | Mother model — ORM/query builder utama |
| `MdlMother_static` | `application/models/Mdls/MdlMother_static` | Static query methods |
| `MdlEmployee` | `application/models/Mdls/MdlEmployee` | Data karyawan |
| `MdlActivityLog` | `application/models/Mdls/MdlActivityLog` | Activity logging |
| `MdlBiaya` | `application/models/Mdls/MdlBiaya` | Biaya/expense data |

---

## Arsitektur Model Loading

### Pattern 1: Config-driven (coTransaksiUi.php)

Model references didefinisikan di [`coTransaksiUi.php`] per modul, digunakan oleh engine transaksi untuk:

| Config Key | Fungsi | Contoh |
|-----------|--------|--------|
| `selectorModel` | Model untuk memilih item/produk di form | `MdlProduk`, `MdlNotaItem` |
| `selectorSrcModel` | Model untuk memilih item sumber (source document) | `MdlProduk2`, `MdlLockerStock` |
| `selectedPrice.model` | Model untuk mengambil harga item terpilih | `MdlHargaProdukPerSupplier` |
| `pihakModel` | Model untuk memilih pihak (supplier/customer/cabang) | `MdlSupplier`, `MdlCustomer` |
| `pihakModelMain` | Model utama untuk pihak | `MdlProdukReturnMethodStatic` |
| `paymentSource.model` | Model untuk sumber pembayaran (cross-module) | `MdlPembayaranTransaksi` |
| `selectorDetailModel` | Model untuk detail item | `MdlProduk` |
| `selectorModelAuto` | Model auto-complete | `MdlProjectKomponenBiayaDetailsRabSub` |
| `selectorSrcModelAuto` | Model auto-complete untuk source | `MdlGaji` |
| `selectorSrcModelPaired` | Model paired source | `MdlProdukKompositKomposisi` |
| `elementType => "dataModel"` | Data model untuk element type tertentu | Variatif |

### Pattern 2: Controller-driven (load->model)

Controller memanggil `$this->load->model("Mdls/MdlXxx")` lalu `$m = new MdlXxx()` untuk operasi spesifik.

### Pattern 3: Dynamic Component Loading

Engine memuat model secara dinamis berdasarkan nama komponen:
```php
$mdlName = "Com" . ucfirst($comName);
$this->load->model("Coms/" . $mdlName);
$m = new $mdlName($resultParams);
```

### Pattern 4: PreProcessor Loading

PreProcessor di-load secara dinamis:
```php
$mdlName = "Pre" . ucfirst($comName);
$this->load->model("Preprocs/" . $mdlName);
$m = new $mdlName($resultParams);
```

### Pattern 5: Cross-module Loading

Model dari modul lain di-load dengan path relatif:
```php
$this->load->model("../../penjualan/models/Coms/ComTransaksiDataPenjualanBridging");
$this->load->model("../../pembelian/models/Coms/ComTransaksiDataPembelianBridging");
```

---

## Per Modul: Model References

### 1. Modul `pembelian` (FG Purchasing — 466/467)

**File Config**: [`application/modules/pembelian/config/coTransaksiUi.php`](../application/modules/pembelian/config/coTransaksiUi.php)

**Model References (coTransaksiUi.php)**:

| Kategori | Model | Path | Fungsi |
|----------|-------|------|--------|
| `selectorModel` | `MdlProduk` | `Mdls/MdlProduk` | Pilih produk FG |
| `selectorModel` | `MdlNotaItem` | `Mdls/MdlNotaItem` | Pilih item dari nota |
| `selectorModel` | `MdlSupplies` | `Mdls/MdlSupplies` | Pilih supplies/perlengkapan |
| `selectorModel` | `MdlJasa` | `Mdls/MdlJasa` | Pilih jasa |
| `selectorModel` | `MdlExpense` | `Mdls/MdlExpense` | Pilih expense |
| `selectorModel` | `MdlProdukPerSupplier` | `Mdls/MdlProdukPerSupplier` | Pilih produk per supplier |
| `selectorModel` | `MdlProdukBekas` | `Mdls/MdlProdukBekas` | Pilih produk bekas |
| `selectorModel` | `MdlLockerStockSupplies` | `Mdls/MdlLockerStockSupplies` | Pilih stok supplies |
| `selectorModel` | `MdlProduk2` | `Mdls/MdlProduk2` | Pilih produk (alternate) |
| `selectorSrcModel` | *(same as selectorModel)* | *(same)* | Model untuk source items |
| `selectedPrice.model` | `MdlHargaProdukPerSupplier` | `Mdls/MdlHargaProdukPerSupplier` | Harga beli per supplier |
| `selectedPrice.model` | `MdlHargaSupplies` | `Mdls/MdlHargaSupplies` | Harga supplies |
| `pihakModel` | `MdlSupplier` | `Mdls/MdlSupplier` | Pilih supplier |
| `pihakModel` | `MdlCabang` | `Mdls/MdlCabang` | Pilih cabang |
| `pihakModel` | `MdlCustomer_and_pre` | `Mdls/MdlCustomer_and_pre` | Pilih customer/pre-order |
| `pihakModel` | `MdlCurrency` | `Mdls/MdlCurrency` | Pilih mata uang |
| `pihakModelMain` | `MdlProdukReturnMethodStatic` | `Mdls/MdlProdukReturnMethodStatic` | Return method produk |
| `pihakModelMain` | `MdlSuppliesReturnMethodStatic` | `Mdls/MdlSuppliesReturnMethodStatic` | Return method supplies |
| `paymentSource.model` | `MdlPembayaranTransaksi` | `../../pembayaran/models/MdlPembayaranTransaksi` | **Cross-module** ke pembayaran |
| `paymentSource.model` | `MdlDistribusiTransaksi` | `../../distribusi/models/MdlDistribusiTransaksi` | **Cross-module** ke distribusi |

**Controller Model Loading**:

| Model | Path | Fungsi |
|-------|------|--------|
| `MdlPembelianTransaksi` | `Mdls/MdlPembelianTransaksi` | Transaction model utama |
| `MdlCurrency` | `Mdls/MdlCurrency` | Currency/mata uang |
| `MdlMongoMother` | `Mdls/MdlMongoMother` | MongoDB operations |
| `MdlProduk` | `Mdls/MdlProduk` | Produk data |
| `MdlProduk2` | `Mdls/MdlProduk2` | Produk data (alternate) |
| `MdlProdukVarian` | `Mdls/MdlProdukVarian` | Varian produk |
| `MdlProdukPerSerialNumber` | `Mdls/MdlProdukPerSerialNumber` | Serial number tracking |
| `MdlProdukPerSerialNumberLocker` | `Mdls/MdlProdukPerSerialNumberLocker` | Serial number locking |
| `MdlSupplier` | `Mdls/MdlSupplier` | Supplier data |
| `MdlCustomer` | `Mdls/MdlCustomer` | Customer data |
| `MdlCabang` | `Mdls/MdlCabang` | Cabang data |
| `MdlGudang` | `Mdls/MdlGudang` | Gudang data |
| `MdlCompany` | `Mdls/MdlCompany` | Company profile |
| `MdlEmployee_all` | `Mdls/MdlEmployee_all` | Employee data |
| `MdlEmployeeCabang` | `Mdls/MdlEmployeeCabang` | Employee cabang |
| `MdlUser` | `Mdls/MdlUser` | User data |
| `MdlReport` | `Mdls/MdlReport` | Reporting |
| `MdlReportSql` | `Mdls/MdlReportSql` | SQL reporting |
| `MdlActivityLog` | `Mdls/MdlActivityLog` | Activity logging |
| `MdlLockerTransaksi` | `Mdls/MdlLockerTransaksi` | Transaction locking |
| `MdlLockerStock` | `Mdls/MdlLockerStock` | Stock locking |
| `MdlLockerStockSupplies` | `Mdls/MdlLockerStockSupplies` | Supplies stock locking |
| `MdlPaymentSource` | `Mdls/MdlPaymentSource` | Payment source tracking |
| `MdlPaymentUangMuka` | `Mdls/MdlPaymentUangMuka` | Down payment tracking |
| `MdlStaticNotes` | `Mdls/MdlStaticNotes` | Static notes |
| `MdlSupplierDiskon` | `Mdls/MdlSupplierDiskon` | Supplier discount |
| `MdlTmpDiskon` | `Mdls/MdlTmpDiskon` | Temporary discount |
| `MdlOverDuePass` | `Mdls/MdlOverDuePass` | Overdue pass |
| `MdlBankAccount_cash` | `Mdls/MdlBankAccount_cash` | Bank account cash |
| `MdlBankAccount_cash_and_in` | `Mdls/MdlBankAccount_cash_and_in` | Bank account cash and in |
| `MdlCrmDataBridge` | `Mdls/MdlCrmDataBridge` | CRM data bridge |
| `MdlCustomerAddress` | `Mdls/MdlCustomerAddress` | Customer address |
| `MdlCustomerBillAddress` | `Mdls/MdlCustomerBillAddress` | Customer billing address |
| `MdlHargaProduk` | `Mdls/MdlHargaProduk` | Product price |
| `MdlSalesRejectHolding` | `Mdls/MdlSalesRejectHolding` | Sales reject holding |
| `MdlSettingStruk` | `Mdls/MdlSettingStruk` | Receipt settings |
| `MdlListQris` | `Mdls/MdlListQris` | QRIS list |
| `MdlSupplierUangMukaPpnRek` | `Mdls/MdlSupplierUangMukaPpnRek` | Supplier DP PPN rek |
| `MdlSupplierCreditUangMuka` | `Mdls/MdlSupplierCreditUangMuka` | Supplier credit DP |
| `MdlPaymentAntiSource` | `Mdls/MdlPaymentAntiSource` | Payment anti-source |
| `MdlTransaksiLaporan` | `Mdls/MdlTransaksiLaporan` | Transaction report |
| `MdlPenjualanTransaksiKirimHistory` | `Mdls/MdlPenjualanTransaksiKirimHistory` | Sales send history |
| `MdlTasklistProject` | `Mdls/MdlTasklistProject` | Project tasklist |
| `MdlProdukProject` | `Mdls/MdlProdukProject` | Product project |
| `MdlSubProgresTasklistKomposisi` | `Mdls/MdlSubProgresTasklistKomposisi` | Sub progress tasklist composition |
| `MdlProjectKomponenBiayaDetailsRabSub` | `Mdls/MdlProjectKomponenBiayaDetailsRabSub` | Project cost component details |
| `CustomCounter` | `CustomCounter` | Custom counter (penomoran) |

**Component Models (coTransaksiCore.php)**:

| Component | Model | Path | Fungsi |
|-----------|-------|------|--------|
| `ComJurnal` | `ComJurnal` | `Coms/ComJurnal` | Jurnal accounting |
| `ComRekening` | `ComRekening` | `Coms/ComRekening` | Rekening pembantu |
| `ComLockerStock` | `ComLockerStock` | `Coms/ComLockerStock` | Stock locking |
| `ComLockerStockSupplies` | `ComLockerStockSupplies` | `Coms/ComLockerStockSupplies` | Supplies stock locking |
| `ComLockerValue` | `ComLockerValue` | `Coms/ComLockerValue` | Value locking |
| `ComJurnal_activityMain` | `ComJurnal_activityMain` | `Coms/ComJurnal_activityMain` | Activity logging |
| `ComTransaksi_jurnal_revert` | `ComTransaksi_jurnal_revert` | `Coms/ComTransaksi_jurnal_revert` | Journal revert |
| `ComTransaksiKreditLimit` | `ComTransaksiKreditLimit` | `Coms/ComTransaksiKreditLimit` | Credit limit check |
| `ComRekeningPembantuBank` | `ComRekeningPembantuBank` | `Coms/ComRekeningPembantuBank` | Bank sub-account |
| `ComTransaksiDataPembelianBridging` | `ComTransaksiDataPembelianBridging` | `../../pembelian/models/Coms/ComTransaksiDataPembelianBridging` | **Cross-module** |
| `ComTransaksiDataPembelianTerimaBridging` | `ComTransaksiDataPembelianTerimaBridging` | `../../pembelian/models/Coms/ComTransaksiDataPembelianTerimaBridging` | **Cross-module** |
| `ComTransaksiDataPenjualanBridging` | `ComTransaksiDataPenjualanBridging` | `../../penjualan/models/Coms/ComTransaksiDataPenjualanBridging` | **Cross-module** |

**PreProcessor Models**:
| PreProcessor | Model | Path |
|-------------|-------|------|
| `PreProdukSerialNumberExtractor` | `PreProdukSerialNumberExtractor` | `Preprocs/PreProdukSerialNumberExtractor` |
| `PreLockerValue` | `PreLockerValue` | `Preprocs/PreLockerValue` |
| `PreSyncDiskonPembelian` | `PreSyncDiskonPembelian` | `Preprocs/PreSyncDiskonPembelian` |
| `PreLockerStockFreeProduk` | `PreLockerStockFreeProduk` | `Preprocs/PreLockerStockFreeProduk` |

---

### 2. Modul `penjualan` (Sales — 5822/582)

**File Config**: [`application/modules/penjualan/config/coTransaksiUi.php`](../application/modules/penjualan/config/coTransaksiUi.php)

**Model References (coTransaksiUi.php)**:

| Kategori | Model | Path | Fungsi |
|----------|-------|------|--------|
| `selectorModel` | `MdlProduk2` | `Mdls/MdlProduk2` | Pilih produk |
| `selectorModel` | `MdlNotaItem` | `Mdls/MdlNotaItem` | Pilih item dari nota |
| `selectorModel` | `MdlLockerStock` | `Mdls/MdlLockerStock` | Pilih stok yang tersedia |
| `selectorModel` | `MdlProdukPaket` | `Mdls/MdlProdukPaket` | Pilih paket produk |
| `selectorModel` | `MdlProdukJasa` | `Mdls/MdlProdukJasa` | Pilih jasa |
| `selectorSrcModel` | `MdlProduk2` | `Mdls/MdlProduk2` | Source produk |
| `selectorSrcModel` | `MdlNotaItem` | `Mdls/MdlNotaItem` | Source item nota |
| `selectorSrcModel` | `MdlLockerStock` | `Mdls/MdlLockerStock` | Source stok |
| `selectorSrcModel` | `MdlProdukPaket` | `Mdls/MdlProdukPaket` | Source paket |
| `selectorSrcModel` | `MdlProdukJasa` | `Mdls/MdlProdukJasa` | Source jasa |
| `selectedPrice.model` | `MdlHargaProdukPaket` | `Mdls/MdlHargaProdukPaket` | Harga paket produk |
| `pihakModel` | `MdlCustomer` | `Mdls/MdlCustomer` | Pilih customer |
| `pihakModel` | `MdlCustomer_and_pre` | `Mdls/MdlCustomer_and_pre` | Pilih customer/pre-order |
| `pihakModel` | `MdlCustomerExport` | `Mdls/MdlCustomerExport` | Pilih customer export |
| `selectorDetailModel` | `MdlProduk` | `Mdls/MdlProduk` | Detail produk |

**Controller Model Loading**:

| Model | Path | Fungsi |
|-------|------|--------|
| `MdlPenjualanTransaksi` | `Mdls/MdlPenjualanTransaksi` | Transaction model utama |
| `MdlCurrency` | `Mdls/MdlCurrency` | Currency/mata uang |
| `MdlMongoMother` | `Mdls/MdlMongoMother` | MongoDB operations |
| `MdlProduk` | `Mdls/MdlProduk` | Produk data |
| `MdlProduk2` | `Mdls/MdlProduk2` | Produk data (alternate) |
| `MdlProdukVarian` | `Mdls/MdlProdukVarian` | Varian produk |
| `MdlProdukPerSerialNumber` | `Mdls/MdlProdukPerSerialNumber` | Serial number tracking |
| `MdlProdukPerSerialNumberLocker` | `Mdls/MdlProdukPerSerialNumberLocker` | Serial number locking |
| `MdlSupplier` | `Mdls/MdlSupplier` | Supplier data |
| `MdlCustomer` | `Mdls/MdlCustomer` | Customer data |
| `MdlCabang` | `Mdls/MdlCabang` | Cabang data |
| `MdlGudang` | `Mdls/MdlGudang` | Gudang data |
| `MdlCompany` | `Mdls/MdlCompany` | Company profile |
| `MdlEmployee_all` | `Mdls/MdlEmployee_all` | Employee data |
| `MdlEmployeeCabang` | `Mdls/MdlEmployeeCabang` | Employee cabang |
| `MdlUser` | `Mdls/MdlUser` | User data |
| `MdlReport` | `Mdls/MdlReport` | Reporting |
| `MdlReportSql` | `Mdls/MdlReportSql` | SQL reporting |
| `MdlActivityLog` | `Mdls/MdlActivityLog` | Activity logging |
| `MdlLockerTransaksi` | `Mdls/MdlLockerTransaksi` | Transaction locking |
| `MdlLockerStock` | `Mdls/MdlLockerStock` | Stock locking |
| `MdlPaymentSource` | `Mdls/MdlPaymentSource` | Payment source tracking |
| `MdlPaymentUangMuka` | `Mdls/MdlPaymentUangMuka` | Down payment tracking |
| `MdlStaticNotes` | `Mdls/MdlStaticNotes` | Static notes |
| `MdlBankAccount_cash` | `Mdls/MdlBankAccount_cash` | Bank account cash |
| `MdlBankAccount_cash_and_in` | `Mdls/MdlBankAccount_cash_and_in` | Bank account cash and in |
| `MdlCrmDataBridge` | `Mdls/MdlCrmDataBridge` | CRM data bridge |
| `MdlCustomerAddress` | `Mdls/MdlCustomerAddress` | Customer address |
| `MdlCustomerBillAddress` | `Mdls/MdlCustomerBillAddress` | Customer billing address |
| `MdlHargaProduk` | `Mdls/MdlHargaProduk` | Product price |
| `MdlSalesRejectHolding` | `Mdls/MdlSalesRejectHolding` | Sales reject holding |
| `MdlSettingStruk` | `Mdls/MdlSettingStruk` | Receipt settings |
| `MdlListQris` | `Mdls/MdlListQris` | QRIS list |
| `MdlPaymentAntiSource` | `Mdls/MdlPaymentAntiSource` | Payment anti-source |
| `MdlTransaksiLaporan` | `Mdls/MdlTransaksiLaporan` | Transaction report |
| `MdlPenjualanTransaksiKirimHistory` | `Mdls/MdlPenjualanTransaksiKirimHistory` | Sales send history |
| `CustomCounter` | `CustomCounter` | Custom counter (penomoran) |

**Component Models (coTransaksiCore.php)**:

| Component | Model | Path | Fungsi |
|-----------|-------|------|--------|
| `ComJurnal` | `ComJurnal` | `Coms/ComJurnal` | Jurnal accounting |
| `ComRekening` | `ComRekening` | `Coms/ComRekening` | Rekening pembantu |
| `ComLockerStock` | `ComLockerStock` | `Coms/ComLockerStock` | Stock locking |
| `ComJurnal_activityMain` | `ComJurnal_activityMain` | `Coms/ComJurnal_activityMain` | Activity logging |
| `ComTransaksi_jurnal_revert` | `ComTransaksi_jurnal_revert` | `Coms/ComTransaksi_jurnal_revert` | Journal revert |
| `ComTransaksiKreditLimit` | `ComTransaksiKreditLimit` | `Coms/ComTransaksiKreditLimit` | Credit limit check |
| `ComTransaksiDataPenjualanBridging` | `ComTransaksiDataPenjualanBridging` | `../../penjualan/models/Coms/ComTransaksiDataPenjualanBridging` | **Cross-module** |

---

### 3. Modul `distribusi` (FG Distribution — 583/585)

**File Config**: [`application/modules/distribusi/config/coTransaksiUi.php`](../application/modules/distribusi/config/coTransaksiUi.php)

**Model References (coTransaksiUi.php)**:

| Kategori | Model | Path | Fungsi |
|----------|-------|------|--------|
| `selectorModel` | `MdlLockerStock` | `Mdls/MdlLockerStock` | Pilih stok yang tersedia |
| `selectorModel` | `MdlNotaItem` | `Mdls/MdlNotaItem` | Pilih item dari nota |
| `selectorModel` | `MdlProdukKomposit` | `Mdls/MdlProdukKomposit` | Pilih produk komposit |
| `selectorSrcModel` | `MdlProduk2` | `Mdls/MdlProduk2` | Source produk |
| `selectorSrcModel` | `MdlNotaItem` | `Mdls/MdlNotaItem` | Source item nota |
| `selectorSrcModel` | `MdlProdukKomposit` | `Mdls/MdlProdukKomposit` | Source produk komposit |
| `selectedPrice.model` | `MdlHargaProduk` | `Mdls/MdlHargaProduk` | Harga produk |
| `pihakModel` | `MdlCabang` | `Mdls/MdlCabang` | Pilih cabang tujuan |
| `pihakModel` | `MdlGudang` | `Mdls/MdlGudang` | Pilih gudang tujuan |
| `selectorSrcModelPaired` | `MdlProdukKompositKomposisi` | `Mdls/MdlProdukKompositKomposisi` | Komposisi produk komposit |

**Controller Model Loading**:

| Model | Path | Fungsi |
|-------|------|--------|
| `MdlDistribusiTransaksi` | `Mdls/MdlDistribusiTransaksi` | Transaction model utama |
| `MdlCurrency` | `Mdls/MdlCurrency` | Currency/mata uang |
| `MdlMongoMother` | `Mdls/MdlMongoMother` | MongoDB operations |
| `MdlProduk` | `Mdls/MdlProduk` | Produk data |
| `MdlProduk2` | `Mdls/MdlProduk2` | Produk data (alternate) |
| `MdlProdukVarian` | `Mdls/MdlProdukVarian` | Varian produk |
| `MdlProdukPerSerialNumber` | `Mdls/MdlProdukPerSerialNumber` | Serial number tracking |
| `MdlProdukPerSerialNumberLocker` | `Mdls/MdlProdukPerSerialNumberLocker` | Serial number locking |
| `MdlSupplier` | `Mdls/MdlSupplier` | Supplier data |
| `MdlCustomer` | `Mdls/MdlCustomer` | Customer data |
| `MdlCabang` | `Mdls/MdlCabang` | Cabang data |
| `MdlGudang` | `Mdls/MdlGudang` | Gudang data |
| `MdlCompany` | `Mdls/MdlCompany` | Company profile |
| `MdlEmployee_all` | `Mdls/MdlEmployee_all` | Employee data |
| `MdlEmployeeCabang` | `Mdls/MdlEmployeeCabang` | Employee cabang |
| `MdlUser` | `Mdls/MdlUser` | User data |
| `MdlReport` | `Mdls/MdlReport` | Reporting |
| `MdlReportSql` | `Mdls/MdlReportSql` | SQL reporting |
| `MdlActivityLog` | `Mdls/MdlActivityLog` | Activity logging |
| `MdlLockerTransaksi` | `Mdls/MdlLockerTransaksi` | Transaction locking |
| `MdlLockerStock` | `Mdls/MdlLockerStock` | Stock locking |
| `MdlPaymentSource` | `Mdls/MdlPaymentSource` | Payment source tracking |
| `MdlStaticNotes` | `Mdls/MdlStaticNotes` | Static notes |
| `MdlBankAccount_cash` | `Mdls/MdlBankAccount_cash` | Bank account cash |
| `MdlBankAccount_cash_and_in` | `Mdls/MdlBankAccount_cash_and_in` | Bank account cash and in |
| `MdlHargaProduk` | `Mdls/MdlHargaProduk` | Product price |
| `MdlTransaksiLaporan` | `Mdls/MdlTransaksiLaporan` | Transaction report |
| `CustomCounter` | `CustomCounter` | Custom counter (penomoran) |

**Component Models (coTransaksiCore.php)**:

| Component | Model | Path | Fungsi |
|-----------|-------|------|--------|
| `ComLockerStock` | `ComLockerStock` | `Coms/ComLockerStock` | Stock locking |
| `ComJurnal_activityMain` | `ComJurnal_activityMain` | `Coms/ComJurnal_activityMain` | Activity logging |
| `ComTransaksiDataDistribusi` | `ComTransaksiDataDistribusi` | `Coms/ComTransaksiDataDistribusi` | Data distribusi |
| `ComRekeningPembantuTransaksiDistribusi` | `ComRekeningPembantuTransaksiDistribusi` | `Coms/ComRekeningPembantuTransaksiDistribusi` | Rekening pembantu distribusi |
| `ComRekeningTransaksiDataDistribusi` | `ComRekeningTransaksiDataDistribusi` | `Coms/ComRekeningTransaksiDataDistribusi` | Rekening data distribusi |
| `ComRekeningTransaksiDataDistribusiCache` | `ComRekeningTransaksiDataDistribusiCache` | `Coms/ComRekeningTransaksiDataDistribusiCache` | Cache data distribusi |

---

### 4. Modul `pembayaran` (A/P Payment)

**File Config**: [`application/modules/pembayaran/config/coTransaksiUi.php`](../application/modules/pembayaran/config/coTransaksiUi.php)

**Model References (coTransaksiUi.php)**:

| Kategori | Model | Path | Fungsi |
|----------|-------|------|--------|
| `selectorModel` | `MdlNota` | `Mdls/MdlNota` | Pencarian nota/referensi |
| `pihakModel` | `MdlCustomer` | `Mdls/MdlCustomer` | Pihak customer |
| `pihakModel` | `MdlCabang` | `Mdls/MdlCabang` | Pihak cabang |
| `pihakModel` | `MdlSupplier` | `Mdls/MdlSupplier` | Pihak supplier |

**Controller Model Loading**:

| Model | Path | Fungsi |
|-------|------|--------|
| `MdlNota` | `Mdls/MdlNota` | Nota transaksi |
| `MdlSupplier` | `Mdls/MdlSupplier` | Supplier |
| `MdlCustomer` | `Mdls/MdlCustomer` | Customer |
| `MdlCabang` | `Mdls/MdlCabang` | Cabang |
| `MdlBankAccount` | `Mdls/MdlBankAccount` | Bank account |
| `MdlBankAccountSaldo` | `Mdls/MdlBankAccountSaldo` | Bank account saldo |
| `MdlPembayaranTransaksi` | `Mdls/MdlPembayaranTransaksi` | Pembayaran transaksi |
| `MdlPembayaranTransaksiMain` | `Mdls/MdlPembayaranTransaksiMain` | Main pembayaran |
| `MdlPembayaranTransaksiData` | `Mdls/MdlPembayaranTransaksiData` | Data pembayaran |
| `MdlPembayaranTransaksiDataMain` | `Mdls/MdlPembayaranTransaksiDataMain` | Main data pembayaran |
| `MdlPembayaranTransaksiDataCache` | `Mdls/MdlPembayaranTransaksiDataCache` | Cache pembayaran |
| `MdlPembayaranTransaksiDataMainCache` | `Mdls/MdlPembayaranTransaksiDataMainCache` | Cache main pembayaran |
| `MdlPembayaranTransaksiDataPembelian` | `Mdls/MdlPembayaranTransaksiDataPembelian` | Data pembelian untuk pembayaran |
| `MdlPembayaranTransaksiDataPembelianMain` | `Mdls/MdlPembayaranTransaksiDataPembelianMain` | Main data pembelian |
| `MdlPembayaranTransaksiDataPembelianCache` | `Mdls/MdlPembayaranTransaksiDataPembelianCache` | Cache data pembelian |
| `MdlPembayaranTransaksiDataPembelianMainCache` | `Mdls/MdlPembayaranTransaksiDataPembelianMainCache` | Cache main data pembelian |
| `MdlRekeningPembantu` | `Mdls/MdlRekeningPembantu` | Rekening pembantu |
| `MdlRekeningPembantuTransaksiPembelian` | `Mdls/MdlRekeningPembantuTransaksiPembelian` | Rekening pembantu pembelian |
| `MdlRekeningPembantuTransaksiPembelianMain` | `Mdls/MdlRekeningPembantuTransaksiPembelianMain` | Main rekening pembantu pembelian |
| `MdlRekeningPembantuTransaksiPembelianCache` | `Mdls/MdlRekeningPembantuTransaksiPembelianCache` | Cache rekening pembantu pembelian |
| `MdlRekeningPembantuTransaksiPembelianMainCache` | `Mdls/MdlRekeningPembantuTransaksiPembelianMainCache` | Cache main rekening pembantu |
| `MdlRekeningPembantuKas` | `Mdls/MdlRekeningPembantuKas` | Rekening pembantu kas |
| `MdlRekeningPembantuBank` | `Mdls/MdlRekeningPembantuBank` | Rekening pembantu bank |
| `MdlRekeningPembantuRekeningKoran` | `Mdls/MdlRekeningPembantuRekeningKoran` | Rekening pembantu rekening koran |
| `MdlRekeningPembantuRekeningKoranMain` | `Mdls/MdlRekeningPembantuRekeningKoranMain` | Main rekening koran |
| `MdlRekeningPembantuRekeningKoranCache` | `Mdls/MdlRekeningPembantuRekeningKoranCache` | Cache rekening koran |
| `MdlRekeningPembantuRekeningKoranMainCache` | `Mdls/MdlRekeningPembantuRekeningKoranMainCache` | Cache main rekening koran |
| `MdlRekeningPembantuRelasiRekeningKoran` | `Mdls/MdlRekeningPembantuRelasiRekeningKoran` | Relasi rekening koran |
| `MdlRekeningPembantuRelasiRekeningKoranMain` | `Mdls/MdlRekeningPembantuRelasiRekeningKoranMain` | Main relasi rekening koran |
| `MdlRekeningPembantuRelasiRekeningKoranCache` | `Mdls/MdlRekeningPembantuRelasiRekeningKoranCache` | Cache relasi rekening koran |
| `MdlRekeningPembantuRelasiRekeningKoranMainCache` | `Mdls/MdlRekeningPembantuRelasiRekeningKoranMainCache` | Cache main relasi rekening koran |
| `MdlRekeningPembantuPettycash` | `Mdls/MdlRekeningPembantuPettycash` | Rekening pembantu pettycash |
| `MdlRekeningPembantuPettycashMain` | `Mdls/MdlRekeningPembantuPettycashMain` | Main pettycash |
| `MdlRekeningPembantuPettycashCache` | `Mdls/MdlRekeningPembantuPettycashCache` | Cache pettycash |
| `MdlRekeningPembantuPettycashMainCache` | `Mdls/MdlRekeningPembantuPettycashMainCache` | Cache main pettycash |
| `MdlRekeningPembantuRelasi` | `Mdls/MdlRekeningPembantuRelasi` | Relasi rekening pembantu |
| `MdlRekeningPembantuRelasiMain` | `Mdls/MdlRekeningPembantuRelasiMain` | Main relasi rekening pembantu |
| `MdlRekeningPembantuRelasiCache` | `Mdls/MdlRekeningPembantuRelasiCache` | Cache relasi rekening pembantu |
| `MdlRekeningPembantuRelasiMainCache` | `Mdls/MdlRekeningPembantuRelasiMainCache` | Cache main relasi rekening pembantu |

**Component Models (coTransaksiCore.php)**:

| Component | Model | Path | Fungsi |
|-----------|-------|------|--------|
| `ComJurnal` | `ComJurnal` | `Coms/ComJurnal` | Jurnal accounting |
| `ComRekening` | `ComRekening` | `Coms/ComRekening` | Rekening pembantu |
| `ComRekeningPembantuKas` | `ComRekeningPembantuKas` | `Coms/ComRekeningPembantuKas` | Rekening pembantu kas |
| `ComRekeningPembantuBank` | `ComRekeningPembantuBank` | `Coms/ComRekeningPembantuBank` | Rekening pembantu bank |
| `ComRekeningPembantuRekeningKoran` | `ComRekeningPembantuRekeningKoran` | `Coms/ComRekeningPembantuRekeningKoran` | Rekening pembantu rekening koran |
| `ComRekeningPembantuRekeningKoranMain` | `ComRekeningPembantuRekeningKoranMain` | `Coms/ComRekeningPembantuRekeningKoranMain` | Main rekening koran |
| `ComPaymentSrcItem` | `ComPaymentSrcItem` | `Coms/ComPaymentSrcItem` | Payment source item |
| `ComRekeningPembantuTransaksiPembelian` | `ComRekeningPembantuTransaksiPembelian` | `Coms/ComRekeningPembantuTransaksiPembelian` | Rekening pembantu transaksi pembelian |
| `ComRekeningTransaksiDataPembelian` | `ComRekeningTransaksiDataPembelian` | `Coms/ComRekeningTransaksiDataPembelian` | Rekening data pembelian |
| `ComRekeningTransaksiDataPembelianCache` | `ComRekeningTransaksiDataPembelianCache` | `Coms/ComRekeningTransaksiDataPembelianCache` | Cache data pembelian |
| `ComTransaksiDataPembelian` | `ComTransaksiDataPembelian` | `Coms/ComTransaksiDataPembelian` | Data pembelian |

---

### 5. Modul `penerimaan` (A/R Receipt — 749)

**File Config**: [`application/modules/penerimaan/config/coTransaksiUi.php`](../application/modules/penerimaan/config/coTransaksiUi.php)

**Model References (coTransaksiUi.php)**:

| Kategori | Model | Path | Fungsi |
|----------|-------|------|--------|
| `selectorModel` | `MdlNota` | `Mdls/MdlNota` | Pencarian nota/referensi |
| `pihakModel` | `MdlCustomer` | `Mdls/MdlCustomer` | Pihak customer |

**Controller Model Loading**:

| Model | Path | Fungsi |
|-------|------|--------|
| `MdlNota` | `Mdls/MdlNota` | Nota transaksi |
| `MdlCustomer` | `Mdls/MdlCustomer` | Customer |
| `MdlCabang` | `Mdls/MdlCabang` | Cabang |
| `MdlBankAccount` | `Mdls/MdlBankAccount` | Bank account |
| `MdlBankAccountSaldo` | `Mdls/MdlBankAccountSaldo` | Bank account saldo |
| `MdlPenerimaanTransaksi` | `Mdls/MdlPenerimaanTransaksi` | Penerimaan transaksi |
| `MdlPenerimaanTransaksiMain` | `Mdls/MdlPenerimaanTransaksiMain` | Main penerimaan |
| `MdlPenerimaanTransaksiData` | `Mdls/MdlPenerimaanTransaksiData` | Data penerimaan |
| `MdlPenerimaanTransaksiDataMain` | `Mdls/MdlPenerimaanTransaksiDataMain` | Main data penerimaan |
| `MdlPenerimaanTransaksiDataCache` | `Mdls/MdlPenerimaanTransaksiDataCache` | Cache penerimaan |
| `MdlPenerimaanTransaksiDataMainCache` | `Mdls/MdlPenerimaanTransaksiDataMainCache` | Cache main penerimaan |
| `MdlRekeningPembantu` | `Mdls/MdlRekeningPembantu` | Rekening pembantu |
| `MdlRekeningPembantuTransaksiPenjualan` | `Mdls/MdlRekeningPembantuTransaksiPenjualan` | Rekening pembantu penjualan |
| `MdlRekeningPembantuTransaksiPenjualanMain` | `Mdls/MdlRekeningPembantuTransaksiPenjualanMain` | Main rekening pembantu penjualan |
| `MdlRekeningPembantuTransaksiPenjualanCache` | `Mdls/MdlRekeningPembantuTransaksiPenjualanCache` | Cache rekening pembantu penjualan |
| `MdlRekeningPembantuTransaksiPenjualanMainCache` | `Mdls/MdlRekeningPembantuTransaksiPenjualanMainCache` | Cache main rekening pembantu penjualan |
| `MdlRekeningPembantuKas` | `Mdls/MdlRekeningPembantuKas` | Rekening pembantu kas |
| `MdlRekeningPembantuBank` | `Mdls/MdlRekeningPembantuBank` | Rekening pembantu bank |
| `MdlRekeningPembantuRelasi` | `Mdls/MdlRekeningPembantuRelasi` | Relasi rekening pembantu |
| `MdlRekeningPembantuRelasiMain` | `Mdls/MdlRekeningPembantuRelasiMain` | Main relasi rekening pembantu |
| `MdlRekeningPembantuRelasiCache` | `Mdls/MdlRekeningPembantuRelasiCache` | Cache relasi rekening pembantu |
| `MdlRekeningPembantuRelasiMainCache` | `Mdls/MdlRekeningPembantuRelasiMainCache` | Cache main relasi rekening pembantu |

**Component Models (coTransaksiCore.php)**:

| Component | Model | Path | Fungsi |
|-----------|-------|------|--------|
| `ComJurnal` | `ComJurnal` | `Coms/ComJurnal` | Jurnal accounting |
| `ComRekening` | `ComRekening` | `Coms/ComRekening` | Rekening pembantu |
| `ComRekeningPembantuKas` | `ComRekeningPembantuKas` | `Coms/ComRekeningPembantuKas` | Rekening pembantu kas |
| `ComPaymentSrcItem` | `ComPaymentSrcItem` | `Coms/ComPaymentSrcItem` | Payment source item |
| `ComRekeningPembantuTransaksiPenjualan` | `ComRekeningPembantuTransaksiPenjualan` | `Coms/ComRekeningPembantuTransaksiPenjualan` | Rekening pembantu transaksi penjualan |
| `ComRekeningTransaksiDataPenjualan` | `ComRekeningTransaksiDataPenjualan` | `Coms/ComRekeningTransaksiDataPenjualan` | Rekening data penjualan |
| `ComRekeningTransaksiDataPenjualanCache` | `ComRekeningTransaksiDataPenjualanCache` | `Coms/ComRekeningTransaksiDataPenjualanCache` | Cache data penjualan |
| `ComTransaksiDataPenjualan` | `ComTransaksiDataPenjualan` | `Coms/ComTransaksiDataPenjualan` | Data penjualan |
| `ComTransaksiDataPenjualanBridging` | `ComTransaksiDataPenjualanBridging` | `Coms/ComTransaksiDataPenjualanBridging` | **Cross-module** bridging |

---

### 6. Modul `kas` (Cash Balance Interchange — 1757)

**File Config**: [`application
/modules/kas/config/coTransaksiUi.php`](../application/modules/kas/config/coTransaksiUi.php)

**Model References (coTransaksiUi.php)**:

| Kategori | Model | Path | Fungsi |
|----------|-------|------|--------|
| `selectorModel` | `MdlNota` | `Mdls/MdlNota` | Pencarian nota |
| `selectorModel` | `MdlUangMuka` | `Mdls/MdlUangMuka` | Pencarian uang muka |
| `selectorModel` | `MdlKasStatic` | `Mdls/MdlKasStatic` | Data kas statis |
| `selectorModel` | `MdlLockerStock` | `Mdls/MdlLockerStock` | Stok locker |
| `selectorModel` | `MdlBankAccountSaldo` | `Mdls/MdlBankAccountSaldo` | Saldo bank account |
| `selectorSrcModel` | `MdlUangMuka` | `Mdls/MdlUangMuka` | Source uang muka |
| `selectorSrcModel` | `MdlKasStatic` | `Mdls/MdlKasStatic` | Source kas statis |
| `selectorSrcModel` | `MdlBankAccountSaldo` | `Mdls/MdlBankAccountSaldo` | Source saldo bank |
| `selectedPrice.model` | `MdlHargaSupplies` | `Mdls/MdlHargaSupplies` | Harga supplies |
| `pihakModel` | `MdlCustomer` | `Mdls/MdlCustomer` | Pihak customer |
| `pihakModel` | `MdlSupplier` | `Mdls/MdlSupplier` | Pihak supplier |
| `pihakModel` | `MdlCabang` | `Mdls/MdlCabang` | Pihak cabang |
| `pihakModel` | `MdlCustomer_and_pre` | `Mdls/MdlCustomer_and_pre` | Pihak customer/pre |
| `pihakModel` | `MdlGudang` | `Mdls/MdlGudang` | Pihak gudang |

**Controller Model Loading**:

| Model | Path | Fungsi |
|-------|------|--------|
| `MdlKasTransaksi` | `Mdls/MdlKasTransaksi` | Transaction model utama |
| `MdlNota` | `Mdls/MdlNota` | Nota transaksi |
| `MdlCustomer` | `Mdls/MdlCustomer` | Customer |
| `MdlSupplier` | `Mdls/MdlSupplier` | Supplier |
| `MdlCabang` | `Mdls/MdlCabang` | Cabang |
| `MdlBankAccount` | `Mdls/MdlBankAccount` | Bank account |
| `MdlBankAccountSaldo` | `Mdls/MdlBankAccountSaldo` | Bank account saldo |
| `MdlRekeningPembantu` | `Mdls/MdlRekeningPembantu` | Rekening pembantu |
| `MdlRekeningPembantuKas` | `Mdls/MdlRekeningPembantuKas` | Rekening pembantu kas |
| `MdlRekeningPembantuBank` | `Mdls/MdlRekeningPembantuBank` | Rekening pembantu bank |
| `MdlRekeningPembantuRelasi` | `Mdls/MdlRekeningPembantuRelasi` | Relasi rekening pembantu |
| `MdlRekeningPembantuRelasiMain` | `Mdls/MdlRekeningPembantuRelasiMain` | Main relasi rekening pembantu |
| `MdlRekeningPembantuRelasiCache` | `Mdls/MdlRekeningPembantuRelasiCache` | Cache relasi rekening pembantu |
| `MdlRekeningPembantuRelasiMainCache` | `Mdls/MdlRekeningPembantuRelasiMainCache` | Cache main relasi rekening pembantu |
| `MdlRekeningPembantuTransaksiPenjualan` | `Mdls/MdlRekeningPembantuTransaksiPenjualan` | Rekening pembantu penjualan |
| `MdlRekeningPembantuTransaksiPenjualanMain` | `Mdls/MdlRekeningPembantuTransaksiPenjualanMain` | Main rekening pembantu penjualan |
| `MdlRekeningPembantuTransaksiPenjualanCache` | `Mdls/MdlRekeningPembantuTransaksiPenjualanCache` | Cache rekening pembantu penjualan |
| `MdlRekeningPembantuTransaksiPenjualanMainCache` | `Mdls/MdlRekeningPembantuTransaksiPenjualanMainCache` | Cache main rekening pembantu penjualan |
| `MdlRekeningPembantuTransaksiPembelian` | `Mdls/MdlRekeningPembantuTransaksiPembelian` | Rekening pembantu pembelian |
| `MdlRekeningPembantuTransaksiPembelianMain` | `Mdls/MdlRekeningPembantuTransaksiPembelianMain` | Main rekening pembantu pembelian |
| `MdlRekeningPembantuTransaksiPembelianCache` | `Mdls/MdlRekeningPembantuTransaksiPembelianCache` | Cache rekening pembantu pembelian |
| `MdlRekeningPembantuTransaksiPembelianMainCache` | `Mdls/MdlRekeningPembantuTransaksiPembelianMainCache` | Cache main rekening pembantu pembelian |
| `MdlRekeningPembantuTransaksiDistribusi` | `Mdls/MdlRekeningPembantuTransaksiDistribusi` | Rekening pembantu distribusi |
| `MdlRekeningPembantuTransaksiDistribusiMain` | `Mdls/MdlRekeningPembantuTransaksiDistribusiMain` | Main rekening pembantu distribusi |
| `MdlRekeningPembantuTransaksiDistribusiCache` | `Mdls/MdlRekeningPembantuTransaksiDistribusiCache` | Cache rekening pembantu distribusi |
| `MdlRekeningPembantuTransaksiDistribusiMainCache` | `Mdls/MdlRekeningPembantuTransaksiDistribusiMainCache` | Cache main rekening pembantu distribusi |

**Component Models (coTransaksiCore.php)**:

| Component | Model | Path | Fungsi |
|-----------|-------|------|--------|
| `ComLockerValue` | `ComLockerValue` | `Coms/ComLockerValue` | Value locking |
| `ComJurnal_activity` | `ComJurnal_activity` | `Coms/ComJurnal_activity` | Activity logging |
| `ComJurnal_activityMain` | `ComJurnal_activityMain` | `Coms/ComJurnal_activityMain` | Main activity logging |
| `ComPaymentSrcItem` | `ComPaymentSrcItem` | `Coms/ComPaymentSrcItem` | Payment source item |

---

### 7. Modul `biaya` (Expenses)

**File Config**: [`application/modules/biaya/config/coTransaksiUi.php`](../application/modules/biaya/config/coTransaksiUi.php)

**Model References (coTransaksiUi.php)**:

| Kategori | Model | Path | Fungsi |
|----------|-------|------|--------|
| `selectorModel` | `MdlDtaBiayaProduksi` | `Mdls/MdlDtaBiayaProduksi` | Data biaya produksi |
| `selectorModel` | `MdlLockerStockSupplies` | `Mdls/MdlLockerStockSupplies` | Stok supplies |
| `selectorModel` | `MdlDtaBiayaUsaha` | `Mdls/MdlDtaBiayaUsaha` | Data biaya usaha |
| `selectorModel` | `MdlDtaBiayaUmum` | `Mdls/MdlDtaBiayaUmum` | Data biaya umum |
| `selectorModel` | `MdlJasa` | `Mdls/MdlJasa` | Jasa |
| `selectorModel` | `MdlNotaItem` | `Mdls/MdlNotaItem` | Item nota |
| `selectorModel` | `MdlBiayaJasaStatic` | `Mdls/MdlBiayaJasaStatic` | Biaya jasa statis |
| `selectorModel` | `MdlDtaSubPendapatan` | `Mdls/MdlDtaSubPendapatan` | Data sub pendapatan |
| `selectorModel` | `MdlDtaBebanLainLain` | `Mdls/MdlDtaBebanLainLain` | Data beban lain-lain |
| `selectorModel` | `MdlDtaBiayaProject` | `Mdls/MdlDtaBiayaProject` | Data biaya project |
| `selectorModel` | `MdlGaji` | `Mdls/MdlGaji` | Data gaji |
| `selectorSrcModel` | *(same as selectorModel)* | *(same)* | Source items |
| `selectedPrice.model` | `MdlHargaSupplies` | `Mdls/MdlHargaSupplies` | Harga supplies |
| `pihakModel` | `MdlCabang` | `Mdls/MdlCabang` | Pihak cabang |
| `pihakModel` | `MdlCabangNonProduksi` | `Mdls/MdlCabangNonProduksi` | Cabang non-produksi |
| `pihakModel` | `MdlCabangProduksi` | `Mdls/MdlCabangProduksi` | Cabang produksi |
| `pihakModel` | `MdlSupplier` | `Mdls/MdlSupplier` | Pihak supplier |
| `pihakModel` | `MdlProdukProject` | `Mdls/MdlProdukProject` | Produk project |
| `selectorModelAuto` | `MdlProjectKomponenBiayaDetailsRabSub` | `Mdls/MdlProjectKomponenBiayaDetailsRabSub` | Auto-complete RAB |
| `selectorModelAuto` | `MdlGaji` | `Mdls/MdlGaji` | Auto-complete gaji |
| `selectorSrcModelAuto` | `MdlProjectKomponenBiayaDetailsRabSub` | `Mdls/MdlProjectKomponenBiayaDetailsRabSub` | Auto-complete source RAB |
| `selectorSrcModelAuto` | `MdlGaji` | `Mdls/MdlGaji` | Auto-complete source gaji |

**Controller Model Loading**:

| Model | Path | Fungsi |
|-------|------|--------|
| `MdlBiayaTransaksi` | `Mdls/MdlBiayaTransaksi` | Transaction model utama |
| `MdlNota` | `Mdls/MdlNota` | Nota transaksi |
| `MdlSupplier` | `Mdls/MdlSupplier` | Supplier |
| `MdlCustomer` | `Mdls/MdlCustomer` | Customer |
| `MdlCabang` | `Mdls/MdlCabang` | Cabang |
| `MdlGudang` | `Mdls/MdlGudang` | Gudang |
| `MdlBankAccount` | `Mdls/MdlBankAccount` | Bank account |
| `MdlBankAccountSaldo` | `Mdls/MdlBankAccountSaldo` | Bank account saldo |
| `MdlProduk` | `Mdls/MdlProduk` | Produk |
| `MdlProduk2` | `Mdls/MdlProduk2` | Produk (alternate) |
| `MdlLockerStockSupplies` | `Mdls/MdlLockerStockSupplies` | Stok supplies |
| `MdlDtaBiayaProduksi` | `Mdls/MdlDtaBiayaProduksi` | Data biaya produksi |
| `MdlDtaBiayaUsaha` | `Mdls/MdlDtaBiayaUsaha` | Data biaya usaha |
| `MdlDtaBiayaUmum` | `Mdls/MdlDtaBiayaUmum` | Data biaya umum |
| `MdlDtaSubPendapatan` | `Mdls/MdlDtaSubPendapatan` | Data sub pendapatan |
| `MdlDtaBebanLainLain` | `Mdls/MdlDtaBebanLainLain` | Data beban lain-lain |
| `MdlDtaBiayaProject` | `Mdls/MdlDtaBiayaProject` | Data biaya project |
| `MdlGaji` | `Mdls/MdlGaji` | Data gaji |
| `MdlJasa` | `Mdls/MdlJasa` | Jasa |
| `MdlProdukProject` | `Mdls/MdlProdukProject` | Produk project |
| `MdlProjectKomponenBiayaDetailsRabSub` | `Mdls/MdlProjectKomponenBiayaDetailsRabSub` | RAB sub details |
| `MdlRekeningPembantu` | `Mdls/MdlRekeningPembantu` | Rekening pembantu |
| `MdlRekeningPembantuKas` | `Mdls/MdlRekeningPembantuKas` | Rekening pembantu kas |
| `MdlRekeningPembantuBank` | `Mdls/MdlRekeningPembantuBank` | Rekening pembantu bank |
| `MdlRekeningPembantuRelasi` | `Mdls/MdlRekeningPembantuRelasi` | Relasi rekening pembantu |
| `MdlRekeningPembantuRelasiMain` | `Mdls/MdlRekeningPembantuRelasiMain` | Main relasi rekening pembantu |
| `MdlRekeningPembantuRelasiCache` | `Mdls/MdlRekeningPembantuRelasiCache` | Cache relasi rekening pembantu |
| `MdlRekeningPembantuRelasiMainCache` | `Mdls/MdlRekeningPembantuRelasiMainCache` | Cache main relasi rekening pembantu |
| `MdlRekeningPembantuTransaksiPenjualan` | `Mdls/MdlRekeningPembantuTransaksiPenjualan` | Rekening pembantu penjualan |
| `MdlRekeningPembantuTransaksiPenjualanMain` | `Mdls/MdlRekeningPembantuTransaksiPenjualanMain` | Main rekening pembantu penjualan |
| `MdlRekeningPembantuTransaksiPenjualanCache` | `Mdls/MdlRekeningPembantuTransaksiPenjualanCache` | Cache rekening pembantu penjualan |
| `MdlRekeningPembantuTransaksiPenjualanMainCache` | `Mdls/MdlRekeningPembantuTransaksiPenjualanMainCache` | Cache main rekening pembantu penjualan |
| `MdlRekeningPembantuTransaksiPembelian` | `Mdls/MdlRekeningPembantuTransaksiPembelian` | Rekening pembantu pembelian |
| `MdlRekeningPembantuTransaksiPembelianMain` | `Mdls/MdlRekeningPembantuTransaksiPembelianMain` | Main rekening pembantu pembelian |
| `MdlRekeningPembantuTransaksiPembelianCache` | `Mdls/MdlRekeningPembantuTransaksiPembelianCache` | Cache rekening pembantu pembelian |
| `MdlRekeningPembantuTransaksiPembelianMainCache` | `Mdls/MdlRekeningPembantuTransaksiPembelianMainCache` | Cache main rekening pembantu pembelian |
| `MdlRekeningPembantuTransaksiDistribusi` | `Mdls/MdlRekeningPembantuTransaksiDistribusi` | Rekening pembantu distribusi |
| `MdlRekeningPembantuTransaksiDistribusiMain` | `Mdls/MdlRekeningPembantuTransaksiDistribusiMain` | Main rekening pembantu distribusi |
| `MdlRekeningPembantuTransaksiDistribusiCache` | `Mdls/MdlRekeningPembantuTransaksiDistribusiCache` | Cache rekening pembantu distribusi |
| `MdlRekeningPembantuTransaksiDistribusiMainCache` | `Mdls/MdlRekeningPembantuTransaksiDistribusiMainCache` | Cache main rekening pembantu distribusi |

**Component Models (coTransaksiCore.php)**:

| Component | Model | Path | Fungsi |
|-----------|-------|------|--------|
| `ComLockerStockSupplies` | `ComLockerStockSupplies` | `Coms/ComLockerStockSupplies` | Supplies stock locking |
| `ComTransaksiItemUpdate` | `ComTransaksiItemUpdate` | `Coms/ComTransaksiItemUpdate` | Transaction item update |

---

### 8. Modul `taxes` (Tax Management)

**File Config**: [`application/modules/taxes/config/coTransaksiUi.php`](../application/modules/taxes/config/coTransaksiUi.php)

**Model References (coTransaksiUi.php)**:

| Kategori | Model | Path | Fungsi |
|----------|-------|------|--------|
| `selectorModel` | `MdlObjekPajak1` | `Mdls/MdlObjekPajak1` | Objek pajak (tipe 1) |
| `selectorModel` | `MdlObjekPajak` | `Mdls/MdlObjekPajak` | Objek pajak |
| `selectorModel` | `MdlProduk2` | `Mdls/MdlProduk2` | Produk |
| `selectorModel` | `MdlNota` | `Mdls/MdlNota` | Nota transaksi |
| `selectorModel` | `MdlPph29Static` | `Mdls/MdlPph29Static` | Data PPh 29 statis |
| `selectorModel` | `MdlPph25Static` | `Mdls/MdlPph25Static` | Data PPh 25 statis |
| `selectorModel` | `MdlPphPasal` | `Mdls/MdlPphPasal` | Data PPh pasal |
| `selectorSrcModel` | *(same as selectorModel)* | *(same)* | Source items |
| `selectedPrice.model` | `MdlHargaProduk` | `Mdls/MdlHargaProduk` | Harga produk |
| `pihakModel` | `MdlNota` | `Mdls/MdlNota` | Pihak nota |
| `pihakModel` | `MdlSupplier` | `Mdls/MdlSupplier` | Pihak supplier |
| `pihakModel` | `MdlCustomer_and_pre` | `Mdls/MdlCustomer_and_pre` | Pihak customer/pre |

**Controller Model Loading**:

| Model | Path | Fungsi |
|-------|------|--------|
| `MdlTaxesTransaksi` | `Mdls/MdlTaxesTransaksi` | Transaction model utama |
| `MdlNota` | `Mdls/MdlNota` | Nota transaksi |
| `MdlSupplier` | `Mdls/MdlSupplier` | Supplier |
| `MdlCustomer` | `Mdls/MdlCustomer` | Customer |
| `MdlCabang` | `Mdls/MdlCabang` | Cabang |
| `MdlGudang` | `Mdls/MdlGudang` | Gudang |
| `MdlProduk` | `Mdls/MdlProduk` | Produk |
| `MdlProduk2` | `Mdls/MdlProduk2` | Produk (alternate) |
| `MdlObjekPajak` | `Mdls/MdlObjekPajak` | Objek pajak |
| `MdlObjekPajak1` | `Mdls/MdlObjekPajak1` | Objek pajak tipe 1 |
| `MdlPph29Static` | `Mdls/MdlPph29Static` | Data PPh 29 statis |
| `MdlPph25Static` | `Mdls/MdlPph25Static` | Data PPh 25 statis |
| `MdlPphPasal` | `Mdls/MdlPphPasal` | Data PPh pasal |
| `MdlRekeningPembantu` | `Mdls/MdlRekeningPembantu` | Rekening pembantu |
| `MdlRekeningPembantuKas` | `Mdls/MdlRekeningPembantuKas` | Rekening pembantu kas |
| `MdlRekeningPembantuBank` | `Mdls/MdlRekeningPembantuBank` | Rekening pembantu bank |
| `MdlRekeningPembantuRelasi` | `Mdls/MdlRekeningPembantuRelasi` | Relasi rekening pembantu |
| `MdlRekeningPembantuRelasiMain` | `Mdls/MdlRekeningPembantuRelasiMain` | Main relasi rekening pembantu |
| `MdlRekeningPembantuRelasiCache` | `Mdls/MdlRekeningPembantuRelasiCache` | Cache relasi rekening pembantu |
| `MdlRekeningPembantuRelasiMainCache` | `Mdls/MdlRekeningPembantuRelasiMainCache` | Cache main relasi rekening pembantu |

**Component Models (coTransaksiCore.php)**:

| Component | Model | Path | Fungsi |
|-----------|-------|------|--------|
| `ComJurnal` | `ComJurnal` | `Coms/ComJurnal` | Jurnal accounting |
| `ComRekening` | `ComRekening` | `Coms/ComRekening` | Rekening pembantu |

---

## URL-Driven Models

### Dari [`routes.php`](../application/config/routes.php)

| Route | Controller | Keterangan |
|-------|-----------|------------|
| `default_controller` | `Welcome/index/` | Default route |
| `404_override` | `Error/err_404` | 404 handler |

### Dari [`heNavigation.php`](../application/config/heNavigation.php)

Navigation structure mendefinisikan menu yang di-render oleh controller masing-masing modul. Setiap menu item mengarah ke URL yang di-handle oleh controller modul terkait.

---

## Cross-Module Model Dependency Summary

### Direct Cross-Module Model References

| Modul Sumber | Modul Tujuan | Model | Path | Keterangan |
|-------------|-------------|-------|------|------------|
| `pembelian` | `pembayaran` | `MdlPembayaranTransaksi` | `../../pembayaran/models/MdlPembayaranTransaksi` | Payment source checking |
| `pembelian` | `distribusi` | `MdlDistribusiTransaksi` | `../../distribusi/models/MdlDistribusiTransaksi` | Distribution data |
| `pembelian` | `pembelian` | `ComTransaksiDataPembelianBridging` | `../../pembelian/models/Coms/...` | Self-bridging |
| `pembelian` | `penjualan` | `ComTransaksiDataPenjualanBridging` | `../../penjualan/models/Coms/...` | Sales data bridging |
| `penjualan` | `penjualan` | `ComTransaksiDataPenjualanBridging` | `../../penjualan/models/Coms/...` | Self-bridging |
| `penerimaan` | `penjualan` | `ComTransaksiDataPenjualanBridging` | `Coms/ComTransaksiDataPenjualanBridging` | Sales data bridging |

### Shared Model Categories

| Kategori Model | Modul yang Menggunakan |
|----------------|----------------------|
| `MdlProduk`, `MdlProduk2` | Semua modul (pembelian, penjualan, distribusi, biaya, taxes) |
| `MdlSupplier` | pembelian, pembayaran, biaya, taxes |
| `MdlCustomer` | penjualan, pembayaran, penerimaan, kas, taxes |
| `MdlCabang` | Semua modul |
| `MdlGudang` | pembelian, penjualan, distribusi, biaya, taxes |
| `MdlBankAccount` | pembayaran, penerimaan, kas, biaya |
| `MdlRekeningPembantu*` | pembayaran, penerimaan, kas, biaya, taxes |
| `MdlLockerStock` | pembelian, penjualan, distribusi, kas |
| `MdlNota`, `MdlNotaItem` | pembelian, penjualan, distribusi, pembayaran, penerimaan, biaya, taxes |

---

## Ringkasan Model Loading Pattern per Modul

| Modul | Config-driven (coTransaksiUi) | Controller (load->model) | Component (Coms/) | PreProcessor (Preprocs/) | Cross-module |
|-------|------------------------------|-------------------------|-------------------|-------------------------|-------------|
| `pembelian` | ✅ 20 refs | ✅ 40+ models | ✅ 12 Coms | ✅ 4 Pre | ✅ 3 cross |
| `penjualan` | ✅ 16 refs | ✅ 30+ models | ✅ 7 Coms | ❌ | ✅ 1 cross |
| `distribusi` | ✅ 10 refs | ✅ 25+ models | ✅ 6 Coms | ❌ | ❌ |
| `pembayaran` | ✅ 4 refs | ✅ 40+ models | ✅ 11 Coms | ❌ | ❌ |
| `penerimaan` | ✅ 2 refs | ✅ 25+ models | ✅ 9 Coms | ❌ | ✅ 1 cross |
| `kas` | ✅ 15 refs | ✅ 30+ models | ✅ 4 Coms | ❌ | ❌ |
| `biaya` | ✅ 20+ refs | ✅ 40+ models | ✅ 2 Coms | ❌ | ❌ |
| `taxes` | ✅ 12 refs | ✅ 20+ models | ✅ 2 Coms | ❌ | ❌ |

---

## Catatan Tahap 3

1. **Model Loading Terbanyak**: Modul `pembelian` memiliki model references terbanyak (20+ di config, 40+ di controller) karena menangani berbagai jenis item (produk, supplies, jasa, expense, produk bekas).
2. **Cross-Module Paling Aktif**: Modul `pembelian` melakukan bridging ke `pembayaran`, `distribusi`, dan `penjualan` — menjadikannya modul dengan dependency tertinggi.
3. **Shared Core Models**: `MdlProduk`, `MdlSupplier`, `MdlCustomer`, `MdlCabang`, `MdlGudang` digunakan oleh hampir semua modul.
4. **Rekening Pembantu**: Modul `pembayaran` memiliki hirarki rekening pembantu paling kompleks (Kas, Bank, RekeningKoran, Relasi, Pettycash — masing-masing dengan Main + Cache).
5. **Dynamic Loading**: Component (Coms/) dan PreProcessor (Preprocs/) di-load secara dinamis oleh engine transaksi, bukan oleh controller.
6. **Auto-loaded Global Models**: `MdlMother`, `MdlMother_static`, `MdlEmployee`, `MdlActivityLog`, `MdlBiaya` tersedia di semua controller tanpa perlu load manual.
