This commit is contained in:
155
api/app/Services/ProntoAtendimento/FechamentoFaa/Validations.php
Normal file
155
api/app/Services/ProntoAtendimento/FechamentoFaa/Validations.php
Normal 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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user