equipe_id)) { return; } self::storeProcedimento($preAtendimento); } public static function storeProcedimento($preAtendimento) { if (!self::criaFicha($preAtendimento, 'procedimento')) { return; } $procedimentosParaIgnorar = collect(); $hasProcedimentoColetaMaterialExameLaboratoriao = false; $procedimentosParaIgnorar->push(Procedimento::ESCUTA_INICIAL_ORIENTACAO_ACOLHIMENTO_A_DEMANDA_ESPONT_NEA); $getPequenasCirurgias = function () use ($preAtendimento, $procedimentosParaIgnorar) { $pequenasCirurgias = collect(); if ($preAtendimento->orientacao_individual_em_saude) { $pequenasCirurgias->push(ProcedimentoPequenaCirurgia::ORIENTACAO_INDIVIDUAL_EM_SAUDE); } $outrosProcedimentos = $preAtendimento->outrosProcedimentos()->get(['id', 'codigo']); if ($procedimento = $outrosProcedimentos->where('id', OutroProcedimento::RETIRADA_DE_PONTOS)->first()) { $procedimentosParaIgnorar->push($procedimento->codigo); $pequenasCirurgias->push(ProcedimentoPequenaCirurgia::RETIRADA_DE_PONTOS_DE_CIRURGIAS); } if ($procedimento = $outrosProcedimentos->where('id', OutroProcedimento::CURATIVO_SIMPLES)->first()) { $procedimentosParaIgnorar->push($procedimento->codigo); $pequenasCirurgias->push(ProcedimentoPequenaCirurgia::CURATIVO_SIMPLES); } if ($procedimento = $outrosProcedimentos->where('id', OutroProcedimento::CURATIVO_ESPECIAL)->first()) { $procedimentosParaIgnorar->push($procedimento->codigo); $pequenasCirurgias->push(ProcedimentoPequenaCirurgia::CURATIVO_ESPECIAL); } return $pequenasCirurgias; }; $getTestesRapidos = function () use ($preAtendimento, $procedimentosParaIgnorar) { $testesRapidos = collect(); $testesRapidosPreAtendimento = $preAtendimento->testesRapidos()->get(['id', 'codigo']); if ($procedimento = $testesRapidosPreAtendimento->where('id', AmbulatorioTesteRapido::GRAVIDEZ)->first()) { $procedimentosParaIgnorar->push($procedimento->codigo); $testesRapidos->push(AtencaoBasicaTesteRapido::GRAVIDEZ); } if ($procedimento = $testesRapidosPreAtendimento->where('id', AmbulatorioTesteRapido::DETECCAO_DE_HEPATITE_C)->first()) { $procedimentosParaIgnorar->push($procedimento->codigo); $testesRapidos->push(AtencaoBasicaTesteRapido::HEPATITE_C); } if ($procedimento = $testesRapidosPreAtendimento->where('id', AmbulatorioTesteRapido::DETECCAO_DE_INFECCAO_PELO_HIV)->first()) { $procedimentosParaIgnorar->push($procedimento->codigo); $testesRapidos->push(AtencaoBasicaTesteRapido::HIV); } if ($procedimento = $testesRapidosPreAtendimento->where('id', AmbulatorioTesteRapido::SIFILIS)->first()) { $procedimentosParaIgnorar->push($procedimento->codigo); $testesRapidos->push(AtencaoBasicaTesteRapido::SIFILIS); } if ($procedimento = $testesRapidosPreAtendimento->where('id', AmbulatorioTesteRapido::DETECCAO_DE_INFECCAO_PELO_HBV)->first()) { $procedimentosParaIgnorar->push($procedimento->codigo); $testesRapidos->push(AtencaoBasicaTesteRapido::HEPATITE_B); } if ($procedimento = $testesRapidosPreAtendimento->where('id', AmbulatorioTesteRapido::PROTEINURIA)->first()) { $procedimentosParaIgnorar->push($procedimento->codigo); $testesRapidos->push(AtencaoBasicaTesteRapido::DOSAGEM_PROTEINURIA); } if ($procedimento = $testesRapidosPreAtendimento->where('id', AmbulatorioTesteRapido::TESTE_DO_OLHINHO_TRV)->first()) { $procedimentosParaIgnorar->push($procedimento->codigo); $testesRapidos->push(AtencaoBasicaTesteRapido::TESTE_OLHINHO_TRV); } return $testesRapidos; }; $getAdministracoesMedicamento = function () use ($preAtendimento, $procedimentosParaIgnorar) { $administracoesMedicamentos = collect(); $preAtendimento->administracoesMedicamentos()->get(['id', 'codigo_procedimento']) ->each(function ($administracaoMedicamento) use ($administracoesMedicamentos, $procedimentosParaIgnorar) { $procedimentosParaIgnorar->push($administracaoMedicamento->codigo_procedimento); $administracoesMedicamentos->push($administracaoMedicamento->id); }); return $administracoesMedicamentos; }; $getProcedimentos = function () use ($preAtendimento, $procedimentosParaIgnorar, &$hasProcedimentoColetaMaterialExameLaboratoriao) { $procedimentos = collect(); $preAtendimento->procedimentos() ->get() ->reject(fn ($p) => $procedimentosParaIgnorar->contains($p->procedimento->codigo)) ->each(function ($atendimentoProcedimento) use ($preAtendimento, $procedimentos, &$hasProcedimentoColetaMaterialExameLaboratoriao) { if ($atendimentoProcedimento->procedimento->codigo === Procedimento::COLETA_DE_MATERIAL_PARA_EXAME_LABORATORIAL) { $hasProcedimentoColetaMaterialExameLaboratoriao = true; } for ($i = 1; $i <= $atendimentoProcedimento->quantidade; $i++) { $procedimentos->push([ 'pre_atendimento_id' => $preAtendimento->id, 'procedimento_id' => $atendimentoProcedimento->procedimento->id ]); } }); return $procedimentos; }; $pequenasCirurgias = $getPequenasCirurgias(); $testesRapidos = $getTestesRapidos(); $administracoesMedicamentos = $getAdministracoesMedicamento(); $procedimentos = $getProcedimentos(); ProcedimentoService::saveFromAmbulatorioPreAtendimento([ 'cadastro' => [ 'pre_atendimento_id' => $preAtendimento->id, 'data_usuario_responsavel' => $preAtendimento->created_at->format('Y-m-d'), 'usuario_id' => $preAtendimento->createdLotacao->usuario_id, 'equipe_id' => $preAtendimento->equipe_id, 'ocupacao_id' => $preAtendimento->createdLotacao->ocupacao_id, ], 'atendimentos' => [ [ 'pre_atendimento_id' => $preAtendimento->id, 'paciente_id' => $preAtendimento->atendimento->paciente->id, 'turno_id' => $preAtendimento->turno_id, 'local_atendimento_id' => $preAtendimento->atencao_basica_local_atendimento_id, 'microarea_id' => is_null($preAtendimento->atendimento->paciente->cidadao->domicilio_id) ? null : ProcedimentoService::getCadastroDomiciliar([ 'domicilio_id' => $preAtendimento->atendimento->paciente->cidadao->domicilio_id, 'profissional_equipe_id' => $preAtendimento->equipe_id, ])['microarea_id'] ?? null, 'escuta_inicial' => $preAtendimento->atendimento_tipo_id === TipoAtendimento::ESCUTA_INICIAL_ORIENTACAO, 'peso' => $preAtendimento->antropometria->peso ?? null, 'altura' => $preAtendimento->antropometria->altura ?? null, 'temperatura' => $preAtendimento->sinalVital->temperatura ?? null, 'afericao_pa' => $preAtendimento->sinalVital->pressao_arterial ?? null, 'frequencia_respiratoria' => $preAtendimento->sinalVital->frequencia_respiratoria ?? null, 'frequencia_cardiaca' => $preAtendimento->sinalVital->frequencia_cardiaca ?? null, 'saturacao_o2' => $preAtendimento->sinalVital->saturacao_o2 ?? null, 'glicemia' => $preAtendimento->glicemiaCapilar->valor ?? null, 'momento_coleta_id' => $preAtendimento->glicemiaCapilar->momento_coleta_id ?? null, 'perimetro_cefalico' => $preAtendimento->antropometria->perimetro_cefalico ?? null, 'circunferencia_abdominal' => $preAtendimento->antropometria->circunferencia_abdominal ?? null, 'perimetro_panturrilha' => $preAtendimento->antropometria->perimetro_panturrilha ?? null, 'exame_laboratorial' => $hasProcedimentoColetaMaterialExameLaboratoriao, 'teste_rapido' => $testesRapidos->all(), 'procedimento_pequena_cirurgia' => $pequenasCirurgias->all(), 'administracao_medicamento' => $administracoesMedicamentos->all(), 'procedimentos' => $procedimentos->all(), ], ], ]); } private static function criaFicha($preAtendimento, $funcionalidadeIdentificador) { return ParametrizacaoInfraestruturaOcupacao::whereHas('parametrizacaoInfraestrutura', fn ($q) => $q ->where('infraestrutura_id', $preAtendimento->createdLotacao->infraestrutura_id) ) ->where('ocupacao_id', $preAtendimento->createdLotacao->ocupacao_id) ->whereHas('fichasAtb', fn ($q) => $q ->where('funcionalidade_id', self::getAtencaoBasicaFuncionalidadeId($funcionalidadeIdentificador)) ) ->exists(); } private static function getAtencaoBasicaFuncionalidadeId($identificador) { return Funcionalidade::whereHas('modulo', fn ($q) => $q ->where('identificador', 'atencao-basica') ) ->where('identificador', $identificador) ->first('id')->id; } }