-- =====================================================================
-- SIPIUTANG - Seeder Master Data, RBAC, Pengguna Demo, Template Laporan
-- File: 02_seed_master.sql   (dibuat otomatis, jangan diedit manual)
-- =====================================================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ============================ ROLES ============================
INSERT INTO `roles` (`id`, `code`, `name`, `description`, `is_system`, `data_scope`) VALUES
(1, 'SUPERADMIN', 'Super Administrator', 'Akses penuh ke seluruh sistem, pengguna, konfigurasi, dan pencadangan data', 1, 'all'),
(2, 'FINANCE_AR', 'Finance AR', 'Mengelola invoice, pembayaran, potongan, revisi, import, dan laporan', 1, 'all'),
(3, 'COLLECTION', 'Collection', 'Menangani penagihan invoice yang ditugaskan, mencatat follow-up dan janji bayar', 1, 'own_collection'),
(4, 'SALES', 'Sales', 'Melihat invoice dan customer yang ditugaskan serta status pembayarannya', 1, 'own_sales'),
(5, 'MANAGEMENT', 'Management', 'Akses baca dashboard dan seluruh laporan, tanpa mengubah transaksi', 1, 'all'),
(6, 'AUDITOR', 'Auditor', 'Akses baca penuh termasuk riwayat transaksi, persetujuan, dan log aktivitas', 1, 'all');

-- ========================= PERMISSIONS =========================
INSERT INTO `permissions` (`id`, `module`, `action`, `name`, `sort_order`) VALUES
(1, 'dashboard', 'view', 'Lihat Dashboard', 0),
(2, 'dashboard', 'export', 'Export Dashboard', 1),
(3, 'dashboard', 'print', 'Cetak Dashboard', 2),
(4, 'piutang', 'view', 'Lihat Piutang', 10),
(5, 'piutang', 'export', 'Export Piutang', 11),
(6, 'piutang', 'print', 'Cetak Piutang', 12),
(7, 'invoice', 'view', 'Lihat Invoice', 20),
(8, 'invoice', 'create', 'Tambah Invoice', 21),
(9, 'invoice', 'edit', 'Ubah Invoice', 22),
(10, 'invoice', 'delete', 'Hapus Invoice', 23),
(11, 'invoice', 'import', 'Import Invoice', 24),
(12, 'invoice', 'export', 'Export Invoice', 25),
(13, 'invoice', 'print', 'Cetak Invoice', 26),
(14, 'pembayaran', 'view', 'Lihat Pembayaran', 30),
(15, 'pembayaran', 'create', 'Tambah Pembayaran', 31),
(16, 'pembayaran', 'edit', 'Ubah Pembayaran', 32),
(17, 'pembayaran', 'delete', 'Hapus Pembayaran', 33),
(18, 'pembayaran', 'approve', 'Setujui Pembayaran', 34),
(19, 'pembayaran', 'import', 'Import Pembayaran', 35),
(20, 'pembayaran', 'export', 'Export Pembayaran', 36),
(21, 'pembayaran', 'print', 'Cetak Pembayaran', 37),
(22, 'penagihan', 'view', 'Lihat Penagihan', 40),
(23, 'penagihan', 'create', 'Tambah Penagihan', 41),
(24, 'penagihan', 'edit', 'Ubah Penagihan', 42),
(25, 'penagihan', 'delete', 'Hapus Penagihan', 43),
(26, 'penagihan', 'export', 'Export Penagihan', 44),
(27, 'penagihan', 'print', 'Cetak Penagihan', 45),
(28, 'revisi', 'view', 'Lihat Revisi Invoice', 50),
(29, 'revisi', 'create', 'Tambah Revisi Invoice', 51),
(30, 'revisi', 'edit', 'Ubah Revisi Invoice', 52),
(31, 'revisi', 'delete', 'Hapus Revisi Invoice', 53),
(32, 'revisi', 'approve', 'Setujui Revisi Invoice', 54),
(33, 'revisi', 'import', 'Import Revisi Invoice', 55),
(34, 'revisi', 'export', 'Export Revisi Invoice', 56),
(35, 'revisi', 'print', 'Cetak Revisi Invoice', 57),
(36, 'nota_kredit', 'view', 'Lihat Nota Kredit & Penyesuaian', 60),
(37, 'nota_kredit', 'create', 'Tambah Nota Kredit & Penyesuaian', 61),
(38, 'nota_kredit', 'edit', 'Ubah Nota Kredit & Penyesuaian', 62),
(39, 'nota_kredit', 'delete', 'Hapus Nota Kredit & Penyesuaian', 63),
(40, 'nota_kredit', 'approve', 'Setujui Nota Kredit & Penyesuaian', 64),
(41, 'nota_kredit', 'export', 'Export Nota Kredit & Penyesuaian', 65),
(42, 'nota_kredit', 'print', 'Cetak Nota Kredit & Penyesuaian', 66),
(43, 'hapus_buku', 'view', 'Lihat Hapus Buku Piutang', 70),
(44, 'hapus_buku', 'create', 'Tambah Hapus Buku Piutang', 71),
(45, 'hapus_buku', 'approve', 'Setujui Hapus Buku Piutang', 72),
(46, 'hapus_buku', 'export', 'Export Hapus Buku Piutang', 73),
(47, 'hapus_buku', 'print', 'Cetak Hapus Buku Piutang', 74),
(48, 'import', 'view', 'Lihat Import Data', 80),
(49, 'import', 'create', 'Tambah Import Data', 81),
(50, 'import', 'delete', 'Hapus Import Data', 82),
(51, 'import', 'import', 'Import Import Data', 83),
(52, 'laporan', 'view', 'Lihat Laporan', 90),
(53, 'laporan', 'export', 'Export Laporan', 91),
(54, 'laporan', 'print', 'Cetak Laporan', 92),
(55, 'report_builder', 'view', 'Lihat Pembuat Laporan', 100),
(56, 'report_builder', 'create', 'Tambah Pembuat Laporan', 101),
(57, 'report_builder', 'edit', 'Ubah Pembuat Laporan', 102),
(58, 'report_builder', 'delete', 'Hapus Pembuat Laporan', 103),
(59, 'report_builder', 'export', 'Export Pembuat Laporan', 104),
(60, 'report_builder', 'print', 'Cetak Pembuat Laporan', 105),
(61, 'aging', 'view', 'Lihat Aging Piutang', 110),
(62, 'aging', 'export', 'Export Aging Piutang', 111),
(63, 'aging', 'print', 'Cetak Aging Piutang', 112),
(64, 'acp', 'view', 'Lihat ACP / Kinerja Penagihan', 120),
(65, 'acp', 'edit', 'Ubah ACP / Kinerja Penagihan', 121),
(66, 'acp', 'export', 'Export ACP / Kinerja Penagihan', 122),
(67, 'acp', 'print', 'Cetak ACP / Kinerja Penagihan', 123),
(68, 'kualitas_data', 'view', 'Lihat Kualitas Data', 130),
(69, 'kualitas_data', 'export', 'Export Kualitas Data', 131),
(70, 'kualitas_data', 'print', 'Cetak Kualitas Data', 132),
(71, 'kartu_piutang', 'view', 'Lihat Kartu Piutang Customer', 140),
(72, 'kartu_piutang', 'export', 'Export Kartu Piutang Customer', 141),
(73, 'kartu_piutang', 'print', 'Cetak Kartu Piutang Customer', 142),
(74, 'forecast', 'view', 'Lihat Perkiraan Penerimaan Kas', 150),
(75, 'forecast', 'export', 'Export Perkiraan Penerimaan Kas', 151),
(76, 'forecast', 'print', 'Cetak Perkiraan Penerimaan Kas', 152),
(77, 'lampiran', 'view', 'Lihat Lampiran Dokumen', 160),
(78, 'lampiran', 'create', 'Tambah Lampiran Dokumen', 161),
(79, 'lampiran', 'delete', 'Hapus Lampiran Dokumen', 162),
(80, 'master', 'view', 'Lihat Data Master', 170),
(81, 'master', 'create', 'Tambah Data Master', 171),
(82, 'master', 'edit', 'Ubah Data Master', 172),
(83, 'master', 'delete', 'Hapus Data Master', 173),
(84, 'master', 'import', 'Import Data Master', 174),
(85, 'master', 'export', 'Export Data Master', 175),
(86, 'persetujuan', 'view', 'Lihat Persetujuan', 180),
(87, 'persetujuan', 'approve', 'Setujui Persetujuan', 181),
(88, 'persetujuan', 'export', 'Export Persetujuan', 182),
(89, 'pengguna', 'view', 'Lihat Pengguna & Hak Akses', 190),
(90, 'pengguna', 'create', 'Tambah Pengguna & Hak Akses', 191),
(91, 'pengguna', 'edit', 'Ubah Pengguna & Hak Akses', 192),
(92, 'pengguna', 'delete', 'Hapus Pengguna & Hak Akses', 193),
(93, 'audit', 'view', 'Lihat Log Aktivitas', 200),
(94, 'audit', 'export', 'Export Log Aktivitas', 201),
(95, 'pengaturan', 'view', 'Lihat Pengaturan', 210),
(96, 'pengaturan', 'edit', 'Ubah Pengaturan', 211),
(97, 'backup', 'view', 'Lihat Pencadangan Data', 220),
(98, 'backup', 'create', 'Tambah Pencadangan Data', 221),
(99, 'backup', 'delete', 'Hapus Pencadangan Data', 222);

