init commit
All checks were successful
build-api-image / build (push) Successful in 51s

This commit is contained in:
Antonio Lopes dos Santos
2026-08-04 16:52:02 -03:00
commit afec302c3e
11594 changed files with 1636728 additions and 0 deletions

View File

@@ -0,0 +1,214 @@
<?php
namespace App\Services\Parametrizacao;
use App\Services\Service;
use App\Utils\DataUtil;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class RelatorioExameCadastradoService extends Service
{
public static function index()
{
$params = self::getParams();
$itens = DB::table('parametrizacao_exame')
->select([
'parametrizacao_exame.id',
'parametrizacao_exame.nome AS nome_exame',
'parametrizacao_exame_tipo.nome AS nome_tipo',
'cadastro_grupo.nome as nome_grupo',
'sigtap.procedimento.nome as nome_procedimento',
'sigtap.procedimento.codigo AS codigo_sigtap',
'parametrizacao_exame.valor_sigtap as valor_id',
DB::raw("CASE
WHEN parametrizacao_exame.valor_sigtap = 1 THEN 'Sim'
ELSE 'Não'
END AS valor_sigtap"),
DB::raw("CASE
WHEN parametrizacao_exame.valor_sigtap = 1
THEN CONCAT('R$ ', REPLACE(FORMAT(sigtap.procedimento.valor_servico_ambilatorial, 2, 'de_DE'), '.', 'X'))
ELSE CONCAT('R$ ', REPLACE(FORMAT(parametrizacao_exame.valor, 2, 'de_DE'), '.', 'X'))
END AS valor_exame"),
DB::raw("CONCAT(parametrizacao_exame.validade, ' dias') AS validade_exame"),
])
->leftJoin(
'parametrizacao_exame_tipo',
'parametrizacao_exame_tipo.id',
'parametrizacao_exame.tipo_id'
)
->leftJoin(
'cadastro_grupo',
'cadastro_grupo.id',
'parametrizacao_exame.grupo_tipo_id'
)
->leftJoin('sigtap.procedimento', function ($join) {
$join->on('sigtap.procedimento.codigo', 'parametrizacao_exame.codigo')
->where('sigtap.procedimento.competencia_id', '=', function ($query) {
$query->select('sigtap.competencia.id')
->from('sigtap.competencia')
->orderByDesc('sigtap.competencia.valor')
->limit(1);
});
})
->when($params->tipo_id, fn($q) => $q->where('parametrizacao_exame_tipo.id', $params->tipo_id))
->when($params->grupo_id, fn($q) => $q->where('cadastro_grupo.id', $params->grupo_id))
->when($params->valor_id !== null, function ($q) use ($params) {
return $q->where('parametrizacao_exame.valor_sigtap', $params->valor_id);
});
self::setOrderBy($itens);
$itens = $itens->get();
return [
'itens' => $itens,
];
}
public static function create()
{
return [
'additionals' => [
'data_atual' => Carbon::now()->format('d/m/Y'),
],
'form' => [
'tipos' => self::getTipos(),
'grupos' => [],
'valores' => [],
],
'model' => [
'tipo_id' => null,
'grupo_id' => null,
'valor_id' => null,
],
];
}
public static function list()
{
$params = self::getParams();
switch (request()->listar) {
case 'tipos': {
return [
'tipos' => self::getTipos($params),
'grupos' => self::getGrupos($params),
'valores' => self::getValores($params),
];
}
case 'grupos': {
return [
'grupos' => self::getGrupos($params),
'valores' => self::getValores($params),
];
}
case 'valores': {
return [
'valores' => self::getValores($params),
];
}
}
}
private static function getParams()
{
return (object) [
'tipo_id' => request()->get('tipo_id'),
'grupo_id' => request()->get('grupo_id'),
'valor_id' => request()->get('valor_id'),
];
}
private static function getTipos()
{
return DB::table('parametrizacao_exame_tipo')
->select([
DB::raw('MIN(parametrizacao_exame_tipo.id) as id'),
'parametrizacao_exame_tipo.nome',
])
->groupBy('parametrizacao_exame_tipo.nome')
->orderBy('parametrizacao_exame_tipo.nome')
->get();
}
private static function getGrupos($params)
{
return DB::table('cadastro_grupo')
->select([
'cadastro_grupo.id',
'cadastro_grupo.nome',
])
->whereExists(function ($q) use ($params) {
return $q->select(DB::raw(1))
->from('parametrizacao_exame')
->whereColumn('parametrizacao_exame.grupo_tipo_id', 'cadastro_grupo.id')
->when($params->tipo_id, function ($q) use ($params) {
$q->where('parametrizacao_exame.tipo_id', $params->tipo_id);
});
})
->orderBy('cadastro_grupo.nome')
->get();
}
private static function getValores($params)
{
return DB::table('parametrizacao_exame')
->select([
'parametrizacao_exame.id',
'parametrizacao_exame.valor_sigtap as valor_id',
DB::raw("CASE
WHEN parametrizacao_exame.valor_sigtap = 1 THEN 'Sim'
ELSE 'Não'
END AS valor_sigtap"),
])
->when(isset($params->valor_id), function ($q) use ($params) {
$q->where('parametrizacao_exame.valor_sigtap', $params->valor_id);
})
->when(isset($params->tipo_id), function ($q) use ($params) {
$q->where('parametrizacao_exame.tipo_id', $params->tipo_id);
})
->groupBy('parametrizacao_exame.valor_sigtap')
->orderBy('parametrizacao_exame.valor_sigtap')
->get();
}
private static function setOrderBy($builder)
{
$columns = [
'nome_exame' => 'parametrizacao_exame.nome',
'nome_tipo' => 'parametrizacao_exame_tipo.nome',
'nome_grupo' => 'cadastro_grupo.nome',
'codigo_sigtap' => 'sigtap.procedimento.codigo',
'valor_sigtap' => "CASE WHEN parametrizacao_exame.valor_sigtap = 1 THEN 'Sim' ELSE 'Não'END",
'nome_procedimento' => 'sigtap.procedimento.nome',
'valor_exame' => 'parametrizacao_exame.valor',
'validade_exame' => 'parametrizacao_exame.validade'
];
if (is_null(request()->sort_by)) {
$builder->orderByRaw(implode(', ', $columns));
return;
}
$column = $columns[request()->sort_by];
$direction = DataUtil::getBooleanValueFromStringBoolean(request()->sort_desc) ? 'DESC' : 'ASC';
unset($columns[request()->sort_by]);
$orderByList = [];
$orderByList[] = "{$column} {$direction}";
if (!empty($columns)) {
$orderByList[] = implode(', ', $columns);
}
$builder->orderByRaw(implode(', ', $orderByList));
}
}