init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,230 @@
<?php
namespace App\Services\Ambulatorio\AtendimentoEnfermagem;
use App\Enums\Ambulatorio\OutroProcedimento;
use App\Enums\Ambulatorio\TesteRapido as AmbulatorioTesteRapido;
use App\Enums\AtencaoBasica\AtendimentoIndividual\TipoAtendimento;
use App\Enums\AtencaoBasica\ProcedimentoPequenaCirurgia;
use App\Enums\AtencaoBasica\TesteRapido as AtencaoBasicaTesteRapido;
use App\Enums\Sigtap\Procedimento;
use App\Models\Administracao\Funcionalidade;
use App\Models\Ambulatorio\ParametrizacaoInfraestruturaOcupacao;
use App\Services\AtencaoBasica\Procedimento\ProcedimentoService;
use App\Services\Service;
class PreAtendimentoAtencaoBasicaFichaService extends Service
{
public static function store($preAtendimento)
{
if (is_null($preAtendimento->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;
}
}