This commit is contained in:
140
api/app/Services/Sigtap/CidService.php
Normal file
140
api/app/Services/Sigtap/CidService.php
Normal 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();
|
||||
}
|
||||
}
|
||||
29
api/app/Services/Sigtap/ClassificacaoService.php
Normal file
29
api/app/Services/Sigtap/ClassificacaoService.php
Normal 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;
|
||||
}
|
||||
}
|
||||
18
api/app/Services/Sigtap/FinanciamentoService.php
Normal file
18
api/app/Services/Sigtap/FinanciamentoService.php
Normal 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();
|
||||
}
|
||||
}
|
||||
51
api/app/Services/Sigtap/OcupacaoService.php
Normal file
51
api/app/Services/Sigtap/OcupacaoService.php
Normal 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;
|
||||
}
|
||||
}
|
||||
438
api/app/Services/Sigtap/ProcedimentoService.php
Normal file
438
api/app/Services/Sigtap/ProcedimentoService.php
Normal 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
|
||||
");
|
||||
}
|
||||
}
|
||||
95
api/app/Services/Sigtap/ProcedimentoValidationService.php
Normal file
95
api/app/Services/Sigtap/ProcedimentoValidationService.php
Normal 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;
|
||||
}
|
||||
}
|
||||
34
api/app/Services/Sigtap/ServicoService.php
Normal file
34
api/app/Services/Sigtap/ServicoService.php
Normal 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user