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