-- ====================== ROLE_PERMISSIONS =======================
INSERT INTO `role_permissions` (`role_id`, `permission_id`) VALUES
(1, 1),
(1, 2),
(1, 3),
(1, 4),
(1, 5),
(1, 6),
(1, 7),
(1, 8),
(1, 9),
(1, 10),
(1, 11),
(1, 12),
(1, 13),
(1, 14),
(1, 15),
(1, 16),
(1, 17),
(1, 18),
(1, 19),
(1, 20),
(1, 21),
(1, 22),
(1, 23),
(1, 24),
(1, 25),
(1, 26),
(1, 27),
(1, 28),
(1, 29),
(1, 30),
(1, 31),
(1, 32),
(1, 33),
(1, 34),
(1, 35),
(1, 36),
(1, 37),
(1, 38),
(1, 39),
(1, 40),
(1, 41),
(1, 42),
(1, 43),
(1, 44),
(1, 45),
(1, 46),
(1, 47),
(1, 48),
(1, 49),
(1, 50),
(1, 51),
(1, 52),
(1, 53),
(1, 54),
(1, 55),
(1, 56),
(1, 57),
(1, 58),
(1, 59),
(1, 60),
(1, 61),
(1, 62),
(1, 63),
(1, 64),
(1, 65),
(1, 66),
(1, 67),
(1, 68),
(1, 69),
(1, 70),
(1, 71),
(1, 72),
(1, 73),
(1, 74),
(1, 75),
(1, 76),
(1, 77),
(1, 78),
(1, 79),
(1, 80),
(1, 81),
(1, 82),
(1, 83),
(1, 84),
(1, 85),
(1, 86),
(1, 87),
(1, 88),
(1, 89),
(1, 90),
(1, 91),
(1, 92),
(1, 93),
(1, 94),
(1, 95),
(1, 96),
(1, 97),
(1, 98),
(1, 99),
(2, 1),
(2, 2),
(2, 3),
(2, 4),
(2, 5),
(2, 6),
(2, 7),
(2, 8),
(2, 9),
(2, 10),
(2, 11),
(2, 12),
(2, 13),
(2, 14),
(2, 15),
(2, 16),
(2, 17),
(2, 19),
(2, 20),
(2, 21),
(2, 22),
(2, 23),
(2, 24),
(2, 25),
(2, 26),
(2, 27),
(2, 28),
(2, 29),
(2, 30),
(2, 31),
(2, 33),
(2, 34),
(2, 35),
(2, 36),
(2, 37),
(2, 38),
(2, 39),
(2, 41),
(2, 42),
(2, 43),
(2, 44),
(2, 46),
(2, 47),
(2, 48),
(2, 49),
(2, 50),
(2, 51),
(2, 52),
(2, 53),
(2, 54),
(2, 55),
(2, 56),
(2, 57),
(2, 58),
(2, 59),
(2, 60),
(2, 61),
(2, 62),
(2, 63),
(2, 64),
(2, 65),
(2, 66),
(2, 67),
(2, 68),
(2, 69),
(2, 70),
(2, 71),
(2, 72),
(2, 73),
(2, 74),
(2, 75),
(2, 76),
(2, 77),
(2, 78),
(2, 79),
(2, 80),
(2, 81),
(2, 82),
(2, 84),
(2, 85),
(2, 86),
(2, 88),
(2, 93),
(2, 95),
(3, 1),
(3, 4),
(3, 5),
(3, 6),
(3, 7),
(3, 13),
(3, 14),
(3, 22),
(3, 23),
(3, 24),
(3, 26),
(3, 27),
(3, 28),
(3, 52),
(3, 53),
(3, 54),
(3, 55),
(3, 56),
(3, 57),
(3, 59),
(3, 60),
(3, 61),
(3, 62),
(3, 63),
(3, 71),
(3, 72),
(3, 73),
(3, 74),
(3, 75),
(3, 76),
(3, 77),
(3, 78),
(3, 80),
(3, 86),
(4, 1),
(4, 4),
(4, 5),
(4, 7),
(4, 13),
(4, 14),
(4, 22),
(4, 52),
(4, 53),
(4, 55),
(4, 56),
(4, 59),
(4, 61),
(4, 62),
(4, 71),
(4, 72),
(4, 77),
(4, 80),
(5, 1),
(5, 2),
(5, 3),
(5, 4),
(5, 5),
(5, 6),
(5, 7),
(5, 12),
(5, 13),
(5, 14),
(5, 20),
(5, 21),
(5, 22),
(5, 26),
(5, 27),
(5, 28),
(5, 34),
(5, 35),
(5, 36),
(5, 41),
(5, 42),
(5, 43),
(5, 46),
(5, 47),
(5, 52),
(5, 53),
(5, 54),
(5, 55),
(5, 59),
(5, 60),
(5, 61),
(5, 62),
(5, 63),
(5, 64),
(5, 66),
(5, 67),
(5, 68),
(5, 69),
(5, 70),
(5, 71),
(5, 72),
(5, 73),
(5, 74),
(5, 75),
(5, 76),
(5, 77),
(5, 80),
(5, 85),
(5, 86),
(5, 88),
(5, 93),
(5, 94),
(6, 1),
(6, 2),
(6, 3),
(6, 4),
(6, 5),
(6, 6),
(6, 7),
(6, 12),
(6, 13),
(6, 14),
(6, 20),
(6, 21),
(6, 22),
(6, 26),
(6, 27),
(6, 28),
(6, 34),
(6, 35),
(6, 36),
(6, 41),
(6, 42),
(6, 43),
(6, 46),
(6, 47),
(6, 48),
(6, 52),
(6, 53),
(6, 54),
(6, 55),
(6, 59),
(6, 60),
(6, 61),
(6, 62),
(6, 63),
(6, 64),
(6, 66),
(6, 67),
(6, 68),
(6, 69),
(6, 70),
(6, 71),
(6, 72),
(6, 73),
(6, 74),
(6, 75),
(6, 76),
(6, 77),
(6, 80),
(6, 85),
(6, 86),
(6, 88),
(6, 89),
(6, 93),
(6, 94),
(6, 95),
(6, 97);

