mes_ano; foreach (self::getFichasAvaliacao($mes_ano) as $fichaAvaliacao) { $dadosExportacao = self::getDadosExportacao($fichaAvaliacao, $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, 'FA_' . $dadosExportacao['exportacao']->uuid . '.esus.xml'); $zip->close(); unlink($xmlPath); } } public static function gerarExportacoes($mesAnoInicial) { $exportacoes = collect(); foreach (self::getFichasAvaliacao($mesAnoInicial, false) as $fichaAvaliacao) { $dadosExportacao = self::getDadosExportacao($fichaAvaliacao); $exportacoes->push([ 'exportacao_id' => $dadosExportacao['exportacao']->id, 'data_atendimento' => $fichaAvaliacao->data, 'usuario_id' => $fichaAvaliacao->usuario->id, 'ocupacao_id' => $fichaAvaliacao->ocupacao->id, 'equipe_id' => $fichaAvaliacao->equipe->id, 'avaliacao_id' => $fichaAvaliacao->id, 'xml' => [ 'nome_arquivo' => 'FA_' . $dadosExportacao['exportacao']->uuid . '.esus.xml', 'conteudo' => $dadosExportacao['dom']->saveXml(), ] ]); } return $exportacoes; } private static function getFichasAvaliacao($mes_ano, $somenteMesAno = true) { return Avaliacao::whereNull('exportacao_id') ->when($somenteMesAno, fn ($q) => $q->whereYear('data', substr($mes_ano, 2)) ->whereMonth('data', substr($mes_ano, 0, 2)), fn ($q) => $q->where(function ($q) use ($mes_ano) { $q->whereYear('data', '>', substr($mes_ano, 2)) ->orWhere(function ($q) use ($mes_ano) { $q->whereYear('data', substr($mes_ano, 2)) ->whereMonth('data', '>=', substr($mes_ano, 0, 2)); }); }) ) ->get(); } private static function getDadosExportacao($fichaAvaliacao, $exportacaoArquivoId = null, $usuarioId = null) { $desconheceNomeMae = $fichaAvaliacao->paciente->cidadao->nome_mae == null ? 'true' : 'false'; $desconheceNomePai = $fichaAvaliacao->paciente->cidadao->nome_pai == null ? 'true' : 'false'; $semNumero = (isset($fichaAvaliacao->paciente->cidadao->domicilio->endereco->sem_numero) && $fichaAvaliacao->paciente->cidadao->domicilio->endereco->sem_numero) ? 'true' : 'false'; $telefone = $fichaAvaliacao->paciente->cidadao->telefones ->filter(fn ($t) => Str::length($t->numero) === 11)->first()->numero ?? null; $uuid = ExportacaoService::getUuid($fichaAvaliacao->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/fichaavaliacaoelegibilidade'); $dadoTransporteTransportXml->appendChild($dom->createElement('uuidDadoSerializado', $uuid)); $dadoTransporteTransportXml->appendChild($dom->createElement('tipoDadoSerializado', TipoDadoSerializado::AVALIACAO_ELEGIBILIDADE_ADMISSAO)); $dadoTransporteTransportXml->appendChild($dom->createElement('codIbge', $fichaAvaliacao->equipe->infraestrutura->endereco->logradouro->municipio->ibge ?? null)); $dadoTransporteTransportXml->appendChild($dom->createElement('cnesDadoSerializado', $fichaAvaliacao->equipe->unidade->cnes)); if($fichaAvaliacao->equipe->area->numero_ine){ $dadoTransporteTransportXml->appendChild($dom->createElement('ineDadoSerializado', $fichaAvaliacao->equipe->area->numero_ine)); } $fichaAvaliacaoElegibilidadeTransport = $dom->createElement('ns4:fichaAvaliacaoElegibilidadeTransport'); $dadoTransporteTransportXml->appendChild($fichaAvaliacaoElegibilidadeTransport); $headerTransport = $dom->createElement('headerTransport'); $fichaAvaliacaoElegibilidadeTransport->appendChild($headerTransport); $lotacaoFormPrincipal = $dom->createElement('lotacaoFormPrincipal'); $headerTransport->appendChild($lotacaoFormPrincipal); $lotacaoFormPrincipal->appendChild($dom->createElement('profissionalCNS', $fichaAvaliacao->usuario->cidadao->cns ?? '')); $lotacaoFormPrincipal->appendChild($dom->createElement('cboCodigo_2002', $fichaAvaliacao->ocupacao->codigo)); $lotacaoFormPrincipal->appendChild($dom->createElement('cnes', $fichaAvaliacao->equipe->unidade->cnes)); if($fichaAvaliacao->equipe->area->numero_ine){ $lotacaoFormPrincipal->appendChild($dom->createElement('ine', $fichaAvaliacao->equipe->area->numero_ine)); } $headerTransport->appendChild($dom->createElement('dataAtendimento', strtotime($fichaAvaliacao->data) * 1000)); $headerTransport->appendChild($dom->createElement('codigoIbgeMunicipio', $fichaAvaliacao->equipe->infraestrutura->endereco->logradouro->municipio->ibge ?? null)); $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('uuidFicha', $uuid)); $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('tpCdsOrigem', '3')); $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('turno', $fichaAvaliacao->turno_id)); if (Cns::isValid($fichaAvaliacao->paciente->cidadao->cns)) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('cnsCidadao', $fichaAvaliacao->paciente->cidadao->cns ?? '')); } if (!Cns::isValid($fichaAvaliacao->paciente->cidadao->cns)) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('cpfCidadao', $fichaAvaliacao->paciente->cidadao->cpf ?? '')); } $racaCorEsus = $fichaAvaliacao->paciente->cidadao->racaCor && $fichaAvaliacao->paciente->cidadao->racaCor->id ? ($fichaAvaliacao->paciente->cidadao->racaCor->id != RacaCor::SEM_INFORMACAO ? $fichaAvaliacao->paciente->cidadao->racaCor->codigo_esus : NULL) : NULL; $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('dataNascimentoCidadao', strtotime($fichaAvaliacao->paciente->cidadao->data_nascimento->format('Y-m-d')) * 1000)); $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('sexoCidadao', self::sexo($fichaAvaliacao->paciente->cidadao->sexo->id))); $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('nomeCidadao', $fichaAvaliacao->paciente->cidadao->nome)); $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('racaCorCidadao', $racaCorEsus)); $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('nomeSocialCidadao', $fichaAvaliacao->paciente->cidadao->nome_social)); if ($desconheceNomeMae == 'false') { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('nomeMaeCidadao', $fichaAvaliacao->paciente->cidadao->nome_mae)); } $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('desconheceNomeMae', $desconheceNomeMae)); if ($fichaAvaliacao->paciente->cidadao->municipioNascimento && $fichaAvaliacao->paciente->cidadao->municipioNascimento->ibge) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('codigoIbgeMunicipioNascimento', $fichaAvaliacao->paciente->cidadao->municipioNascimento->ibge)); } $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('nacionalidadeCidadao', $fichaAvaliacao->paciente->cidadao->nacionalidade->codigo_esus)); if ($fichaAvaliacao->paciente->email !== null) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('emailCidadao', $fichaAvaliacao->paciente->email)); } if ($fichaAvaliacao->paciente->cidadao->carteiraTrabalho && $fichaAvaliacao->paciente->cidadao->carteiraTrabalho->nis_pis_pasep) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('numeroNisPisPasep', $fichaAvaliacao->paciente->cidadao->carteiraTrabalho->nis_pis_pasep)); } $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('cuidadorCidadao', $fichaAvaliacao->cuidador->id)); $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('atencaoDomiciliarProcedencia', $fichaAvaliacao->procedencia->id)); $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('atencaoDomiciliarModalidade', $fichaAvaliacao->conclusao->id)); self::getCondicoesAvaliadas($dom, $fichaAvaliacao, $fichaAvaliacaoElegibilidadeTransport); if ($fichaAvaliacao->cid_primario) { $cid = Cid::find($fichaAvaliacao->cid_primario); if ($cid) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('cid10Principal', $cid->codigo)); } } if($fichaAvaliacao->cid_secundario){ $cid = Cid::find($fichaAvaliacao->cid_secundario); if ($cid) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('cid10SecundarioUm', $cid->codigo)); } } if ($fichaAvaliacao->cid_terciario){ $cid = Cid::find($fichaAvaliacao->cid_terciario); if ($cid) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('cid10SecundarioDois', $cid->codigo)); } } if ($fichaAvaliacao->conclusao->id == Conclusao::INELEGIVEL) { $conclusao = Justificativa::where('avaliacao_id', $fichaAvaliacao->id)->first(); if ($conclusao) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('conclusaoDestinoInelegivel', $conclusao->justificativa->codigo)); } } else { $conclusao = Justificativa::where('avaliacao_id', $fichaAvaliacao->id)->first(); if ($conclusao) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('conclusaoDestinoElegivel', $conclusao->justificativa->codigo)); } } $endereco = $dom->createElement('endereco'); $fichaAvaliacaoElegibilidadeTransport->appendChild($endereco); $endereco->appendChild($dom->createElement('bairro', $fichaAvaliacao->paciente->cidadao->domicilio->endereco->logradouro->bairro->nome ?? null)); $endereco->appendChild($dom->createElement('cep', $fichaAvaliacao->paciente->cidadao->domicilio->endereco->logradouro->cep ?? null)); $endereco->appendChild($dom->createElement('codigoIbgeMunicipio', $fichaAvaliacao->paciente->cidadao->domicilio->endereco->logradouro->municipio->ibge ?? null)); if ($fichaAvaliacao->paciente->cidadao->domicilio->endereco->complemento ?? false) { $endereco->appendChild($dom->createElement('complemento', $fichaAvaliacao->paciente->cidadao->domicilio->endereco->complemento)); } $endereco->appendChild($dom->createElement('nomeLogradouro', $fichaAvaliacao->paciente->cidadao->domicilio->endereco->logradouro->nome ?? null)); if($semNumero == 'false'){ $endereco->appendChild($dom->createElement('numero', $fichaAvaliacao->paciente->cidadao->domicilio->endereco->numero ?? null)); } $endereco->appendChild($dom->createElement('numeroDneUf', $fichaAvaliacao->paciente->cidadao->domicilio->endereco->logradouro->municipio->estado->codigo ?? null)); $endereco->appendChild($dom->createElement('telefoneContato', $telefone ?? null)); $endereco->appendChild($dom->createElement('tipoLogradouroNumeroDne', $fichaAvaliacao->paciente->cidadao->domicilio->endereco->logradouro->tipo->codigo ?? null)); $endereco->appendChild($dom->createElement('stSemNumero', $semNumero)); if ($fichaAvaliacao->paciente->cidadao->domicilio->endereco->referencia ?? false) { $endereco->appendChild($dom->createElement('pontoReferencia', $fichaAvaliacao->paciente->cidadao->domicilio->endereco->referencia)); } if ($desconheceNomePai == 'false') { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('nomePaiCidadao', $fichaAvaliacao->paciente->cidadao->nome_pai)); } $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('desconheceNomePai', $desconheceNomePai)); if ($fichaAvaliacao->paciente->cidadao->nacionalidade->id == Nacionalidade::NATURALIZADO_BRASILEIRO) { if ($fichaAvaliacao->paciente->cidadao->data_naturalizacao) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('dtNaturalizacao', strtotime($fichaAvaliacao->paciente->cidadao->data_naturalizacao->format('Y-m-d')) * 1000)); } if ($fichaAvaliacao->paciente->cidadao->portaria_naturalizacao) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('portariaNaturalizacao', $fichaAvaliacao->paciente->cidadao->portaria_naturalizacao)); } if ($fichaAvaliacao->paciente->cidadao->estrangeiroEntradaBrasil->data_entrada) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('dtEntradaBrasil', strtotime($fichaAvaliacao->paciente->cidadao->estrangeiroEntradaBrasil->data_entrada->format('Y-m-d')) * 1000)); } } $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('paisNascimento', $fichaAvaliacao->paciente->cidadao->paisNascimento->codigo_esus)); if ($fichaAvaliacao->paciente->cidadao->racaCor->id === RacaCor::INDIGENA) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('etnia', $fichaAvaliacao->paciente->cidadao->etniaIndigena->codigo_cadsus)); } if (Cns::isValid($fichaAvaliacao->cns_cuidador)) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('cnsCuidador', $fichaAvaliacao->cns_cuidador ?? '')); } if (!Cns::isValid($fichaAvaliacao->cns_cuidador)) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('cpfCuidador', $fichaAvaliacao->cpf_cuidador ?? '')); } $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(); $fichaAvaliacao->uuid_ficha = $uuid; $fichaAvaliacao->exportacao_id = $exportacao->id; $fichaAvaliacao->data_hora_exportacao = Carbon::now()->format('Y-m-d H:i:s'); $fichaAvaliacao->usuario_exportacao_id = $usuarioId ?? self::getCurrentLotacao()->usuario_id ?? null; $fichaAvaliacao->save(); return [ 'exportacao' => $exportacao, 'dom' => $dom, ]; } 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 getCondicoesAvaliadas(&$dom, $fichaAvaliacao, &$fichaAvaliacaoElegibilidadeTransport){ $condicoesAvaliadas = DB::table('atencao_basica_avaliacao_condicao') ->select([ 'atencao_basica_avaliacao_condicao.condicao_id', ]) ->where('atencao_basica_avaliacao_condicao.avaliacao_id', $fichaAvaliacao->id) ->get(); foreach ($condicoesAvaliadas as $condicaoAvaliada) { $fichaAvaliacaoElegibilidadeTransport->appendChild($dom->createElement('condicoesAvaliadas', $condicaoAvaliada->condicao_id)); } } }