domx->registerNamespace('ns4', 'http://esus.ufsc.br/fichaprocedimentomaster'); } public function __invoke() { $path = '//ns4:fichaProcedimentoMasterTransport'; $this->setProfissional($path); $this->setAtendimentos($path); $this->setProcedimentosConsolidados($path); return $this->ficha; } private function setProfissional($fichaProcedimentoMasterTransportPath) { $headerTransportPath = "{$fichaProcedimentoMasterTransportPath}/headerTransport"; $ocupacao = $this->getFirstNodeValue("{$headerTransportPath}/cboCodigo_2002") ? Ocupacao::where('codigo', $this->getFirstNodeValue("{$headerTransportPath}/cboCodigo_2002"))->first() : null; $campos = (object) [ 'dataAtendimento' => $this->getDateString($this->getFirstNodeValue("{$headerTransportPath}/dataAtendimento")), 'codigoIbgeMunicipio' => $this->getFirstNodeValue("{$headerTransportPath}/codigoIbgeMunicipio"), 'profissionalNome' => $this->inconsistenciaModel->procedimento->usuario->cidadao->nome, 'profissionalCNS' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$headerTransportPath}/profissionalCNS")), 'cboCodigo_2002' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : null, 'cnes' => $this->getFirstNodeValue("{$headerTransportPath}/cnes"), 'ine' => $this->getFirstNodeValue("{$headerTransportPath}/ine"), ]; $inconsistencias = $this->getInconsistencias([ ['Data', fn () => $this->inconsistencias->headerTransport->dataAtendimento], ['IBGE', fn () => $this->inconsistencias->headerTransport->codigoIbgeMunicipio], ['CNS', fn () => $this->inconsistencias->headerTransport->profissionalCNS], ['CBO', fn () => $this->inconsistencias->headerTransport->cboCodigo_2002], ['CNES', fn () => $this->inconsistencias->headerTransport->cnes], ['INE', fn () => $this->inconsistencias->headerTransport->ine], ]); $this->ficha->profissional = (object) compact('campos', 'inconsistencias'); } private function setAtendimentos($fichaProcedimentoMasterTransportPath) { $path = "{$fichaProcedimentoMasterTransportPath}/atendProcedimentos"; $atendimentos = []; foreach ($this->domx->query($path) as $i => $context) { $posicao = $i + 1; $atendimentoModel = $this->inconsistenciaModel->procedimentoAtendimentos() ->wherePivot('posicao', $posicao) ->first(); $inconsistencias = $this->inconsistencias->atendProcedimentos->{$posicao} ?? []; $atendimento = new stdClass; $this->setAtendimento($atendimento, $context, $atendimentoModel, $inconsistencias); $this->setInformacoesGerais($atendimento, $context, $inconsistencias); $this->setProcedimentos($atendimento, $context, $inconsistencias); $atendimentos[] = $atendimento; } $this->ficha->atendimentos = (object) [ 'lista' => $atendimentos, 'inconsistencias' => $this->getInconsistencias([ fn () => $this->inconsistencias->atendProcedimentos, ]), ]; } private function setAtendimento($atendimento, $atendimentoContext, $atendimentoModel, $inconsistencias) { $campos = (object) [ 'numProntuario' => $this->getFirstNodeValue('numProntuario', $atendimentoContext), 'nomeCidadao' => $atendimentoModel->paciente->cidadao->nome, 'cnsCidadao' => MaskUtil::getCnsMasked($this->getFirstNodeValue('cnsCidadao', $atendimentoContext)), 'cpfCidadao' => MaskUtil::getCpfMasked($this->getFirstNodeValue('cpfCidadao', $atendimentoContext)), 'dtNascimento' => $this->getDateString($this->getFirstNodeValue('dtNascimento', $atendimentoContext)), 'sexo' => $this->getSexo($this->getFirstNodeValue('sexo', $atendimentoContext)), 'localAtendimento' => $this->getFirstNodeValue('localAtendimento', $atendimentoContext) ? LocalAtendimento::find($this->getFirstNodeValue('localAtendimento', $atendimentoContext))->descricao : null, 'turno' => $this->getFirstNodeValue('turno', $atendimentoContext) ? Turno::find($this->getFirstNodeValue('turno', $atendimentoContext))->nome : null, 'statusEscutaInicialOrientacao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean( $this->getFirstNodeValue('statusEscutaInicialOrientacao', $atendimentoContext))), 'dataHoraInicialAtendimento' => $this->getDateTimeString( $this->getFirstNodeValue('dataHoraInicialAtendimento', $atendimentoContext)), 'dataHoraFinalAtendimento' => $this->getDateTimeString( $this->getFirstNodeValue('dataHoraFinalAtendimento', $atendimentoContext)), ]; $inconsistencias = $this->getInconsistencias([ ['Prontuário', fn () => $inconsistencias->numProntuario], ['CNS', fn () => $inconsistencias->cnsCidadao], ['CPF', fn () => $inconsistencias->cpfCidadao], ['Data de nascimento', fn () => $inconsistencias->dtNascimento], ['Sexo', fn () => $inconsistencias->sexo], ['Local de atendimento', fn () => $inconsistencias->localAtendimento], ['Turno', fn () => $inconsistencias->turno], ['Escuta Inicial/Orientação', fn () => $inconsistencias->statusEscutaInicialOrientacao], ['Data/hora inicial do atendimento', fn () => $inconsistencias->dataHoraInicialAtendimento], ['Data/hora final do atendimento', fn () => $inconsistencias->dataHoraFinalAtendimento], ]); $atendimento->atendimento = (object) compact('campos', 'inconsistencias'); } private function setInformacoesGerais($atendimento, $atendimentoContext, $inconsistencias) { $medicoes = $this->domx->query('medicoes', $atendimentoContext); $medicoesContext = $medicoes->length > 0 ? $medicoes[0] : null; $campos = (object) [ 'circunferenciaAbdominal' => $this->getFirstNodeValue('circunferenciaAbdominal', $medicoesContext), 'perimetroPanturrilha' => $this->getFirstNodeValue('perimetroPanturrilha', $medicoesContext), 'pressaoArterial' => trim($this->getFirstNodeValue('pressaoArterialSistolica', $medicoesContext) . '/' . $this->getFirstNodeValue('pressaoArterialDiastolica', $medicoesContext), '/'), 'frequenciaRespiratoria' => $this->getFirstNodeValue('frequenciaRespiratoria', $medicoesContext), 'frequenciaCardiaca' => $this->getFirstNodeValue('frequenciaCardiaca', $medicoesContext), 'temperatura' => $this->getFirstNodeValue('temperatura', $medicoesContext), 'saturacaoO2' => $this->getFirstNodeValue('saturacaoO2', $medicoesContext), 'glicemiaCapilar' => $this->getFirstNodeValue('glicemiaCapilar', $medicoesContext), 'tipoGlicemiaCapilar' => !is_null($this->getFirstNodeValue('tipoGlicemiaCapilar', $medicoesContext)) ? GlicemiaCapilarMomentoColeta::where( 'codigo_esus', $this->getFirstNodeValue('tipoGlicemiaCapilar', $medicoesContext) )->first()->nome : null, 'peso' => $this->getFirstNodeValue('peso', $medicoesContext), 'altura' => $this->getFirstNodeValue('altura', $medicoesContext), 'perimetroCefalico' => $this->getFirstNodeValue('perimetroCefalico', $medicoesContext), ]; $inconsistencias = $this->getInconsistencias([ fn () => $inconsistencias->medicoes, ['Circunferência abdominal', fn () => $inconsistencias->medicoes->circunferenciaAbdominal], ['Perímetro da panturrilha', fn () => $inconsistencias->medicoes->perimetroPanturrilha], ['Pressão arterial sistólica', fn () => $inconsistencias->medicoes->pressaoArterialSistolica], ['Pressão arterial diastólica', fn () => $inconsistencias->medicoes->pressaoArterialDiastolica], ['Frequência respiratória', fn () => $inconsistencias->medicoes->frequenciaRespiratoria], ['Frequência cardíaca', fn () => $inconsistencias->medicoes->frequenciaCardiaca], ['Temperatura', fn () => $inconsistencias->medicoes->temperatura], ['Saturação de O2', fn () => $inconsistencias->medicoes->saturacaoO2], ['Glicemia capilar', fn () => $inconsistencias->medicoes->glicemiaCapilar], ['Momento da coleta', fn () => $inconsistencias->medicoes->tipoGlicemiaCapilar], ['Peso', fn () => $inconsistencias->medicoes->peso], ['Altura', fn () => $inconsistencias->medicoes->altura], ['Perímetro cefálico', fn () => $inconsistencias->medicoes->perimetroCefalico], ]); $atendimento->informacoes_gerais = (object) compact('campos', 'inconsistencias'); } private function setProcedimentos($atendimento, $atendimentoContext, $inconsistencias) { $procedimentos = []; foreach ($this->domx->query('procedimentos', $atendimentoContext) as $context) { $codigo = $context->nodeValue; if ($pequenaCirurgia = PequenaCirurgia::where('codigo_esus', $codigo)->first()) { $procedimentos[] = "Pequena cirurgia: {$pequenaCirurgia->descricao}"; } else if ($testeRapido = TesteRapido::where('codigo_esus', $codigo)->first()) { $procedimentos[] = "Teste rápido: {$testeRapido->descricao}"; } else if ($viaAdmnistracao = ViaAdministracao::where('codigo_esus', $codigo)->first()) { $procedimentos[] = "Administração de medicamento: {$viaAdmnistracao->descricao}"; } else { $procedimento = Procedimento::where('codigo', $codigo)->orderByDesc('competencia_id')->first(); $procedimentos[] = MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}"; } } $atendimento->procedimentos = (object) [ 'lista' => $procedimentos, 'inconsistencias' => $this->getInconsistencias([ fn () => $inconsistencias->procedimentos, ]), ]; } private function setProcedimentosConsolidados($fichaProcedimentoMasterTransportPath) { $path = $fichaProcedimentoMasterTransportPath; $campos = (object) [ 'numTotalAfericaoPa' => $this->getFirstNodeValue("{$path}/numTotalAfericaoPa"), 'numTotalAfericaoTemperatura' => $this->getFirstNodeValue("{$path}/numTotalAfericaoTemperatura"), 'numTotalCurativoSimples' => $this->getFirstNodeValue("{$path}/numTotalCurativoSimples"), 'numTotalColetaMaterialParaExameLaboratorial' => $this->getFirstNodeValue("{$path}/numTotalColetaMaterialParaExameLaboratorial"), 'numTotalGlicemiaCapilar' => $this->getFirstNodeValue("{$path}/numTotalGlicemiaCapilar"), 'numTotalMedicaoAltura' => $this->getFirstNodeValue("{$path}/numTotalMedicaoAltura"), 'numTotalMedicaoPeso' => $this->getFirstNodeValue("{$path}/numTotalMedicaoPeso"), ]; $inconsistencias = $this->getInconsistencias([ ['Aferição de PA', fn () => $this->inconsistencias->numTotalAfericaoPa], ['Temperatura', fn () => $this->inconsistencias->numTotalAfericaoTemperatura], ['Curativo', fn () => $this->inconsistencias->numTotalCurativoSimples], ['Coleta de material para Exame Laboratorial', fn () => $this->inconsistencias->numTotalColetaMaterialParaExameLaboratorial], ['Glicemia Capilar', fn () => $this->inconsistencias->numTotalGlicemiaCapilar], ['Altura', fn () => $this->inconsistencias->numTotalMedicaoAltura], ['Peso', fn () => $this->inconsistencias->numTotalMedicaoPeso], ]); $this->ficha->procedimentos_consolidados = (object) compact('campos', 'inconsistencias'); } }