v4.44.30 PRE-MEMBER DISCOUNT DEEP RECONCILIATION ROOT CAUSE 1. Extended Monitor mengenali pilihan POS 'pre:' dan menghitung diskon aktivasi Pra-Member. 2. Backend mengubah sumber itu menjadi source_type='quick_activation_pre_member'. 3. membership_card_creation_discount_snapshot() hanya menerima source_type='pre_member'. Akibatnya monitor menampilkan NET yang benar, tetapi server menyimpan membership tanpa diskon. Dashboard dan struk kemudian membaca nilai server yang salah. ROOT CAUSE TAMBAHAN ensure_v44413_schema() masih memaksa membership_creation_discount_enabled=0 setiap schema-chain dijalankan. Ini dapat mematikan setting diskon yang sudah dipulihkan v4.44.21. PERBAIKAN - Canonical eligibility menerima tepat dua representasi Pra-Member: pre_member dan quick_activation_pre_member. - Sumber lain tetap tidak mendapat diskon: manual, public_registration, non_member, quick_activation_member, quick_activation_registration, renewal. - ensure_v44413_schema() dibuat non-destruktif (INSERT IGNORE), sehingga setting Branding tidak lagi di-reset oleh schema-chain. - membership_effective_net_sql() menggunakan nilai net paling konservatif antara tmi.amount dan membership_sales.total_amount. - Upgrade melakukan targeted repair HANYA untuk embedded POS source_type=quick_activation_pre_member yang paid, card_creation_discount_amount=0, dan diskon Branding aktif. - Repair menyelaraskan membership_sales, transaction_membership_items, transactions subtotal/total/tax/payment/change. - Tidak menyentuh renewal atau aktivasi non-Pra-Member. - Receipt/thermal/membership receipt memakai istilah Diskon Aktivasi Pra-Member. VERIFIKASI WAJIB Pra-Member: Extended Monitor = POS = transaction.total_amount = receipt = thermal = dashboard membership net. Non-Pra-Member dan renewal: tidak menerima diskon aktivasi Pra-Member.