212 lines
6.7 KiB
PHP
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();
|
|
}
|
|
}
|