This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user