mes_ano; foreach (self::getFichasProfissional($mes_ano) as $fichaProfissional) { $iteracoes = self::getIteracoesCount($fichaProfissional); for ($i = 0; $i < $iteracoes; $i++) { $dadosExportacao = self::getDadosExportacao($fichaProfissional, $exportacaoArquivoId, $usuarioId); $xmlPath = Storage::path($arquivo_caminho . 'xml_temp.xml'); $dadosExportacao['dom']->save($xmlPath); $zip = new ZipArchive; $zip->open(Storage::path($arquivo_caminho . $arquivo_nome), ZipArchive::CREATE); $zip->addFile($xmlPath, 'AI_' . $dadosExportacao['exportacao']->uuid . '.esus.xml'); $zip->close(); unlink($xmlPath); } } } public static function gerarExportacoes($mesAnoInicial) { $exportacoes = collect(); foreach (self::getFichasProfissional($mesAnoInicial, false) as $fichaProfissional) { $iteracoes = self::getIteracoesCount($fichaProfissional); for ($i = 0; $i < $iteracoes; $i++) { $dadosExportacao = self::getDadosExportacao($fichaProfissional); $exportacoes->push([ 'exportacao_id' => $dadosExportacao['exportacao']->id, 'data_atendimento' => $fichaProfissional->data_usuario_responsavel, 'usuario_id' => $fichaProfissional->usuario->id, 'ocupacao_id' => $fichaProfissional->ocupacao->id, 'equipe_id' => $fichaProfissional->equipe->id, 'atendimentos_individuais' => $dadosExportacao['atendimentos_individuais'], 'xml' => [ 'nome_arquivo' => 'AI_' . $dadosExportacao['exportacao']->uuid . '.esus.xml', 'conteudo' => $dadosExportacao['dom']->saveXml(), ], ]); } } return $exportacoes; } private static function getFichasProfissional($mes_ano, $somenteMesAno = true) { return AtendimentoIndividual::whereNull('exportacao_id') ->when($somenteMesAno, fn ($q) => $q->whereYear('data_usuario_responsavel', substr($mes_ano, 2)) ->whereMonth('data_usuario_responsavel', substr($mes_ano, 0, 2)), fn ($q) => $q->where(function ($q) use ($mes_ano) { $q->whereYear('data_usuario_responsavel', '>', substr($mes_ano, 2)) ->orWhere(function ($q) use ($mes_ano) { $q->whereYear('data_usuario_responsavel', substr($mes_ano, 2)) ->whereMonth('data_usuario_responsavel', '>=', substr($mes_ano, 0, 2)); }); }) ) ->groupBy([ 'usuario_id', 'equipe_id', 'usuario_ocupacao_id', 'data_usuario_responsavel' ]) ->get(); } private static function getIteracoesCount($fichaProfissional) { $count = AtendimentoIndividual::where('data_usuario_responsavel', $fichaProfissional->data_usuario_responsavel) ->where('usuario_id', $fichaProfissional->usuario_id) ->where('equipe_id', $fichaProfissional->equipe_id) ->where('usuario_ocupacao_id', $fichaProfissional->usuario_ocupacao_id) ->whereNull('exportacao_id') ->count(); return ceil($count / 99); } public static function getDadosExportacao($fichaProfissional, $exportacaoArquivoId = null, $usuarioId = null) { $atendimentosIndividuaisPosicoes = collect(); $uuid = ExportacaoService::getUuid($fichaProfissional->equipe->unidade->cnes); $exportacao = new Exportacao(); $exportacao->uuid = $uuid; $exportacao->exportacao_arquivo_id = $exportacaoArquivoId; $exportacao->save(); $dom = new DOMDocument('1.0', 'UTF-8'); $dadoTransporteTransportXml = $dom->createElementNS('http://esus.ufsc.br/dadotransporte', 'ns3:dadoTransporteTransportXml'); $dadoTransporteTransportXml->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:ns2', 'http://esus.ufsc.br/dadoinstalacao'); $dadoTransporteTransportXml->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:ns3', 'http://esus.ufsc.br/dadotransporte'); $dadoTransporteTransportXml->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:ns4', 'http://esus.ufsc.br/fichaatendimentoindividualmaster'); $dadoTransporteTransportXml->appendChild($dom->createElement('uuidDadoSerializado', $uuid)); $dadoTransporteTransportXml->appendChild($dom->createElement('tipoDadoSerializado', TipoDadoSerializado::ATENDIMENTO_INDIVIDUAL)); $dadoTransporteTransportXml->appendChild($dom->createElement('codIbge', $fichaProfissional->equipe->infraestrutura->endereco->logradouro->municipio->ibge)); $dadoTransporteTransportXml->appendChild($dom->createElement('cnesDadoSerializado', $fichaProfissional->equipe->unidade->cnes)); if($fichaProfissional->equipe->area->numero_ine){ $dadoTransporteTransportXml->appendChild($dom->createElement('ineDadoSerializado', $fichaProfissional->equipe->area->numero_ine)); } $fichaAtendimentoIndividualMasterTransport = $dom->createElement('ns4:fichaAtendimentoIndividualMasterTransport'); $dadoTransporteTransportXml->appendChild($fichaAtendimentoIndividualMasterTransport); $headerTransport = $dom->createElement('headerTransport'); $fichaAtendimentoIndividualMasterTransport->appendChild($headerTransport); $lotacaoFormPrincipal = $dom->createElement('lotacaoFormPrincipal'); $headerTransport->appendChild($lotacaoFormPrincipal); $lotacaoFormPrincipal->appendChild($dom->createElement('profissionalCNS', $fichaProfissional->usuario->cidadao->cns ?? '')); $lotacaoFormPrincipal->appendChild($dom->createElement('cboCodigo_2002', $fichaProfissional->ocupacao->codigo )); $lotacaoFormPrincipal->appendChild($dom->createElement('cnes', $fichaProfissional->equipe->unidade->cnes)); if($fichaProfissional->equipe->area->numero_ine){ $lotacaoFormPrincipal->appendChild($dom->createElement('ine', $fichaProfissional->equipe->area->numero_ine)); } if($fichaProfissional->usuario_auxiliar_id){ $lotacaoFormAtendimentoCompartilhado = $dom->createElement('lotacaoFormAtendimentoCompartilhado'); $headerTransport->appendChild($lotacaoFormAtendimentoCompartilhado); $lotacaoFormAtendimentoCompartilhado->appendChild($dom->createElement('profissionalCNS', $fichaProfissional->usuarioAuxiliar->cidadao->cns ?? '')); $lotacaoFormAtendimentoCompartilhado->appendChild($dom->createElement('cboCodigo_2002', $fichaProfissional->usuarioAuxiliarOcupacao->codigo ?? '')); $lotacaoFormAtendimentoCompartilhado->appendChild($dom->createElement('cnes', $fichaProfissional->usuarioAuxiliarEquipe->unidade->cnes)); if($fichaProfissional->usuarioAuxiliarEquipe->area->numero_ine){ $lotacaoFormAtendimentoCompartilhado->appendChild($dom->createElement('ine', $fichaProfissional->usuarioAuxiliarEquipe->area->numero_ine)); } } $headerTransport->appendChild($dom->createElement('dataAtendimento', strtotime($fichaProfissional->data_usuario_responsavel) * 1000)); $headerTransport->appendChild($dom->createElement('codigoIbgeMunicipio', $fichaProfissional->equipe->infraestrutura->endereco->logradouro->municipio->ibge)); $dom->appendChild($dadoTransporteTransportXml); $fichasAtendimentoIndividual = AtendimentoIndividual::where('data_usuario_responsavel', $fichaProfissional->data_usuario_responsavel) ->where('usuario_id', $fichaProfissional->usuario_id) ->where('equipe_id', $fichaProfissional->equipe_id) ->where('usuario_ocupacao_id', $fichaProfissional->usuario_ocupacao_id) ->whereNull('exportacao_id') ->take(99) ->get(); foreach ($fichasAtendimentoIndividual as $i => $fichaAtendimentoIndividual) { if(!$fichaAtendimentoIndividual->paciente){ continue; } $atendimentosIndividuaisPosicoes->push([ 'posicao' => $i + 1, 'id' => $fichaAtendimentoIndividual->id, ]); $atendimentosIndividuais = $dom->createElement('atendimentosIndividuais'); $fichaAtendimentoIndividualMasterTransport->appendChild($atendimentosIndividuais); if($fichaAtendimentoIndividual->paciente->prontuario){ $atendimentosIndividuais->appendChild($dom->createElement('numeroProntuario', $fichaAtendimentoIndividual->paciente->prontuario)); } if (Cns::isValid($fichaAtendimentoIndividual->paciente->cidadao->cns)) { $atendimentosIndividuais->appendChild($dom->createElement('cnsCidadao', $fichaAtendimentoIndividual->paciente->cidadao->cns ?? '')); } if (!Cns::isValid($fichaAtendimentoIndividual->paciente->cidadao->cns)) { $atendimentosIndividuais->appendChild($dom->createElement('cpfCidadao', $fichaAtendimentoIndividual->paciente->cidadao->cpf ?? '')); } $atendimentosIndividuais->appendChild($dom->createElement('dataNascimento', strtotime($fichaAtendimentoIndividual->paciente->cidadao->data_nascimento->format('Y-m-d')) * 1000)); $atendimentosIndividuais->appendChild($dom->createElement('localDeAtendimento', $fichaAtendimentoIndividual->local_atendimento_id)); $atendimentosIndividuais->appendChild($dom->createElement('sexo', self::sexo($fichaAtendimentoIndividual->paciente->cidadao->sexo->id))); $atendimentosIndividuais->appendChild($dom->createElement('turno', $fichaAtendimentoIndividual->turno_id)); $atendimentosIndividuais->appendChild($dom->createElement('tipoAtendimento', $fichaAtendimentoIndividual->tipoAtendimento->codigo_esus)); self::getMedicoes($dom, $fichaAtendimentoIndividual, $atendimentosIndividuais); if($fichaAtendimentoIndividual->aleitamento_materno_id){ $atendimentosIndividuais->appendChild($dom->createElement('aleitamentoMaterno', $fichaAtendimentoIndividual->aleitamentoMaterno->codigo_esus)); } if($fichaAtendimentoIndividual->paciente && $fichaAtendimentoIndividual->paciente->cidadao->sexo->id === Sexo::FEMININO){ if($fichaAtendimentoIndividual->data_ultima_menstruacao){ $atendimentosIndividuais->appendChild($dom->createElement('dumDaGestante', strtotime($fichaAtendimentoIndividual->data_ultima_menstruacao) * 1000)); } if($fichaAtendimentoIndividual->idade_gestacional_semanas){ $atendimentosIndividuais->appendChild($dom->createElement('idadeGestacional', $fichaAtendimentoIndividual->idade_gestacional_semanas)); } } if($fichaAtendimentoIndividual->modalidade_atencao_domiciliar_id){ $atendimentosIndividuais->appendChild($dom->createElement('atencaoDomiciliarModalidade', $fichaAtendimentoIndividual->modalidadeAtencaoDomiciliar->codigo_esus)); } self::getExame($dom, $fichaAtendimentoIndividual, $atendimentosIndividuais); if($fichaAtendimentoIndividual->vacinacao){ $atendimentosIndividuais->appendChild($dom->createElement('vacinaEmDia', $fichaAtendimentoIndividual->vacinacao ? 'true' : 'false')); } if($fichaAtendimentoIndividual->observacao){ $atendimentosIndividuais->appendChild($dom->createElement('ficouEmObservacao', $fichaAtendimentoIndividual->observacao ? 'true' : 'false')); } self::getEmultis($dom, $fichaAtendimentoIndividual, $atendimentosIndividuais); self::getConduta($dom, $fichaAtendimentoIndividual, $atendimentosIndividuais); if($fichaAtendimentoIndividual->paciente && $fichaAtendimentoIndividual->paciente->cidadao->sexo->id === Sexo::FEMININO){ if($fichaAtendimentoIndividual->gravidez_planejada){ $atendimentosIndividuais->appendChild($dom->createElement('stGravidezPlanejada', $fichaAtendimentoIndividual->gravidez_planejada ? 'true' : 'false')); } if($fichaAtendimentoIndividual->gestacao_previa){ $atendimentosIndividuais->appendChild($dom->createElement('nuGestasPrevias', $fichaAtendimentoIndividual->gestacao_previa)); } if($fichaAtendimentoIndividual->parto){ $atendimentosIndividuais->appendChild($dom->createElement('nuPartos', $fichaAtendimentoIndividual->parto)); } } if($fichaAtendimentoIndividual->racionalidade_saude_id){ $atendimentosIndividuais->appendChild($dom->createElement('racionalidadeSaude', $fichaAtendimentoIndividual->racionalidadeSaude->codigo_esus)); } $atendimentosIndividuais->appendChild($dom->createElement('dataHoraInicialAtendimento', strtotime($fichaAtendimentoIndividual->created_at) * 1000)); $timestamp = strtotime($fichaAtendimentoIndividual->created_at); $timestamp += 5 * 60; $timestampMillis = $timestamp * 1000; $dataHoraFinalAtendimento = $dom->createElement('dataHoraFinalAtendimento', $timestampMillis); $atendimentosIndividuais->appendChild($dataHoraFinalAtendimento); self::getCondicaoAvaliada($dom, $fichaAtendimentoIndividual, $atendimentosIndividuais); self::getSolicitacoesOci($dom, $fichaAtendimentoIndividual, $atendimentosIndividuais); self::getIvcf($dom, $fichaAtendimentoIndividual, $atendimentosIndividuais); $fichaAtendimentoIndividual->uuid_ficha = $uuid; $fichaAtendimentoIndividual->exportacao_id = $exportacao->id; $fichaAtendimentoIndividual->data_hora_exportacao = Carbon::now()->format('Y-m-d H:i:s'); $fichaAtendimentoIndividual->usuario_exportacao_id = $usuarioId ?? self::getCurrentLotacao()->usuario_id ?? null; retry(3, function() use ($fichaAtendimentoIndividual) { $fichaAtendimentoIndividual->save(); }, 200); } $fichaAtendimentoIndividualMasterTransport->appendChild($dom->createElement('tpCdsOrigem', '3')); $fichaAtendimentoIndividualMasterTransport->appendChild($dom->createElement('uuidFicha', $uuid)); ExportacaoService::elementRemetente($dom, $dadoTransporteTransportXml); ExportacaoService::elementOriginadora($dom, $dadoTransporteTransportXml); ExportacaoService::elementVersao($dom, $dadoTransporteTransportXml); return [ 'exportacao' => $exportacao, 'dom' => $dom, 'atendimentos_individuais' => $atendimentosIndividuaisPosicoes, ]; } private static function getMedicoes(&$dom, $fichaAtendimentoIndividual, &$atendimentosIndividuais){ $medicoesNecessarias = [ 'circunferencia_abdominal', 'perimetro_panturrilha', 'pressao_arterial', 'frequencia_respiratoria', 'frequencia_cardiaca', 'temperatura', 'saturacao_o2', 'glicemia', 'momento_coleta_id', 'peso', 'altura', 'perimetro_cefalico' ]; $existeMedicao = false; foreach ($medicoesNecessarias as $campo) { if (!empty($fichaAtendimentoIndividual->$campo)) { $existeMedicao = true; break; } } if ($existeMedicao) { $medicoes = $dom->createElement('medicoes'); $atendimentosIndividuais->appendChild($medicoes); if (!empty($fichaAtendimentoIndividual->circunferencia_abdominal)) { $medicoes->appendChild($dom->createElement('circunferenciaAbdominal', $fichaAtendimentoIndividual->circunferencia_abdominal)); } if (!empty($fichaAtendimentoIndividual->perimetro_panturrilha)) { $medicoes->appendChild($dom->createElement('perimetroPanturrilha', $fichaAtendimentoIndividual->perimetro_panturrilha)); } if (!empty($fichaAtendimentoIndividual->pressao_arterial)) { $pressao = explode('/', $fichaAtendimentoIndividual->pressao_arterial); if (count($pressao) === 2) { $medicoes->appendChild($dom->createElement('pressaoArterialSistolica', $pressao[0])); $medicoes->appendChild($dom->createElement('pressaoArterialDiastolica', $pressao[1])); } } if (!empty($fichaAtendimentoIndividual->frequencia_respiratoria)) { $medicoes->appendChild($dom->createElement('frequenciaRespiratoria', $fichaAtendimentoIndividual->frequencia_respiratoria)); } if (!empty($fichaAtendimentoIndividual->frequencia_cardiaca)) { $medicoes->appendChild($dom->createElement('frequenciaCardiaca', $fichaAtendimentoIndividual->frequencia_cardiaca)); } if (!empty($fichaAtendimentoIndividual->temperatura)) { $medicoes->appendChild($dom->createElement('temperatura', $fichaAtendimentoIndividual->temperatura)); } if (!empty($fichaAtendimentoIndividual->saturacao_o2)) { $medicoes->appendChild($dom->createElement('saturacaoO2', $fichaAtendimentoIndividual->saturacao_o2)); } if (!empty($fichaAtendimentoIndividual->glicemia)) { $medicoes->appendChild($dom->createElement('glicemiaCapilar', $fichaAtendimentoIndividual->glicemia)); } if (!empty($fichaAtendimentoIndividual->momento_coleta_id)) { $medicoes->appendChild($dom->createElement('tipoGlicemiaCapilar', $fichaAtendimentoIndividual->momentoColeta->codigo_esus)); } if (!empty($fichaAtendimentoIndividual->peso)) { $medicoes->appendChild($dom->createElement('peso', $fichaAtendimentoIndividual->peso)); } if (!empty($fichaAtendimentoIndividual->altura)) { $medicoes->appendChild($dom->createElement('altura', $fichaAtendimentoIndividual->altura)); } if (!empty($fichaAtendimentoIndividual->perimetro_cefalico)) { $medicoes->appendChild($dom->createElement('perimetroCefalico', $fichaAtendimentoIndividual->perimetro_cefalico)); } } } private static function getCondicaoAvaliada(&$dom, $fichaAtendimentoIndividual, &$atendimentosIndividuais){ $atendimentosCondicaoAvaliada = DB::table('atencao_basica_atendimento_individual_condicao_avaliada') ->select([ 'atencao_basica_cadastro_condicao_avaliada.id', 'atencao_basica_cadastro_condicao_avaliada.codigo_esus', 'atencao_basica_cadastro_condicao_avaliada.ativo', ]) ->join( 'atencao_basica_cadastro_condicao_avaliada', 'atencao_basica_cadastro_condicao_avaliada.id', 'atencao_basica_atendimento_individual_condicao_avaliada.condicao_avaliada_id' ) ->where('atencao_basica_atendimento_individual_condicao_avaliada.atendimento_individual_id', $fichaAtendimentoIndividual->id) ->get(); foreach ($atendimentosCondicaoAvaliada as $condicaoAvaliada) { if ($condicaoAvaliada->ativo === 1) { $problemaCondicaoAvaliada = $dom->createElement('problemasCondicoes'); $atendimentosIndividuais->appendChild($problemaCondicaoAvaliada); $problemaCondicaoAvaliada->appendChild($dom->createElement('ciap', $condicaoAvaliada->codigo_esus)); $problemaCondicaoAvaliada->appendChild($dom->createElement('isAvaliado', 'true')); } else { $ciap = Ciap::where('id', self::getCiapFromCondicaoAvaliada($condicaoAvaliada->id))->first() ?? null; if ($ciap) { $problemaCondicaoAvaliada = $dom->createElement('problemasCondicoes'); $atendimentosIndividuais->appendChild($problemaCondicaoAvaliada); $problemaCondicaoAvaliada->appendChild($dom->createElement('ciap', $ciap->codigo)); $problemaCondicaoAvaliada->appendChild($dom->createElement('isAvaliado', 'true')); } } } $atendimentosDoencaTransmissivel = DB::table('atencao_basica_atendimento_individual_doenca_transmissivel') ->select([ 'atencao_basica_cadastro_doenca_transmissivel.id', 'atencao_basica_cadastro_doenca_transmissivel.codigo_esus', 'atencao_basica_cadastro_doenca_transmissivel.ativo', ]) ->join( 'atencao_basica_cadastro_doenca_transmissivel', 'atencao_basica_cadastro_doenca_transmissivel.id', 'atencao_basica_atendimento_individual_doenca_transmissivel.doenca_transmissivel_id' ) ->where('atencao_basica_atendimento_individual_doenca_transmissivel.atendimento_individual_id', $fichaAtendimentoIndividual->id) ->get(); foreach ($atendimentosDoencaTransmissivel as $doencaTransmisivel) { if ($doencaTransmisivel->ativo === 1) { $problemaDoencaTransmisivel = $dom->createElement('problemasCondicoes'); $atendimentosIndividuais->appendChild($problemaDoencaTransmisivel); $problemaDoencaTransmisivel->appendChild($dom->createElement('ciap', $doencaTransmisivel->codigo_esus)); $problemaDoencaTransmisivel->appendChild($dom->createElement('isAvaliado', 'true')); } else { $ciap = Ciap::where('id', self::getCiapFromDoencaTransmissivel($doencaTransmisivel->id))->first() ?? null; if ($ciap) { $problemaDoencaTransmisivel = $dom->createElement('problemasCondicoes'); $atendimentosIndividuais->appendChild($problemaDoencaTransmisivel); $problemaDoencaTransmisivel->appendChild($dom->createElement('ciap', $ciap->codigo)); $problemaDoencaTransmisivel->appendChild($dom->createElement('isAvaliado', 'true')); } } } $atendimentosRastreamentos = DB::table('atencao_basica_atendimento_individual_rastreamento') ->select([ 'atencao_basica_cadastro_rastreamento.id', 'atencao_basica_cadastro_rastreamento.codigo_esus', 'atencao_basica_cadastro_rastreamento.ativo', ]) ->join( 'atencao_basica_cadastro_rastreamento', 'atencao_basica_cadastro_rastreamento.id', 'atencao_basica_atendimento_individual_rastreamento.rastreamento_id' ) ->where('atencao_basica_atendimento_individual_rastreamento.atendimento_individual_id', $fichaAtendimentoIndividual->id) ->get(); foreach ($atendimentosRastreamentos as $rastreamento) { if ($rastreamento->ativo === 1) { $problemaRastreamento = $dom->createElement('problemasCondicoes'); $atendimentosIndividuais->appendChild($problemaRastreamento); $problemaRastreamento->appendChild($dom->createElement('ciap', $rastreamento->codigo_esus)); $problemaRastreamento->appendChild($dom->createElement('isAvaliado', 'true')); } else { $ciap = Ciap::where('id', self::getCiapFromRastreamento($rastreamento->id))->first() ?? null; if ($ciap) { $problemaRastreamento = $dom->createElement('problemasCondicoes'); $atendimentosIndividuais->appendChild($problemaRastreamento); $problemaRastreamento->appendChild($dom->createElement('ciap', $ciap->codigo)); $problemaRastreamento->appendChild($dom->createElement('isAvaliado', 'true')); } } } DB::table('atencao_basica_atendimento_individual_problema_condicao') ->select([ DB::raw('COALESCE(uuid_inicial_problema_condicao, uuid_evolucao) AS uuid_inicial_problema_condicao'), 'uuid_evolucao', 'sequencial_evolucao', 'geral_ciap.codigo AS ciap_codigo', 'cid.codigo AS cid_codigo', 'ambulatorio_problema_condicao_situacao.codigo_esus AS situacao_codigo', 'inicio', 'fim', ]) ->leftJoin('ambulatorio_problema_condicao_situacao', 'ambulatorio_problema_condicao_situacao.id', 'atencao_basica_atendimento_individual_problema_condicao.situacao_id') ->leftJoin('geral_ciap', 'geral_ciap.id', 'atencao_basica_atendimento_individual_problema_condicao.ciap_id') ->leftJoin('sigtap.cid', 'cid.id', 'atencao_basica_atendimento_individual_problema_condicao.cid_id') ->where('atendimento_individual_id', $fichaAtendimentoIndividual->id) ->get() ->each(function ($problemaCondicao) use ($dom, &$atendimentosIndividuais) { $problemaCondicaoAvaliada = $dom->createElement('problemasCondicoes'); $atendimentosIndividuais->appendChild($problemaCondicaoAvaliada); if (!is_null($problemaCondicao->situacao_codigo)) { $problemaCondicaoAvaliada->appendChild($dom->createElement('uuidProblema', $problemaCondicao->uuid_inicial_problema_condicao)); $problemaCondicaoAvaliada->appendChild($dom->createElement('uuidEvolucaoProblema', $problemaCondicao->uuid_evolucao)); $problemaCondicaoAvaliada->appendChild($dom->createElement('coSequencialEvolucao', $problemaCondicao->sequencial_evolucao)); } if (!is_null($problemaCondicao->ciap_codigo)) { $problemaCondicaoAvaliada->appendChild($dom->createElement('ciap', $problemaCondicao->ciap_codigo)); } if (!is_null($problemaCondicao->cid_codigo)) { $problemaCondicaoAvaliada->appendChild($dom->createElement('cid10', $problemaCondicao->cid_codigo)); } if (!is_null($problemaCondicao->situacao_codigo)) { $problemaCondicaoAvaliada->appendChild($dom->createElement('situacao', $problemaCondicao->situacao_codigo)); $problemaCondicaoAvaliada->appendChild($dom->createElement('dataInicioProblema', strtotime($problemaCondicao->inicio) * 1000)); if ($problemaCondicao->situacao_codigo === SituacaoCodigoEsus::LATENTE || $problemaCondicao->situacao_codigo === SituacaoCodigoEsus::RESOLVIDO) { $problemaCondicaoAvaliada->appendChild($dom->createElement('dataFimProblema', strtotime($problemaCondicao->fim) * 1000)); } } $problemaCondicaoAvaliada->appendChild($dom->createElement('isAvaliado', 'true')); }); } private static function getCiapFromCondicaoAvaliada($condicaoAvaliada) { $map = [ CondicaoAvaliada::ASMA => CiapCondicaoAvaliada::ASMA, CondicaoAvaliada::DESNUTRICAO => CiapCondicaoAvaliada::DESNUTRICAO, CondicaoAvaliada::DIABETES => CiapCondicaoAvaliada::DIABETES, CondicaoAvaliada::DPOC => CiapCondicaoAvaliada::DPOC, CondicaoAvaliada::HIPERTENSAO_ARTERIAL => CiapCondicaoAvaliada::HIPERTENSAO_ARTERIAL, CondicaoAvaliada::OBESIDADE => CiapCondicaoAvaliada::OBESIDADE, CondicaoAvaliada::PRE_NATAL => CiapCondicaoAvaliada::PRE_NATAL, CondicaoAvaliada::PUERICULTURA => CiapCondicaoAvaliada::PUERICULTURA, CondicaoAvaliada::PUERPERIO_ATE_42_DIAS => CiapCondicaoAvaliada::PUERPERIO, CondicaoAvaliada::REABILITACAO => CiapCondicaoAvaliada::REABILITACAO, CondicaoAvaliada::TABAGISMO => CiapCondicaoAvaliada::TABAGISMO, CondicaoAvaliada::USUARIO_DE_ALCOOL => CiapCondicaoAvaliada::USUARIO_DE_ALCOOL, CondicaoAvaliada::USUARIO_DE_OUTRAS_DROGAS => CiapCondicaoAvaliada::USUARIO_DE_OUTRAS_DROGAS, ]; return $map[$condicaoAvaliada] ?? null; } private static function getCiapFromDoencaTransmissivel($doencaTransmissivel) { $map = [ DoencaTransmissivel::DENGUE => CiapCondicaoAvaliada::DENGUE, DoencaTransmissivel::DST => CiapCondicaoAvaliada::DST, DoencaTransmissivel::HANSENIASE => CiapCondicaoAvaliada::HANSENIASE, DoencaTransmissivel::TUBERCULOSE => CiapCondicaoAvaliada::TUBERCULOSE, ]; return $map[$doencaTransmissivel] ?? null; } private static function getCiapFromRastreamento($rastreamento) { $map = [ Rastreamento::RISCO_CARDIOVASCULAR => CiapCondicaoAvaliada::RASTREAMENTO_DE_RISCO_CARDIOVASCULAR, ]; return $map[$rastreamento] ?? null; } private static function getSolicitacoesOci(&$dom, $fichaAtendimentoIndividual, &$atendimentosIndividuais) { $atendimentoIndividualProcedimentos = DB::table('atencao_basica_procedimento_atendimento_procedimento') ->select(['procedimento.codigo']) ->join('sigtap.procedimento', 'procedimento.id', 'atencao_basica_procedimento_atendimento_procedimento.procedimento_id') ->join('atencao_basica_procedimento_atendimento', 'atencao_basica_procedimento_atendimento.id', 'atencao_basica_procedimento_atendimento_procedimento.procedimento_atendimento_id') ->where('atencao_basica_procedimento_atendimento.atendimento_individual_id', $fichaAtendimentoIndividual->id) ->where('procedimento.codigo', 'LIKE', '09%') ->get(); foreach ($atendimentoIndividualProcedimentos as $procedimento) { $solicitacoesOci = $dom->createElement('solicitacoesOci'); $atendimentosIndividuais->appendChild($solicitacoesOci); $solicitacoesOci->appendChild($dom->createElement('codigoSigtap', $procedimento->codigo)); } } private static function getOutroCiap($ciap_primario_id){ $ciap_primario_id = DB::table('geral_ciap') ->select( 'geral_ciap.codigo', ) ->where('geral_ciap.id', $ciap_primario_id) ->first(); return $ciap_primario_id->codigo; } private static function getExame(&$dom, $fichaAtendimentoIndividual, &$atendimentosIndividuais){ $atendimentosExame = DB::table('atencao_basica_atendimento_individual_exame_solicitado_avaliado') ->select([ 'atencao_basica_cadastro_exame_solicitado_avaliado.codigo_esus', 'atencao_basica_cadastro_exame_solicitado_avaliado.codigo_procedimento', 'atencao_basica_atendimento_individual_exame_solicitado_avaliado.solicitado', 'atencao_basica_atendimento_individual_exame_solicitado_avaliado.avaliado', ]) ->join( 'atencao_basica_cadastro_exame_solicitado_avaliado', 'atencao_basica_cadastro_exame_solicitado_avaliado.id', 'atencao_basica_atendimento_individual_exame_solicitado_avaliado.exame_solicitado_avaliado_id' ) ->where('atencao_basica_atendimento_individual_exame_solicitado_avaliado.atendimento_individual_id', $fichaAtendimentoIndividual->id) ->get(); foreach ($atendimentosExame as $examesSolicitadosAvaliados) { if($examesSolicitadosAvaliados->codigo_esus){ $codigoExameSolicitado = $examesSolicitadosAvaliados->codigo_esus; }else{ $codigoExameSolicitado = $examesSolicitadosAvaliados->codigo_procedimento; } if($codigoExameSolicitado){ $exame = $dom->createElement('exame'); $atendimentosIndividuais->appendChild($exame); $exame->appendChild($dom->createElement('codigoExame', $codigoExameSolicitado)); if($examesSolicitadosAvaliados->avaliado === 1){ $exame->appendChild($dom->createElement('solicitadoAvaliado', "A")); } if($examesSolicitadosAvaliados->solicitado === 1){ $exame->appendChild($dom->createElement('solicitadoAvaliado', "S")); } } } $codigoProcedimento = $atendimentosExame->pluck('codigo_procedimento')->toArray(); $atendimentosOutrosExame = DB::table('atencao_basica_atendimento_individual_outro_exame') ->select([ 'parametrizacao_exame.codigo', 'atencao_basica_atendimento_individual_outro_exame.solicitado', 'atencao_basica_atendimento_individual_outro_exame.avaliado', ]) ->join('parametrizacao_exame', 'parametrizacao_exame.id', 'atencao_basica_atendimento_individual_outro_exame.exame_id') ->where('atencao_basica_atendimento_individual_outro_exame.atendimento_individual_id', $fichaAtendimentoIndividual->id) ->whereNotIn('parametrizacao_exame.codigo', $codigoProcedimento) ->distinct() ->get(); foreach ($atendimentosOutrosExame as $outrosExamesSolicitadosAvaliados) { if($outrosExamesSolicitadosAvaliados->codigo){ $exame = $dom->createElement('exame'); $atendimentosIndividuais->appendChild($exame); $exame->appendChild($dom->createElement('codigoExame', $outrosExamesSolicitadosAvaliados->codigo)); if($outrosExamesSolicitadosAvaliados->avaliado){ $exame->appendChild($dom->createElement('solicitadoAvaliado', "A")); } if($outrosExamesSolicitadosAvaliados->solicitado){ $exame->appendChild($dom->createElement('solicitadoAvaliado', "S")); } } } } private static function getConduta(&$dom, $fichaAtendimentoIndividual, &$atendimentosIndividuais){ $atendimentosConduta = DB::table('atencao_basica_atendimento_individual_conduta') ->select([ 'atencao_basica_cadastro_conduta.codigo_esus', ]) ->join('atencao_basica_cadastro_conduta', 'atencao_basica_cadastro_conduta.id', 'atencao_basica_atendimento_individual_conduta.conduta_id') ->where('atencao_basica_atendimento_individual_conduta.atendimento_individual_id', $fichaAtendimentoIndividual->id) ->whereNotIn('atencao_basica_cadastro_conduta.id', [ AtendimentoIndividualConduta::AGENDAMENTO_PARA_NASF, AtendimentoIndividualConduta::TRATAMENTO_CONCLUIDO, ]) ->get(); foreach ($atendimentosConduta as $conduta) { $atendimentosIndividuais->appendChild($dom->createElement('condutas', $conduta->codigo_esus)); } $atendimentosEcaminhamento = DB::table('atencao_basica_atendimento_individual_encaminhamento') ->select([ 'atencao_basica_cadastro_encaminhamento.codigo_esus', ]) ->join('atencao_basica_cadastro_encaminhamento', 'atencao_basica_cadastro_encaminhamento.id', 'atencao_basica_atendimento_individual_encaminhamento.encaminhamento_id') ->where('atencao_basica_atendimento_individual_encaminhamento.atendimento_individual_id', $fichaAtendimentoIndividual->id) ->get(); foreach ($atendimentosEcaminhamento as $encaminhamento) { $atendimentosIndividuais->appendChild($dom->createElement('condutas', $encaminhamento->codigo_esus)); } } private static function getEmultis(&$dom, $fichaAtendimentoIndividual, &$atendimentosIndividuais){ $atendimentosEmultis = DB::table('atencao_basica_atendimento_individual_nasf') ->select([ 'atencao_basica_cadastro_nasf.codigo_esus', ]) ->join('atencao_basica_cadastro_nasf', 'atencao_basica_cadastro_nasf.id', 'atencao_basica_atendimento_individual_nasf.nasf_id') ->where('atencao_basica_atendimento_individual_nasf.atendimento_individual_id', $fichaAtendimentoIndividual->id) ->get(); foreach ($atendimentosEmultis as $emulti) { $atendimentosIndividuais->appendChild($dom->createElement('emultis', $emulti->codigo_esus)); } } private static function sexo($sexo_id) { $sexo = null; if ($sexo_id === Sexo::MASCULINO) { $sexo = ExportacaoSexo::MASCULINO; } else if ($sexo_id === Sexo::FEMININO) { $sexo = ExportacaoSexo::FEMININO; } else if ($sexo_id === Sexo::INDETERMINADO) { $sexo = ExportacaoSexo::INDETERMINADO; } else { $sexo = ExportacaoSexo::IGNORADO; } return $sexo; } private static function getIvcf(&$dom, $fichaAtendimentoIndividual, &$atendimentosIndividuais) { $atendimentoIndividualIvcf = AtendimentoIndividualIvcf::where('atendimento_individual_id', $fichaAtendimentoIndividual->id)->first(); if ($atendimentoIndividualIvcf) { $pacienteIdade = $atendimentoIndividualIvcf->atendimentoIndividual->paciente->cidadao->idade['anos'] ?? null; $resultado = null; $hasSgIdade = true; $hasSgPercepcaoSaude = false; $hasSgAvdInstrumental = false; $hasSgAvdBasica = false; $hasSgCognicao = false; $hasSgHumor = false; $hasSgAlcancePreensaoPinca = false; $hasSgCapAerobicaMuscular = false; $hasSgMarcha = false; $hasSgContinencia = false; $hasSgVisao = false; $hasSgAudicao = false; $hasSgComorbidade = false; $dataResultado = strtotime($atendimentoIndividualIvcf->updated_at) * 1000; if ($pacienteIdade >= 75 && $pacienteIdade <= 84) { $resultado += 1; } else if ($pacienteIdade >= 85) { $resultado += 3; } if ($atendimentoIndividualIvcf->estado_saude_geral === 'regular_ou_ruim') { $resultado += 1; $hasSgPercepcaoSaude = true; } if ($atendimentoIndividualIvcf->limitacao_compras || $atendimentoIndividualIvcf->limitacao_gestao_financeira || $atendimentoIndividualIvcf->limitacao_tarefas_domesticas) { $resultado += 4; $hasSgAvdInstrumental = true; } if ($atendimentoIndividualIvcf->banho_independencia) { $resultado += 6; $hasSgAvdBasica = true; } if ($atendimentoIndividualIvcf->relato_esquecimento_por_terceiros) { $resultado += 1; $hasSgCognicao = true; } if ($atendimentoIndividualIvcf->esquecimento_piorando) { $resultado += 1; $hasSgCognicao = true; } if ($atendimentoIndividualIvcf->esquecimento_impacta_atividades) { $resultado += 2; $hasSgCognicao = true; } if ($atendimentoIndividualIvcf->humor_tristeza_desanimo) { $resultado += 2; $hasSgHumor = true; } if ($atendimentoIndividualIvcf->perda_interesse_atividades) { $resultado += 2; $hasSgHumor = true; } if ($atendimentoIndividualIvcf->limitacao_elevar_bracos) { $resultado += 1; $hasSgAlcancePreensaoPinca = true; } if ($atendimentoIndividualIvcf->limitacao_motricidade_fina) { $resultado += 1; $hasSgAlcancePreensaoPinca = true; } if ($atendimentoIndividualIvcf->perda_peso_nao_intencional || $atendimentoIndividualIvcf->imc_abaixo_22 || $atendimentoIndividualIvcf->panturrilha_abaixo_31 || $atendimentoIndividualIvcf->marcha_lenta_4m_maior_5s) { $resultado += 2; $hasSgCapAerobicaMuscular = true; } if ($atendimentoIndividualIvcf->dificuldade_caminhar_impacto_atividades) { $resultado += 2; $hasSgMarcha = true; } if ($atendimentoIndividualIvcf->quedas_recorrentes) { $resultado += 2; $hasSgMarcha = true; } if ($atendimentoIndividualIvcf->incontinencia) { $resultado += 2; $hasSgContinencia = true; } if ($atendimentoIndividualIvcf->problema_visao_impacto_atividades) { $resultado += 2; $hasSgVisao = true; } if ($atendimentoIndividualIvcf->problema_audicao_impacto_atividades) { $resultado += 2; $hasSgAudicao = true; } if ($atendimentoIndividualIvcf->doencas_cronicas_multiplas || $atendimentoIndividualIvcf->polifarmacia_5_ou_mais_medicamentos || $atendimentoIndividualIvcf->internacao_ultimos_6_meses) { $resultado += 4; $hasSgComorbidade = true; } $ivcf = $dom->createElement('ivcf'); $atendimentosIndividuais->appendChild($ivcf); $ivcf->appendChild($dom->createElement('resultado', $resultado)); $ivcf->appendChild($dom->createElement('hasSgIdade', $hasSgIdade ? 'true' : 'false')); $ivcf->appendChild($dom->createElement('hasSgPercepcaoSaude', $hasSgPercepcaoSaude ? 'true' : 'false')); $ivcf->appendChild($dom->createElement('hasSgAvdInstrumental', $hasSgAvdInstrumental ? 'true' : 'false')); $ivcf->appendChild($dom->createElement('hasSgAvdBasica', $hasSgAvdBasica ? 'true' : 'false')); $ivcf->appendChild($dom->createElement('hasSgCognicao', $hasSgCognicao ? 'true' : 'false')); $ivcf->appendChild($dom->createElement('hasSgHumor', $hasSgHumor ? 'true' : 'false')); $ivcf->appendChild($dom->createElement('hasSgAlcancePreensaoPinca', $hasSgAlcancePreensaoPinca ? 'true' : 'false')); $ivcf->appendChild($dom->createElement('hasSgCapAerobicaMuscular', $hasSgCapAerobicaMuscular ? 'true' : 'false')); $ivcf->appendChild($dom->createElement('hasSgMarcha', $hasSgMarcha ? 'true' : 'false')); $ivcf->appendChild($dom->createElement('hasSgContinencia', $hasSgContinencia ? 'true' : 'false')); $ivcf->appendChild($dom->createElement('hasSgVisao', $hasSgVisao ? 'true' : 'false')); $ivcf->appendChild($dom->createElement('hasSgAudicao', $hasSgAudicao ? 'true' : 'false')); $ivcf->appendChild($dom->createElement('hasSgComorbidade', $hasSgComorbidade ? 'true' : 'false')); $ivcf->appendChild($dom->createElement('dataResultado', $dataResultado)); } } }