-- ======================= BUSINESS UNITS ========================
INSERT INTO `business_units` (`id`, `code`, `name`, `description`, `payment_term_days`) VALUES
(1, 'KOMERSIAL', 'Komersial', 'Pelanggan korporat, restoran, hotel, mall, pabrik (kontrak PMSC & By Case)', 30),
(2, 'RESIDENSIAL', 'Residensial', 'Pelanggan rumah tangga / perorangan (RDN)', 30);

-- ============================ AREAS ============================
INSERT INTO `areas` (`id`, `code`, `name`, `region`, `payment_term_days`) VALUES
(1, 'JKT', 'Jakarta', 'Jabodetabek', 30),
(2, 'BALI', 'Bali', 'Bali & Nusa Tenggara', 30),
(3, 'BDG', 'Bandung', 'Jawa Barat', 30);

-- ======================== PAYMENT TERMS ========================
INSERT INTO `payment_terms` (`id`, `code`, `name`, `days`, `base_date_type`, `is_default`) VALUES
(1, 'NET30', 'Net 30 Hari dari Tanggal Kirim', 30, 'sent_date', 1),
(2, 'NET14', 'Net 14 Hari dari Tanggal Kirim', 14, 'sent_date', 0),
(3, 'NET45', 'Net 45 Hari dari Tanggal Kirim', 45, 'sent_date', 0),
(4, 'NET60', 'Net 60 Hari dari Tanggal Kirim', 60, 'sent_date', 0),
(5, 'NET90', 'Net 90 Hari dari Tanggal Kirim', 90, 'sent_date', 0),
(6, 'NET30INV', 'Net 30 Hari dari Tanggal Invoice', 30, 'invoice_date', 0),
(7, 'NET30FP', 'Net 30 Hari dari Tanggal Faktur Pajak', 30, 'tax_invoice_date', 0),
(8, 'COD', 'Tunai / Bayar di Tempat', 0, 'invoice_date', 0),
(9, 'MANUAL', 'Jatuh Tempo Ditentukan Manual', 30, 'manual', 0);

-- ===================== REVENUE CATEGORIES ======================
INSERT INTO `revenue_categories` (`id`, `code`, `name`, `payment_term_days`) VALUES
(1, 'PMSC', 'PMSC (Kontrak Preventive Maintenance Service)', 30),
(2, 'BY_CASE', 'By Case (Pekerjaan Per Kasus)', 30),
(3, 'RESIDENSIAL', 'Residensial', NULL),
(4, 'ONLINE', 'Penjualan Online', NULL),
(5, 'ROYALTY', 'Royalty', NULL),
(6, 'HE', 'HE (Heavy Equipment)', NULL),
(7, 'REFERRAL_FEE', 'Referral Fee', NULL),
(8, 'TIDAK_DIKATEGORIKAN', 'Tidak Dikategorikan', NULL);

-- ======================= JOB CATEGORIES ========================
INSERT INTO `job_categories` (`id`, `code`, `name`) VALUES
(1, 'SEWER_DRAIN', 'Sewer & Drain'),
(2, 'DRAIN_CLEANER_PRODUCT', 'Drain Cleaner Product'),
(3, 'CLEANING_DUCTING', 'Cleaning Ducting'),
(4, 'CAMERA', 'Camera'),
(5, 'MOBILISASI', 'Mobilisasi'),
(6, 'PLUMBING', 'Plumbing'),
(7, 'PUMPING', 'Pumping'),
(8, 'ROYALTY', 'Royalty'),
(9, 'SPARE_PART', 'Spare Part'),
(10, 'LEAK_DETECTOR', 'Leak Detector'),
(11, 'CLEANING_GROUND_WATER_TANK', 'Cleaning Ground Water Tank'),
(12, 'OTHERS', 'Lain-lain');

