Files
rkm-conectasus-ci-sandbox/api/app/Models/Cadastro/Especialidade.php
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

212 lines
6.7 KiB
PHP

<?php
namespace App\Models\Cadastro;
use App\Models\Ambulatorio\Jornada;
use App\Models\Ambulatorio\ParametrizacaoInfraestruturaEspecialidade;
use App\Models\Ambulatorio\ParametrizacaoInfraestruturaSms;
use App\Models\Ambulatorio\ParametrizacaoInfraestruturaSmsEspecialidade;
use App\Models\Ambulatorio\ProblemaCondicaoSituacao;
use App\Models\Ambulatorio\SaudeBucalVigilancia;
use App\Models\AtencaoBasica\AtendimentoIndividual\CondicaoAvaliada;
use App\Models\AtencaoBasica\AtendimentoIndividual\Conduta;
use App\Models\AtencaoBasica\AtendimentoOdontologico\TipoConsulta;
use App\Models\Geral\Ciap;
use App\Models\Model;
use App\Models\Raas\MotivoSaidaPermanencia;
use App\Models\Regulacao\ParametrizacaoDataDesejadaEspecialidade;
use App\Models\Sigtap\Cid;
use App\Models\Sigtap\Ocupacao;
use App\Models\Sigtap\Procedimento;
class Especialidade extends Model
{
protected $table = 'cadastro_especialidade';
protected $casts = [
'ativo' => 'boolean',
'encaminhamento' => 'boolean',
'is_regulado' => 'boolean',
'permite_agendamento_gestante' => 'boolean',
'permite_agendamento_mesmo_dia' => 'boolean',
'permite_agendamento_nao_municipe' => 'boolean',
'permite_fechamento_sem_procedimento' => 'boolean',
'precisa_informar_conclusao_tratamento' => 'boolean',
'exigir_peso_altura_circunferencia' => 'boolean',
'permite_integracao_conectasus_cidadao' => 'boolean',
'permite_integracao_aplicativo_feridas' => 'boolean',
'tratamento' => 'boolean',
'is_ppi' => 'boolean',
];
protected $fillable = [
'ativo',
'encaminhamento',
'idade_maxima',
'idade_minima',
'is_regulado',
'limite_consulta',
'limite_consulta_mes',
'mensagem_protocolo_agendamento',
'nome',
'ocupacao_id',
'permite_agendamento_gestante',
'permite_agendamento_mesmo_dia',
'permite_agendamento_nao_municipe',
'permite_fechamento_sem_procedimento',
'precisa_informar_conclusao_tratamento',
'exigir_peso_altura_circunferencia',
'permite_integracao_conectasus_cidadao',
'permite_integracao_aplicativo_feridas',
'procedimento_grupo_codigo',
'regulacao_tipo_id',
'sexo_id',
'tratamento',
'atencao_basica_procedimento_padrao_codigo',
'atencao_basica_motivo_saida_permanencia_id',
'atencao_basica_classificacao_codigo',
'atencao_basica_numero_autorizacao',
'atencao_basica_problema_condicao_situacao_id',
'atencao_basica_problema_condicao_ciap_id',
'atencao_basica_problema_condicao_cid_id',
'atencao_basica_odontologico_consulta_tipo_id',
'atencao_basica_odontologico_vigilancia_id',
'atencao_basica_odontologico_conduta_id',
'is_ppi',
'valor_ppi',
'limite_ocorrencias_paciente',
'periodo_monitoramento',
'tempo_liberacao',
'tempo_medio_previsto_atendimento_dias',
];
protected $hidden = [
'created_at',
'created_lotacao_id',
'created_centro_custo_id',
'updated_at',
'updated_lotacao_id',
'updated_centro_custo_id',
];
public function ocupacao()
{
return $this->belongsTo(Ocupacao::class);
}
public function atencaoBasicaMotivoSaidaPermanencia()
{
return $this->belongsTo(MotivoSaidaPermanencia::class);
}
public function atencaoBasicaProblemaCondicaoSituacao()
{
return $this->belongsTo(ProblemaCondicaoSituacao::class);
}
public function atencaoBasicaProblemaCondicaoCiap()
{
return $this->belongsTo(Ciap::class);
}
public function atencaoBasicaProblemaCondicaoCid()
{
return $this->belongsTo(Cid::class);
}
public function atencaoBasicaOdontologicoConsultaTipo()
{
return $this->belongsTo(TipoConsulta::class);
}
public function atencaoBasicaOdontologicoVigilancia()
{
return $this->belongsTo(SaudeBucalVigilancia::class);
}
public function atencaoBasicaOdontologicoConduta()
{
return $this->belongsTo(Conduta::class);
}
public function condutas()
{
return $this->belongsToMany(
Conduta::class,
'cadastro_especialidade_conduta',
'especialidade_id',
'conduta_id'
)
->using(EspecialidadeConduta::class)
->as('especialidadeConduta')
->withTimestamps();
}
public function condicoesAvaliadas()
{
return $this->belongsToMany(
CondicaoAvaliada::class,
'cadastro_especialidade_condicao_avaliada',
'especialidade_id',
'condicao_avaliada_id'
)
->using(EspecialidadeCondicaoAvaliada::class)
->as('especialidadeCondicaoAvaliada')
->withTimestamps();
}
public function dataDesejadaEspecialidades()
{
return $this->belongsToMany(
Especialidade::class,
'regulacao_parametrizacao_data_desejada_especialidade',
'parametrizacao_id',
'especialidade_id'
)
->using(ParametrizacaoDataDesejadaEspecialidade::class)
->as('dataDesejadaEspecialidade')
->withTimestamps();
}
public function ambulatorioParametrizacoesSms()
{
return $this->belongsToMany(
ParametrizacaoInfraestruturaSms::class,
'ambulatorio_parametrizacao_infraestrutura_sms_especialidade',
'especialidade_id',
'parametrizacao_infraestrutura_sms_id'
)
->using(ParametrizacaoInfraestruturaSmsEspecialidade::class)
->as('parametrizacaoInfraestruturaSmsEspecialidade')
->withTimestamps();
}
public function ambulatorioParametrizacoesInfraestruturaEspecialidade()
{
return $this->hasMany(ParametrizacaoInfraestruturaEspecialidade::class);
}
public function ambulatorioJornadas()
{
return $this->hasMany(Jornada::class);
}
public function getProcedimentoGrupoAttribute()
{
return is_null($this->procedimento_grupo_codigo)
? null
: Procedimento::where('codigo', $this->procedimento_grupo_codigo)
->orderByDesc('competencia_id')
->first();
}
public function getAtencaoBasicaProcedimentoPadraoAttribute()
{
return is_null($this->atencao_basica_procedimento_padrao_codigo)
? null
: Procedimento::where('codigo', $this->atencao_basica_procedimento_padrao_codigo)
->orderByDesc('competencia_id')
->first();
}
}