mes_ano; foreach (self::getFichasAtividade($mes_ano) as $fichaAtividade) { $dadosExportacao = self::getDadosExportacao($fichaAtividade, $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, 'AC_' . $dadosExportacao['exportacao']->uuid . '.esus.xml'); $zip->close(); unlink($xmlPath); } } public static function gerarExportacoes($mesAnoInicial) { $exportacoes = collect(); foreach (self::getFichasAtividade($mesAnoInicial, false) as $fichaAtividade) { $dadosExportacao = self::getDadosExportacao($fichaAtividade); $exportacoes->push([ 'exportacao_id' => $dadosExportacao['exportacao']->id, 'data_atendimento' => $fichaAtividade->data_usuario_responsavel, 'usuario_id' => $fichaAtividade->usuario->id, 'ocupacao_id' => $fichaAtividade->ocupacao->id, 'equipe_id' => $fichaAtividade->equipe->id, 'atividade_coletiva_id' => $fichaAtividade->id, 'atividade_coletiva_participantes' => $dadosExportacao['atividade_coletiva_participantes'], 'xml' => [ 'nome_arquivo' => 'AC_' . $dadosExportacao['exportacao']->uuid . '.esus.xml', 'conteudo' => $dadosExportacao['dom']->saveXml(), ] ]); } return $exportacoes; } private static function getFichasAtividade($mes_ano, $somenteMesAno = true) { return AtividadeColetiva::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)); }); }) ) ->get(); } private static function getDadosExportacao($fichaAtividade, $exportacaoArquivoId = null, $usuarioId = null) { $atividadeColetivaParticipantesPosicoes = collect(); $uuid = ExportacaoService::getUuid($fichaAtividade->equipe->unidade->cnes); $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/fichaatividadecoletiva'); $dadoTransporteTransportXml->appendChild($dom->createElement('uuidDadoSerializado', $uuid)); $dadoTransporteTransportXml->appendChild($dom->createElement('tipoDadoSerializado', TipoDadoSerializado::ATIVIDADE_COLETIVA)); $dadoTransporteTransportXml->appendChild($dom->createElement('codIbge', $fichaAtividade->equipe->infraestrutura->endereco->logradouro->municipio->ibge)); $dadoTransporteTransportXml->appendChild($dom->createElement('cnesDadoSerializado', $fichaAtividade->equipe->unidade->cnes)); if ($fichaAtividade->equipe->area->numero_ine) { $dadoTransporteTransportXml->appendChild($dom->createElement('ineDadoSerializado', $fichaAtividade->equipe->area->numero_ine)); } $fichaAtividadeColetivaTransport = $dom->createElement('ns4:fichaAtividadeColetivaTransport'); $dadoTransporteTransportXml->appendChild($fichaAtividadeColetivaTransport); $fichaAtividadeColetivaTransport->appendChild($dom->createElement('uuidFicha', $uuid)); if ($fichaAtividade->inep == null) { $fichaAtividadeColetivaTransport->appendChild($dom->createElement('outraLocalidade', $fichaAtividade->local_atividade)); } if ($fichaAtividade->inep != null) { $fichaAtividadeColetivaTransport->appendChild($dom->createElement('inep', $fichaAtividade->inep)); } $fichaAtividadeColetivaTransport->appendChild($dom->createElement('numParticipantes', $fichaAtividade->total_participantes)); if($fichaAtividade->avaliacoes_alteradas != null){ $fichaAtividadeColetivaTransport->appendChild($dom->createElement('numAvaliacoesAlteradas', $fichaAtividade->avaliacoes_alteradas)); } if ($fichaAtividade->pse_id == Pse::SAUDE) { $profissionais = $dom->createElement('profissionais'); $fichaAtividadeColetivaTransport->appendChild($profissionais); $profissionais->appendChild($dom->createElement('cnsProfissional', $fichaAtividade->usuario->cidadao->cns ?? '')); $profissionais->appendChild($dom->createElement('codigoCbo2002', $fichaAtividade->ocupacao->codigo ?? '')); self::getProfissionais($dom, $fichaAtividade, $fichaAtividadeColetivaTransport); } $fichaAtividadeColetivaTransport->appendChild($dom->createElement('atividadeTipo', $fichaAtividade->atividadeTipo->id ?? '')); if ($fichaAtividade->pse_id != Pse::EDUCACAO && $fichaAtividade->atividadeTipo->id <= 3) { self::getTemasReuniao($dom, $fichaAtividade, $fichaAtividadeColetivaTransport); } self::getPublicoAlvo($dom, $fichaAtividade, $fichaAtividadeColetivaTransport); foreach ($fichaAtividade->participantes as $i => $participante) { $atividadeColetivaParticipantesPosicoes->push([ 'posicao' => $i + 1, 'id' => $participante->id, ]); $participantes = $dom->createElement('participantes'); $fichaAtividadeColetivaTransport->appendChild($participantes); if (Cns::isValid($participante->paciente()->withTrashed()->first()->cidadao->cns)) { $participantes->appendChild($dom->createElement('cnsParticipante', $participante->paciente()->withTrashed()->first()->cidadao->cns ?? '')); } if (!Cns::isValid($participante->paciente()->withTrashed()->first()->cidadao->cns)) { $participantes->appendChild($dom->createElement('cpfParticipante', $participante->paciente()->withTrashed()->first()->cidadao->cpf ?? '')); } $participantes->appendChild($dom->createElement('dataNascimento', strtotime($participante->paciente()->withTrashed()->first()->cidadao->data_nascimento->format('Y-m-d')) * 1000)); $participantes->appendChild($dom->createElement('avaliacaoAlterada', $participante->avaliacao_alterada ? 'true' : 'false')); if($participante->peso != null){ $participantes->appendChild($dom->createElement('peso', $participante->peso)); } if($participante->altura != null){ $participantes->appendChild($dom->createElement('altura', $participante->altura)); } $ids = [ PraticasEmSaude::PROGRAMA_NACIONAL_DE_CONTROLE_DO_TABAGISMO_1, PraticasEmSaude::PROGRAMA_NACIONAL_DE_CONTROLE_DO_TABAGISMO_2, PraticasEmSaude::PROGRAMA_NACIONAL_DE_CONTROLE_DO_TABAGISMO_3, PraticasEmSaude::PROGRAMA_NACIONAL_DE_CONTROLE_DO_TABAGISMO_4 ]; $existe = array_intersect( $fichaAtividade->saudePratica->all(), $ids); if (!empty($existe)) { $participantes->appendChild($dom->createElement('cessouHabitoFumar', $participante->parou_de_fumar ? 'true' : 'false')); $participantes->appendChild($dom->createElement('abandonouGrupo', $participante->abandonou_grupo ? 'true' : 'false')); } $participantes->appendChild($dom->createElement('sexo', self::sexo($participante->paciente->cidadao->sexo->id ?? null))); } $fichaAtividadeColetivaTransport->appendChild($dom->createElement('tbCdsOrigem', '3')); if ($fichaAtividade->inep == null && $fichaAtividade->local_atividade == null) { $fichaAtividadeColetivaTransport->appendChild($dom->createElement('cnesLocalAtividade', $fichaAtividade->cnes)); } $fichaAtividadeColetivaTransport->appendChild($dom->createElement('turno', $fichaAtividade->turno_id)); $fichaAtividadeColetivaTransport->appendChild($dom->createElement('pseEducacao', $fichaAtividade->pse_id == Pse::EDUCACAO ? 'true' : 'false')); $fichaAtividadeColetivaTransport->appendChild($dom->createElement('pseSaude', $fichaAtividade->pse_id == Pse::SAUDE ? 'true' : 'false')); $headerTransport = $dom->createElement('headerTransport'); $fichaAtividadeColetivaTransport->appendChild($headerTransport); $headerTransport->appendChild($dom->createElement('profissionalCNS', $fichaAtividade->usuario->cidadao->cns ?? '')); $headerTransport->appendChild($dom->createElement('cboCodigo_2002', $fichaAtividade->ocupacao->codigo)); $headerTransport->appendChild($dom->createElement('cnes', $fichaAtividade->equipe->unidade->cnes)); if ($fichaAtividade->equipe->area->numero_ine) { $headerTransport->appendChild($dom->createElement('ine', $fichaAtividade->equipe->area->numero_ine)); } $headerTransport->appendChild($dom->createElement('dataAtendimento', strtotime($fichaAtividade->data_usuario_responsavel) * 1000)); $headerTransport->appendChild($dom->createElement('codigoIbgeMunicipio', $fichaAtividade->equipe->infraestrutura->endereco->logradouro->municipio->ibge)); self::getTemasSaude($dom, $fichaAtividade, $fichaAtividadeColetivaTransport); self::getPraticasSaude($dom, $fichaAtividade, $fichaAtividadeColetivaTransport); $dom->appendChild($dadoTransporteTransportXml); ExportacaoService::elementRemetente($dom, $dadoTransporteTransportXml); ExportacaoService::elementOriginadora($dom, $dadoTransporteTransportXml); ExportacaoService::elementVersao($dom, $dadoTransporteTransportXml); $exportacao = new Exportacao(); $exportacao->uuid = $uuid; $exportacao->exportacao_arquivo_id = $exportacaoArquivoId; $exportacao->save(); $fichaAtividade->uuid_ficha = $uuid; $fichaAtividade->exportacao_id = $exportacao->id; $fichaAtividade->data_hora_exportacao = Carbon::now()->format('Y-m-d H:i:s'); $fichaAtividade->usuario_exportacao_id = $usuarioId ?? self::getCurrentLotacao()->usuario_id ?? null; $fichaAtividade->save(); return [ 'exportacao' => $exportacao, 'dom' => $dom, 'atividade_coletiva_participantes' => $atividadeColetivaParticipantesPosicoes, ]; } 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 getPublicoAlvo(&$dom, $fichaAtividade, &$fichaAtividadeColetivaTransport){ $publicoAlvo = DB::table('atencao_basica_atividade_coletiva_publico_alvo') ->select([ 'atencao_basica_atividade_coletiva_publico_alvo.publico_alvo_id', ]) ->where('atencao_basica_atividade_coletiva_publico_alvo.atividade_coletiva_id', $fichaAtividade->id) ->get(); foreach ($publicoAlvo as $publico) { $fichaAtividadeColetivaTransport->appendChild($dom->createElement('publicoAlvo', $publico->publico_alvo_id)); } } private static function getTemasReuniao(&$dom, $fichaAtividade, &$fichaAtividadeColetivaTransport){ $temasReuniao = DB::table('atencao_basica_atividade_coletiva_reuniao_tema') ->select([ 'atencao_basica_atividade_coletiva_reuniao_tema.reuniao_tema_id', ]) ->where('atencao_basica_atividade_coletiva_reuniao_tema.atividade_coletiva_id', $fichaAtividade->id) ->get(); foreach ($temasReuniao as $tema) { $fichaAtividadeColetivaTransport->appendChild($dom->createElement('temasParaReuniao', $tema->reuniao_tema_id)); } } private static function getTemasSaude(&$dom, $fichaAtividade, &$fichaAtividadeColetivaTransport){ $temasSaude = DB::table('atencao_basica_atividade_coletiva_saude_tema') ->select([ 'atencao_basica_atividade_coletiva_saude_tema.saude_tema_id', ]) ->where('atencao_basica_atividade_coletiva_saude_tema.atividade_coletiva_id', $fichaAtividade->id) ->get(); foreach ($temasSaude as $tema) { $fichaAtividadeColetivaTransport->appendChild($dom->createElement('temasParaSaude', $tema->saude_tema_id)); } } private static function getPraticasSaude(&$dom, $fichaAtividade, &$fichaAtividadeColetivaTransport){ $praticasSaude = DB::table('atencao_basica_atividade_coletiva_saude_pratica') ->select([ 'atencao_basica_atividade_coletiva_saude_pratica.saude_pratica_id', ]) ->where('atencao_basica_atividade_coletiva_saude_pratica.atividade_coletiva_id', $fichaAtividade->id) ->get(); foreach ($praticasSaude as $pratica) { $fichaAtividadeColetivaTransport->appendChild($dom->createElement('praticasEmSaude', $pratica->saude_pratica_id)); } } private static function getProfissionais(&$dom, $fichaAtividade, &$fichaAtividadeColetivaTransport){ $profissionais = DB::table('atencao_basica_atividade_coletiva_profissional') ->select([ 'cadastro_cidadao.cns', 'sigtap.ocupacao.codigo', ]) ->join('sigtap.ocupacao', 'sigtap.ocupacao.id', 'atencao_basica_atividade_coletiva_profissional.usuario_ocupacao_id') ->join('cadastro_usuario', 'cadastro_usuario.id', 'atencao_basica_atividade_coletiva_profissional.usuario_id') ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id') ->where('atencao_basica_atividade_coletiva_profissional.atividade_coletiva_id', $fichaAtividade->id) ->get(); foreach ($profissionais as $profissional) { $profissionais = $dom->createElement('profissionais'); $fichaAtividadeColetivaTransport->appendChild($profissionais); $profissionais->appendChild($dom->createElement('cnsProfissional', $profissional->cns)); $profissionais->appendChild($dom->createElement('codigoCbo2002', $profissional->codigo)); } } }