This commit is contained in:
@@ -0,0 +1,309 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\ProntoAtendimento\Atendimento;
|
||||
|
||||
use App\Enums\Cadastro\UnidadeMedida;
|
||||
use App\Enums\ProntoAtendimento\Atendimento\Desfecho;
|
||||
use App\Http\Requests\FormRequest;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class TriagemRequest extends FormRequest
|
||||
{
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function rules()
|
||||
{
|
||||
switch ($this->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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user