This commit is contained in:
@@ -0,0 +1,229 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Ambulatorio\AtendimentoEnfermagem;
|
||||
|
||||
use App\Enums\Ambulatorio\OutroProcedimento;
|
||||
use App\Enums\Ambulatorio\TesteRapido as AmbulatorioTesteRapido;
|
||||
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 PosConsultaAtencaoBasicaFichaService extends Service
|
||||
{
|
||||
public static function store($posConsulta)
|
||||
{
|
||||
if (is_null($posConsulta->equipe_id)) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
self::storeProcedimento($posConsulta);
|
||||
}
|
||||
|
||||
public static function storeProcedimento($posConsulta)
|
||||
{
|
||||
if (!self::criaFicha($posConsulta, 'procedimento')) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$procedimentosParaIgnorar = collect();
|
||||
$hasProcedimentoColetaMaterialExameLaboratoriao = false;
|
||||
|
||||
$procedimentosParaIgnorar->push(Procedimento::ESCUTA_INICIAL_ORIENTACAO_ACOLHIMENTO_A_DEMANDA_ESPONT_NEA);
|
||||
|
||||
$getPequenasCirurgias = function () use ($posConsulta, $procedimentosParaIgnorar) {
|
||||
|
||||
$pequenasCirurgias = collect();
|
||||
|
||||
if ($posConsulta->orientacao_individual_em_saude) {
|
||||
|
||||
$pequenasCirurgias->push(ProcedimentoPequenaCirurgia::ORIENTACAO_INDIVIDUAL_EM_SAUDE);
|
||||
}
|
||||
|
||||
$outrosProcedimentos = $posConsulta->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 ($posConsulta, $procedimentosParaIgnorar) {
|
||||
|
||||
$testesRapidos = collect();
|
||||
$testesRapidosPosConsulta = $posConsulta->testesRapidos()->get(['id', 'codigo']);
|
||||
|
||||
if ($procedimento = $testesRapidosPosConsulta->where('id', AmbulatorioTesteRapido::GRAVIDEZ)->first()) {
|
||||
|
||||
$procedimentosParaIgnorar->push($procedimento->codigo);
|
||||
$testesRapidos->push(AtencaoBasicaTesteRapido::GRAVIDEZ);
|
||||
}
|
||||
|
||||
if ($procedimento = $testesRapidosPosConsulta->where('id', AmbulatorioTesteRapido::DETECCAO_DE_HEPATITE_C)->first()) {
|
||||
|
||||
$procedimentosParaIgnorar->push($procedimento->codigo);
|
||||
$testesRapidos->push(AtencaoBasicaTesteRapido::HEPATITE_C);
|
||||
}
|
||||
|
||||
if ($procedimento = $testesRapidosPosConsulta->where('id', AmbulatorioTesteRapido::DETECCAO_DE_INFECCAO_PELO_HIV)->first()) {
|
||||
|
||||
$procedimentosParaIgnorar->push($procedimento->codigo);
|
||||
$testesRapidos->push(AtencaoBasicaTesteRapido::HIV);
|
||||
}
|
||||
|
||||
if ($procedimento = $testesRapidosPosConsulta->where('id', AmbulatorioTesteRapido::SIFILIS)->first()) {
|
||||
|
||||
$procedimentosParaIgnorar->push($procedimento->codigo);
|
||||
$testesRapidos->push(AtencaoBasicaTesteRapido::SIFILIS);
|
||||
}
|
||||
|
||||
if ($procedimento = $testesRapidosPosConsulta->where('id', AmbulatorioTesteRapido::DETECCAO_DE_INFECCAO_PELO_HBV)->first()) {
|
||||
|
||||
$procedimentosParaIgnorar->push($procedimento->codigo);
|
||||
$testesRapidos->push(AtencaoBasicaTesteRapido::HEPATITE_B);
|
||||
}
|
||||
|
||||
if ($procedimento = $testesRapidosPosConsulta->where('id', AmbulatorioTesteRapido::PROTEINURIA)->first()) {
|
||||
|
||||
$procedimentosParaIgnorar->push($procedimento->codigo);
|
||||
$testesRapidos->push(AtencaoBasicaTesteRapido::DOSAGEM_PROTEINURIA);
|
||||
}
|
||||
|
||||
if ($procedimento = $testesRapidosPosConsulta->where('id', AmbulatorioTesteRapido::TESTE_DO_OLHINHO_TRV)->first()) {
|
||||
|
||||
$procedimentosParaIgnorar->push($procedimento->codigo);
|
||||
$testesRapidos->push(AtencaoBasicaTesteRapido::TESTE_OLHINHO_TRV);
|
||||
}
|
||||
|
||||
return $testesRapidos;
|
||||
};
|
||||
|
||||
$getAdministracoesMedicamento = function () use ($posConsulta, $procedimentosParaIgnorar) {
|
||||
|
||||
$administracoesMedicamentos = collect();
|
||||
|
||||
$posConsulta->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 ($posConsulta, $procedimentosParaIgnorar, &$hasProcedimentoColetaMaterialExameLaboratoriao) {
|
||||
|
||||
$procedimentos = collect();
|
||||
|
||||
$posConsulta->procedimentos()
|
||||
->get()
|
||||
->reject(fn ($p) => $procedimentosParaIgnorar->contains($p->procedimento->codigo))
|
||||
->each(function ($atendimentoProcedimento) use ($posConsulta, $procedimentos, &$hasProcedimentoColetaMaterialExameLaboratoriao) {
|
||||
|
||||
if ($atendimentoProcedimento->procedimento->codigo === Procedimento::COLETA_DE_MATERIAL_PARA_EXAME_LABORATORIAL) {
|
||||
|
||||
$hasProcedimentoColetaMaterialExameLaboratoriao = true;
|
||||
}
|
||||
|
||||
for ($i = 1; $i <= $atendimentoProcedimento->quantidade; $i++) {
|
||||
|
||||
$procedimentos->push([
|
||||
'pos_consulta_id' => $posConsulta->id,
|
||||
'procedimento_id' => $atendimentoProcedimento->procedimento->id
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
return $procedimentos;
|
||||
};
|
||||
|
||||
$pequenasCirurgias = $getPequenasCirurgias();
|
||||
$testesRapidos = $getTestesRapidos();
|
||||
$administracoesMedicamentos = $getAdministracoesMedicamento();
|
||||
$procedimentos = $getProcedimentos();
|
||||
|
||||
ProcedimentoService::saveFromAmbulatorioPosConsulta([
|
||||
'cadastro' => [
|
||||
'pos_consulta_id' => $posConsulta->id,
|
||||
'data_usuario_responsavel' => $posConsulta->created_at->format('Y-m-d'),
|
||||
'usuario_id' => $posConsulta->createdLotacao->usuario_id,
|
||||
'equipe_id' => $posConsulta->equipe_id,
|
||||
'ocupacao_id' => $posConsulta->createdLotacao->ocupacao_id,
|
||||
],
|
||||
'atendimentos' => [
|
||||
[
|
||||
'pos_consulta_id' => $posConsulta->id,
|
||||
'paciente_id' => $posConsulta->atendimento->paciente->id,
|
||||
'turno_id' => $posConsulta->turno_id,
|
||||
'local_atendimento_id' => $posConsulta->atencao_basica_local_atendimento_id,
|
||||
'microarea_id' => is_null($posConsulta->atendimento->paciente->cidadao->domicilio_id)
|
||||
? null
|
||||
: ProcedimentoService::getCadastroDomiciliar([
|
||||
'domicilio_id' => $posConsulta->atendimento->paciente->cidadao->domicilio_id,
|
||||
'profissional_equipe_id' => $posConsulta->equipe_id,
|
||||
])['microarea_id'] ?? null,
|
||||
'escuta_inicial' => false,
|
||||
'peso' => $posConsulta->antropometria->peso ?? null,
|
||||
'altura' => $posConsulta->antropometria->altura ?? null,
|
||||
'temperatura' => $posConsulta->sinalVital->temperatura ?? null,
|
||||
'afericao_pa' => $posConsulta->sinalVital->pressao_arterial ?? null,
|
||||
'frequencia_respiratoria' => $posConsulta->sinalVital->frequencia_respiratoria ?? null,
|
||||
'frequencia_cardiaca' => $posConsulta->sinalVital->frequencia_cardiaca ?? null,
|
||||
'saturacao_o2' => $posConsulta->sinalVital->saturacao_o2 ?? null,
|
||||
'glicemia' => $posConsulta->glicemiaCapilar->valor ?? null,
|
||||
'momento_coleta_id' => $posConsulta->glicemiaCapilar->momento_coleta_id ?? null,
|
||||
'perimetro_cefalico' => $posConsulta->antropometria->perimetro_cefalico ?? null,
|
||||
'circunferencia_abdominal' => $posConsulta->antropometria->circunferencia_abdominal ?? null,
|
||||
'perimetro_panturrilha' => $posConsulta->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($posConsulta, $funcionalidadeIdentificador)
|
||||
{
|
||||
return ParametrizacaoInfraestruturaOcupacao::whereHas('parametrizacaoInfraestrutura', fn ($q) => $q
|
||||
->where('infraestrutura_id', $posConsulta->createdLotacao->infraestrutura_id)
|
||||
)
|
||||
->where('ocupacao_id', $posConsulta->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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user