mes_ano; foreach (self::getFichasComplementar($mes_ano) as $fichaComplementar) { $dadosExportacao = self::getDadosExportacao($fichaComplementar, $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, 'FC_' . $dadosExportacao['exportacao']->uuid . '.esus.xml'); $zip->close(); unlink($xmlPath); } } public static function gerarExportacoes($mesAnoInicial) { $exportacoes = collect(); foreach (self::getFichasComplementar($mesAnoInicial, false) as $fichaComplementar) { $dadosExportacao = self::getDadosExportacao($fichaComplementar); $exportacoes->push([ 'exportacao_id' => $dadosExportacao['exportacao']->id, 'data_atendimento' => $fichaComplementar->data_atendimento, 'usuario_id' => $fichaComplementar->usuario->id, 'ocupacao_id' => $fichaComplementar->ocupacao->id, 'equipe_id' => $fichaComplementar->equipe->id, 'ficha_complementar_id' => $fichaComplementar->id, 'xml' => [ 'nome_arquivo' => 'FC_' . $dadosExportacao['exportacao']->uuid . '.esus.xml', 'conteudo' => $dadosExportacao['dom']->saveXml(), ] ]); } return $exportacoes; } private static function getFichasComplementar($mes_ano, $somenteMesAno = true) { return FichaComplementar::whereNull('exportacao_id') ->when($somenteMesAno, fn ($q) => $q->whereYear('data_atendimento', substr($mes_ano, 2)) ->whereMonth('data_atendimento', substr($mes_ano, 0, 2)), fn ($q) => $q->where(function ($q) use ($mes_ano) { $q->whereYear('data_atendimento', '>', substr($mes_ano, 2)) ->orWhere(function ($q) use ($mes_ano) { $q->whereYear('data_atendimento', substr($mes_ano, 2)) ->whereMonth('data_atendimento', '>=', substr($mes_ano, 0, 2)); }); }) ) ->get(); } private static function getDadosExportacao($fichaComplementar, $exportacaoArquivoId = null, $usuarioId = null) { $uuid = ExportacaoService::getUuid($fichaComplementar->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/fichacomplementarzikamicrocefalia'); $dadoTransporteTransportXml->appendChild($dom->createElement('uuidDadoSerializado', $uuid)); $dadoTransporteTransportXml->appendChild($dom->createElement('tipoDadoSerializado', TipoDadoSerializado::FICHA_COMPLEMENTAR)); $dadoTransporteTransportXml->appendChild($dom->createElement('codIbge', $fichaComplementar->equipe->infraestrutura->endereco->logradouro->municipio->ibge)); $dadoTransporteTransportXml->appendChild($dom->createElement('cnesDadoSerializado', $fichaComplementar->equipe->unidade->cnes)); if($fichaComplementar->equipe->area->numero_ine){ $dadoTransporteTransportXml->appendChild($dom->createElement('ineDadoSerializado', $fichaComplementar->equipe->area->numero_ine)); } $fichaComplementarZikaMicrocefaliaTransport = $dom->createElement('ns4:fichaComplementarZikaMicrocefaliaTransport'); $dadoTransporteTransportXml->appendChild($fichaComplementarZikaMicrocefaliaTransport); $headerTransport = $dom->createElement('headerTransport'); $fichaComplementarZikaMicrocefaliaTransport->appendChild($headerTransport); $headerTransport->appendChild($dom->createElement('profissionalCNS', $fichaComplementar->usuario->cidadao->cns ?? '')); $headerTransport->appendChild($dom->createElement('cboCodigo_2002', $fichaComplementar->ocupacao->codigo)); $headerTransport->appendChild($dom->createElement('cnes', $fichaComplementar->equipe->unidade->cnes)); if($fichaComplementar->equipe->area->numero_ine){ $headerTransport->appendChild($dom->createElement('ine', $fichaComplementar->equipe->area->numero_ine)); } $headerTransport->appendChild($dom->createElement('dataAtendimento', strtotime($fichaComplementar->data_atendimento) * 1000)); $headerTransport->appendChild($dom->createElement('codigoIbgeMunicipio', $fichaComplementar->equipe->infraestrutura->endereco->logradouro->municipio->ibge)); $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('uuidFicha', $uuid)); $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('tpCdsOrigem', '3')); $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('turno', $fichaComplementar->turno_id)); if (Cns::isValid($fichaComplementar->paciente->cidadao->cns)) { $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('cnsCidadao', $fichaComplementar->paciente->cidadao->cns ?? '')); } if (!Cns::isValid($fichaComplementar->paciente->cidadao->cns)) { $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('cpfCidadao', $fichaComplementar->paciente->cidadao->cpf ?? '')); } $responsavelFamiliar = self::responsavelFamiliar($fichaComplementar); if ($responsavelFamiliar) { if (Cns::isValid($responsavelFamiliar->cns)) { $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('cnsResponsavelFamiliar', $responsavelFamiliar->cns ?? '')); } if (!Cns::isValid($responsavelFamiliar->cns)) { $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('cpfResponsavelFamiliar', $responsavelFamiliar->cpf ?? '')); } } if ($fichaComplementar->data_realizacao_teste_olhinho) { $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('dataRealizacaoTesteOlhinho', strtotime($fichaComplementar->data_realizacao_teste_olhinho) * 1000)); $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('coResultadoTesteOlhinho', $fichaComplementar->fichaComplementarTesteOlho->codigo)); } if ($fichaComplementar->data_realizacao_fundo_olho) { $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('dataRealizacaoExameFundoOlho', strtotime($fichaComplementar->data_realizacao_fundo_olho) * 1000)); $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('coResultadoExameFundoOlho', $fichaComplementar->fichaComplementarFundoOlho->codigo)); } if ($fichaComplementar->data_realizacao_teste_orelhinha) { $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('dataRealizacaoTesteOrelhinha', strtotime($fichaComplementar->data_realizacao_teste_orelhinha) * 1000)); $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('coResultadoTesteOrelhinha', $fichaComplementar->fichaComplementarTesteOrelha->codigo)); } if ($fichaComplementar->data_realizacao_us_transfontanela) { $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('dataRealizacaoUSTransfontanela', strtotime($fichaComplementar->data_realizacao_us_transfontanela) * 1000)); $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('coResultadoUsTransfontanela', $fichaComplementar->fichaComplementarUsTransfontanela->codigo)); } if ($fichaComplementar->data_realizacao_tomografia_computadorizada) { $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('dataRealizacaoTomografiaComputadorizada', strtotime($fichaComplementar->data_realizacao_tomografia_computadorizada) * 1000)); $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('coResultadoTomografiaComputadorizada', $fichaComplementar->fichaComplementarTomografiaComputadorizada->codigo)); } if ($fichaComplementar->data_realizacao_ressonancia_magnetica) { $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('dataRealizacaoRessonanciaMagnetica', strtotime($fichaComplementar->data_realizacao_ressonancia_magnetica) * 1000)); $fichaComplementarZikaMicrocefaliaTransport->appendChild($dom->createElement('coResultadoRessonanciaMagnetica', $fichaComplementar->fichaComplementarRessonanciaMagnetica->codigo)); } $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(); $fichaComplementar->uuid_ficha = $uuid; $fichaComplementar->exportacao_id = $exportacao->id; $fichaComplementar->data_hora_exportacao = Carbon::now()->format('Y-m-d H:i:s'); $fichaComplementar->usuario_exportacao_id = $usuarioId ?? self::getCurrentLotacao()->usuario_id ?? null; $fichaComplementar->save(); return [ 'exportacao' => $exportacao, 'dom' => $dom, ]; } private static function responsavelFamiliar($fichaComplementar) { return CadastroIndividual::where('paciente_id', $fichaComplementar->paciente_id) ->join('cadastro_cidadao', 'cadastro_cidadao.id', 'atencao_basica_cadastro_individual.responsavel_cidadao_id') ->select('cadastro_cidadao.cns', 'cadastro_cidadao.cpf') ->first(); } }