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

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,155 @@
<?php
namespace App\Services\ProntoAtendimento\FechamentoFaa;
use App\Enums\ProntoAtendimento\Atendimento\Desfecho;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
use App\Models\ProntoAtendimento\Atendimento\Procedimento;
use App\Models\Sigtap\Competencia;
use App\Rules\Sigtap\CidBelongsToProcedimento;
use App\Rules\Sigtap\CidIsRequiredForProcedimento;
use App\Rules\Sigtap\ProcedimentoIsValidForCompetencia;
use App\Rules\Sigtap\ProcedimentoIsValidForIdade;
use App\Rules\Sigtap\ProcedimentoIsValidForOcupacao;
use App\Rules\Sigtap\ProcedimentoIsValidForSexo;
use App\Rules\Sigtap\QuantidadeIsValidForProcedimento;
use Carbon\Carbon;
use Illuminate\Validation\Rule;
class Validations
{
public static function index()
{
return request()->validate([
'start' => [
'required',
'date_format:d/m/Y',
'before_or_equal:now'
],
'end' => [
'required',
'date_format:d/m/Y',
'after_or_equal:start',
'before_or_equal:now',
],
]);
}
public static function update($faa)
{
$rules = [
'usuario_responsavel_id' => [
Rule::requiredIf(fn () => request()->desfecho_id !== Desfecho::FAA_EXTRAVIADA),
'integer',
'exists:\App\Models\Cadastro\SujeitoAtencao\Usuario,id',
],
'fatores_risco' => [
'nullable',
'array',
],
'fatores_risco.*' => [
'required',
'integer',
'exists:\App\Models\Cadastro\SujeitoAtencao\FatorRisco,id',
],
];
$rules = array_merge(
$rules,
self::getPutProcedimentosRules($faa)
);
return request()->validate($rules);
}
private static function getPutProcedimentosRules($faa)
{
$rules = [
'procedimentos' => [
Rule::requiredIf(fn () =>
request()->desfecho_id !== Desfecho::FAA_EXTRAVIADA
&& !self::hasProcedimentoRegistered($faa)
),
'array',
],
'procedimentos.*.data' => [
'required',
'date_format:d/m/Y',
],
'procedimentos.*.lotacao_id' => [
'bail',
'required',
'integer',
'exists:\App\Models\Cadastro\SujeitoAtencao\Lotacao,id'
],
'procedimentos.*.is_parametrizado' => [
'nullable',
'boolean'
],
];
foreach ((request()->procedimentos ?? []) as $i => $params) {
$procedimentoIdAnterior = null;
if (isset($params['id']) && !is_null($params['id'])) {
$procedimentoIdAnterior = Procedimento::findOrFail($params['id'])->procedimento_id;
}
$rules["procedimentos.{$i}.procedimento_id"] = [
'required',
'integer',
'exists:\App\Models\Sigtap\Procedimento,id',
];
$lotacao = Lotacao::find($params['lotacao_id']);
if (!is_null($lotacao) && $procedimentoIdAnterior != $params['procedimento_id']) {
$rules["procedimentos.{$i}.procedimento_id"] = array_merge(
$rules["procedimentos.{$i}.procedimento_id"],
[
new ProcedimentoIsValidForOcupacao($lotacao->ocupacao_id),
new ProcedimentoIsValidForSexo($faa->paciente->cidadao->sexo->identificador),
(
$faa->paciente->cidadao->idade
? new ProcedimentoIsValidForIdade($faa->paciente->cidadao->idade['anos'])
: null
),
]
);
}
$rules["procedimentos.{$i}.cid_id"] = [
'nullable',
'integer',
'exists:\App\Models\Sigtap\Cid,id',
new CidIsRequiredForProcedimento($params['procedimento_id']),
new CidBelongsToProcedimento($params['procedimento_id']),
];
$rules["procedimentos.{$i}.quantidade"] = [
'required',
'integer',
'min:1',
new QuantidadeIsValidForProcedimento($params['procedimento_id'])
];
}
return $rules;
}
private static function hasProcedimentoRegistered($faa)
{
$atendimento = self::getAtendimentoFaa($faa);
return $atendimento->has('procedimentos')->exists();
}
private static function getAtendimentoFaa($faa)
{
return Atendimento::where('faa_id', $faa->id)->get()->last();
}
}