Files
Antonio Lopes dos Santos afec302c3e
All checks were successful
build-api-image / build (push) Successful in 51s
init commit
2026-08-04 16:52:02 -03:00

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();
}
}