Prestige Barbershop Professional v4.36.0
Payment Before Member Approval - Deep Audit

WORKFLOW
- Pengajuan Member/Pra-Member dibuat.
- Pembayaran dibuat di menu Penjualan Member.
- Cash: dapat PAID langsung setelah nominal mencukupi.
- QRIS/Transfer/E-Wallet: wajib bukti dan verifikasi.
- Pembayaran PAID tidak otomatis mengaktifkan calon member.
- Tombol Approve hanya tampil jika transaksi terkait PAID.
- Approval server-side kembali memverifikasi transaksi terkait.
- Approval baru mengaktifkan member + menerapkan membership.
- Pembayaran rejected dapat dibuat ulang; histori lama tetap ada.

DATABASE
- Fresh tables: 77
- Foreign keys checked: 147
- FK missing/order issues: 0
- New relations:
  member_registrations.membership_level_id -> member_levels.id
  member_registrations.membership_sale_id -> membership_sales.id
  pre_members.membership_level_id -> member_levels.id
  pre_members.membership_sale_id -> membership_sales.id
- membership_sales.source_type supports public_membership_order.
- CREATE DATABASE: NO
- USE database: NO

CODE AUDIT
- PHP files checked: 177
- PHP syntax errors: 0
- Missing local include/require targets: 0
- Missing local PHP links/actions: 0
- POST forms checked: 192
- Operational CSRF missing: 0 (setup.php excluded as bootstrap installer)
- Immediate prepare/execute pairs checked: 51
- Placeholder mismatches: 0

SECURITY / INTEGRITY
- UI hides Approve before PAID: PASS
- Server rejects manual approval before PAID: PASS
- Payment verification separated from member activation: PASS
- Rejected-payment retry path: PASS
- Distinct public membership order source: PASS
- Existing v4.35.1 files preserved: PASS

DEPLOYMENT
- Production v4.35.1: use patch and run upgrade_v4_36_0.php as Super Admin.
- Keep config/database.local.php and uploads.
- Do not import database.sql into production.
- upgrade_v4_36_0.sql is fallback only if PHP upgrade cannot be run.
