# Porting data master dari pos ke CI4

Pembaruan: 16 Oktober 2026. Pekerjaan pada tahap ini terbatas pada master; controller transaksi tidak diubah.

Seluruh 33 file `pos/master/*.php` mempunyai route GET/POST di CI4, dengan URL tanpa ekstensi maupun `.php`, dan filter `auth`. Ini menunjukkan cakupan implementasi, bukan jaminan kesetaraan seluruh perilaku di database produksi.

## Implementasi yang sudah ada sebelumnya

- Kategori, satuan, customer, supplier.
- Daftar/tambah produk dan edit produk (termasuk varian, addon, galeri).

## Implementasi tambahan pada tahap ini

| Kelompok | Path di bawah `/master/` |
| --- | --- |
| Pendukung | `kurir`, `packing`, `salesman`, `outlets`, `resellers` |
| Pembayaran dan sumber | `tipe-bayar`, `sumber_penjualan` |
| Harga | `harga_produk`, `harga_reseller`, `harga_khusus`, `produk_pasar`, `produk_shopee` |
| Promo | `discounts`, `produk_diskon`, `promo_produk`, `affiliate` |
| Produk | `product_groups`, `produk_form`, `produk_gallery`, `produk_update_massal` |
| Cetak | `cetak_barcode`, `cetak_label_harga` |
| Marketplace | `marketplaces` (termasuk pengelolaan Shopee dari master lama) |
| Rental | `rental`, `rental_gallery` |
| Pemantauan | `audit_trail`, `tracking_visitors` |

Query menggunakan koneksi CI4 bersama, halaman menggunakan layout CI4, respons AJAX menggunakan respons JSON CI4, dan unggahan memakai `public/uploads/`. Tidak ada dependensi runtime pada file PHP dari folder `pos`.

Endpoint `ajax/product_lookup`, `ajax/customer_lookup`, `ajax/customer_search`, dan `ajax/supplier_search` juga sudah didaftarkan, termasuk varian `.php`. Query hapus pada URL kategori/satuan/customer/supplier lama diteruskan ke handler hapus yang sudah ada.

Validasi tambahan membatasi komponen paket, reseller, dan produk rental berdasarkan toko dalam sesi. Validasi outlet dilakukan sebelum mengubah outlet default. Named bindings pada cetak barcode/label dan parameter pagination tracking disesuaikan dengan CI4.

## Validasi

- PHP lint: 76 file controller, view master, konfigurasi route, dan helper database lulus.
- Seluruh PHPUnit suite: **14 tes, 366 assertion**, lulus.
- `tests/unit/MasterPortTest.php`: 9 tes, 359 assertion, mencakup route semua master, controller daftar, render layout, dispatch berulang, create/edit kurir, filter cetak/tracking, validasi diskon, dan pembatasan komponen paket antar toko.
- Tes memakai koneksi database tiruan; tidak menulis data MySQL aplikasi atau memanggil integrasi eksternal.

Jalankan dari folder `pos_kiosq_id_ci`:

```sh
/Applications/MAMP/bin/php/php8.3.14/bin/php vendor/bin/phpunit --no-coverage
```

## Pemeriksaan operasional yang masih diperlukan

- Uji tambah/edit/nonaktif/hapus dengan data MySQL asli dan role toko yang sebenarnya.
- Uji unggah/urut/hapus galeri dan izin tulis `public/uploads/`.
- Uji cetak barcode/label melalui browser/printer.
- Uji Shopee dengan kredensial toko dan endpoint yang sesuai; tindakan sinkronisasi dapat mengubah data eksternal.
- Bandingkan perilaku master yang telah diporting sebelumnya dengan versi `pos` terkini. Keberadaan route dan tes ini tidak membuktikan seluruh fitur lama identik.

Data transaksi menjadi tahap berikutnya setelah pemeriksaan master.