-- ========================= JOB TYPES ===========================
INSERT INTO `job_types` (`id`, `code`, `name`, `job_category_id`) VALUES
(1, 'DC_MAIN_LINE', 'Drain Cleaning - Main Line', 1),
(2, 'DC_KITCHEN', 'Drain Cleaning - Kitchen', 1),
(3, 'DC_FLOOR', 'Drain Cleaning - Floor', 1),
(4, 'DC_TOILET', 'Drain Cleaning - Toilet', 1),
(5, 'DC_WASH', 'Drain Cleaning - Wash', 1),
(6, 'DC_LAUNDRY', 'Drain Cleaning - Laundry', 1),
(7, 'DC_URINAL', 'Drain Cleaning - Urinal', 1),
(8, 'DC_OTHERS', 'Drain Cleaning - Lain-lain', 1),
(9, 'DC_UMUM', 'Drain Cleaning', 1),
(10, 'PRODUCT', 'Product', 2),
(11, 'DUCTING', 'Ducting', 3),
(12, 'DUCTING_DC', 'Ducting & Drain Cleaning', 3),
(13, 'INDUSTRIAL_EQUIPMENT', 'Industrial Equipment', 4),
(14, 'CAMERA', 'Camera', 4),
(15, 'EXCAVATION_CAMERA', 'Excavation Camera', 4),
(16, 'EXCAVATION_LINELOC', 'Excavation - Line Locator', 10),
(17, 'LINE_LOCATOR', 'Line Locator', 10),
(18, 'MOBILISASI', 'Mobilisasi', 5),
(19, 'PLUMBING', 'Plumbing', 6),
(20, 'PUMPING', 'Pumping', 7),
(21, 'FASAD', 'Fasad', 12),
(22, 'ANGKAT_LEMAK', 'Angkat Lemak', 1),
(23, 'CLEANING_GROUND_WATER', 'Cleaning Ground Water Tank', 11),
(24, 'SPAREPART', 'Spare Part', 9),
(25, 'ROYALTY', 'Royalty', 8),
(26, 'REFERRAL_FEE', 'Referral Fee', 12),
(27, 'INSTALLATION', 'Installation', 12),
(28, 'HUMAN_ERROR', 'Human Error', 12),
(29, 'OTHERS', 'Lain-lain', 12),
(30, 'TIDAK_DIISI', 'Tidak Diisi', 12);

-- ======================= DEDUCTION TYPES =======================
INSERT INTO `deduction_types` (`id`, `code`, `name`, `calc_type`, `rate`, `target_column`, `reduces_revenue`, `sort_order`) VALUES
(1, 'PPH23', 'Potongan PPh 23', 'percent_of_dpp', 2.0, 'pph23', 0, 1),
(2, 'ADM', 'Potongan Administrasi', 'manual', 0, 'admin', 0, 2),
(3, 'LAIN', 'Potongan Lain-lain', 'manual', 0, 'other', 0, 3),
(4, 'MATERAI', 'Bea Materai', 'fixed', 10000, 'other', 0, 4),
(5, 'BIAYA_BANK', 'Biaya Transfer Bank', 'manual', 0, 'other', 0, 5),
(6, 'DISKON', 'Diskon / Potongan Harga', 'manual', 0, 'other', 1, 6),
(7, 'PPH4A2', 'Potongan PPh Pasal 4 ayat 2', 'percent_of_dpp', 2.0, 'other', 0, 7),
(8, 'RETENSI', 'Retensi Pekerjaan', 'percent_of_dpp', 5.0, 'other', 0, 8);

-- ============================ BANKS ============================
INSERT INTO `banks` (`id`, `code`, `name`, `account_no`, `account_name`, `branch`) VALUES
(1, 'BCA', 'Bank Central Asia', '0000000000', 'PT Roto-Rooter Indonesia', 'Jakarta'),
(2, 'MANDIRI', 'Bank Mandiri', '0000000000', 'PT Roto-Rooter Indonesia', 'Jakarta'),
(3, 'BNI', 'Bank Negara Indonesia', '0000000000', 'PT Roto-Rooter Indonesia', 'Jakarta'),
(4, 'BRI', 'Bank Rakyat Indonesia', '0000000000', 'PT Roto-Rooter Indonesia', 'Jakarta'),
(5, 'PERMATA', 'Bank Permata', '0000000000', 'PT Roto-Rooter Indonesia', 'Jakarta'),
(6, 'CIMB', 'CIMB Niaga', '0000000000', 'PT Roto-Rooter Indonesia', 'Jakarta'),
(7, 'KAS', 'Kas / Tunai', NULL, NULL, NULL);

-- ======================= REVISION TYPES ========================
INSERT INTO `revision_types` (`id`, `code`, `name`, `default_action`, `requires_new_invoice`, `affects_revenue`, `keywords`, `sort_order`) VALUES
(1, 'NPWP_SALAH', 'NPWP Tidak Sesuai', 'replaced', 1, 1, 'salah npwp|npwp salah|perubahan npwp|nitku', 1),
(2, 'FP_KADALUARSA', 'Faktur Pajak Kadaluarsa', 'replaced', 1, 1, 'kadaluarsa|expired|kadaluwarsa', 2),
(3, 'PINDAH_MASA', 'Perubahan Masa / Periode Invoice', 'replaced', 1, 1, 'pindah masa|perubahan masa|lewat bulan|beda bulan|masa invoice', 3),
(4, 'DATA_CUSTOMER_SALAH', 'Data Customer Tidak Sesuai', 'replaced', 1, 1, 'salah customer|data customer|alamat salah', 4),
(5, 'NOMINAL_SALAH', 'Nominal Tidak Sesuai', 'replaced', 1, 1, 'salah nominal|nominal salah|salah jumlah|human error', 5),
(6, 'PEKERJAAN_GAGAL', 'Pekerjaan Gagal', 'cancelled', 0, 1, 'pekerjaan gagal|gagal|tidak jadi|tidak ada saluran', 6),
(7, 'PEKERJAAN_DIBATALKAN', 'Pekerjaan Dibatalkan', 'cancelled', 0, 1, 'cancel pekerjaan|dibatalkan|batal kerja', 7),
(8, 'PERMINTAAN_CUSTOMER', 'Permintaan Customer', 'replaced', 1, 1, 'permintaan customer|request customer', 8),
(9, 'PEMBATALAN_INVOICE', 'Pembatalan Invoice', 'cancelled', 0, 1, 'pembatalan invoice|invoice batal|pengembalian dana|refund', 9),
(10, 'PENGGANTIAN_INVOICE', 'Penggantian Invoice', 'replaced', 1, 1, 'penggantian|pengganti|revisi invoice', 10),
(11, 'HAPUS_BUKU', 'Penghapusan Tagihan (Bad Debt)', 'written_off', 0, 1, 'penghapusan tagihan|hapus buku|bad debt|sudah tutup|tidak beroperasi', 11),
(12, 'LAINNYA', 'Alasan Lain-lain', 'revised', 0, 1, 'outstanding', 99);

