InhabitantClassificationSeeder.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace Database\Seeders;
  3. use App\Models\InhabitantClassification;
  4. use App\Models\MunicipalitySize;
  5. use Illuminate\Database\Seeder;
  6. class InhabitantClassificationSeeder extends Seeder
  7. {
  8. public function run(): void
  9. {
  10. $sizes = MunicipalitySize::pluck('id', 'acronym');
  11. if ($sizes->isEmpty()) {
  12. return;
  13. }
  14. $rules = [
  15. 'PP' => [
  16. ['description' => 'Até 50k — isenção inicial (meses 1 a 3)', 'start' => 1, 'end' => 3, 'tbr_percentage' => 0.0000, 'is_renewal' => false],
  17. ['description' => 'Até 50k — meses 4 a 12', 'start' => 4, 'end' => 12, 'tbr_percentage' => 0.4000, 'is_renewal' => false],
  18. ['description' => 'Até 50k — meses 13 a 60', 'start' => 13, 'end' => 60, 'tbr_percentage' => 0.6000, 'is_renewal' => false],
  19. ['description' => 'Renovação até 50k', 'start' => 1, 'end' => 60, 'tbr_percentage' => 0.6000, 'is_renewal' => true],
  20. ],
  21. 'MP' => [
  22. ['description' => 'De 50k a 100k — isenção inicial (meses 1 a 3)', 'start' => 1, 'end' => 3, 'tbr_percentage' => 0.0000, 'is_renewal' => false],
  23. ['description' => 'De 50k a 100k — meses 4 a 12', 'start' => 4, 'end' => 12, 'tbr_percentage' => 0.5000, 'is_renewal' => false],
  24. ['description' => 'De 50k a 100k — meses 13 a 60', 'start' => 13, 'end' => 60, 'tbr_percentage' => 0.7500, 'is_renewal' => false],
  25. ['description' => 'Renovação 50k–100k', 'start' => 1, 'end' => 60, 'tbr_percentage' => 0.7500, 'is_renewal' => true],
  26. ],
  27. 'GP' => [
  28. ['description' => 'De 100k a 200k — isenção inicial (meses 1 a 3)', 'start' => 1, 'end' => 3, 'tbr_percentage' => 0.0000, 'is_renewal' => false],
  29. ['description' => 'De 100k a 200k — meses 4 a 12', 'start' => 4, 'end' => 12, 'tbr_percentage' => 0.7500, 'is_renewal' => false],
  30. ['description' => 'De 100k a 200k — meses 13 a 60', 'start' => 13, 'end' => 60, 'tbr_percentage' => 1.0000, 'is_renewal' => false],
  31. ['description' => 'Renovação 100k–200k', 'start' => 1, 'end' => 60, 'tbr_percentage' => 1.0000, 'is_renewal' => true],
  32. ],
  33. 'MGP' => [
  34. ['description' => 'Acima de 200k — isenção inicial (meses 1 a 3)', 'start' => 1, 'end' => 3, 'tbr_percentage' => 0.0000, 'is_renewal' => false],
  35. ['description' => 'Acima de 200k — meses 4 a 12', 'start' => 4, 'end' => 12, 'tbr_percentage' => 1.0000, 'is_renewal' => false],
  36. ['description' => 'Acima de 200k — meses 13 a 60', 'start' => 13, 'end' => 60, 'tbr_percentage' => 1.5000, 'is_renewal' => false],
  37. ['description' => 'Renovação +200k', 'start' => 1, 'end' => 60, 'tbr_percentage' => 1.5000, 'is_renewal' => true],
  38. ],
  39. ];
  40. foreach ($rules as $acronym => $brackets) {
  41. $sizeId = $sizes[$acronym] ?? null;
  42. if (!$sizeId) {
  43. continue;
  44. }
  45. foreach ($brackets as $bracket) {
  46. InhabitantClassification::firstOrCreate(
  47. [
  48. 'municipality_size_id' => $sizeId,
  49. 'start' => $bracket['start'],
  50. 'end' => $bracket['end'],
  51. 'is_renewal' => $bracket['is_renewal'],
  52. ],
  53. array_merge($bracket, ['municipality_size_id' => $sizeId]),
  54. );
  55. }
  56. }
  57. }
  58. }