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(); } }