-- ===================== COLLECTION STATUSES =====================
INSERT INTO `collection_statuses` (`id`, `code`, `name`, `color`, `is_final`, `is_dispute`, `sort_order`) VALUES
(1, 'BELUM_DIHUBUNGI', 'Belum Dihubungi', 'secondary', 0, 0, 1),
(2, 'SUDAH_DIHUBUNGI', 'Sudah Dihubungi', 'info', 0, 0, 2),
(3, 'MENUNGGU_DOKUMEN', 'Menunggu Dokumen', 'warning', 0, 0, 3),
(4, 'MENUNGGU_TUKAR_FAKTUR', 'Menunggu Tukar Faktur', 'warning', 0, 0, 4),
(5, 'MENUNGGU_PERSETUJUAN_CUSTOMER', 'Menunggu Persetujuan Customer', 'warning', 0, 0, 5),
(6, 'JANJI_BAYAR', 'Janji Bayar', 'primary', 0, 0, 6),
(7, 'DALAM_PROSES_PEMBAYARAN', 'Dalam Proses Pembayaran', 'primary', 0, 0, 7),
(8, 'SENGKETA', 'Sengketa', 'danger', 0, 1, 8),
(9, 'TIDAK_DAPAT_DITAGIH', 'Tidak Dapat Ditagih', 'dark', 1, 1, 9),
(10, 'SELESAI', 'Selesai', 'success', 1, 0, 10);

-- ====================== PAYMENT STATUSES =======================
INSERT INTO `payment_statuses` (`id`, `code`, `name`, `color`, `is_settled`, `is_overdue`, `counts_as_ar`, `sort_order`) VALUES
(1, 'LUNAS', 'Lunas', 'success', 1, 0, 0, 1),
(2, 'BELUM_JATUH_TEMPO', 'Belum Jatuh Tempo', 'info', 0, 0, 1, 2),
(3, 'JATUH_TEMPO', 'Jatuh Tempo', 'warning', 0, 0, 1, 3),
(4, 'TERLAMBAT', 'Terlambat', 'danger', 0, 1, 1, 4),
(5, 'PEMBAYARAN_SEBAGIAN', 'Pembayaran Sebagian', 'primary', 0, 0, 1, 5),
(6, 'DIBATALKAN', 'Dibatalkan', 'dark', 0, 0, 0, 6),
(7, 'DIREVISI', 'Direvisi', 'secondary', 0, 0, 0, 7),
(8, 'DIHAPUSKAN', 'Dihapuskan', 'dark', 0, 0, 0, 8);

-- ====================== ATTACHMENT TYPES =======================
INSERT INTO `attachment_types` (`id`, `code`, `name`, `sort_order`) VALUES
(1, 'INVOICE', 'Invoice', 1),
(2, 'FAKTUR_PAJAK', 'Faktur Pajak', 2),
(3, 'SALES_ORDER', 'Sales Order (SO)', 3),
(4, 'WORK_REQUEST', 'Work Request (WR)', 4),
(5, 'BERITA_ACARA', 'Berita Acara Penyelesaian Pekerjaan', 5),
(6, 'PURCHASE_ORDER', 'Purchase Order (PO)', 6),
(7, 'SURAT_JALAN', 'Surat Jalan / Dokumen Pengiriman', 7),
(8, 'BUKTI_KIRIM_INVOICE', 'Bukti Pengiriman Invoice', 8),
(9, 'BUKTI_BAYAR', 'Bukti Pembayaran', 9),
(10, 'BUKTI_POTONG', 'Bukti Potong PPh 23', 10),
(11, 'KORESPONDENSI', 'Korespondensi Customer', 11),
(12, 'DOKUMEN_RF', 'Dokumen RF / Revisi Invoice', 12),
(13, 'NOTA_KREDIT', 'Nota Kredit', 13),
(14, 'LAINNYA', 'Dokumen Pendukung Lainnya', 99);

-- ==================== AGING CONFIGURATIONS =====================
INSERT INTO `aging_configurations` (`id`, `code`, `name`, `basis`, `reference`, `include_paid`, `is_default`) VALUES
(1, 'STANDAR_EXCEL', 'Standar Excel (0-45 / 46-90 / 91-120 / >120)', 'outstanding', 'due_date', 0, 1),
(2, 'OVERDUE_BERTINGKAT', 'Overdue Bertingkat (Belum JT / 1-30 / 31-60 / 61-90 / 91-120 / >120)', 'outstanding', 'due_date', 0, 0),
(3, 'UMUR_INVOICE', 'Umur Invoice dari Tanggal Invoice (30/60/90/120)', 'outstanding', 'invoice_date', 0, 0);

