diff --git a/app/Console/Commands/InitSpatialPlanningDatas.php b/app/Console/Commands/InitSpatialPlanningDatas.php new file mode 100644 index 0000000..4e4a1e0 --- /dev/null +++ b/app/Console/Commands/InitSpatialPlanningDatas.php @@ -0,0 +1,189 @@ +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)); + } + } + } +} diff --git a/app/Models/BuildingFunction.php b/app/Models/BuildingFunction.php new file mode 100644 index 0000000..7aceb19 --- /dev/null +++ b/app/Models/BuildingFunction.php @@ -0,0 +1,122 @@ + '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() + ]; + } +} diff --git a/app/Models/BuildingFunctionParameter.php b/app/Models/BuildingFunctionParameter.php new file mode 100644 index 0000000..de0f357 --- /dev/null +++ b/app/Models/BuildingFunctionParameter.php @@ -0,0 +1,73 @@ + '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 . '%' + ]; + } +} diff --git a/app/Models/RetributionCalculation.php b/app/Models/RetributionCalculation.php new file mode 100644 index 0000000..c90f8af --- /dev/null +++ b/app/Models/RetributionCalculation.php @@ -0,0 +1,129 @@ + '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; + } + } +} diff --git a/app/Models/RetributionFormula.php b/app/Models/RetributionFormula.php new file mode 100644 index 0000000..6cabc72 --- /dev/null +++ b/app/Models/RetributionFormula.php @@ -0,0 +1,105 @@ + '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; + } +} diff --git a/app/Models/SpatialPlanning.php b/app/Models/SpatialPlanning.php index 2db73e2..bb6d91b 100644 --- a/app/Models/SpatialPlanning.php +++ b/app/Models/SpatialPlanning.php @@ -3,6 +3,8 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasOne; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * Class SpatialPlanning @@ -31,7 +33,69 @@ class SpatialPlanning extends Model * * @var array */ - 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'); + } } diff --git a/database/migrations/2025_06_17_151019_add_retribution_fields_to_spatial_plannings_table.php b/database/migrations/2025_06_17_151019_add_retribution_fields_to_spatial_plannings_table.php new file mode 100644 index 0000000..2018b4c --- /dev/null +++ b/database/migrations/2025_06_17_151019_add_retribution_fields_to_spatial_plannings_table.php @@ -0,0 +1,44 @@ +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', + ]); + }); + } +}; diff --git a/database/migrations/2025_06_17_163401_create_building_functions_table.php b/database/migrations/2025_06_17_163401_create_building_functions_table.php new file mode 100644 index 0000000..66d24e0 --- /dev/null +++ b/database/migrations/2025_06_17_163401_create_building_functions_table.php @@ -0,0 +1,37 @@ +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'); + } +}; diff --git a/database/migrations/2025_06_17_174423_create_building_function_parameters_table.php b/database/migrations/2025_06_17_174423_create_building_function_parameters_table.php new file mode 100644 index 0000000..6462ae8 --- /dev/null +++ b/database/migrations/2025_06_17_174423_create_building_function_parameters_table.php @@ -0,0 +1,38 @@ +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'); + } +}; diff --git a/database/migrations/2025_06_17_174433_create_retribution_formulas_table.php b/database/migrations/2025_06_17_174433_create_retribution_formulas_table.php new file mode 100644 index 0000000..b011372 --- /dev/null +++ b/database/migrations/2025_06_17_174433_create_retribution_formulas_table.php @@ -0,0 +1,35 @@ +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'); + } +}; diff --git a/database/migrations/2025_06_17_174442_create_retribution_calculations_table.php b/database/migrations/2025_06_17_174442_create_retribution_calculations_table.php new file mode 100644 index 0000000..f31ee04 --- /dev/null +++ b/database/migrations/2025_06_17_174442_create_retribution_calculations_table.php @@ -0,0 +1,44 @@ +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'); + } +}; diff --git a/database/seeders/BuildingFunctionSeeder.php b/database/seeders/BuildingFunctionSeeder.php new file mode 100644 index 0000000..3a2cff1 --- /dev/null +++ b/database/seeders/BuildingFunctionSeeder.php @@ -0,0 +1,145 @@ + '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); + } + } +} \ No newline at end of file diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a88735f..61f09d0 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -50,6 +50,7 @@ class DatabaseSeeder extends Seeder MenuSeeder::class, UsersRoleMenuSeeder::class, GlobalSettingSeeder::class, + BuildingFunctionSeeder::class, ]); } } diff --git a/public/templates/Data_2025___Estimasi_Jumlah_Lantai.csv b/public/templates/Data_2025___Estimasi_Jumlah_Lantai.csv new file mode 100755 index 0000000..9efb23f --- /dev/null +++ b/public/templates/Data_2025___Estimasi_Jumlah_Lantai.csv @@ -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