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,190 @@
<?php
namespace App\Models\Ambulatorio;
use App\Enums\Ambulatorio\DemandaTipo;
use App\Models\AtencaoBasica\AtendimentoIndividual\TipoAtendimento;
use App\Models\Cadastro\Especialidade;
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
use App\Models\Cadastro\SujeitoAtencao\Usuario;
use App\Models\Model;
use App\Models\PainelSenha\Fila;
use App\Models\Sigtap\Ocupacao;
class Atendimento extends Model
{
protected $table = 'ambulatorio_atendimento';
protected $casts = [
'finalizado_em' => 'datetime:d/m/Y H:i:s',
'pos_consulta' => 'boolean',
];
protected $fillable = [
'atendimento_tipo_id',
'fila_id',
'paciente_id',
'agendamento_id',
'demanda_espontanea_id',
'responsavel_atual_usuario_id',
'responsavel_atual_ocupacao_id',
'responsavel_atual_especialidade_id',
'responsavel_encaminhamento_atual_lotacao_id',
'finalizado_em',
'finalizado_lotacao_id',
'pos_consulta',
'tempo_atendimento'
];
protected $hidden = [
'created_at',
'created_lotacao_id',
'created_centro_custo_id',
'updated_at',
'updated_lotacao_id',
'updated_centro_custo_id',
];
public function fila()
{
return $this->belongsTo(Fila::class);
}
public function agendamento()
{
return $this->belongsTo(Agendamento::class);
}
public function demandaEspontanea()
{
return $this->belongsTo(DemandaEspontanea::class);
}
public function responsavelAtualUsuario()
{
return $this->belongsTo(Usuario::class);
}
public function responsavelAtualOcupacao()
{
return $this->belongsTo(Ocupacao::class);
}
public function responsavelAtualEspecialidade()
{
return $this->belongsTo(Especialidade::class);
}
public function responsavelEncaminhamentoAtualLotacao()
{
return $this->belongsTo(Lotacao::class);
}
public function finalizadoLotacao()
{
return $this->belongsTo(Lotacao::class);
}
public function servicos()
{
return $this->belongsToMany(Servico::class, 'ambulatorio_atendimento_servico')
->using(AtendimentoServico::class)
->as('atendimentoServico')
->withTimestamps();
}
public function preAtendimento()
{
return $this->hasOne(AtendimentoPreAtendimento::class);
}
public function raas()
{
return $this->hasOne(AtendimentoRaas::class);
}
public function soaps()
{
return $this->hasMany(AtendimentoSoap::class);
}
public function posConsultas()
{
return $this->hasMany(AtendimentoPosConsulta::class);
}
public function antropometrias()
{
return $this->hasMany(AtendimentoAntropometria::class);
}
public function sinaisVitais()
{
return $this->hasMany(AtendimentoSinalVital::class);
}
public function glicemiasCapilares()
{
return $this->hasMany(AtendimentoGlicemiaCapilar::class);
}
public function procedimentos()
{
return $this->hasMany(AtendimentoProcedimento::class);
}
public function declaracoesComparecimento()
{
return $this->hasMany(AtendimentoDeclaracaoComparecimento::class);
}
public function getFinalizadoAttribute()
{
return !is_null($this->finalizado_em);
}
public function getDemandaTipoAttribute()
{
return is_null($this->agendamento_id) ? DemandaTipo::ESPONTANEA : DemandaTipo::AGENDADA;
}
public function getIsDemandaEspontaneaAttribute()
{
return $this->demanda_tipo === DemandaTipo::ESPONTANEA;
}
public function getPacienteAttribute()
{
return ($this->agendamento ?? $this->demandaEspontanea)->paciente;
}
public function getOcupacaoAttribute()
{
return $this->responsavelAtualOcupacao ?? ($this->agendamento->jornada->lotacao ?? $this->demandaEspontanea)->ocupacao;
}
public function getEspecialidadeAttribute()
{
return $this->responsavelAtualEspecialidade ?? ($this->agendamento->jornada ?? $this->demandaEspontanea)->especialidade;
}
public function getUsuarioAttribute()
{
return $this->responsavelAtualUsuario ?? ($this->agendamento->jornada->lotacao ?? $this->demandaEspontanea)->usuario;
}
public function getJornadaAttribute()
{
return $this->demandaEspontanea->jornada;
}
public function getInfraestruturaAttribute()
{
return ($this->agendamento->jornada->lotacao ?? $this->demandaEspontanea->createdLotacao)->infraestrutura;
}
public function atendimentoTipo()
{
return $this->belongsTo(TipoAtendimento::class);
}
}