192 lines
9.8 KiB
PHP
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;
|
|
}
|
|
}
|