This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
<?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'],
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user