CATATAN KEPUTUSAN PEMBERSIHAN
1. Duplikat: dicek pada 5 tabel sumber, tidak ada baris yang dibuang (1.205 / 3.904 / 1.205 / 12 / 24 baris tetap). Alasan: kunci sudah unik.
2. Join: jumlah baris dikunci 3.904 di setiap join. ShippingAddresses dan CustomerSalesRepAssignments sengaja tidak digabung. Alasan: satu pelanggan bisa punya banyak alamat/sales, sehingga baris dan pendapatan berlipat.
3. Nilai kosong: DueDate di Invoices (461) dan PaymentDate (377) dibiarkan kosong, tidak diimputasi. Alasan: DueDate kosong seluruhnya CreditTermDays = 0 (Tunai/Transfer), PaymentDate kosong seluruhnya berstatus Unpaid, jadi kosong secara struktural. Keterlambatan memakai DueDate dari Payments (lengkap).
4. Pencilan: 48 baris di bawah HPP tidak dibuang, hanya ditandai Is_Below_Cost. Alasan: itu temuan bisnis (41 di antaranya juga melanggar plafon diskon).
5. Kolom turunan: Is_Discount_Violation = 1 bila AdditionalDiscountPct > MaxAdditionalDiscountPct sales tsb. Is_Below_Cost = 1 bila LineMarginAmount < 0. Bucket keterlambatan: 0 / 1-30 / 31-60 / 61-90 / >90 hari. Flag per faktur = Maximum flag baris (1 bila ada minimal 1 baris bermasalah).