This commit is contained in:
@@ -0,0 +1,208 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\AtencaoBasica\Exportacao;
|
||||
|
||||
use App\Enums\AtencaoBasica\Procedimento\TipoDadoSerializado;
|
||||
use App\Models\AtencaoBasica\CadastroIndividual\CadastroIndividual;
|
||||
use App\Models\AtencaoBasica\Exportacao\Exportacao;
|
||||
use App\Models\AtencaoBasica\FichaComplementar\FichaComplementar;
|
||||
use App\Rules\Cns;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use DOMDocument;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use ZipArchive;
|
||||
|
||||
class FichaComplementarService extends Service
|
||||
{
|
||||
|
||||
public static function create($arquivo_caminho, $arquivo_nome, $exportacaoArquivoId, $usuarioId = null)
|
||||
{
|
||||
$mes_ano = request()->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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user