INSERT INTO `aging_buckets` (`id`, `aging_configuration_id`, `label`, `from_days`, `to_days`, `color`, `sort_order`) VALUES
(1, 1, '0-45 hari', -99999, 45, 'success', 1),
(2, 1, '46-90 hari', 46, 90, 'info', 2),
(3, 1, '91-120 hari', 91, 120, 'warning', 3),
(4, 1, '> 120 hari', 121, NULL, 'danger', 4),
(5, 2, 'Belum Jatuh Tempo', -99999, -1, 'info', 1),
(6, 2, 'Jatuh Tempo Hari Ini', 0, 0, 'primary', 2),
(7, 2, '1-30 hari', 1, 30, 'success', 3),
(8, 2, '31-60 hari', 31, 60, 'warning', 4),
(9, 2, '61-90 hari', 61, 90, 'warning', 5),
(10, 2, '91-120 hari', 91, 120, 'danger', 6),
(11, 2, '> 120 hari', 121, NULL, 'dark', 7),
(12, 3, '0-30 hari', -99999, 30, 'success', 1),
(13, 3, '31-60 hari', 31, 60, 'info', 2),
(14, 3, '61-90 hari', 61, 90, 'warning', 3),
(15, 3, '91-120 hari', 91, 120, 'danger', 4),
(16, 3, '> 120 hari', 121, NULL, 'dark', 5);

-- ========================= ACP TARGETS =========================
INSERT INTO `acp_targets` (`id`, `scope`, `scope_id`, `period_year`, `period_month`, `target_days`, `tolerance_days`, `notes`) VALUES
(1, 'global', NULL, 2026, NULL, 45, 5, 'Target ACP korporat 2026: 45 hari'),
(2, 'global', NULL, 2026, 1, 45, 5, NULL),
(3, 'global', NULL, 2026, 2, 45, 5, NULL),
(4, 'global', NULL, 2026, 3, 45, 5, NULL),
(5, 'global', NULL, 2026, 4, 45, 5, NULL),
(6, 'global', NULL, 2026, 5, 45, 5, NULL),
(7, 'global', NULL, 2026, 6, 45, 5, NULL),
(8, 'global', NULL, 2026, 7, 45, 5, NULL),
(9, 'global', NULL, 2026, 8, 45, 5, NULL),
(10, 'global', NULL, 2026, 9, 45, 5, NULL),
(11, 'global', NULL, 2026, 10, 45, 5, NULL),
(12, 'global', NULL, 2026, 11, 45, 5, NULL),
(13, 'global', NULL, 2026, 12, 45, 5, NULL),
(14, 'area', 1, 2026, NULL, 45, 5, NULL),
(15, 'area', 2, 2026, NULL, 50, 5, NULL),
(16, 'area', 3, 2026, NULL, 50, 5, NULL),
(17, 'business_unit', 1, 2026, NULL, 45, 5, NULL),
(18, 'business_unit', 2, 2026, NULL, 15, 5, NULL);

-- ======================= APPROVAL FLOWS ========================
INSERT INTO `approval_flows` (`id`, `code`, `module`, `action`, `name`, `level_count`, `approver_roles_json`, `threshold_amount`) VALUES
(1, 'PAY_ADJUST', 'pembayaran', 'adjust', 'Penyesuaian Pembayaran', 1, '[1,2]', 0),
(2, 'PAY_REVERSAL', 'pembayaran', 'reversal', 'Pembalikan Pembayaran (Reversal)', 1, '[1,2]', 0),
(3, 'PAY_DELETE', 'pembayaran', 'delete', 'Penghapusan Pembayaran', 1, '[1]', 0),
(4, 'INV_CANCEL', 'invoice', 'cancel', 'Pembatalan Invoice', 1, '[1,2]', 0),
(5, 'REV_APPROVE', 'revisi', 'approve', 'Persetujuan Revisi Invoice (RF)', 1, '[1,2]', 0),
(6, 'CN_APPROVE', 'nota_kredit', 'approve', 'Persetujuan Nota Kredit', 1, '[1,2]', 0),
(7, 'WRITEOFF', 'hapus_buku', 'approve', 'Persetujuan Hapus Buku Piutang', 2, '[1,2]', 0),
(8, 'REFUND', 'pembayaran', 'refund', 'Persetujuan Refund', 1, '[1,2]', 0),
(9, 'MANUAL_ADJUST', 'nota_kredit', 'manual_adjust', 'Penyesuaian Saldo Manual', 1, '[1]', 0),
(10, 'IMPORT_ROLLBACK', 'import', 'rollback', 'Pembatalan (Rollback) Import', 1, '[1]', 0);

