Files
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

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'],
];
}
}