[ 'data_atual' => Carbon::now()->format('Y-m-d'), 'unidades' => [], 'infraestruturas' => [], 'usuarios' => [], ], 'model' => [], ]; } public static function create() { $atendimento = null; $dataAtendimento = Carbon::now()->format('Y-m-d'); return [ 'form' => self::getFormData($dataAtendimento, $atendimento), 'model' => self::getModelData($atendimento), ]; } public static function getAtendimentos() { $periodo = is_null(request()->periodo) ? null : [ 'start' => Carbon::createFromFormat('Y-m-d', request()->periodo['start'])->setTime(0, 0, 0), 'end' => Carbon::createFromFormat('Y-m-d', request()->periodo['end'])->setTime(23, 59, 59) ]; return [ 'atendimentos' => Procedimento::whereBetween('data_usuario_responsavel', $periodo) ->whereHas('equipe', function ($query) { $query ->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id)) ->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id)) ->when(request()->usuario_id, function ($query, $id) { $query->where('usuario_id', $id); }); }) ->get() ->map(function ($query) { return [ 'id' => $query->id, 'exportado' => $query->exportacao_id ?? null, 'data' => $query->data_usuario_responsavel, 'unidade' => $query->equipe->unidade->nome_fantasia ?? null, 'local_atendimento' => $query->equipe->infraestrutura->nome ?? null, 'profissional' => $query->usuario->cidadao->nome ?? null, 'data_exportacao' => $query->data_hora_exportacao ? (new Carbon($query->data_hora_exportacao))->format('d/m/Y') . ' às ' . (new Carbon($query->data_hora_exportacao))->format('H:i') : null, 'profissional_exportacao' => $query->usuarioExportacao->cidadao->nome ?? null, ]; }), ]; } public static function getAtendimentoResponsavel() { return Procedimento::where('data_usuario_responsavel', request()->data_usuario_responsavel) ->where('usuario_id', request()->usuario_id) ->where('ocupacao_id', request()->ocupacao_id) ->where('equipe_id', request()->equipe_id) ->when(request()->id, fn ($q, $id) => $q->where('id', '!=', $id)) ->whereHas('equipe', function ($query) { $query->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id)); }) ->whereHas('procedimentoAtendimentos', function ($query) { $query->havingRaw('count(*) < 99'); }) ->first(); } public static function getAtendimentoPaciente() { return Procedimento::where('data_usuario_responsavel', request()->data_usuario_responsavel) ->where('ocupacao_id', request()->ocupacao_id) ->where('equipe_id', request()->equipe_id) ->when(request()->id, fn ($q, $id) => $q->where('id', '!=', $id)) ->whereHas('equipe', function ($query) { $query ->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id)) ->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id)); }) ->whereHas('procedimentoAtendimentos', function ($query) { $query->where('paciente_id', request()->paciente_id); }) ->first(); } public static function loadUnidades() { $periodo = is_null(request()->periodo) ? null : [ 'start' => Carbon::createFromFormat('Y-m-d', request()->periodo['start'])->setTime(0, 0, 0), 'end' => Carbon::createFromFormat('Y-m-d', request()->periodo['end'])->setTime(23, 59, 59) ]; return DB::table('atencao_basica_procedimento') ->select([ 'cadastro_unidade.id AS id', DB::raw("CONCAT(TRIM(cadastro_unidade.cnes), ' - ', cadastro_unidade.nome_fantasia ) AS nome_fantasia"), ]) ->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_procedimento.equipe_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id') ->whereBetween('atencao_basica_procedimento.data_usuario_responsavel', $periodo) ->distinct() ->orderBy('cadastro_unidade.cnes') ->get(); } public static function loadLocaisAtendimento() { $periodo = is_null(request()->periodo) ? null : [ 'start' => Carbon::createFromFormat('Y-m-d', request()->periodo['start'])->setTime(0, 0, 0), 'end' => Carbon::createFromFormat('Y-m-d', request()->periodo['end'])->setTime(23, 59, 59) ]; return DB::table('atencao_basica_procedimento') ->select([ 'cadastro_infraestrutura.id AS id', DB::raw('IF(cadastro_infraestrutura.nome IS NULL, ' . 'cadastro_unidade.nome_fantasia, cadastro_infraestrutura.nome) as nome'), ]) ->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_procedimento.equipe_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id') ->whereBetween('atencao_basica_procedimento.data_usuario_responsavel', $periodo) ->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id)) ->distinct() ->orderBy('nome') ->get(); } public static function loadProfissionais() { $periodo = is_null(request()->periodo) ? null : [ 'start' => Carbon::createFromFormat('Y-m-d', request()->periodo['start'])->setTime(0, 0, 0), 'end' => Carbon::createFromFormat('Y-m-d', request()->periodo['end'])->setTime(23, 59, 59) ]; return DB::table('atencao_basica_procedimento') ->select([ 'cadastro_usuario.id AS id', 'cadastro_cidadao.nome as nome' ]) ->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_procedimento.equipe_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id') ->join('cadastro_usuario', 'cadastro_usuario.id', 'atencao_basica_procedimento.usuario_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id') ->whereBetween('atencao_basica_procedimento.data_usuario_responsavel', $periodo) ->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id)) ->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id)) ->distinct() ->orderBy('nome') ->get(); } public static function getUnidades() { return DB::table('atencao_basica_parametrizacao_equipe_usuario') ->select([ 'cadastro_unidade.id AS id', DB::raw("CONCAT(TRIM(cadastro_unidade.cnes), ' - ', cadastro_unidade.nome_fantasia ) AS nome_fantasia"), ]) ->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id') ->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true) ->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id)) ->distinct() ->orderBy('cadastro_unidade.cnes') ->get(); } public static function getInfraestruturas() { return DB::table('atencao_basica_parametrizacao_equipe_usuario') ->select([ 'cadastro_infraestrutura.id AS id', DB::raw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS nome'), ]) ->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id') ->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id') ->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true) ->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id)) ->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id)) ->distinct() ->orderBy('nome') ->get(); } public static function getEquipes() { return DB::table('atencao_basica_parametrizacao_equipe_usuario') ->select([ 'atencao_basica_parametrizacao_equipe.id AS id', DB::raw(" CONCAT( CASE WHEN atencao_basica_parametrizacao_area.numero_ine IS NOT NULL THEN CONCAT('INE: ', atencao_basica_parametrizacao_area.numero_ine) ELSE '' END, CASE WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL AND atencao_basica_parametrizacao_area.numero_ine IS NOT NULL THEN ' - Área: ' WHEN atencao_basica_parametrizacao_area.descricao IS NOT NULL THEN 'Área: ' ELSE '' END, COALESCE(atencao_basica_parametrizacao_area.descricao, ''), CASE WHEN atencao_basica_parametrizacao_microarea.descricao IS NOT NULL AND (atencao_basica_parametrizacao_area.numero_ine IS NOT NULL OR atencao_basica_parametrizacao_area.descricao IS NOT NULL) THEN ' - Microárea: ' WHEN atencao_basica_parametrizacao_microarea.descricao IS NOT NULL THEN 'Microárea: ' ELSE '' END, COALESCE(atencao_basica_parametrizacao_microarea.descricao, '') ) AS descricao ") ]) ->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id') ->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id') ->leftJoin('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_area.id', 'atencao_basica_parametrizacao_equipe.area_id') ->leftJoin('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id') ->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true) ->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id)) ->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id)) ->get(); } public static function getOcupacoes() { $usuario = Usuario::findOrFail(request()->usuario_id); $permissao = OutrosPermissaoOcupacao::where('permissao_id', Permissao::PROCEDIMENTOS)->get(); $codigos = $permissao->pluck('ocupacao'); return $usuario->lotacoes ->filter(function ($lotacao) use ($codigos) { return $lotacao->infraestrutura->id == request()->infraestrutura_id && $codigos->contains($lotacao->ocupacao->codigo); }) ->pluck('ocupacao'); } public static function getCadastroIndividual() { return CadastroIndividual::where('paciente_id', request()->paciente_id)->select('id')->first(); } private static function getFormData() { return [ 'data_atual' => Carbon::now()->format('d/m/Y'), 'termos_invalidos' => TermoInvalido::all()->map(fn ($termo) => $termo->descricao), 'turnos' => Turno::orderBy('nome')->get(), 'local_atendimento' => LocalAtendimento::whereNotIn('id', [ EnumsLocalAtendimento::HOSPITAL, EnumsLocalAtendimento::UNIDADE_PRONTO_ATENDIMENTO, EnumsLocalAtendimento::CACON_UNACON, ]) ->orderBy('descricao') ->get(), 'procedimentos' => ModelSigtapProcedimento::whereIn('codigo', [ EnumsSigtapProcedimento::MEDICAO_PESO, EnumsSigtapProcedimento::MEDICAO_ALTURA, EnumsSigtapProcedimento::AFERICAO_TEMPERATURA, EnumsSigtapProcedimento::AFERICAO_PRESSAO_ARTERIAL, EnumsSigtapProcedimento::AVALIACAO_ANTROPOMETRICA, EnumsSigtapProcedimento::GLICEMIA_CAPILAR, EnumsSigtapProcedimento::COLETA_DE_MATERIAL_PARA_EXAME_LABORATORIAL, ]) ->where('competencia_id', function ($query) { $query->select('sigtap.competencia.id') ->from('sigtap.competencia') ->orderByDesc('sigtap.competencia.valor') ->limit(1); }) ->groupBy('codigo') ->get(), 'sigtap_competencias' => Competencia::orderByDesc('valor')->take(4)->get(), 'procedimento_pequena_cirurgia' => [], 'administracao_medicamento' => [], 'teste_rapido' => [], 'procedimento_usuario' => [], 'equipes' => [], 'ocupacoes' => [], 'momentos_coleta' => GlicemiaCapilarMomentoColeta::orderBy('id')->get(['id', 'nome']) ]; } public static function getProcedimentos() { $ocupacao = Ocupacao::findOrFail(request()->ocupacao_id); $paciente = Paciente::findOrFail(request()->paciente_id); $testesRapido = TesteRapido::orderBy('descricao')->get(); $procedimentosTesteRapido = collect(); foreach ($testesRapido as $testeRapido) { if ($testeRapido->codigo_procedimento) { $procedimento = self::getProcedimentoCompetencia($testeRapido->codigo_procedimento); $validation = new ProcedimentoValidationService($procedimento); $procedimentosTesteRapido->push([ 'id' => $testeRapido->id, 'descricao' => $testeRapido->descricao, 'competencia_id' => $procedimento->competencia_id, 'is_disabled' => !$validation->isOcupacaoValid($ocupacao) || !$validation->isSexoValid($paciente->cidadao->sexo) || !$validation->isIdadeValid($paciente->cidadao->idade['anos']) ]); } else { $procedimentosTesteRapido->push([ 'id' => $testeRapido->id, 'descricao' => $testeRapido->descricao, 'competencia_id' => null, 'is_disabled' => false ]); } } $viasAdministracao = ViaAdministracao::orderBy('descricao')->get(); $procedimentosVia = collect(); foreach ($viasAdministracao as $viaAdministracao) { $procedimento = self::getProcedimentoCompetencia($viaAdministracao->codigo_procedimento); $validation = new ProcedimentoValidationService($procedimento); $procedimentosVia->push([ 'id' => $viaAdministracao->id, 'descricao' => $viaAdministracao->descricao, 'competencia_id' => $procedimento->competencia_id, 'is_disabled' => !$validation->isOcupacaoValid($ocupacao) || !$validation->isSexoValid($paciente->cidadao->sexo) || !$validation->isIdadeValid($paciente->cidadao->idade['anos']) ]); } $pequenasCirurgia = PequenaCirurgia::orderBy('descricao')->get(); $procedimentosPequenasCirurgia = collect(); foreach ($pequenasCirurgia as $pequenaCirurgia) { if ($pequenaCirurgia->codigo_procedimento) { $procedimento = self::getProcedimentoCompetencia($pequenaCirurgia->codigo_procedimento); $validation = new ProcedimentoValidationService($procedimento); $procedimentosPequenasCirurgia->push([ 'id' => $pequenaCirurgia->id, 'descricao' => $pequenaCirurgia->descricao, 'competencia_id' => $procedimento->competencia_id, 'is_disabled' => !$validation->isOcupacaoValid($ocupacao) || !$validation->isSexoValid($paciente->cidadao->sexo) || !$validation->isIdadeValid($paciente->cidadao->idade['anos']) ]); } else { $procedimentosPequenasCirurgia->push([ 'id' => $pequenaCirurgia->id, 'descricao' => $pequenaCirurgia->descricao, 'competencia_id' => null, 'is_disabled' => false, ]); } } return [ 'teste_rapido' => $procedimentosTesteRapido, 'administracao_medicamento' => $procedimentosVia, 'procedimento_pequena_cirurgia' => $procedimentosPequenasCirurgia, ]; } public static function getProcedimentosUsuario() { $ocupacao = Ocupacao::findOrFail(request()->ocupacao_id); $sigtapProcedimentos = ModelSigtapProcedimento::whereIn('codigo', [ EnumsSigtapProcedimento::MEDICAO_PESO, EnumsSigtapProcedimento::MEDICAO_ALTURA, EnumsSigtapProcedimento::AFERICAO_TEMPERATURA, EnumsSigtapProcedimento::AFERICAO_PRESSAO_ARTERIAL, EnumsSigtapProcedimento::AVALIACAO_ANTROPOMETRICA, EnumsSigtapProcedimento::GLICEMIA_CAPILAR, EnumsSigtapProcedimento::COLETA_DE_MATERIAL_PARA_EXAME_LABORATORIAL, ]) ->groupBy('codigo') ->get(); $procedimentos = collect(); foreach ($sigtapProcedimentos as $sigtapProcedimento) { $procedimento = self::getProcedimentoCompetencia($sigtapProcedimento->codigo); $validation = new ProcedimentoValidationService($procedimento); $procedimentos->push([ 'id' => $sigtapProcedimento->id, 'descricao' => $sigtapProcedimento->nome, 'codigo' => $sigtapProcedimento->codigo, 'is_disabled' => !$validation->isOcupacaoValid($ocupacao) ]); } return $procedimentos; } private static function getProcedimentoCompetencia($codigo) { return ModelSigtapProcedimento::where( 'codigo', $codigo ) ->orderByDesc('competencia_id') ->firstOrFail(); } private static function getModelData($procedimento = null) { return [ 'id' => $procedimento->id ?? null, 'atendimento_domiciliar_id' => $procedimento->atendimento_domiciliar_id ?? null, 'exportado' => $procedimento->atendimentoDomiciliar->exportacao ?? null, 'cadastro' => [ 'usuario' => [ 'id' => $procedimento->usuario->id ?? null, 'cidadao_nome' => $procedimento->usuario->cidadao->nome ?? null, ], 'unidade_id' => $procedimento->equipe->unidade_id ?? null, 'infraestrutura_id' => $procedimento->equipe->infraestrutura_id ?? null, 'equipe_id' => $procedimento->equipe_id ?? null, 'ocupacao_id' => $procedimento->ocupacao_id ?? null, 'data_usuario_responsavel' => $procedimento->data_usuario_responsavel ?? Carbon::now()->format('Y-m-d'), ], 'atendimentos' => $procedimento ? ProcedimentoAtendimento::where('procedimento_id', $procedimento->id) ->get() ->map(function ($atendimento) { $ivcf = ProcedimentoAtendimentoIvcf::where('procedimento_atendimento_id', $atendimento->id)->first(); $atendimentoIvcf = [ 'deseja_preencher' => $ivcf ? true : false, 'estado_saude_geral' => $ivcf->estado_saude_geral ?? null, 'limitacao_compras' => $ivcf->limitacao_compras ?? null, 'limitacao_gestao_financeira' => $ivcf->limitacao_gestao_financeira ?? null, 'limitacao_tarefas_domesticas' => $ivcf->limitacao_tarefas_domesticas ?? null, 'banho_independencia' => $ivcf->banho_independencia ?? null, 'relato_esquecimento_por_terceiros' => $ivcf->relato_esquecimento_por_terceiros ?? null, 'esquecimento_piorando' => $ivcf->esquecimento_piorando ?? null, 'esquecimento_impacta_atividades' => $ivcf->esquecimento_impacta_atividades ?? null, 'humor_tristeza_desanimo' => $ivcf->humor_tristeza_desanimo ?? null, 'perda_interesse_atividades' => $ivcf->perda_interesse_atividades ?? null, 'limitacao_elevar_bracos' => $ivcf->limitacao_elevar_bracos ?? null, 'limitacao_motricidade_fina' => $ivcf->limitacao_motricidade_fina ?? null, 'perda_peso_nao_intencional' => $ivcf->perda_peso_nao_intencional ?? null, 'imc_abaixo_22' => $ivcf->imc_abaixo_22 ?? null, 'panturrilha_abaixo_31' => $ivcf->panturrilha_abaixo_31 ?? null, 'marcha_lenta_4m_maior_5s' => $ivcf->marcha_lenta_4m_maior_5s ?? null, 'dificuldade_caminhar_impacto_atividades' => $ivcf->dificuldade_caminhar_impacto_atividades ?? null, 'quedas_recorrentes' => $ivcf->quedas_recorrentes ?? null, 'incontinencia' => $ivcf->incontinencia ?? null, 'problema_visao_impacto_atividades' => $ivcf->problema_visao_impacto_atividades ?? null, 'problema_audicao_impacto_atividades' => $ivcf->problema_audicao_impacto_atividades ?? null, 'doencas_cronicas_multiplas' => $ivcf->doencas_cronicas_multiplas ?? null, 'polifarmacia_5_ou_mais_medicamentos' => $ivcf->polifarmacia_5_ou_mais_medicamentos ?? null, 'internacao_ultimos_6_meses' => $ivcf->internacao_ultimos_6_meses ?? null, ]; return [ 'id' => $atendimento ? $atendimento->id : null, 'nome' => isset($atendimento->paciente->cidadao->nome) ? $atendimento->paciente->cidadao->nome : null, 'nome_social' => isset($atendimento->paciente->cidadao->nome_social) ? $atendimento->paciente->cidadao->nome_social : null, 'prefere_nome_social' => isset($atendimento->paciente->cidadao) && $atendimento->paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL, 'prontuario' => $atendimento->paciente->prontuario ?? null, 'paciente_id' => $atendimento->paciente->id ?? null, 'paciente' => [ 'id' => $atendimento->paciente->id ?? null, 'prontuario' => $atendimento->paciente->prontuario ?? null, 'cidadao' => [ 'nome' => $atendimento->paciente->cidadao->nome ?? null, 'nome_social' => $atendimento->paciente->cidadao->nome_social ?? null, 'prefere_nome_social' => isset($atendimento->paciente->cidadao) && $atendimento->paciente->cidadao->preferencia_nome_id === PreferenciaNome::NOME_SOCIAL, 'domicilio_id' => $atendimento->paciente->cidadao->domicilio_id ?? null, 'cns' => isset($atendimento->paciente->cidadao->cns) ? MaskUtil::getCnsMasked($atendimento->paciente->cidadao->cns) : '', 'cpf' => isset($atendimento->paciente->cidadao->cpf) ? MaskUtil::getCpfMasked($atendimento->paciente->cidadao->cpf) : null, 'dataNascimento' => $atendimento->paciente->cidadao->data_nascimento ?? null, 'idade' => $atendimento->paciente->cidadao->idade ], ], 'cns' => isset($atendimento->paciente->cidadao->cns) ? MaskUtil::getCnsMasked($atendimento->paciente->cidadao->cns) : '', 'cpf' => isset($atendimento->paciente->cidadao->cpf) ? MaskUtil::getCpfMasked($atendimento->paciente->cidadao->cpf) : null, 'dataNascimento' => $atendimento->paciente->cidadao->data_nascimento ?? null, 'turno_id' => $atendimento ? $atendimento->turno_id : null, 'turno' => $atendimento ? $atendimento->turno->descricao : null, 'microarea' => $atendimento && $atendimento->microarea_id ? ($atendimento->microarea->descricao ? 'INE: ' . str_pad($atendimento->microarea->area->numero_ine, 10, '0', STR_PAD_LEFT) . ' - ÁREA: ' . $atendimento->microarea->area->descricao . ' - MICROÁREA: ' . $atendimento->microarea->descricao : 'INE: ' . str_pad($atendimento->microarea->area->numero_ine, 10, '0', STR_PAD_LEFT) . ' - ÁREA: ' . $atendimento->microarea->area->descricao) : null, 'local_atendimento_id' => $atendimento ? $atendimento->local_atendimento_id : null, 'local_atendimento' => $atendimento ? $atendimento->localAtendimento->descricao : null, 'microarea_id' => $atendimento ? $atendimento->microarea_id : null, 'tipo_atendimento_id' => $atendimento ? $atendimento->tipo_atendimento_id : null, 'perimetro_cefalico' => $atendimento ? $atendimento->perimetro_cefalico : null, 'glicemia' => $atendimento ? $atendimento->glicemia_capilar : null, 'momento_coleta_id' => $atendimento ? $atendimento->momento_coleta_id : null, 'saturacao_o2' => $atendimento ? $atendimento->saturacao_o2 : null, 'circunferencia_abdominal' => $atendimento ? $atendimento->circunferencia_abdominal : null, 'perimetro_panturrilha' => $atendimento ? $atendimento->perimetro_panturrilha : null, 'frequencia_cardiaca' => $atendimento ? $atendimento->frequencia_cardiaca : null, 'frequencia_respiratoria' => $atendimento ? $atendimento->frequencia_respiratoria : null, 'peso' => $atendimento ? $atendimento->peso : null, 'altura' => $atendimento ? $atendimento->altura : null, 'temperatura' => $atendimento ? $atendimento->temperatura : null, 'afericao_pa' => $atendimento ? $atendimento->afericao_pa : null, 'escuta_inicial' => $atendimento ? $atendimento->escuta_inicial : null, 'exame_laboratorial' => $atendimento ? $atendimento->exame_laboratorial : null, 'teste_rapido' => $atendimento ? $atendimento->testesRapidos->pluck('id') : [], 'procedimento_pequena_cirurgia' => $atendimento ? $atendimento->pequenasCirurgias->pluck('id') : [], 'administracao_medicamento' => $atendimento ? $atendimento->administracaoMedicamentos->pluck('id') : [], 'ivcf' => $atendimentoIvcf, 'procedimentos' => $atendimento ? ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $atendimento->id) ->get() ->map(function ($query) { return [ 'id' => $query->procedimento->id ?? null, 'codigo' => $query->procedimento->codigo ?? null, 'nome' => $query->procedimento->nome ?? null, ]; }) ->sortBy('nome') ->values() : [], ]; }) ->sortBy('id') ->values() : [], 'procedimento_consolidado' => [ 'afericao_pa' => $procedimento->afericao_pa ?? null, 'curativo' => $procedimento->curativo_simples ?? null, 'glicemia_capilar' => $procedimento->glicemia_capilar ?? null, 'peso' => $procedimento->medicao_peso ?? null, 'exame_laboratorial' => $procedimento->coleta_material_exame_laboratorial ?? null, 'temperatura' => $procedimento->afericao_temperatura ?? null, 'altura' => $procedimento->medicao_altura ?? null, ], ]; } public static function showAtendimento($id) { return Procedimento::findOrFail($id); } public static function edit($id) { $atendimento = self::showAtendimento($id); $dataAtendimento = $atendimento->data_usuario_responsavel; return [ 'form' => self::getFormData($dataAtendimento, $atendimento), 'model' => self::getModelData($atendimento), ]; } public static function show() { $atendimento = null; $dataAtendimento = Carbon::now()->format('Y-m-d'); return [ 'form' => self::getFormData($dataAtendimento, $atendimento), 'model' => self::getModelData($atendimento), ]; } public static function store() { self::saveStore(request()->all()); } public static function saveStore($params) { self::validate($params); $cadastro = $params['cadastro']; if ($params['id'] && is_numeric($params['id'])) { $procedimento = Procedimento::findOrFail($params['id']) ?? new Procedimento(); } else { $procedimento = self::getFichaProcedimento($cadastro) ?? new Procedimento(); } $procedimento->data_usuario_responsavel = $cadastro['data_usuario_responsavel']; $procedimento->usuario_id = $cadastro['usuario_id']; $procedimento->equipe_id = $cadastro['equipe_id']; $procedimento->ocupacao_id = $cadastro['ocupacao_id']; if(!is_null($procedimento->atendimento_domiciliar_id)) { $procedimento->atendimentoDomiciliar->data = $cadastro['data_usuario_responsavel']; $procedimento->atendimentoDomiciliar->usuario_id = $cadastro['usuario_id']; $procedimento->atendimentoDomiciliar->equipe_id = $cadastro['equipe_id']; $procedimento->atendimentoDomiciliar->ocupacao_id = $cadastro['ocupacao_id']; } $procedimento_consolidado = $params['procedimento_consolidado']; $procedimento->afericao_pa = $procedimento_consolidado['afericao_pa']; $procedimento->medicao_altura = $procedimento_consolidado['altura']; $procedimento->curativo_simples = $procedimento_consolidado['curativo']; $procedimento->coleta_material_exame_laboratorial = $procedimento_consolidado['exame_laboratorial']; $procedimento->glicemia_capilar = $procedimento_consolidado['glicemia_capilar']; $procedimento->medicao_peso = $procedimento_consolidado['peso']; $procedimento->afericao_temperatura = $procedimento_consolidado['temperatura']; $procedimento->save(); self::saveAtendimentos($params, $procedimento); } private static function saveProcedimentos($procedimentos, $procedimentoAtendimento) { AtendimentoIndividualProcedimento::where('atendimento_individual_id', $procedimentoAtendimento->atendimento_individual_id) ->delete(); ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $procedimentoAtendimento->id) ->delete(); foreach ($procedimentos as $procedimento) { $existe = ProcedimentoAtendimentoProcedimento::where('procedimento_id', $procedimento['id']) ->where('procedimento_atendimento_id', $procedimentoAtendimento->id) ->first(); if (!$existe) { $AtendimentoIndividualProcedimento = new ProcedimentoAtendimentoProcedimento(); $AtendimentoIndividualProcedimento->procedimento_id = $procedimento['id']; $AtendimentoIndividualProcedimento->procedimento_atendimento_id = $procedimentoAtendimento->id; $AtendimentoIndividualProcedimento->save(); } if ($procedimentoAtendimento->atendimento_individual_id) { $AtendimentoIndividualProcedimento = new AtendimentoIndividualProcedimento(); $AtendimentoIndividualProcedimento->procedimento_id = $procedimento['id']; $AtendimentoIndividualProcedimento->atendimento_individual_id = $procedimentoAtendimento->atendimento_individual_id; $AtendimentoIndividualProcedimento->save(); } if($procedimentoAtendimento->atendimento_domiciliar_id) { $procedimentoAtendimento->atendimentoDomiciliar->procedimentos()->each(function($procedimento) use ($procedimentos) { if(!in_array($procedimento->codigo, array_column($procedimentos, 'codigo'))) { $procedimento->delete(); } }); } } } private static function saveAtendimentos($params, $procedimento) { $ids = []; foreach ($params['atendimentos'] as $atendimento) { $procedimentoAtendimento = isset($atendimento['id']) && is_numeric($atendimento['id']) ? ProcedimentoAtendimento::findOrFail($atendimento['id']) : (self::getFichaAtendimento($procedimento, $atendimento) ?? new ProcedimentoAtendimento()); $procedimentoAtendimento->paciente_id = $atendimento['paciente_id']; $procedimentoAtendimento->procedimento_id = $procedimento->id; $procedimentoAtendimento->turno_id = $atendimento['turno_id']; $procedimentoAtendimento->local_atendimento_id = $atendimento['local_atendimento_id']; $procedimentoAtendimento->microarea_id = $atendimento['microarea_id']; $procedimentoAtendimento->latitude = $atendimento['latitude'] ?? null; $procedimentoAtendimento->longitude = $atendimento['longitude'] ?? null; if (!isset($params['origem'])) { $procedimentoAtendimento->escuta_inicial = $atendimento['escuta_inicial']; $procedimentoAtendimento->peso = $atendimento['peso']; $procedimentoAtendimento->altura = $atendimento['altura']; $procedimentoAtendimento->temperatura = $atendimento['temperatura']; $procedimentoAtendimento->afericao_pa = $atendimento['afericao_pa']; $procedimentoAtendimento->glicemia_capilar = $atendimento['glicemia']; $procedimentoAtendimento->perimetro_cefalico = $atendimento['perimetro_cefalico']; $procedimentoAtendimento->frequencia_respiratoria = $atendimento['frequencia_respiratoria']; $procedimentoAtendimento->frequencia_cardiaca = $atendimento['frequencia_cardiaca']; $procedimentoAtendimento->saturacao_o2 = $atendimento['saturacao_o2']; $procedimentoAtendimento->circunferencia_abdominal = $atendimento['circunferencia_abdominal']; $procedimentoAtendimento->perimetro_panturrilha = $atendimento['perimetro_panturrilha']; $procedimentoAtendimento->momento_coleta_id = $atendimento['momento_coleta_id']; $procedimentoAtendimento->exame_laboratorial = $atendimento['exame_laboratorial']; if ($procedimentoAtendimento->atendimento_individual_id && $procedimentoAtendimento->escuta_inicial) { AtendimentoIndividual::where('id', $procedimentoAtendimento->atendimento_individual_id) ->update(['tipo_atendimento_id' => TipoAtendimento::ESCUTA_INICIAL_ORIENTACAO]); } } else if (isset($params['origem']) && $params['origem'] == 'atendimento_individual') { if (!$procedimentoAtendimento->atendimento_individual_id) { $procedimentos = ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $procedimentoAtendimento->id) ->get(); foreach ($procedimentos as $procedimento) { $procedimentoId = $procedimento['procedimento_id']; $existe = false; foreach ($atendimento['procedimentos'] as $proc) { if ($proc['id'] == $procedimentoId) { $existe = true; break; } } if (!$existe) { $atendimento['procedimentos'][] = [ 'id' => $procedimentoId ]; } } } $procedimentoAtendimento->atendimento_individual_id = $atendimento['atendimento_individual_id']; $procedimentoAtendimento->peso = $atendimento['peso']; $procedimentoAtendimento->altura = $atendimento['altura']; $procedimentoAtendimento->temperatura = $atendimento['temperatura']; $procedimentoAtendimento->afericao_pa = $atendimento['afericao_pa']; $procedimentoAtendimento->glicemia_capilar = $atendimento['glicemia']; $procedimentoAtendimento->perimetro_cefalico = $atendimento['perimetro_cefalico']; $procedimentoAtendimento->frequencia_respiratoria = $atendimento['frequencia_respiratoria']; $procedimentoAtendimento->frequencia_cardiaca = $atendimento['frequencia_cardiaca']; $procedimentoAtendimento->saturacao_o2 = $atendimento['saturacao_o2']; $procedimentoAtendimento->circunferencia_abdominal = $atendimento['circunferencia_abdominal']; $procedimentoAtendimento->perimetro_panturrilha = $atendimento['perimetro_panturrilha']; $procedimentoAtendimento->momento_coleta_id = $atendimento['momento_coleta_id']; $procedimentoAtendimento->exame_laboratorial = $atendimento['exame_laboratorial']; $procedimentoAtendimento->escuta_inicial = $atendimento['tipo_atendimento_id'] == TipoAtendimento::ESCUTA_INICIAL_ORIENTACAO ? true : false; } if (isset($params['origem']) && $params['origem'] == 'atividade_coletiva') { $procedimentoAtendimento->peso = $atendimento['peso']; $procedimentoAtendimento->altura = $atendimento['altura']; } $procedimentoAtendimento->save(); if (!isset($params['origem'])) { $procedimentoAtendimento->testesRapidos()->sync($atendimento['teste_rapido']); $procedimentoAtendimento->pequenasCirurgias()->sync($atendimento['procedimento_pequena_cirurgia']); $procedimentoAtendimento->administracaoMedicamentos()->sync($atendimento['administracao_medicamento']); ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $procedimentoAtendimento->id) ->delete(); } if (isset($atendimento['ivcf']['deseja_preencher']) && $atendimento['ivcf']['deseja_preencher'] === true) { ProcedimentoAtendimentoIvcf::updateOrCreate( [ 'procedimento_atendimento_id' => $procedimentoAtendimento->id ], [ 'procedimento_atendimento_id' => $procedimentoAtendimento->id, 'estado_saude_geral' => $atendimento['ivcf']['estado_saude_geral'], 'limitacao_compras' => $atendimento['ivcf']['limitacao_compras'], 'limitacao_gestao_financeira' => $atendimento['ivcf']['limitacao_gestao_financeira'], 'limitacao_tarefas_domesticas' => $atendimento['ivcf']['limitacao_tarefas_domesticas'], 'banho_independencia' => $atendimento['ivcf']['banho_independencia'], 'relato_esquecimento_por_terceiros' => $atendimento['ivcf']['relato_esquecimento_por_terceiros'], 'esquecimento_piorando' => $atendimento['ivcf']['esquecimento_piorando'], 'esquecimento_impacta_atividades' => $atendimento['ivcf']['esquecimento_impacta_atividades'], 'humor_tristeza_desanimo' => $atendimento['ivcf']['humor_tristeza_desanimo'], 'perda_interesse_atividades' => $atendimento['ivcf']['perda_interesse_atividades'], 'limitacao_elevar_bracos' => $atendimento['ivcf']['limitacao_elevar_bracos'], 'limitacao_motricidade_fina' => $atendimento['ivcf']['limitacao_motricidade_fina'], 'perda_peso_nao_intencional' => $atendimento['ivcf']['perda_peso_nao_intencional'], 'imc_abaixo_22' => $atendimento['ivcf']['imc_abaixo_22'], 'panturrilha_abaixo_31' => $atendimento['ivcf']['panturrilha_abaixo_31'], 'marcha_lenta_4m_maior_5s' => $atendimento['ivcf']['marcha_lenta_4m_maior_5s'], 'dificuldade_caminhar_impacto_atividades' => $atendimento['ivcf']['dificuldade_caminhar_impacto_atividades'], 'quedas_recorrentes' => $atendimento['ivcf']['quedas_recorrentes'], 'incontinencia' => $atendimento['ivcf']['incontinencia'], 'problema_visao_impacto_atividades' => $atendimento['ivcf']['problema_visao_impacto_atividades'], 'problema_audicao_impacto_atividades' => $atendimento['ivcf']['problema_audicao_impacto_atividades'], 'doencas_cronicas_multiplas' => $atendimento['ivcf']['doencas_cronicas_multiplas'], 'polifarmacia_5_ou_mais_medicamentos' => $atendimento['ivcf']['polifarmacia_5_ou_mais_medicamentos'], 'internacao_ultimos_6_meses' => $atendimento['ivcf']['internacao_ultimos_6_meses'], ] ); } else { ProcedimentoAtendimentoIvcf::where('procedimento_atendimento_id', $procedimentoAtendimento->id)->delete(); } self::saveProcedimentos($atendimento['procedimentos'], $procedimentoAtendimento); $ids[] = $procedimentoAtendimento->id; } if (!isset($params['origem'])) { self::destroyMultiple(ProcedimentoAtendimento::where('procedimento_id', $procedimento->id) ->whereNotIn('id', $ids)->pluck('id')); } } public static function getCadastroDomiciliar() { $cadastro = CadastroDomiciliar::where('domicilio_id', request()->domicilio_id)->first(); $equipe = Equipe::where('id', request()->profissional_equipe_id)->first(); if ($cadastro) { $descricao = $cadastro->microarea ? 'INE: ' . str_pad($cadastro->microarea->area->numero_ine, 10, '0', STR_PAD_LEFT) . ' - ÁREA: ' . $cadastro->microarea->area->descricao . ' - MICROÁREA: ' . $cadastro->microarea->descricao : 'INE: ' . str_pad($cadastro->microarea->area->numero_ine, 10, '0', STR_PAD_LEFT) . ' - ÁREA: ' . $cadastro->microarea->area->descricao; return [ 'area_id' => $cadastro->microarea->area->id ?? null, 'microarea_id' => $cadastro->microarea->id ?? null, 'descricao' => $descricao ?? null, 'pertence_area' => $cadastro->microarea->area && $cadastro->microarea->area->id == $equipe->area_id ? true : false, ]; } return []; } private static function destroyMultiple($ids) { foreach ($ids as $id) { $procedimentoAtendimentos = ProcedimentoAtendimento::where('id', $id)->get(); foreach ($procedimentoAtendimentos as $procedimentoAtendimento) { if ($procedimentoAtendimento->atendimento_individual_id) { AtendimentoIndividualProcedimento::where('atendimento_individual_id', $procedimentoAtendimento->atendimento_individual_id) ->delete(); } if($procedimentoAtendimento->atendimento_domiciliar_id) { $procedimentoAtendimento->atendimentoDomiciliar->each(function($atendimento) { $atendimento->procedimentos->delete(); }); $procedimentoAtendimento->atendimentoDomiciliar->delete(); } ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $procedimentoAtendimento->id) ->delete(); $procedimentoAtendimento->testesRapidos()->sync([]); $procedimentoAtendimento->pequenasCirurgias()->sync([]); $procedimentoAtendimento->administracaoMedicamentos()->sync([]); DB::table('integracao_esus_inconsistencia_procedimento_atendimento') ->where('procedimento_atendimento_id', $procedimentoAtendimento->id) ->delete(); $procedimentoAtendimento->delete(); } } } public static function destroy($id) { $procedimentoAtendimentos = ProcedimentoAtendimento::where('procedimento_id', $id)->get(); foreach ($procedimentoAtendimentos as $procedimentoAtendimento) { if ($procedimentoAtendimento->atendimento_individual_id) { AtendimentoIndividualProcedimento::where('atendimento_individual_id', $procedimentoAtendimento->atendimento_individual_id)->delete(); } ProcedimentoAtendimentoProcedimento::where('procedimento_atendimento_id', $procedimentoAtendimento->id)->delete(); $procedimentoAtendimento->testesRapidos()->sync([]); $procedimentoAtendimento->pequenasCirurgias()->sync([]); $procedimentoAtendimento->administracaoMedicamentos()->sync([]); DB::table('integracao_esus_inconsistencia_procedimento_atendimento') ->where('procedimento_atendimento_id', $procedimentoAtendimento->id) ->delete(); $procedimentoAtendimento->delete(); } Inconsistencia::where('procedimento_id', $id) ->get() ->each(function ($inconsistencia) { $cliente = app('config')->get('database.default'); $xmlPath = 'integracao' . DIRECTORY_SEPARATOR . 'esus' . DIRECTORY_SEPARATOR . 'inconsistencia' . DIRECTORY_SEPARATOR . 'xml-envio' . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . "{$inconsistencia->id}.xml"; Storage::disk('local')->delete($xmlPath); $inconsistencia->delete(); }); Procedimento::findOrFail($id)->delete(); } private static function validate($params) { return Validator::make($params, [ 'cadastro.usuario_id' => [ 'required', 'integer', Rule::exists(Usuario::class, 'id'), ], 'cadastro.equipe_id' => [ 'required', 'integer', Rule::exists(Equipe::class, 'id'), ], 'cadastro.ocupacao_id' => [ 'required', 'integer', Rule::exists(Ocupacao::class, 'id'), ], 'cadastro.data_usuario_responsavel' => [ 'required', 'date', ], ])->validate(); } public static function saveFromAmbulatorioPreAtendimento($params) { $fichaProcedimento = self::getFichaProcedimento($params['cadastro']); if (is_null($fichaProcedimento)) { $fichaProcedimento = Procedimento::create($params['cadastro']); } $atendimentoParams = $params['atendimentos'][0]; $fichaAtendimento = self::getFichaAtendimento($fichaProcedimento, $atendimentoParams); if (is_null($fichaAtendimento)) { $fichaAtendimento = $fichaProcedimento->procedimentoAtendimentos()->create([ 'paciente_id' => $atendimentoParams['paciente_id'], 'turno_id' => $atendimentoParams['turno_id'], 'local_atendimento_id' => $atendimentoParams['local_atendimento_id'], ]); } $fichaAtendimento->microarea_id = $atendimentoParams['microarea_id']; if (isset($atendimentoParams['escuta_inicial'])) $fichaAtendimento->escuta_inicial = $atendimentoParams['escuta_inicial']; if (isset($atendimentoParams['peso'])) $fichaAtendimento->peso = $atendimentoParams['peso']; if (isset($atendimentoParams['altura'])) $fichaAtendimento->altura = $atendimentoParams['altura']; if (isset($atendimentoParams['temperatura'])) $fichaAtendimento->temperatura = $atendimentoParams['temperatura']; if (isset($atendimentoParams['afericao_pa'])) $fichaAtendimento->afericao_pa = $atendimentoParams['afericao_pa']; if (isset($atendimentoParams['glicemia'])) $fichaAtendimento->glicemia_capilar = $atendimentoParams['glicemia']; if (isset($atendimentoParams['frequencia_respiratoria'])) $fichaAtendimento->frequencia_respiratoria = $atendimentoParams['frequencia_respiratoria']; if (isset($atendimentoParams['frequencia_cardiaca'])) $fichaAtendimento->frequencia_cardiaca = $atendimentoParams['frequencia_cardiaca']; if (isset($atendimentoParams['saturacao_o2'])) $fichaAtendimento->saturacao_o2 = $atendimentoParams['saturacao_o2']; if (isset($atendimentoParams['momento_coleta_id'])) $fichaAtendimento->momento_coleta_id = $atendimentoParams['momento_coleta_id']; if (isset($atendimentoParams['perimetro_cefalico'])) $fichaAtendimento->perimetro_cefalico = $atendimentoParams['perimetro_cefalico']; if (isset($atendimentoParams['circunferencia_abdominal'])) $fichaAtendimento->circunferencia_abdominal = $atendimentoParams['circunferencia_abdominal']; if (isset($atendimentoParams['perimetro_panturrilha'])) $fichaAtendimento->perimetro_panturrilha = $atendimentoParams['perimetro_panturrilha']; if (isset($atendimentoParams['exame_laboratorial'])) $fichaAtendimento->exame_laboratorial = $atendimentoParams['exame_laboratorial']; $fichaAtendimento->save(); $testesRapidos = $fichaAtendimento->testesRapidos()->pluck('id'); collect($atendimentoParams['teste_rapido']) ->reject(fn ($id) => $testesRapidos->contains($id)) ->each(fn ($id) => $fichaAtendimento->testesRapidos()->attach($id)); $pequenasCirurgias = $fichaAtendimento->pequenasCirurgias()->pluck('id'); collect($atendimentoParams['procedimento_pequena_cirurgia']) ->reject(fn ($id) => $pequenasCirurgias->contains($id)) ->each(fn ($id) => $fichaAtendimento->pequenasCirurgias()->attach($id)); $administracaoMedicamentos = $fichaAtendimento->administracaoMedicamentos()->pluck('id'); collect($atendimentoParams['administracao_medicamento']) ->reject(fn ($id) => $administracaoMedicamentos->contains($id)) ->each(fn ($id) => $fichaAtendimento->administracaoMedicamentos()->attach($id)); $procedimentos = $fichaAtendimento->procedimentos()->pluck('procedimento_id'); $fichaAtendimento->procedimentos()->createMany(collect($atendimentoParams['procedimentos']) ->unique('procedimento_id') ->reject(fn ($p) => $procedimentos->contains($p['procedimento_id'])) ->values() ->all() ); return $fichaProcedimento; } public static function saveFromAmbulatorioPosConsulta($params) { $fichaProcedimento = self::getFichaProcedimento($params['cadastro']); if (is_null($fichaProcedimento)) { $fichaProcedimento = Procedimento::create($params['cadastro']); } $atendimentoParams = $params['atendimentos'][0]; $fichaAtendimento = self::getFichaAtendimento($fichaProcedimento, $atendimentoParams); if (is_null($fichaAtendimento)) { $fichaAtendimento = $fichaProcedimento->procedimentoAtendimentos()->create([ 'pos_consulta_id' => $atendimentoParams['pos_consulta_id'], 'paciente_id' => $atendimentoParams['paciente_id'], 'turno_id' => $atendimentoParams['turno_id'], 'local_atendimento_id' => $atendimentoParams['local_atendimento_id'], ]); } $fichaAtendimento->microarea_id = $atendimentoParams['microarea_id']; if (isset($atendimentoParams['escuta_inicial'])) $fichaAtendimento->escuta_inicial = $atendimentoParams['escuta_inicial']; if (isset($atendimentoParams['peso'])) $fichaAtendimento->peso = $atendimentoParams['peso']; if (isset($atendimentoParams['altura'])) $fichaAtendimento->altura = $atendimentoParams['altura']; if (isset($atendimentoParams['temperatura'])) $fichaAtendimento->temperatura = $atendimentoParams['temperatura']; if (isset($atendimentoParams['afericao_pa'])) $fichaAtendimento->afericao_pa = $atendimentoParams['afericao_pa']; if (isset($atendimentoParams['glicemia'])) $fichaAtendimento->glicemia_capilar = $atendimentoParams['glicemia']; if (isset($atendimentoParams['frequencia_respiratoria'])) $fichaAtendimento->frequencia_respiratoria = $atendimentoParams['frequencia_respiratoria']; if (isset($atendimentoParams['frequencia_cardiaca'])) $fichaAtendimento->frequencia_cardiaca = $atendimentoParams['frequencia_cardiaca']; if (isset($atendimentoParams['saturacao_o2'])) $fichaAtendimento->saturacao_o2 = $atendimentoParams['saturacao_o2']; if (isset($atendimentoParams['momento_coleta_id'])) $fichaAtendimento->momento_coleta_id = $atendimentoParams['momento_coleta_id']; if (isset($atendimentoParams['perimetro_cefalico'])) $fichaAtendimento->perimetro_cefalico = $atendimentoParams['perimetro_cefalico']; if (isset($atendimentoParams['circunferencia_abdominal'])) $fichaAtendimento->circunferencia_abdominal = $atendimentoParams['circunferencia_abdominal']; if (isset($atendimentoParams['perimetro_panturrilha'])) $fichaAtendimento->perimetro_panturrilha = $atendimentoParams['perimetro_panturrilha']; if (isset($atendimentoParams['exame_laboratorial'])) $fichaAtendimento->exame_laboratorial = $atendimentoParams['exame_laboratorial']; $fichaAtendimento->save(); $testesRapidos = $fichaAtendimento->testesRapidos()->pluck('id'); collect($atendimentoParams['teste_rapido']) ->reject(fn ($id) => $testesRapidos->contains($id)) ->each(fn ($id) => $fichaAtendimento->testesRapidos()->attach($id)); $pequenasCirurgias = $fichaAtendimento->pequenasCirurgias()->pluck('id'); collect($atendimentoParams['procedimento_pequena_cirurgia']) ->reject(fn ($id) => $pequenasCirurgias->contains($id)) ->each(fn ($id) => $fichaAtendimento->pequenasCirurgias()->attach($id)); $administracaoMedicamentos = $fichaAtendimento->administracaoMedicamentos()->pluck('id'); collect($atendimentoParams['administracao_medicamento']) ->reject(fn ($id) => $administracaoMedicamentos->contains($id)) ->each(fn ($id) => $fichaAtendimento->administracaoMedicamentos()->attach($id)); $procedimentos = $fichaAtendimento->procedimentos()->pluck('procedimento_id'); $fichaAtendimento->procedimentos()->createMany(collect($atendimentoParams['procedimentos']) ->unique('procedimento_id') ->reject(fn ($p) => $procedimentos->contains($p['procedimento_id'])) ->values() ->all() ); return $fichaProcedimento; } public static function saveFromAmbulatorioAtendimentoEnfermagem($params) { $fichaProcedimento = self::getFichaProcedimento($params['cadastro']); if (is_null($fichaProcedimento)) { $fichaProcedimento = Procedimento::create($params['cadastro']); } $atendimentoParams = $params['atendimentos'][0]; $fichaAtendimento = self::getFichaAtendimento($fichaProcedimento, $atendimentoParams); if (is_null($fichaAtendimento)) { $fichaAtendimento = $fichaProcedimento->procedimentoAtendimentos()->create([ 'soap_id' => $atendimentoParams['soap_id'], 'paciente_id' => $atendimentoParams['paciente_id'], 'turno_id' => $atendimentoParams['turno_id'], 'local_atendimento_id' => $atendimentoParams['local_atendimento_id'], ]); } $fichaAtendimento->microarea_id = $atendimentoParams['microarea_id']; if (isset($atendimentoParams['escuta_inicial'])) $fichaAtendimento->escuta_inicial = $atendimentoParams['escuta_inicial']; if (isset($atendimentoParams['peso'])) $fichaAtendimento->peso = $atendimentoParams['peso']; if (isset($atendimentoParams['altura'])) $fichaAtendimento->altura = $atendimentoParams['altura']; if (isset($atendimentoParams['temperatura'])) $fichaAtendimento->temperatura = $atendimentoParams['temperatura']; if (isset($atendimentoParams['afericao_pa'])) $fichaAtendimento->afericao_pa = $atendimentoParams['afericao_pa']; if (isset($atendimentoParams['glicemia'])) $fichaAtendimento->glicemia_capilar = $atendimentoParams['glicemia']; if (isset($atendimentoParams['frequencia_respiratoria'])) $fichaAtendimento->frequencia_respiratoria = $atendimentoParams['frequencia_respiratoria']; if (isset($atendimentoParams['frequencia_cardiaca'])) $fichaAtendimento->frequencia_cardiaca = $atendimentoParams['frequencia_cardiaca']; if (isset($atendimentoParams['saturacao_o2'])) $fichaAtendimento->saturacao_o2 = $atendimentoParams['saturacao_o2']; if (isset($atendimentoParams['momento_coleta_id'])) $fichaAtendimento->momento_coleta_id = $atendimentoParams['momento_coleta_id']; if (isset($atendimentoParams['perimetro_cefalico'])) $fichaAtendimento->perimetro_cefalico = $atendimentoParams['perimetro_cefalico']; if (isset($atendimentoParams['circunferencia_abdominal'])) $fichaAtendimento->circunferencia_abdominal = $atendimentoParams['circunferencia_abdominal']; if (isset($atendimentoParams['perimetro_panturrilha'])) $fichaAtendimento->perimetro_panturrilha = $atendimentoParams['perimetro_panturrilha']; if (isset($atendimentoParams['exame_laboratorial'])) $fichaAtendimento->exame_laboratorial = $atendimentoParams['exame_laboratorial']; $fichaAtendimento->save(); $testesRapidos = $fichaAtendimento->testesRapidos()->pluck('id'); collect($atendimentoParams['teste_rapido']) ->reject(fn ($id) => $testesRapidos->contains($id)) ->each(fn ($id) => $fichaAtendimento->testesRapidos()->attach($id)); $pequenasCirurgias = $fichaAtendimento->pequenasCirurgias()->pluck('id'); collect($atendimentoParams['procedimento_pequena_cirurgia']) ->reject(fn ($id) => $pequenasCirurgias->contains($id)) ->each(fn ($id) => $fichaAtendimento->pequenasCirurgias()->attach($id)); $procedimentos = $fichaAtendimento->procedimentos()->pluck('procedimento_id'); $fichaAtendimento->procedimentos()->createMany(collect($atendimentoParams['procedimentos']) ->unique('procedimento_id') ->reject(fn ($p) => $procedimentos->contains($p['procedimento_id'])) ->values() ->all() ); return $fichaProcedimento; } private static function getFichaProcedimento($params) { return Procedimento::where('data_usuario_responsavel', $params['data_usuario_responsavel']) ->where('usuario_id', $params['usuario_id']) ->where('equipe_id', $params['equipe_id']) ->where('ocupacao_id', $params['ocupacao_id']) ->whereHas('procedimentoAtendimentos', function ($query) { $query->havingRaw('count(*) < 99'); }) ->first(); } private static function getFichaAtendimento($fichaProcedimento, $params) { return ProcedimentoAtendimento::where('procedimento_id', $fichaProcedimento->id) ->where('paciente_id', $params['paciente_id']) ->where('turno_id', $params['turno_id']) ->where('local_atendimento_id', $params['local_atendimento_id']) ->first(); } }