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