init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,883 @@
<?php
namespace App\Services\AtencaoBasica\CadastroDomiciliar;
use App\Enums\AtencaoBasica\CadastroDomiciliar\ImovelTipo as enumsImovelTipo;
use App\Enums\AtencaoBasica\Parametrizacao\Permissao;
use App\Enums\Cadastro\Localizacao\Zona as enumsZona;
use App\Enums\AtencaoBasica\CadastroDomiciliar\CadastroTratamento as enumsTratamento;
use App\Enums\AtencaoBasica\CadastroDomiciliar\CadastroDestinoLixo as enumsDestinoLixo;
use App\Models\AtencaoBasica\AtendimentoIndividual\EscalaCoelho;
use App\Models\AtencaoBasica\CadastroDomiciliar\Abastecimento;
use App\Models\AtencaoBasica\CadastroDomiciliar\Animal;
use App\Models\AtencaoBasica\CadastroDomiciliar\CadastroDomiciliar;
use App\Models\AtencaoBasica\CadastroDomiciliar\DestinoLixo;
use App\Models\AtencaoBasica\CadastroDomiciliar\DomicilioTipo;
use App\Models\AtencaoBasica\CadastroDomiciliar\DomicilioTipoAcesso;
use App\Models\AtencaoBasica\CadastroDomiciliar\FormaEscoamento;
use App\Models\AtencaoBasica\CadastroDomiciliar\HigieneResidencial;
use App\Models\AtencaoBasica\CadastroDomiciliar\ImovelTipo;
use App\Models\AtencaoBasica\CadastroDomiciliar\Lazer;
use App\Models\AtencaoBasica\CadastroDomiciliar\MaterialPredominante;
use App\Models\AtencaoBasica\CadastroDomiciliar\SituacaoDomicilio;
use App\Models\AtencaoBasica\CadastroDomiciliar\SituacaoRural;
use App\Models\AtencaoBasica\CadastroDomiciliar\Tratamento;
use App\Models\AtencaoBasica\Parametrizacao\Equipe;
use App\Models\AtencaoBasica\Parametrizacao\Microarea;
use App\Models\AtencaoBasica\Parametrizacao\OutrosPermissaoOcupacao;
use App\Models\Cadastro\Localizacao\Bairro;
use App\Models\Cadastro\Localizacao\Domicilio;
use App\Models\Cadastro\Localizacao\DomicilioInformacaoResidencial;
use App\Models\Cadastro\Localizacao\Endereco;
use App\Models\Cadastro\Localizacao\Logradouro;
use App\Models\Cadastro\Localizacao\LogradouroTipo;
use App\Models\Cadastro\Localizacao\Loteamento;
use App\Models\Cadastro\Localizacao\Zona;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Cns\TermoInvalido;
use App\Models\Sigtap\Ocupacao;
use App\Rules\CnsTermoValido;
use App\Services\Cadastro\SujeitoAtencao\DomicilioService;
use App\Services\Service;
use App\Utils\ImportacaoCns;
use App\Utils\MaskUtil;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class CadastroDomiciliarService extends Service
{
public static function datatable()
{
$domicilios = DB::table('atencao_basica_cadastro_domiciliar')
->select(
'atencao_basica_cadastro_domiciliar.id AS id',
'cadastro_domicilio.id AS domicilio_id',
'cadastro_logradouro.nome AS logradouro_nome',
'cadastro_logradouro_tipo.descricao AS logradouro_tipo_descricao',
'cadastro_bairro.nome AS bairro',
DB::raw("COALESCE(cadastro_endereco.complemento, '-') AS endereco_complemento"),
DB::raw("COALESCE(cadastro_endereco.numero, '-') AS endereco_numero"),
DB::raw("COALESCE(cadastro_loteamento.nome, '-') AS loteamento_nome"),
DB::raw("CONCAT(
SUBSTR(cadastro_logradouro.cep,1,2),
'.',
SUBSTR(cadastro_logradouro.cep,3,3),
'-',
SUBSTR(cadastro_logradouro.cep,6,3)) AS logradouro_cep"
),
'cidadao_exportacao.nome as profissional_exportacao',
DB::raw("DATE_FORMAT(exportacao.created_at, '%d/%m/%Y') AS data_exportacao"),
DB::raw("DATE_FORMAT(exportacao.created_at, '%H:%i') AS horario_exportacao"),
)
->join('cadastro_domicilio', 'cadastro_domicilio.id', 'atencao_basica_cadastro_domiciliar.domicilio_id')
->join('cadastro_endereco', 'cadastro_endereco.id', 'cadastro_domicilio.endereco_id')
->join('cadastro_logradouro', 'cadastro_logradouro.id', 'cadastro_endereco.logradouro_id')
->join('cadastro_logradouro_tipo', 'cadastro_logradouro_tipo.id', 'cadastro_logradouro.tipo_id')
->join('cadastro_bairro', 'cadastro_bairro.id', 'cadastro_logradouro.bairro_id')
->leftJoin('cadastro_loteamento', 'cadastro_loteamento.id', 'cadastro_endereco.loteamento_id')
->leftJoin('cadastro_usuario as usuario_exportacao', 'usuario_exportacao.id', 'atencao_basica_cadastro_domiciliar.usuario_exportacao_id')
->leftJoin('cadastro_cidadao as cidadao_exportacao', 'cidadao_exportacao.id', 'usuario_exportacao.cidadao_id')
->leftJoin('atencao_basica_exportacao as exportacao', 'exportacao.id', 'atencao_basica_cadastro_domiciliar.exportacao_id');
return datatables()
->of($domicilios)
->filterColumn('cadastro_logradouro.cep', function ($query, $keyword) {
$query
->whereRaw("cadastro_logradouro.cep like ?", ["%{$keyword}%"])
->orWhereRaw(
"CONCAT(
SUBSTR(cadastro_logradouro.cep,1,2),
'.',
SUBSTR(cadastro_logradouro.cep,3,3),
'-',
SUBSTR(cadastro_logradouro.cep,6,3)
) like ?",
["%{$keyword}%"]
);
})
->filterColumn('cadastro_endereco.complemento', function ($query, $keyword) {
$query
->whereRaw("cadastro_endereco.complemento like ?", ["%{$keyword}%"])
->orWhereRaw(
"COALESCE(cadastro_endereco.complemento, '-') like ?",
["%{$keyword}%"]
);
})
->filterColumn('cadastro_endereco.numero', function ($query, $keyword) {
$query
->whereRaw("cadastro_endereco.numero like ?", ["%{$keyword}%"])
->orWhereRaw(
"COALESCE(cadastro_endereco.numero, '-') like ?",
["%{$keyword}%"]
);
})
->filterColumn('cadastro_loteamento.nome', function ($query, $keyword) {
$query
->whereRaw("cadastro_loteamento.nome like ?", ["%{$keyword}%"])
->orWhereRaw(
"COALESCE(cadastro_loteamento.nome, '-') like ?",
["%{$keyword}%"]
);
})
->skipTotalRecords()
->toJson();
}
public static function index()
{
return [
'model' => self::getModelData(),
'form' => [
'bairros' => Bairro::whereHas('logradouros')
->orderBy('nome')
->get(),
'logradouro_tipos' => LogradouroTipo::whereHas('logradouros', function($query) {
$query->whereHas('enderecos', function ($query) {
$query->whereHas('domicilios', function ($query) {
$query->whereHas('cadastroDomiciliar');
});
})
->when(request()->bairro_id, fn ($q, $bairroId) => $q
->where('bairro_id', $bairroId)
);
})
->orderBy('descricao')
->get(),
],
];
}
public static function list()
{
$cadastros = DB::table('atencao_basica_cadastro_domiciliar')
->select([
'atencao_basica_cadastro_domiciliar.id AS id',
'cadastro_domicilio.id AS domicilio_id',
'cadastro_logradouro.nome AS logradouro_nome',
'cadastro_logradouro_tipo.descricao AS logradouro_tipo_descricao',
'cadastro_bairro.nome AS bairro',
DB::raw("COALESCE(cadastro_endereco.complemento, '-') AS endereco_complemento"),
DB::raw("COALESCE(cadastro_endereco.numero, '-') AS endereco_numero"),
DB::raw("COALESCE(cadastro_loteamento.nome, '-') AS loteamento_nome"),
DB::raw("CONCAT(
SUBSTR(cadastro_logradouro.cep,1,2),
'.',
SUBSTR(cadastro_logradouro.cep,3,3),
'-',
SUBSTR(cadastro_logradouro.cep,6,3)) AS logradouro_cep"
),
])
->join('cadastro_domicilio', 'cadastro_domicilio.id', 'atencao_basica_cadastro_domiciliar.domicilio_id')
->join('cadastro_endereco', 'cadastro_endereco.id', 'cadastro_domicilio.endereco_id')
->join('cadastro_logradouro', 'cadastro_logradouro.id', 'cadastro_endereco.logradouro_id')
->join('cadastro_logradouro_tipo', 'cadastro_logradouro_tipo.id', 'cadastro_logradouro.tipo_id')
->join('cadastro_bairro', 'cadastro_bairro.id', 'cadastro_logradouro.bairro_id')
->leftJoin('cadastro_loteamento', 'cadastro_loteamento.id', 'cadastro_endereco.loteamento_id')
->when(request()->bairro_id, fn ($q, $bairroId) => $q
->where('cadastro_bairro.id', $bairroId)
)
->when(request()->logradouro_tipo_id, fn ($q, $logradouroTipoId) => $q
->where('cadastro_logradouro_tipo.id', $logradouroTipoId)
)
->when(request()->logradouro_id, fn ($q, $logradouroId) => $q
->where('cadastro_logradouro.id', $logradouroId)
)
->when(request()->endereco_numero, fn ($q, $enderecoNumero) => $q
->where('cadastro_endereco.numero', $enderecoNumero)
)
->when(request()->logradouro_cep, fn ($q, $logradouroCep) => $q
->whereRaw(
"CONCAT(
SUBSTR(cadastro_logradouro.cep,1,2),
'.',
SUBSTR(cadastro_logradouro.cep,3,3),
'-',
SUBSTR(cadastro_logradouro.cep,6,3)
) = ?",
[$logradouroCep]
)
)
->groupBy([
'cadastro_domicilio.id',
])
->get();
return [
'form' => [
'data_atual' => Carbon::now()->format('d/m/Y'),
],
'model' => [
'cadastros' => $cadastros,
],
];
}
public static function getMicroareas(){
return DB::table('atencao_basica_parametrizacao_area')
->select([
'atencao_basica_parametrizacao_microarea.id AS id',
'atencao_basica_parametrizacao_microarea.descricao AS descricao_micro',
DB::raw("CONCAT(
'INE: ', LPAD(atencao_basica_parametrizacao_area.numero_ine, 10, '0'),
CASE
WHEN atencao_basica_parametrizacao_area.descricao
THEN CONCAT(' - Área: ', atencao_basica_parametrizacao_area.descricao)
ELSE ''
END,
' - Microárea: ', atencao_basica_parametrizacao_microarea.descricao
) AS descricao")
])
->join('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.area_id', 'atencao_basica_parametrizacao_area.id')
->get();
}
public static function getEquipes(){
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'atencao_basica_parametrizacao_equipe.id AS id',
DB::raw("CONCAT(
'INE: ', COALESCE(atencao_basica_parametrizacao_area.numero_ine, ''),
CASE
WHEN atencao_basica_parametrizacao_area.descricao
THEN CONCAT(' - Área: ', atencao_basica_parametrizacao_area.descricao)
ELSE ''
END,
' - Microárea: ', COALESCE(atencao_basica_parametrizacao_microarea.descricao, '')
) AS descricao")
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->join('atencao_basica_parametrizacao_area', 'atencao_basica_parametrizacao_area.id', 'atencao_basica_parametrizacao_equipe.area_id')
->leftJoin('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.id', 'atencao_basica_parametrizacao_equipe.microarea_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->when(request()->infraestrutura_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.infraestrutura_id', $id))
->get();
}
public static function getUnidades(){
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'cadastro_unidade.id AS id',
'cadastro_unidade.nome_fantasia AS nome_fantasia',
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->distinct()
->get();
}
public static function getInfraestruturas(){
return DB::table('atencao_basica_parametrizacao_equipe_usuario')
->select([
'cadastro_infraestrutura.id AS id',
DB::raw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) AS nome'),
])
->join('atencao_basica_parametrizacao_equipe', 'atencao_basica_parametrizacao_equipe.id', 'atencao_basica_parametrizacao_equipe_usuario.equipe_id')
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'atencao_basica_parametrizacao_equipe.infraestrutura_id')
->join('cadastro_unidade', 'cadastro_unidade.id', 'atencao_basica_parametrizacao_equipe.unidade_id')
->where('atencao_basica_parametrizacao_equipe_usuario.ativo', true)
->when(request()->usuario_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe_usuario.usuario_id', $id))
->when(request()->unidade_id, fn ($q, $id) => $q->where('atencao_basica_parametrizacao_equipe.unidade_id', $id))
->distinct()
->orderBy('nome')
->get();
}
public static function getOcupacoes()
{
$usuario = Usuario::findOrFail(request()->usuario_id);
$permissao = OutrosPermissaoOcupacao::where('permissao_id', Permissao::CADASTRO_DOMICILIAR)->get();
$codigos = $permissao->pluck('ocupacao');
return $usuario->lotacoes
->filter(function ($lotacao) use ($codigos) {
return $lotacao->infraestrutura->id == request()->infraestrutura_id &&
$codigos->contains($lotacao->ocupacao->codigo);
})
->pluck('ocupacao');
}
public static function getCadastro()
{
$endereco = Endereco::select([
'atencao_basica_cadastro_domiciliar.id as atencao_basica_cadastro_domiciliar_id'
])
->join('cadastro_domicilio', 'cadastro_endereco.id', '=', 'cadastro_domicilio.endereco_id')
->join('atencao_basica_cadastro_domiciliar', 'cadastro_domicilio.id', '=', 'atencao_basica_cadastro_domiciliar.domicilio_id')
->where('numero', request()->endereco['numero'])
->where('complemento', request()->endereco['complemento'])
->when(request()->endereco['logradouro']['id'], function ($query, $logradouroId) {
$query->whereHas('logradouro', function ($q) use ($logradouroId) {
$q->where('id', $logradouroId);
});
})
->first();
if ($endereco) {
return $endereco->atencao_basica_cadastro_domiciliar_id;
} else {
return self::getDomicilio();
}
}
private static function getDomicilio() {
$informacaoResidencial = null;
$domicilio = null;
$endereco = Endereco::where('logradouro_id', request()->endereco['logradouro']['id'])
->where('numero', request()->endereco['numero'])
->where('complemento',request()->endereco['complemento'])
->first();
if ($endereco) {
$domicilio = $endereco->domicilios->first();
if ($domicilio) {
$informacaoResidencial = $domicilio->informacaoResidencial;
if ($informacaoResidencial && $informacaoResidencial->lazer) {
$informacaoResidencial->new_lazer = $informacaoResidencial->lazer->pluck('id')->toArray();
}
if ($informacaoResidencial && $informacaoResidencial->animal) {
$informacaoResidencial->new_animal = $informacaoResidencial->animal->pluck('id')->toArray();
}
}
}
return [
'informacaoResidencial' => $informacaoResidencial,
'residentes' => $domicilio ? self::getResidentes($domicilio->id) : [],
];
}
private static function getFormData($cadastro = null)
{
return [
'data_atual' => Carbon::now()->format('d/m/Y'),
'bairros' => Bairro::whereHas('logradouros')
->orderBy('nome')
->get(),
'logradouro_tipos' => LogradouroTipo::whereHas('logradouros')->orderBy('descricao')->get(),
'imovel_tipo' => ImovelTipo::orderBy('descricao')->get(),
'situacao_domicilio' => SituacaoDomicilio::orderBy('descricao')->get(),
'domicilio_tipo' => DomicilioTipo::orderBy('descricao')->get(),
'situacao_rural' => SituacaoRural::orderBy('descricao')->get(),
'zonas' => Zona::orderBy('descricao')->get()->map(fn ($zona) => [
'id' => $zona->id,
'descricao' => $zona->descricao
]),
'domicilio_tipo_acesso' => DomicilioTipoAcesso::orderBy('descricao')->get(),
'material_predominante' => MaterialPredominante::orderBy('descricao')->get(),
'abastecimento' => Abastecimento::orderBy('descricao')->get(),
'tratamento' => Tratamento::whereNotIn('id',[enumsTratamento::FILTRADA])->orderBy('descricao')->get(),
'destino_lixo' => DestinoLixo::whereNotin('id',[enumsDestinoLixo::QUEIMADO_ENTERRADO])->orderBy('descricao')->get(),
'forma_escoamento' => FormaEscoamento::orderBy('descricao')->get(),
'higiene_residencial' => HigieneResidencial::orderBy('descricao')->get(),
'animais' => Animal::orderBy('descricao')->get(),
'lazer' => Lazer::orderBy('descricao')->get(),
'residentes' => $cadastro ? self::getResidentes($cadastro->domicilio_id) : [],
'microareas' => self::getMicroareas(),
'termos_invalidos' => TermoInvalido::all()->map(fn ($termo) => $termo->descricao),
'escala_coelho' => EscalaCoelho::orderBy('id')->get(),
];
}
private static function getModelData($cadastro = null)
{
return [
'id' => $cadastro->id ?? null,
'domicilio_id' => $cadastro->domicilio_id ?? null,
'cadastro' => [
'usuario' => [
'id' => $cadastro->usuario->id ?? null,
'cidadao_nome' => $cadastro->usuario->cidadao->nome ?? null,
],
'unidade_id' => $cadastro->equipe->unidade_id ?? null,
'infraestrutura_id' => $cadastro->equipe->infraestrutura_id ?? null,
'equipe_id' => $cadastro->equipe_id ?? null,
'ocupacao_id' => $cadastro->usuario_ocupacao_id ?? null,
'data_usuario_responsavel' => $cadastro->data_usuario_responsavel ?? Carbon::now()->format('Y-m-d'),
],
'informacao' => [
'escala_coelho_id' => $cadastro->escala_coelho_id ?? null,
'higiene_residencial_id' => $cadastro->higiene_residencial_id ?? null,
'bolsa_familia' => $cadastro->bolsa_familia ?? null,
'vale_gas' => $cadastro->vale_gas ?? null,
'bolsa_escola' => $cadastro->bolsa_escola ?? null,
'lazer' => $cadastro ? $cadastro->lazer->pluck('id') : [],
'bpc' => $cadastro->bpc ?? null,
],
'endereco' => [
'id' => $cadastro->domicilio->endereco->id ?? null,
'logradouro_tipo_id' => $cadastro->domicilio->endereco->logradouro->tipo->id ?? null,
'bairro_id' => $cadastro->domicilio->endereco->logradouro->bairro->id ?? null,
'logradouro_cep' => $cadastro ? MaskUtil::getCepMasked($cadastro->domicilio->endereco->logradouro->cep) : null,
'loteamento' => $cadastro->domicilio->endereco->loteamento ?? null,
'complemento' => $cadastro->domicilio->endereco->complemento ?? null,
'latitude' => $cadastro->domicilio->endereco->latitude ?? null,
'longitude' => $cadastro->domicilio->endereco->longitude ?? null,
'logradouro' => $cadastro ? [
'municipio' => [
'estado' => [
'uf' => $cadastro->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
],
'nome' => $cadastro->domicilio->endereco->logradouro->municipio->nome ?? null,
],
'bairro' => [
'nome' => $cadastro->domicilio->endereco->logradouro->bairro->nome ?? null,
],
'tipo' => [
'descricao' => $cadastro->domicilio->endereco->logradouro->tipo->descricao ?? null,
],
'nome' => $cadastro->domicilio->endereco->logradouro->nome ?? null,
'id' => $cadastro->domicilio->endereco->logradouro->id ?? null,
'cep' => $cadastro ? MaskUtil::getCepMasked($cadastro->domicilio->endereco->logradouro->cep) : null,
] : null,
'numero' => $cadastro->domicilio->endereco->numero ?? null,
'sem_numero' => $cadastro->domicilio->endereco->sem_numero ?? null,
'latitude' => $cadastro->domicilio->endereco->latitude ?? null,
'longitude' => $cadastro->domicilio->endereco->longitude ?? null,
'microarea_id' => $cadastro->microarea_id ?? null,
'fora_area' => $cadastro->fora_area ?? null,
],
'residencia' => [
'imovel_tipo_id' => $cadastro->imovel_tipo_id ?? null,
'situacao_domicilio_id' => $cadastro->situacao_domicilio_id ?? null,
'domicilio_tipo_id' => $cadastro->domicilio_tipo_id ?? null,
'quantidade_comodos' => $cadastro->quantidade_comodos ?? null,
'situacao_rural_id' => $cadastro->situacao_rural_id ?? null,
'domicilio_zona_id' => $cadastro->domicilio_zona_id ?? null,
'domicilio_tipo_acesso_id' => $cadastro->domicilio_tipo_acesso_id ?? null,
'material_predominante_id' => $cadastro->material_predominante_id ?? null,
'abastecimento_id' => $cadastro->abastecimento_id ?? null,
'tratamento_id' => $cadastro->tratamento_id ?? null,
'destino_lixo_id' => $cadastro->destino_lixo_id ?? null,
'forma_escoamento_id' => $cadastro->forma_escoamento_id ?? null,
'possui_animais' => $cadastro->possui_animais ?? null,
'energia_eletrica' => $cadastro->energia_eletrica ?? null,
'quantidade_animais' => $cadastro->quantidade_animais ?? null,
'animal' => $cadastro ? $cadastro->animal->pluck('id') : [],
],
'instituicao' => [
'nome' => $cadastro->instituicao_nome ?? null,
'outros_profissionais' => $cadastro->instituicao_outros_profissionais ?? false,
'nome_responsavel_tecnico' => $cadastro->instituicao_nome_responsavel_tecnico ?? null,
'cns_responsavel_tecnico' => $cadastro && $cadastro->instituicao_cns_responsavel_tecnico
? MaskUtil::getCnsMasked($cadastro->instituicao_cns_responsavel_tecnico) : null,
'cargo_responsavel_tecnico' => $cadastro->instituicao_cargo_responsavel_tecnico ?? null,
'telefone_responsavel_tecnico' => $cadastro && $cadastro->instituicao_telefone_responsavel_tecnico ?
MaskUtil::getPhoneMasked($cadastro->instituicao_telefone_responsavel_tecnico) : null
],
'recusa_cadastro' => $cadastro->recusa_cadastro ?? false,
'exportacao' => [
'data' => $cadastro && $cadastro->data_hora_exportacao
? (new Carbon($cadastro->data_hora_exportacao))->format('d/m/Y') . ' às '
. (new Carbon($cadastro->data_hora_exportacao))->format('H:i')
: null,
'profissional' => $cadastro && $cadastro->usuarioExportacao
? $cadastro->usuarioExportacao->cidadao->nome
: null,
]
];
}
public static function show($id)
{
return CadastroDomiciliar::where('id', $id)->first();
}
public static function create()
{
return [
'form' => self::getFormData(),
'model' => self::getModelData(),
];
}
public static function edit($id)
{
$cadastro = self::show($id);
return [
'form' => self::getFormData($cadastro),
'model' => self::getModelData($cadastro),
];
}
public static function store()
{
return self::saveStore(request()->all());
}
public static function saveStore($params)
{
self::validate($params);
if (isset($params['domicilio_id']) && !empty($params['domicilio_id'])) {
$domicilioId = $params['domicilio_id'];
} else {
$domicilioId = DomicilioService::save($params)->id;
}
$params = (object) $params;
if ($params->id == null) {
$cadastroDomiciliar = CadastroDomiciliar::where('domicilio_id', $domicilioId)
->first() ?? new CadastroDomiciliar();
} else {
$cadastroDomiciliar = CadastroDomiciliar::findOrFail($params->id);
}
$cadastroDomiciliar->domicilio_id = $domicilioId;
$cadastroDomiciliar->microarea_id = $params->endereco['microarea_id'];
$cadastroDomiciliar->fora_area = $params->endereco['fora_area'];
$cadastroDomiciliar->recusa_cadastro = $params->recusa_cadastro;
$cadastro = $params->cadastro;
$cadastroDomiciliar->data_usuario_responsavel = $cadastro['data_usuario_responsavel'];
$cadastroDomiciliar->equipe_id = $cadastro['equipe_id'];
$cadastroDomiciliar->usuario_ocupacao_id = $cadastro['ocupacao_id'];
$cadastroDomiciliar->usuario_id = $cadastro['usuario_id'];
$instituicao = $params->instituicao;
$cadastroDomiciliar->instituicao_nome = $instituicao['nome'];
$cadastroDomiciliar->instituicao_outros_profissionais = $instituicao['outros_profissionais'];
$cadastroDomiciliar->instituicao_nome_responsavel_tecnico = $instituicao['nome_responsavel_tecnico'];
$cadastroDomiciliar->instituicao_cns_responsavel_tecnico = $instituicao['cns_responsavel_tecnico'];
$cadastroDomiciliar->instituicao_cargo_responsavel_tecnico = $instituicao['cargo_responsavel_tecnico'];
$cadastroDomiciliar->instituicao_telefone_responsavel_tecnico = $instituicao['telefone_responsavel_tecnico'];
$residencia = $params->residencia;
$cadastroDomiciliar->imovel_tipo_id = $residencia['imovel_tipo_id'];
$cadastroDomiciliar->situacao_domicilio_id = $residencia['situacao_domicilio_id'];
$cadastroDomiciliar->domicilio_tipo_id = $residencia['domicilio_tipo_id'];
$cadastroDomiciliar->quantidade_comodos = $residencia['quantidade_comodos'];
$cadastroDomiciliar->situacao_rural_id = $residencia['situacao_rural_id'];
$cadastroDomiciliar->domicilio_zona_id = $residencia['domicilio_zona_id'];
$cadastroDomiciliar->domicilio_tipo_acesso_id = $residencia['domicilio_tipo_acesso_id'];
$cadastroDomiciliar->material_predominante_id = $residencia['material_predominante_id'];
$cadastroDomiciliar->abastecimento_id = $residencia['abastecimento_id'];
$cadastroDomiciliar->tratamento_id = $residencia['tratamento_id'];
$cadastroDomiciliar->destino_lixo_id = $residencia['destino_lixo_id'];
$cadastroDomiciliar->forma_escoamento_id = $residencia['forma_escoamento_id'];
$cadastroDomiciliar->possui_animais = $residencia['possui_animais'];
$cadastroDomiciliar->quantidade_animais = $residencia['quantidade_animais'];
$cadastroDomiciliar->energia_eletrica = $residencia['energia_eletrica'];
$informacao = $params->informacao;
$cadastroDomiciliar->escala_coelho_id = $informacao['escala_coelho_id'];
$cadastroDomiciliar->higiene_residencial_id = $informacao['higiene_residencial_id'];
$cadastroDomiciliar->bolsa_familia = $informacao['bolsa_familia'];
$cadastroDomiciliar->vale_gas = $informacao['vale_gas'];
$cadastroDomiciliar->bolsa_escola = $informacao['bolsa_escola'];
$cadastroDomiciliar->bpc = $informacao['bpc'];
$cadastroDomiciliar->exportacao_id = null;
$cadastroDomiciliar->data_usuario_responsavel = Carbon::now()->format('Y-m-d');
$cadastroDomiciliar->save();
$cadastroDomiciliar->lazer()->sync($informacao['lazer']);
$cadastroDomiciliar->animal()->sync($residencia['animal']);
if ($params->origem == 'atencaoBasica') {
self::saveDomicilioInformacaoResidencial($domicilioId, $params);
}
}
private static function saveDomicilioInformacaoResidencial($domicilioId, $params) {
$instituicao = $params->instituicao;
$residencia = $params->residencia;
$informacao = $params->informacao;
DomicilioInformacaoResidencial::updateOrCreate(
[
'domicilio_id' => $domicilioId,
],
[
'microarea_id' => $params->endereco['microarea_id'],
'fora_area' => $params->endereco['fora_area'],
'instituicao_nome' => $instituicao['nome'],
'instituicao_outros_profissionais' => $instituicao['outros_profissionais'],
'instituicao_nome_responsavel_tecnico' => $instituicao['nome_responsavel_tecnico'],
'instituicao_cns_responsavel_tecnico' => $instituicao['cns_responsavel_tecnico'],
'instituicao_cargo_responsavel_tecnico' => $instituicao['cargo_responsavel_tecnico'],
'instituicao_telefone_responsavel_tecnico' => $instituicao['telefone_responsavel_tecnico'],
'imovel_tipo_id' => $residencia['imovel_tipo_id'],
'situacao_domicilio_id' => $residencia['situacao_domicilio_id'],
'domicilio_tipo_id' => $residencia['domicilio_tipo_id'],
'quantidade_comodos' => $residencia['quantidade_comodos'],
'situacao_rural_id' => $residencia['situacao_rural_id'],
'domicilio_zona_id' => $residencia['domicilio_zona_id'],
'domicilio_tipo_acesso_id' => $residencia['domicilio_tipo_acesso_id'],
'material_predominante_id' => $residencia['material_predominante_id'],
'abastecimento_id' => $residencia['abastecimento_id'],
'tratamento_id' => $residencia['tratamento_id'],
'destino_lixo_id' => $residencia['destino_lixo_id'],
'forma_escoamento_id' => $residencia['forma_escoamento_id'],
'possui_animais' => $residencia['possui_animais'],
'quantidade_animais' => $residencia['quantidade_animais'],
'energia_eletrica' => $residencia['energia_eletrica'],
'higiene_residencial_id' => $informacao['higiene_residencial_id'],
'bolsa_familia' => $informacao['bolsa_familia'],
'vale_gas' => $informacao['vale_gas'],
'bolsa_escola' => $informacao['bolsa_escola'],
'bpc' => $informacao['bpc'],
'escala_coelho_id' => $informacao['escala_coelho_id'],
]
);
$domicilio = Domicilio::where('id', $domicilioId)->first();
if ($domicilio->informacaoResidencial) {
$domicilio->informacaoResidencial->lazer()->sync($informacao['lazer']);
$domicilio->informacaoResidencial->animal()->sync($residencia['animal']);
}
}
private 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();
}
private static function validate($params)
{
return Validator::make($params, [
'cadastro.usuario_id' => [
'required',
'integer',
Rule::exists(Usuario::class, 'id'),
],
'cadastro.equipe_id' => [
'required',
'integer',
Rule::exists(Equipe::class, 'id'),
],
'cadastro.ocupacao_id' => [
'required',
'integer',
Rule::exists(Ocupacao::class, 'id'),
],
'cadastro.data_usuario_responsavel' => [
'required',
'date',
],
'informacao.higiene_residencial_id' => [
'nullable',
'integer',
Rule::exists(HigieneResidencial::class, 'id'),
],
'informacao.escala_coelho_id' => [
'nullable',
'integer',
Rule::exists(EscalaCoelho::class, 'id'),
],
'informacao.lazer' => [
'nullable',
'array',
Rule::exists(Lazer::class, 'id'),
],
'instituicao.nome' => [
'nullable',
'string',
'min:3',
'max:100'
],
'instituicao.nome_responsavel_tecnico' => [
'nullable',
'string',
'min:3',
'max:70'
],
'instituicao.cns_responsavel_tecnico' => [
'nullable',
'digits:15',
],
'instituicao.cargo_responsavel_tecnico' => [
'nullable',
'string',
'min:3',
'max:70'
],
'instituicao.telefone_responsavel_tecnico' => [
'nullable',
'digits_between:10,11'
],
'endereco.logradouro_id' => [
'nullable',
'integer',
Rule::exists(Logradouro::class, 'id')
],
'endereco.numero' => [
'nullable',
'digits_between:1,6',
],
'endereco.complemento' => [
'nullable',
'string',
'between:3,30',
'not_regex:' . ImportacaoCns::regexValidacao(),
new CnsTermoValido(['attribute' => 'Complemento']),
],
'endereco.latitude' => [
'nullable',
'string',
'size:10',
],
'endereco.longitude' => [
'nullable',
'string',
'size:10',
],
'endereco.loteamento_id' => [
'nullable',
'integer',
Rule::exists(Loteamento::class, 'id'),
],
'endereco.microarea_id' => [
'nullable',
'required_if:endereco.fora_area,false',
'integer',
Rule::exists(Microarea::class, 'id'),
],
'residencia.imovel_tipo_id' => [
'nullable',
'integer',
Rule::exists(ImovelTipo::class, 'id'),
],
'residencia.situacao_domicilio_id' => [
'nullable',
Rule::requiredIf(function () {
return request()->input('residencia.imovel_tipo_id') === enumsImovelTipo::DOMICILIO &&
!request()->input('recusa_cadastro');
}),
'integer',
Rule::exists(SituacaoDomicilio::class, 'id'),
],
'residencia.domicilio_tipo_id' => [
'nullable',
'required_if:residencia.domicilio_tipo_id,' . enumsImovelTipo::DOMICILIO,
'integer',
Rule::exists(DomicilioTipo::class, 'id'),
],
'residencia.situacao_rural_id' => [
'nullable',
'required_if:residencia.domicilio_zona_id,' . enumsZona::RURAL,
'integer',
Rule::exists(SituacaoRural::class, 'id'),
],
'residencia.domicilio_zona_id' => [
'nullable',
'integer',
Rule::exists(Zona::class, 'id'),
],
'residencia.domicilio_tipo_acesso_id' => [
'nullable',
'integer',
Rule::exists(DomicilioTipoAcesso::class, 'id'),
],
'residencia.material_predominante_id' => [
'nullable',
'integer',
Rule::exists(MaterialPredominante::class, 'id'),
],
'residencia.abastecimento_id' => [
'nullable',
'integer',
Rule::exists(Abastecimento::class, 'id'),
],
'residencia.tratamento_id' => [
'nullable',
'integer',
Rule::exists(Tratamento::class, 'id'),
],
'residencia.destino_lixo_id' => [
'nullable',
'integer',
Rule::exists(DestinoLixo::class, 'id'),
],
'residencia.forma_escoamento_id' => [
'nullable',
'integer',
Rule::exists(FormaEscoamento::class, 'id'),
],
'situacao_rua.animal' => [
'nullable',
'array',
Rule::exists(Animal::class, 'id'),
],
'quantidade_animais' => [
'nullable',
'integer',
'min:0',
'max:99'
],
])->validate();
}
}

