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,140 @@
<?php
namespace App\Services\Sigtap;
use App\Models\Geral\Ciap;
use App\Models\Sigtap\Cid;
use App\Services\Service;
use App\Utils\DataUtil;
use Illuminate\Support\Facades\DB;
class CidService extends Service
{
public static function datatable()
{
$cids = DB::table('sigtap.cid')
->select(
'cid.id',
'cid.codigo',
'cid.nome',
'cid.is_ativo',
);
$procedimentoId = request()->query('procedimento_id');
if (is_numeric($procedimentoId)) {
$cids->whereExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_cid')
->whereColumn('procedimento_cid.cid_id', 'cid.id')
->where('procedimento_cid.procedimento_id', request()->query('procedimento_id'));
});
}
if (DataUtil::isStringBoolean(request()->query('principal'))) {
$cids->whereExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_cid')
->whereColumn('procedimento_cid.cid_id', 'cid.id')
->where('procedimento_cid.principal', DataUtil::getBooleanValueFromStringBoolean(request()->query('principal')) ? 'S' : 'N');
});
}
return datatables()
->of($cids)
->addColumn('status', function ($cid) {
return $cid->is_ativo ? 'Ativo' : 'Inativo';
})
->skipTotalRecords()
->make(true);
}
public static function autocomplete()
{
$cids = DB::table('sigtap.cid');
$procedimentoId = request()->query('procedimento_id');
if (is_numeric($procedimentoId)) {
$cids->whereExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_cid')
->whereColumn('procedimento_cid.cid_id', 'cid.id')
->where('procedimento_cid.procedimento_id', request()->query('procedimento_id'));
});
}
if (DataUtil::isStringBoolean(request()->query('principal'))) {
$cids->whereExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_cid')
->whereColumn('procedimento_cid.cid_id', 'cid.id')
->when(request()->query('competencia_id'), fn ($q, $id) => $q->where('procedimento_cid.competencia_id', $id))
->when(request()->query('procedimento_id'), fn ($q, $id) => $q->where('procedimento_cid.procedimento_id', $id))
->where('procedimento_cid.principal', DataUtil::getBooleanValueFromStringBoolean(request()->query('principal')) ? 'S' : 'N');
});
}
if (request()->query('ciap_id')) {
$cids->where(function ($query) {
$ciapCodigo = Ciap::findOrFail(request()->query('ciap_id'))->codigo;
$query->whereExists(function($query) use ($ciapCodigo) {
$query->select(DB::raw(1))
->from('geral_ciap_cid')
->whereColumn('geral_ciap_cid.codigo_cid', 'sigtap.cid.codigo')
->where('codigo_ciap', $ciapCodigo);
})
->orWhereNotExists(function($query) {
$query->select(DB::raw(1))
->from('geral_ciap_cid')
->whereColumn('geral_ciap_cid.codigo_cid', 'sigtap.cid.codigo');
});
});
}
$cids->when(request()->cid_id, fn ($q, $id) => $q->whereNotIn('sigtap.cid.id', [$id]));
$cids->when(request()->sexo, fn ($q, $string) => $q->whereIn('sigtap.cid.sexo', [$string, 'I']));
$cids->where('sigtap.cid.is_ativo', true);
return $cids;
}
public static function update($id)
{
return Cid::find($id)->update([
'is_ativo' => DataUtil::getBooleanValueFromStringBoolean(request()->is_ativo),
]);
}
public static function index()
{
return DB::table('sigtap.cid as cid')
->when(request()->codigo, fn ($q, $codigo) => $q->where('cid.codigo', $codigo))
->select(
'cid.id',
'cid.codigo',
'cid.nome',
'cid.agravo',
'cid.sexo',
'cid.estado',
'cid.campos_irradiados',
)
->get();
}
public static function getCidId($codigo)
{
return Cid::where('codigo', $codigo)->first('id')->id ?? null;
}
public static function getCid($codigo)
{
return Cid::where('codigo', $codigo)->first();
}
}

View File

