89 lines
4.3 KiB
PHP
89 lines
4.3 KiB
PHP
<?php
|
|
|
|
namespace App\Services\AtencaoBasica\CadastroDomiciliar;
|
|
|
|
use App\Models\Cadastro\Localizacao\Domicilio;
|
|
use App\Services\Service;
|
|
use App\Utils\MaskUtil;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class FichaResidenteService extends Service
|
|
{
|
|
public static function index($id)
|
|
{
|
|
|
|
$cadastro = Domicilio::findOrFail($id);
|
|
|
|
return [
|
|
'endereco' => [
|
|
'id' => $cadastro->endereco->id ?? null,
|
|
'logradouro_tipo_id' => $cadastro->endereco->logradouro->tipo->id ?? null,
|
|
'logradouro_tipo' => $cadastro->endereco->logradouro->tipo->descricao ?? null,
|
|
'bairro_id' => $cadastro->endereco->logradouro->bairro->id ?? null,
|
|
'logradouro_cep' => $cadastro ? MaskUtil::getCepMasked($cadastro->endereco->logradouro->cep) : null,
|
|
'loteamento' => $cadastro->endereco->loteamento ?? null,
|
|
'complemento' => $cadastro->endereco->complemento ?? null,
|
|
'referencia' => $cadastro->endereco->referencia ?? null,
|
|
'latitude' => $cadastro->endereco->latitude ?? null,
|
|
'longitude' => $cadastro->endereco->longitude ?? null,
|
|
'logradouro' => $cadastro ? [
|
|
'municipio' => [
|
|
'estado' => [
|
|
'uf' => $cadastro->endereco->logradouro->municipio->estado->uf ?? null,
|
|
],
|
|
'nome' => $cadastro->endereco->logradouro->municipio->nome ?? null,
|
|
],
|
|
'bairro' => [
|
|
'nome' => $cadastro->endereco->logradouro->bairro->nome ?? null,
|
|
],
|
|
'tipo' => [
|
|
'descricao' => $cadastro->endereco->logradouro->tipo->descricao ?? null,
|
|
],
|
|
'nome' => $cadastro->endereco->logradouro->nome ?? null,
|
|
'id' => $cadastro->endereco->logradouro->id ?? null,
|
|
'cep' => $cadastro ? MaskUtil::getCepMasked($cadastro->endereco->logradouro->cep) : null,
|
|
] : null,
|
|
'numero' => $cadastro->endereco->numero ?? null,
|
|
'sem_numero' => $cadastro->endereco->sem_numero ?? null,
|
|
'latitude' => $cadastro->endereco->latitude ?? null,
|
|
'longitude' => $cadastro->endereco->longitude ?? null,
|
|
],
|
|
'residentes' => $cadastro ? self::getResidentes($cadastro->id) : [],
|
|
];
|
|
}
|
|
|
|
public static function getResidentes($id)
|
|
{
|
|
return DB::table('cadastro_cidadao')
|
|
->select([
|
|
'cadastro_cidadao.id AS id',
|
|
'cadastro_cidadao.nome AS nome',
|
|
'cadastro_cidadao.nome_social AS nome_social',
|
|
'cadastro_cidadao.cns',
|
|
'atencao_basica_cadastro_parentesco_responsavel.descricao AS parentesco',
|
|
DB::raw('
|
|
(
|
|
CASE WHEN cadastro_cidadao.nome_mae IS NULL THEN
|
|
"Não informado"
|
|
ELSE
|
|
cadastro_cidadao.nome_mae
|
|
END
|
|
) AS nome_mae'
|
|
),
|
|
DB::raw('LPAD(cadastro_paciente.prontuario,7,0) AS prontuario'),
|
|
DB::raw('IF (cadastro_cidadao.data_nascimento IS NULL, "Não informada", DATE_FORMAT(cadastro_cidadao.data_nascimento, "%d/%m/%Y")) AS data_nascimento'),
|
|
DB::raw('COALESCE(atencao_basica_cadastro_parentesco_responsavel.descricao, "-") AS parentesco'),
|
|
])
|
|
->join('cadastro_paciente', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
|
|
->leftJoin('atencao_basica_cadastro_individual', 'atencao_basica_cadastro_individual.paciente_id', 'cadastro_paciente.id')
|
|
->leftJoin('atencao_basica_cadastro_parentesco_responsavel', 'atencao_basica_cadastro_parentesco_responsavel.id', 'atencao_basica_cadastro_individual.parentesco_responsavel_id')
|
|
->where('cadastro_cidadao.domicilio_id', $id)
|
|
->whereNotExists(function ($query) {
|
|
$query->select(DB::raw(1))
|
|
->from('cadastro_obito')
|
|
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id');
|
|
})
|
|
->get();
|
|
}
|
|
}
|