Files
sibedas/database/seeders/MasterParameterSeeder.php

388 lines
16 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\MasterParameter;
use App\Models\BuildingFunction;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
class MasterParameterSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$now = Carbon::now();
// 1. General Parameters (Parameter Umum)
$generalParameters = [
[
'parameter_code' => 'luas_bangunan',
'parameter_name' => 'Luas Bangunan',
'default_value' => 0.000000,
'unit' => 'm²',
'description' => 'Luas total bangunan dalam meter persegi'
],
[
'parameter_code' => 'tarif_dasar',
'parameter_name' => 'Tarif Dasar',
'default_value' => 7035000.000000,
'unit' => 'Rupiah',
'description' => 'Tarif dasar retribusi per meter persegi (7.035.000)'
],
[
'parameter_code' => 'koefisien_dasar',
'parameter_name' => 'Koefisien Dasar',
'default_value' => 1.000000,
'unit' => 'decimal',
'description' => 'Koefisien dasar perhitungan'
]
];
// 2. IP Ketinggian Parameters per Lantai (Data dari tabel)
$floorHeightParameters = [
[
'parameter_code' => 'ip_ketinggian_1',
'parameter_name' => 'IP Ketinggian Lantai 1',
'default_value' => 1.000000,
'unit' => 'decimal',
'description' => 'Indeks ketinggian untuk lantai 1'
],
[
'parameter_code' => 'ip_ketinggian_2',
'parameter_name' => 'IP Ketinggian Lantai 2',
'default_value' => 1.090000,
'unit' => 'decimal',
'description' => 'Indeks ketinggian untuk lantai 2'
],
[
'parameter_code' => 'ip_ketinggian_3',
'parameter_name' => 'IP Ketinggian Lantai 3',
'default_value' => 1.120000,
'unit' => 'decimal',
'description' => 'Indeks ketinggian untuk lantai 3'
],
[
'parameter_code' => 'ip_ketinggian_4',
'parameter_name' => 'IP Ketinggian Lantai 4',
'default_value' => 1.135000,
'unit' => 'decimal',
'description' => 'Indeks ketinggian untuk lantai 4'
],
[
'parameter_code' => 'ip_ketinggian_5',
'parameter_name' => 'IP Ketinggian Lantai 5',
'default_value' => 1.162000,
'unit' => 'decimal',
'description' => 'Indeks ketinggian untuk lantai 5'
],
[
'parameter_code' => 'ip_ketinggian_6',
'parameter_name' => 'IP Ketinggian Lantai 6',
'default_value' => 1.197000,
'unit' => 'decimal',
'description' => 'Indeks ketinggian untuk lantai 6'
]
];
// 3. Building Function Specific Parameters (Data dari tabel)
$buildingFunctionParameters = [
// FUNGSI KEAGAMAAN - Bebas retribusi
[
'parameter_code' => 'fungsi_keagamaan',
'parameter_name' => 'Fungsi Bangunan Keagamaan',
'default_value' => 0.000000,
'unit' => 'decimal',
'description' => 'Parameter fungsi bangunan keagamaan (bebas retribusi)'
],
[
'parameter_code' => 'ip_permanen_keagamaan',
'parameter_name' => 'IP Permanen Keagamaan',
'default_value' => 0.000000,
'unit' => 'decimal',
'description' => 'IP Permanen untuk bangunan keagamaan'
],
[
'parameter_code' => 'ip_kompleksitas_keagamaan',
'parameter_name' => 'IP Kompleksitas Keagamaan',
'default_value' => 0.000000,
'unit' => 'decimal',
'description' => 'IP Kompleksitas untuk bangunan keagamaan'
],
// FUNGSI SOSIAL BUDAYA - 0.3
[
'parameter_code' => 'fungsi_sosial_budaya',
'parameter_name' => 'Fungsi Bangunan Sosial Budaya',
'default_value' => 0.300000,
'unit' => 'decimal',
'description' => 'Parameter fungsi bangunan sosial budaya'
],
[
'parameter_code' => 'ip_permanen_sosial_budaya',
'parameter_name' => 'IP Permanen Sosial Budaya',
'default_value' => 0.400000,
'unit' => 'decimal',
'description' => 'IP Permanen untuk bangunan sosial budaya'
],
[
'parameter_code' => 'ip_kompleksitas_sosial_budaya',
'parameter_name' => 'IP Kompleksitas Sosial Budaya',
'default_value' => 0.600000,
'unit' => 'decimal',
'description' => 'IP Kompleksitas untuk bangunan sosial budaya'
],
// CAMPURAN KECIL - 0.6
[
'parameter_code' => 'fungsi_campuran_kecil',
'parameter_name' => 'Fungsi Bangunan Campuran Kecil',
'default_value' => 0.600000,
'unit' => 'decimal',
'description' => 'Parameter fungsi bangunan campuran kecil'
],
[
'parameter_code' => 'ip_permanen_campuran_kecil',
'parameter_name' => 'IP Permanen Campuran Kecil',
'default_value' => 0.400000,
'unit' => 'decimal',
'description' => 'IP Permanen untuk bangunan campuran kecil'
],
[
'parameter_code' => 'ip_kompleksitas_campuran_kecil',
'parameter_name' => 'IP Kompleksitas Campuran Kecil',
'default_value' => 0.600000,
'unit' => 'decimal',
'description' => 'IP Kompleksitas untuk bangunan campuran kecil'
],
// CAMPURAN BESAR - 0.8
[
'parameter_code' => 'fungsi_campuran_besar',
'parameter_name' => 'Fungsi Bangunan Campuran Besar',
'default_value' => 0.800000,
'unit' => 'decimal',
'description' => 'Parameter fungsi bangunan campuran besar'
],
[
'parameter_code' => 'ip_permanen_campuran_besar',
'parameter_name' => 'IP Permanen Campuran Besar',
'default_value' => 0.400000,
'unit' => 'decimal',
'description' => 'IP Permanen untuk bangunan campuran besar'
],
[
'parameter_code' => 'ip_kompleksitas_campuran_besar',
'parameter_name' => 'IP Kompleksitas Campuran Besar',
'default_value' => 0.600000,
'unit' => 'decimal',
'description' => 'IP Kompleksitas untuk bangunan campuran besar'
],
// UMKM - 0.5
[
'parameter_code' => 'fungsi_umkm',
'parameter_name' => 'Fungsi Bangunan UMKM',
'default_value' => 0.500000,
'unit' => 'decimal',
'description' => 'Parameter fungsi bangunan UMKM'
],
[
'parameter_code' => 'ip_permanen_umkm',
'parameter_name' => 'IP Permanen UMKM',
'default_value' => 0.400000,
'unit' => 'decimal',
'description' => 'IP Permanen untuk bangunan UMKM'
],
[
'parameter_code' => 'ip_kompleksitas_umkm',
'parameter_name' => 'IP Kompleksitas UMKM',
'default_value' => 0.600000,
'unit' => 'decimal',
'description' => 'IP Kompleksitas untuk bangunan UMKM'
],
// USAHA BESAR - 0.7
[
'parameter_code' => 'fungsi_usaha_besar',
'parameter_name' => 'Fungsi Bangunan Usaha Besar',
'default_value' => 0.700000,
'unit' => 'decimal',
'description' => 'Parameter fungsi bangunan usaha besar'
],
[
'parameter_code' => 'ip_permanen_usaha_besar',
'parameter_name' => 'IP Permanen Usaha Besar',
'default_value' => 0.400000,
'unit' => 'decimal',
'description' => 'IP Permanen untuk bangunan usaha besar'
],
[
'parameter_code' => 'ip_kompleksitas_usaha_besar',
'parameter_name' => 'IP Kompleksitas Usaha Besar',
'default_value' => 0.600000,
'unit' => 'decimal',
'description' => 'IP Kompleksitas untuk bangunan usaha besar'
],
// HUNIAN SEDERHANA - 0.15
[
'parameter_code' => 'fungsi_hunian_sederhana',
'parameter_name' => 'Fungsi Hunian Sederhana',
'default_value' => 0.150000,
'unit' => 'decimal',
'description' => 'Parameter fungsi hunian sederhana'
],
[
'parameter_code' => 'ip_permanen_hunian_sederhana',
'parameter_name' => 'IP Permanen Hunian Sederhana',
'default_value' => 0.400000,
'unit' => 'decimal',
'description' => 'IP Permanen untuk hunian sederhana'
],
[
'parameter_code' => 'ip_kompleksitas_hunian_sederhana',
'parameter_name' => 'IP Kompleksitas Hunian Sederhana',
'default_value' => 0.300000,
'unit' => 'decimal',
'description' => 'IP Kompleksitas untuk hunian sederhana (0.3)'
],
// HUNIAN TIDAK SEDERHANA - 0.17
[
'parameter_code' => 'fungsi_hunian_tidak_sederhana',
'parameter_name' => 'Fungsi Hunian Tidak Sederhana',
'default_value' => 0.170000,
'unit' => 'decimal',
'description' => 'Parameter fungsi hunian tidak sederhana'
],
[
'parameter_code' => 'ip_permanen_hunian_tidak_sederhana',
'parameter_name' => 'IP Permanen Hunian Tidak Sederhana',
'default_value' => 0.400000,
'unit' => 'decimal',
'description' => 'IP Permanen untuk hunian tidak sederhana'
],
[
'parameter_code' => 'ip_kompleksitas_hunian_tidak_sederhana',
'parameter_name' => 'IP Kompleksitas Hunian Tidak Sederhana',
'default_value' => 0.600000,
'unit' => 'decimal',
'description' => 'IP Kompleksitas untuk hunian tidak sederhana'
]
];
// 4. Indeks Lokalitas Parameters
$localityParameters = [
[
'parameter_code' => 'indeks_lokalitas_03',
'parameter_name' => 'Indeks Lokalitas 0.3%',
'default_value' => 0.003000,
'unit' => 'decimal',
'description' => 'Indeks lokalitas 0.3% (untuk bangunan tertentu)'
],
[
'parameter_code' => 'indeks_lokalitas_04',
'parameter_name' => 'Indeks Lokalitas 0.4%',
'default_value' => 0.004000,
'unit' => 'decimal',
'description' => 'Indeks lokalitas 0.4% (untuk hunian sederhana dan tidak sederhana)'
],
[
'parameter_code' => 'indeks_lokalitas_05',
'parameter_name' => 'Indeks Lokalitas 0.5%',
'default_value' => 0.005000,
'unit' => 'decimal',
'description' => 'Indeks lokalitas 0.5% (untuk bangunan komersial)'
]
];
// 5. Multiplier Parameters
$multiplierParameters = [
[
'parameter_code' => 'multiplier_prasarana',
'parameter_name' => 'Multiplier Prasarana',
'default_value' => 0.500000,
'unit' => 'decimal',
'description' => 'Multiplier untuk perhitungan prasarana (50%)'
],
[
'parameter_code' => 'multiplier_ketinggian',
'parameter_name' => 'Multiplier Ketinggian',
'default_value' => 0.500000,
'unit' => 'decimal',
'description' => 'Multiplier untuk indeks ketinggian dalam formula (0.5)'
]
];
// 4. Additional Parameters (Parameter Tambahan)
$additionalParameters = [
[
'parameter_code' => 'asumsi_prasarana',
'parameter_name' => 'Asumsi Prasarana',
'default_value' => 0.500000,
'unit' => 'decimal',
'description' => 'Persentase asumsi prasarana dalam perhitungan retribusi'
],
[
'parameter_code' => 'multiplier_ketinggian',
'parameter_name' => 'Multiplier Ketinggian',
'default_value' => 0.500000,
'unit' => 'decimal',
'description' => 'Multiplier untuk perhitungan ketinggian (0.5 dalam rumus Excel)'
]
];
// Combine all parameters
$allParameters = array_merge(
$generalParameters,
$floorHeightParameters,
$buildingFunctionParameters,
$localityParameters,
$multiplierParameters,
$additionalParameters
);
// Insert parameters
foreach ($allParameters as $param) {
DB::table('master_parameters')->updateOrInsert(
['parameter_code' => $param['parameter_code']],
array_merge($param, [
'created_at' => $now,
'updated_at' => $now
])
);
}
// Summary output
$this->command->info('Master Parameters seeded successfully!');
$this->command->info('=== SUMMARY ===');
$this->command->info('General Parameters: ' . count($generalParameters));
$this->command->info('Floor Height Parameters: ' . count($floorHeightParameters));
$this->command->info('Building Function Parameters: ' . count($buildingFunctionParameters));
$this->command->info('Locality Parameters: ' . count($localityParameters));
$this->command->info('Multiplier Parameters: ' . count($multiplierParameters));
$this->command->info('Additional Parameters: ' . count($additionalParameters));
$this->command->info('Total Parameters: ' . count($allParameters));
// Display parameter mapping
$this->command->info('=== BUILDING FUNCTION PARAMETER MAPPING ===');
$this->command->info('KEAGAMAAN: Fungsi=0.000, IP_Permanen=0.000, IP_Kompleksitas=0.000');
$this->command->info('SOSIAL_BUDAYA: Fungsi=0.300, IP_Permanen=0.400, IP_Kompleksitas=0.600');
$this->command->info('CAMPURAN_KECIL: Fungsi=0.600, IP_Permanen=0.400, IP_Kompleksitas=0.600');
$this->command->info('CAMPURAN_BESAR: Fungsi=0.800, IP_Permanen=0.400, IP_Kompleksitas=0.600');
$this->command->info('UMKM: Fungsi=0.500, IP_Permanen=0.400, IP_Kompleksitas=0.600');
$this->command->info('USAHA_BESAR: Fungsi=0.700, IP_Permanen=0.400, IP_Kompleksitas=0.600');
$this->command->info('HUNIAN_SEDERHANA: Fungsi=0.150, IP_Permanen=0.400, IP_Kompleksitas=0.300');
$this->command->info('HUNIAN_TIDAK_SEDERHANA: Fungsi=0.170, IP_Permanen=0.400, IP_Kompleksitas=0.600');
$this->command->info('=== IP KETINGGIAN PER LANTAI ===');
$this->command->info('Lantai 1: 1.000, Lantai 2: 1.090, Lantai 3: 1.120');
$this->command->info('Lantai 4: 1.135, Lantai 5: 1.162, Lantai 6: 1.197');
}
}