@@ -0,0 +1,29 @@
<?php
namespace App\Services\Sigtap;
use App\Services\Service;
use Illuminate\Support\Facades\DB;
class ClassificacaoService extends Service
{
public static function autocomplete()
{
$classificacoes = DB::table('sigtap.classificacao');
if (request()->query('procedimento_id')) {
$classificacoes->whereExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_classificacao')
->whereColumn('procedimento_classificacao.classificacao_id', 'classificacao.id')
->where('procedimento_classificacao.procedimento_id', request()->query('procedimento_id'));
});
}
if (request()->query('servico_id')) {
$classificacoes->where('servico_id', request()->query('servico_id'));
}
return $classificacoes;
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace App\Services\Sigtap;
use App\Models\Sigtap\Financiamento;
use App\Services\Service;
class FinanciamentoService extends Service
{
public static function index()
{
$where = self::getWhereFromQueryString([
'competencia_id',
]);
return self::get(Financiamento::class)->where($where)->select(['id', 'nome'])->orderBy('nome')->get();
}
}

View File

@@ -0,0 +1,51 @@
<?php
namespace App\Services\Sigtap;
use App\Services\Service;
use Illuminate\Support\Facades\DB;
use App\Enums\Sigtap\OcupacaoInativa;
class OcupacaoService extends Service
{
public static function autocomplete()
{
$excludedValues = [
OcupacaoInativa::PROFISSIONAL_EDUCACAO_FISICA_SAUDE,
];
$ocupacoes = DB::table('sigtap.ocupacao')
->whereNotIn('sigtap.ocupacao.codigo', $excludedValues);
if (request()->query('procedimento_id')) {
$procedimentoRequerCbo = DB::table('sigtap.ocupacao')
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_ocupacao')
->whereColumn('procedimento_ocupacao.ocupacao_id', 'ocupacao.id')
->where('procedimento_ocupacao.procedimento_id', request()->query('procedimento_id'));
})->exists();
if ($procedimentoRequerCbo) {
$ocupacoes->whereExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_ocupacao')
->whereColumn('procedimento_ocupacao.ocupacao_id', 'ocupacao.id')
->where('procedimento_ocupacao.procedimento_id', request()->query('procedimento_id'));
});
}
}
if (request()->query('usuario_id')) {
$ocupacoes->whereExists(function($query) {
$query->select(DB::raw(1))
->from('cadastro_lotacao')
->whereColumn('cadastro_lotacao.ocupacao_id', 'ocupacao.id')
->where('cadastro_lotacao.usuario_id', request()->query('usuario_id'));
});
}
return $ocupacoes;
}
}

View File

