Skip to content

Criar model LegalAnalysis e migration para etapa de Análise Jurídica #63

@Junior-Shyko

Description

@Junior-Shyko

Objetivo

Criar o model LegalAnalysis que armazena os dados da etapa de Análise Jurídica, incluindo pareceres, certidões, impedimentos e regularidade documental.

Contexto

A etapa de Análise Jurídica é de responsabilidade da ASJUR (Assessoria Jurídica). Nela são verificadas certidões negativas, regularidade fiscal, impedimentos legais e emitido parecer jurídico sobre a aptidão do beneficiário para receber recursos públicos.

Tarefas

Migration

  • Criar migration create_legal_analyses_table:
  Schema::create('legal_analyses', function (Blueprint $table) {
      $table->id();
      $table->foreignId('registration_id')->unique()->constrained()->cascadeOnDelete();
      
      // Campos a serem mapeados com base nas telas de UX
      // Estrutura base:
      
      // Certidões e regularidade
      $table->boolean('certidao_federal_regular')->nullable();
      $table->boolean('certidao_estadual_regular')->nullable();
      $table->boolean('certidao_municipal_regular')->nullable();
      $table->boolean('certidao_trabalhista_regular')->nullable();
      $table->boolean('certidao_fgts_regular')->nullable();
      
      // Impedimentos
      $table->boolean('consta_ceis')->default(false); // Cadastro de Empresas Inidôneas
      $table->boolean('consta_cnep')->default(false); // Cadastro Nacional de Empresas Punidas
      $table->text('impedimentos_observacoes')->nullable();
      
      // Parecer jurídico
      $table->enum('parecer', ['favoravel', 'desfavoravel', 'pendente'])->nullable();
      $table->text('parecer_texto')->nullable();
      $table->foreignId('parecerista_user_id')->nullable()->constrained('users');
      $table->date('data_parecer')->nullable();
      
      // JSONB para documentos anexados
      $table->jsonb('certidoes_data')->nullable(); // Armazena metadados das certidões
      
      // Controle
      $table->boolean('is_draft')->default(true);
      $table->foreignId('responsible_user_id')->nullable()->constrained('users');
      $table->timestamp('submitted_at')->nullable();
      $table->timestamps();
      $table->softDeletes();
      
      $table->index(['registration_id', 'parecer']);
  });

Model

  • Criar model app/Models/LegalAnalysis.php
  • Adicionar trait Auditable
  • Adicionar trait SoftDeletes
  • Configurar $fillable
  • Configurar $casts:
  protected $casts = [
      'certidao_federal_regular' => 'boolean',
      'certidao_estadual_regular' => 'boolean',
      'certidao_municipal_regular' => 'boolean',
      'certidao_trabalhista_regular' => 'boolean',
      'certidao_fgts_regular' => 'boolean',
      'consta_ceis' => 'boolean',
      'consta_cnep' => 'boolean',
      'data_parecer' => 'date',
      'certidoes_data' => 'array',
      'is_draft' => 'boolean',
      'submitted_at' => 'datetime',
  ];

Relacionamentos

  • registration()belongsTo(Registration::class)
  • responsibleUser()belongsTo(User::class, 'responsible_user_id')
  • parecerista()belongsTo(User::class, 'parecerista_user_id')

Métodos de validação e negócio

  • isComplete(): bool → verifica se análise foi concluída
  • getMissingFields(): array → campos faltantes
  • hasImpedimentos(): bool → retorna true se CEIS ou CNEP
  • isRegular(): bool → retorna true se todas certidões regulares
  • canEmitParecer(): bool → valida se pode emitir parecer

Atualizar Registration

  • Adicionar relacionamento em Registration:
  public function legalAnalysis()
  {
      return $this->hasOne(LegalAnalysis::class);
  }

Factory e Seeder

  • Criar LegalAnalysisFactory
  • Configurar estados (favoravel, desfavoravel, com_impedimentos)

Estrutura do JSONB certidoes_data

{
  "federal": {
    "numero": "123456789",
    "data_emissao": "2025-02-01",
    "validade": "2025-08-01",
    "arquivo_path": "certidoes/federal_123.pdf"
  },
  "estadual": {
    "numero": "CE-987654",
    "data_emissao": "2025-02-05",
    "validade": "2025-08-05",
    "arquivo_path": "certidoes/estadual_987.pdf"
  }
}

Critérios de Aceite

  • Migration executada sem erros
  • Model com relacionamentos funcionais
  • Trait Auditable configurado
  • Factory gera dados de parecer favorável e desfavorável
  • Métodos de validação funcionam
  • Teste passa:
  $analysis = LegalAnalysis::factory()
      ->for($registration)
      ->state(['parecer' => 'favoravel'])
      ->create();
  expect($analysis->isRegular())->toBeTrue();

Dependências

  • Migration de registrations precisa existir
  • Aguardando telas de UX/UI para mapear campos exatos

Observações

  • Campos de certidões são boolean para facilitar queries
  • Parecer é enum para garantir consistência
  • JSONB armazena metadados dos documentos anexados

---

## **Issue #3: Criar model Formalization (Formalização de Processos)**

### Título

Criar model Formalization e migration para etapa de Formalização

Metadata

Metadata

Labels

BackendTarefas do Backend

Type

No type

Projects

Status

Done

Relationships

None yet

Development

No branches or pull requests

Issue actions