FinancialPlanAccountSeeder.php 5.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace Database\Seeders;
  3. use App\Models\FinancialPlanAccount;
  4. use Illuminate\Database\Seeder;
  5. class FinancialPlanAccountSeeder extends Seeder
  6. {
  7. public function run(): void
  8. {
  9. // Plano de contas padrão da matriz (franqueador): unit_id null.
  10. // Raízes (contas pai) por tipo — parent_id null. As filhas herdam o chart_type.
  11. $roots = [
  12. ['code' => '1', 'description' => 'Ativo', 'chart_type' => 'Ativo'],
  13. ['code' => '2', 'description' => 'Passivo', 'chart_type' => 'Passivo'],
  14. ['code' => '3', 'description' => 'Receitas', 'chart_type' => 'Receitas'],
  15. ['code' => '4', 'description' => 'Despesas', 'chart_type' => 'Despesas'],
  16. ];
  17. $accounts = [
  18. ['code' => '1.1', 'description' => 'Ativo Circulante', 'chart_type' => 'Ativo'],
  19. ['code' => '1.1.1', 'description' => 'Caixas e Equivalentes', 'chart_type' => 'Ativo'],
  20. ['code' => '1.1.2', 'description' => 'Bancos Conta Movimento', 'chart_type' => 'Ativo'],
  21. ['code' => '1.1.3', 'description' => 'Aplicações Financeiras', 'chart_type' => 'Ativo'],
  22. ['code' => '1.1.4', 'description' => 'Contas a Receber', 'chart_type' => 'Ativo'],
  23. ['code' => '1.2', 'description' => 'Ativo Não Circulante', 'chart_type' => 'Ativo'],
  24. ['code' => '1.2.1', 'description' => 'Imobilizado', 'chart_type' => 'Ativo'],
  25. ['code' => '1.2.2', 'description' => 'Intangível', 'chart_type' => 'Ativo'],
  26. ['code' => '2.1', 'description' => 'Passivo Circulante', 'chart_type' => 'Passivo'],
  27. ['code' => '2.1.1', 'description' => 'Fornecedores', 'chart_type' => 'Passivo'],
  28. ['code' => '2.1.2', 'description' => 'Obrigações Trabalhistas', 'chart_type' => 'Passivo'],
  29. ['code' => '2.1.3', 'description' => 'Impostos a Pagar', 'chart_type' => 'Passivo'],
  30. ['code' => '2.1.4', 'description' => 'Empréstimos e Financiamentos', 'chart_type' => 'Passivo'],
  31. ['code' => '3.1', 'description' => 'Receita de Franquias', 'chart_type' => 'Receitas'],
  32. ['code' => '3.1.1', 'description' => 'Fundo de Marketing', 'chart_type' => 'Receitas'],
  33. ['code' => '3.1.2', 'description' => 'Taxa TBR', 'chart_type' => 'Receitas'],
  34. ['code' => '3.2', 'description' => 'Receitas Financeiras', 'chart_type' => 'Receitas'],
  35. ['code' => '3.2.1', 'description' => 'Juros Recebidos', 'chart_type' => 'Receitas'],
  36. ['code' => '3.2.2', 'description' => 'Rendimentos de Aplicações', 'chart_type' => 'Receitas'],
  37. ['code' => '4.1', 'description' => 'Despesas Operacionais', 'chart_type' => 'Despesas'],
  38. ['code' => '4.1.1', 'description' => 'Salários e Encargos', 'chart_type' => 'Despesas'],
  39. ['code' => '4.1.2', 'description' => 'Aluguel', 'chart_type' => 'Despesas'],
  40. ['code' => '4.1.3', 'description' => 'Energia e Utilidades', 'chart_type' => 'Despesas'],
  41. ['code' => '4.1.4', 'description' => 'Marketing e Publicidade', 'chart_type' => 'Despesas'],
  42. ['code' => '4.2', 'description' => 'Despesas Financeiras', 'chart_type' => 'Despesas'],
  43. ['code' => '4.2.1', 'description' => 'Juros Pagos', 'chart_type' => 'Despesas'],
  44. ['code' => '4.2.2', 'description' => 'Taxas Bancárias', 'chart_type' => 'Despesas'],
  45. ];
  46. // code => id, para resolver o parent_id ao criar as filhas.
  47. $idByCode = [];
  48. // Raízes primeiro (parent_id null).
  49. foreach ($roots as $root) {
  50. $model = FinancialPlanAccount::updateOrCreate(
  51. ['code' => $root['code'], 'unit_id' => null],
  52. [
  53. 'parent_id' => null,
  54. 'order' => $root['code'],
  55. 'description' => $root['description'],
  56. 'chart_type' => $root['chart_type'],
  57. ],
  58. );
  59. $idByCode[$root['code']] = $model->id;
  60. }
  61. // Demais contas — pai = código sem o último segmento (ex.: 1.1.1 -> 1.1).
  62. foreach ($accounts as $account) {
  63. $segments = explode('.', $account['code']);
  64. array_pop($segments);
  65. $parentCode = implode('.', $segments);
  66. $model = FinancialPlanAccount::updateOrCreate(
  67. ['code' => $account['code'], 'unit_id' => null],
  68. [
  69. 'parent_id' => $idByCode[$parentCode] ?? null,
  70. 'order' => $account['code'],
  71. 'description' => $account['description'],
  72. 'chart_type' => $account['chart_type'],
  73. ],
  74. );
  75. $idByCode[$account['code']] = $model->id;
  76. }
  77. }
  78. }