Files
ksp/data.js
T
2026-09-16 10:38:01 +07:00

571 lines
35 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ═══════════════════════════════════════════════════════════════════
// KSP NATIONAL MONITORING DASHBOARD — DATA LAYER (DUMMY DATA)
// ═══════════════════════════════════════════════════════════════════
// ─── PROGRAM DEFINITIONS ────────────────────────────────────────────
const PROGRAMS = [
{
id: 'mbg', name: 'Makan Bergizi Gratis', shortName: 'MBG', icon: '🍱',
color: '#22c55e', badge: 'green',
description: 'Pemberian makanan bergizi gratis untuk siswa SDSMA seluruh Indonesia',
budget: 71000, realisasi: 38420, budgetUnit: 'Miliar Rp',
target: 82500000, capaian: 64300000, targetUnit: 'penerima',
ministry: 'Badan Gizi Nasional', startDate: '2025-01-06', status: 'active',
kpiLabel: ['Sekolah Aktif', 'Porsi/Hari', 'Kabupaten/Kota'],
kpiValue: ['284.220', '17,4 Juta', '514']
},
{
id: 'koperasi', name: 'Koperasi Desa Merah Putih', shortName: 'Koperasi', icon: '🏪',
color: '#3b82f6', badge: 'blue',
description: 'Pembentukan dan penguatan koperasi di setiap desa/kelurahan Indonesia',
budget: 40000, realisasi: 18600, budgetUnit: 'Miliar Rp',
target: 80000, capaian: 52400, targetUnit: 'unit koperasi',
ministry: 'KemenKopUKM', startDate: '2025-03-01', status: 'active',
kpiLabel: ['Unit Aktif', 'Total Anggota', 'Modal Tersalur'],
kpiValue: ['52.400', '6,2 Juta', 'Rp 18,6T']
},
{
id: 'psn', name: 'Proyek Strategis Nasional', shortName: 'PSN', icon: '🏗️',
color: '#f59e0b', badge: 'amber',
description: 'Percepatan pembangunan infrastruktur strategis nasional lintas sektor',
budget: 185000, realisasi: 112000, budgetUnit: 'Miliar Rp',
target: 218, capaian: 142, targetUnit: 'proyek',
ministry: 'Kemenko Perekonomian', startDate: '2024-10-20', status: 'active',
kpiLabel: ['Proyek Selesai', 'Proyek Berjalan', 'Investasi Masuk'],
kpiValue: ['142', '58', 'Rp 892T']
},
{
id: 'hilirisasi', name: 'Hilirisasi Industri', shortName: 'Hilirisasi', icon: '⚙️',
color: '#a855f7', badge: 'purple',
description: 'Transformasi nilai tambah komoditas dalam negeri melalui industrialisasi',
budget: 68000, realisasi: 29800, budgetUnit: 'Miliar Rp',
target: 21, capaian: 11, targetUnit: 'komoditas',
ministry: 'Kemenperin', startDate: '2025-01-01', status: 'active',
kpiLabel: ['Komoditas Aktif', 'Pabrik Baru', 'Nilai Ekspor'],
kpiValue: ['11', '428', 'Rp 142T']
},
{
id: 'rumah', name: 'Rumah Rakyat', shortName: 'Rumah', icon: '🏠',
color: '#f97316', badge: 'orange',
description: 'Program 3 juta rumah untuk Masyarakat Berpenghasilan Rendah (MBR)',
budget: 53000, realisasi: 21400, budgetUnit: 'Miliar Rp',
target: 3000000, capaian: 842000, targetUnit: 'unit rumah',
ministry: 'Kemen PUPR', startDate: '2025-02-01', status: 'active',
kpiLabel: ['Unit Selesai', 'Sedang Dibangun', 'KPR Disetujui'],
kpiValue: ['842.000', '1,24 Juta', '620.000']
}
];
// ─── LOCATIONS ───────────────────────────────────────────────────────
const INITIAL_LOCS = [
{
id: 0, name: 'Medan', province: 'Sumatra Utara', lat: 3.595, lng: 98.672,
programs: ['mbg', 'koperasi'],
mbg: { schools: 84, meals: 62400, coverage: 94, supplier: 'CV Berkah Pangan Utara', status: 'operational', students: 58200 },
koperasi: { units: 42, members: 8200, capital: 6.8, activeLoans: 312, status: 'active' },
psn: null, hilirisasi: null, rumah: null,
issueCount: 1, criticalCount: 0
},
{
id: 1, name: 'Pekanbaru', province: 'Riau', lat: 0.507, lng: 101.448,
programs: ['mbg'],
mbg: { schools: 42, meals: 28900, coverage: 88, supplier: 'PT Mitra Gizi Riau', status: 'operational', students: 24600 },
koperasi: null, psn: null, hilirisasi: null, rumah: null,
issueCount: 0, criticalCount: 0
},
{
id: 2, name: 'Palembang', province: 'Sumatra Selatan', lat: -2.990, lng: 104.756,
programs: ['mbg', 'koperasi', 'psn'],
mbg: { schools: 128, meals: 96000, coverage: 91, supplier: 'Koperasi Sriwijaya Pangan', status: 'operational', students: 82000 },
koperasi: { units: 68, members: 14200, capital: 11.2, activeLoans: 520, status: 'active' },
psn: { projectName: 'Jalan Tol PalembangBetung', progress: 72, contractor: 'PT Waskita Karya', value: 4800 },
hilirisasi: null, rumah: null, issueCount: 0, criticalCount: 0
},
{
id: 3, name: 'Samarinda', province: 'Kalimantan Timur', lat: -0.502, lng: 117.153,
programs: ['koperasi'],
mbg: null,
koperasi: { units: 28, members: 4820, capital: 6.8, activeLoans: 312, status: 'warning' },
psn: null, hilirisasi: null, rumah: null, issueCount: 2, criticalCount: 0
},
{
id: 4, name: 'Balikpapan', province: 'Kalimantan Timur', lat: -1.268, lng: 116.829,
programs: ['koperasi', 'hilirisasi', 'psn'],
mbg: null,
koperasi: { units: 18, members: 2340, capital: 3.2, activeLoans: 148, status: 'active' },
psn: { projectName: 'Kawasan Industri Kariangau', progress: 58, contractor: 'PT PP (Persero)', value: 12400 },
hilirisasi: { commodity: 'Batu Bara', stage: 'Coal to Chemical', progress: 45, value: 8200 },
rumah: null, issueCount: 0, criticalCount: 0
},
{
id: 5, name: 'Makassar', province: 'Sulawesi Selatan', lat: -5.147, lng: 119.432,
programs: ['mbg', 'koperasi', 'psn'],
mbg: { schools: 156, meals: 118000, coverage: 93, supplier: 'PT Sulsel Gizi Prima', status: 'operational', students: 104000 },
koperasi: { units: 52, members: 6200, capital: 8.4, activeLoans: 480, status: 'active' },
psn: { projectName: 'Makassar New Port Phase 2', progress: 84, contractor: 'PT Pelindo IV', value: 9600 },
hilirisasi: null, rumah: null, issueCount: 0, criticalCount: 0
},
{
id: 6, name: 'Surabaya', province: 'Jawa Timur', lat: -7.250, lng: 112.750,
programs: ['mbg', 'koperasi', 'psn', 'rumah'],
mbg: { schools: 218, meals: 182000, coverage: 98, supplier: 'PT Gizi Jatim', status: 'operational', students: 162000 },
koperasi: { units: 96, members: 8420, capital: 12.4, activeLoans: 640, status: 'active' },
psn: { projectName: 'LRT Surabaya', progress: 38, contractor: 'PT Adhi Karya', value: 31000 },
rumah: { units: 12400, completed: 8200, progress: 66, contractor: 'Perum Perumnas', budget: 1240 },
hilirisasi: null, issueCount: 2, criticalCount: 1
},
{
id: 7, name: 'Bandung', province: 'Jawa Barat', lat: -6.914, lng: 107.609,
programs: ['mbg', 'koperasi', 'rumah'],
mbg: { schools: 310, meals: 245000, coverage: 99, supplier: 'Koperasi Jabar Pangan', status: 'operational', students: 220000 },
koperasi: { units: 128, members: 11200, capital: 18.6, activeLoans: 890, status: 'active' },
rumah: { units: 18600, completed: 14800, progress: 80, contractor: 'PT Ciputra', budget: 1860 },
psn: null, hilirisasi: null, issueCount: 0, criticalCount: 0
},
{
id: 8, name: 'Semarang', province: 'Jawa Tengah', lat: -6.967, lng: 110.419,
programs: ['mbg', 'koperasi'],
mbg: { schools: 196, meals: 158000, coverage: 97, supplier: 'UD Pangan Maju Jateng', status: 'operational', students: 142000 },
koperasi: { units: 84, members: 6800, capital: 9.1, activeLoans: 520, status: 'active' },
psn: null, hilirisasi: null, rumah: null, issueCount: 0, criticalCount: 0
},
{
id: 9, name: 'Yogyakarta', province: 'DI Yogyakarta', lat: -7.797, lng: 110.370,
programs: ['mbg', 'koperasi'],
mbg: { schools: 144, meals: 104000, coverage: 99, supplier: 'Koperasi UGM Pangan', status: 'operational', students: 96000 },
koperasi: { units: 62, members: 4200, capital: 6.0, activeLoans: 320, status: 'active' },
psn: null, hilirisasi: null, rumah: null, issueCount: 0, criticalCount: 0
},
{
id: 10, name: 'Denpasar', province: 'Bali', lat: -8.670, lng: 115.213,
programs: ['mbg', 'koperasi', 'psn'],
mbg: { schools: 88, meals: 62000, coverage: 96, supplier: 'UD Boga Bali', status: 'operational', students: 56000 },
koperasi: { units: 36, members: 3600, capital: 5.2, activeLoans: 240, status: 'active' },
psn: { projectName: 'Shortcut MengwitaniSingaraja', progress: 91, contractor: 'PT Hutama Karya', value: 2800 },
hilirisasi: null, rumah: null, issueCount: 0, criticalCount: 0
},
{
id: 11, name: 'Palu', province: 'Sulawesi Tengah', lat: -0.900, lng: 119.877,
programs: ['koperasi'],
mbg: null,
koperasi: { units: 14, members: 1840, capital: 2.1, activeLoans: 0, status: 'inactive' },
psn: null, hilirisasi: null, rumah: null, issueCount: 1, criticalCount: 1
},
{
id: 12, name: 'Manokwari', province: 'Papua Barat', lat: -0.861, lng: 134.062,
programs: ['mbg'],
mbg: { schools: 28, meals: 3200, coverage: 74, supplier: 'Vendor Tidak Terverifikasi', status: 'under_review', students: 18400 },
koperasi: null, psn: null, hilirisasi: null, rumah: null, issueCount: 1, criticalCount: 1
},
{
id: 13, name: 'Kupang', province: 'NTT', lat: -10.174, lng: 123.607,
programs: ['mbg', 'rumah'],
mbg: { schools: 64, meals: 42000, coverage: 82, supplier: 'PT NTT Sejahtera', status: 'under_review', students: 32000 },
rumah: { units: 4200, completed: 1800, progress: 43, contractor: 'CV NTT Bangun', budget: 420 },
koperasi: null, psn: null, hilirisasi: null, issueCount: 2, criticalCount: 0
},
{
id: 14, name: 'Jayapura', province: 'Papua', lat: -2.538, lng: 140.718,
programs: ['mbg', 'koperasi', 'psn'],
mbg: { schools: 52, meals: 36000, coverage: 78, supplier: 'Koperasi Papua Sehat', status: 'operational', students: 28000 },
koperasi: { units: 22, members: 1820, capital: 2.6, activeLoans: 88, status: 'active' },
psn: { projectName: 'Trans Papua Jalan Nasional', progress: 28, contractor: 'PT Brantas Abipraya', value: 18600 },
hilirisasi: null, rumah: null, issueCount: 0, criticalCount: 0
},
{
id: 15, name: 'Pontianak', province: 'Kalimantan Barat', lat: -0.026, lng: 109.343,
programs: ['koperasi', 'hilirisasi'],
mbg: null,
koperasi: { units: 32, members: 3120, capital: 4.0, activeLoans: 198, status: 'active' },
hilirisasi: { commodity: 'Kelapa Sawit', stage: 'Oleochemical', progress: 68, value: 6400 },
psn: null, rumah: null, issueCount: 1, criticalCount: 0
},
{
id: 16, name: 'Ambon', province: 'Maluku', lat: -3.695, lng: 128.181,
programs: ['mbg'],
mbg: { schools: 38, meals: 24500, coverage: 85, supplier: 'PT Maluku Pangan Mandiri', status: 'operational', students: 21000 },
koperasi: null, psn: null, hilirisasi: null, rumah: null, issueCount: 0, criticalCount: 0
},
{
id: 17, name: 'Mataram', province: 'NTB', lat: -8.582, lng: 116.117,
programs: ['mbg', 'koperasi'],
mbg: { schools: 76, meals: 54000, coverage: 92, supplier: 'Koperasi Lombok Sejahtera', status: 'operational', students: 49000 },
koperasi: { units: 44, members: 2850, capital: 3.8, activeLoans: 154, status: 'active' },
psn: null, hilirisasi: null, rumah: null, issueCount: 0, criticalCount: 0
},
{
id: 18, name: 'Manado', province: 'Sulawesi Utara', lat: 1.475, lng: 124.843,
programs: ['koperasi', 'hilirisasi'],
mbg: null,
koperasi: { units: 24, members: 1950, capital: 2.9, activeLoans: 112, status: 'active' },
hilirisasi: { commodity: 'Nikel', stage: 'Nickel Matte Processing', progress: 72, value: 14200 },
psn: null, rumah: null, issueCount: 0, criticalCount: 0
},
{
id: 19, name: 'Padang', province: 'Sumatra Barat', lat: -0.947, lng: 100.417,
programs: ['mbg'],
mbg: { schools: 98, meals: 72000, coverage: 96, supplier: 'PT Minang Gizi Utama', status: 'operational', students: 67000 },
koperasi: null, psn: null, hilirisasi: null, rumah: null, issueCount: 0, criticalCount: 0
},
{
id: 20, name: 'Solo', province: 'Jawa Tengah', lat: -7.576, lng: 110.824,
programs: ['mbg', 'rumah'],
mbg: { schools: 112, meals: 89000, coverage: 97, supplier: 'CV Solo Gizi Prima', status: 'operational', students: 81200 },
rumah: { units: 8400, completed: 6200, progress: 74, contractor: 'Perum Perumnas', budget: 840 },
koperasi: null, psn: null, hilirisasi: null, issueCount: 0, criticalCount: 0
},
{
id: 21, name: 'Malang', province: 'Jawa Timur', lat: -7.983, lng: 112.621,
programs: ['mbg', 'koperasi'],
mbg: { schools: 168, meals: 124000, coverage: 95, supplier: 'PT Malang Sejahtera', status: 'operational', students: 112000 },
koperasi: { units: 72, members: 5600, capital: 7.8, activeLoans: 420, status: 'active' },
psn: null, hilirisasi: null, rumah: null, issueCount: 1, criticalCount: 0
},
{
id: 22, name: 'Banjarmasin', province: 'Kalimantan Selatan', lat: -3.320, lng: 114.592,
programs: ['mbg', 'koperasi', 'hilirisasi'],
mbg: { schools: 88, meals: 64000, coverage: 90, supplier: 'PT Kalsel Pangan', status: 'operational', students: 58000 },
koperasi: { units: 38, members: 3400, capital: 4.6, activeLoans: 210, status: 'active' },
hilirisasi: { commodity: 'Batu Bara', stage: 'Coal Gasification', progress: 32, value: 5800 },
psn: null, rumah: null, issueCount: 1, criticalCount: 1
},
{
id: 23, name: 'Bengkulu', province: 'Bengkulu', lat: -3.800, lng: 102.267,
programs: ['mbg', 'rumah'],
mbg: { schools: 54, meals: 38000, coverage: 84, supplier: 'Koperasi Bengkulu Mandiri', status: 'operational', students: 34000 },
rumah: { units: 2800, completed: 980, progress: 35, contractor: 'CV Bumi Bengkulu', budget: 280 },
koperasi: null, psn: null, hilirisasi: null, issueCount: 1, criticalCount: 0
},
{
id: 24, name: 'Banda Aceh', province: 'Aceh', lat: 5.548, lng: 95.323,
programs: ['mbg', 'koperasi'],
mbg: { schools: 72, meals: 52000, coverage: 88, supplier: 'Koperasi Aceh Sejahtera', status: 'operational', students: 48000 },
koperasi: { units: 36, members: 2800, capital: 3.4, activeLoans: 162, status: 'active' },
psn: null, hilirisasi: null, rumah: null, issueCount: 0, criticalCount: 0
}
];
// ─── ISSUES ─────────────────────────────────────────────────────────
const INITIAL_ISSUES = [
{
id: 'ISS-001', programId: 'mbg',
daerah: 'Manokwari', provinsi: 'Papua Barat',
judul: 'Ketidaksesuaian Laporan Distribusi MBG — Vendor Tidak Terverifikasi',
deskripsi: '3.200 porsi makanan dilaporkan terdistribusi namun tidak ada satu pun konfirmasi pengiriman dari pihak vendor. Data harian sistem SIMBG menunjukkan gap yang signifikan. Vendor yang terdaftar tidak ditemukan di database resmi BGN.',
severity: 'critical', status: 'in_progress',
assignee: 'Tim Verifikasi KSP — Region Timur',
createdAt: '2026-06-15', updatedAt: '2026-06-22',
surveyIds: ['SRV-001'], escalationIds: ['ESC-001'],
timeline: [
{ time: '2026-06-15 08:00', action: 'Issue terdeteksi oleh sistem monitoring SIMBG', actor: 'Sistem Otomatis', type: 'created' },
{ time: '2026-06-16 09:30', action: 'Issue diverifikasi manual oleh analis senior', actor: 'Budi Santoso', type: 'verified' },
{ time: '2026-06-17 14:00', action: 'Tim investigasi lapangan ditugaskan ke Manokwari', actor: 'KSP Div. Pengawasan', type: 'assigned' },
{ time: '2026-06-18 10:00', action: 'Survey lapangan dilaksanakan — temuan kritis', actor: 'Hendra Wijaya', type: 'survey' },
{ time: '2026-06-20 16:00', action: 'Eskalasi ke Level 3 (BGN) diajukan', actor: 'KSP Div. Pengawasan', type: 'escalated' }
]
},
{
id: 'ISS-002', programId: 'koperasi',
daerah: 'Palu', provinsi: 'Sulawesi Tengah',
judul: 'Koperasi Fiktif — Modal Disalurkan Tanpa Aktivitas Bisnis 42 Hari',
deskripsi: 'Modal Rp 2,1 Miliar telah disalurkan ke 3 unit koperasi di Palu namun tidak ada aktivitas bisnis yang tercatat selama 42 hari berturut-turut. Alamat fisik koperasi tidak dapat ditemukan saat verifikasi lapangan.',
severity: 'critical', status: 'in_progress',
assignee: 'Tim Investigasi Khusus KSP',
createdAt: '2026-06-10', updatedAt: '2026-06-23',
surveyIds: ['SRV-002'], escalationIds: ['ESC-002'],
timeline: [
{ time: '2026-06-10 07:00', action: 'Anomali zero-activity terdeteksi (42 hari berturut-turut)', actor: 'Sistem Otomatis', type: 'created' },
{ time: '2026-06-11 11:00', action: 'Cross-referensi data NIK anggota dilakukan', actor: 'Analis Senior', type: 'verified' },
{ time: '2026-06-13 09:00', action: 'Tim Investigasi Khusus ditugaskan oleh Deputi KSP', actor: 'Deputi KSP', type: 'assigned' },
{ time: '2026-06-15 08:00', action: 'Survey lapangan: alamat koperasi tidak ditemukan', actor: 'Ratna Dewi', type: 'survey' },
{ time: '2026-06-18 14:00', action: 'Eskalasi L4 ke Kejaksaan Agung & POLRI', actor: 'KSP / Deputi', type: 'escalated' }
]
},
{
id: 'ISS-003', programId: 'mbg',
daerah: 'Kupang', provinsi: 'NTT',
judul: 'Lonjakan Penerima MBG 340% Tanpa Dasar Data Kemendikbud',
deskripsi: 'Jumlah penerima MBG di Kupang melonjak 340% dalam 14 hari (dari 4.200 menjadi 18.500) tanpa ada perubahan data jumlah siswa dari Kemendikbud. Tidak ada penambahan sekolah baru yang terverifikasi.',
severity: 'high', status: 'open',
assignee: 'Belum ditugaskan',
createdAt: '2026-06-20', updatedAt: '2026-06-20',
surveyIds: [], escalationIds: [],
timeline: [
{ time: '2026-06-20 13:00', action: 'Anomali lonjakan data NIK penerima terdeteksi otomatis', actor: 'Sistem Otomatis', type: 'created' }
]
},
{
id: 'ISS-004', programId: 'koperasi',
daerah: 'Samarinda', provinsi: 'Kalimantan Timur',
judul: '2 Unit Koperasi Terdaftar di Alamat Fisik Identik',
deskripsi: 'Dua unit koperasi ditemukan terdaftar dengan alamat fisik yang persis sama: Jl. Pattimura No.14, Samarinda. Verifikasi lapangan menunjukkan lokasi tersebut bukan bangunan komersial melainkan rumah tinggal warga biasa.',
severity: 'high', status: 'open',
assignee: 'Belum ditugaskan',
createdAt: '2026-06-18', updatedAt: '2026-06-18',
surveyIds: [], escalationIds: [],
timeline: [
{ time: '2026-06-18 10:00', action: 'Duplikasi alamat koperasi terdeteksi saat rekonsiliasi data', actor: 'Sistem Otomatis', type: 'created' }
]
},
{
id: 'ISS-005', programId: 'mbg',
daerah: 'Surabaya', provinsi: 'Jawa Timur',
judul: 'Keterlambatan Pembayaran Vendor MBG Lebih dari 60 Hari',
deskripsi: 'PT Gizi Jatim selaku vendor utama MBG Surabaya mengalami keterlambatan pembayaran dari pemda lebih dari 60 hari. Vendor mengancam hentikan pengiriman jika tidak ada kepastian pembayaran dalam 7 hari. Berpotensi ganggu 182.000 porsi/hari.',
severity: 'critical', status: 'in_progress',
assignee: 'Tim Koordinasi KSPKemenkeu',
createdAt: '2026-06-19', updatedAt: '2026-06-24',
surveyIds: [], escalationIds: ['ESC-003'],
timeline: [
{ time: '2026-06-19 09:00', action: 'Laporan keterlambatan pembayaran masuk dari vendor', actor: 'PT Gizi Jatim', type: 'created' },
{ time: '2026-06-20 14:00', action: 'Verifikasi tagihan vendor oleh tim keuangan daerah', actor: 'Kemenkeu Region Jatim', type: 'verified' },
{ time: '2026-06-22 10:00', action: 'Eskalasi L2 ke Kemenkeu Pusat diajukan', actor: 'KSP Div. Koordinasi', type: 'escalated' }
]
},
{
id: 'ISS-006', programId: 'psn',
daerah: 'Surabaya', provinsi: 'Jawa Timur',
judul: 'Progress LRT Surabaya Terlambat 28% dari Jadwal Kuartal 2',
deskripsi: 'Proyek LRT Surabaya baru mencapai progress 38% sementara target Q2-2026 seharusnya 66%. Keterlambatan karena pembebasan lahan belum tuntas di 3 segmen utama. Risiko keterlambatan selesai bertambah 18 bulan.',
severity: 'high', status: 'in_progress',
assignee: 'Tim Monev PSN Jawa Timur',
createdAt: '2026-06-14', updatedAt: '2026-06-21',
surveyIds: ['SRV-003'], escalationIds: [],
timeline: [
{ time: '2026-06-14 11:00', action: 'Review progress Q2 menunjukkan keterlambatan signifikan', actor: 'Tim Monev PSN', type: 'created' },
{ time: '2026-06-16 09:00', action: 'Rapat koordinasi dengan PT Adhi Karya & BPJT', actor: 'KSP + BPJT', type: 'verified' },
{ time: '2026-06-21 14:00', action: 'Site visit dan assessment lahan oleh tim lapangan', actor: 'Tim PSN Jatim', type: 'survey' }
]
},
{
id: 'ISS-007', programId: 'rumah',
daerah: 'Kupang', provinsi: 'NTT',
judul: 'Kualitas Konstruksi Rumah Rakyat Tidak Memenuhi Standar SNI',
deskripsi: 'Inspeksi lapangan menemukan 480 unit rumah yang telah "diselesaikan" memiliki kualitas di bawah standar SNI: dinding retak, pondasi tidak memenuhi spesifikasi, material berbeda dari kontrak. Berpotensi membahayakan penghuni.',
severity: 'high', status: 'open',
assignee: 'Belum ditugaskan',
createdAt: '2026-06-21', updatedAt: '2026-06-21',
surveyIds: [], escalationIds: [],
timeline: [
{ time: '2026-06-21 14:00', action: 'Laporan inspeksi kualitas diterima dari surveyor PUPR', actor: 'Tim Inspeksi PUPR', type: 'created' }
]
},
{
id: 'ISS-008', programId: 'koperasi',
daerah: 'Pontianak', provinsi: 'Kalimantan Barat',
judul: 'Anggota Koperasi Terdaftar Ganda di 3 Unit Berbeda',
deskripsi: 'Analisis data menemukan 840 orang yang sama terdaftar sebagai anggota aktif di 3 unit koperasi berbeda di Pontianak secara bersamaan. Melanggar aturan keanggotaan dan menyebabkan triple-counting laporan kinerja.',
severity: 'medium', status: 'open',
assignee: 'Belum ditugaskan',
createdAt: '2026-06-22', updatedAt: '2026-06-22',
surveyIds: [], escalationIds: [],
timeline: [
{ time: '2026-06-22 09:00', action: 'Duplikasi data anggota terdeteksi dalam rekonsiliasi SIKOPNAS', actor: 'Sistem Otomatis', type: 'created' }
]
},
{
id: 'ISS-009', programId: 'mbg',
daerah: 'Malang', provinsi: 'Jawa Timur',
judul: 'Kandungan Gizi Menu MBG di Bawah Standar Minimum BGN',
deskripsi: 'Uji laboratorium terhadap 24 sampel makanan MBG di 8 sekolah Malang menunjukkan kandungan protein rata-rata hanya 42% dari standar minimum BGN. Beberapa sampel mengandung pengawet yang tidak diizinkan.',
severity: 'medium', status: 'in_progress',
assignee: 'BGN Lab & Tim Verifikasi',
createdAt: '2026-06-17', updatedAt: '2026-06-22',
surveyIds: ['SRV-004'], escalationIds: [],
timeline: [
{ time: '2026-06-17 10:00', action: 'Hasil uji lab diterima: kualitas gizi di bawah standar', actor: 'BGN Lab Jatim', type: 'created' },
{ time: '2026-06-18 09:00', action: 'Verifikasi lapangan ke 8 sekolah oleh tim gizi', actor: 'Tim Gizi BGN', type: 'verified' },
{ time: '2026-06-22 14:00', action: 'Surat peringatan resmi dikirimkan ke vendor', actor: 'BGN + KSP', type: 'assigned' }
]
},
{
id: 'ISS-010', programId: 'hilirisasi',
daerah: 'Banjarmasin', provinsi: 'Kalimantan Selatan',
judul: 'Proyek Coal Gasification Terhenti — Izin Lingkungan Dicabut KLHK',
deskripsi: 'Proyek hilirisasi batu bara Coal Gasification terhenti karena KLHK mencabut izin lingkungan setelah ditemukan AMDAL awal menggunakan data palsu. Progress terhenti di 32% dan investasi Rp 5,8T terancam mangkrak.',
severity: 'critical', status: 'open',
assignee: 'Belum ditugaskan',
createdAt: '2026-06-23', updatedAt: '2026-06-23',
surveyIds: [], escalationIds: [],
timeline: [
{ time: '2026-06-23 08:00', action: 'Keputusan pencabutan izin lingkungan KLHK diterima', actor: 'KLHK', type: 'created' }
]
},
{
id: 'ISS-011', programId: 'rumah',
daerah: 'Bengkulu', provinsi: 'Bengkulu',
judul: 'Realisasi Rumah Rakyat Hanya 35% — Jauh di Bawah Target Semester 1',
deskripsi: 'Target pembangunan 2.800 unit rumah rakyat di Bengkulu baru terealisasi 980 unit (35%) akhir semester 1. Audit menunjukkan keterlambatan administrasi kontrak sejak awal sebagai penyebab utama, bukan cuaca.',
severity: 'medium', status: 'in_progress',
assignee: 'Tim Monev PUPR Bengkulu',
createdAt: '2026-06-15', updatedAt: '2026-06-20',
surveyIds: [], escalationIds: [],
timeline: [
{ time: '2026-06-15 09:00', action: 'Evaluasi semester 1: realisasi jauh di bawah target', actor: 'PUPR Bengkulu', type: 'created' },
{ time: '2026-06-18 11:00', action: 'Rapat koordinasi dengan CV Bumi Bengkulu dilaksanakan', actor: 'Tim Monev PUPR', type: 'assigned' }
]
},
{
id: 'ISS-012', programId: 'mbg',
daerah: 'Medan', provinsi: 'Sumatra Utara',
judul: 'Gap Data Distribusi 2 Sekolah — 8 Hari Berturut-turut',
deskripsi: '2 sekolah di Medan Kota melaporkan nol distribusi makanan selama 8 hari sekolah berturut-turut, sementara log pengiriman supplier menunjukkan pengiriman berhasil.',
severity: 'medium', status: 'resolved',
assignee: 'Tim Verifikasi KSP Sumatra Utara',
createdAt: '2026-06-05', updatedAt: '2026-06-15',
surveyIds: ['SRV-005'], escalationIds: [],
timeline: [
{ time: '2026-06-05 08:00', action: 'Gap distribusi terdeteksi oleh sistem SIMBG', actor: 'Sistem Otomatis', type: 'created' },
{ time: '2026-06-07 10:00', action: 'Verifikasi dengan kepala sekolah dilakukan', actor: 'Tim KSP Sumut', type: 'verified' },
{ time: '2026-06-10 09:00', action: 'Survey lapangan ke 2 sekolah bermasalah', actor: 'Andi Kusuma', type: 'survey' },
{ time: '2026-06-15 14:00', action: 'RESOLVED: sistem pencatatan sekolah error, data telah diperbaiki', actor: 'Tim IT BGN', type: 'resolved' }
]
},
{
id: 'ISS-013', programId: 'koperasi',
daerah: 'Samarinda', provinsi: 'Kalimantan Timur',
judul: '1.240 NIK Anggota Koperasi Tidak Valid dalam DTSEN',
deskripsi: 'Rekonsiliasi data koperasi Samarinda dengan DTSEN menemukan 1.240 NIK anggota tidak valid: 820 NIK tidak terdaftar di Dukcapil dan 420 NIK merupakan duplikasi. Berpotensi menyebabkan penyaluran modal ke penerima yang salah.',
severity: 'high', status: 'in_progress',
assignee: 'Tim Rekonsiliasi Data KemenKopUKM',
createdAt: '2026-06-12', updatedAt: '2026-06-22',
surveyIds: [], escalationIds: [],
timeline: [
{ time: '2026-06-12 11:00', action: 'Rekonsiliasi otomatis SIKOPNAS×DTSEN menemukan anomali NIK', actor: 'Sistem Otomatis', type: 'created' },
{ time: '2026-06-14 09:00', action: 'Tim verifikasi data ditugaskan oleh KemenKopUKM', actor: 'KemenKopUKM', type: 'assigned' },
{ time: '2026-06-22 14:00', action: 'Proses pembersihan data berlangsung (840/1.240 NIK selesai)', actor: 'Tim Rekonsiliasi', type: 'verified' }
]
}
];
// ─── SURVEYS ─────────────────────────────────────────────────────────
const INITIAL_SURVEYS = [
{
id: 'SRV-001', issueId: 'ISS-001', programId: 'mbg',
namaOfficer: 'Hendra Wijaya', jabatan: 'Analis Senior KSP',
tanggalSurvey: '2026-06-18', daerah: 'Manokwari', provinsi: 'Papua Barat',
status: 'verified',
temuanUtama: 'Sistem pencatatan vendor tidak sinkron dengan SIMBG. Terdapat gap 3 hari tanpa upload data. Gudang vendor ditemukan kosong saat dikunjungi. Tidak ada jejak pengiriman fisik.',
rekomendasi: 'Audit menyeluruh terhadap vendor dan integrasi langsung sistem vendor ke SIMBG. Pertimbangkan penggantian vendor segera. Laporkan ke BGN untuk tindakan administratif.',
skorKeparahan: 1, verifiedBy: 'Deputi Pengawasan KSP', createdAt: '2026-06-18'
},
{
id: 'SRV-002', issueId: 'ISS-002', programId: 'koperasi',
namaOfficer: 'Ratna Dewi Puspita', jabatan: 'Investigator KSP',
tanggalSurvey: '2026-06-15', daerah: 'Palu', provinsi: 'Sulawesi Tengah',
status: 'verified',
temuanUtama: 'Ketiga alamat koperasi tidak ditemukan. Lokasi 1: warung tutup & kosong. Lokasi 2: tanah kosong berpagar. Lokasi 3: rumah warga yang tidak mengetahui adanya koperasi. Nomor pengurus tidak aktif semua.',
rekomendasi: 'Pembekuan segera pencairan modal. Laporkan ke POLRI dan Kejaksaan untuk tindak pidana penipuan. Cabut izin operasional ketiga koperasi fiktif.',
skorKeparahan: 1, verifiedBy: 'Deputi Pengawasan KSP', createdAt: '2026-06-15'
},
{
id: 'SRV-003', issueId: 'ISS-006', programId: 'psn',
namaOfficer: 'Dimas Prasetyo', jabatan: 'Inspektor PSN KSP',
tanggalSurvey: '2026-06-21', daerah: 'Surabaya', provinsi: 'Jawa Timur',
status: 'submitted',
temuanUtama: 'Pembebasan lahan Segmen 2 (6,2 km) belum tuntas — 14 bidang masih sengketa. Segmen 3 terhenti total karena dispute tarif ganti rugi. Alat berat idle sejak 45 hari. Kontraktor mengklaim force majeure.',
rekomendasi: 'Percepat mediasi lahan dengan BPN dan Pemda. Kaji ulang klaim force majeure. Pertimbangkan denda keterlambatan. Evaluasi kapasitas kontraktor.',
skorKeparahan: 3, verifiedBy: null, createdAt: '2026-06-21'
},
{
id: 'SRV-004', issueId: 'ISS-009', programId: 'mbg',
namaOfficer: 'Dr. Siti Rahmawati', jabatan: 'Ahli Gizi Nasional BGN',
tanggalSurvey: '2026-06-18', daerah: 'Malang', provinsi: 'Jawa Timur',
status: 'verified',
temuanUtama: 'Dari 24 sampel: protein rata-rata 10,5g (standar minimum 25g). 8 sampel mengandung Natrium Benzoat >50mg/kg (batas aman). Dapur produksi vendor tidak memiliki sertifikasi HACCP. Bahan baku menggunakan ayam broiler kualitas C.',
rekomendasi: 'Ganti vendor segera. Wajibkan sertifikasi HACCP. Lakukan uji lab random setiap bulan. Pertimbangkan blacklist vendor saat ini dari program MBG.',
skorKeparahan: 2, verifiedBy: 'Kepala BGN Jatim', createdAt: '2026-06-18'
},
{
id: 'SRV-005', issueId: 'ISS-012', programId: 'mbg',
namaOfficer: 'Andi Kusuma', jabatan: 'Analis KSP Wilayah Sumatra',
tanggalSurvey: '2026-06-10', daerah: 'Medan', provinsi: 'Sumatra Utara',
status: 'verified',
temuanUtama: 'Sistem pencatatan sekolah menggunakan aplikasi lama yang mengalami bug saat update versi baru. Data tidak ter-upload ke SIMBG secara otomatis. Makanan tetap diterima dan terdistribusi kepada siswa secara normal.',
rekomendasi: 'Update sistem pencatatan di semua sekolah. Training ulang operator. Pasang monitoring real-time untuk deteksi dini gap pencatatan.',
skorKeparahan: 4, verifiedBy: 'Tim KSP Sumatra Utara', createdAt: '2026-06-10'
}
];
// ─── ESCALATIONS ─────────────────────────────────────────────────────
const INITIAL_ESCALATIONS = [
{
id: 'ESC-001', issueId: 'ISS-001', programId: 'mbg',
level: 'L3', levelName: 'Eskalasi Kementerian/Lembaga',
assignTo: 'Badan Gizi Nasional (BGN)',
notes: 'Issue memerlukan intervensi langsung BGN untuk verifikasi vendor dan audit rantai pasok. KSP merekomendasikan penghentian sementara vendor hingga investigasi selesai.',
status: 'pending', createdBy: 'KSP Div. Pengawasan',
createdAt: '2026-06-20', resolvedAt: null,
daerah: 'Manokwari', provinsi: 'Papua Barat'
},
{
id: 'ESC-002', issueId: 'ISS-002', programId: 'koperasi',
level: 'L4', levelName: 'Eskalasi Penegakan Hukum',
assignTo: 'Kejaksaan Agung & POLRI',
notes: 'Temuan lapangan menunjukkan indikasi tindak pidana: pendirian koperasi fiktif untuk menyerap dana pemerintah. Diperlukan penyelidikan pidana oleh aparat penegak hukum.',
status: 'approved', createdBy: 'Deputi KSP',
createdAt: '2026-06-18', resolvedAt: null,
daerah: 'Palu', provinsi: 'Sulawesi Tengah'
},
{
id: 'ESC-003', issueId: 'ISS-005', programId: 'mbg',
level: 'L2', levelName: 'Eskalasi Internal KSP',
assignTo: 'Deputi Koordinasi KSP + Kemenkeu Pusat',
notes: 'Diperlukan percepatan pencairan pembayaran ke vendor MBG Surabaya untuk mencegah penghentian layanan yang berdampak pada 182.000 penerima manfaat.',
status: 'resolved', createdBy: 'KSP Div. Koordinasi',
createdAt: '2026-06-22', resolvedAt: '2026-06-24',
daerah: 'Surabaya', provinsi: 'Jawa Timur'
}
];
// ─── NOTIFICATION FEED ────────────────────────────────────────────────
const INITIAL_NOTIFICATIONS = [
{ id: 'N1', type: 'critical', msg: 'ISS-001: Vendor MBG Manokwari tidak terverifikasi — perlu tindakan segera', time: '10 menit lalu', read: false },
{ id: 'N2', type: 'critical', msg: 'ISS-002: Koperasi fiktif Palu — eskalasi ke Kejaksaan telah disetujui', time: '1 jam lalu', read: false },
{ id: 'N3', type: 'high', msg: 'ISS-010: Izin lingkungan proyek Banjarmasin dicabut KLHK', time: '3 jam lalu', read: false },
{ id: 'N4', type: 'info', msg: 'SRV-003: Survey PSN Surabaya menunggu verifikasi', time: '5 jam lalu', read: true },
{ id: 'N5', type: 'success', msg: 'ISS-012: Issue distribusi MBG Medan berhasil diselesaikan', time: 'Kemarin', read: true }
];
// ─── HELPER UTILITIES ─────────────────────────────────────────────────
function getProgramById(id) { return PROGRAMS.find(p => p.id === id); }
function getIssueById(id) { return APP_STATE.issues.find(i => i.id === id); }
function getSurveyById(id) { return APP_STATE.surveys.find(s => s.id === id); }
function getEscalationById(id) { return APP_STATE.escalations.find(e => e.id === id); }
const SEVERITY_CONFIG = {
critical: { label: 'Kritis', color: '#ef4444', bg: 'rgba(239,68,68,0.12)', icon: '🔴' },
high: { label: 'Tinggi', color: '#f97316', bg: 'rgba(249,115,22,0.12)', icon: '🟠' },
medium: { label: 'Sedang', color: '#f59e0b', bg: 'rgba(245,158,11,0.12)', icon: '🟡' },
low: { label: 'Rendah', color: '#22c55e', bg: 'rgba(34,197,94,0.12)', icon: '🟢' }
};
const STATUS_CONFIG = {
open: { label: 'Terbuka', color: '#ef4444', bg: 'rgba(239,68,68,0.10)' },
in_progress: { label: 'Diproses', color: '#3b82f6', bg: 'rgba(59,130,246,0.10)' },
resolved: { label: 'Selesai', color: '#22c55e', bg: 'rgba(34,197,94,0.10)' },
closed: { label: 'Ditutup', color: '#71717a', bg: 'rgba(113,113,122,0.10)' }
};
const ESCALATION_LEVELS = {
L1: { label: 'L1 — Daerah', color: '#22c55e' },
L2: { label: 'L2 — KSP Internal', color: '#3b82f6' },
L3: { label: 'L3 — Kementerian', color: '#f59e0b' },
L4: { label: 'L4 — Penegakan Hukum', color: '#ef4444' }
};
// ─── GLOBAL APP STATE ─────────────────────────────────────────────────
const APP_STATE = {
locs: JSON.parse(JSON.stringify(INITIAL_LOCS)),
issues: JSON.parse(JSON.stringify(INITIAL_ISSUES)),
surveys: JSON.parse(JSON.stringify(INITIAL_SURVEYS)),
escalations: JSON.parse(JSON.stringify(INITIAL_ESCALATIONS)),
notifications: JSON.parse(JSON.stringify(INITIAL_NOTIFICATIONS)),
currentPage: 'dashboard',
currentProgram: 'all',
issueFilter: { program: 'all', severity: 'all', status: 'all', search: '' },
surveyFilter: { program: 'all', status: 'all' },
selectedIssueId: null,
mapInstance: null,
mapMarkers: {},
chartInstances: {}
};