BUILD TEST REPORT v4.44.6
Scope: Membership autofill + member tier discount on combined POS total.

AUDIT FINDINGS FROM v4.44.5
1. Frontend menghitung Diskon Member dari subtotal yang SUDAH termasuk Membership, tetapi backend menghitung dari retailSubtotal yang MENGECUALIKAN Membership. Ini dapat membuat total layar/Extended Monitor berbeda dengan total tersimpan.
2. Saat Aktivasi/Perpanjangan, backend mengambil discount_percent dari record members yang lama; tier Membership baru belum tentu sudah diterapkan sebelum payment finalize. Akibatnya diskon transaksi dapat memakai tier lama/0%.
3. member_id lama dari pencarian POS dapat tetap terbawa ketika operator memilih Aktivasi orang lain; backend hanya mengganti member_id jika kosong. Ini berisiko snapshot pelanggan/diskon salah sasaran.
4. Autofill Nama/WA sebelumnya hanya dilakukan saat field kosong, bukan authoritative dari pilihan Aktivasi/Perpanjangan.
5. membership_finalize_payment() v4.44.5 hanya menganggap quick_new/quick_renewal sebagai sumber tanggal authoritative; quick_activation_* dapat mengabaikan membership_start_date/membership_end_date yang sudah dihitung resolver.
6. Editor Transaksi lama tidak merekonsiliasi transaction_membership_items; mengedit transaksi membership terintegrasi berpotensi mengubah subtotal tanpa mengubah membership ledger.

FIX v4.44.6
- member_id, Nama Pelanggan dan Nomor WA untuk Aktivasi/Perpanjangan selalu ditetapkan ulang dari member hasil resolver di SERVER.
- Tier yang dipilih pada membership_action menjadi sumber discount_percent authoritative untuk transaksi gabungan tersebut.
- Basis diskon = subtotal net jasa (setelah diskon jasa) + produk + nominal Membership.
- Diskon tambahan dicap agar total tidak negatif.
- Frontend dan backend memakai urutan hitung identik.
- Snapshot: member_discount_percent, member_discount_amount, member_discount_level_id, discount_base_amount, extra_discount_amount.
- Receipt memisahkan Diskon Member dan Diskon Tambahan.
- Extended Monitor menerima persentase, basis, nominal diskon, dan total yang sudah sinkron.
- Quick Activation sekarang memakai membership_start_date/membership_end_date authoritative, termasuk periode historis Pra-Member.
- Editor transaksi legacy mengunci transaksi yang memiliki transaction_membership_items.

PAYMENT ORDER
Item gross -> diskon per jasa -> combined subtotal (services net + products + membership) -> diskon member tier -> diskon tambahan -> tax -> total payment.

NO DESTRUCTIVE MIGRATION
No DROP TABLE. No TRUNCATE. Existing rows remain valid with snapshot columns default 0.
