702 lines
37 KiB
PHP
702 lines
37 KiB
PHP
<?php
|
|
|
|
namespace App\Services\AtencaoBasica\Exportacao;
|
|
|
|
use App\Enums\AtencaoBasica\CadastroIndividual\SaidaCidadao;
|
|
use App\Enums\AtencaoBasica\Exportacao\Sexo as ExportacaoSexo;
|
|
use App\Enums\AtencaoBasica\Procedimento\TipoDadoSerializado;
|
|
use App\Enums\Cadastro\SujeitoAtencao\Deficiencia;
|
|
use App\Enums\Cadastro\SujeitoAtencao\FatorRisco;
|
|
use App\Enums\Cadastro\SujeitoAtencao\Nacionalidade;
|
|
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
|
|
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
|
use App\Models\AtencaoBasica\CadastroDomiciliar\CadastroDomiciliar;
|
|
use App\Models\AtencaoBasica\CadastroIndividual\CadastroIndividual;
|
|
use App\Models\AtencaoBasica\Exportacao\Exportacao;
|
|
use App\Rules\Cns;
|
|
use App\Services\Service;
|
|
use Carbon\Carbon;
|
|
use DateTime;
|
|
use DOMDocument;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Str;
|
|
use ZipArchive;
|
|
|
|
class FichaCadastroIndividualService extends Service
|
|
{
|
|
|
|
public static function create($arquivo_caminho, $arquivo_nome, $exportacaoArquivoId, $usuarioId = null)
|
|
{
|
|
$mes_ano = request()->mes_ano;
|
|
|
|
foreach (self::getFichasCadastroIndividual($mes_ano) as $fichaCadastroIndividual) {
|
|
|
|
$dadosExportacao = self::getDadosExportacao($fichaCadastroIndividual, $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, 'CI_' . $dadosExportacao['exportacao']->uuid . '.esus.xml');
|
|
$zip->close();
|
|
|
|
unlink($xmlPath);
|
|
}
|
|
}
|
|
|
|
public static function gerarExportacoes($mesAnoInicial)
|
|
{
|
|
$exportacoes = collect();
|
|
|
|
foreach (self::getFichasCadastroIndividual($mesAnoInicial, false) as $fichaCadastroIndividual) {
|
|
|
|
$dadosExportacao = self::getDadosExportacao($fichaCadastroIndividual);
|
|
|
|
$exportacoes->push([
|
|
'exportacao_id' => $dadosExportacao['exportacao']->id,
|
|
'data_atendimento' => $fichaCadastroIndividual->data_usuario_responsavel,
|
|
'usuario_id' => optional($fichaCadastroIndividual->usuario)->id,
|
|
'ocupacao_id' => optional($fichaCadastroIndividual->usuarioOcupacao)->id,
|
|
'equipe_id' => optional($fichaCadastroIndividual->equipe)->id,
|
|
'cadastro_individual_id' => $fichaCadastroIndividual->id,
|
|
'xml' => [
|
|
'nome_arquivo' => 'CI_' . $dadosExportacao['exportacao']->uuid . '.esus.xml',
|
|
'conteudo' => $dadosExportacao['dom']->saveXml(),
|
|
]
|
|
]);
|
|
}
|
|
|
|
return $exportacoes;
|
|
}
|
|
|
|
private static function getFichasCadastroIndividual($mes_ano, $somenteMesAno = true)
|
|
{
|
|
return CadastroIndividual::with(['paciente' => function ($query) {
|
|
$query->withTrashed();
|
|
}])
|
|
->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));
|
|
});
|
|
})
|
|
)
|
|
->whereNull('exportacao_id')
|
|
->get();
|
|
}
|
|
|
|
private static function getDadosExportacao($fichaCadastroIndividual, $exportacaoArquivoId = null, $usuarioId = null)
|
|
{
|
|
$internacao = $fichaCadastroIndividual->internacao ? 'true' : 'false';
|
|
$plantasMedicinais = $fichaCadastroIndividual->plantas_medicinais ? 'true' : 'false';
|
|
$comunidadeTradicional = $fichaCadastroIndividual->comunidade_tradicional ? 'true' : 'false';
|
|
$orientacaoSexual = $fichaCadastroIndividual->orientacao_sexual ? 'true' : 'false';
|
|
$identidadeGenero = $fichaCadastroIndividual->identidade_genero ? 'true' : 'false';
|
|
$cuidadorTradicional = $fichaCadastroIndividual->frequenta_cuidador_tradicional ? 'true' : 'false';
|
|
$grupoComunitario = $fichaCadastroIndividual->participa_grupo_comunitario ? 'true' : 'false';
|
|
$deficiente = $fichaCadastroIndividual->deficiente ? 'true' : 'false';
|
|
$planoSaude = $fichaCadastroIndividual->plano_saude ? 'true' : 'false';
|
|
$escola = $fichaCadastroIndividual->frequenta_escola_creche ? 'true' : 'false';
|
|
$recusaCadastro = $fichaCadastroIndividual->recusa_cadastro ? 'true' : 'false';
|
|
$gestante = $fichaCadastroIndividual->gestante ? 'true' : 'false';
|
|
$fumante = $fichaCadastroIndividual->fumante ? 'true' : 'false';
|
|
$usaAlcool = $fichaCadastroIndividual->usa_alcool ? 'true' : 'false';
|
|
$outrasDrogas = $fichaCadastroIndividual->outras_drogas ? 'true' : 'false';
|
|
$hipertensao = $fichaCadastroIndividual->hipertensao ? 'true' : 'false';
|
|
$diabetes = $fichaCadastroIndividual->diabetes ? 'true' : 'false';
|
|
$avcDerrame = $fichaCadastroIndividual->avc_derrame ? 'true' : 'false';
|
|
$infarto = $fichaCadastroIndividual->infarto ? 'true' : 'false';
|
|
$hanseniase = $fichaCadastroIndividual->hanseniase ? 'true' : 'false';
|
|
$tuberculose = $fichaCadastroIndividual->tuberculose ? 'true' : 'false';
|
|
$cancer = $fichaCadastroIndividual->cancer ? 'true' : 'false';
|
|
$internacao = $fichaCadastroIndividual->internacao ? 'true' : 'false';
|
|
$doencaCardiaca = $fichaCadastroIndividual->doenca_cardiaca ? 'true' : 'false';
|
|
$problemasRins = $fichaCadastroIndividual->problemas_rins ? 'true' : 'false';
|
|
$doencaRespiratoria = $fichaCadastroIndividual->doenca_respiratoria ? 'true' : 'false';
|
|
$acamado = $fichaCadastroIndividual->acamado ? 'true' : 'false';
|
|
$domiciliado = $fichaCadastroIndividual->domiciliado ? 'true' : 'false';
|
|
$praticasIntegrativas = $fichaCadastroIndividual->praticas_integrativas ? 'true' : 'false';
|
|
$outraInstituicao = $fichaCadastroIndividual->outra_instituicao ? 'true' : 'false';
|
|
$recebeBeneficio = $fichaCadastroIndividual->recebe_beneficio ? 'true' : 'false';
|
|
$referenciaFamiliar = $fichaCadastroIndividual->referencia_familiar ? 'true' : 'false';
|
|
$visitaFamiliar = $fichaCadastroIndividual->visita_familiar ? 'true' : 'false';
|
|
$responsavel = $fichaCadastroIndividual->responsavel ? 'true' : 'false';
|
|
$alimentosAcabaram = $fichaCadastroIndividual->alimentos_acabaram === null
|
|
? null
|
|
: ($fichaCadastroIndividual->alimentos_acabaram ? 'true' : 'false');
|
|
$comeuAlgunsAlimentos = $fichaCadastroIndividual->comeu_alguns_alimentos === null
|
|
? null
|
|
: ($fichaCadastroIndividual->comeu_alguns_alimentos ? 'true' : 'false');
|
|
$higienePessoal = $fichaCadastroIndividual->higiene_pessoal ? 'true' : 'false';
|
|
$tratamentoSaudeMental = $fichaCadastroIndividual->tratamento_saude_mental ? 'true' : 'false';
|
|
$situacaoRua = $fichaCadastroIndividual->situacao_rua_id != null ? 'true' : 'false';
|
|
$fichaAtualizada = $fichaCadastroIndividual->uuid_ficha != null ? 'true' : 'false';
|
|
$desconheceNomePai = $fichaCadastroIndividual->paciente->cidadao->nome_pai == null ? 'true' : 'false';
|
|
$desconheceNomeMae = $fichaCadastroIndividual->paciente->cidadao->nome_mae == null ? 'true' : 'false';
|
|
$uuid = ExportacaoService::getUuid($fichaCadastroIndividual->equipe->unidade->cnes ?? '9999999');
|
|
$telefoneCelular = $fichaCadastroIndividual->paciente->cidadao->telefones
|
|
->filter(fn ($t) => in_array(Str::length($t->numero), [10,11]))->first()->numero ?? null;
|
|
$dataNascimento = new DateTime($fichaCadastroIndividual->paciente->cidadao->data_nascimento);
|
|
$dataResponsavel = new DateTime($fichaCadastroIndividual->data_usuario_responsavel);
|
|
$idade = $dataNascimento->diff($dataResponsavel)->y;
|
|
|
|
$cadastroDomiciliar = CadastroDomiciliar::where('domicilio_id', $fichaCadastroIndividual->paciente->cidadao->domicilio_id)->first();
|
|
|
|
if ($cadastroDomiciliar) {
|
|
|
|
$foraArea = $cadastroDomiciliar->fora_area ? 'true' : 'false';
|
|
}
|
|
|
|
$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/cadastroindividual');
|
|
|
|
$dadoTransporteTransportXml->appendChild($dom->createElement('uuidDadoSerializado', $uuid));
|
|
$dadoTransporteTransportXml->appendChild($dom->createElement('tipoDadoSerializado', TipoDadoSerializado::CADASTRO_INDIVIDUAL));
|
|
$dadoTransporteTransportXml->appendChild($dom->createElement('codIbge', $fichaCadastroIndividual->equipe->infraestrutura->endereco->logradouro->municipio->ibge ?? '9999999'));
|
|
$dadoTransporteTransportXml->appendChild($dom->createElement('cnesDadoSerializado', $fichaCadastroIndividual->equipe->unidade->cnes ?? '9999999'));
|
|
|
|
if($fichaCadastroIndividual->equipe->area->numero_ine ?? false){
|
|
|
|
$dadoTransporteTransportXml->appendChild($dom->createElement('ineDadoSerializado', $fichaCadastroIndividual->equipe->area->numero_ine));
|
|
}
|
|
|
|
$cadastroIndividualTransport = $dom->createElement('ns4:cadastroIndividualTransport');
|
|
$dadoTransporteTransportXml->appendChild($cadastroIndividualTransport);
|
|
|
|
if ($recusaCadastro == 'false') {
|
|
|
|
$condicoesDeSaude = $dom->createElement('condicoesDeSaude');
|
|
$cadastroIndividualTransport->appendChild($condicoesDeSaude);
|
|
|
|
if ($internacao == 'true') {
|
|
|
|
$condicoesDeSaude->appendChild($dom->createElement('descricaoCausaInternacaoEm12Meses', $fichaCadastroIndividual->internacao_motivo));
|
|
}
|
|
|
|
$condicoesDeSaude->appendChild($dom->createElement('descricaoOutraCondicao1', $fichaCadastroIndividual->outras_condicoes_primaria));
|
|
$condicoesDeSaude->appendChild($dom->createElement('descricaoOutraCondicao2', $fichaCadastroIndividual->outras_condicoes_secundaria));
|
|
$condicoesDeSaude->appendChild($dom->createElement('descricaoOutraCondicao3', $fichaCadastroIndividual->outras_condicoes_terciaria));
|
|
|
|
if ($plantasMedicinais == 'true') {
|
|
|
|
$condicoesDeSaude->appendChild($dom->createElement('descricaoPlantasMedicinaisUsadas', $fichaCadastroIndividual->plantas_medicinais_quais));
|
|
}
|
|
|
|
if ($doencaCardiaca == 'true') {
|
|
|
|
self::getDoencasCardiacas($dom, $fichaCadastroIndividual, $condicoesDeSaude);
|
|
}
|
|
|
|
if ($doencaRespiratoria == 'true') {
|
|
|
|
self::getDoencasRespiratoria($dom, $fichaCadastroIndividual, $condicoesDeSaude);
|
|
}
|
|
|
|
if ($problemasRins == 'true') {
|
|
|
|
self::getProblemasRins($dom, $fichaCadastroIndividual, $condicoesDeSaude);
|
|
}
|
|
|
|
if ($gestante == 'true' && $fichaCadastroIndividual->maternidade_referencia) {
|
|
|
|
$condicoesDeSaude->appendChild($dom->createElement('maternidadeDeReferencia', $fichaCadastroIndividual->maternidade_referencia));
|
|
}
|
|
|
|
if ($fichaCadastroIndividual->peso) {
|
|
|
|
$condicoesDeSaude->appendChild($dom->createElement('situacaoPeso', $fichaCadastroIndividual->peso->codigo_esus));
|
|
}
|
|
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusEhDependenteAlcool', $usaAlcool));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusEhDependenteOutrasDrogas', $outrasDrogas));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusEhFumante', $fumante));
|
|
|
|
if(optional($fichaCadastroIndividual->paciente->cidadao->sexo)->id === Sexo::FEMININO && ($idade >= 9 && $idade <= 60)){
|
|
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusEhGestante', $gestante));
|
|
}
|
|
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusEstaAcamado', $acamado));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusEstaDomiciliado', $domiciliado));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusTemDiabetes', $diabetes));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusTemDoencaRespiratoria', $doencaRespiratoria));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusTemHanseniase', $hanseniase));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusTemHipertensaoArterial', $hipertensao));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusTemTeveCancer', $cancer));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusTemTeveDoencasRins', $problemasRins));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusTemTuberculose', $tuberculose));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusTeveAvcDerrame', $avcDerrame));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusTeveDoencaCardiaca', $doencaCardiaca));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusTeveInfarto', $infarto));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusTeveInternadoEm12Meses', $internacao));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusUsaOutrasPraticasIntegrativasOuComplementares', $praticasIntegrativas));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusUsaPlantaMedicinais', $plantasMedicinais));
|
|
$condicoesDeSaude->appendChild($dom->createElement('statusDiagnosticoMental', $tratamentoSaudeMental));
|
|
|
|
$emSituacaoDeRua = $dom->createElement('emSituacaoDeRua');
|
|
$cadastroIndividualTransport->appendChild($emSituacaoDeRua);
|
|
|
|
if ($situacaoRua == 'true') {
|
|
|
|
$emSituacaoDeRua->appendChild($dom->createElement('grauParentescoFamiliarFrequentado', $fichaCadastroIndividual->parentesco));
|
|
|
|
self::getHigienePessoal($dom, $fichaCadastroIndividual, $emSituacaoDeRua);
|
|
self::getOrigemAlimentos($dom, $fichaCadastroIndividual, $emSituacaoDeRua);
|
|
|
|
if ($outraInstituicao == 'true') {
|
|
|
|
$emSituacaoDeRua->appendChild($dom->createElement('outraInstituicaoQueAcompanha', $fichaCadastroIndividual->outra_instituicao_quais));
|
|
}
|
|
|
|
$emSituacaoDeRua->appendChild($dom->createElement('quantidadeAlimentacoesAoDiaSituacaoRua', $fichaCadastroIndividual->alimentacaoDiaria->codigo_esus));
|
|
$emSituacaoDeRua->appendChild($dom->createElement('statusAcompanhadoPorOutraInstituicao', $outraInstituicao));
|
|
$emSituacaoDeRua->appendChild($dom->createElement('statusPossuiReferenciaFamiliar', $referenciaFamiliar));
|
|
$emSituacaoDeRua->appendChild($dom->createElement('statusRecebeBeneficio', $recebeBeneficio));
|
|
}
|
|
|
|
$emSituacaoDeRua->appendChild($dom->createElement('statusSituacaoRua', $situacaoRua));
|
|
|
|
if ($situacaoRua == 'true') {
|
|
|
|
$emSituacaoDeRua->appendChild($dom->createElement('statusTemAcessoHigienePessoalSituacaoRua', $higienePessoal));
|
|
$emSituacaoDeRua->appendChild($dom->createElement('statusVisitaFamiliarFrequentemente', $visitaFamiliar));
|
|
$emSituacaoDeRua->appendChild($dom->createElement('tempoSituacaoRua', $fichaCadastroIndividual->situacaoRua->codigo_esus));
|
|
}
|
|
}
|
|
|
|
$cadastroIndividualTransport->appendChild($dom->createElement('fichaAtualizada', $fichaAtualizada));
|
|
|
|
$identificacaoUsuarioCidadao = $dom->createElement('identificacaoUsuarioCidadao');
|
|
$cadastroIndividualTransport->appendChild($identificacaoUsuarioCidadao);
|
|
|
|
if ($fichaCadastroIndividual->paciente->cidadao->nome_social) {
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('nomeSocial', $fichaCadastroIndividual->paciente->cidadao->nome_social));
|
|
}
|
|
|
|
if ($fichaCadastroIndividual->paciente->cidadao->municipioNascimento && $fichaCadastroIndividual->paciente->cidadao->municipioNascimento->ibge) {
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('codigoIbgeMunicipioNascimento', $fichaCadastroIndividual->paciente->cidadao->municipioNascimento->ibge));
|
|
}
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('dataNascimentoCidadao', strtotime($fichaCadastroIndividual->paciente->cidadao->data_nascimento->format('Y-m-d')) * 1000));
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('desconheceNomeMae', $desconheceNomeMae));
|
|
|
|
if ($fichaCadastroIndividual->paciente->email !== null) {
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('emailCidadao', $fichaCadastroIndividual->paciente->email));
|
|
}
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('nacionalidadeCidadao', $fichaCadastroIndividual->paciente->cidadao->nacionalidade->codigo_esus));
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('nomeCidadao', $fichaCadastroIndividual->paciente->cidadao->nome));
|
|
|
|
if ($desconheceNomeMae == 'false') {
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('nomeMaeCidadao', $fichaCadastroIndividual->paciente->cidadao->nome_mae));
|
|
}
|
|
|
|
if (Cns::isValid($fichaCadastroIndividual->paciente->cidadao->cns)) {
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('cnsCidadao', $fichaCadastroIndividual->paciente->cidadao->cns ?? ''));
|
|
}
|
|
|
|
if (!Cns::isValid($fichaCadastroIndividual->paciente->cidadao->cns)) {
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('cpfCidadao', $fichaCadastroIndividual->paciente->cidadao->cpf ?? ''));
|
|
}
|
|
|
|
if ($telefoneCelular) {
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('telefoneCelular', $telefoneCelular));
|
|
}
|
|
|
|
if ($fichaCadastroIndividual->paciente->cidadao->carteiraTrabalho &&
|
|
$fichaCadastroIndividual->paciente->cidadao->carteiraTrabalho->nis_pis_pasep) {
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('numeroNisPisPasep', $fichaCadastroIndividual->paciente->cidadao->carteiraTrabalho->nis_pis_pasep));
|
|
}
|
|
|
|
$racaCorEsus = $fichaCadastroIndividual->paciente->cidadao->racaCor && $fichaCadastroIndividual->paciente->cidadao->racaCor->id
|
|
? ($fichaCadastroIndividual->paciente->cidadao->racaCor->id != RacaCor::SEM_INFORMACAO
|
|
? $fichaCadastroIndividual->paciente->cidadao->racaCor->codigo_esus : NULL)
|
|
: NULL;
|
|
|
|
$paisNascimento = optional(optional(optional($fichaCadastroIndividual->paciente)->cidadao)->paisNascimento)->codigo_esus;
|
|
|
|
if ($paisNascimento) {
|
|
$identificacaoUsuarioCidadao
|
|
->appendChild($dom->createElement('paisNascimento', $paisNascimento));
|
|
}
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('racaCorCidadao', $racaCorEsus));
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('sexoCidadao', self::sexo(optional($fichaCadastroIndividual->paciente->cidadao->sexo)->id)));
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('statusEhResponsavel', $responsavel));
|
|
|
|
if (optional($fichaCadastroIndividual->paciente->cidadao->racaCor)->id === RacaCor::INDIGENA) {
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('etnia', $fichaCadastroIndividual->paciente->cidadao->etniaIndigena->codigo_cadsus));
|
|
}
|
|
|
|
if ($desconheceNomePai == 'false') {
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('nomePaiCidadao', $fichaCadastroIndividual->paciente->cidadao->nome_pai));
|
|
}
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('desconheceNomePai', $desconheceNomePai));
|
|
|
|
if ($fichaCadastroIndividual->paciente->cidadao->nacionalidade->id == Nacionalidade::NATURALIZADO_BRASILEIRO
|
|
|| $fichaCadastroIndividual->paciente->cidadao->nacionalidade->id == Nacionalidade::ESTRANGEIRO) {
|
|
|
|
if ($fichaCadastroIndividual->paciente->cidadao->data_naturalizacao) {
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('dtNaturalizacao', strtotime($fichaCadastroIndividual->paciente->cidadao->data_naturalizacao->format('Y-m-d')) * 1000));
|
|
}
|
|
|
|
if ($fichaCadastroIndividual->paciente->cidadao->portaria_naturalizacao) {
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('portariaNaturalizacao', $fichaCadastroIndividual->paciente->cidadao->portaria_naturalizacao));
|
|
}
|
|
|
|
if ($fichaCadastroIndividual->paciente->cidadao->estrangeiroEntradaBrasil) {
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('dtEntradaBrasil', strtotime($fichaCadastroIndividual->paciente->cidadao->estrangeiroEntradaBrasil->data_entrada->format('Y-m-d')) * 1000));
|
|
}
|
|
}
|
|
|
|
if ($cadastroDomiciliar) {
|
|
|
|
if ($foraArea == 'false' && $cadastroDomiciliar->microarea) {
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('microArea', str_pad($cadastroDomiciliar->microarea->descricao, 2, '0', STR_PAD_LEFT)));
|
|
}
|
|
|
|
$identificacaoUsuarioCidadao->appendChild($dom->createElement('stForaArea', $foraArea));
|
|
}
|
|
|
|
if ($recusaCadastro == 'false') {
|
|
|
|
$informacoesSocioDemograficas = $dom->createElement('informacoesSocioDemograficas');
|
|
$cadastroIndividualTransport->appendChild($informacoesSocioDemograficas);
|
|
|
|
self::getDeficiencias($dom, $fichaCadastroIndividual, $informacoesSocioDemograficas);
|
|
|
|
if ($fichaCadastroIndividual->curso) {
|
|
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('grauInstrucaoCidadao', $fichaCadastroIndividual->curso->codigo_esus));
|
|
}
|
|
|
|
if ( $fichaCadastroIndividual->ocupacao) {
|
|
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('ocupacaoCodigoCbo2002', $fichaCadastroIndividual->ocupacao->codigo));
|
|
}
|
|
|
|
if ($orientacaoSexual == 'true' && $fichaCadastroIndividual->orientacaoSexual) {
|
|
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('orientacaoSexualCidadao', $fichaCadastroIndividual->orientacaoSexual->codigo_esus));
|
|
}
|
|
|
|
if ($fichaCadastroIndividual->parentescoResponsavel) {
|
|
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('relacaoParentescoCidadao', $fichaCadastroIndividual->parentescoResponsavel->codigo_esus));
|
|
}
|
|
|
|
if ($fichaCadastroIndividual->situacaoMercadoTrabalho) {
|
|
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('situacaoMercadoTrabalhoCidadao', $fichaCadastroIndividual->situacaoMercadoTrabalho->codigo_esus));
|
|
}
|
|
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('statusDesejaInformarOrientacaoSexual', $orientacaoSexual));
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('statusFrequentaBenzedeira', $cuidadorTradicional));
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('statusFrequentaEscola', $escola));
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('statusMembroPovoComunidadeTradicional', $comunidadeTradicional));
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('statusParticipaGrupoComunitario', $grupoComunitario));
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('statusPossuiPlanoSaudePrivado', $planoSaude));
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('statusTemAlgumaDeficiencia', $deficiente));
|
|
|
|
if ($identidadeGenero == 'true' && $fichaCadastroIndividual->paciente->cidadao->identidadeGenero) {
|
|
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('identidadeGeneroCidadao', $fichaCadastroIndividual->paciente->cidadao->identidadeGenero->codigo_esus));
|
|
}
|
|
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('statusDesejaInformarIdentidadeGenero', $identidadeGenero));
|
|
|
|
if ($idade <= 9) {
|
|
|
|
self::getResponsavelPorCrianca($dom, $fichaCadastroIndividual, $informacoesSocioDemograficas);
|
|
}
|
|
|
|
if ($fichaCadastroIndividual->comunidadeTradicionalQual) {
|
|
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('coPovoComunidadeTradicional', $fichaCadastroIndividual->comunidadeTradicionalQual->codigo_esus));
|
|
}
|
|
|
|
if ($fichaCadastroIndividual->alimentos_acabaram !== null || $fichaCadastroIndividual->comeu_alguns_alimentos !== null) {
|
|
|
|
$informacoesSocioEconomicas = $dom->createElement('informacoesSocioEconomicas');
|
|
$cadastroIndividualTransport->appendChild($informacoesSocioEconomicas);
|
|
|
|
if ($alimentosAcabaram !== null) {
|
|
|
|
$informacoesSocioEconomicas->appendChild($dom->createElement('alimentosAcabaramAntesTerDinheiroComprarMais', $alimentosAcabaram));
|
|
}
|
|
|
|
if ($comeuAlgunsAlimentos !== null) {
|
|
|
|
$informacoesSocioEconomicas->appendChild($dom->createElement('comeuAlgunsAlimentosQueTinhaDinheiroAcabou', $comeuAlgunsAlimentos));
|
|
}
|
|
}
|
|
|
|
if ($fichaCadastroIndividual->saidaCidadao) {
|
|
|
|
$saidaCidadaoCadastro = $dom->createElement('saidaCidadaoCadastro');
|
|
$cadastroIndividualTransport->appendChild($saidaCidadaoCadastro);
|
|
|
|
if ($fichaCadastroIndividual->saidaCidadao) {
|
|
|
|
$saidaCidadaoCadastro->appendChild($dom->createElement('motivoSaidaCidadao', $fichaCadastroIndividual->saidaCidadao->codigo_esus));
|
|
}
|
|
|
|
if ($fichaCadastroIndividual->saidaCidadao->id == SaidaCidadao::OBITO) {
|
|
|
|
$dataObito = $fichaCadastroIndividual->paciente->cidadao->obito->obito_em ?? null;
|
|
$dataObitoMs = $dataObito ? strtotime($dataObito) * 1000 : '';
|
|
|
|
$numeroDO = $fichaCadastroIndividual->paciente->cidadao->obito->declaracao ?? '';
|
|
|
|
$saidaCidadaoCadastro->appendChild(
|
|
$dom->createElement('dataObito', $dataObitoMs)
|
|
);
|
|
|
|
$saidaCidadaoCadastro->appendChild(
|
|
$dom->createElement('numeroDO', $numeroDO)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
$cadastroIndividualTransport->appendChild($dom->createElement('statusTermoRecusaCadastroIndividualAtencaoBasica', $recusaCadastro));
|
|
$cadastroIndividualTransport->appendChild($dom->createElement('tpCdsOrigem', '3'));
|
|
$cadastroIndividualTransport->appendChild($dom->createElement('uuid', $uuid));
|
|
|
|
if ($fichaAtualizada == 'true') {
|
|
|
|
$cadastroIndividualTransport->appendChild($dom->createElement('uuidFichaOriginadora', $fichaCadastroIndividual->uuid_ficha));
|
|
}else{
|
|
|
|
$cadastroIndividualTransport->appendChild($dom->createElement('uuidFichaOriginadora', $uuid));
|
|
}
|
|
|
|
$headerTransport = $dom->createElement('headerTransport');
|
|
$cadastroIndividualTransport->appendChild($headerTransport);
|
|
$headerTransport->appendChild($dom->createElement('profissionalCNS', $fichaCadastroIndividual->usuario->cidadao->cns ?? ''));
|
|
$headerTransport->appendChild($dom->createElement('cboCodigo_2002', $fichaCadastroIndividual->usuarioOcupacao->codigo ?? null));
|
|
$headerTransport->appendChild($dom->createElement('cnes', $fichaCadastroIndividual->equipe->unidade->cnes ?? null));
|
|
|
|
if($fichaCadastroIndividual->equipe->area->numero_ine ?? false){
|
|
|
|
$headerTransport->appendChild($dom->createElement('ine', $fichaCadastroIndividual->equipe->area->numero_ine));
|
|
}
|
|
|
|
$headerTransport->appendChild($dom->createElement('dataAtendimento', strtotime($fichaCadastroIndividual->data_usuario_responsavel) * 1000));
|
|
$headerTransport->appendChild($dom->createElement('codigoIbgeMunicipio', $fichaCadastroIndividual->equipe->infraestrutura->endereco->logradouro->municipio->ibge ?? null));
|
|
|
|
|
|
$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();
|
|
|
|
$fichaCadastroIndividual->uuid_ficha = $uuid;
|
|
$fichaCadastroIndividual->exportacao_id = $exportacao->id;
|
|
$fichaCadastroIndividual->data_hora_exportacao = Carbon::now()->format('Y-m-d H:i:s');
|
|
$fichaCadastroIndividual->usuario_exportacao_id = $usuarioId ?? self::getCurrentLotacao()->usuario_id ?? null;
|
|
$fichaCadastroIndividual->save();
|
|
|
|
return [
|
|
'exportacao' => $exportacao,
|
|
'dom' => $dom,
|
|
];
|
|
}
|
|
|
|
private static function getDoencasCardiacas(&$dom, $fichaCadastroIndividual, &$condicoesDeSaude){
|
|
|
|
$doencasCardiaca = DB::table('atencao_basica_cadastro_individual_doenca_cardiaca')
|
|
->select([
|
|
'atencao_basica_cadastro_doenca_cardiaca.codigo_esus',
|
|
])
|
|
->join(
|
|
'atencao_basica_cadastro_doenca_cardiaca',
|
|
'atencao_basica_cadastro_doenca_cardiaca.id',
|
|
'atencao_basica_cadastro_individual_doenca_cardiaca.doenca_cardiaca_id'
|
|
)
|
|
->where('atencao_basica_cadastro_individual_doenca_cardiaca.cadastro_individual_id', $fichaCadastroIndividual->id)
|
|
->get();
|
|
|
|
foreach ($doencasCardiaca as $doencaCardiaca) {
|
|
|
|
$condicoesDeSaude->appendChild($dom->createElement('doencaCardiaca', $doencaCardiaca->codigo_esus));
|
|
}
|
|
}
|
|
|
|
private static function getDeficiencias(&$dom, $fichaCadastroIndividual, &$informacoesSocioDemograficas)
|
|
{
|
|
$deficiencias = DB::table('atencao_basica_cadastro_individual_deficiencia_base')
|
|
->select([
|
|
'cadastro_deficiencia_base.codigo_esus',
|
|
])
|
|
->join(
|
|
'cadastro_deficiencia_base',
|
|
'cadastro_deficiencia_base.id',
|
|
'atencao_basica_cadastro_individual_deficiencia_base.deficiencia_base_id'
|
|
)
|
|
->where('atencao_basica_cadastro_individual_deficiencia_base.cadastro_individual_id', $fichaCadastroIndividual->id)
|
|
->get();
|
|
|
|
$fatoresRisco = $fichaCadastroIndividual->paciente->cidadao->fatoresRisco->pluck('id');
|
|
$transtornoEspectroAutista = $fatoresRisco->contains(FatorRisco::TEA);
|
|
|
|
if ($transtornoEspectroAutista && !$deficiencias->pluck('codigo_esus')->contains('232')) {
|
|
$deficiencias->push((object)['codigo_esus' => '232']);
|
|
}
|
|
|
|
foreach ($deficiencias as $deficiencia) {
|
|
$informacoesSocioDemograficas->appendChild(
|
|
$dom->createElement('deficienciasCidadao', $deficiencia->codigo_esus)
|
|
);
|
|
}
|
|
}
|
|
|
|
private static function getResponsavelPorCrianca(&$dom, $fichaCadastroIndividual, &$informacoesSocioDemograficas){
|
|
|
|
$acompanhamentos = DB::table('atencao_basica_cadastro_individual_acompanhamento_infantil')
|
|
->select([
|
|
'atencao_basica_cadastro_acompanhamento_infantil.codigo_esus',
|
|
])
|
|
->join(
|
|
'atencao_basica_cadastro_acompanhamento_infantil',
|
|
'atencao_basica_cadastro_acompanhamento_infantil.id',
|
|
'atencao_basica_cadastro_individual_acompanhamento_infantil.acompanhamento_infantil_id'
|
|
)
|
|
->where('atencao_basica_cadastro_individual_acompanhamento_infantil.cadastro_individual_id', $fichaCadastroIndividual->id)
|
|
->get();
|
|
|
|
foreach ($acompanhamentos as $acompanhamento) {
|
|
|
|
$informacoesSocioDemograficas->appendChild($dom->createElement('responsavelPorCrianca', $acompanhamento->codigo_esus));
|
|
}
|
|
}
|
|
|
|
private static function getDoencasRespiratoria(&$dom, $fichaCadastroIndividual, &$condicoesDeSaude){
|
|
|
|
$doencasRespiratoria = DB::table('atencao_basica_cadastro_individual_doenca_respiratoria')
|
|
->select([
|
|
'atencao_basica_cadastro_doenca_respiratoria.codigo_esus',
|
|
])
|
|
->join(
|
|
'atencao_basica_cadastro_doenca_respiratoria',
|
|
'atencao_basica_cadastro_doenca_respiratoria.id',
|
|
'atencao_basica_cadastro_individual_doenca_respiratoria.doenca_respiratoria_id'
|
|
)
|
|
->where('atencao_basica_cadastro_individual_doenca_respiratoria.cadastro_individual_id', $fichaCadastroIndividual->id)
|
|
->get();
|
|
|
|
foreach ($doencasRespiratoria as $doencaRespiratoria) {
|
|
|
|
$condicoesDeSaude->appendChild($dom->createElement('doencaRespiratoria', $doencaRespiratoria->codigo_esus));
|
|
}
|
|
}
|
|
|
|
private static function getProblemasRins(&$dom, $fichaCadastroIndividual, &$condicoesDeSaude){
|
|
|
|
$doencasRins = DB::table('atencao_basica_cadastro_individual_problemas_rins')
|
|
->select([
|
|
'atencao_basica_cadastro_problemas_rins.codigo_esus',
|
|
])
|
|
->join(
|
|
'atencao_basica_cadastro_problemas_rins',
|
|
'atencao_basica_cadastro_problemas_rins.id',
|
|
'atencao_basica_cadastro_individual_problemas_rins.problemas_rins_id'
|
|
)
|
|
->where('atencao_basica_cadastro_individual_problemas_rins.cadastro_individual_id', $fichaCadastroIndividual->id)
|
|
->get();
|
|
|
|
foreach ($doencasRins as $doencaRins) {
|
|
|
|
$condicoesDeSaude->appendChild($dom->createElement('doencaRins', $doencaRins->codigo_esus));
|
|
}
|
|
}
|
|
|
|
private static function getOrigemAlimentos(&$dom, $fichaCadastroIndividual, &$emSituacaoDeRua){
|
|
|
|
$origemAlimentos = DB::table('atencao_basica_cadastro_individual_origem_alimentacao')
|
|
->select([
|
|
'atencao_basica_cadastro_origem_alimentacao.codigo_esus',
|
|
])
|
|
->join(
|
|
'atencao_basica_cadastro_origem_alimentacao',
|
|
'atencao_basica_cadastro_origem_alimentacao.id',
|
|
'atencao_basica_cadastro_individual_origem_alimentacao.origem_alimentacao_id'
|
|
)
|
|
->where('atencao_basica_cadastro_individual_origem_alimentacao.cadastro_individual_id', $fichaCadastroIndividual->id)
|
|
->get();
|
|
|
|
foreach ($origemAlimentos as $origemAlimento) {
|
|
|
|
$emSituacaoDeRua->appendChild($dom->createElement('origemAlimentoSituacaoRua', $origemAlimento->codigo_esus));
|
|
}
|
|
}
|
|
|
|
private static function getHigienePessoal(&$dom, $fichaCadastroIndividual, &$emSituacaoDeRua){
|
|
|
|
$higienesPessoal = DB::table('atencao_basica_cadastro_individual_higiene_pessoal')
|
|
->select([
|
|
'atencao_basica_cadastro_higiene_pessoal.codigo_esus',
|
|
])
|
|
->join(
|
|
'atencao_basica_cadastro_higiene_pessoal',
|
|
'atencao_basica_cadastro_higiene_pessoal.id',
|
|
'atencao_basica_cadastro_individual_higiene_pessoal.higiene_pessoal_id'
|
|
)
|
|
->where('atencao_basica_cadastro_individual_higiene_pessoal.cadastro_individual_id', $fichaCadastroIndividual->id)
|
|
->get();
|
|
|
|
foreach ($higienesPessoal as $higienePessoal) {
|
|
|
|
$emSituacaoDeRua->appendChild($dom->createElement('higienePessoalSituacaoRua', $higienePessoal->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;
|
|
}
|
|
}
|