This commit is contained in:
246
api/app/Services/Parametrizacao/ProcedimentoCirurgicoService.php
Normal file
246
api/app/Services/Parametrizacao/ProcedimentoCirurgicoService.php
Normal file
@@ -0,0 +1,246 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Parametrizacao;
|
||||
|
||||
use App\Enums\Cadastro\Grupo\GrupoTipo;
|
||||
use App\Models\Cadastro\Grupo\Grupo;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Parametrizacao\ProcedimentoCirurgico;
|
||||
use App\Models\Regulacao\Tipo as RegulacaoTipo;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class ProcedimentoCirurgicoService extends Service
|
||||
{
|
||||
public static function autocomplete()
|
||||
{
|
||||
$query = DB::table('parametrizacao_procedimento_cirurgico AS procedimento_cirurgico')
|
||||
->join('sigtap.procedimento AS procedimento', fn ($j) => $j
|
||||
->on('procedimento.codigo', 'procedimento_cirurgico.procedimento_codigo')
|
||||
->where('procedimento.competencia_id', DB::table('sigtap.competencia')->max('id'))
|
||||
)
|
||||
->where('status', true)
|
||||
->select(
|
||||
'procedimento_cirurgico.id',
|
||||
'procedimento_cirurgico.procedimento_codigo AS codigo',
|
||||
'procedimento_cirurgico.nome',
|
||||
'procedimento_cirurgico.exigir_peso_altura_circunferencia',
|
||||
'procedimento.complexidade',
|
||||
);
|
||||
|
||||
if (is_numeric(request()->get('paciente_id'))) {
|
||||
|
||||
$paciente = Paciente::findOrFail(request()->get('paciente_id'));
|
||||
|
||||
$query->where(function ($query) use ($paciente) {
|
||||
|
||||
$query->where(function ($query) use ($paciente) {
|
||||
|
||||
$query->where('procedimento.sexo', $paciente->cidadao->sexo->identificador)
|
||||
->orWhere('procedimento.sexo', 'I')
|
||||
->orWhere('procedimento.sexo', 'N');
|
||||
});
|
||||
|
||||
if (!$paciente->is_desconhecido) {
|
||||
|
||||
$query->where(function ($query) use ($paciente) {
|
||||
|
||||
$meses = $paciente->cidadao->idade['anos'] * 12;
|
||||
|
||||
$query
|
||||
->where(function ($query) use ($meses) {
|
||||
|
||||
$query->where('procedimento.idade_minima', '<=', $meses)
|
||||
->orWhere('procedimento.idade_minima', 9999);
|
||||
})
|
||||
->where(function ($query) use ($meses) {
|
||||
|
||||
$query->where('procedimento.idade_maxima', '>=', $meses)
|
||||
->orWhere('procedimento.idade_maxima', 9999);
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
|
||||
$procedimentos = DB::table('parametrizacao_procedimento_cirurgico')
|
||||
->select(
|
||||
'cadastro_grupo.nome as grupo',
|
||||
'parametrizacao_procedimento.apelido',
|
||||
'parametrizacao_procedimento_cirurgico.grupo_exame_id',
|
||||
'parametrizacao_procedimento_cirurgico.id',
|
||||
'parametrizacao_procedimento_cirurgico.nome',
|
||||
'parametrizacao_procedimento_cirurgico.observacao',
|
||||
'parametrizacao_procedimento_cirurgico.procedimento_codigo',
|
||||
'parametrizacao_procedimento_cirurgico.status',
|
||||
)
|
||||
->join('cadastro_grupo', 'parametrizacao_procedimento_cirurgico.grupo_exame_id', 'cadastro_grupo.id')
|
||||
->leftJoin(
|
||||
'parametrizacao_procedimento',
|
||||
'parametrizacao_procedimento.procedimento_codigo',
|
||||
'parametrizacao_procedimento_cirurgico.procedimento_codigo'
|
||||
);
|
||||
|
||||
return datatables()
|
||||
->of($procedimentos)
|
||||
->addColumn('status', function ($procedimento) {
|
||||
return $procedimento->status ? 'ATIVO' : 'INATIVO';
|
||||
})
|
||||
->skipTotalRecords()
|
||||
->make(true);
|
||||
|
||||
}
|
||||
|
||||
public static function index()
|
||||
{
|
||||
|
||||
return ProcedimentoCirurgico::orderBy('nome')->get();
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
|
||||
return self::getDefault();
|
||||
}
|
||||
|
||||
public static function store($request)
|
||||
{
|
||||
|
||||
self::validate();
|
||||
|
||||
$params = $request->all();
|
||||
|
||||
$params['valor_ppi'] = str_replace(',', '.', str_replace('.', '', $params['valor_ppi']));
|
||||
|
||||
$procedimentoCirurgico = ProcedimentoCirurgico::create($params)->fresh();
|
||||
|
||||
return $procedimentoCirurgico;
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
|
||||
$procedimentoCirurgico = ProcedimentoCirurgico::findOrFail($id);
|
||||
$procedimentoCirurgico
|
||||
->setAttribute('searchByApelido', false);
|
||||
|
||||
return [
|
||||
'model' => $procedimentoCirurgico,
|
||||
'form' => self::getFormData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function update($request, $id)
|
||||
{
|
||||
|
||||
self::validate();
|
||||
|
||||
$params = $request->all();
|
||||
|
||||
$params['valor_ppi'] = str_replace(',', '.', str_replace('.', '', $params['valor_ppi']));
|
||||
|
||||
$procedimento = tap(ProcedimentoCirurgico::findOrFail($id))->update($params)->fresh();
|
||||
|
||||
return $procedimento;
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
|
||||
return ProcedimentoCirurgico::findOrFail($id)->delete();
|
||||
}
|
||||
|
||||
private static function getDefault()
|
||||
{
|
||||
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => [
|
||||
'nome' => null,
|
||||
'procedimento' => null,
|
||||
'grupo_exame_id' => null,
|
||||
'observacao' => null,
|
||||
'status' => true,
|
||||
'is_regulado' => false,
|
||||
'regulacao_tipo_id' => null,
|
||||
'search_by_apelido' => false,
|
||||
'is_ppi' => false,
|
||||
'valor_ppi' => null,
|
||||
'exigir_peso_altura_circunferencia' => false,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
|
||||
return [
|
||||
'grupos' => Grupo::where('grupo_tipo_id', GrupoTipo::CIRURGIA)
|
||||
->orderBy('nome')
|
||||
->get()
|
||||
->map(fn ($query) => [
|
||||
'id' => $query->id,
|
||||
'nome' => $query->nome,
|
||||
'regulacao_tipo_id' => $query->regulacao_tipo_id,
|
||||
]),
|
||||
'regulacao_tipo' => RegulacaoTipo::orderBy('nome')
|
||||
->get()
|
||||
->map(fn ($query) => [
|
||||
'id' => $query->id,
|
||||
'nome' => $query->nome,
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
$rules = [
|
||||
'nome' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:100',
|
||||
Rule::unique(ProcedimentoCirurgico::class, 'nome')
|
||||
->ignore(request('id')),
|
||||
],
|
||||
'procedimento_codigo' => [
|
||||
'required',
|
||||
Rule::unique(ProcedimentoCirurgico::class, 'procedimento_codigo')
|
||||
->ignore(request('id')),
|
||||
],
|
||||
'grupo_exame_id' => [
|
||||
'required',
|
||||
],
|
||||
'observacao' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:1000',
|
||||
],
|
||||
];
|
||||
|
||||
if (request('is_regulado')) {
|
||||
$rules['regulacao_tipo_id'] = [
|
||||
'required',
|
||||
Rule::exists('regulacao_tipo', 'id'),
|
||||
];
|
||||
}
|
||||
|
||||
request()->validate($rules, [
|
||||
'nome.required' => 'O campo nome é obrigatório.',
|
||||
'nome.unique' => 'O nome do procedimento cirúrgico já foi inserido anteriormente.',
|
||||
'nome.max' => 'O limite de caracteres foi atingido no campo nome.',
|
||||
'procedimento_codigo.required' => 'O campo procedimento é obrigatório.',
|
||||
'procedimento_codigo.unique' => 'O procedimento escolhido já foi inserido anteriormente.',
|
||||
'grupo_exame_id.required' => 'O campo grupo é obrigatório.',
|
||||
'observacao.max' => 'O limite de caracteres foi atingido no campo observação.',
|
||||
'regulacao_tipo_id.required' => 'O campo Tipo de regulação é obrigatório quando Regulado está ativado.',
|
||||
'regulacao_tipo_id.exists' => 'O Tipo de regulação selecionado é inválido.',
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user