This commit is contained in:
@@ -0,0 +1,494 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\AtencaoBasica\Exportacao;
|
||||
|
||||
use App\Enums\AtencaoBasica\CadastroDomiciliar\ImovelTipo;
|
||||
use App\Enums\AtencaoBasica\CadastroDomiciliar\Zona;
|
||||
use App\Enums\AtencaoBasica\Exportacao\SalarioMinimo;
|
||||
use App\Enums\AtencaoBasica\Procedimento\TipoDadoSerializado;
|
||||
use App\Models\AtencaoBasica\CadastroDomiciliar\CadastroDomiciliar;
|
||||
use App\Models\AtencaoBasica\Exportacao\Exportacao;
|
||||
use App\Rules\Cns;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use DOMDocument;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
use ZipArchive;
|
||||
|
||||
class FichaCadastroDomiciliarService extends Service
|
||||
{
|
||||
|
||||
public static function create($arquivo_caminho, $arquivo_nome, $exportacaoArquivoId, $usuarioId = null)
|
||||
{
|
||||
$mes_ano = request()->mes_ano;
|
||||
|
||||
foreach (self::getFichasCadastroDomiciliar($mes_ano) as $fichaCadastroDomiciliar) {
|
||||
|
||||
$dadosExportacao = self::getDadosExportacao($fichaCadastroDomiciliar, $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, 'CD_' . $dadosExportacao['exportacao']->uuid . '.esus.xml');
|
||||
$zip->close();
|
||||
|
||||
unlink($xmlPath);
|
||||
}
|
||||
}
|
||||
|
||||
public static function gerarExportacoes($mesAnoInicial)
|
||||
{
|
||||
$exportacoes = collect();
|
||||
|
||||
foreach (self::getFichasCadastroDomiciliar($mesAnoInicial, false) as $fichaCadastroDomiciliar) {
|
||||
|
||||
$dadosExportacao = self::getDadosExportacao($fichaCadastroDomiciliar);
|
||||
|
||||
$exportacoes->push([
|
||||
'exportacao_id' => $dadosExportacao['exportacao']->id,
|
||||
'data_atendimento' => $fichaCadastroDomiciliar->data_usuario_responsavel,
|
||||
'usuario_id' => $fichaCadastroDomiciliar->usuario->id,
|
||||
'ocupacao_id' => $fichaCadastroDomiciliar->ocupacao->id,
|
||||
'equipe_id' => $fichaCadastroDomiciliar->equipe->id,
|
||||
'cadastro_domiciliar_id' => $fichaCadastroDomiciliar->id,
|
||||
'pacientes' => $dadosExportacao['pacientes'],
|
||||
'xml' => [
|
||||
'nome_arquivo' => 'CD_' . $dadosExportacao['exportacao']->uuid . '.esus.xml',
|
||||
'conteudo' => $dadosExportacao['dom']->saveXml(),
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
return $exportacoes;
|
||||
}
|
||||
|
||||
private static function getFichasCadastroDomiciliar($mes_ano, $somenteMesAno = true)
|
||||
{
|
||||
return CadastroDomiciliar::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($fichaCadastroDomiciliar, $exportacaoArquivoId = null, $usuarioId = null)
|
||||
{
|
||||
$pacientesPosicoes = collect();
|
||||
|
||||
$uuid = ExportacaoService::getUuid($fichaCadastroDomiciliar->equipe->unidade->cnes);
|
||||
|
||||
$instituicaoOutrosProfissionais = $fichaCadastroDomiciliar->instituicao_outros_profissionais ? 'true' : 'false';
|
||||
$possuiAnimais = $fichaCadastroDomiciliar->possui_animais ? 'true' : 'false';
|
||||
$recusaCadastro = $fichaCadastroDomiciliar->recusa_cadastro ? 'true' : 'false';
|
||||
$foraArea = $fichaCadastroDomiciliar->fora_area ? 'true' : 'false';
|
||||
$energiaEletrica = $fichaCadastroDomiciliar->energia_eletrica ? 'true' : 'false';
|
||||
$fichaAtualizada = $fichaCadastroDomiciliar->uuid_ficha != null ? 'true' : 'false';
|
||||
$semNumero = $fichaCadastroDomiciliar->domicilio->endereco->sem_numero ? 'true' : 'false';
|
||||
|
||||
$cidadao = $fichaCadastroDomiciliar->domicilio->cidadaos()->first();
|
||||
|
||||
if ($cidadao) {
|
||||
|
||||
$telefone = $cidadao->telefones->filter(fn ($t) => Str::length($t->numero) === 11)->first()->numero ?? null;
|
||||
}
|
||||
|
||||
$residentes = self::getResidentes($fichaCadastroDomiciliar->domicilio_id);
|
||||
|
||||
$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/cadastrodomiciliar');
|
||||
|
||||
$dadoTransporteTransportXml->appendChild($dom->createElement('uuidDadoSerializado', $uuid));
|
||||
$dadoTransporteTransportXml->appendChild($dom->createElement('tipoDadoSerializado', TipoDadoSerializado::CADASTRO_DOMICILIAR));
|
||||
$dadoTransporteTransportXml->appendChild($dom->createElement('codIbge', $fichaCadastroDomiciliar->equipe->infraestrutura->endereco->logradouro->municipio->ibge));
|
||||
$dadoTransporteTransportXml->appendChild($dom->createElement('cnesDadoSerializado', $fichaCadastroDomiciliar->equipe->unidade->cnes));
|
||||
|
||||
if($fichaCadastroDomiciliar->equipe->area->numero_ine){
|
||||
|
||||
$dadoTransporteTransportXml->appendChild($dom->createElement('ineDadoSerializado', $fichaCadastroDomiciliar->equipe->area->numero_ine));
|
||||
}
|
||||
|
||||
$cadastroDomiciliarTransport = $dom->createElement('ns4:cadastroDomiciliarTransport');
|
||||
$dadoTransporteTransportXml->appendChild($cadastroDomiciliarTransport);
|
||||
|
||||
if ($recusaCadastro == 'false') {
|
||||
|
||||
if ($possuiAnimais == 'true' && optional($fichaCadastroDomiciliar->imovelTipo)->codigo_esus == ImovelTipo::DOMICILIO) {
|
||||
|
||||
self::getAnimais($dom, $fichaCadastroDomiciliar, $cadastroDomiciliarTransport);
|
||||
}
|
||||
|
||||
$codigoImovel = $fichaCadastroDomiciliar->imovelTipo->codigo_esus ?? null;
|
||||
|
||||
if (self::handleTipoImovelPermitido($codigoImovel)) {
|
||||
|
||||
$condicaoMoradia = $dom->createElement('condicaoMoradia');
|
||||
$cadastroDomiciliarTransport->appendChild($condicaoMoradia);
|
||||
|
||||
if ($fichaCadastroDomiciliar->abastecimento) {
|
||||
|
||||
$condicaoMoradia->appendChild($dom->createElement('abastecimentoAgua', $fichaCadastroDomiciliar->abastecimento->codigo_esus));
|
||||
}
|
||||
if (self::handleTipoImovelPermitidoRural($codigoImovel)
|
||||
&& (($fichaCadastroDomiciliar->domicilioZona->codigo_esus ?? null) == Zona::RURAL)
|
||||
) {
|
||||
|
||||
$condicaoMoradia->appendChild($dom->createElement('areaProducaoRural', $fichaCadastroDomiciliar->situacaoRural->codigo_esus ?? null));
|
||||
}
|
||||
|
||||
if ($fichaCadastroDomiciliar->destinoLixo) {
|
||||
|
||||
$condicaoMoradia->appendChild($dom->createElement('destinoLixo', $fichaCadastroDomiciliar->destinoLixo->codigo_esus));
|
||||
}
|
||||
|
||||
if ($fichaCadastroDomiciliar->formaEscoamento) {
|
||||
|
||||
$condicaoMoradia->appendChild($dom->createElement('formaEscoamentoBanheiro', $fichaCadastroDomiciliar->formaEscoamento->codigo_esus));
|
||||
}
|
||||
|
||||
if ($fichaCadastroDomiciliar->domicilioZona) {
|
||||
|
||||
$condicaoMoradia->appendChild($dom->createElement('localizacao', $fichaCadastroDomiciliar->domicilioZona->codigo_esus));
|
||||
}
|
||||
|
||||
if (self::handleTipoImovelPermitidoRural($codigoImovel)) {
|
||||
|
||||
if ($fichaCadastroDomiciliar->materialPredominante) {
|
||||
|
||||
$condicaoMoradia->appendChild($dom->createElement('materialPredominanteParedesExtDomicilio', $fichaCadastroDomiciliar->materialPredominante->codigo_esus));
|
||||
}
|
||||
|
||||
$condicaoMoradia->appendChild($dom->createElement('nuComodos', $fichaCadastroDomiciliar->quantidade_comodos));
|
||||
}
|
||||
|
||||
if ($residentes->sum('total_residentes') > 0) {
|
||||
|
||||
$condicaoMoradia->appendChild($dom->createElement('nuMoradores',$residentes->sum('total_residentes')));
|
||||
}
|
||||
|
||||
if (self::handleTipoImovelPermitidoRural($codigoImovel)) {
|
||||
|
||||
if ($fichaCadastroDomiciliar->SituacaoDomicilio) {
|
||||
|
||||
$condicaoMoradia->appendChild($dom->createElement('situacaoMoradiaPosseTerra', $fichaCadastroDomiciliar->SituacaoDomicilio->codigo_esus));
|
||||
}
|
||||
}
|
||||
|
||||
$condicaoMoradia->appendChild($dom->createElement('stDisponibilidadeEnergiaEletrica', $energiaEletrica));
|
||||
|
||||
if (self::handleTipoImovelPermitidoRural($codigoImovel)) {
|
||||
|
||||
if ($fichaCadastroDomiciliar->domicilioTipoAcesso) {
|
||||
|
||||
$condicaoMoradia->appendChild($dom->createElement('tipoAcessoDomicilio', $fichaCadastroDomiciliar->domicilioTipoAcesso->codigo_esus));
|
||||
}
|
||||
|
||||
if ($fichaCadastroDomiciliar->domicilioTipo) {
|
||||
|
||||
$condicaoMoradia->appendChild($dom->createElement('tipoDomicilio', $fichaCadastroDomiciliar->domicilioTipo->codigo_esus));
|
||||
}
|
||||
}
|
||||
|
||||
if ($fichaCadastroDomiciliar->tratamento) {
|
||||
|
||||
$condicaoMoradia->appendChild($dom->createElement('aguaConsumoDomicilio', $fichaCadastroDomiciliar->tratamento->codigo_esus));
|
||||
}
|
||||
}
|
||||
|
||||
$cadastroDomiciliarTransport->appendChild($dom->createElement('tipoEndereco', 3));
|
||||
|
||||
$enderecoLocalPermanencia = $dom->createElement('enderecoLocalPermanencia');
|
||||
$cadastroDomiciliarTransport->appendChild($enderecoLocalPermanencia);
|
||||
$enderecoLocalPermanencia->appendChild($dom->createElement('bairro', $fichaCadastroDomiciliar->domicilio->endereco->logradouro->bairro->nome));
|
||||
$enderecoLocalPermanencia->appendChild($dom->createElement('cep', $fichaCadastroDomiciliar->domicilio->endereco->logradouro->cep));
|
||||
$enderecoLocalPermanencia->appendChild($dom->createElement('codigoIbgeMunicipio', $fichaCadastroDomiciliar->domicilio->endereco->logradouro->municipio->ibge));
|
||||
|
||||
if ($fichaCadastroDomiciliar->domicilio->endereco->complemento) {
|
||||
|
||||
$enderecoLocalPermanencia->appendChild($dom->createElement('complemento', $fichaCadastroDomiciliar->domicilio->endereco->complemento));
|
||||
}
|
||||
|
||||
$enderecoLocalPermanencia->appendChild($dom->createElement('nomeLogradouro', $fichaCadastroDomiciliar->domicilio->endereco->logradouro->nome));
|
||||
|
||||
if($semNumero == 'false'){
|
||||
|
||||
$enderecoLocalPermanencia->appendChild($dom->createElement('numero', $fichaCadastroDomiciliar->domicilio->endereco->numero));
|
||||
}
|
||||
|
||||
$enderecoLocalPermanencia->appendChild($dom->createElement('numeroDneUf', str_pad($fichaCadastroDomiciliar->domicilio->endereco->logradouro->municipio->estado->codigo,2 ,'0', STR_PAD_LEFT)));
|
||||
if (isset($telefone)) {
|
||||
|
||||
$enderecoLocalPermanencia->appendChild($dom->createElement('telefoneContato', $telefone));
|
||||
}
|
||||
|
||||
$enderecoLocalPermanencia->appendChild($dom->createElement('tipoLogradouroNumeroDne', $fichaCadastroDomiciliar->domicilio->endereco->logradouro->tipo->codigo));
|
||||
$enderecoLocalPermanencia->appendChild($dom->createElement('stSemNumero', $semNumero));
|
||||
|
||||
if ($fichaCadastroDomiciliar->domicilio->endereco->referencia) {
|
||||
|
||||
$enderecoLocalPermanencia->appendChild($dom->createElement('pontoReferencia', $fichaCadastroDomiciliar->domicilio->endereco->referencia));
|
||||
}
|
||||
|
||||
if ($foraArea == 'false' && $fichaCadastroDomiciliar->microarea) {
|
||||
|
||||
$enderecoLocalPermanencia->appendChild($dom->createElement('microArea', str_pad($fichaCadastroDomiciliar->microarea->descricao, 2, '0', STR_PAD_LEFT)));
|
||||
}
|
||||
|
||||
$enderecoLocalPermanencia->appendChild($dom->createElement('stForaArea', $foraArea));
|
||||
}
|
||||
|
||||
if ($fichaCadastroDomiciliar->domicilio->endereco->latitude) {
|
||||
|
||||
$cadastroDomiciliarTransport->appendChild($dom->createElement('latitude', $fichaCadastroDomiciliar->domicilio->endereco->latitude));
|
||||
}
|
||||
|
||||
if ($fichaCadastroDomiciliar->domicilio->endereco->longitude) {
|
||||
|
||||
$cadastroDomiciliarTransport->appendChild($dom->createElement('longitude', $fichaCadastroDomiciliar->domicilio->endereco->longitude));
|
||||
}
|
||||
|
||||
if ($recusaCadastro == 'false' && $fichaCadastroDomiciliar->imovelTipo && $fichaCadastroDomiciliar->imovelTipo->codigo_esus == ImovelTipo::DOMICILIO) {
|
||||
|
||||
foreach ($residentes as $i => $residente) {
|
||||
|
||||
$pacientesPosicoes->push([
|
||||
'posicao' => $i + 1,
|
||||
'id' => $residente->paciente_id,
|
||||
]);
|
||||
|
||||
$familias = $dom->createElement('familias');
|
||||
$cadastroDomiciliarTransport->appendChild($familias);
|
||||
|
||||
$familias->appendChild($dom->createElement('dataNascimentoResponsavel', strtotime($residente->data_nascimento) * 1000));
|
||||
|
||||
if (Cns::isValid($residente->cns)) {
|
||||
|
||||
$familias->appendChild($dom->createElement('numeroCnsResponsavel', $residente->cns ?? ''));
|
||||
}
|
||||
|
||||
if (!Cns::isValid($residente->cns)) {
|
||||
|
||||
$familias->appendChild($dom->createElement('cpfResponsavel', $residente->cpf ?? ''));
|
||||
}
|
||||
|
||||
$familias->appendChild($dom->createElement('numeroMembrosFamilia', $residente->total_residentes));
|
||||
|
||||
$familias->appendChild($dom->createElement('numeroProntuario', $residente->prontuario));
|
||||
|
||||
if ($residente->total_renda && $residente->salario_minimo) {
|
||||
|
||||
$familias->appendChild($dom->createElement('rendaFamiliar', self::getRendaMensal($residente)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$cadastroDomiciliarTransport->appendChild($dom->createElement('fichaAtualizada', $fichaAtualizada));
|
||||
|
||||
if ($recusaCadastro == 'false' && $possuiAnimais == 'true' && $fichaCadastroDomiciliar->quantidade_animais
|
||||
&& $fichaCadastroDomiciliar->imovelTipo->codigo_esus == ImovelTipo::DOMICILIO) {
|
||||
|
||||
$cadastroDomiciliarTransport->appendChild($dom->createElement('quantosAnimaisNoDomicilio', $fichaCadastroDomiciliar->quantidade_animais));
|
||||
}
|
||||
|
||||
if ($recusaCadastro == 'false' && $fichaCadastroDomiciliar->imovelTipo && $fichaCadastroDomiciliar->imovelTipo->codigo_esus == ImovelTipo::DOMICILIO) {
|
||||
|
||||
$cadastroDomiciliarTransport->appendChild($dom->createElement('stAnimaisNoDomicilio', $possuiAnimais));
|
||||
}
|
||||
|
||||
$cadastroDomiciliarTransport->appendChild($dom->createElement('statusTermoRecusa', $recusaCadastro));
|
||||
$cadastroDomiciliarTransport->appendChild($dom->createElement('tpCdsOrigem', '3'));
|
||||
$cadastroDomiciliarTransport->appendChild($dom->createElement('uuid', $uuid));
|
||||
|
||||
if ($fichaAtualizada == 'true') {
|
||||
|
||||
$cadastroDomiciliarTransport->appendChild($dom->createElement('uuidFichaOriginadora', $fichaCadastroDomiciliar->uuid_ficha));
|
||||
} else {
|
||||
|
||||
$cadastroDomiciliarTransport->appendChild($dom->createElement('uuidFichaOriginadora', $uuid));
|
||||
}
|
||||
|
||||
$codigoEsus = $fichaCadastroDomiciliar->imovelTipo->codigo_esus ?? null;
|
||||
|
||||
$cadastroDomiciliarTransport->appendChild($dom->createElement('tipoDeImovel', $codigoEsus ?? ''));
|
||||
|
||||
if ($recusaCadastro == 'false' && $codigoEsus !== null && self::handleTipoImovelPermanencia($codigoEsus)) {
|
||||
|
||||
$instituicaoPermanencia = $dom->createElement('instituicaoPermanencia');
|
||||
$cadastroDomiciliarTransport->appendChild($instituicaoPermanencia);
|
||||
|
||||
$instituicaoPermanencia->appendChild($dom->createElement('nomeInstituicaoPermanencia', $fichaCadastroDomiciliar->instituicao_nome));
|
||||
|
||||
$instituicaoPermanencia->appendChild($dom->createElement('stOutrosProfissionaisVinculados', $instituicaoOutrosProfissionais));
|
||||
|
||||
$instituicaoPermanencia->appendChild($dom->createElement('nomeResponsavelTecnico', $fichaCadastroDomiciliar->instituicao_nome_responsavel_tecnico));
|
||||
|
||||
$instituicaoPermanencia->appendChild($dom->createElement('cnsResponsavelTecnico', $fichaCadastroDomiciliar->instituicao_cns_responsavel_tecnico));
|
||||
|
||||
$instituicaoPermanencia->appendChild($dom->createElement('cargoInstituicao', $fichaCadastroDomiciliar->instituicao_cargo_responsavel_tecnico));
|
||||
|
||||
$instituicaoPermanencia->appendChild($dom->createElement('telefoneResponsavelTecnico', $fichaCadastroDomiciliar->instituicao_telefone_responsavel_tecnico));
|
||||
}
|
||||
|
||||
$headerTransport = $dom->createElement('headerTransport');
|
||||
$cadastroDomiciliarTransport->appendChild($headerTransport);
|
||||
$headerTransport->appendChild($dom->createElement('profissionalCNS', $fichaCadastroDomiciliar->usuario->cidadao->cns ?? ''));
|
||||
$headerTransport->appendChild($dom->createElement('cboCodigo_2002', $fichaCadastroDomiciliar->ocupacao->codigo));
|
||||
$headerTransport->appendChild($dom->createElement('cnes', $fichaCadastroDomiciliar->equipe->unidade->cnes));
|
||||
|
||||
if($fichaCadastroDomiciliar->equipe->area->numero_ine){
|
||||
|
||||
$headerTransport->appendChild($dom->createElement('ine', $fichaCadastroDomiciliar->equipe->area->numero_ine));
|
||||
}
|
||||
$headerTransport->appendChild($dom->createElement('dataAtendimento', strtotime($fichaCadastroDomiciliar->data_usuario_responsavel) * 1000));
|
||||
$headerTransport->appendChild($dom->createElement('codigoIbgeMunicipio', $fichaCadastroDomiciliar->equipe->infraestrutura->endereco->logradouro->municipio->ibge));
|
||||
|
||||
$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();
|
||||
|
||||
$fichaCadastroDomiciliar->uuid_ficha = $uuid;
|
||||
$fichaCadastroDomiciliar->exportacao_id = $exportacao->id;
|
||||
$fichaCadastroDomiciliar->data_hora_exportacao = Carbon::now()->format('Y-m-d H:i:s');
|
||||
$fichaCadastroDomiciliar->usuario_exportacao_id = $usuarioId ?? self::getCurrentLotacao()->usuario_id ?? null;
|
||||
$fichaCadastroDomiciliar->save();
|
||||
|
||||
return [
|
||||
'exportacao' => $exportacao,
|
||||
'dom' => $dom,
|
||||
'pacientes' => $pacientesPosicoes,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getResidentes($id)
|
||||
{
|
||||
return DB::table('cadastro_cidadao')
|
||||
->select([
|
||||
'cadastro_paciente.id AS paciente_id',
|
||||
'atencao_basica_cadastro_individual.responsavel AS responsavel',
|
||||
'atencao_basica_cadastro_individual.responsavel_cidadao_id AS responsavel_cidadao_id',
|
||||
'cadastro_cidadao.data_nascimento',
|
||||
'cadastro_cidadao.cns',
|
||||
'cadastro_cidadao.cpf',
|
||||
'atencao_basica_cadastro_individual.renda_mensal as renda_responsavel',
|
||||
DB::raw('LPAD(cadastro_paciente.prontuario,7,0) AS prontuario'),
|
||||
DB::raw('(
|
||||
SELECT COUNT(*) + 1
|
||||
FROM atencao_basica_cadastro_individual
|
||||
WHERE responsavel_cidadao_id = cadastro_cidadao.id
|
||||
) AS total_residentes'),
|
||||
DB::raw('(
|
||||
SELECT salario_minimo
|
||||
FROM atencao_basica_parametrizacao_outros
|
||||
) AS salario_minimo'),
|
||||
DB::raw('(atencao_basica_cadastro_individual.renda_mensal + COALESCE((
|
||||
SELECT SUM(ci.renda_mensal)
|
||||
FROM atencao_basica_cadastro_individual as ci
|
||||
WHERE ci.responsavel_cidadao_id = cadastro_cidadao.id
|
||||
), 0)) AS total_renda')
|
||||
])
|
||||
->join('cadastro_paciente', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
|
||||
->leftJoin('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
|
||||
->where('cadastro_cidadao.domicilio_id', $id)
|
||||
->where('atencao_basica_cadastro_individual.responsavel', true)
|
||||
->whereNotExists(function ($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('cadastro_obito')
|
||||
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
|
||||
})
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getAnimais(&$dom, $fichaCadastroDomiciliar, &$cadastroDomiciliarTransport){
|
||||
|
||||
$animais = DB::table('atencao_basica_cadastro_domiciliar_animal')
|
||||
->select([
|
||||
'atencao_basica_cadastro_animal.codigo_esus',
|
||||
])
|
||||
->join(
|
||||
'atencao_basica_cadastro_animal',
|
||||
'atencao_basica_cadastro_animal.id',
|
||||
'atencao_basica_cadastro_domiciliar_animal.animal_id'
|
||||
)
|
||||
->where('atencao_basica_cadastro_domiciliar_animal.cadastro_domiciliar_id', $fichaCadastroDomiciliar->id)
|
||||
->get();
|
||||
|
||||
foreach ($animais as $animal) {
|
||||
|
||||
$cadastroDomiciliarTransport->appendChild($dom->createElement('animaisNoDomicilio', $animal->codigo_esus));
|
||||
}
|
||||
}
|
||||
|
||||
private static function handleTipoImovelPermitido($tipoImovel) {
|
||||
|
||||
return $tipoImovel == ImovelTipo::DOMICILIO
|
||||
|| $tipoImovel == ImovelTipo::ABRIGO
|
||||
|| $tipoImovel == ImovelTipo::INSTITUICAO_LONGA_PERMANENCIA_IDOSOS
|
||||
|| $tipoImovel == ImovelTipo::UNIDADE_PRISIONAL
|
||||
|| $tipoImovel == ImovelTipo::UNIDADE_MEDIDA_SOCIO_EDUCATIVA
|
||||
|| $tipoImovel == ImovelTipo::DELEGACIA ? true : false;
|
||||
}
|
||||
|
||||
private static function handleTipoImovelPermanencia($tipoImovel) {
|
||||
|
||||
return $tipoImovel == ImovelTipo::ABRIGO
|
||||
|| $tipoImovel == ImovelTipo::INSTITUICAO_LONGA_PERMANENCIA_IDOSOS
|
||||
|| $tipoImovel == ImovelTipo::UNIDADE_PRISIONAL
|
||||
|| $tipoImovel == ImovelTipo::UNIDADE_MEDIDA_SOCIO_EDUCATIVA
|
||||
|| $tipoImovel == ImovelTipo::DELEGACIA ? true : false;
|
||||
}
|
||||
|
||||
private static function handleTipoImovelPermitidoRural($tipoImovel) {
|
||||
|
||||
return $tipoImovel == ImovelTipo::DOMICILIO
|
||||
|| $tipoImovel == ImovelTipo::COMERCIO
|
||||
|| $tipoImovel == ImovelTipo::TERRENO_BALDIO
|
||||
|| $tipoImovel == ImovelTipo::PONTO_ESTRATEGICO
|
||||
|| $tipoImovel == ImovelTipo::ESCOLA
|
||||
|| $tipoImovel == ImovelTipo::CRECHE
|
||||
|| $tipoImovel == ImovelTipo::ESTABELECIMENTO_RELIGIOSO
|
||||
|| $tipoImovel == ImovelTipo::OUTROS ? true : false;
|
||||
}
|
||||
|
||||
private static function getRendaMensal($residente) {
|
||||
|
||||
$renda = $residente->total_renda;
|
||||
$salarioMinimo = $residente->salario_minimo;
|
||||
|
||||
if ($renda <= 0.25 * $salarioMinimo) {
|
||||
return SalarioMinimo::UM_QUARTO_SALARIO_MINIMO;
|
||||
} elseif ($renda <= 0.5 * $salarioMinimo) {
|
||||
return SalarioMinimo::MEIO_SALARIO_MINIMO;
|
||||
} elseif ($renda <= $salarioMinimo) {
|
||||
return SalarioMinimo::UM_QUARTO_SALARIO_MINIMO;
|
||||
} elseif ($renda <= 2 * $salarioMinimo) {
|
||||
return SalarioMinimo::DOIS_SALARIO_MINIMO;
|
||||
} elseif ($renda <= 3 * $salarioMinimo) {
|
||||
return SalarioMinimo::TRES_SALARIO_MINIMO;
|
||||
} elseif ($renda <= 4 * $salarioMinimo) {
|
||||
return SalarioMinimo::QUATRO_SALARIO_MINIMO;
|
||||
} else {
|
||||
return SalarioMinimo::ACIMA_QUATRO_SALARIO_MINIMO;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user