join('cadastro_usuario as usuario', 'usuario.id', 'visita_domiciliar.usuario_id') ->join('cadastro_cidadao as usuario_cidadao', 'usuario_cidadao.id', 'usuario.cidadao_id') ->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'visita_domiciliar.equipe_id') ->join('cadastro_infraestrutura as infraestrutura', 'infraestrutura.id', 'equipe.infraestrutura_id') ->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id') ->join('atencao_basica_parametrizacao_area as area', 'area.id', 'equipe.area_id') ->join('sigtap.ocupacao as ocupacao', 'ocupacao.id', 'visita_domiciliar.usuario_ocupacao_id') ->leftJoin('atencao_basica_parametrizacao_microarea as microarea', 'microarea.id', 'equipe.microarea_id') ->whereNotNull('visita_domiciliar.data_usuario_responsavel') ->when($filters['paciente_id'] ?? null, fn ($q, $id) => $q->where('visita_domiciliar.paciente_id', $id)) ->selectRaw(" visita_domiciliar.id, visita_domiciliar.data_usuario_responsavel as data, usuario_cidadao.nome as usuario_nome, unidade.nome_fantasia as unidade_nome_fantasia, COALESCE(infraestrutura.nome, unidade.nome_fantasia) as infraestrutura_nome, area.descricao as area, area.numero_ine as ine, microarea.descricao as microarea, ocupacao.codigo as ocupacao_codigo, ocupacao.nome as ocupacao_nome ") ->orderByRaw(" visita_domiciliar.data_usuario_responsavel, visita_domiciliar.created_at ") ->get() ->map(fn ($visitaDomiciliar) => (object) [ 'id' => $visitaDomiciliar->id, 'data' => !isset($options['format_date']) || $options['format_date'] ? (new Carbon($visitaDomiciliar->data))->format('d/m/Y') : new Carbon($visitaDomiciliar->data), 'usuario_nome' => $visitaDomiciliar->usuario_nome, 'unidade_nome_fantasia' => $visitaDomiciliar->unidade_nome_fantasia, 'infraestrutura_nome' => $visitaDomiciliar->infraestrutura_nome, 'codigo_equipe' => self::getCodigoEquipeFormatted( $visitaDomiciliar->area, $visitaDomiciliar->ine, $visitaDomiciliar->microarea ), 'ocupacao_descricao' => "{$visitaDomiciliar->ocupacao_codigo} - {$visitaDomiciliar->ocupacao_nome}" ]); } public static function getVisitaDomiciliar($id) { $visitaDomiciliar = VisitaDomiciliar::findOrFail($id); $motivosVisitaIds = VisitaDomiciliarMotivoVisita::where('visita_domiciliar_id', $visitaDomiciliar->id) ->pluck('motivo_visita_id'); return [ 'id' => $visitaDomiciliar->id, 'paciente' => [ 'nome' => $visitaDomiciliar->paciente->cidadao->nome, 'nome_social' => $visitaDomiciliar->paciente->cidadao->nome_social, 'cns' => MaskUtil::getCnsMasked($visitaDomiciliar->paciente->cidadao->cns), 'cpf' => MaskUtil::getCpfMasked($visitaDomiciliar->paciente->cidadao->cpf), 'sexo' => $visitaDomiciliar->paciente->cidadao->sexo->descricao ?? null, 'data_nascimento' => $visitaDomiciliar->paciente->cidadao->data_nascimento ? (new Carbon($visitaDomiciliar->paciente->cidadao->data_nascimento))->format('d/m/Y') : null, 'idade' => $visitaDomiciliar->paciente->cidadao->idade_formatada, ], 'data' => (new Carbon($visitaDomiciliar->data_usuario_responsavel))->format('d/m/Y'), 'usuario_nome' => $visitaDomiciliar->usuario->cidadao->nome, 'unidade_nome_fantasia' => $visitaDomiciliar->equipe->infraestrutura->unidade->nome_fantasia, 'infraestrutura_nome' => $visitaDomiciliar->equipe->infraestrutura->nome, 'codigo_equipe' => self::getCodigoEquipeFormatted( $visitaDomiciliar->equipe->area->descricao, $visitaDomiciliar->equipe->area->numero_ine, $visitaDomiciliar->equipe->microarea->descricao ?? null ), 'ocupacao_descricao' => "{$visitaDomiciliar->ocupacao->codigo} - {$visitaDomiciliar->ocupacao->nome}", 'turno_nome' => $visitaDomiciliar->turno->nome, 'imovel_tipo_descricao' => $visitaDomiciliar->imovelTipo->descricao, 'latitude' => $visitaDomiciliar->latitude, 'longitude' => $visitaDomiciliar->longitude, 'visita_compartilhada' => DataUtil::getSimOuNao($visitaDomiciliar->visita_compartilhada), 'motivos_visita' => [ 'tipo_visita' => MotivoVisita::whereIn('id', [ MotivoVisitaEnum::CADASTRAMENTO_ATUALIZACAO, MotivoVisitaEnum::VISITA_PERIODICA, ]) ->whereIn('id', $motivosVisitaIds) ->orderBy('descricao') ->pluck('descricao'), 'busca_ativa' => MotivoVisita::whereIn('id', [ MotivoVisitaEnum::CONSULTA, MotivoVisitaEnum::EXAME, MotivoVisitaEnum::VACINA, MotivoVisitaEnum::CONDICIONALIDADES_DO_BOLSA_FAMILIA, ]) ->whereIn('id', $motivosVisitaIds) ->orderBy('descricao') ->pluck('descricao'), 'controle_ambiental_vetorial' => MotivoVisita::whereIn('id', [ MotivoVisitaEnum::ACAO_EDUCATIVA, MotivoVisitaEnum::IMOVEL_COM_FOCO, MotivoVisitaEnum::ACAO_MECANICA, MotivoVisitaEnum::TRATAMENTO_FOCAL, ]) ->whereIn('id', $motivosVisitaIds) ->orderBy('descricao') ->pluck('descricao'), 'acompanhamento' => MotivoVisita::whereIn('id', [ MotivoVisitaEnum::GESTANTE, MotivoVisitaEnum::PUERPERA, MotivoVisitaEnum::RECEM_NASCIDO, MotivoVisitaEnum::CRIANCA, MotivoVisitaEnum::PESSOA_COM_DESNUTRICAO, MotivoVisitaEnum::PESSOA_EM_REABILITACAO_OU_COM_DEFICIENCIA, MotivoVisitaEnum::PESSOA_COM_HIPERTENSAO, MotivoVisitaEnum::PESSOA_COM_DIABETES, MotivoVisitaEnum::PESSOA_COM_ASMA, MotivoVisitaEnum::PESSOA_COM_DPOC_ENFISEMA, MotivoVisitaEnum::PESSOA_COM_CANCER, MotivoVisitaEnum::PESSOA_COM_OUTRAS_DOENCAS_CRONICAS, MotivoVisitaEnum::PESSOA_COM_HANSENIASE, MotivoVisitaEnum::PESSOA_COM_TUBERCULOSE, MotivoVisitaEnum::SINTOMATICOS_RESPIRATORIOS, MotivoVisitaEnum::TABAGISTA, MotivoVisitaEnum::DOMICILIADOS_ACAMADOS, MotivoVisitaEnum::CONDICOES_DE_VULNERABILIDADE_SOCIAL, MotivoVisitaEnum::ACOMPANHAMENTO_CONDICIONALIDADES_DO_BOLSA_FAMILIA, MotivoVisitaEnum::SAUDE_MENTAL, MotivoVisitaEnum::USUARIO_DE_ALCOOL, MotivoVisitaEnum::USUARIO_DE_OUTRAS_DROGAS, ]) ->whereIn('id', $motivosVisitaIds) ->orderBy('descricao') ->pluck('descricao'), 'outros_motivos' => MotivoVisita::whereIn('id', [ MotivoVisitaEnum::EGRESSO_DE_INTERNACAO, MotivoVisitaEnum::CONVITE_PARA_ATIVIDADES_COLETIVAS_CAMPANHA_DE_SAUDE, MotivoVisitaEnum::ORIENTACAO_PREVENCAO, MotivoVisitaEnum::OUTROS, ]) ->whereIn('id', $motivosVisitaIds) ->orderBy('descricao') ->pluck('descricao'), ], 'peso' => $visitaDomiciliar->peso, 'altura' => $visitaDomiciliar->altura, 'afericao_pa' => $visitaDomiciliar->afericao_pa, 'temperatura' => $visitaDomiciliar->temperatura, 'glicemia' => $visitaDomiciliar->glicemia, 'glicemia_momento_coleta' => $visitaDomiciliar->momentoColeta->descricao ?? null, 'desfecho_descricao' => $visitaDomiciliar->desfecho->descricao, 'complemento' => $visitaDomiciliar->complemento, ]; } private static function getCodigoEquipeFormatted($area, $ine = null, $microarea = null) { $codigoEquipe = ''; if (isset($ine)) { $codigoEquipe .= "INE: {$ine} - "; } $codigoEquipe .= "Área: {$area}"; if (isset($microarea)) { $codigoEquipe .= " - Microárea: {$microarea}"; } return $codigoEquipe; } }