update retribution calculation spatial plannings
This commit is contained in:
189
app/Console/Commands/InitSpatialPlanningDatas.php
Normal file
189
app/Console/Commands/InitSpatialPlanningDatas.php
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use App\Models\SpatialPlanning;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
|
use Maatwebsite\Excel\Facades\Excel;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
class InitSpatialPlanningDatas extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name and signature of the console command.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $signature = 'spatial:init {file? : Path to the CSV/Excel file} {--truncate : Clear existing data before import}';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The console command description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $description = 'Import spatial planning data from CSV/Excel file for retribution';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute the console command.
|
||||||
|
*/
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$filePath = $this->argument('file') ?? 'public/templates/Data_2025___Estimasi_Jumlah_Lantai.csv';
|
||||||
|
$fullPath = storage_path('app/' . $filePath);
|
||||||
|
|
||||||
|
// Check if file exists
|
||||||
|
if (!file_exists($fullPath)) {
|
||||||
|
$this->error("File not found: {$fullPath}");
|
||||||
|
$this->info("Available files in templates:");
|
||||||
|
$this->listAvailableFiles();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Confirm truncate if requested
|
||||||
|
if ($this->option('truncate')) {
|
||||||
|
if ($this->confirm('This will delete all existing spatial planning data. Continue?')) {
|
||||||
|
$this->info('Truncating spatial_plannings table...');
|
||||||
|
DB::table('spatial_plannings')->truncate();
|
||||||
|
$this->info('Table truncated successfully.');
|
||||||
|
} else {
|
||||||
|
$this->info('Operation cancelled.');
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->info("Starting import from: {$filePath}");
|
||||||
|
$this->info("Full path: {$fullPath}");
|
||||||
|
|
||||||
|
try {
|
||||||
|
DB::beginTransaction();
|
||||||
|
|
||||||
|
$data = Excel::toArray([], $fullPath);
|
||||||
|
|
||||||
|
if (empty($data) || empty($data[0])) {
|
||||||
|
$this->error('No data found in the file.');
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$rows = $data[0]; // Get first sheet
|
||||||
|
$headers = array_shift($rows); // Remove header row
|
||||||
|
|
||||||
|
$this->info("Found " . count($rows) . " data rows to import.");
|
||||||
|
$this->info("Headers: " . implode(', ', $headers));
|
||||||
|
|
||||||
|
$progressBar = $this->output->createProgressBar(count($rows));
|
||||||
|
$progressBar->start();
|
||||||
|
|
||||||
|
$imported = 0;
|
||||||
|
$skipped = 0;
|
||||||
|
|
||||||
|
foreach ($rows as $index => $row) {
|
||||||
|
try {
|
||||||
|
// Skip empty rows
|
||||||
|
if (empty(array_filter($row))) {
|
||||||
|
$skipped++;
|
||||||
|
$progressBar->advance();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Map CSV columns to model attributes
|
||||||
|
$spatialData = [
|
||||||
|
'name' => $this->cleanString($row[1] ?? ''), // pemohon
|
||||||
|
'location' => $this->cleanString($row[2] ?? ''), // alamat
|
||||||
|
'activities' => $this->cleanString($row[3] ?? ''), // activities
|
||||||
|
'land_area' => $this->cleanNumber($row[4] ?? 0), // luas_lahan
|
||||||
|
'site_bcr' => $this->cleanNumber($row[5] ?? 0), // bcr_kawasan
|
||||||
|
'area' => $this->cleanNumber($row[6] ?? 0), // area
|
||||||
|
'no_tapak' => $this->cleanString($row[7] ?? ''), // no_tapak
|
||||||
|
'no_skkl' => $this->cleanString($row[8] ?? ''), // no_skkl
|
||||||
|
'no_ukl' => $this->cleanString($row[9] ?? ''), // no_ukl
|
||||||
|
'building_function' => $this->cleanString($row[10] ?? ''), // fungsi_bangunan
|
||||||
|
'sub_building_function' => $this->cleanString($row[11] ?? ''), // sub_fungsi_bangunan
|
||||||
|
'number_of_floors' => $this->cleanNumber($row[12] ?? 1), // jumlah_lantai
|
||||||
|
'number' => $this->cleanString($row[0] ?? ''), // no
|
||||||
|
'date' => now(), // Set current date
|
||||||
|
'kbli' => null, // Not in CSV, set as null
|
||||||
|
];
|
||||||
|
|
||||||
|
// Validate required fields
|
||||||
|
if (empty($spatialData['name']) && empty($spatialData['activities'])) {
|
||||||
|
$skipped++;
|
||||||
|
$progressBar->advance();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
SpatialPlanning::create($spatialData);
|
||||||
|
$imported++;
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$this->newLine();
|
||||||
|
$this->error("Error importing row " . ($index + 2) . ": " . $e->getMessage());
|
||||||
|
$skipped++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$progressBar->advance();
|
||||||
|
}
|
||||||
|
|
||||||
|
$progressBar->finish();
|
||||||
|
$this->newLine(2);
|
||||||
|
|
||||||
|
DB::commit();
|
||||||
|
|
||||||
|
$this->info("Import completed successfully!");
|
||||||
|
$this->info("Imported: {$imported} records");
|
||||||
|
$this->info("Skipped: {$skipped} records");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
} catch (Exception $e) {
|
||||||
|
DB::rollBack();
|
||||||
|
$this->error("Import failed: " . $e->getMessage());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean string data
|
||||||
|
*/
|
||||||
|
private function cleanString($value)
|
||||||
|
{
|
||||||
|
if (is_null($value)) return null;
|
||||||
|
return trim(str_replace(["\n", "\r", "\t"], ' ', $value));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean numeric data
|
||||||
|
*/
|
||||||
|
private function cleanNumber($value)
|
||||||
|
{
|
||||||
|
if (is_null($value) || $value === '') return 0;
|
||||||
|
|
||||||
|
// Remove non-numeric characters except decimal point
|
||||||
|
$cleaned = preg_replace('/[^0-9.]/', '', $value);
|
||||||
|
|
||||||
|
return is_numeric($cleaned) ? (float) $cleaned : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List available template files
|
||||||
|
*/
|
||||||
|
private function listAvailableFiles()
|
||||||
|
{
|
||||||
|
$templatesPath = storage_path('app/public/templates');
|
||||||
|
if (is_dir($templatesPath)) {
|
||||||
|
$files = glob($templatesPath . '/*.{csv,xlsx,xls}', GLOB_BRACE);
|
||||||
|
foreach ($files as $file) {
|
||||||
|
$this->line(' - ' . basename($file));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$publicTemplatesPath = public_path('templates');
|
||||||
|
if (is_dir($publicTemplatesPath)) {
|
||||||
|
$this->info("Files in public/templates:");
|
||||||
|
$files = glob($publicTemplatesPath . '/*.{csv,xlsx,xls}', GLOB_BRACE);
|
||||||
|
foreach ($files as $file) {
|
||||||
|
$this->line(' - ' . basename($file));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
122
app/Models/BuildingFunction.php
Normal file
122
app/Models/BuildingFunction.php
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
|
|
||||||
|
class BuildingFunction extends Model
|
||||||
|
{
|
||||||
|
protected $table = 'building_functions';
|
||||||
|
protected $fillable = ['code', 'name', 'description', 'parent_id', 'is_active', 'level', 'sort_order'];
|
||||||
|
|
||||||
|
protected $casts = [
|
||||||
|
'is_active' => 'boolean',
|
||||||
|
'level' => 'integer',
|
||||||
|
'sort_order' => 'integer'
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parent relationship (self-referencing)
|
||||||
|
*/
|
||||||
|
public function parent(): BelongsTo
|
||||||
|
{
|
||||||
|
return $this->belongsTo(BuildingFunction::class, 'parent_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Children relationship (self-referencing)
|
||||||
|
*/
|
||||||
|
public function children(): HasMany
|
||||||
|
{
|
||||||
|
return $this->hasMany(BuildingFunction::class, 'parent_id')
|
||||||
|
->where('is_active', true)
|
||||||
|
->orderBy('sort_order');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parameters relationship (1:1)
|
||||||
|
*/
|
||||||
|
public function parameters(): HasOne
|
||||||
|
{
|
||||||
|
return $this->hasOne(BuildingFunctionParameter::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Formula relationship (1:1)
|
||||||
|
*/
|
||||||
|
public function formula(): HasOne
|
||||||
|
{
|
||||||
|
return $this->hasOne(RetributionFormula::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Spatial plannings relationship (1:n) - via detected building function
|
||||||
|
*/
|
||||||
|
public function spatialPlannings(): HasMany
|
||||||
|
{
|
||||||
|
return $this->hasMany(SpatialPlanning::class, 'building_function_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retribution calculations relationship (1:n) - via detected building function
|
||||||
|
*/
|
||||||
|
public function retributionCalculations(): HasMany
|
||||||
|
{
|
||||||
|
return $this->hasMany(RetributionCalculation::class, 'detected_building_function_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope: Active building functions only
|
||||||
|
*/
|
||||||
|
public function scopeActive($query)
|
||||||
|
{
|
||||||
|
return $query->where('is_active', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope: Parent functions only
|
||||||
|
*/
|
||||||
|
public function scopeParents($query)
|
||||||
|
{
|
||||||
|
return $query->whereNull('parent_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope: Children functions only
|
||||||
|
*/
|
||||||
|
public function scopeChildren($query)
|
||||||
|
{
|
||||||
|
return $query->whereNotNull('parent_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if building function has complete setup (parameters + formula)
|
||||||
|
*/
|
||||||
|
public function hasCompleteSetup(): bool
|
||||||
|
{
|
||||||
|
return $this->parameters()->exists() && $this->formula()->exists();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get building function with all related data
|
||||||
|
*/
|
||||||
|
public function getCompleteData(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'id' => $this->id,
|
||||||
|
'code' => $this->code,
|
||||||
|
'name' => $this->name,
|
||||||
|
'description' => $this->description,
|
||||||
|
'parameters' => $this->parameters?->getParametersArray(),
|
||||||
|
'formula' => [
|
||||||
|
'name' => $this->formula?->name,
|
||||||
|
'expression' => $this->formula?->formula_expression,
|
||||||
|
'description' => $this->formula?->description
|
||||||
|
],
|
||||||
|
'has_complete_setup' => $this->hasCompleteSetup()
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
73
app/Models/BuildingFunctionParameter.php
Normal file
73
app/Models/BuildingFunctionParameter.php
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
|
||||||
|
class BuildingFunctionParameter extends Model
|
||||||
|
{
|
||||||
|
protected $fillable = [
|
||||||
|
'building_function_id',
|
||||||
|
'fungsi_bangunan',
|
||||||
|
'ip_permanen',
|
||||||
|
'ip_kompleksitas',
|
||||||
|
'ip_ketinggian',
|
||||||
|
'indeks_lokalitas',
|
||||||
|
'is_active',
|
||||||
|
'notes'
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $casts = [
|
||||||
|
'fungsi_bangunan' => 'decimal:6',
|
||||||
|
'ip_permanen' => 'decimal:6',
|
||||||
|
'ip_kompleksitas' => 'decimal:6',
|
||||||
|
'ip_ketinggian' => 'decimal:6',
|
||||||
|
'indeks_lokalitas' => 'decimal:6',
|
||||||
|
'is_active' => 'boolean'
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Building function relationship (1:1)
|
||||||
|
*/
|
||||||
|
public function buildingFunction(): BelongsTo
|
||||||
|
{
|
||||||
|
return $this->belongsTo(BuildingFunction::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope: Active parameters only
|
||||||
|
*/
|
||||||
|
public function scopeActive($query)
|
||||||
|
{
|
||||||
|
return $query->where('is_active', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all parameter values as array
|
||||||
|
*/
|
||||||
|
public function getParametersArray(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'fungsi_bangunan' => $this->fungsi_bangunan,
|
||||||
|
'ip_permanen' => $this->ip_permanen,
|
||||||
|
'ip_kompleksitas' => $this->ip_kompleksitas,
|
||||||
|
'ip_ketinggian' => $this->ip_ketinggian,
|
||||||
|
'indeks_lokalitas' => $this->indeks_lokalitas
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get formatted parameters for display
|
||||||
|
*/
|
||||||
|
public function getFormattedParameters(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'Fungsi Bangunan' => $this->fungsi_bangunan,
|
||||||
|
'IP Permanen' => $this->ip_permanen,
|
||||||
|
'IP Kompleksitas' => $this->ip_kompleksitas,
|
||||||
|
'IP Ketinggian' => $this->ip_ketinggian,
|
||||||
|
'Indeks Lokalitas' => $this->indeks_lokalitas . '%'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
129
app/Models/RetributionCalculation.php
Normal file
129
app/Models/RetributionCalculation.php
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
|
||||||
|
class RetributionCalculation extends Model
|
||||||
|
{
|
||||||
|
protected $fillable = [
|
||||||
|
'spatial_planning_id',
|
||||||
|
'retribution_formula_id',
|
||||||
|
'detected_building_function_id',
|
||||||
|
'luas_bangunan',
|
||||||
|
'used_parameters',
|
||||||
|
'used_formula',
|
||||||
|
'calculation_result',
|
||||||
|
'calculation_date',
|
||||||
|
'calculated_by',
|
||||||
|
'notes'
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $casts = [
|
||||||
|
'luas_bangunan' => 'decimal:6',
|
||||||
|
'calculation_result' => 'decimal:6',
|
||||||
|
'used_parameters' => 'array',
|
||||||
|
'calculation_date' => 'datetime'
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Spatial planning relationship (1:1)
|
||||||
|
*/
|
||||||
|
public function spatialPlanning(): BelongsTo
|
||||||
|
{
|
||||||
|
return $this->belongsTo(SpatialPlanning::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retribution formula relationship
|
||||||
|
*/
|
||||||
|
public function retributionFormula(): BelongsTo
|
||||||
|
{
|
||||||
|
return $this->belongsTo(RetributionFormula::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detected building function relationship
|
||||||
|
*/
|
||||||
|
public function detectedBuildingFunction(): BelongsTo
|
||||||
|
{
|
||||||
|
return $this->belongsTo(BuildingFunction::class, 'detected_building_function_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User who calculated relationship
|
||||||
|
*/
|
||||||
|
public function calculatedBy(): BelongsTo
|
||||||
|
{
|
||||||
|
return $this->belongsTo(User::class, 'calculated_by');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope: Recent calculations
|
||||||
|
*/
|
||||||
|
public function scopeRecent($query, int $days = 30)
|
||||||
|
{
|
||||||
|
return $query->where('calculation_date', '>=', now()->subDays($days));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope: By building function
|
||||||
|
*/
|
||||||
|
public function scopeByBuildingFunction($query, int $buildingFunctionId)
|
||||||
|
{
|
||||||
|
return $query->where('detected_building_function_id', $buildingFunctionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get formatted calculation result
|
||||||
|
*/
|
||||||
|
public function getFormattedResultAttribute(): string
|
||||||
|
{
|
||||||
|
return number_format($this->calculation_result, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get calculation summary
|
||||||
|
*/
|
||||||
|
public function getCalculationSummary(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'spatial_planning' => $this->spatialPlanning->name ?? 'N/A',
|
||||||
|
'building_function' => $this->detectedBuildingFunction->name ?? 'N/A',
|
||||||
|
'luas_bangunan' => $this->luas_bangunan,
|
||||||
|
'formula_used' => $this->used_formula,
|
||||||
|
'parameters_used' => $this->used_parameters,
|
||||||
|
'result' => $this->calculation_result,
|
||||||
|
'calculated_date' => $this->calculation_date?->format('Y-m-d H:i:s'),
|
||||||
|
'calculated_by' => $this->calculatedBy->name ?? 'System'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if calculation is recent (within last 24 hours)
|
||||||
|
*/
|
||||||
|
public function isRecent(): bool
|
||||||
|
{
|
||||||
|
return $this->calculation_date && $this->calculation_date->isAfter(now()->subDay());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recalculate retribution
|
||||||
|
*/
|
||||||
|
public function recalculate(): bool
|
||||||
|
{
|
||||||
|
if (!$this->spatialPlanning || !$this->retributionFormula) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$service = app(\App\Services\RetributionCalculationService::class);
|
||||||
|
$service->calculateRetribution($this->spatialPlanning);
|
||||||
|
return true;
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
\Log::error('Recalculation failed: ' . $e->getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
105
app/Models/RetributionFormula.php
Normal file
105
app/Models/RetributionFormula.php
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||||
|
|
||||||
|
class RetributionFormula extends Model
|
||||||
|
{
|
||||||
|
protected $fillable = [
|
||||||
|
'building_function_id',
|
||||||
|
'name',
|
||||||
|
'formula_expression',
|
||||||
|
'description',
|
||||||
|
'is_active'
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $casts = [
|
||||||
|
'is_active' => 'boolean'
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Building function relationship (1:1)
|
||||||
|
*/
|
||||||
|
public function buildingFunction(): BelongsTo
|
||||||
|
{
|
||||||
|
return $this->belongsTo(BuildingFunction::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retribution calculations relationship (1:n)
|
||||||
|
*/
|
||||||
|
public function retributionCalculations(): HasMany
|
||||||
|
{
|
||||||
|
return $this->hasMany(RetributionCalculation::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope: Active formulas only
|
||||||
|
*/
|
||||||
|
public function scopeActive($query)
|
||||||
|
{
|
||||||
|
return $query->where('is_active', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute formula calculation
|
||||||
|
*/
|
||||||
|
public function calculate(float $luasBangunan, array $parameters): float
|
||||||
|
{
|
||||||
|
// Replace placeholders in formula with actual values
|
||||||
|
$formula = $this->formula_expression;
|
||||||
|
|
||||||
|
// Replace luas_bangunan
|
||||||
|
$formula = str_replace('luas_bangunan', $luasBangunan, $formula);
|
||||||
|
|
||||||
|
// Replace parameter values
|
||||||
|
foreach ($parameters as $key => $value) {
|
||||||
|
$formula = str_replace($key, $value, $formula);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Evaluate the mathematical expression
|
||||||
|
// Note: In production, use a safer math expression evaluator
|
||||||
|
try {
|
||||||
|
$result = eval("return $formula;");
|
||||||
|
return (float) $result;
|
||||||
|
} catch (Exception $e) {
|
||||||
|
throw new \Exception("Error calculating formula: " . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get formula with parameter placeholders replaced for display
|
||||||
|
*/
|
||||||
|
public function getDisplayFormula(array $parameters = []): string
|
||||||
|
{
|
||||||
|
$formula = $this->formula_expression;
|
||||||
|
|
||||||
|
if (!empty($parameters)) {
|
||||||
|
foreach ($parameters as $key => $value) {
|
||||||
|
$formula = str_replace($key, "({$key}={$value})", $formula);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $formula;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate formula expression
|
||||||
|
*/
|
||||||
|
public function validateFormula(): bool
|
||||||
|
{
|
||||||
|
// Basic validation - check if formula contains required elements
|
||||||
|
$requiredElements = ['luas_bangunan'];
|
||||||
|
|
||||||
|
foreach ($requiredElements as $element) {
|
||||||
|
if (strpos($this->formula_expression, $element) === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,8 @@
|
|||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class SpatialPlanning
|
* Class SpatialPlanning
|
||||||
@@ -31,7 +33,69 @@ class SpatialPlanning extends Model
|
|||||||
*
|
*
|
||||||
* @var array<int, string>
|
* @var array<int, string>
|
||||||
*/
|
*/
|
||||||
protected $fillable = ['name', 'kbli', 'activities', 'area', 'location', 'number', 'date'];
|
protected $fillable = ['name', 'kbli', 'activities', 'area', 'location', 'number', 'date', 'no_tapak', 'no_skkl', 'no_ukl', 'building_function', 'sub_building_function', 'number_of_floors', 'land_area', 'site_bcr'];
|
||||||
|
|
||||||
|
protected $casts = [
|
||||||
|
'area' => 'decimal:6',
|
||||||
|
'land_area' => 'decimal:6',
|
||||||
|
'site_bcr' => 'decimal:6',
|
||||||
|
'number_of_floors' => 'integer',
|
||||||
|
'date' => 'date'
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retribution calculation relationship (1:1)
|
||||||
|
*/
|
||||||
|
public function retributionCalculation(): HasOne
|
||||||
|
{
|
||||||
|
return $this->hasOne(RetributionCalculation::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Building function relationship (if building_function becomes FK in future)
|
||||||
|
*/
|
||||||
|
public function buildingFunctionRelation(): BelongsTo
|
||||||
|
{
|
||||||
|
return $this->belongsTo(BuildingFunction::class, 'building_function_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if spatial planning has retribution calculation
|
||||||
|
*/
|
||||||
|
public function hasRetributionCalculation(): bool
|
||||||
|
{
|
||||||
|
return $this->retributionCalculation()->exists();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get building function text for detection
|
||||||
|
*/
|
||||||
|
public function getBuildingFunctionText(): string
|
||||||
|
{
|
||||||
|
return $this->building_function ?? $this->activities ?? '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get area for calculation (prioritize area, fallback to land_area)
|
||||||
|
*/
|
||||||
|
public function getCalculationArea(): float
|
||||||
|
{
|
||||||
|
return (float) ($this->area ?? $this->land_area ?? 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope: Without retribution calculation
|
||||||
|
*/
|
||||||
|
public function scopeWithoutRetributionCalculation($query)
|
||||||
|
{
|
||||||
|
return $query->whereDoesntHave('retributionCalculation');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scope: With retribution calculation
|
||||||
|
*/
|
||||||
|
public function scopeWithRetributionCalculation($query)
|
||||||
|
{
|
||||||
|
return $query->whereHas('retributionCalculation');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::table('spatial_plannings', function (Blueprint $table) {
|
||||||
|
$table->text('no_tapak')->nullable();
|
||||||
|
$table->text('no_skkl')->nullable();
|
||||||
|
$table->text('no_ukl')->nullable();
|
||||||
|
$table->string('building_function')->nullable();
|
||||||
|
$table->string('sub_building_function')->nullable();
|
||||||
|
$table->integer('number_of_floors')->default(1);
|
||||||
|
$table->decimal('land_area', 18, 6)->nullable();
|
||||||
|
$table->decimal('site_bcr', 10, 6)->nullable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('spatial_plannings', function (Blueprint $table) {
|
||||||
|
$table->dropColumn([
|
||||||
|
'no_tapak',
|
||||||
|
'no_skkl',
|
||||||
|
'no_ukl',
|
||||||
|
'building_function',
|
||||||
|
'sub_building_function',
|
||||||
|
'number_of_floors',
|
||||||
|
'land_area',
|
||||||
|
'site_bcr',
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('building_functions', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('code')->unique();
|
||||||
|
$table->string('name');
|
||||||
|
$table->string('description')->nullable();
|
||||||
|
$table->unsignedBigInteger('parent_id')->nullable();
|
||||||
|
$table->foreign('parent_id')->references('id')->on('building_functions')->onDelete('cascade');
|
||||||
|
$table->boolean('is_active')->default(true);
|
||||||
|
$table->integer('level')->default(0);
|
||||||
|
$table->integer('sort_order')->default(0);
|
||||||
|
$table->index(['parent_id', 'is_active']);
|
||||||
|
$table->index(['level', 'sort_order']);
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('building_functions');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('building_function_parameters', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->foreignId('building_function_id')->constrained('building_functions')->onDelete('cascade');
|
||||||
|
$table->decimal('fungsi_bangunan', 10, 6)->comment('Parameter fungsi bangunan');
|
||||||
|
$table->decimal('ip_permanen', 10, 6)->comment('Parameter IP permanen');
|
||||||
|
$table->decimal('ip_kompleksitas', 10, 6)->comment('Parameter IP kompleksitas');
|
||||||
|
$table->decimal('ip_ketinggian', 10, 6)->comment('Parameter IP ketinggian');
|
||||||
|
$table->decimal('indeks_lokalitas', 10, 6)->comment('Parameter indeks lokalitas');
|
||||||
|
$table->boolean('is_active')->default(true);
|
||||||
|
$table->text('notes')->nullable();
|
||||||
|
$table->timestamps();
|
||||||
|
|
||||||
|
// Unique constraint untuk 1:1 relationship
|
||||||
|
$table->unique('building_function_id');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('building_function_parameters');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('retribution_formulas', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->foreignId('building_function_id')->constrained('building_functions')->onDelete('cascade');
|
||||||
|
$table->string('name')->comment('Nama formula');
|
||||||
|
$table->text('formula_expression')->comment('Rumus matematika untuk perhitungan');
|
||||||
|
$table->text('description')->nullable()->comment('Deskripsi formula');
|
||||||
|
$table->boolean('is_active')->default(true);
|
||||||
|
$table->timestamps();
|
||||||
|
|
||||||
|
// Unique constraint untuk 1:1 relationship
|
||||||
|
$table->unique('building_function_id');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('retribution_formulas');
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('retribution_calculations', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->foreignId('spatial_planning_id')->constrained('spatial_plannings')->onDelete('cascade');
|
||||||
|
$table->foreignId('retribution_formula_id')->nullable()->constrained('retribution_formulas')->onDelete('set null');
|
||||||
|
$table->foreignId('detected_building_function_id')->nullable()->constrained('building_functions')->onDelete('set null');
|
||||||
|
$table->decimal('luas_bangunan', 15, 6)->comment('Luas bangunan yang digunakan dalam perhitungan');
|
||||||
|
$table->json('used_parameters')->nullable()->comment('Parameter yang digunakan dalam perhitungan');
|
||||||
|
$table->string('used_formula')->nullable()->comment('Formula yang digunakan dalam perhitungan');
|
||||||
|
$table->decimal('calculation_result', 15, 6)->nullable()->comment('Hasil perhitungan retribusi');
|
||||||
|
$table->datetime('calculation_date')->nullable()->comment('Tanggal perhitungan');
|
||||||
|
$table->foreignId('calculated_by')->nullable()->constrained('users')->onDelete('set null');
|
||||||
|
$table->text('notes')->nullable();
|
||||||
|
$table->timestamps();
|
||||||
|
|
||||||
|
// Unique constraint untuk 1:1 relationship dengan spatial_plannings
|
||||||
|
$table->unique('spatial_planning_id');
|
||||||
|
|
||||||
|
// Index untuk performa query dengan nama yang lebih pendek
|
||||||
|
$table->index(['retribution_formula_id', 'calculation_date'], 'idx_formula_calc_date');
|
||||||
|
$table->index(['detected_building_function_id', 'calculation_date'], 'idx_building_func_calc_date');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('retribution_calculations');
|
||||||
|
}
|
||||||
|
};
|
||||||
145
database/seeders/BuildingFunctionSeeder.php
Normal file
145
database/seeders/BuildingFunctionSeeder.php
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Seeders;
|
||||||
|
|
||||||
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
use App\Models\BuildingFunction;
|
||||||
|
|
||||||
|
class BuildingFunctionSeeder extends Seeder
|
||||||
|
{
|
||||||
|
public function run(): void
|
||||||
|
{
|
||||||
|
$buildingFunctions = [
|
||||||
|
[
|
||||||
|
'code' => 'AGAMA',
|
||||||
|
'name' => 'Fungsi Keagamaan',
|
||||||
|
'description' => 'Fungsi Keagamaan',
|
||||||
|
'parent_id' => null,
|
||||||
|
'is_active' => true,
|
||||||
|
'level' => 0,
|
||||||
|
'sort_order' => 1,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'code' => 'SOSIAL_BUDAYA',
|
||||||
|
'name' => 'Fungsi Sosial Budaya',
|
||||||
|
'description' => 'Fungsi Sosial Budaya',
|
||||||
|
'parent_id' => null,
|
||||||
|
'is_active' => true,
|
||||||
|
'level' => 0,
|
||||||
|
'sort_order' => 2,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'code' => 'CAMPURAN',
|
||||||
|
'name' => 'Fungsi Campuran',
|
||||||
|
'description' => 'Fungsi Campuran',
|
||||||
|
'parent_id' => null,
|
||||||
|
'is_active' => true,
|
||||||
|
'level' => 0,
|
||||||
|
'sort_order' => 3,
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'code' => 'CAMPURAN_KECIL',
|
||||||
|
'name' => 'Fungsi Campuran Kecil',
|
||||||
|
'description' => 'Fungsi Campuran Kecil',
|
||||||
|
'is_active' => true,
|
||||||
|
'level' => 1,
|
||||||
|
'sort_order' => 1,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'code' => 'CAMPURAN_BESAR',
|
||||||
|
'name' => 'Fungsi Campuran Besar',
|
||||||
|
'description' => 'Fungsi Campuran Besar',
|
||||||
|
'is_active' => true,
|
||||||
|
'level' => 1,
|
||||||
|
'sort_order' => 2,
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'code' => 'USAHA',
|
||||||
|
'name' => 'Fungsi Usaha',
|
||||||
|
'description' => 'Fungsi Usaha',
|
||||||
|
'parent_id' => null,
|
||||||
|
'is_active' => true,
|
||||||
|
'level' => 0,
|
||||||
|
'sort_order' => 4,
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'code' => 'USAHA_KECIL',
|
||||||
|
'name' => 'UMKM',
|
||||||
|
'description' => 'Fungsi Usaha Kecil',
|
||||||
|
'is_active' => true,
|
||||||
|
'level' => 1,
|
||||||
|
'sort_order' => 1,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'code' => 'USAHA_BESAR',
|
||||||
|
'name' => 'Usaha Besar (Non-Mikro)',
|
||||||
|
'description' => 'Fungsi Usaha Besar',
|
||||||
|
'is_active' => true,
|
||||||
|
'level' => 1,
|
||||||
|
'sort_order' => 2,
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'code' => 'HUNIAN',
|
||||||
|
'name' => 'Fungsi Hunian',
|
||||||
|
'description' => 'Fungsi Hunian',
|
||||||
|
'parent_id' => null,
|
||||||
|
'is_active' => true,
|
||||||
|
'level' => 0,
|
||||||
|
'sort_order' => 5,
|
||||||
|
'children' => [
|
||||||
|
[
|
||||||
|
'code' => 'HUNIAN_KECIL',
|
||||||
|
'name' => 'Sederhana < 100 m2',
|
||||||
|
'description' => 'Sederhana < 100 m2',
|
||||||
|
'is_active' => true,
|
||||||
|
'level' => 1,
|
||||||
|
'sort_order' => 1,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'code' => 'HUNIAN_BESAR',
|
||||||
|
'name' => 'Sederhana > 100 m2',
|
||||||
|
'description' => 'Sederhana > 100 m2',
|
||||||
|
'is_active' => true,
|
||||||
|
'level' => 1,
|
||||||
|
'sort_order' => 2,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'code' => 'HUNIAN_MBR',
|
||||||
|
'name' => 'MBR',
|
||||||
|
'description' => 'Rumah Tinggal Deret (MBR) dan Rumah Tinggal Tunggal (MBR)',
|
||||||
|
'is_active' => true,
|
||||||
|
'level' => 1,
|
||||||
|
'sort_order' => 3,
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($buildingFunctions as $function) {
|
||||||
|
$this->insertOrUpdateByCode($function);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function insertOrUpdateByCode(array $data, ?int $parentId = null): void
|
||||||
|
{
|
||||||
|
$children = $data['children'] ?? [];
|
||||||
|
unset($data['children']);
|
||||||
|
|
||||||
|
$data['parent_id'] = $parentId;
|
||||||
|
|
||||||
|
// Insert or update by code
|
||||||
|
$record = BuildingFunction::updateOrCreate(
|
||||||
|
['code' => $data['code']],
|
||||||
|
$data
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($children as $child) {
|
||||||
|
$this->insertOrUpdateByCode($child, $record->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -50,6 +50,7 @@ class DatabaseSeeder extends Seeder
|
|||||||
MenuSeeder::class,
|
MenuSeeder::class,
|
||||||
UsersRoleMenuSeeder::class,
|
UsersRoleMenuSeeder::class,
|
||||||
GlobalSettingSeeder::class,
|
GlobalSettingSeeder::class,
|
||||||
|
BuildingFunctionSeeder::class,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
42
public/templates/Data_2025___Estimasi_Jumlah_Lantai.csv
Executable file
42
public/templates/Data_2025___Estimasi_Jumlah_Lantai.csv
Executable file
@@ -0,0 +1,42 @@
|
|||||||
|
no,pemohon,alamat,activities,luas_lahan,bcr_kawasan,area,no_tapak,no_skkl,no_ukl,fungsi_bangunan,sub_fungsi_bangunan,jumlah_lantai
|
||||||
|
01/222,PT CIPTA INDAH PERTIWI No Telpon : 082217633434,Jl Salam No 51 Desa/Kel. Cihapit Kec. Bandung wetan Kota Bandung,PERUMAHAN LA LA TOWN,16629,0.2449,4072.4421,648.11./222 - SP /TR 07 Januari 2025;644.2./207 - SP /TR 02 Januari 2025,500.10.29.15/631-REKTEK/TR Tanggal 14 Februari 2023;500.10.29.15/2837-REKTEK/Bid. Taru Tanggal 25 Juli 2024,14022310313204030 Tanggal 14 Februari 2023;500.10.29.7/Kep.618-DLH/2024 Tanggal 13 Desember 2024;161023087545 Tanggal 16 Oktober2023,Fungsi Hunian,Fungsi Hunian,1
|
||||||
|
03/481,MUHAMAD GUNTUR JULIADI No Telpon : 081223334486,Cangkuang Residence RT 004/003 Ds Cangkuang Wetan Kec. Dayeuhkolot Kab. Bandung,PERUMAHAN CANGKUANG RESIDENCE 2,2360,0.5924,1398.064,648.11./481 - SP /TR 15 Januari 2025;647./226 - SP /TR 07 Januari 2025;647/225 - SP /TR 07 Januari 2025;644/221 - SP /TR 07 Januari 2025;645.4/557 - SP /TR 20 Januari 2025,500.10.29.15/2894-REKTEK/Bid. Taru Tanggal 08 Agustus 2024;400.7.22/4927-KRK/04/Bid.Taru Tanggal 06 Desember 2024;500.10.29.15/2619-REKTEK/Bid. Taru Tanggal 10 Juli 2024;500.10.29.15/4155-REKTEK/Bid. Taru Tanggal 18 Nopember 2024;503/123/III-DPMPTSP/2020 Tanggal 24 MAret 2020,167240099471 Tanggal 16 Juli 2024;9120111161314 Tanggal 11 Nopember 2019;8120312190151 Tanggal 04 Desember 2023;500.10.29.7/Kep.614-DLH/2024 Tanggal 20 Nopember 2024;2910240290118 Tanggal 29 Oktober 2024;8120001992981 Tanggal 12 Juli 2024;SK.294/Menlhk/Setjen/PLA.4/5/2021 Tanggal 31 Mei 2021,Fungsi Hunian,Fungsi Hunian,1
|
||||||
|
08/480,PT SURYA KHARISMA PARAHYANGAN No Telpon : 081394461006 ,Jalan Cibaligo No 48 Desa /Kel. Cigugur tengah Kec. Cimahi tengah kota Cimahi ,PERUMAHAN PARAHYANGAN GARDEN CITY,116360,0.5164,60088.304,648.11./480 - SP /TR 15 Januari 2025,500.10.29.15/603-REKTEK/TR Tanggal 05 Desember 2023,1810220245722 Tanggal 18 Oktober 2022;500.10.29.7/Kep.632-DLH/2024 Tanggal 24 Desember 2024,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
09/223,PT CLARICHEM INDONESIA No Telpon : 081315399694,Kawasan pergudangan taman tekno sektor XI blok L2 No 30 Ds/Kel. Setu Kec. Setu kota Tangerag Banten ,PERGUDANGAN DAN PENYIMPANAN,1586,0.7017,1112.8962,644./223 - SP /TR 07 Januari 2025,400.7.22/4427-KRK/03/Bid.Taru Tanggal 06 Desember 2024,9120008832767 Tanggal 26 Nopember 2024,Usaha Besar (Non-Mikro),Fungsi Usaha,1
|
||||||
|
10/657,PT HALKA GITA No Telpon : 0816734374,Jl Raya Majalaya KM 2 RT 02/09 Desa Hegarmanah Kec. Cikancung Kab. Bandung,REVISI 1 KOMPLEK PERGUDANGAN,19100,0.699,13350.9,644./657 - SP /TR 23 Januari 2025,500.10.29.15/6750-REKTEK/TR Tanggal 21 Desember 2023,9120300510839 Tanggal 16 Desember 2023;500.10.29.7/Kep.609-DLH/2024 Tanggal 12 Nopember 2024,Usaha Besar (Non-Mikro),Fungsi Usaha,2
|
||||||
|
11/658,PT SURYA TIRTA KENCANA No Telpon : 08986155493,Kutawaringin Industrial Park Kav. 276-277 Desa Jelegong Kec. Kutawaringin Kab. Bandung,PERGUDANGAN DAN PENYIMPANAN BAHAN KIMIA,3932,0.6995,2750.434,644./658 - SP /TR 23 Januari 2025;640/540 - SP /TR 20 Januari 2025,10112410113204010 Tanggal 10 Nopember 2024;591.4/031/IX-DPMPTSP/2020 Tanggal 03 Sseptember 2020,8120017120594 Tanggal 31 Agustus 2018;600.4.5/056/6838-Ktr/TL Tanggal 24 Desember 2024;0220305221438 Tanggal 20 Nopember 2021;500.10.29.7/4295/TL Tanggal 21 September 2024,Usaha Besar (Non-Mikro),Fungsi Usaha,1
|
||||||
|
13 / 550,PT BERKAH SEPUH JAYA No Telpon : 082118781624,Ruko komplek dewaadru blok R3 RT 005 ds/kec. Bojongsoang kab. Bandung,REVISI 1 PERUMAHAN VILLA CEMARA ASRI,17379,0.5476,9516.7404,648.11/550 - SP/TR 20 Januari 2025,150223101113204049 Tanggal 15 Februari 2023,1233000451657 Tanggal 5 Mei 2023;500.10.29.7/kep.392-DLH/2025 Tgl. 2 Januari 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
14 / 655,PT RISKI ANUGERAH SEDJAHTERA No Telpon : 082118781624,Griya permata asri blok C2 No 18 Ds Lengkong Kec. Bojongsoang Kab. Bandung,REVISI 1 PERUMAHAN TAMAN KATAPANG INDAH,28425,0.6532,18567.21,648.11 /655 - SP /TR 23 Januari 2025,500.10.29.15/2333-REKTEK/TR Tanggal 22 Mei 2024;500.10.29.15/3811-REKTEK/Bid. Taru Tanggal 10 Oktober 2024,1205000302875 Tanggal 02 April 2024;500.10.29.7/Kep.408-DLH/2025 Tanggal 10 Januari 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
15 / 551,PT BUMI SUWARNA SEJAHTERA No Telpon : 082118781624,Jl Ciwastra no 73 Kel. Mekarmulya kec. Rancasari kota bandung,REVISI 1 PERUMAHAN BUMI KARA RESIDENCE,29711,0.5424,16115.2464,648.11/551-SP/TR 20 Januari 2025,500.10.29.15/6097-REKTEK/TR Tanggal 27 Nopember 2023,1311230078306 Tgl 13 Nopember 2023;500.10.29.7/Kep.493-DLH/2024 Tanggal 20 Maret 2024,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
16 / 656,PT AMBER HASYA No Telpon : 081312411661,Jl Sarijadi raya No 111 Kel. Sarijadi Kec. Sukasarii kota bandung,REVISI 1 PERUMAHAN GREEN HARMONI RESIDENCE ,39520,0.2726,10773.152,648.11/656-SP/TR 23 Januari 2025,500.10.29.15/2732-REKTEK/Bid. Taru Tanggal 19 Juli 2024,9120004882226 Tgl 22 Agustus 2019;500.10.29.7/Kep.617-DLH/2024 Tanggal 4 Desember 2024,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
17 / 224,PT KARYA UTAMA SEJATI JAYA No Telpon : 081320772222,Kp. Andir DS/Kel. Manggahang Kec. Baleendah Kab. Bandung,PERUMAHAN GRAND CIPARAY RESIDENCE,12045,0.5945,7160.7525,648.11/224-SP/TR 07 Januari 2025;644/822-SP/TR 13 Februari 2025;640/524-SP/TR 17 Januari 2025;642/763-SP/TR 11 Februari 2025,500/5300-PERTEKTR/2022/TR Tanggal 04 Agustus 2022;400.7.22/4872-KRK/25/Bid.TR Tanggal 24 Desember 2024;Pu.650/7580-REKTEK/TR Tanggal 20 Desember 2022;01112410113204120 Tanggal 1 November 2024,1801220061544 Tgl 05 September 2022;600.4.5/052/1722-Ktr/TL Tanggal 20 Mei 2024;9120401971173 Tgl 11 Desember 2024;1406220076826 Tgl 15 November 2022;8120103802893 Tgl 29 Agustus 2018,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
21 / 688,PT PRAKARSA FAJAR PROPERTINDO No Telpon : 082315094712,Jl. Otto Iskandardinata No 429 Kel. Pungkur Kec. Regol Kota Bandung,PERUMAHAN ALAM BUMI CIPARAY,17417,0.6793,11831.3681,648.11/688-SP/TR 03 Februari 2025,500.10.29.15/1075-REKTEK/TR Tanggal 04 Maret 2024,9120007841259 Tgl 15 Agustus 2019;500.10.29.7/Kep.405-DLH/2025 Tanggal 06 Januari 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
22 / 767,PT CITRA SENTOSA JAYATAMA No Telpon : 087825393706,Jl. Nyengseret No 29 RT 01 Kel. Pelindung hewaqn Kota Bandung,PERUMAHAN CITRA ASRI RESIDENCE,28900,0.692,19998.8,648.11/767-SP/TR 12 Februari 2025,500.10.29.15/2617-REKTEK/Bid. Taru Tanggal 10 Juli 2024,9120107971097 Tgl 19 September 2019;500.10.29.7/Kep.612-DLH/2024 Tanggal 18 November 2024,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
23/ 641,PT PESONA MITRA KEMBAR MAS No Telpon : 081220763283,Jl Kembar mas IV No 2A RT 05/09 Kel. Pasirluyu Kec. Regol Kota Bandung,REVISI 5 PERUMAHAN PODOMORO PARK,1160011,0.6691,776163.3601,648.11/641- SP/TR 22 Januari 2025,591/057-DPMPTSP/2017 Tanggal 28 Desember 2017,650/Kep.628-DLH/2018 Tanggal 30 Nopember 2018,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
24 / 659,PT PAVITRA PARA ARTHA No Telpon : 081809063866,Jl . Kubang Beureum No 39 RT 007 / 011 Kelurahan Sekejati Kecamatan Buahbatu,REVISI 4 PERUMAHAN PRIVATE VILLAGE,88245,0.5819,51349.7655,648.11/659 - SP/TR 23 Januari 2025;645/932 - SP/TR 21 Februari 2025;645/552-SP/TR 20 Januari 2025;647/640-SP/TR 22 Januari 2025;647/930-SP/TR 21 Februari 2025,591.4/001-BPMP/2014 Tanggal 06 Januari 2014;591.4/031-DPMPTSP/2019 Tanggal 10 Juli 2019;503/104/XII-DPMPTSP/2019- Tgl 20 Desember 2019;400.1.22/4521-KRK/15/Bid.Taru Tgl 16 Desember 2024;650/2597-KRTR/2021/TR Tgl 9 Desember 2021;500.10.29.15/2839-REKTEK/Bid.TAru Tgl 2 Agustus 2024,500.10.29.6/4898/TL Tanggal 08 Nopember 2023;667/2995/TL Tanggal 11 Agustus 2020;9120000431996 Tanggal 20 Oktober 2021;500.10.29.7/Kep.629-DLH/2024;9120605793306 Tanggal 9 Mei 2023;1601240112040181 Tanggal 16 Januari 2024;8120215192631 Tanggal 3 Januari 2022;34/LH.01.06.05/DLH Tanggal 3 Januari 2025;9120101841825 Tanggal 18 Oktober 2023,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
29 / 931,PT KARYA HAFANA INTAN MANDIRI No Telpon : 082120002925 ,Kp./Desa Ciluluk Kecamatan Cikancung Kabupaten Bandung,PERUMAHAN GRIYA CIHANYIR PERMAI,24432.33,0.5945,14525.02019,648.11/931 - SP/TR 21 Februari 2025,400.7.22/4840-KRK/21/Bid.Taru Tgl. 18 Desember 2024,2908210007625 Tanggal 06 Mei 2024;500.10.29.7/Kep.414-DLH/2025 Tanggal 30 Januari 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
30 / 933,PT ARUM JAYA PROPERTI No Telpon : 085100942672,Perumahan Banyu Arum Residence Blok A Kp. Tegal Tengah RT 003/013 Desa Cangkuang Kec. Rancaekek,REVISI 1 PERUMAHAN BUMI ARUM REGENCY,58899,0.4838,28495.3362,648.11/933 - SP/PR 21 FEBRUARI 2025,591.4/026-DPMPTSP/2018 Tgl 24 September 2018,667/7210/TL Tanggal 16 Nopember 2018;500.10.29.6/Kep.420-DLH/2025 Tanmggal 3 Februari 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
31 / 762,SANDY SALMAN No Telpon : 082118781624,Jl Kembar VIII No 26 RT 005/010 Kel Cigereleng Kec. Regol Kota Bandung 40253,REVISI 1 PERUMAHAN D HEUVEL WIWAHA PADASUKA,3095,0.4295,1329.3025,648.11/ 762 - SP / PR 11 Februari 2025;648/523-SP/TR 17 Januari 2025;647/1140-SP/TR 27 Februari 2025;647/934-SP/TR 21 Februari 2025;647/1233-SP/TR 06 Maret 2025,"650/5689-PETEKTR/2022/TR Tanggal 30 Agustus 2022;650/2748-KRTR/2021/TR Tgl 21 Desember 2021;593.SK.93-BKPMD/90 Tanggal 11 April 1990;593/SK.225-BKPMD/1991 Tanggal 28 Juni 1991;591,4/009-BPMP/2014 Tanggal 27 Maret 2014;500.10.29.15/711-REKTEK/TR Tanggal 15 Februari 2024;500.10.29.15/2877-REKTEK/Bid.Taru Tanggal 19 Agustus 2024 ",LH.01.04/5866-SPPL/TL Tanggal 27 Desember 2022;1402220064386 Tanggal 04 Februari 2022;500.10.29.7/Kep.593-DLH/2024 Tanggal 27 September 2024;667/3257/BPLH Tanggal 06 Oktober 2014;2711230388253 Tanggal 27 Nopember 2023;500.10.29.7/Kep.630-DLH/2024 Tanggal 20 Desember 2024;9120312050674 Tanggal 07 Oktober 2019;500.10.29.7/Kep.426-DLH/2025 Tanggal 14 Februari 2025,Fungsi Hunian,Fungsi Hunian,1
|
||||||
|
36/ 1141,HANDRIAWAN No Telpon : 081313350382,Jalan Taman Holis Indah E-5 No 4-5 RT 03/06 Ds/Kel. Cigondewah Kec. Bandung kulon. Kota Bandung,TOKO DAN GUDANG,2025,0.7848,1589.22,647/1141-SP/TR 27 Februari 2025;647/1211-SP/TR 04 Maret 2025;648.2/1091-SP/TR 25 Februari 2025,400.7.22/559-KRK/14/Bid.Taru Tanggal 17 Januari 2025;400.7.22/859-KRK/38/Bid.Taru Tanggal 17 Februari 2025;500.10.29.15/4064 - REKTEK/Bid.Taru Tanggal 25 Nopember 2024,1401250067962 Tanggal 14 Januari 2025;1812240057832 Tanggal 18 Desember 2024;1611210013009 Tanggal 16 Nopember 2021,Usaha Besar (Non-Mikro),Fungsi Usaha,1
|
||||||
|
39/ 1232,JOHANSJAH SUGIANTO No Telpon : 081314974495,Jalan Kepodang VI/6 blok k2 Rengas Kec. Ciputat timur kota Tangerang selatan,TOKO,2490,21.9,54531,644.2/1232-SP/TR 06 Maret 2025;644.2/1234-SP/TR 06 Maret 2025,400.7.22/1089 - KRK/45//Bid.Taru Tanggal 24 Februari 2025;503/0017-PKKPRNB/DPMPTSP/II/2025 Tanggal 12 Februari 2025,3101250002573 Tanggal 31 Januari 2025;2107230112343 Tanggal 21 Juli 2023,Tidak Diketahui,Tidak Diketahui,3
|
||||||
|
41 / 1090,TIM AD HOC PERUMAHAN SUKAWANGI RESIDENCE No Telpon : 08112255770,Kp. Cihalimun RT 02/04 Ds. Cibeureum Kec. Kertasari Kab. Bandung,PERUMAHAN SUKAWANGI RESIDENCE,,1,,648.11/ 1090 - SP / PR 25 Februari 2025,,,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
42 / 1298,PT TIGA REKAN INDONESIA No Telpon : 08122444717,Jl Gradiul No 40 RT 04/07 Kel. Rancaekek Kencana Kec. Rancaekek Kab. Bandung,PERUMAHAN GREEN HILL VILLAGE,16548,0.5917,9791.4516,648.11/1298 - SP/TR 17 Maret 2025,50.10.29.15/2742-REKTEK/Bid. Taru Tanggal 24 Juli 2024,2505240130006 Tanggal 25 Mei 2024;600.4.5/061/832-Ktr/Bid. TL/2025 Tgl. 19 Februari 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
43 / 1322,PT UNILOA ARDIYANTO INVESTAMA No Telpon : 081220180480,Jl Raya Ebah 103 Desa Sukamantri Kecamatan Paseh Kab. Bandung,PERUMAHAN MARISON CIPAKU,19209,0.6146,11805.8514,648.11/1322 - SP/TR 18 Maret 2025,24042410313204051 Tanggal 24 JApril 2024,0238010110358 Tanggal 11 Januari 2024;500.10.29.7/Kep. 451-DLH/2025 Tgl. 13 Maret 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
44 / 1323,PT RADINAKA KRAMAT ABADI No Telpon : 082118781624,Jl. Sukamukti RT 01/06 Desa Sukamukti Kec. Katapang Kab. Bandung,PERUMAHAN GAHARU PALEDANG RESIDENCE,14665,0.68003,9972.63995,648.11/1323 - SP/TR 18 Maret 2025,02032510213204087 Tanggal 02 Maret 2025,0238010110358 Tanggal 11 Januari 2024;600.4.5/064/1165-Ktr/Bid. TL/2025 Tgl. 12 Maret 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
45 / 1361,PT SANGKURIANG KRAMAT ABADI No Telpon : 082118781624,Kampung rancakasiat Desa Rancamulya Kec. Pameungpeuk Kab. Bandung,PERUMAHAN PONDOK ASRI SUKAMUKTI,20451,0.6806,13918.9506,648.11/1361 - SP/TR 24 Maret 2025,500.10.29.15/3451-REKTEK/Bid.Taru Tanggal 26 September 2024,0811230037204 Tanggal 08 Nopember 2023;500.10.29.7/Kep.460-DLH/2025 Tgl. 21 Maret 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
46 / 1360,PT AUF ABDURACCHMAN JAYA No Telpon : 082118781624,Jl. Rancabungur rancakasiat Desa Malakasari Kec. Baleendah Kab. Bandung,PERUMAHAN BUMI SHANGRILA RESIDENCE,12846,0.6412,8236.8552,648.11/1360 - SP/TR 24 Maret 2025,400.7.22/093/1390-KRK/Bid.Taru Tanggal 17 Maret 2025,0603250028082 Tanggal 06 Maret 2025;600.4.5/072/1270-Ktr/Bid.TL/2025 Tgl. 21 Maret 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
47 / 1142,ANTO DWI HARTANTO No Telpon : 082126215611,Jl. Elang V No 8 RT 08/01 Kel. Garuda Kec. Andir Kota Bandung,PERGUDANGAN DAN PENYIMPANAN,1307,0.5616,734.0112,647/1142 - SP/TR 27 Februari 2025;648.11/823 - SP/TR 13 Februari 2025;644.2/1389 - SP/TR 26 Maret 2025;644.2/1388 - SP/TR 26 Maret 2025,500.10.29.15/3827-REKTEK/Bid.Taru Tanggal 17 Oktober 2024;500.10.29.15/3944-REKTEK/Bid.Taru Tanggal 28 Oktober 2024;503/0072-DPMPTSP/XI/2023 Tanggal 29 November 2023;400.7.22/1046-KRK/Bid.Taru Tanggal 21 Februari 2025,2009240075774 Tanggal 20 September 2024 2025;2009240075774 Tanggal 20 September 2025;500.10.29.7/Hep-461-DLH/2025 Tanggal 21 Maret 2025;0298000921888 Tanggal 24 Januari 2022,Usaha Besar (Non-Mikro),Fungsi Usaha,1
|
||||||
|
51 / 1161,PT INGRIA PRATAMA CAPITALINDO Tbk No Telpon : 087722361043,Ruko Pondok Cabe Mutiara Jl Pondok cabe No 27 Kel. Pamulang Kec. Pamulang Kota Tangerang Selatan,REVISI 2 PERUMAHAN BUKIT ESMA CICALENGKA 2 ,74300,0.6292,46749.56,648.11/1161 - SP/TR 28 Februari 2025,50.10.29.15/2927-REKTEK/Bid. Taru Tanggal 14 Agustus 2024,591.4/005/IX-DPMPTSP/2019 Tanggal 09 September 2019;500.10.29.7/Kep.613-DLH/2024 Tgl. 18 November 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
52 / 1441 ,PT ABADI MUKTI KIRANA No Telpon : 087821848944,Jl Terusan jamika No 88 Kel. Jamika Kec. Bojongloa kaler Kota Bandung, PERUMAHAN KOTA BARU ARJASARI,222816,1,222816,648.11/1441 - SP/TR 11 April 2025,400.7.28/1710/TR Tanggal 23 April 2024,9120108201236 Tanggal 13 Februari 2019;500.10.29.7/Kep.419-DLH/2025 Tgl. 03 Februari 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
53 / 1566,PT MAKMUR INDAH DAMAI No Telpon : 081394722234,Jl. Podomoro Boulevard utara I Desa Lengkong Kec. Bojongsoang Kab. Bandung,PERUMAHAN BAROS INDAH RESIDENCE,17513,1,17513,647/1566 - SP/TR 25 April 2025,50.10.29.15/2507-REKTEK/Bid. Taru Tanggal 25 Juni 2024,2106240023693 Tanggal 21 Juni 2024;500.10.29.7/Kep.447-DLH/2024 Tgl. 10 Maret 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
54 / 1343,PT KARYA BUMI BESTARI No Telpon : 08156080428,Kembar Mas IV No 2A RT 05/09 Kel. Pasirluyu Kec. Regol Kota Bandung,PERUMAHAN BESTARI MAS,26134,1,26134,648.11/1343 - SP/TR 20 Maret 2025;647/1565 - SP/TR 25 April 2025;648.1/1543 - SP/TR 17 April 2025,12042310213204004 Tanggal 12 April 2023;23122410113204057 Tanggal 23 Desember 2024;400.7.22/1047-KRK/42/Bid.Taru Tanggal 21 Februari 2025,1204230043635 Tanggal 12 April 2023;500.10.29.7/964/Bid. TL/2025 Tgl. 19 Februari 2025;9120304390956 Tanggal 05 Desember 2023;0307230050445 Tanggal 03 Juli 2023,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
57 / 1372,TENNI DIANA No Telpon : 082116106640,Cikaahuripan RT 002/005 Kec. Neglasari Kota Tangerang,PERADAGANGAN KHUSUS KARPET PERMADANI DAN PENUTUP DINDING DN LANTAI DI TOKO,1290,1,1290,644/1372 - SP/TR 26 Maret 2025;647/1557 - SP/TR 22 April 2025;640/1559 - SP/TR 22 April 2025;644/1371 - SP/TR 26 Maret 2025;644/1375 - SP/TR 26 Maret 2025;644/1373 - SP/TR 26 Maret 2025,500.10.29.15/4355-REKTEK/TR Tanggal 25 Agustus 2023;500.10.29.15/1073-REKTEK/TR Tanggal 04 Maret 2024;400.7.22/759-KRK/34/Bid.Taru Tanggal 11 Februari 2025;500.10.29.15/4654-REKTEK/Bid. Taru Tanggal 08 September 2023;500.10.29.15/4160-REKTEK/Bid. Taru Tanggal 15 Nopember 2024;500.10.29.15/2500-REKTEK/Bid. Taru Tanggal 19 Juni 2024,9120306652149 Tanggal 26 Juni 2019;0220107462528 Tanggal 08 September 2022;1283000240318 Tanggal 01 Februari 2021;600.4.5/071-KTR/Bid.TL/2025 Tgl. 05 Mei 2025;0220301251224 Tanggal 11 Agustus 2023;1263000210596 Tanggal 09 Februari 2021;1405240295325 5 Mei 2024,Tidak Diketahui,Tidak Diketahui,1
|
||||||
|
63 / 1567,Ir. BERSIH TARIGANT No Telpon : 081322777581,Jl Multatuli No 3 rt 001/001 Ds/Kel. Lebakgede Kec. Coblong Kota Bandung,PERUMAHAN TUSCANY HILL,23796,0.2428,5777.6688,648.11/1567 - SP/TR 25 April 2025,50.10.29.15/3829-REKTEK/Bid. Taru Tanggal 15 Oktober 2024,2007220014068 Tanggal 20 Juli 2025;500.10.29.7/Kep.429-DLH/2025 Tgl. 10 Maret 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
64 / 1682,PT CIPTA BERKAT PROPERTI No Telpon : 081910661980,Ruko Matahari Cigado No 25 Jalan Anggadireja Kel. Baleendah Kec. Baleendah Kab. Bandung,PERUMAHAN GARDEN VIEW CICALENGKA,45666,1,45666,648.11/1682 - SP/TR 06 Mei 2025,50.10.29.15/3156-REKTEK/Bid. Taru Tanggal 05 September 2024,2310210017936 Tanggal 23 Oktober 2021;500.10.29.7/Kep.477-DLH/2025 Tgl. 17 April 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
64 / 1682,PT CIPTA BERKAT PROPERTI No Telpon : 081910661980,Ruko Matahari Cigado No 25 Jalan Anggadireja Kel. Baleendah Kec. Baleendah Kab. Bandung,C. KWT PERUMAHAN,0,1,0,,,,Fungsi Hunian,Fungsi Hunian,1
|
||||||
|
65 / 1644,PT ARGUNA JAYA PROPERTY No Telpon : 081214211164,Jl Pidada IV/4 Denpasar BR/Link Sedana metra Kel. Ubung Kec. Denpasar Utara Kota Denpasar,REVISI 1 PERUMAHAN ARGUNA SINDANGPANON,8553,0.53,4533.09,648.11/1644 - SP/TR 29 April 2025;644/1558 - SP/TR 22 April 2025,503/009/II-DPMPTSP/2020 Tanggal 25 Februari 2020;50.10.29.15/4063-REKTEK/Bid. Taru Tanggal 25 Nopember 2025,9120004890734 Tanggal 03 Agustus 2019;667/2081/TL Tgl. 08 Juni 2020;0609240042720001 Tanggal 06 September 2024,Fungsi Hunian,Fungsi Hunian,1
|
||||||
|
67/ 1370,NENENG FATIMAH No Telpon : 08977980040,Jalan Batu Indah I No 26 RT 002/003 Kel. Batununggal Kec. Bandung Kidul Kota Bandung,PERGUDANGAN DAN PENYIMPANAN,2034,1,2034,644/1370 - SP/TR 26 Maret 2025,50.10.29.15/3340-REKTEK/Bid. Taru Tanggal 18 September 2025,1009240038601 Tanggal 10 September 2024,Usaha Besar (Non-Mikro),Fungsi Usaha,1
|
||||||
|
68/ 1374,LILI JOJON No Telpon : 082219855556,Kp. Cibisoro RT 004/008 Desa Nanjung Kec. Mrgaasih Kab. Bandung,PERGUDANGAN DAN PENYIMPANAN,1654,1,1654,644/1374 - SP/TR 26 Maret 2025;644.2/1683 - SP/TR 06 Mei 2025;645/1730 - SP/TR 07 Mei 2025,50.10.29.15/3210-REKTEK/Bid. Taru Tanggal 10 September 2024;400.7.22/1254-KRK/58/Bid. Taru Tanggal 10 Maret 2025;50.10.29.15/3443-REKTEK/Bid. Taru Tanggal 26 September 2024,1220000361065 Tanggal 16 Maret 2021;1712240056863 Tanggal 17 Desember 2024;0103230081544 Tanggal 01 Maret 2023;600.4.5/071/1503-Ktr/Bid. TL/2025 Tanggal 17 April 2025,Usaha Besar (Non-Mikro),Fungsi Usaha,1
|
||||||
|
71/ 1845,PT SANGKURIANG KRAMAT ABADI No Telpon : 082116602145,Kp. Rancakasiat Desa Rancamulya Kec. Pameungpeuk Kab. Bandung,PERUMAHAN CLUSTER GAHARU EMERALD,19889,1,19889,648.11 /1845 - SP/TR 19 Mei 2025,400.7.22/1526-KRK/96/Bid. Taru Tanggal 22 April 2025,0811230037204 Tanggal 08 Nopember 2023;500.10.29.7/Kep. 489-DLH/2025 Tanggal 15 Mei 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
72/ 1731,PT MARGA TIRTA KENCANA No Telpon : 082130000146,Jlan BKR Lingkar selatan No 140 Kota Bandung,PERUMAHAN TAMAN CIBADUYUT INDAH 2 DAN 3,205344,1,205344,648.11 /1731 - SP/TR 07 Mei 2025;648.11 /1946 - SP/TR 22 Mei 2025;643 /1881 - SP/TR 20 Mei 2025;644 /1684 - SP/TR 06 Mei 2025;648.12 /1825 - SP/TR 16 Mei 2025,591.4/002-BPMP/2010 Tanggal 10 Januari 2010;500.10.29.15/3108-REKTEK/Bid.taru Tanggal 29 Agustus 2024;500.10.29.15/3319-REKTEK/TR Tanggal 14 Juli 2023;12092410313204101 Tanggal 12 September 2024;400.7.22/1231-KRK/Bid.Taru Tanggal 06 Maret 2025,667/3803/DLH Tanggal 22 Desember 2016;9120204202309 Tanggal 20 Februari 2019;2002230028317 Tanggal 20 Februari 2023;600.4.5/073/1562-Ktr/Bid.TL/2025 Tanggal 23 April 2025;8120006931402 Tanggal 28 September 2022;12710006324580004 Tanggal 05 Maret 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
77/ 1879,PT PUTRA RAHMAN PRADANA No Telpon : 081312214962,Perum Cemerlang Permai Blok C No 16 Kel. Sukakarya Kec. Warudoyongf Kota Sukabumi,REVISI 1 PERUMAHAN BUKIT PINUS BANIARAN,90711,1,90711,648.11 /1879 - SP/TR 20 Mei 2025,22122310313204009 Tanggal 22 Desember 2023,500.10.29.7/Kep.482-DLH/2025 Tanggal 24 April 2025,Fungsi Hunian,Fungsi Hunian,2
|
||||||
|
Reference in New Issue
Block a user