Files
rkm-conectasus-ci-sandbox/api/app/Services/AtencaoBasica/VisitaDomiciliar/HistoricoService.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

192 lines
9.8 KiB
PHP

<?php
namespace App\Services\AtencaoBasica\VisitaDomiciliar;
use App\Enums\AtencaoBasica\VisitaDomiciliar\MotivoVisita as MotivoVisitaEnum;
use App\Models\AtencaoBasica\VisitaDomiciliar\MotivoVisita;
use App\Models\AtencaoBasica\VisitaDomiciliar\VisitaDomiciliar;
use App\Models\AtencaoBasica\VisitaDomiciliar\VisitaDomiciliarMotivoVisita;
use App\Services\Service;
use App\Utils\DataUtil;
use App\Utils\MaskUtil;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class HistoricoService extends Service
{
public static function getHistoricoResumido($filters = [], $options = [])
{
return DB::table('atencao_basica_visita_domiciliar as visita_domiciliar')
->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;
}
}