domx->registerNamespace('ns4', 'http://esus.ufsc.br/fichaatendimentodomiciliarmaster'); } public function __invoke() { $path = '//ns4:fichaAtendimentoDomiciliarMasterTransport'; $this->setProfissionalResponsavel($path); $this->setProfissionalAuxiliar($path); $this->setAtendimentos($path); return $this->ficha; } private function setProfissionalResponsavel($fichaAtendimentoDomiciliarMasterTransportPath) { $headerTransportPath = "{$fichaAtendimentoDomiciliarMasterTransportPath}/headerTransport"; $lotacaoFormPrincipalPath = "{$headerTransportPath}/lotacaoFormPrincipal"; $ocupacao = $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cboCodigo_2002") ? Ocupacao::where('codigo', $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cboCodigo_2002"))->first() : null; $campos = (object) [ 'dataAtendimento' => $this->getDateString($this->getFirstNodeValue("{$headerTransportPath}/dataAtendimento")), 'codigoIbgeMunicipio' => $this->getFirstNodeValue("{$headerTransportPath}/codigoIbgeMunicipio"), 'profissionalNome' => $this->inconsistenciaModel->atendimentoDomiciliar->usuario->cidadao->nome, 'profissionalCNS' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/profissionalCNS")), 'cboCodigo_2002' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : null, 'cnes' => $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/cnes"), 'ine' => $this->getFirstNodeValue("{$lotacaoFormPrincipalPath}/ine"), ]; $inconsistencias = $this->getInconsistencias([ ['Data', fn () => $this->inconsistencias->headerTransport->dataAtendimento], ['IBGE', fn () => $this->inconsistencias->headerTransport->codigoIbgeMunicipio], ['CNS', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->profissionalCNS], ['CBO', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->cboCodigo_2002], ['CNES', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->cnes], ['INE', fn () => $this->inconsistencias->headerTransport->lotacaoFormPrincipal->ine], ]); $this->ficha->profissional_responsavel = (object) compact('campos', 'inconsistencias'); } private function setProfissionalAuxiliar($fichaAtendimentoDomiciliarMasterTransportPath) { $headerTransportPath = "{$fichaAtendimentoDomiciliarMasterTransportPath}/headerTransport"; $lotacaoFormAtendimentoCompartilhadoPath = "{$headerTransportPath}/lotacaoFormAtendimentoCompartilhado"; $ocupacao = $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/cboCodigo_2002") ? Ocupacao::where('codigo', $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/cboCodigo_2002"))->first() : null; $campos = (object) [ 'profissionalNome' => $this->inconsistenciaModel->atendimentoDomiciliar->usuarioAuxiliar->cidadao->nome ?? null, 'profissionalCNS' => MaskUtil::getCnsMasked($this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/profissionalCNS")), 'cboCodigo_2002' => $ocupacao ? "{$ocupacao->codigo} - {$ocupacao->nome}" : null, 'cnes' => $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/cnes"), 'ine' => $this->getFirstNodeValue("{$lotacaoFormAtendimentoCompartilhadoPath}/ine"), ]; $inconsistencias = $this->getInconsistencias([ ['CNS', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->profissionalCNS], ['CBO', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->cboCodigo_2002], ['CNES', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->cnes], ['INE', fn () => $this->inconsistencias->headerTransport->lotacaoFormAtendimentoCompartilhado->ine], ]); $this->ficha->profissional_auxiliar = (object) compact('campos', 'inconsistencias'); } private function setAtendimentos($fichaAtendimentoDomiciliarMasterTransportPath) { $path = "{$fichaAtendimentoDomiciliarMasterTransportPath}/atendimentosDomiciliares"; $atendimentos = []; foreach ($this->domx->query($path) as $i => $context) { $posicao = $i + 1; $atendimentoModel = $this->inconsistenciaModel->atendimentoDomiciliarAtendimentos() ->wherePivot('posicao', $posicao) ->first(); $inconsistencias = $this->inconsistencias->atendimentosDomiciliares->{$posicao} ?? []; $atendimento = new stdClass; $this->setPaciente($atendimento, $context, $atendimentoModel, $inconsistencias); $this->setCondicoesAvaliadas($atendimento, $context, $inconsistencias); $this->setProblemasCondicoes($atendimento, $context, $inconsistencias); $this->setProcedimentos($atendimento, $context, $inconsistencias); $this->setOutro($atendimento, $context, $inconsistencias); $this->setIvcf($atendimento, $context, $inconsistencias); $atendimentos[] = $atendimento; } $this->ficha->atendimentos = (object) [ 'lista' => $atendimentos, 'inconsistencias' => $this->getInconsistencias([ fn () => $this->inconsistencias->atendimentosDomiciliares, ]), ]; } private function setPaciente($atendimento, $atendimentoDomiciliarContext, $atendimentoModel, $inconsistencias) { $campos = (object) [ 'nomeCidadao' => $atendimentoModel->paciente->cidadao->nome, 'turno' => $this->getFirstNodeValue('turno', $atendimentoDomiciliarContext) ? Turno::find($this->getFirstNodeValue('turno', $atendimentoDomiciliarContext))->nome : null, 'cnsCidadao' => MaskUtil::getCnsMasked($this->getFirstNodeValue('cnsCidadao', $atendimentoDomiciliarContext)), 'cpfCidadao' => MaskUtil::getCpfMasked($this->getFirstNodeValue('cpfCidadao', $atendimentoDomiciliarContext)), 'dataNascimento' => $this->getDateString($this->getFirstNodeValue('dataNascimento', $atendimentoDomiciliarContext)), 'sexo' => $this->getSexo($this->getFirstNodeValue('sexo', $atendimentoDomiciliarContext)), 'localAtendimento' => $this->getFirstNodeValue('localAtendimento', $atendimentoDomiciliarContext) ? LocalAtendimento::find($this->getFirstNodeValue('localAtendimento', $atendimentoDomiciliarContext))->descricao : null, 'atencaoDomiciliarModalidade' => $this->getFirstNodeValue('atencaoDomiciliarModalidade', $atendimentoDomiciliarContext) ? ModalidadeAtencaoDomiciliar::where( 'codigo_esus', $this->getFirstNodeValue('atencaoDomiciliarModalidade', $atendimentoDomiciliarContext) )->first()->descricao : null, 'tipoAtendimento' => $this->getFirstNodeValue('tipoAtendimento', $atendimentoDomiciliarContext) ? TipoAtendimento::where( 'codigo_esus', $this->getFirstNodeValue('tipoAtendimento', $atendimentoDomiciliarContext) )->first()->descricao : null, ]; $inconsistencias = $this->getInconsistencias([ ['Turno', fn () => $inconsistencias->turno], ['CNS', fn () => $inconsistencias->cnsCidadao], ['CPF', fn () => $inconsistencias->cpfCidadao], ['Data de nascimento', fn () => $inconsistencias->dataNascimento], ['Sexo', fn () => $inconsistencias->sexo], ['Local de atendimento', fn () => $inconsistencias->localAtendimento], ['Modalidade', fn () => $inconsistencias->atencaoDomiciliarModalidade], ['Tipo de atendimento', fn () => $inconsistencias->tipoAtendimento], ]); $atendimento->paciente = (object) compact('campos', 'inconsistencias'); } private function setOutro($atendimento, $atendimentoDomiciliarContext, $inconsistencias) { $campos = (object) [ 'condutaDesfecho' => $this->getFirstNodeValue('condutaDesfecho', $atendimentoDomiciliarContext) ? trim(CondutaDesfecho::where( 'codigo', $this->getFirstNodeValue('condutaDesfecho', $atendimentoDomiciliarContext) )->first()->descricao) : null, ]; $inconsistencias = $this->getInconsistencias([ ['Conduta/Desfecho', fn () => $inconsistencias->condutaDesfecho], ]); $atendimento->outro = (object) compact('campos', 'inconsistencias'); } private function setCondicoesAvaliadas($atendimento, $atendimentoDomiciliarContext, $inconsistencias) { $condicoesAvaliadas = []; foreach ($this->domx->query('condicoesAvaliadas', $atendimentoDomiciliarContext) as $context) { $condicoesAvaliadas[] = trim(AtendimentoDomiciliarCondicaoAvaliada::where('codigo', $context->nodeValue)->first()->nome); } $atendimento->condicoesAvaliadas = (object) [ 'lista' => $condicoesAvaliadas, 'inconsistencias' => $this->getInconsistencias([ fn () => $inconsistencias->condicoesAvaliadas, ]), ]; } private function setProblemasCondicoes($atendimento, $atendimentoDomiciliarContext, $inconsistencias) { $problemasCondicoes = []; foreach ($this->domx->query('problemasCondicoes', $atendimentoDomiciliarContext) as $i => $context) { $inconsistenciasProblemaCondicao = []; if (isset($inconsistencias->problemasCondicoes)) { if (is_array($inconsistencias->problemasCondicoes)) { $inconsistenciasProblemaCondicao = $inconsistencias->problemasCondicoes[$i] ?? []; } else { $posicao = $i + 1; $inconsistenciasProblemaCondicao = $inconsistencias->problemasCondicoes->{$posicao} ?? []; } } $ciap = $this->getFirstNodeValue('ciap', $context) ? Ciap::where('codigo', $this->getFirstNodeValue('ciap', $context))->first() : null; $cid = $this->getFirstNodeValue('cid10', $context) ? Cid::where('codigo', $this->getFirstNodeValue('cid10', $context))->first() : null; $problemasCondicoes[] = (object) [ 'campos' => (object) [ 'ciap' => $ciap ? "{$ciap->codigo} - {$ciap->descricao}" : null, 'cid10' => $cid ? MaskUtil::getCidMasked($cid->codigo) . " - {$cid->nome}" : null, 'isAvaliado' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean( $this->getFirstNodeValue('isAvaliado', $context))), ], 'inconsistencias' => $this->getInconsistencias([ ['CIAP', fn () => $inconsistenciasProblemaCondicao->ciap], ['CID', fn () => $inconsistenciasProblemaCondicao->cid10], ['Avaliado', fn () => $inconsistenciasProblemaCondicao->isAvaliado], ]), ]; } $atendimento->problemasCondicoes = (object) [ 'lista' => $problemasCondicoes, 'inconsistencias' => $this->getInconsistencias([ fn () => $inconsistencias->problemasCondicoes, ]), ]; } private function setProcedimentos($atendimento, $atendimentoDomiciliarContext, $inconsistencias) { $procedimentos = []; foreach ($this->domx->query('procedimentos', $atendimentoDomiciliarContext) as $context) { $procedimento = Procedimento::where('codigo', $context->nodeValue)->orderByDesc('competencia_id')->first(); $procedimentos[] = MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}"; } $atendimento->procedimentos = (object) [ 'lista' => $procedimentos, 'inconsistencias' => $this->getInconsistencias([ fn () => $inconsistencias->procedimentos, ]), ]; } private function setIvcf($atendimento, $atendimentoDomiciliarContext, $inconsistencias) { $campos = (object) [ 'resultado' => $this->getFirstNodeValue('ivcf/resultado', $atendimentoDomiciliarContext), 'hasSgIdade' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgIdade', $atendimentoDomiciliarContext))), 'hasSgPercepcaoSaude' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgPercepcaoSaude', $atendimentoDomiciliarContext))), 'hasSgAvdInstrumental' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAvdInstrumental', $atendimentoDomiciliarContext))), 'hasSgAvdBasica' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAvdBasica', $atendimentoDomiciliarContext))), 'hasSgCognicao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgCognicao', $atendimentoDomiciliarContext))), 'hasSgHumor' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgHumor', $atendimentoDomiciliarContext))), 'hasSgAlcancePreensaoPinca' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAlcancePreensaoPinca', $atendimentoDomiciliarContext))), 'hasSgCapAerobicaMuscular' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgCapAerobicaMuscular', $atendimentoDomiciliarContext))), 'hasSgMarcha' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgMarcha', $atendimentoDomiciliarContext))), 'hasSgContinencia' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgContinencia', $atendimentoDomiciliarContext))), 'hasSgVisao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgVisao', $atendimentoDomiciliarContext))), 'hasSgAudicao' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgAudicao', $atendimentoDomiciliarContext))), 'hasSgComorbidade' => DataUtil::getSimOuNao(DataUtil::getBooleanValueFromStringBoolean($this->getFirstNodeValue('ivcf/hasSgComorbidade', $atendimentoDomiciliarContext))), 'dataResultado' => $this->getFirstNodeValue('ivcf/dataResultado', $atendimentoDomiciliarContext), ]; $inconsistencias = $this->getInconsistencias([ ['Resultado', fn () => $inconsistencias->ivcf->resultado], ['Idade', fn () => $inconsistencias->ivcf->hasSgIdade], ['Percepção de saúde', fn () => $inconsistencias->ivcf->hasSgPercepcaoSaude], ['Atividades instrumentais da vida diária', fn () => $inconsistencias->ivcf->hasSgAvdInstrumental], ['Atividades básicas da vida diária', fn () => $inconsistencias->ivcf->hasSgAvdBasica], ['Cognição', fn () => $inconsistencias->ivcf->hasSgCognicao], ['Humor', fn () => $inconsistencias->ivcf->hasSgHumor], ['Alcance preensão pinça', fn () => $inconsistencias->ivcf->hasSgAlcancePreensaoPinca], ['Capacidade aeróbica muscular', fn () => $inconsistencias->ivcf->hasSgCapAerobicaMuscular], ['Marcha', fn () => $inconsistencias->ivcf->hasSgMarcha], ['Continência', fn () => $inconsistencias->ivcf->hasSgContinencia], ['Visão', fn () => $inconsistencias->ivcf->hasSgVisao], ['Audição', fn () => $inconsistencias->ivcf->hasSgAudicao], ['Comorbidade', fn () => $inconsistencias->ivcf->hasSgComorbidade], ['Data do resultado', fn () => $this->getDateString($inconsistencias->ivcf->dataResultado)], ]); $atendimento->ivcf = (object) compact('campos', 'inconsistencias'); } }