Files
sibedas/database/seeders/MasterFormulaSeeder.php

107 lines
7.1 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\MasterFormula;
use App\Models\MasterParameter;
use App\Models\FormulaParameter;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
class MasterFormulaSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$now = Carbon::now();
// 1. Master Formulas
$formulas = [
[
'formula_code' => 'RETRIBUSI_DASAR',
'formula_name' => 'Formula Retribusi Dasar',
'formula_expression' => '{koefisien_dasar} * {luas_bangunan} * ({indeks_lokalitas} * {tarif_dasar} * ({fungsi_bangunan} * ({ip_permanen} + {ip_kompleksitas} + ({multiplier_ketinggian} * {ip_ketinggian}))) * {koefisien_dasar})',
'formula_category' => 'basic',
'description' => 'Formula dasar untuk perhitungan retribusi PBG tanpa prasarana',
'usage_notes' => 'Menggunakan rumus: 1*D5*(N5*tarif_dasar*H5*1) dimana H5=E5*(F5+G5+(0.5*H3))'
],
[
'formula_code' => 'RETRIBUSI_DENGAN_PRASARANA',
'formula_name' => 'Formula Retribusi dengan Prasarana',
'formula_expression' => '({koefisien_dasar} * {luas_bangunan} * ({indeks_lokalitas} * {tarif_dasar} * ({fungsi_bangunan} * ({ip_permanen} + {ip_kompleksitas} + ({multiplier_ketinggian} * {ip_ketinggian}))) * {koefisien_dasar})) + ({asumsi_prasarana} * ({koefisien_dasar} * {luas_bangunan} * ({indeks_lokalitas} * {tarif_dasar} * ({fungsi_bangunan} * ({ip_permanen} + {ip_kompleksitas} + ({multiplier_ketinggian} * {ip_ketinggian}))) * {koefisien_dasar})))',
'formula_category' => 'complete',
'description' => 'Formula lengkap retribusi PBG termasuk prasarana',
'usage_notes' => 'Formula utama: (dasar) + (prasarana * dasar). Sesuai rumus Excel yang diberikan'
],
[
'formula_code' => 'RETRIBUSI_BEBAS',
'formula_name' => 'Formula Retribusi Bebas',
'formula_expression' => '0',
'formula_category' => 'free',
'description' => 'Formula untuk bangunan yang bebas retribusi',
'usage_notes' => 'Digunakan untuk bangunan keagamaan dan MBR'
],
[
'formula_code' => 'RETRIBUSI_PER_LANTAI',
'formula_name' => 'Formula Perhitungan per Lantai (H5)',
'formula_expression' => '{fungsi_bangunan} * ({ip_permanen} + {ip_kompleksitas} + ({multiplier_ketinggian} * {ip_ketinggian}))',
'formula_category' => 'component',
'description' => 'Formula untuk menghitung nilai per lantai (H5 dalam Excel)',
'usage_notes' => 'Rumus: E5*(F5+G5+(0.5*H3)) - komponen perhitungan per lantai'
],
[
'formula_code' => 'RETRIBUSI_HUNIAN_SEDERHANA',
'formula_name' => 'Formula Retribusi Hunian Sederhana',
'formula_expression' => '({koefisien_dasar} * {luas_bangunan} * ({indeks_lokalitas} * {tarif_dasar} * ({fungsi_hunian_sederhana} * ({ip_permanen_hunian_sederhana} + {ip_kompleksitas_hunian_sederhana} + ({multiplier_ketinggian} * {ip_ketinggian}))) * {koefisien_dasar})) + ({asumsi_prasarana} * ({koefisien_dasar} * {luas_bangunan} * ({indeks_lokalitas} * {tarif_dasar} * ({fungsi_hunian_sederhana} * ({ip_permanen_hunian_sederhana} + {ip_kompleksitas_hunian_sederhana} + ({multiplier_ketinggian} * {ip_ketinggian}))) * {koefisien_dasar})))',
'formula_category' => 'residential',
'description' => 'Formula khusus untuk hunian sederhana dengan IP kompleksitas 0.3',
'usage_notes' => 'Menggunakan parameter khusus hunian sederhana'
],
[
'formula_code' => 'RETRIBUSI_HUNIAN_TIDAK_SEDERHANA',
'formula_name' => 'Formula Retribusi Hunian Tidak Sederhana',
'formula_expression' => '({koefisien_dasar} * {luas_bangunan} * ({indeks_lokalitas} * {tarif_dasar} * ({fungsi_hunian_tidak_sederhana} * ({ip_permanen_hunian_tidak_sederhana} + {ip_kompleksitas_hunian_tidak_sederhana} + ({multiplier_ketinggian} * {ip_ketinggian}))) * {koefisien_dasar})) + ({asumsi_prasarana} * ({koefisien_dasar} * {luas_bangunan} * ({indeks_lokalitas} * {tarif_dasar} * ({fungsi_hunian_tidak_sederhana} * ({ip_permanen_hunian_tidak_sederhana} + {ip_kompleksitas_hunian_tidak_sederhana} + ({multiplier_ketinggian} * {ip_ketinggian}))) * {koefisien_dasar})))',
'formula_category' => 'residential',
'description' => 'Formula khusus untuk hunian tidak sederhana',
'usage_notes' => 'Menggunakan parameter khusus hunian tidak sederhana'
],
[
'formula_code' => 'RETRIBUSI_SOSIAL_BUDAYA',
'formula_name' => 'Formula Retribusi Sosial Budaya',
'formula_expression' => '({koefisien_dasar} * {luas_bangunan} * ({indeks_lokalitas} * {tarif_dasar} * ({fungsi_sosial_budaya} * ({ip_permanen_sosial_budaya} + {ip_kompleksitas_sosial_budaya} + ({multiplier_ketinggian} * {ip_ketinggian}))) * {koefisien_dasar})) + ({asumsi_prasarana} * ({koefisien_dasar} * {luas_bangunan} * ({indeks_lokalitas} * {tarif_dasar} * ({fungsi_sosial_budaya} * ({ip_permanen_sosial_budaya} + {ip_kompleksitas_sosial_budaya} + ({multiplier_ketinggian} * {ip_ketinggian}))) * {koefisien_dasar})))',
'formula_category' => 'social',
'description' => 'Formula khusus untuk bangunan sosial budaya',
'usage_notes' => 'Menggunakan parameter fungsi sosial budaya'
],
[
'formula_code' => 'RETRIBUSI_USAHA',
'formula_name' => 'Formula Retribusi Usaha',
'formula_expression' => '({koefisien_dasar} * {luas_bangunan} * ({indeks_lokalitas} * {tarif_dasar} * ({fungsi_usaha_besar} * ({ip_permanen_usaha_besar} + {ip_kompleksitas_usaha_besar} + ({multiplier_ketinggian} * {ip_ketinggian}))) * {koefisien_dasar})) + ({asumsi_prasarana} * ({koefisien_dasar} * {luas_bangunan} * ({indeks_lokalitas} * {tarif_dasar} * ({fungsi_usaha_besar} * ({ip_permanen_usaha_besar} + {ip_kompleksitas_usaha_besar} + ({multiplier_ketinggian} * {ip_ketinggian}))) * {koefisien_dasar})))',
'formula_category' => 'commercial',
'description' => 'Formula khusus untuk bangunan usaha',
'usage_notes' => 'Menggunakan parameter fungsi usaha besar'
]
];
foreach ($formulas as $formula) {
DB::table('master_formulas')->updateOrInsert(
['formula_code' => $formula['formula_code']],
array_merge($formula, [
'created_at' => $now,
'updated_at' => $now
])
);
}
$this->command->info('Master Formulas seeded successfully!');
$this->command->info('=== FORMULA SUMMARY ===');
foreach ($formulas as $formula) {
$this->command->info($formula['formula_code'] . ': ' . $formula['formula_name']);
}
}
}