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,201 @@
<?php
namespace App\Models\ProntoAtendimento\Atendimento\Medico;
use App\Models\Model;
use App\Models\ProntoAtendimento\Atendimento\Atendimento;
use App\Models\ProntoAtendimento\Atendimento\AvaliacaoAntropometrica;
use App\Models\ProntoAtendimento\Atendimento\Cid;
use App\Models\ProntoAtendimento\Atendimento\ClassificacaoRisco;
use App\Models\ProntoAtendimento\Atendimento\Desfecho;
use App\Models\ProntoAtendimento\Atendimento\EncaminhamentoHospitalar;
use App\Models\ProntoAtendimento\Atendimento\EscalaComaGlasgow;
use App\Models\ProntoAtendimento\Atendimento\Gestacao;
use App\Models\ProntoAtendimento\Atendimento\MedicamentoUso;
use App\Models\ProntoAtendimento\Atendimento\Observacao;
use App\Models\ProntoAtendimento\Atendimento\PrescricaoInterna;
use App\Models\ProntoAtendimento\Atendimento\Procedimento;
use App\Models\ProntoAtendimento\Atendimento\RaatParecerMedico;
use App\Models\ProntoAtendimento\Atendimento\ServicoEnfermagem;
use App\Models\ProntoAtendimento\Atendimento\SinalVital;
use App\Models\ProntoAtendimento\PedidoExame\PedidoExame;
use App\Models\ProntoAtendimento\Plantao\Plantao;
use Illuminate\Database\Eloquent\SoftDeletes;
class AtendimentoMedico extends Model
{
use SoftDeletes;
protected $table = 'pronto_atendimento_atendimento_medico';
protected $casts = [
'simples' => 'boolean',
'is_observacao' => 'boolean',
'data_hora_proxima_reavaliacao' => 'datetime:d/m/Y H:i',
'is_faa_assinada' => 'boolean',
];
protected $fillable = [
'plantao_id',
'simples',
'evolucao',
'queixa_principal_duracao',
'historia',
'exame_fisico',
'diagnostico',
'conduta',
'observacoes_enfermagem',
'data_hora_proxima_reavaliacao',
'atendimento_geral',
'orientacoes',
'desfecho_id',
'is_observacao',
'is_faa_assinada',
];
protected $hidden = [
'created_at',
'created_lotacao_id',
'created_centro_custo_id',
'updated_at',
'updated_lotacao_id',
'updated_centro_custo_id',
'deleted_at',
'deleted_lotacao_id',
'deleted_centro_custo_id',
];
protected $append = [
'solicitou_reavaliacao',
];
public function plantao()
{
return $this->belongsTo(Plantao::class);
}
public function desfecho()
{
return $this->belongsTo(Desfecho::class);
}
public function pedidosExames()
{
return $this->hasMany(PedidoExame::class);
}
public function servicosEnfermagem()
{
return $this->hasMany(ServicoEnfermagem::class);
}
public function atendimento()
{
return $this->belongsTo(Atendimento::class);
}
public function raatParecerMedico()
{
return $this->hasOne(RaatParecerMedico::class);
}
public function atestado()
{
return $this->hasOne(Atestado::class);
}
public function declaracoesComparecimento()
{
return $this->hasMany(DeclaracaoComparecimento::class);
}
public function encaminhamentos()
{
return $this->hasMany(Encaminhamento::class);
}
public function receita()
{
return $this->hasOne(Receita::class);
}
public function prescricoesInternas()
{
return $this->hasMany(PrescricaoInterna::class);
}
public function avaliacaoAntropometrica()
{
return $this->hasOne(AvaliacaoAntropometrica::class);
}
public function cid()
{
return $this->hasOne(Cid::class);
}
public function classificacaoRisco()
{
return $this->hasOne(ClassificacaoRisco::class);
}
public function gestacao()
{
return $this->hasOne(Gestacao::class);
}
public function encaminhamentoHospitalar()
{
return $this->hasOne(EncaminhamentoHospitalar::class);
}
public function medicamentosUso()
{
return $this->hasMany(MedicamentoUso::class);
}
public function observacao()
{
return $this->hasOne(Observacao::class);
}
public function procedimentos()
{
return $this->hasMany(Procedimento::class);
}
public function sinaisVitais()
{
return $this->hasMany(SinalVital::class);
}
public function getSolicitouReavaliacaoAttribute()
{
return $this->desfecho_id === null;
}
public function escalasComaGlasgow()
{
return $this->hasMany(EscalaComaGlasgow::class);
}
public function getIsAllowedToDeleteAttribute()
{
return $this->hasNoOne([
'pedidosExames',
'atestado',
'avaliacaoAntropometrica',
'cid',
'classificacaoRisco',
'declaracoesComparecimento',
'encaminhamentos',
'gestacao',
'medicamentosUso',
'observacao',
'procedimentos',
'raatParecerMedico',
'receitas',
'sinaisVitais',
]);
}
}