-- ==================== APPLICATION SETTINGS =====================
INSERT INTO `application_settings` (`setting_group`, `setting_key`, `setting_value`, `value_type`, `label`, `description`, `options_json`, `sort_order`) VALUES
('umum', 'nama_aplikasi', 'SIPIUTANG', 'string', 'Nama Aplikasi', 'Ditampilkan di header dan judul halaman', NULL, 0),
('umum', 'nama_perusahaan', 'PT Roto-Rooter Indonesia', 'string', 'Nama Perusahaan', 'Dicetak pada semua laporan PDF', NULL, 1),
('umum', 'alamat_perusahaan', 'Jakarta, Indonesia', 'string', 'Alamat Perusahaan', NULL, NULL, 2),
('umum', 'npwp_perusahaan', '', 'string', 'NPWP Perusahaan', NULL, NULL, 3),
('umum', 'telepon_perusahaan', '', 'string', 'Telepon Perusahaan', NULL, NULL, 4),
('umum', 'email_perusahaan', '', 'string', 'Email Perusahaan', NULL, NULL, 5),
('umum', 'mata_uang', 'IDR', 'string', 'Kode Mata Uang', NULL, NULL, 6),
('umum', 'simbol_mata_uang', 'Rp', 'string', 'Simbol Mata Uang', NULL, NULL, 7),
('umum', 'zona_waktu', 'Asia/Jakarta', 'string', 'Zona Waktu', NULL, NULL, 8),
('umum', 'logo_path', '', 'string', 'Berkas Logo Perusahaan', NULL, NULL, 9),
('format', 'desimal_tampilan', '0', 'int', 'Jumlah Desimal Tampilan Nilai Uang', '0 = Rp 1.250.000, 2 = Rp 1.250.000,00', NULL, 10),
('format', 'pemisah_ribuan', '.', 'string', 'Pemisah Ribuan', NULL, NULL, 11),
('format', 'pemisah_desimal', ',', 'string', 'Pemisah Desimal', NULL, NULL, 12),
('format', 'format_tanggal', 'd-m-Y', 'string', 'Format Tanggal', 'Default DD-MM-YYYY', NULL, 13),
('format', 'format_tanggal_waktu', 'd-m-Y H:i', 'string', 'Format Tanggal & Waktu', NULL, NULL, 14),
('format', 'negatif_merah', '1', 'bool', 'Tampilkan Nilai Negatif Berwarna Merah dalam Tanda Kurung', NULL, NULL, 15),
('format', 'nol_sebagai_strip', '1', 'bool', 'Tampilkan Nilai Nol sebagai Tanda Hubung (-)', NULL, NULL, 16),
('pajak', 'nominal_termasuk_ppn', '1', 'bool', 'Nominal Invoice Sudah Termasuk PPN', 'Bila aktif, DPP = Nominal / (1 + tarif PPN)', NULL, 17),
('pajak', 'tarif_ppn', '11', 'decimal', 'Tarif PPN (%)', NULL, NULL, 18),
('pajak', 'tarif_pph23', '2', 'decimal', 'Tarif PPh 23 (%)', 'Dihitung dari DPP', NULL, 19),
('pajak', 'batas_wajar_pph23', '20', 'decimal', 'Batas Kewajaran Tarif PPh 23 (%)', 'Di atas nilai ini ditandai anomali', NULL, 20),
('ar', 'termin_default_hari', '30', 'int', 'Termin Pembayaran Default (hari)', NULL, NULL, 21),
('ar', 'dasar_jatuh_tempo', 'sent_date', 'select', 'Dasar Perhitungan Jatuh Tempo', 'Tanggal acuan penambahan termin pembayaran', '{"invoice_date": "Tanggal Invoice", "sent_date": "Tanggal Kirim Invoice", "received_date": "Tanggal Terima Invoice", "tax_invoice_date": "Tanggal Faktur Pajak", "wr_date": "Tanggal Work Request", "manual": "Ditentukan Manual"}', 22),
('ar', 'fallback_jatuh_tempo', 'sent_date,invoice_date,wr_date', 'string', 'Urutan Cadangan Dasar Jatuh Tempo', 'Dipakai bila tanggal acuan utama kosong (pisahkan dengan koma)', NULL, 23),
('ar', 'toleransi_lunas', '1', 'decimal', 'Toleransi Pembulatan Lunas (Rp)', 'Saldo <= nilai ini dianggap lunas', NULL, 24),
('ar', 'basis_revenue', 'dpp', 'select', 'Basis Pengakuan Revenue', NULL, '{"dpp": "DPP (tanpa PPN)", "gross": "Nominal Bruto (termasuk PPN)", "net": "Nilai Bersih Setelah Potongan"}', 25),
('ar', 'izinkan_kelebihan_bayar', '1', 'bool', 'Izinkan Pembayaran Melebihi Saldo (Kelebihan Bayar)', NULL, NULL, 26),
('ar', 'wajib_approval_pembayaran', '0', 'bool', 'Pembayaran Wajib Disetujui Sebelum Mengurangi Saldo', NULL, NULL, 27),
('ar', 'prefix_pembayaran', 'BYR', 'string', 'Prefix Nomor Pembayaran', NULL, NULL, 28),
('ar', 'prefix_nota_kredit', 'CN', 'string', 'Prefix Nomor Nota Kredit', NULL, NULL, 29),
('ar', 'prefix_rf', 'RF', 'string', 'Prefix Nomor RF / Revisi Invoice', NULL, NULL, 30),
('aging', 'konfigurasi_default', '1', 'int', 'ID Konfigurasi Aging Default', NULL, NULL, 31),
('aging', 'basis_default', 'outstanding', 'select', 'Basis Nilai Aging Default', NULL, '{"outstanding": "Saldo Piutang", "net": "Nilai Bersih Invoice", "gross": "Nominal Bruto"}', 32),
('acp', 'metode_default', 'operasional', 'select', 'Metode ACP Default', NULL, '{"finansial": "Metode 1 - Standar Finansial", "operasional": "Metode 2 - Operasional Penagihan"}', 33),
('acp', 'target_default_hari', '45', 'decimal', 'Target ACP Default (hari)', NULL, NULL, 34),
('acp', 'toleransi_default_hari', '5', 'decimal', 'Toleransi Target ACP (hari)', NULL, NULL, 35),
('acp', 'dasar_hari_penagihan', 'sent_date', 'select', 'Tanggal Awal Perhitungan Hari Penagihan', NULL, '{"invoice_date": "Tanggal Invoice", "sent_date": "Tanggal Kirim Invoice", "due_date": "Tanggal Jatuh Tempo"}', 36),
('penagihan', 'hari_jatuh_tempo_segera', '7', 'int', 'Rentang "Jatuh Tempo Segera" (hari)', NULL, NULL, 37),
('penagihan', 'hari_tanpa_followup', '14', 'int', 'Ambang "Tanpa Follow-up" (hari)', NULL, NULL, 38),
('penagihan', 'nilai_invoice_besar', '10000000', 'decimal', 'Ambang Invoice Bernilai Besar (Rp)', NULL, NULL, 39),
('penagihan', 'bobot_janji_bayar', '90', 'int', 'Bobot Keyakinan Janji Bayar (%)', NULL, NULL, 40),
('penagihan', 'bobot_jatuh_tempo', '80', 'int', 'Bobot Keyakinan Jatuh Tempo (%)', NULL, NULL, 41),
('penagihan', 'bobot_perkiraan', '50', 'int', 'Bobot Keyakinan Estimasi Historis (%)', NULL, NULL, 42),
('keamanan', 'maks_gagal_login', '5', 'int', 'Maksimum Percobaan Login Gagal', NULL, NULL, 43),
('keamanan', 'durasi_kunci_menit', '15', 'int', 'Durasi Penguncian Akun (menit)', NULL, NULL, 44),
('keamanan', 'jendela_gagal_menit', '15', 'int', 'Jendela Perhitungan Gagal Login (menit)', NULL, NULL, 45),
('keamanan', 'idle_timeout_menit', '30', 'int', 'Logout Otomatis Setelah Tidak Aktif (menit)', NULL, NULL, 46),
('keamanan', 'panjang_sandi_minimal', '8', 'int', 'Panjang Minimal Kata Sandi', NULL, NULL, 47),
('keamanan', 'wajib_ganti_sandi_awal', '1', 'bool', 'Wajib Ganti Kata Sandi pada Login Pertama', NULL, NULL, 48),
('keamanan', 'ekstensi_lampiran_diizinkan', 'pdf,jpg,jpeg,png,gif,webp,xlsx,xls,csv,docx,doc,txt,zip', 'string', 'Ekstensi Lampiran yang Diizinkan', NULL, NULL, 49),
('keamanan', 'maks_ukuran_lampiran_mb', '10', 'int', 'Ukuran Maksimal Lampiran (MB)', NULL, NULL, 50),
('keamanan', 'cakupan_data_ketat', '1', 'bool', 'Mode Ketat Cakupan Data',
 'Bila aktif, pengguna dengan cakupan data terbatas (sales/petugas penagihan/area) yang belum ditautkan ke data master tidak dapat melihat data apa pun. Bila nonaktif, pengguna tersebut sementara melihat seluruh data.', NULL, 50),
