JCOM INVENTORY V2.10.208 - PATCH KHUSUS
FIX MIGRASI HISTORI PENJUALAN MODE 1 / PASSIVE - V8
======================================================

Tujuan
------
Memperbaiki validasi file Migrasi Histori Penjualan multi-item yang sebelumnya
menganggap nilai header pada baris item lanjutan sebagai konflik, menolak barang
yang sama lebih dari sekali dalam satu invoice, dan terlalu ketat terhadap nama
barang histori dengan suffix kemasan X<angka>.

File yang ditimpa
-----------------
includes/historical_migration.php

Perubahan
---------
1. Untuk invoice Penjualan Historis multi-item, data level invoice mengikuti
   BARIS PERTAMA invoice sebagai sumber resmi:
   - Tanggal Jatuh Tempo
   - No/Tanggal Faktur Pajak
   - No Surat Jalan
   - Diskon Invoice
   - PPN
   - Sudah Dibayar s.d. Cut-off
   - Jenis Penjualan
   - Catatan

   Baris item lanjutan tidak lagi menggagalkan import bila kolom tersebut kosong,
   0, formula Excel, atau berisi nilai turunan berbeda.

2. Yang tetap wajib konsisten antarbaris invoice:
   - Tanggal Invoice
   - Pelanggan

3. Barang yang sama boleh muncul beberapa kali pada invoice sumber.
   Importer menggabungkannya otomatis dalam basis UOM kecil:
   - qty dijumlahkan,
   - total nilai baris dijumlahkan persis,
   - harga per UOM kecil dihitung weighted-average,
   - HPP historis item (untuk penjualan) dijumlahkan,
   - schema database tidak berubah.

4. Pencocokan nama barang histori Penjualan mendapat fallback alias kemasan yang
   KONSERVATIF: hanya suffix "X<angka>" di UJUNG nama yang boleh diabaikan.
   Contoh:
   - RAJAXONE 1L X20 -> RAJAXONE 1L
   - JOSSXONE 1L X20 -> JOSSXONE 1L
   - MACAN 1L X20 -> MACAN 1L
   - BERSILALANG 1L dapat cocok ke Bersilalang 1L x20 bila hanya ada satu kandidat aktif.

   Tidak ada fuzzy matching bebas. PROMORIS 20L tidak akan dipasangkan ke PROMOTOP,
   dan JOSSXONE 20L tidak akan dipaksakan ke JOSSXONE 1L.

5. Patch mewarisi seluruh perbaikan Pembelian Historis V7, termasuk cache resolver
   dan diagnostic validation logging yang sudah terpasang sebelumnya.

Data yang tetap harus diperbaiki pada file/master
-------------------------------------------------
A. BRG-202608-0037 / ALPHA 16L
   File memakai L, sedangkan Master aktif menyediakan PCS / Unit.
   Jangan dikonversi otomatis. Koreksi Master jika memang 1 PCS = 16 L, atau gunakan
   satuan yang benar sesuai data historis.

B. BRG-202608-0297 / GANDASIL D 500GR
   File memakai L, sedangkan barang berbasis GRAM/KILOGRAM.
   Koreksi Satuan Qty/Harga pada XLSX menjadi KILOGRAM/GRAM sesuai angka sumber.

C. PROMORIS 20L
   Belum ditemukan padanan Master aktif yang pasti. Tambahkan/koreksi Master Barang
   atau ubah Nama/Kode di XLSX ke barang yang benar.

D. JOSSXONE 20L
   Belum ditemukan padanan Master aktif yang pasti. Jangan otomatis dipetakan ke
   JOSSXONE 1L. Tambahkan/koreksi Master Barang atau XLSX.

Keamanan
--------
- Tidak menaikkan versi aplikasi.
- Tidak mengubah schema/database.
- Tidak mengubah changelog.
- Mode passive tetap tidak mempengaruhi stok.
- Validasi UOM yang berbeda dimensi tetap ditolak.
- Nama alias ambigu tetap ditolak dan meminta Kode Barang.

Instalasi
---------
1. Backup aplikasi terlebih dahulu.
2. Extract ZIP ke root JCOM Inventory V2.10.208.
3. Overwrite includes/historical_migration.php.
4. Jalankan Migrasi Historis -> Penjualan -> Mode 1 -> Preview & Validasi.
5. Periksa VALIDATION log. Setelah 12 error format/mapping teratasi, perbaiki
   data UOM/master yang masih benar-benar invalid.