@@ -0,0 +1,438 @@
<?php
namespace App\Services\Sigtap;
use App\Enums\Sigtap\Registro;
use App\Models\Sigtap\Competencia;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
class ProcedimentoService
{
private $competenciaId;
private $cbo;
private $ocupacaoId;
private $cidId;
private $registro;
private $paciente;
private $where;
private $whereNot;
private $onlyWithCbo;
private $onlyWithCid;
private $onlyWithoutCid;
private $likeCodigo;
private $atendimentoOdontologico;
private $atendimentoDomiciliar;
private $onlyServicosEnfermagem;
private $searchByApelido;
private $instrumentoRegistro;
private $withAtributosComplementares;
private $procedimentoPrincipalCodigo;
public function __construct(array $params = [])
{
$this->competenciaId = $params['competencia_id'] ?? $this->getUltimaCompetencia()->id;
$this->cbo = $params['cbo'] ?? null;
$this->ocupacaoId = $params['ocupacao_id'] ?? null;
$this->cidId = $params['cid_id'] ?? null;
$this->registro = $params['registro'] ?? null;
$this->paciente = $params['paciente'] ?? null;
$this->where = $params['where'] ?? null;
$this->whereNot = $params['where_not'] ?? null;
$this->onlyWithCbo = isset($params['only_with_cbo']) ? $params['only_with_cbo'] : false;
$this->onlyWithCid = isset($params['only_with_cid']) ? $params['only_with_cid'] : false;
$this->onlyWithoutCid = isset($params['only_without_cid']) ? $params['only_without_cid'] : false;
$this->atendimentoOdontologico = $params['atendimento_odontologico'] ?? null;
$this->atendimentoDomiciliar = $params['atendimento_domiciliar'] ?? null;
$this->likeCodigo = $params['like_codigo'] ?? null;
$this->onlyServicosEnfermagem = isset($params['only_servicos_enfermagem'])
? $params['only_servicos_enfermagem'] : false;
$this->searchByApelido = isset($params['search_by_apelido']) ? $params['search_by_apelido'] : false;
$this->instrumentoRegistro = $params['instrumento_registro'] ?? null;
$this->withAtributosComplementares = $params['with_atributos_complementares'] ?? false;
$this->procedimentoPrincipalCodigo = $params['procedimento_principal_codigo'] ?? null;
}
public function getUltimaCompetencia()
{
return Competencia::orderBy('valor', 'desc')->first();
}
public function getProcedimentos() : Collection
{
return $this->getProcedimentosBuilder()->get();
}
public function getProcedimentosBuilder()
{
$procedimentos = $this->searchByApelido ? $this->getSelectWithParametrizacao() : $this->getSelectAllProcedimentos();
if (!is_null($this->competenciaId)) {
$procedimentos->where('procedimento.competencia_id', $this->competenciaId);
}
if (!is_null($this->instrumentoRegistro)) {
$procedimentos->whereExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_registro')
->join('sigtap.registro', 'registro.id', 'procedimento_registro.registro_id')
->whereIn('registro.codigo', $this->instrumentoRegistro)
->whereColumn('procedimento_registro.procedimento_id', 'procedimento.id');
});
}
if (!is_null($this->cbo)) {
$procedimentos->where(function ($procedimentos) {
$procedimentos->whereExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_ocupacao')
->whereColumn('sigtap.procedimento_ocupacao.procedimento_id', 'procedimento.id')
->join('sigtap.ocupacao', 'sigtap.ocupacao.id', 'sigtap.procedimento_ocupacao.ocupacao_id');
if (is_array($this->cbo)) {
$query->whereIn('sigtap.ocupacao.codigo', $this->cbo);
}
else {
$query->where('sigtap.ocupacao.codigo', $this->cbo);
}
});
if (!$this->onlyWithCbo) {
$procedimentos->orWhereNotExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_ocupacao')
->whereColumn('sigtap.procedimento_ocupacao.procedimento_id', 'procedimento.id');
});
}
});
}
if (!is_null($this->ocupacaoId)) {
$procedimentos->where(function ($query) {
$query->whereExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_ocupacao')
->join('sigtap.ocupacao', 'ocupacao.id', 'procedimento_ocupacao.ocupacao_id')
->whereColumn('procedimento_ocupacao.procedimento_id', 'procedimento.id')
->where('ocupacao.id', $this->ocupacaoId);
})->orWhereNotExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_ocupacao')
->whereColumn('sigtap.procedimento_ocupacao.procedimento_id', 'sigtap.procedimento.id');
})->orWhereNotExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_ocupacao')
->whereColumn('procedimento_ocupacao.procedimento_id', 'procedimento.id');
});
});
}
if (!is_null($this->registro)) {
$registros = [];
switch ($this->registro) {
case 'aih': {
$registros = [
Registro::AIH_PROC_ESPECIAL,
Registro::AIH_PROC_PRINCIPAL,
Registro::AIH_PROC_SECUNDARIO
];
break;
}
case 'raas': {
$registros = [
Registro::RAAS_ATENCAO_DOMICILIAR,
Registro::RAAS_ATENCAO_PSICOSSOCIAL,
];
break;
}
}
if (!empty($registros)) {
$procedimentos->where(function ($query) use ($registros) {
$query->whereExists(function($query) use ($registros) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_registro')
->join('sigtap.registro', 'sigtap.registro.id', 'sigtap.procedimento_registro.registro_id')
->whereColumn('sigtap.procedimento_registro.procedimento_id', 'sigtap.procedimento.id')
->whereIn('sigtap.registro.codigo', $registros);
});
});
}
}
if ($this->onlyWithoutCid) {
$procedimentos->whereNotExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_cid')
->whereColumn('sigtap.procedimento_cid.procedimento_id', 'sigtap.procedimento.id');
});
}
else if (!is_null($this->cidId)) {
$procedimentos->where(function ($query) {
$query->whereExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_cid')
->whereColumn('sigtap.procedimento_cid.procedimento_id', 'sigtap.procedimento.id')
->whereIn('sigtap.procedimento_cid.cid_id', [$this->cidId]);
});
if (!$this->onlyWithCid) {
$query->orWhereNotExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.procedimento_cid')
->whereColumn('sigtap.procedimento_cid.procedimento_id', 'sigtap.procedimento.id');
});
}
});
}
if (!is_null($this->paciente)) {
$procedimentos->where(function ($procedimentos) {
$procedimentos
->where('procedimento.sexo', $this->paciente->cidadao->sexo->identificador)
->orWhere('procedimento.sexo', 'I')
->orWhere('procedimento.sexo', 'N');
});
if (!$this->paciente->is_desconhecido) {
$procedimentos->where(function ($procedimentos) {
$meses = $this->paciente->cidadao->idade['anos'] * 12;
$procedimentos
->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);
});
});
}
}
if (!is_null($this->whereNot) && is_array($this->whereNot)) {
$whereNotCodigos = $this->whereNot['codigo'] ?? [];
$procedimentos->whereNotIn('procedimento.codigo', $whereNotCodigos);
}
if (!is_null($this->atendimentoOdontologico)) {
$whereCodigos = $this->where['codigo'] ?? [];
$procedimentos->where(function($query) use($whereCodigos) {
$query->where('procedimento.codigo', 'like', '01%')
->orWhere('procedimento.codigo', 'like', '02%')
->orWhere('procedimento.codigo', 'like', '03%')
->orWhere('procedimento.codigo', 'like', '04%')
->orWhere('procedimento.codigo', 'like', '09%')
->orWhereIn('procedimento.codigo', $whereCodigos);
});
}
if (!is_null($this->atendimentoDomiciliar)) {
$whereCodigos = $this->where['codigo'] ?? [];
$procedimentos->where(function($query) use($whereCodigos) {
$query->where('procedimento.codigo', 'like', '01%')
->orWhere('procedimento.codigo', 'like', '02%')
->orWhere('procedimento.codigo', 'like', '03%')
->orWhere('procedimento.codigo', 'like', '04%');
});
}
if (!is_null($this->likeCodigo)) {
if (is_array($this->likeCodigo)) {
$procedimentos->where(function ($query) {
foreach ($this->likeCodigo as $likeCodigo) {
$query->orWhere('procedimento.codigo', 'like', $likeCodigo);
}
});
}
else {
$procedimentos->where('procedimento.codigo', 'like', $this->likeCodigo);
}
}
if ($this->onlyServicosEnfermagem) {
$procedimentos
->whereExists(function ($query) {
$query->select(DB::raw(1))
->from('pronto_atendimento_parametrizacao_servico_enfermagem')
->whereColumn(
'pronto_atendimento_parametrizacao_servico_enfermagem.procedimento_codigo',
'procedimento.codigo'
)
->whereNull('deleted_at');
});
}
if (!is_null($this->procedimentoPrincipalCodigo)) {
$procedimentos->whereExists(function ($query) {
$query->selectRaw(1)
->from('sigtap.procedimento_compativel')
->join(
'sigtap.procedimento_registro as procedimento_registro_compativel',
'procedimento_registro_compativel.id',
'sigtap.procedimento_compativel.procedimento_registro_compativel_id'
)
->join(
'sigtap.procedimento_registro as procedimento_registro_principal',
'procedimento_registro_principal.id',
'sigtap.procedimento_compativel.procedimento_registro_principal_id'
)
->join(
'sigtap.procedimento as procedimento_principal',
'procedimento_principal.id',
'procedimento_registro_principal.procedimento_id'
)
->whereColumn('procedimento_registro_compativel.procedimento_id', 'sigtap.procedimento.id')
->where('procedimento_principal.codigo', $this->procedimentoPrincipalCodigo);
});
}
return $procedimentos;
}
private function getSelectWithParametrizacao()
{
return DB::table('sigtap.procedimento')
->join(
'parametrizacao_procedimento',
'parametrizacao_procedimento.procedimento_codigo',
'sigtap.procedimento.codigo'
)
->select(collect([
'sigtap.procedimento.id',
'sigtap.procedimento.competencia_id',
'sigtap.procedimento.codigo',
'sigtap.procedimento.nome',
'sigtap.procedimento.quantidade_maxima_execucao',
'sigtap.procedimento.sexo',
'sigtap.procedimento.idade_minima',
'sigtap.procedimento.idade_maxima',
'sigtap.procedimento.valor_servico_ambilatorial',
$this->getSubSelectCidPrincipal(),
$this->getSubSelectExigeIdadeBpaConsolidado(),
$this->getSelectHasInstrumentoRegistroRaas(),
($this->withAtributosComplementares ? $this->getSelectAtributosComplementares() : null)
])->filter()->all())
->orderBy('parametrizacao_procedimento.apelido')
->whereNull('deleted_at');
}
private function getSelectAllProcedimentos()
{
return DB::table('sigtap.procedimento')
->select(collect([
'sigtap.procedimento.id',
'sigtap.procedimento.competencia_id',
'sigtap.procedimento.codigo',
'sigtap.procedimento.nome',
'sigtap.procedimento.quantidade_maxima_execucao',
'sigtap.procedimento.sexo',
'sigtap.procedimento.idade_minima',
'sigtap.procedimento.idade_maxima',
'sigtap.procedimento.valor_servico_ambilatorial',
$this->getSubSelectCidPrincipal(),
$this->getSubSelectExigeIdadeBpaConsolidado(),
$this->getSelectHasInstrumentoRegistroRaas(),
($this->withAtributosComplementares ? $this->getSelectAtributosComplementares() : null)
])->filter()->all())
->orderBy('procedimento.nome');
}
private function getSubSelectCidPrincipal()
{
return DB::raw("
(
SELECT TRUE
FROM sigtap.procedimento_cid
WHERE sigtap.procedimento_cid.procedimento_id = sigtap.procedimento.id
AND sigtap.procedimento_cid.principal = 'S'
LIMIT 1
) AS has_cid_principal
");
}
private function getSubSelectExigeIdadeBpaConsolidado()
{
return DB::raw("
(
SELECT TRUE
FROM sigtap.procedimento_detalhe
INNER JOIN sigtap.detalhe
ON sigtap.detalhe.id = sigtap.procedimento_detalhe.detalhe_id
WHERE sigtap.procedimento_detalhe.procedimento_id = sigtap.procedimento.id
AND sigtap.detalhe.codigo = '012'
LIMIT 1
) AS exige_idade_bpa_consolidado
");
}
private function getSelectHasInstrumentoRegistroRaas()
{
return DB::raw("
(
SELECT TRUE
FROM sigtap.procedimento_registro
INNER JOIN sigtap.registro
ON sigtap.registro.id = sigtap.procedimento_registro.registro_id
WHERE sigtap.procedimento_registro.procedimento_id = sigtap.procedimento.id
AND sigtap.registro.codigo IN ('" . Registro::RAAS_ATENCAO_DOMICILIAR . "', '" . Registro::RAAS_ATENCAO_PSICOSSOCIAL . "')
LIMIT 1
) AS has_instrumento_registro_raas
");
}
private function getSelectAtributosComplementares()
{
return DB::raw("
(
SELECT GROUP_CONCAT(sigtap.detalhe.codigo SEPARATOR '#')
FROM sigtap.procedimento_detalhe
INNER JOIN sigtap.detalhe
ON sigtap.detalhe.id = sigtap.procedimento_detalhe.detalhe_id
WHERE sigtap.procedimento_detalhe.procedimento_id = sigtap.procedimento.id
) AS atributos_complementares
");
}
}

View File

@@ -0,0 +1,95 @@
<?php
namespace App\Services\Sigtap;
use App\Models\Cadastro\SujeitoAtencao\Sexo;
use App\Models\Sigtap\Ocupacao;
use App\Models\Sigtap\Procedimento;
use Carbon\Carbon;
use Illuminate\Support\Collection;
class ProcedimentoValidationService
{
private const QUANTIDADE_ULTIMAS_COMPENTENCIAS_VALIDAS = 4;
private Procedimento $procedimento;
private Collection $competenciasValidas;
public function __construct(Procedimento $procedimento)
{
$this->procedimento = $procedimento;
$this->competenciasValidas = $this->getCompetenciasValidas();
}
private function getCompetenciasValidas() : Collection
{
$competencias = new Collection;
$lastDate = null;
for ($i = 0; $i < self::QUANTIDADE_ULTIMAS_COMPENTENCIAS_VALIDAS; $i++) {
$date = null;
if (is_null($lastDate)) {
$date = Carbon::now();
}
else {
$isJanuary = $lastDate->month === 1;
$year = $isJanuary ? $lastDate->year - 1 : $lastDate->year;
$month = $isJanuary ? 12 : $lastDate->month - 1;
$date = Carbon::create($year, $month);
}
$competencia = $date->format('Ym');
if (Procedimento::whereHas('competencia', function($query) use ($competencia) {
$query->where('valor', $competencia);
})->exists()) {
$competencias->push($competencia);
}
$lastDate = $date;
}
return $competencias;
}
public function isOnCurrentCompetencia() : bool
{
return $this->procedimento->competencia->valor === $this->competenciasValidas->first();
}
public function isOnValidCompetencia() : bool
{
return $this->competenciasValidas->contains($this->procedimento->competencia->valor);
}
public function isOcupacaoValid(Ocupacao $ocupacao) : bool
{
return $this->procedimento->ocupacoes->isEmpty()
|| $this->procedimento->ocupacoes->contains($ocupacao);
}
public function isSexoValid(Sexo $sexo) : bool
{
return $this->procedimento->sexo === 'I'
|| $this->procedimento->sexo === 'N'
|| $this->procedimento->sexo === $sexo->identificador;
}
public function isIdadeValid(int $idadeEmAnos) : bool
{
$idadeEmMeses = $idadeEmAnos * 12;
return ($idadeEmMeses >= $this->procedimento->idade_minima || $this->procedimento->idade_minima === 9999)
&& ($idadeEmMeses <= $this->procedimento->idade_maxima || $this->procedimento->idade_maxima === 9999);
}
public function isQuantidadeValid(int $quantidade) : bool
{
return $quantidade >= 0
&& $quantidade <= $this->procedimento->quantidade_maxima_execucao;
}
}

View File

@@ -0,0 +1,34 @@
<?php
namespace App\Services\Sigtap;
use App\Models\Sigtap\Competencia;
use App\Services\Service;
use Illuminate\Support\Facades\DB;
class ServicoService extends Service
{
public static function autocomplete()
{
$servicos = DB::table('sigtap.servico');
if (request()->query('procedimento_id')) {
$servicos->whereExists(function($query) {
$query->select(DB::raw(1))
->from('sigtap.classificacao')
->join('sigtap.procedimento_classificacao', 'procedimento_classificacao.classificacao_id', 'classificacao.id')
->whereColumn('classificacao.servico_id', 'servico.id')
->where('procedimento_classificacao.procedimento_id', request()->query('procedimento_id'));
});
} else {
if (request()->query('competencia_id')) {
$servicos->where('competencia_id', request()->query('competencia_id'));
} else {
$competencia = Competencia::orderByDesc('valor')->first();
$servicos->where('competencia_id', $competencia->id);
}
}
return $servicos;
}
}