Files
rkm-conectasus-ci-sandbox/api/app/Services/AtencaoBasica/CadastroDomiciliar/FichaService.php
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

224 lines
13 KiB
PHP

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