('import', 'baris_preview', '15', 'int', 'Jumlah Baris Preview Import', NULL, NULL, 51),
('import', 'auto_buat_master', '1', 'bool', 'Buat Master Data Baru Otomatis Saat Import', 'Area, sales, customer, outlet, kategori yang belum ada akan dibuat otomatis', NULL, 52),
('import', 'perbarui_invoice_duplikat', '0', 'bool', 'Perbarui Invoice yang Sudah Ada Saat Import', 'Bila tidak aktif, baris duplikat ditolak', NULL, 53),
('import', 'buat_pembayaran_dari_kolom', '1', 'bool', 'Buat Transaksi Pembayaran dari Kolom PEMBAYARAN', NULL, NULL, 54),
('import', 'abaikan_kolom_rumus', '1', 'bool', 'Abaikan Kolom Hasil Rumus Excel (JT TEMPO, TOTAL, SALDO, PAYMENT, UMUR, Aging)', NULL, NULL, 55),
('import', 'maks_baris_per_batch', '5000', 'int', 'Maksimum Baris per Batch Import', NULL, NULL, 56),
('laporan', 'baris_per_halaman', '50', 'int', 'Jumlah Baris per Halaman Tabel', NULL, NULL, 57),
('laporan', 'maks_baris_export', '50000', 'int', 'Maksimum Baris Export', NULL, NULL, 58),
('laporan', 'tampilkan_tanda_tangan', '1', 'bool', 'Tampilkan Blok Tanda Tangan pada PDF', NULL, NULL, 59),
('laporan', 'pejabat_penandatangan', 'Manager Finance', 'string', 'Jabatan Penandatangan Laporan', NULL, NULL, 60),
('laporan', 'pejabat_pemeriksa', 'Staff Finance AR', 'string', 'Jabatan Pemeriksa Laporan', NULL, NULL, 61),
('dashboard', 'tanggal_lapor_default', 'hari_ini', 'select', 'Tanggal Pelaporan Default Dashboard', NULL, '{"hari_ini": "Hari Ini", "akhir_bulan_lalu": "Akhir Bulan Lalu", "akhir_bulan_ini": "Akhir Bulan Ini"}', 62),
('dashboard', 'top_n', '10', 'int', 'Jumlah Data pada Chart Top-N', NULL, NULL, 63),
('backup', 'simpan_maks_berkas', '10', 'int', 'Jumlah Maksimum Berkas Backup Disimpan', NULL, NULL, 64);

-- ======================== PENGGUNA DEMO ========================
-- Kata sandi awal (WAJIB diganti saat login pertama):
--   superadmin   / Admin#2026     -> Administrator Sistem
--   finance      / Finance#2026   -> Staff Finance AR
--   collection   / Collect#2026   -> Petugas Penagihan
--   sales        / Sales#2026     -> Staff Sales
--   manajemen    / Manage#2026    -> Manajemen
--   auditor      / Audit#2026     -> Auditor Internal
-- Petugas penagihan (satu per area) --------------------------------------
INSERT INTO `collection_officers` (`id`, `code`, `name`, `area_id`, `email`, `phone`, `is_active`) VALUES
(1, 'CO-JKT', 'Petugas Penagihan Jakarta', 1, 'penagihan.jakarta@rotorooter.co.id', '021-5550101', 1),
(2, 'CO-BAL', 'Petugas Penagihan Bali',    2, 'penagihan.bali@rotorooter.co.id',    '0361-555202', 1),
(3, 'CO-BDG', 'Petugas Penagihan Bandung', 3, 'penagihan.bandung@rotorooter.co.id', '022-5550303', 1);

INSERT INTO `users` (`id`, `username`, `name`, `email`, `password_hash`, `role_id`, `must_change_password`, `is_active`, `area_id`, `salesperson_id`, `collection_officer_id`) VALUES
(1, 'superadmin', 'Administrator Sistem', 'superadmin@rotorooter.co.id', '$2y$12$cl1MTsRwGFKLaFOBVwaGU.ekiLMG.wl7ZexDFXrcVpiqO7pRMg7Gy', 1, 1, 1, NULL, NULL, NULL),
(2, 'finance', 'Staff Finance AR', 'finance@rotorooter.co.id', '$2y$12$JxtPHu7/zaVZFvmMblItp.XJFfXqAcXhoHq2pT4nLT7YOP5CAuNcK', 2, 1, 1, NULL, NULL, NULL),
(3, 'collection', 'Petugas Penagihan', 'collection@rotorooter.co.id', '$2y$12$Vf6FeMKzJhLI8m3pBDSIIepBoVMQAVwUoDCazCOg8FRulDsTiMjiW', 3, 1, 1, 1, NULL, 1),
(4, 'sales', 'Staff Sales', 'sales@rotorooter.co.id', '$2y$12$9t0MGu8X7cKUyf.hQb8uJuUpQOqp6w0Uo9umWPjd7aW6uCNHMHyy.', 4, 1, 1, NULL, 15, NULL),
(5, 'manajemen', 'Manajemen', 'manajemen@rotorooter.co.id', '$2y$12$1PYUWwmuPsJ2RyNYX.xg4uktDC/omJFpmUFKUNE2TRsK0zONLRPiq', 5, 1, 1, NULL, NULL, NULL),
(6, 'auditor', 'Auditor Internal', 'auditor@rotorooter.co.id', '$2y$12$uJs5GySglW0djoMq5v1rA.M3Aw.mYXlOxUlmdR4iY9ttbOaIr4a3a', 6, 1, 1, NULL, NULL, NULL);

INSERT INTO `user_roles` (`user_id`, `role_id`) VALUES
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6);

SET FOREIGN_KEY_CHECKS = 1;