View File

@@ -0,0 +1,88 @@
<?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();
}
}

View File

@@ -0,0 +1,223 @@
<?php
namespace App\Services\AtencaoBasica\CadastroDomiciliar;
use App\Models\AtencaoBasica\CadastroDomiciliar\Abastecimento;
use App\Models\AtencaoBasica\CadastroDomiciliar\Animal;
use App\Models\AtencaoBasica\CadastroDomiciliar\CadastroDomiciliar;
use App\Models\AtencaoBasica\CadastroDomiciliar\DestinoLixo;
use App\Models\AtencaoBasica\CadastroDomiciliar\DomicilioTipo;
use App\Models\AtencaoBasica\CadastroDomiciliar\DomicilioTipoAcesso;
use App\Models\AtencaoBasica\CadastroDomiciliar\FormaEscoamento;
use App\Models\AtencaoBasica\CadastroDomiciliar\HigieneResidencial;
use App\Models\AtencaoBasica\CadastroDomiciliar\ImovelTipo;
use App\Models\AtencaoBasica\CadastroDomiciliar\Lazer;
use App\Models\AtencaoBasica\CadastroDomiciliar\MaterialPredominante;
use App\Models\AtencaoBasica\CadastroDomiciliar\SituacaoDomicilio;
use App\Models\AtencaoBasica\CadastroDomiciliar\SituacaoRural;
use App\Models\AtencaoBasica\CadastroDomiciliar\Tratamento;
use App\Models\Cadastro\Localizacao\Bairro;
use App\Models\Cadastro\Localizacao\LogradouroTipo;
use App\Models\Cadastro\Localizacao\Zona;
use App\Models\Cns\TermoInvalido;
use App\Models\Intranet\Cliente;
use App\Models\Sigtap\Ocupacao;
use App\Services\Service;
use App\Utils\MaskUtil;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class FichaService extends Service
{
public static function index($id)
{
$currentLotacao = self::getCurrentLotacao();
$cliente = Cliente::where('link', app('config')->get('database.default'))->firstOrFail();
$cadastro = CadastroDomiciliar::findOrFail($id);
return [
'form' => [
'data_atual' => Carbon::now()->format('d/m/Y'),
'unidade' => $currentLotacao->infraestrutura->unidade->nome_fantasia,
'unidade_id' => $currentLotacao->infraestrutura->unidade->id,
'infraestrutura_id' => $currentLotacao->infraestrutura->id,
'infraestrutura' => $currentLotacao->infraestrutura->nome,
'sistema' => [
'ramo_atividade' => [
'nome' => $cliente->sistema->ramoAtividade->nome ?? null,
],
'nome' => $cliente->sistema->nome ?? null,
'versao' => $cliente->sistema->versao ?? null,
],
'bairros' => Bairro::whereHas('logradouros')
->orderBy('nome')
->get(),
'logradouro_tipos' => LogradouroTipo::whereHas('logradouros')->orderBy('descricao')->get(),
'imovel_tipo' => ImovelTipo::orderBy('descricao')->get(),
'situacao_domicilio' => SituacaoDomicilio::orderBy('descricao')->get(),
'domicilio_tipo' => DomicilioTipo::orderBy('descricao')->get(),
'situacao_rural' => SituacaoRural::orderBy('descricao')->get(),
'zonas' => Zona::orderBy('descricao')->get()->map(fn ($zona) => [
'id' => $zona->id,
'descricao' => $zona->descricao
]),
'domicilio_tipo_acesso' => DomicilioTipoAcesso::orderBy('descricao')->get(),
'material_predominante' => MaterialPredominante::orderBy('descricao')->get(),
'abastecimento' => Abastecimento::orderBy('descricao')->get(),
'tratamento' => Tratamento::orderBy('descricao')->get(),
'destino_lixo' => DestinoLixo::orderBy('descricao')->get(),
'forma_escoamento' => FormaEscoamento::orderBy('descricao')->get(),
'higiene_residencial' => HigieneResidencial::orderBy('descricao')->get(),
'animais' => Animal::orderBy('descricao')->get(),
'lazer' => Lazer::orderBy('descricao')->get(),
'residentes' => $cadastro ? self::getResidentes($cadastro->domicilio_id) : [],
'microareas' => self::getMicroareas(),
'termos_invalidos' => TermoInvalido::all()->map(fn ($termo) => $termo->descricao),
],
'cadastro' => [
'usuario' => [
'id' => $cadastro->usuario->id ?? null,
'cidadao_nome' => $cadastro->usuario->cidadao->nome ?? null,
'cns' => $cadastro->usuario->cidadao->cns
? MaskUtil::getCnsMasked($cadastro->usuario->cidadao->cns) : 'NÃO INFORMADO',
'cbo' => Ocupacao::findOrFail($cadastro->usuario_ocupacao_id)->codigo,
],
'cnes' => $cadastro->equipe->unidade->cnes ?? null,
'numero_ine' => $cadastro->equipe->area->numero_ine ?? null,
'equipe_id' => $cadastro->equipe_id ?? null,
'ocupacao_id' => $cadastro->usuario_ocupacao_id ?? null,
'data_usuario_responsavel' => Carbon::parse($cadastro->data_usuario_responsavel)->format('d/m/Y'),
],
'informacao' => [
'higiene_residencial_id' => $cadastro->higiene_residencial_id ?? null,
'bolsa_familia' => $cadastro->bolsa_familia ?? null,
'vale_gas' => $cadastro->vale_gas ?? null,
'bolsa_escola' => $cadastro->bolsa_escola ?? null,
'lazer' => $cadastro ? $cadastro->lazer->pluck('id') : [],
'bpc' => $cadastro->bpc ?? null,
],
'endereco' => [
'id' => $cadastro->domicilio->endereco->id ?? null,
'logradouro_tipo_id' => $cadastro->domicilio->endereco->logradouro->tipo->id ?? null,
'logradouro_tipo' => $cadastro->domicilio->endereco->logradouro->tipo->descricao ?? null,
'bairro_id' => $cadastro->domicilio->endereco->logradouro->bairro->id ?? null,
'logradouro_cep' => $cadastro ? MaskUtil::getCepMasked($cadastro->domicilio->endereco->logradouro->cep) : null,
'loteamento' => $cadastro->domicilio->endereco->loteamento ?? null,
'complemento' => $cadastro->domicilio->endereco->complemento ?? null,
'referencia' => $cadastro->domicilio->endereco->referencia ?? null,
'latitude' => $cadastro->domicilio->endereco->latitude ?? null,
'longitude' => $cadastro->domicilio->endereco->longitude ?? null,
'logradouro' => $cadastro ? [
'municipio' => [
'estado' => [
'uf' => $cadastro->domicilio->endereco->logradouro->municipio->estado->uf ?? null,
],
'nome' => $cadastro->domicilio->endereco->logradouro->municipio->nome ?? null,
],
'bairro' => [
'nome' => $cadastro->domicilio->endereco->logradouro->bairro->nome ?? null,
],
'tipo' => [
'descricao' => $cadastro->domicilio->endereco->logradouro->tipo->descricao ?? null,
],
'nome' => $cadastro->domicilio->endereco->logradouro->nome ?? null,
'id' => $cadastro->domicilio->endereco->logradouro->id ?? null,
'cep' => $cadastro ? MaskUtil::getCepMasked($cadastro->domicilio->endereco->logradouro->cep) : null,
] : null,
'numero' => $cadastro->domicilio->endereco->numero ?? null,
'sem_numero' => $cadastro->domicilio->endereco->sem_numero ?? null,
'latitude' => $cadastro->domicilio->endereco->latitude ?? null,
'longitude' => $cadastro->domicilio->endereco->longitude ?? null,
'microarea_id' => $cadastro->microarea_id ?? null,
'microarea' => $cadastro->microarea->descricao ?? null,
'fora_area' => $cadastro->fora_area ?? null,
],
'residencia' => [
'imovel_tipo_id' => $cadastro->imovel_tipo_id ?? null,
'imovel_tipo' => $cadastro->imovelTipo->descricao ?? null,
'situacao_domicilio_id' => $cadastro->situacao_domicilio_id ?? null,
'domicilio_tipo_id' => $cadastro->domicilio_tipo_id ?? null,
'domicilio_tipo' => $cadastro->domicilioTipo->descricao ?? null,
'quantidade_comodos' => $cadastro->quantidade_comodos ?? null,
'situacao_rural_id' => $cadastro->situacao_rural_id ?? null,
'domicilio_zona_id' => $cadastro->domicilio_zona_id ?? null,
'domicilio_tipo_acesso_id' => $cadastro->domicilio_tipo_acesso_id ?? null,
'material_predominante_id' => $cadastro->material_predominante_id ?? null,
'abastecimento_id' => $cadastro->abastecimento_id ?? null,
'tratamento_id' => $cadastro->tratamento_id ?? null,
'destino_lixo_id' => $cadastro->destino_lixo_id ?? null,
'forma_escoamento_id' => $cadastro->forma_escoamento_id ?? null,
'possui_animais' => $cadastro->possui_animais ? 'SIM' : 'NÃO',
'energia_eletrica' => $cadastro->energia_eletrica ? 'SIM' : 'NÃO',
'quantidade_animais' => $cadastro->quantidade_animais ?? null,
'animal' => $cadastro ? $cadastro->animal->pluck('id') : [],
],
'instituicao' => [
'nome' => $cadastro->instituicao_nome ?? null,
'outros_profissionais' => $cadastro->instituicao_outros_profissionais ? "SIM" : "NÃO",
'nome_responsavel_tecnico' => $cadastro->instituicao_nome_responsavel_tecnico ?? null,
'cns_responsavel_tecnico' => $cadastro && $cadastro->instituicao_cns_responsavel_tecnico
? MaskUtil::getCnsMasked($cadastro->instituicao_cns_responsavel_tecnico) : null,
'cargo_responsavel_tecnico' => $cadastro->instituicao_cargo_responsavel_tecnico ?? null,
'telefone_responsavel_tecnico' => $cadastro && $cadastro->instituicao_telefone_responsavel_tecnico ?
MaskUtil::getPhoneMasked($cadastro->instituicao_telefone_responsavel_tecnico) : null
],
'recusa_cadastro' => $cadastro->recusa_cadastro ?? false,
];
}
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();
}
public static function getMicroareas(){
return DB::table('atencao_basica_parametrizacao_area')
->select([
'atencao_basica_parametrizacao_microarea.id AS id',
'atencao_basica_parametrizacao_microarea.descricao AS descricao_micro',
DB::raw("CONCAT(
'INE: ', LPAD(atencao_basica_parametrizacao_area.numero_ine, 10, '0'),
CASE
WHEN atencao_basica_parametrizacao_area.descricao
THEN CONCAT(' - Área: ', atencao_basica_parametrizacao_area.descricao)
ELSE ''
END,
' - Microárea: ', atencao_basica_parametrizacao_microarea.descricao
) AS descricao")
])
->join('atencao_basica_parametrizacao_microarea', 'atencao_basica_parametrizacao_microarea.area_id', 'atencao_basica_parametrizacao_area.id')
->get();
}
}