method()) { case 'POST': return $this->getPostRules(); default: return []; } } private function getPostRules() { $rules = [ 'dor_toracica' => [ 'nullable', 'boolean', ], 'plantao_id' => [ 'required', 'integer' ], 'alergias' => ['nullable', 'array'], 'alergias.*.alergia_id' => [ 'required', 'integer', 'exists:\App\Models\Cadastro\SujeitoAtencao\Alergia,id', ], 'alergias.*.criticidade_id' => [ 'required', 'integer', 'exists:\App\Models\Cadastro\SujeitoAtencao\AlergiaCriticidade,id', ], 'alergias.*.reacoes_observacoes' => [ 'nullable', 'string', 'between:3,100', ], 'atendimento_id' => [ 'required', 'integer', 'exists:\App\Models\ProntoAtendimento\Atendimento\Atendimento,id', ], 'avaliacao_antropometrica' => ['nullable', 'array'], 'avaliacao_antropometrica.altura' => [ 'nullable', 'numeric', 'max:999.99', ], 'avaliacao_antropometrica.altura_tipo_medida_id' => [ 'nullable', 'required_with:avaliacao_antropometrica.altura', 'integer', 'exists:\App\Models\Geral\TipoMedidaAltura,id', ], 'avaliacao_antropometrica.altura_unidade_medida_id' => [ 'nullable', 'required_with:avaliacao_antropometrica.altura', 'integer', Rule::in([UnidadeMedida::CENTIMETROS, UnidadeMedida::METROS]), ], 'avaliacao_antropometrica.massa' => [ 'nullable', 'numeric', 'max:999.99', ], 'avaliacao_antropometrica.massa_unidade_medida_id' => [ 'nullable', 'required_with:avaliacao_antropometrica.massa', 'integer', Rule::in([UnidadeMedida::GRAMAS, UnidadeMedida::QUILOGRAMAS]), ], 'centro_custo_id_para' => [ 'nullable', 'integer', Rule::requiredIf(fn () => !$this->hasFinalizacao()), 'exists:\App\Models\Cadastro\Estabelecimento\CentroCusto,id', ], 'classificacao_risco_id' => [ 'nullable', 'integer', 'exists:\App\Models\ProntoAtendimento\ClassificacaoRisco\ClassificacaoRisco,id', ], 'fila_id' => [ 'required', 'integer', 'exists:\App\Models\PainelSenha\Fila,id', ], 'gestacao' => ['nullable', 'array'], 'gestacao.dum' => ['nullable', 'date_format:Y-m-d', 'before_or_equal:now'], 'gestacao.gestante' => ['required', 'boolean'], 'historico_enfermagem' => [ 'nullable', 'string', 'max:3000', ], 'medicamentos_uso' => [ 'nullable', 'string', 'max:3000', ], 'observacoes' => [ 'nullable', 'string', 'max:3000', ], 'outras_avaliacoes_condicoes' => [ 'nullable', 'string', 'max:3000', ], 'sinais_vitais' => ['nullable', 'array'], 'sinais_vitais.*.cintura' => [ 'nullable', 'required_without_all:' . 'sinais_vitais.*.pa,' . 'sinais_vitais.*.glicemia,' . 'sinais_vitais.*.temperatura,' . 'sinais_vitais.*.pulso,' . 'sinais_vitais.*.respiracao,' . 'sinais_vitais.*.saturacao,' . 'sinais_vitais.*.intensidade_dor,', 'integer', 'max:999', ], 'sinais_vitais.*.glicemia' => [ 'nullable', 'required_without_all:' . 'sinais_vitais.*.pa,' . 'sinais_vitais.*.temperatura,' . 'sinais_vitais.*.pulso,' . 'sinais_vitais.*.respiracao,' . 'sinais_vitais.*.saturacao,' . 'sinais_vitais.*.intensidade_dor,' . 'sinais_vitais.*.cintura', 'integer', 'max:999', ], 'sinais_vitais.*.intensidade_dor' => [ 'nullable', 'required_without_all:' . 'sinais_vitais.*.pa,' . 'sinais_vitais.*.glicemia,' . 'sinais_vitais.*.temperatura,' . 'sinais_vitais.*.pulso,' . 'sinais_vitais.*.respiracao,' . 'sinais_vitais.*.saturacao,' . 'sinais_vitais.*.cintura', 'integer', 'between:1,10', ], 'sinais_vitais.*.pa_unidade_medida_id' => [ 'nullable', 'required_with:sinais_vitais.*.pa', 'integer', Rule::in([UnidadeMedida::MILIMETROS_DE_MERCURIO, UnidadeMedida::CENTIMETROS_DE_MERCURIO]), ], 'sinais_vitais.*.pulso' => [ 'nullable', 'required_without_all:' . 'sinais_vitais.*.pa,' . 'sinais_vitais.*.glicemia,' . 'sinais_vitais.*.temperatura,' . 'sinais_vitais.*.respiracao,' . 'sinais_vitais.*.saturacao,' . 'sinais_vitais.*.intensidade_dor,' . 'sinais_vitais.*.cintura', 'integer', 'max:999', ], 'sinais_vitais.*.respiracao' => [ 'nullable', 'required_without_all:' . 'sinais_vitais.*.pa,' . 'sinais_vitais.*.glicemia,' . 'sinais_vitais.*.temperatura,' . 'sinais_vitais.*.pulso,' . 'sinais_vitais.*.saturacao,' . 'sinais_vitais.*.intensidade_dor,' . 'sinais_vitais.*.cintura', 'integer', 'max:99', ], 'sinais_vitais.*.saturacao' => [ 'nullable', 'required_without_all:' . 'sinais_vitais.*.pa,' . 'sinais_vitais.*.glicemia,' . 'sinais_vitais.*.temperatura,' . 'sinais_vitais.*.pulso,' . 'sinais_vitais.*.respiracao,' . 'sinais_vitais.*.intensidade_dor,' . 'sinais_vitais.*.cintura', 'integer', 'between:1,100', ], 'sinais_vitais.*.temperatura' => [ 'nullable', 'required_without_all:' . 'sinais_vitais.*.pa,' . 'sinais_vitais.*.glicemia,' . 'sinais_vitais.*.pulso,' . 'sinais_vitais.*.respiracao,' . 'sinais_vitais.*.saturacao,' . 'sinais_vitais.*.intensidade_dor,' . 'sinais_vitais.*.cintura', 'numeric', 'max:99.9', ], 'escala_coma_glasgow' => [ 'nullable', 'array', ], 'escala_coma_glasgow.*.abertura_ocular_id' => [ 'required', 'integer', 'exists:\App\Models\Geral\GlasgowAberturaOcular,id' ], 'escala_coma_glasgow.*.resposta_verbal_id' => [ 'required', 'integer', 'exists:\App\Models\Geral\GlasgowRespostaVerbal,id' ], 'escala_coma_glasgow.*.resposta_motora_id' => [ 'required', 'integer', 'exists:\App\Models\Geral\GlasgowRespostaMotora,id' ], 'escala_coma_glasgow.*.reatividade_pupilar_id' => [ 'required', 'integer', 'exists:\App\Models\Geral\GlasgowReatividadePupilar,id' ], 'escala_coma_glasgow.*.observacao' => [ 'nullable', 'string', 'max:2500' ], 'finalizacao' => [ 'nullable', 'array', ], 'finalizacao.desfecho_id' => [ Rule::requiredIf(fn () => $this->hasFinalizacao()), 'integer', 'exists:\App\Models\ProntoAtendimento\Atendimento\Desfecho,id', ], 'finalizacao.evasao' => [ 'nullable', 'required_if:finalizacao.desfecho_id,' . Desfecho::EVASAO, 'array', ], 'finalizacao.evasao.motivo' => [ 'nullable', 'required_if:finalizacao.desfecho_id,' . Desfecho::EVASAO, 'string', 'max:200' ], ]; foreach (($this->sinais_vitais ?? []) as $i => $sinalVital) { $rules["sinais_vitais.{$i}.pa"] = [ 'nullable', 'required_without_all:' . "sinais_vitais.{$i}.glicemia," . "sinais_vitais.{$i}.temperatura," . "sinais_vitais.{$i}.pulso," . "sinais_vitais.{$i}.respiracao," . "sinais_vitais.{$i}.saturacao," . "sinais_vitais.{$i}.intensidade_dor," . "sinais_vitais.{$i}.cintura'", 'string', ]; if ($sinalVital['pa_unidade_medida_id'] === UnidadeMedida::MILIMETROS_DE_MERCURIO) { $rules["sinais_vitais.{$i}.pa"][] = 'regex:/^[0-9]{2,3}\/+[0-9]{2,3}$/'; } else if ($sinalVital['pa_unidade_medida_id'] === UnidadeMedida::CENTIMETROS_DE_MERCURIO) { $rules["sinais_vitais.{$i}.pa"][] = 'regex:/^[0-9]{1,2}\/+[0-9]{1,2}$/'; } } return $rules; } private function hasFinalizacao() { return isset($this->finalizacao); } }