--- name: Agent Modul Penjualan description: Gunakan skill ini secara otomatis ketika instruksi berkaitan dengan modul penjualan, Sales Order (SO), Invoice, Amandemen Invoice, Delivery Order (DO), Retur Penjualan, atau transaksi customer lainnya. --- # 🛒 Protokol Khusus Modul Penjualan **PENTING**: Agent yang membaca file ini TETAP terikat mutlak pada Protokol Gerbang Agent (AGENTS.md) secara global. Aturan di bawah ini mendefinisikan "Sub-Agent" atau spesialisasi yang **HANYA ADA** di dalam ekosistem modul Penjualan. --- ## 🤖 SUB-AGENT 1: The Pricing & Tax Engine (Kalkulator Harga) Agent yang bertugas menangani modul penjualan **WAJIB** memperhatikan kompleksitas harga yang tidak ada di modul lain (seperti mutasi gudang). - **Tanggung Jawab**: Menghitung Tiering Diskon, Promo Customer, dan PPN. - **Aturan Kolaborasi**: Jangan pernah menghitung total harga murni di sisi Frontend (JavaScript). Frontend hanya untuk display. Validasi dan kalkulasi akhir **WAJIB** dilakukan oleh backend (PHP) di file `coTransaksiValues.php` atau helper khusus kalkulasi penjualan sebelum data di-insert ke database. ## 🤖 SUB-AGENT 2: The Credit Controller (Validasi Limit Piutang) Berbeda dengan modul Pembelian (Purchase), Penjualan memiliki risiko gagal bayar. - **Tanggung Jawab**: Melakukan intersep (blokir) jika customer melebihi *Credit Limit* atau memiliki piutang jatuh tempo (*Overdue*). - **Aturan Kolaborasi**: Pengecekan limit kredit harus diletakkan pada tahapan **Early Validation Pattern** (merujuk pada Aturan Global 3.8). Lakukan fail-fast di controller `FollowUp.php` atau `Create.php` sebelum memanggil `$this->db->trans_start()`. ## 🤖 SUB-AGENT 3: The Amendment Specialist (Amandemen Invoice) *(Berlaku khusus untuk modul `amandemen_invoice`)* Modul penjualan seringkali membutuhkan revisi dokumen yang sudah final (Invoice), yang tidak boleh merusak riwayat pengiriman (DO) atau stok. - **Tanggung Jawab**: Menangani logika "Amandemen" (seperti pembatalan parsial, perubahan harga pasca-kirim, dsb). - **Aturan Kolaborasi**: - JANGAN menghapus baris data lama (DELETE). - Gunakan metode *Counter-Document* (membuat dokumen minus/reversal) atau update status `trash_4 = 1` pada dokumen lama dan menerbitkan nomor dokumen baru dengan referensi (`link_id`) ke dokumen lama. - Perhatikan relasi ketat antara tabel `transaksi` (Invoice) dengan `transaksi` (Surat Jalan/DO). ## 🤖 SUB-AGENT 4: The Fulfillment Router (Pengiriman & DO) - **Tanggung Jawab**: Memisahkan stok yang di-hold (Booking SO) menjadi stok keluar nyata (DO). - **Aturan Kolaborasi**: Saat memproses Surat Jalan (DO), wajib menggunakan library `ComLockerStockDualWrite` untuk mengubah status stok dari *Hold* (Booking) menjadi *Out* (Keluar), dan mengaitkannya dengan entitas pengiriman. --- ## 🛠️ Panduan Integrasi (Improvement terhadap Agent Global) 1. **Sinergi dengan Pola Draf Global (Aturan 3.11):** Jika kasir/sales sedang membuat SO yang panjang di tablet, pastikan **Sub-Agent Pricing** menyimpan kalkulasi sementara ke MongoDB Draft. 2. **Sinergi dengan Sesi Scanner (Aturan 3.9):** Untuk modul pengiriman (Delivery) yang menggunakan scanner di gudang, **Sub-Agent Fulfillment** harus mematuhi larangan penggunaan `