self::getDadosForm(), 'model' => self::getDadosModel(), ]; } private static function getDadosForm() { return [ 'infraestrutura' => [ 'unidades' => self::getInfraestruturaUnidades(), 'infraestruturas' => [], 'servicos' => [], 'atencao_basica_funcionalidades' => collect([ self::getAtencaoBasicaFuncionalidade('avaliacao'), self::getAtencaoBasicaFuncionalidade('atendimento-domiciliar'), self::getAtencaoBasicaFuncionalidade('atendimento-individual'), self::getAtencaoBasicaFuncionalidade('atendimento-odontologico'), self::getAtencaoBasicaFuncionalidade('marcador-consumo-alimentar'), self::getAtencaoBasicaFuncionalidade('procedimento'), ]), 'assinaturas' => ParametrizacaoAssinaturaEletronica::orderBy('descricao')->get() ], 'sigilo' => [ 'unidades' => self::getSigiloUnidades(), 'infraestruturas' => [], 'sigilo_tipos' => self::getSigiloTipos(), ], ]; } private static function getAtencaoBasicaFuncionalidade($identificador) { return Funcionalidade::whereHas('modulo', fn ($q) => $q ->where('identificador', 'atencao-basica') ) ->where('identificador', $identificador) ->first(['id', 'nome']); } public static function list() { switch (request()->origem) { case 'infraestrutura': { return self::getDadosListInfraestrutura(); } case 'sigilo': { return self::getDadosListSigilo(); } } } private static function getDadosListInfraestrutura() { $params = (object) request()->all(); switch (request()->listar) { case 'infraestruturas': { return self::getInfraestruturaInfraestruturas($params); } case 'servicos': { return self::getInfraestruturaServicos(); } } } private static function getDadosListSigilo() { $params = (object) request()->all(); switch (request()->listar) { case 'infraestruturas': { return self::getSigiloInfraestruturas($params); } } } private static function getInfraestruturaUnidades() { return Unidade::orderBy('nome_fantasia') ->whereHas('infraestruturas') ->get(['id', 'nome_fantasia']); } private static function getInfraestruturaInfraestruturas($params) { return Infraestrutura::setEagerLoads([]) ->where('unidade_id', $params->unidade_id) ->get(['id', 'nome', 'principal', 'unidade_id']) ->map(fn ($infraestrutura) => [ 'id' => $infraestrutura->id, 'nome' => $infraestrutura->nome, ]) ->sortBy('nome') ->values(); } private static function getInfraestruturaServicos() { return Servico::orderBy('nome')->get(['id', 'nome']); } private static function getSigiloUnidades() { return Unidade::orderBy('nome_fantasia') ->whereHas('infraestruturas') ->get(['id', 'nome_fantasia']); } private static function getSigiloInfraestruturas($params) { return Infraestrutura::setEagerLoads([]) ->where('unidade_id', $params->unidade_id) ->get(['id', 'nome', 'principal', 'unidade_id']) ->map(fn ($infraestrutura) => [ 'id' => $infraestrutura->id, 'nome' => $infraestrutura->nome, ]) ->sortBy('nome') ->values(); } private static function getSigiloTipos() { return SigiloTipo::orderBy('id')->get(['id', 'nome']); } private static function getDadosModel() { return [ 'infraestrutura' => self::getModelInfraestrutura(), 'agendamento' => self::getModelAgendamento(), 'integracaoAplicativo' => self::getModelIntegracaoAplicativo(), 'atendimento' => self::getModelAtendimento(), 'sigilo' => self::getModelSigilo(), ]; } private static function getModelInfraestrutura() { return [ 'infraestruturas' => self::getInfraestruturasParametrizadas(), ]; } private static function getInfraestruturasParametrizadas() { return ParametrizacaoInfraestrutura::get(['id', 'infraestrutura_id', 'envia_sms', 'fatura_procedimento_raas']) ->map(function ($parametrizacao) { $infraestrutura = $parametrizacao->infraestrutura() ->setEagerLoads([]) ->first(['id', 'nome', 'principal', 'unidade_id']); $unidade = $infraestrutura->unidade() ->setEagerLoads([]) ->first(['nome_fantasia']); return [ 'id' => $infraestrutura->id, 'deleted' => false, 'nome' => $infraestrutura->nome, 'unidade_nome_fantasia' => $unidade->nome_fantasia, 'envia_sms' => $parametrizacao->envia_sms, 'fatura_procedimento_raas' => $parametrizacao->fatura_procedimento_raas, 'ocupacoes' => $parametrizacao->ocupacoes ->map(fn ($parametrizacao) => [ 'id' => $parametrizacao->ocupacao_id, 'codigo' => $parametrizacao->ocupacao->codigo, 'nome' => $parametrizacao->ocupacao->nome, 'pos_consulta' => $parametrizacao->pos_consulta, 'permite_atendimento_enfermagem' => $parametrizacao->permite_atendimento_enfermagem, 'atencao_basica_funcionalidades' => $parametrizacao->fichasAtb->pluck('id'), ]), 'especialidades' => $parametrizacao->especialidades ->map(fn ($parametrizacao) => [ 'id' => $parametrizacao->especialidade_id, 'nome' => $parametrizacao->especialidade->nome, 'ocupacao_id' => $parametrizacao->especialidade->ocupacao->id, 'ocupacao_codigo' => $parametrizacao->especialidade->ocupacao->codigo, 'avisa_falta_quantidade' => $parametrizacao->avisa_falta_quantidade ?? null, 'avisa_falta_dias' => $parametrizacao->avisa_falta_dias ?? null, 'quantidade_dias_retorno' => $parametrizacao->quantidade_dias_retorno ?? null, 'demanda_espontanea_observa_vaga_atendimento' => $parametrizacao->demanda_espontanea_observa_vaga_atendimento ?? false, 'is_regulado' => $parametrizacao->especialidade->is_regulado ?? false, 'procedimentos' => $parametrizacao->procedimentos ->map(fn ($parametrizacao) => [ 'codigo' => $parametrizacao->codigo, 'nome' => $parametrizacao->procedimento->nome, ]), ]), 'infraestruturas_agendadoras' => $parametrizacao->infraestruturasAgendadoras ->map(fn ($parametrizacao) => [ 'id' => $parametrizacao->infraestrutura_id, 'nome' => $parametrizacao->infraestrutura->nome, 'unidade_nome_fantasia' => $parametrizacao->infraestrutura->unidade->nome_fantasia, ]), 'sms' => [ 'dia_antecedencia' => $parametrizacao->sms->dia_antecedencia ?? null, 'periodo_envio' => [ 'start' => is_null($parametrizacao->sms->envio_de ?? null) ? null : (new Carbon($parametrizacao->sms->envio_de))->format('d/m/Y'), 'end' => is_null($parametrizacao->sms->envio_ate ?? null) ? null : (new Carbon($parametrizacao->sms->envio_ate))->format('d/m/Y'), ], 'especialidades' => ($parametrizacao->sms->especialidades ?? collect()) ->map(fn ($especialidade) => [ 'id' => $especialidade->id, 'nome' => $especialidade->nome, 'ocupacao_codigo' => $especialidade->ocupacao->codigo, ]), ], 'servicos' => $parametrizacao->servicos() ->orderBy('nome') ->get(['id', 'nome']) ->map(fn ($servico) => [ 'id' => $servico->id, 'nome' => $servico->nome, ]), 'assinaturas' => $parametrizacao->assinaturas ->pluck('parametrizacao_assinatura_eletronica_id') ->toArray(), ]; }); } private static function getModelAgendamento() { $agendamento = ParametrizacaoAgendamento::first(); return [ 'avisa_cns_provisorio' => $agendamento->avisa_cns_provisorio ?? false, 'avisa_paciente_outra_unidade' => $agendamento->avisa_paciente_outra_unidade ?? false, 'bloqueia_paciente_temporario' => $agendamento->bloqueia_paciente_temporario ?? false, 'obriga_motivo_agendamento_excedente' => $agendamento->obriga_motivo_agendamento_excedente ?? false, 'permite_agendar_mesma_especialidade' => $agendamento->permite_agendar_mesma_especialidade ?? false, 'gerenciar_tratamento' => $agendamento->gerenciar_tratamento ?? false, ]; } private static function getModelIntegracaoAplicativo() { $integracao = ParametrizacaoIntegracaoAplicativo::first(); return [ 'habilita_integracao_conectasus_cidadao' => $integracao->habilita_integracao_conectasus_cidadao ?? false, 'habilita_integracao_aplicativo_feridas' => $integracao->habilita_integracao_aplicativo_feridas ?? false, ]; } private static function getModelAtendimento() { $atendimento = ParametrizacaoAtendimento::first(); return [ 'exibe_mensagem_atendimento_retroativo_nao_finalizado' => $atendimento->exibe_mensagem_atendimento_retroativo_nao_finalizado ?? false, 'exibe_box_exame_laboratorial_solicitado' => $atendimento->exibe_box_exame_laboratorial_solicitado ?? false, 'receita_nao_padronizada_justificativa_obrigatoria' => $atendimento->receita_nao_padronizada_justificativa_obrigatoria ?? false, 'modelo_impressao_sadt' => $atendimento->modelo_impressao_sadt ?? 'padrao', 'modelo_impressao_apac' => $atendimento->modelo_impressao_apac ?? 'padrao', 'visualizar_remume' => $atendimento->visualizar_remume ?? false, 'visualizar_estoque' => $atendimento->visualizar_estoque ?? false, 'cadastro_prescricoes' => $atendimento->cadastro_prescricoes ?? false, 'permite_exame_laboratorial_repetido' => $atendimento->permite_exame_laboratorial_repetido ?? false, 'permite_exame_imagem_repetido' => $atendimento->permite_exame_imagem_repetido ?? false, 'permite_encaminhar_repetido' => $atendimento->permite_encaminhar_repetido ?? false, 'permite_prescricao_repetida' => $atendimento->permite_prescricao_repetida ?? false, 'prescricao_limite_dias' => $atendimento->prescricao_limite_dias ?? null, ]; } private static function getModelSigilo() { return [ 'sigilos' => self::getSigilosParametrizados(), ]; } private static function getSigilosParametrizados() { return ParametrizacaoSigilo::get(['id', 'ocupacao_id', 'infraestrutura_id', 'sigilo_tipo_id']) ->map(function ($parametrizacao) { $ocupacao = $parametrizacao->ocupacao() ->setEagerLoads([]) ->first(['id', 'codigo', 'nome']); $infraestrutura = $parametrizacao->infraestrutura() ->setEagerLoads([]) ->first(['id', 'nome', 'principal', 'unidade_id']); $unidade = $infraestrutura ? $infraestrutura->unidade() ->setEagerLoads([]) ->first(['nome_fantasia']) : null; $sigiloTipo = $parametrizacao->sigiloTipo() ->setEagerLoads([]) ->first(['id', 'nome']); return [ 'ocupacao' => [ 'id' => $ocupacao->id, 'codigo' => $ocupacao->codigo, 'nome' => $ocupacao->nome, ], 'unidade_nome_fantasia' => $unidade->nome_fantasia ?? null, 'infraestrutura_id' => $infraestrutura->id ?? null, 'infraestrutura_nome' => $infraestrutura->nome ?? null, 'sigilo_tipo_id' => $sigiloTipo->id, 'sigilo_tipo_nome' => $sigiloTipo->nome, 'infraestruturas' => $parametrizacao->infraestruturas ->map(fn ($parametrizacao) => [ 'id' => $parametrizacao->infraestrutura_id, 'nome' => $parametrizacao->infraestrutura->nome, 'unidade_nome_fantasia' => $parametrizacao->infraestrutura->unidade->nome_fantasia, ]), 'ocupacoes' => $parametrizacao->ocupacoes ->map(fn ($parametrizacao) => [ 'id' => $parametrizacao->ocupacao_id, 'codigo' => $parametrizacao->ocupacao->codigo, 'nome' => $parametrizacao->ocupacao->nome, ]), 'deleted' => false, ]; }); } public static function store() { self::validate(); DB::transaction(function () { self::saveInfraestrutura(); self::saveAgendamento(); self::saveIntegracaoAplicativo(); self::saveAtendimento(); self::saveSigilo(); }); } private static function saveInfraestrutura() { $infraestruturas = collect(request()->infraestrutura['infraestruturas']); ParametrizacaoInfraestrutura::whereIn('infraestrutura_id', $infraestruturas->where('deleted', true)->pluck('id') )->delete(); $infraestruturas->where('deleted', false)->each(function ($parametrizacaoData) { $parametrizacao = ParametrizacaoInfraestrutura::updateOrCreate( ['infraestrutura_id' => $parametrizacaoData['id']], [ 'envia_sms' => $parametrizacaoData['envia_sms'], 'fatura_procedimento_raas' => $parametrizacaoData['fatura_procedimento_raas'], ] ); self::saveInfraestruturaOcupacoes($parametrizacao, $parametrizacaoData); self::saveInfraestruturaEspecialidades($parametrizacao, $parametrizacaoData); self::saveInfraestruturaAssinaturas($parametrizacao, $parametrizacaoData); self::saveInfraestruturaInfraestruturasAgendadoras($parametrizacao, $parametrizacaoData); self::saveInfraestruturaSms($parametrizacao, $parametrizacaoData); $parametrizacao->servicos()->sync($parametrizacaoData['servicos']); }); } private static function saveInfraestruturaOcupacoes($parametrizacao, $parametrizacaoData) { $ocupacoes = collect($parametrizacaoData['ocupacoes']); $ocupacaoIds = ParametrizacaoInfraestruturaOcupacao::where('parametrizacao_infraestrutura_id', $parametrizacao->id) ->whereNotIn('ocupacao_id', $ocupacoes->pluck('id')) ->pluck('id'); DB::table('ambulatorio_parametrizacao_infraestrutura_ocupacao_ficha_atb') ->whereIn('parametrizacao_infraestrutura_ocupacao_id', $ocupacaoIds) ->delete(); ParametrizacaoInfraestruturaOcupacao::where('parametrizacao_infraestrutura_id', $parametrizacao->id) ->whereNotIn('ocupacao_id', $ocupacoes->pluck('id')) ->delete(); $ocupacoes->each(function ($data) use ($parametrizacao) { $ocupacao = $parametrizacao->ocupacoes()->updateOrCreate( ['ocupacao_id' => $data['id']], $data ); $ocupacao->fichasAtb()->sync($data['atencao_basica_funcionalidades']); }); } private static function saveInfraestruturaEspecialidades($parametrizacao, $parametrizacaoData) { $especialidades = collect($parametrizacaoData['especialidades']); ParametrizacaoInfraestruturaEspecialidade::where('parametrizacao_infraestrutura_id', $parametrizacao->id) ->whereNotIn('especialidade_id', $especialidades->pluck('id')) ->delete(); $especialidades->each(function ($data) use ($parametrizacao) { $parametrizacaoEspecialidade = $parametrizacao->especialidades()->updateOrCreate( ['especialidade_id' => $data['id']], $data ); $procedimentos = collect($data['procedimentos']); ParametrizacaoInfraestruturaEspecialidadeProcedimento::where('parametrizacao_infraestrutura_especialidade_id', $parametrizacaoEspecialidade->id) ->whereNotIn('codigo', $procedimentos->pluck('codigo')) ->delete(); $procedimentos->each(function ($data) use ($parametrizacaoEspecialidade) { $parametrizacaoEspecialidade->procedimentos()->updateOrCreate( ['codigo' => $data['codigo']], ); }); }); } private static function saveInfraestruturaAssinaturas($parametrizacao, $parametrizacaoData) { $assinaturas = collect($parametrizacaoData['assinaturas']); $parametrizacao->assinaturas()->delete(); foreach ($assinaturas as $id) { $parametrizacao->assinaturas()->updateOrCreate( ['parametrizacao_assinatura_eletronica_id' => $id], ['parametrizacao_infraestrutura_id' => $parametrizacao->id] ); } } private static function saveInfraestruturaInfraestruturasAgendadoras($parametrizacao, $parametrizacaoData) { $infraestruturasAgendadoras = collect($parametrizacaoData['infraestruturas_agendadoras']); ParametrizacaoInfraestruturaAgendadora::where('parametrizacao_infraestrutura_id', $parametrizacao->id) ->whereNotIn('infraestrutura_id', $infraestruturasAgendadoras->pluck('id')) ->delete(); $infraestruturasAgendadoras->each(function ($data) use ($parametrizacao) { $parametrizacao->infraestruturasAgendadoras()->updateOrCreate( ['infraestrutura_id' => $data['id']], $data ); }); } private static function saveInfraestruturaSms($parametrizacao, $parametrizacaoData) { if (is_null($parametrizacaoData['sms']['dia_antecedencia'])) { if (!is_null($parametrizacao->sms)) { $parametrizacao->sms->delete(); } } else { $smsData = [ 'dia_antecedencia' => $parametrizacaoData['sms']['dia_antecedencia'], 'envio_de' => is_null($parametrizacaoData['sms']['envio_de']) ? null : Carbon::createFromFormat('d/m/Y', $parametrizacaoData['sms']['envio_de']) ->format('Y-m-d'), 'envio_ate' => is_null($parametrizacaoData['sms']['envio_ate']) ? null : Carbon::createFromFormat('d/m/Y', $parametrizacaoData['sms']['envio_ate']) ->format('Y-m-d'), ]; $sms = $parametrizacao->sms; if (is_null($sms)) { $sms = $parametrizacao->sms()->create($smsData); } else { $sms->update($smsData); } $sms->especialidades()->sync($parametrizacaoData['sms']['especialidades']); } } private static function saveAgendamento() { $agendamento = ParametrizacaoAgendamento::first(); if (is_null($agendamento)) { ParametrizacaoAgendamento::create(request()->agendamento); } else { $agendamento->update(request()->agendamento); } } private static function saveIntegracaoAplicativo() { $integracao = ParametrizacaoIntegracaoAplicativo::first(); if (is_null($integracao)) { ParametrizacaoIntegracaoAplicativo::create(request()->integracao_aplicativo); } else { $integracao->update(request()->integracao_aplicativo); } } private static function saveAtendimento() { $atendimento = ParametrizacaoAtendimento::first(); if (is_null($atendimento)) { ParametrizacaoAtendimento::create(request()->atendimento); } else { $atendimento->update(request()->atendimento); } } private static function saveSigilo() { $sigilos = collect(request()->sigilo['sigilos']); foreach ($sigilos as $sigilo) { if ($sigilo['deleted'] === true) { ParametrizacaoSigilo::where('ocupacao_id', $sigilo['ocupacao_id']) ->when($sigilo['infraestrutura_id'], fn ($q, $infraestruturaId) => $q->where('infraestrutura_id', $infraestruturaId)) ->delete(); } } $sigilos->where('deleted', false)->each(function ($parametrizacaoData) { $parametrizacao = ParametrizacaoSigilo::updateOrCreate( [ 'ocupacao_id' => $parametrizacaoData['ocupacao_id'], 'infraestrutura_id' => $parametrizacaoData['infraestrutura_id'], ], ['sigilo_tipo_id' => $parametrizacaoData['sigilo_tipo_id']] ); self::saveSigiloOcupacoes($parametrizacao, $parametrizacaoData); self::saveSigiloInfraestruturas($parametrizacao, $parametrizacaoData); }); } private static function saveSigiloOcupacoes($parametrizacao, $parametrizacaoData) { $ocupacoes = collect($parametrizacaoData['ocupacoes']); ParametrizacaoSigiloOcupacao::where('parametrizacao_sigilo_id', $parametrizacao->id) ->whereNotIn('ocupacao_id', $ocupacoes->pluck('id')) ->delete(); $ocupacoes->each(function ($data) use ($parametrizacao) { $parametrizacao->ocupacoes()->updateOrCreate(['ocupacao_id' => $data['id']]); }); } private static function saveSigiloInfraestruturas($parametrizacao, $parametrizacaoData) { $infraestruturas = collect($parametrizacaoData['infraestruturas']); ParametrizacaoSigiloInfraestrutura::where('parametrizacao_sigilo_id', $parametrizacao->id) ->whereNotIn('infraestrutura_id', $infraestruturas->pluck('id')) ->delete(); $infraestruturas->each(function ($data) use ($parametrizacao) { $parametrizacao->infraestruturas()->updateOrCreate(['infraestrutura_id' => $data['id']]); }); } private static function validate() { return request()->validate(array_merge( self::getInfraestruturaValidations(), self::getAgendamentoValidations(), self::getIntegracaoAplicativoValidations(), self::getAtendimentoValidations(), self::getSigiloValidations(), )); } private static function getInfraestruturaValidations() { return [ 'infraestrutura.infraestruturas' => [ 'present', 'array', ], 'infraestrutura.infraestruturas.*.id' => [ 'required', 'integer', Rule::exists(Infraestrutura::class, 'id'), ], 'infraestrutura.infraestruturas.*.deleted' => [ 'required', 'boolean', ], 'infraestrutura.infraestruturas.*.ocupacoes' => [ 'present', 'array', ], 'infraestrutura.infraestruturas.*.ocupacoes.*.id' => [ 'required', 'integer', Rule::exists(Ocupacao::class, 'id'), ], 'infraestrutura.infraestruturas.*.ocupacoes.*.pos_consulta' => [ 'required', 'boolean', ], 'infraestrutura.infraestruturas.*.ocupacoes.*.permite_atendimento_enfermagem' => [ 'required', 'boolean', ], 'infraestrutura.infraestruturas.*.ocupacoes.*.atencao_basica_funcionalidades' => [ 'present', 'array', ], 'infraestrutura.infraestruturas.*.ocupacoes.*.atencao_basica_funcionalidades.*' => [ 'nullable', 'integer', Rule::exists(Funcionalidade::class, 'id'), ], 'infraestrutura.infraestruturas.*.especialidades' => [ 'present', 'array', ], 'infraestrutura.infraestruturas.*.especialidades.*.id' => [ 'required', 'integer', Rule::exists(Especialidade::class, 'id'), ], 'infraestrutura.infraestruturas.*.especialidades.*.avisa_falta_quantidade' => [ 'nullable', 'integer', 'max:999' ], 'infraestrutura.infraestruturas.*.especialidades.*.avisa_falta_dias' => [ 'nullable', 'required_with:infraestrutura.infraestruturas.*.especialidades.*.avisa_falta_quantidade', 'integer', 'max:999' ], 'infraestrutura.infraestruturas.*.especialidades.*.quantidade_dias_retorno' => [ 'nullable', 'integer', 'max:999' ], 'infraestrutura.infraestruturas.*.especialidades.*.demanda_espontanea_observa_vaga_atendimento' => [ 'nullable', 'boolean', ], 'infraestrutura.infraestruturas.*.especialidades.*.procedimentos' => [ 'present', 'array', ], 'infraestrutura.infraestruturas.*.especialidades.*.procedimentos.*.codigo' => [ 'required', 'digits:10', ], 'infraestrutura.infraestruturas.*.infraestruturas_agendadoras' => [ 'present', 'array', ], 'infraestrutura.infraestruturas.*.infraestruturas_agendadoras.*.id' => [ 'required', 'integer', Rule::exists(Infraestrutura::class, 'id'), ], 'infraestrutura.infraestruturas.*.envia_sms' => [ 'required', 'boolean', ], 'infraestrutura.infraestruturas.*.fatura_procedimento_raas' => [ 'required', 'boolean', ], 'infraestrutura.infraestruturas.*.sms.dia_antecedencia' => [ 'present', 'nullable', 'integer', 'max:365', ], 'infraestrutura.infraestruturas.*.sms.envio_de' => [ 'nullable', 'required_with:infraestrutura.infraestruturas.*.sms.dia_antecedencia', 'date_format:d/m/Y', ], 'infraestrutura.infraestruturas.*.sms.envio_ate' => [ 'nullable', 'required_with:infraestrutura.infraestruturas.*.sms.dia_antecedencia', 'date_format:d/m/Y', ], 'infraestrutura.infraestruturas.*.sms.especialidades' => [ 'present', 'array', ], 'infraestrutura.infraestruturas.*.sms.especialidades.*' => [ 'required', 'integer', Rule::exists(Especialidade::class, 'id'), ], 'infraestrutura.infraestruturas.*.servicos' => [ 'present', 'array', ], 'infraestrutura.infraestruturas.*.servicos.*' => [ 'required', 'integer', Rule::exists(Servico::class, 'id'), ] ]; } private static function getAgendamentoValidations() { return [ 'agendamento.avisa_cns_provisorio' => [ 'required', 'boolean', ], 'agendamento.avisa_paciente_outra_unidade' => [ 'required', 'boolean', ], 'agendamento.bloqueia_paciente_temporario' => [ 'required', 'boolean', ], 'agendamento.obriga_motivo_agendamento_excedente' => [ 'required', 'boolean', ], 'agendamento.permite_agendar_mesma_especialidade' => [ 'required', 'boolean', ], 'agendamento.gerenciar_tratamento' => [ 'required', 'boolean', ], ]; } private static function getIntegracaoAplicativoValidations() { return [ 'integracao_aplicativo.habilita_integracao_conectasus_cidadao' => [ 'required', 'boolean', ], 'integracao_aplicativo.habilita_integracao_aplicativo_feridas' => [ 'required', 'boolean', ], ]; } private static function getAtendimentoValidations() { return [ 'atendimento.exibe_mensagem_atendimento_retroativo_nao_finalizado' => [ 'required', 'boolean', ], 'atendimento.prescricao_limite_dias' => [ 'nullable', 'integer', 'max:730', ] ]; } private static function getSigiloValidations() { return [ 'sigilo.sigilos' => [ 'present', 'array', ], 'sigilo.sigilos.*.ocupacao_id' => [ 'required', 'integer', Rule::exists(Ocupacao::class, 'id'), ], 'sigilo.sigilos.*.infraestrutura_id' => [ 'nullable', 'integer', Rule::exists(Infraestrutura::class, 'id'), ], 'sigilo.sigilos.*.deleted' => [ 'required', 'boolean', ], 'sigilo.sigilos.*.infraestruturas' => [ 'present', 'array', ], 'sigilo.sigilos.*.infraestruturas.*.id' => [ 'required', 'integer', Rule::exists(Infraestrutura::class, 'id'), ], 'sigilo.sigilos.*.ocupacoes' => [ 'present', 'array', ], 'sigilo.sigilos.*.ocupacoes.*.id' => [ 'required', 'integer', Rule::exists(Ocupacao::class, 'id'), ], ]; } public static function getQuantidadeDiasRetorno($infraestruturaId, $especialidadeId) { $parametrizacaoInfraestrutura = ParametrizacaoInfraestrutura::where('infraestrutura_id', $infraestruturaId) ->first(); if (!is_null($parametrizacaoInfraestrutura)) { $parametrizacaoEspecialidade = $parametrizacaoInfraestrutura->especialidades() ->where('especialidade_id', $especialidadeId) ->first(); if (!is_null($parametrizacaoEspecialidade)) { return $parametrizacaoEspecialidade->quantidade_dias_retorno ?? 0; } } return 0; } }