init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,95 @@
<?php
namespace App\Services\Sigtap;
use App\Models\Cadastro\SujeitoAtencao\Sexo;
use App\Models\Sigtap\Ocupacao;
use App\Models\Sigtap\Procedimento;
use Carbon\Carbon;
use Illuminate\Support\Collection;
class ProcedimentoValidationService
{
private const QUANTIDADE_ULTIMAS_COMPENTENCIAS_VALIDAS = 4;
private Procedimento $procedimento;
private Collection $competenciasValidas;
public function __construct(Procedimento $procedimento)
{
$this->procedimento = $procedimento;
$this->competenciasValidas = $this->getCompetenciasValidas();
}
private function getCompetenciasValidas() : Collection
{
$competencias = new Collection;
$lastDate = null;
for ($i = 0; $i < self::QUANTIDADE_ULTIMAS_COMPENTENCIAS_VALIDAS; $i++) {
$date = null;
if (is_null($lastDate)) {
$date = Carbon::now();
}
else {
$isJanuary = $lastDate->month === 1;
$year = $isJanuary ? $lastDate->year - 1 : $lastDate->year;
$month = $isJanuary ? 12 : $lastDate->month - 1;
$date = Carbon::create($year, $month);
}
$competencia = $date->format('Ym');
if (Procedimento::whereHas('competencia', function($query) use ($competencia) {
$query->where('valor', $competencia);
})->exists()) {
$competencias->push($competencia);
}
$lastDate = $date;
}
return $competencias;
}
public function isOnCurrentCompetencia() : bool
{
return $this->procedimento->competencia->valor === $this->competenciasValidas->first();
}
public function isOnValidCompetencia() : bool
{
return $this->competenciasValidas->contains($this->procedimento->competencia->valor);
}
public function isOcupacaoValid(Ocupacao $ocupacao) : bool
{
return $this->procedimento->ocupacoes->isEmpty()
|| $this->procedimento->ocupacoes->contains($ocupacao);
}
public function isSexoValid(Sexo $sexo) : bool
{
return $this->procedimento->sexo === 'I'
|| $this->procedimento->sexo === 'N'
|| $this->procedimento->sexo === $sexo->identificador;
}
public function isIdadeValid(int $idadeEmAnos) : bool
{
$idadeEmMeses = $idadeEmAnos * 12;
return ($idadeEmMeses >= $this->procedimento->idade_minima || $this->procedimento->idade_minima === 9999)
&& ($idadeEmMeses <= $this->procedimento->idade_maxima || $this->procedimento->idade_maxima === 9999);
}
public function isQuantidadeValid(int $quantidade) : bool
{
return $quantidade >= 0
&& $quantidade <= $this->procedimento->quantidade_maxima_execucao;
}
}