View File

@@ -0,0 +1,20 @@
<?php
namespace App\Models\ProntoAtendimento\Atendimento\Medico;
use App\Models\Model;
class AtendimentoMedicoTipo extends Model
{
protected $table = 'pronto_atendimento_atendimento_medico_tipo';
protected $fillable = [
'id',
'nome',
];
protected $hidden = [
'created_at',
'updated_at',
];
}

View File

@@ -0,0 +1,64 @@
<?php
namespace App\Models\ProntoAtendimento\Atendimento\Medico;
use App\Models\Geral\DocumentoTipo;
use App\Models\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Atestado extends Model
{
use SoftDeletes;
protected $table = 'pronto_atendimento_atendimento_medico_atestado';
protected $casts = [
'imprime_cid' => 'boolean',
'paciente' => 'boolean',
'horario_inicial' => 'datetime:H:i',
];
protected $fillable = [
'modelo_id',
'imprime_cid',
'dias',
'quantidade_horas',
'horario_inicial',
'documento_tipo_id',
'documento_numero',
'paciente',
'nome_acompanhante',
];
protected $hidden = [
'created_at',
'created_lotacao_id',
'created_centro_custo_id',
'updated_at',
'updated_lotacao_id',
'updated_centro_custo_id',
'deleted_at',
'deleted_lotacao_id',
'deleted_centro_custo_id',
];
public function atendimentoMedico()
{
return $this->belongsTo(AtendimentoMedico::class);
}
public function documentoTipo()
{
return $this->belongsTo(DocumentoTipo::class);
}
public function modelo()
{
return $this->belongsTo(AtestadoModelo::class, 'modelo_id');
}
public function getIsAllowedToDeleteAttribute()
{
return true;
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Models\ProntoAtendimento\Atendimento\Medico;
use App\Models\Model;
class AtestadoModelo extends Model
{
protected $table = 'pronto_atendimento_atestado_modelo';
protected $fillable = [
'id',
'nome',
];
protected $hidden = [
'created_at',
'updated_at',
];
public function atestados()
{
return $this->hasMany(Atestado::class, 'modelo_id');
}
}

View File

@@ -0,0 +1,91 @@
<?php
namespace App\Models\ProntoAtendimento\Atendimento\Medico;
use App\Models\Geral\DocumentoTipo;
use App\Models\Model;
use App\Models\ProntoAtendimento\Atendimento\Enfermagem\AtendimentoEnfermagem;
use App\Models\ProntoAtendimento\Atendimento\ExameImagem\AtendimentoExameImagem;
use App\Models\ProntoAtendimento\Atendimento\Observacao\PacienteObservacao;
use App\Models\ProntoAtendimento\Atendimento\Recepcao;
use App\Models\ProntoAtendimento\Atendimento\Triagem\AtendimentoTriagem;
use Illuminate\Database\Eloquent\SoftDeletes;
class DeclaracaoComparecimento extends Model
{
use SoftDeletes;
protected $table = 'pronto_atendimento_atendimento_medico_declaracao_comparecimento';
protected $casts = [
'de' => 'datetime:Y-m-d H:i:s',
'ate' => 'datetime:Y-m-d H:i:s',
];
protected $fillable = [
'tipo_id',
'nome',
'documento_tipo_id',
'documento_numero',
'de',
'ate',
'motivo'
];
protected $hidden = [
'created_at',
'created_lotacao_id',
'created_centro_custo_id',
'updated_at',
'updated_lotacao_id',
'updated_centro_custo_id',
'deleted_at',
'deleted_lotacao_id',
'deleted_centro_custo_id',
];
public function atendimentoMedico()
{
return $this->belongsTo(AtendimentoMedico::class);
}
public function atendimentoEnfermagem()
{
return $this->belongsTo(AtendimentoEnfermagem::class);
}
public function atendimentoExameImagem()
{
return $this->belongsTo(AtendimentoExameImagem::class);
}
public function pacienteObservacao()
{
return $this->belongsTo(PacienteObservacao::class);
}
public function atendimentoTriagem()
{
return $this->belongsTo(AtendimentoTriagem::class);
}
public function recepcao()
{
return $this->belongsTo(Recepcao::class, 'atendimento_recepcao_id');
}
public function tipo()
{
return $this->belongsTo(DeclaracaoComparecimentoTipo::class);
}
public function documentoTipo()
{
return $this->belongsTo(DocumentoTipo::class);
}
public function getIsAllowedToDeleteAttribute()
{
return true;
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Models\ProntoAtendimento\Atendimento\Medico;
use App\Models\Model;
class DeclaracaoComparecimentoTipo extends Model
{
protected $table = 'pronto_atendimento_declaracao_comparecimento_tipo';
protected $fillable = [
'id',
'nome',
];
protected $hidden = [
'created_at',
'updated_at',
];
public function declaracoesComparecimentos()
{
return $this->hasMany(DeclaracaoComparecimento::class, 'tipo_id');
}
}

View File

@@ -0,0 +1,52 @@
<?php
namespace App\Models\ProntoAtendimento\Atendimento\Medico;
use App\Models\Model;
use App\Models\Sigtap\Ocupacao;
use Illuminate\Database\Eloquent\SoftDeletes;
class Encaminhamento extends Model
{
use SoftDeletes;
protected $table = 'pronto_atendimento_atendimento_medico_encaminhamento';
protected $casts = [
'urgente' => 'boolean',
];
protected $fillable = [
'urgente',
'ocupacao_id',
'motivo',
'observacoes'
];
protected $hidden = [
'created_at',
'created_lotacao_id',
'created_centro_custo_id',
'updated_at',
'updated_lotacao_id',
'updated_centro_custo_id',
'deleted_at',
'deleted_lotacao_id',
'deleted_centro_custo_id',
];
public function atendimentoMedico()
{
return $this->belongsTo(AtendimentoMedico::class);
}
public function ocupacao()
{
return $this->belongsTo(Ocupacao::class);
}
public function getIsAllowedToDeleteAttribute()
{
return true;
}
}

View File

@@ -0,0 +1,70 @@
<?php
namespace App\Models\ProntoAtendimento\Atendimento\Medico;
use App\Models\Cadastro\Medicamento\ReceitaTipo;
use App\Models\Model;
use Dyrynda\Database\Support\CascadeSoftDeletes;
use Illuminate\Database\Eloquent\SoftDeletes;
class Receita extends Model
{
use SoftDeletes, CascadeSoftDeletes;
protected $table = 'pronto_atendimento_atendimento_medico_receita';
protected $cascadeDeletes = [
'medicamentos'
];
protected $casts = [
'imprime_cid' => 'boolean',
'is_assinada' => 'boolean',
];
protected $fillable = [
'tipo_id',
'is_assinada',
];
protected $hidden = [
'created_at',
'created_lotacao_id',
'created_centro_custo_id',
'updated_at',
'updated_lotacao_id',
'updated_centro_custo_id',
'deleted_at',
'deleted_lotacao_id',
'deleted_centro_custo_id',
];
protected $with = [
'medicamentos',
];
public function atendimentoMedico()
{
return $this->belongsTo(AtendimentoMedico::class);
}
public function tipo()
{
return $this->belongsTo(ReceitaTipo::class);
}
public function medicamentos()
{
return $this->hasMany(ReceitaMedicamento::class);
}
public function receitasAssinadas()
{
return $this->hasMany(ReceitaAssinada::class);
}
public function getIsAllowedToDeleteAttribute()
{
return true;
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Models\ProntoAtendimento\Atendimento\Medico;
use App\Models\Model;
class ReceitaAssinada extends Model
{
protected $table = 'pronto_atendimento_atendimento_medico_receita_assinada';
protected $fillable = [
'ordem',
];
protected $hidden = [
'created_at',
'created_lotacao_id',
'created_centro_custo_id',
'updated_at',
'updated_lotacao_id',
'updated_centro_custo_id',
];
public function receita()
{
return $this->belongsTo(Receita::class);
}
}

View File

@@ -0,0 +1,167 @@
<?php
namespace App\Models\ProntoAtendimento\Atendimento\Medico;
use App\Enums\Cadastro\MedidaTempo as CadastroMedidaTempo;
use App\Models\Cadastro\Medicamento\FormaFarmaceutica;
use App\Models\Cadastro\Medicamento\Medicamento;
use App\Models\Cadastro\Medicamento\ViaAdministracao;
use App\Models\Geral\MedidaTempo;
use App\Models\Geral\Turno;
use App\Models\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class ReceitaMedicamento extends Model
{
use SoftDeletes;
protected $table = 'pronto_atendimento_atendimento_medico_receita_medicamento';
protected $fillable = [
'medicamento_id',
'via_administracao_outras',
'quantidade',
'intervalo_tempo',
'intervalo_medida_tempo_id',
'turno_id',
'durante_tempo',
'durante_medida_tempo_id',
'recomendacoes',
'descricao',
'medicamento_manual',
'prescricao_manual',
];
protected $hidden = [
'created_at',
'created_lotacao_id',
'created_centro_custo_id',
'updated_at',
'updated_lotacao_id',
'updated_centro_custo_id',
'deleted_at',
'deleted_lotacao_id',
'deleted_centro_custo_id',
];
protected $appends = [
'dose_unica',
'posologia_por_frequencia',
'posologia_por_turno',
'posologia',
'uso_continuo',
'livre',
];
public function receita()
{
return $this->belongsTo(Receita::class);
}
public function medicamento()
{
return $this->belongsTo(Medicamento::class)->withTrashed();
}
public function viaAdministracao()
{
return $this->belongsTo(ViaAdministracao::class);
}
public function formaFarmaceutica()
{
return $this->belongsTo(FormaFarmaceutica::class);
}
public function intervaloMedidaTempo()
{
return $this->belongsTo(MedidaTempo::class);
}
public function turno()
{
return $this->belongsTo(Turno::class);
}
public function duranteMedidaTempo()
{
return $this->belongsTo(MedidaTempo::class);
}
public function getLivreAttribute()
{
return !is_null($this->descricao);
}
public function getDoseUnicaAttribute()
{
return !$this->livre
&& !$this->posologia_por_frequencia
&& !$this->posologia_por_turno
&& is_null($this->durante_tempo)
&& is_null($this->durante_medida_tempo_id);
}
public function getPosologiaPorFrequenciaAttribute()
{
return !is_null($this->intervalo_tempo)
&& !is_null($this->intervalo_medida_tempo_id);
}
public function getPosologiaPorTurnoAttribute()
{
return !is_null($this->turno_id);
}
public function getUsoContinuoAttribute()
{
return !$this->livre
&& !$this->dose_unica
&& is_null($this->durante_tempo)
&& is_null($this->durante_medida_tempo_id);
}
public function getQuantidadeAttribute($value)
{
return str_replace('.', ',', $value);
}
public function getPosologiaAttribute()
{
$unidadeMedida = $this->medicamento ? $this->medicamento->unidadeMedida->nome : null;
$posologia = "{$this->quantidade} {$unidadeMedida}";
if ($this->dose_unica) {
return $posologia;
}
if ($this->posologia_por_frequencia) {
if ($this->intervaloMedidaTempo->id === CadastroMedidaTempo::MINUTOS || $this->intervaloMedidaTempo->id === CadastroMedidaTempo::HORAS) {
$posologia .= " a cada {$this->intervalo_tempo} {$this->intervaloMedidaTempo->nome}";
}
else if ($this->intervaloMedidaTempo->id === CadastroMedidaTempo::DIAS || $this->intervaloMedidaTempo->id === CadastroMedidaTempo::SEMANAS || $this->intervaloMedidaTempo->id === CadastroMedidaTempo::MESES) {
$posologia .= " {$this->intervalo_tempo} vez(es) ao {$this->intervaloMedidaTempo->nome}";
}
}
else if ($this->posologia_por_turno) {
$posologia .= " pela {$this->turno->nome}";
}
if (!$this->uso_continuo && !$this->livre && is_object($this->duranteMedidaTempo)) {
$posologia .= " durante {$this->durante_tempo} {$this->duranteMedidaTempo->nome}";
}
return $posologia;
}
public function getIsAllowedToDeleteAttribute()
{
return true;
}
}