152 lines
7.2 KiB
PHP
152 lines
7.2 KiB
PHP
<?php
|
|
|
|
namespace App\Services\AtencaoBasica\RelatorioAtendimentoOdontologico;
|
|
|
|
use App\Enums\AtencaoBasica\AtendimentoOdontologico\CondutaEncaminhamento;
|
|
use App\Enums\AtencaoBasica\AtendimentoOdontologico\TipoConsulta;
|
|
use App\Enums\AtencaoBasica\TipoAtendimento;
|
|
use App\Enums\Sigtap\Procedimento;
|
|
use App\Models\AtencaoBasica\Parametrizacao\Equipe;
|
|
use App\Models\Cadastro\Estabelecimento\Unidade;
|
|
use Illuminate\Support\Facades\DB;
|
|
use App\Services\Service;
|
|
use Carbon\Carbon;
|
|
|
|
class RelatorioAtendimentoOdontologicoService extends Service
|
|
{
|
|
public static function index()
|
|
{
|
|
return [
|
|
'form' => self::getFormData(),
|
|
'model' => self::getModelData(),
|
|
];
|
|
}
|
|
|
|
private static function getFormData()
|
|
{
|
|
return [
|
|
'unidades' => [],
|
|
'equipes' => [],
|
|
];
|
|
}
|
|
|
|
private static function getModelData()
|
|
{
|
|
return [
|
|
'periodo' => [
|
|
'start' => null,
|
|
'end' => null,
|
|
],
|
|
'unidade_id' => null,
|
|
'equipe_id' => null,
|
|
];
|
|
}
|
|
|
|
public static function list()
|
|
{
|
|
$atendimentos = DB::table('atencao_basica_atendimento_odontologico as atendimento')
|
|
->where('atendimento.data_atendimento', '>=', request()->data_inicial)
|
|
->where('atendimento.data_atendimento', '<=', request()->data_final)
|
|
->when(request()->unidade_id, function($query) {
|
|
$query->where('atendimento.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(request()->equipe_id, function($query) {
|
|
$query->where('atendimento.equipe_id', request()->equipe_id);
|
|
})
|
|
->get();
|
|
$tratamentosConcluidos = DB::table('atencao_basica_atendimento_odontologico_conduta_encaminhamento as conduta_encaminhamento')
|
|
->join('atencao_basica_atendimento_odontologico as atendimento', 'atendimento.id', 'conduta_encaminhamento.atendimento_odontologico_id')
|
|
->where('atendimento.data_atendimento', '>=', request()->data_inicial)
|
|
->where('atendimento.data_atendimento', '<=', request()->data_final)
|
|
->when(request()->unidade_id, function($query) {
|
|
$query->where('atendimento.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(request()->equipe_id, function($query) {
|
|
$query->where('atendimento.equipe_id', request()->equipe_id);
|
|
})
|
|
->where('conduta_encaminhamento_id', CondutaEncaminhamento::TRATAMENTO_CONCLUIDO)
|
|
->get();
|
|
$instalacoesProteses = DB::table('atencao_basica_atendimento_odontologico_procedimento as procedimento')
|
|
->join('atencao_basica_atendimento_odontologico as atendimento', 'atendimento.id', 'procedimento.atendimento_odontologico_id')
|
|
->where('atendimento.data_atendimento', '>=', request()->data_inicial)
|
|
->where('atendimento.data_atendimento', '<=', request()->data_final)
|
|
->when(request()->unidade_id, function($query) {
|
|
$query->where('atendimento.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(request()->equipe_id, function($query) {
|
|
$query->where('atendimento.equipe_id', request()->equipe_id);
|
|
})
|
|
->where('codigo_procedimento', Procedimento::INTALACAO_PROTESE_DENTARIA)
|
|
->get();
|
|
$escovacaoDentalSupervisionada = DB::table('atencao_basica_atendimento_odontologico_procedimento as procedimento')
|
|
->join('atencao_basica_atendimento_odontologico as atendimento', 'atendimento.id', 'procedimento.atendimento_odontologico_id')
|
|
->where('atendimento.data_atendimento', '>=', request()->data_inicial)
|
|
->where('atendimento.data_atendimento', '<=', request()->data_final)
|
|
->when(request()->unidade_id, function($query) {
|
|
$query->where('atendimento.unidade_id', request()->unidade_id);
|
|
})
|
|
->when(request()->equipe_id, function($query) {
|
|
$query->where('atendimento.equipe_id', request()->equipe_id);
|
|
})
|
|
->where('codigo_procedimento', Procedimento::ESCOVACAO_DENTAL_SUPERVISIONADA)
|
|
->get();
|
|
return [
|
|
'primeira_consulta_odontologica' => $atendimentos->where('tipo_consulta_id', TipoConsulta::PRIMEIRA_CONSULTA)->count(),
|
|
'escovacao_dental_supervisionada' => $escovacaoDentalSupervisionada->count(),
|
|
'tratamento_concluido' => $tratamentosConcluidos->count(),
|
|
'urgencia' => $atendimentos->where('tipo_atendimento_id', TipoAtendimento::ATENDIMENTO_URGENCIA)->count(),
|
|
'gestante' => $atendimentos->sum('gestante'),
|
|
'instalacao_proteses_dentarias' => $instalacoesProteses->count(),
|
|
'total_atendimentos_odontologicos' => $atendimentos->count()
|
|
];
|
|
}
|
|
|
|
public static function getUnidades()
|
|
{
|
|
return DB::table('atencao_basica_atendimento_odontologico as atendimento')
|
|
->select('unidade.id', 'unidade.nome_fantasia')
|
|
->join('cadastro_unidade as unidade', 'unidade.id', 'atendimento.unidade_id')
|
|
->where('atendimento.data_atendimento', '>=', request()->data_inicial)
|
|
->where('atendimento.data_atendimento', '<=', request()->data_final)
|
|
->orderBy('unidade.nome_fantasia')
|
|
->groupBy('unidade.id')
|
|
->get();
|
|
}
|
|
|
|
public static function getEquipes()
|
|
{
|
|
return DB::table('atencao_basica_atendimento_odontologico as atendimento')
|
|
->select('equipe.id')
|
|
->join('atencao_basica_parametrizacao_equipe as equipe', 'equipe.id', 'atendimento.equipe_id')
|
|
->join('cadastro_unidade as unidade', 'unidade.id', 'equipe.unidade_id')
|
|
->where('atendimento.data_atendimento', '>=', request()->data_inicial)
|
|
->where('atendimento.data_atendimento', '<=', request()->data_final)
|
|
->when(request()->unidade_id, function($query) {
|
|
$query->where('atendimento.unidade_id', request()->unidade_id);
|
|
})
|
|
->orderBy('equipe.id')
|
|
->groupBy('equipe.id')
|
|
->get();
|
|
}
|
|
|
|
public static function getPrintExportData()
|
|
{
|
|
$atendimentos = self::list();
|
|
$unidade = Unidade::find(request()->unidade_id);
|
|
$equipe = Equipe::find(request()->equipe_id);
|
|
return [
|
|
'data_inicial' => Carbon::parse(request()->data_inicial)->format('d/m/Y'),
|
|
'data_final' => Carbon::parse(request()->data_final)->format('d/m/Y'),
|
|
'unidade' => $unidade->nome_fantasia ?? 'TODAS',
|
|
'equipe' => $equipe->id ?? 'TODOS',
|
|
'primeira_consulta_odontologica' => $atendimentos['primeira_consulta_odontologica'],
|
|
'escovacao_dental_supervisionada' => $atendimentos['escovacao_dental_supervisionada'],
|
|
'tratamento_concluido' => $atendimentos['tratamento_concluido'],
|
|
'urgencia' => $atendimentos['urgencia'],
|
|
'gestante' => $atendimentos['gestante'],
|
|
'instalacao_proteses_dentarias' => $atendimentos['instalacao_proteses_dentarias'],
|
|
'total_atendimentos_odontologicos' => $atendimentos['total_atendimentos_odontologicos'],
|
|
];
|
|
}
|
|
}
|