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,19 @@
<?php
use App\Enums\Regulacao\Tipo as Enum;
use App\Models\Regulacao\Tipo;
use Illuminate\Database\Seeder;
class Tipo_20240722161139 extends Seeder
{
public function run()
{
$tipos = [
['id' => Enum::INTERNO, 'nome' => 'INTERNO'],
['id' => Enum::EXTERNO, 'nome' => 'EXTERNO'],
['id' => Enum::AMBOS, 'nome' => 'AMBOS'],
];
SeederUtil::saveList(Tipo::class, $tipos, 'id');
}
}

View File

@@ -0,0 +1,26 @@
<?php
use App\Enums\Regulacao\StatusTipo as Enum;
use App\Models\Regulacao\StatusTipo;
use Illuminate\Database\Seeder;
class StatusTipo_20240723140116 extends Seeder
{
public function run()
{
$tipos = [
['id' => Enum::SOLICITADO, 'nome' => 'SOLICITADO'],
['id' => Enum::DEVOLVIDO, 'nome' => 'DEVOLVIDO'],
['id' => Enum::REENVIADA, 'nome' => 'REENVIADA'],
['id' => Enum::CANCELADO, 'nome' => 'CANCELADO'],
['id' => Enum::EM_ESPERA, 'nome' => 'EM ESPERA'],
['id' => Enum::AGENDADO, 'nome' => 'AGENDADO'],
['id' => Enum::REAGENDADO, 'nome' => 'REAGENDADO'],
['id' => Enum::FALTA, 'nome' => 'FALTA'],
['id' => Enum::REALIZADO, 'nome' => 'REALIZADO'],
['id' => Enum::REMARCAR, 'nome' => 'REMARCAR'],
];
SeederUtil::saveList(StatusTipo::class, $tipos, 'id');
}
}

View File

@@ -0,0 +1,18 @@
<?php
use App\Enums\Regulacao\ReguladorTipo as Enum;
use App\Models\Regulacao\ParametrizacaoReguladorTipo;
use Illuminate\Database\Seeder;
class ReguladorTipo_20240725131402 extends Seeder
{
public function run()
{
$tipos = [
['id' => Enum::MUNICIPAL, 'nome' => 'MUNICIPAL'],
['id' => Enum::LOCAL_ATENDIMENTO, 'nome' => 'LOCAL DE ATENDIMENTO'],
];
SeederUtil::saveList(ParametrizacaoReguladorTipo::class, $tipos, 'id');
}
}

View File

@@ -0,0 +1,19 @@
<?php
use App\Enums\Regulacao\OpcaoRetiradaProtocoloAgendamento as Enum;
use App\Models\Regulacao\ParametrizacaoOpcaoRetiradaProtocoloAgendamento;
use Illuminate\Database\Seeder;
class OpcaoRetiradaProtocoloAgendamento_20240725150001 extends Seeder
{
public function run()
{
$opcoes = [
['id' => Enum::NAO_INFORMADO, 'nome' => 'NÃO INFORMADO'],
['id' => Enum::NAO_RETIRADO, 'nome' => 'NÃO RETIRADO'],
['id' => Enum::RETIRADO, 'nome' => 'RETIRADO'],
];
SeederUtil::saveList(ParametrizacaoOpcaoRetiradaProtocoloAgendamento::class, $opcoes, 'id');
}
}

View File

@@ -0,0 +1,18 @@
<?php
use App\Enums\Regulacao\SolicitacaoPrioridade as Enum;
use App\Models\Regulacao\SolicitacaoPrioridade;
use Illuminate\Database\Seeder;
class SolicitacaoPrioridade_20240805114620 extends Seeder
{
public function run()
{
$prioridades = [
['id' => Enum::ELETIVO, 'nome' => 'ELETIVO/NORMAL'],
['id' => Enum::URGENCIA, 'nome' => 'URGÊNCIA'],
];
SeederUtil::saveList(SolicitacaoPrioridade::class, $prioridades, 'id');
}
}

View File

@@ -0,0 +1,20 @@
<?php
use App\Enums\Regulacao\SolicitacaoPrioridade as Enum;
use App\Models\Regulacao\SolicitacaoPrioridade;
use Illuminate\Database\Seeder;
class AddPrioridadeToSolicitacaoPrioridade_20241112153644 extends Seeder
{
public function run()
{
$prioridades = [
['id' => Enum::PRIORITARIO, 'nome' => 'PRIORITÁRIO'],
['id' => Enum::EMERGENCIA, 'nome' => 'EMERGÊNCIA'],
];
SeederUtil::saveList(SolicitacaoPrioridade::class, $prioridades, 'id');
}
}

View File

@@ -0,0 +1,17 @@
<?php
use App\Models\Regulacao\ParametrizacaoReguladorEspecialidade;
use Illuminate\Database\Seeder;
class ExigeDocumentoAnexoToRegulacaoParametrizacaoReguladorEspecialidade_20250307094324 extends Seeder
{
public function run()
{
$parametrizacoes = ParametrizacaoReguladorEspecialidade::all();
foreach ($parametrizacoes as $parametrizacao) {
$parametrizacao->exige_documento_anexo = false;
$parametrizacao->save();
}
}
}

View File

@@ -0,0 +1,17 @@
<?php
use App\Models\Regulacao\ParametrizacaoReguladorExame;
use Illuminate\Database\Seeder;
class ExigeDocumentoAnexoToRegulacaoParametrizacaoReguladorExame_20250307095136 extends Seeder
{
public function run()
{
$parametrizacoes = ParametrizacaoReguladorExame::all();
foreach ($parametrizacoes as $parametrizacao) {
$parametrizacao->exige_documento_anexo = false;
$parametrizacao->save();
}
}
}

View File

@@ -0,0 +1,17 @@
<?php
use App\Models\Regulacao\ParametrizacaoReguladorProcedimentoCirurgico;
use Illuminate\Database\Seeder;
class ExigeDocumentoAnexoToRegulacaoParametrizacaoReguladorPrecedimentoCirurgico_20250307095229 extends Seeder
{
public function run()
{
$parametrizacoes = ParametrizacaoReguladorProcedimentoCirurgico::all();
foreach ($parametrizacoes as $parametrizacao) {
$parametrizacao->exige_documento_anexo = false;
$parametrizacao->save();
}
}
}

View File

@@ -0,0 +1,18 @@
<?php
use App\Enums\Regulacao\ParametrizacaoDivulgacaoAba as Enum;
use App\Models\Regulacao\ParametrizacaoDivulgacaoAba;
use Illuminate\Database\Seeder;
class ParametrizacaoDivulgacaoAba_20260331135259 extends Seeder
{
public function run()
{
$abas = [
['id' => Enum::SOLICITACOES_EM_ESPERA, 'nome' => 'Solicitações em espera'],
['id' => Enum::SOLICITACOES_ATENDIDAS, 'nome' => 'Solicitações atendidas'],
];
\SeederUtil::saveList(ParametrizacaoDivulgacaoAba::class, $abas, 'id');
}
}

View File

@@ -0,0 +1,29 @@
<?php
use App\Enums\Regulacao\ParametrizacaoDivulgacaoColuna as Enum;
use App\Models\Regulacao\ParametrizacaoDivulgacaoColuna;
use Illuminate\Database\Seeder;
class ParametrizacaoDivulgacaoColuna_20260331135306 extends Seeder
{
public function run()
{
$colunas = [
['id' => Enum::PACIENTE, 'nome' => 'Paciente'],
['id' => Enum::CNS, 'nome' => 'CNS'],
['id' => Enum::CPF, 'nome' => 'CPF'],
['id' => Enum::PRIORIDADE, 'nome' => 'Prioridade'],
['id' => Enum::TIPO_DE_SOLICITACAO, 'nome' => 'Tipo de solicitação'],
['id' => Enum::TEMPO_MEDIO_PREVISTO_PARA_ATENDIMENTO, 'nome' => 'Tempo médio previsto para atendimento'],
['id' => Enum::TEMPO_DE_ESPERA, 'nome' => 'Tempo de espera'],
['id' => Enum::DATA_DA_MOVIMENTACAO, 'nome' => 'Data da movimentação'],
['id' => Enum::STATUS, 'nome' => 'Status'],
['id' => Enum::DATA_DO_ATENDIMENTO, 'nome' => 'Data do atendimento'],
['id' => Enum::CLASSIFICACAO, 'nome' => 'Classificação'],
['id' => Enum::PROCEDIMENTO_CONSULTA, 'nome' => 'Procedimento/Consulta'],
['id' => Enum::DATA_DA_SOLICITACAO, 'nome' => 'Data da solicitação'],
];
\SeederUtil::saveList(ParametrizacaoDivulgacaoColuna::class, $colunas, 'id');
}
}

View File

@@ -0,0 +1,43 @@
<?php
use App\Enums\Regulacao\ParametrizacaoDivulgacaoAba as Aba;
use App\Enums\Regulacao\ParametrizacaoDivulgacaoColuna as Coluna;
use App\Models\Regulacao\ParametrizacaoDivulgacaoAba;
use Illuminate\Database\Seeder;
class ParametrizacaoDivulgacaoAbaColuna_20260331135749 extends Seeder
{
public function run()
{
ParametrizacaoDivulgacaoAba::findOrFail(Aba::SOLICITACOES_EM_ESPERA)->colunas()->sync([
Coluna::PACIENTE => ['visivel' => true],
Coluna::CNS => ['visivel' => true],
Coluna::CPF => ['visivel' => true],
Coluna::PRIORIDADE => ['visivel' => true],
Coluna::TIPO_DE_SOLICITACAO => ['visivel' => true],
Coluna::TEMPO_MEDIO_PREVISTO_PARA_ATENDIMENTO => ['visivel' => false],
Coluna::TEMPO_DE_ESPERA => ['visivel' => true],
Coluna::DATA_DA_MOVIMENTACAO => ['visivel' => true],
Coluna::CLASSIFICACAO => ['visivel' => true],
Coluna::PROCEDIMENTO_CONSULTA => ['visivel' => true],
Coluna::DATA_DA_SOLICITACAO => ['visivel' => true],
]);
ParametrizacaoDivulgacaoAba::findOrFail(Aba::SOLICITACOES_ATENDIDAS)->colunas()->sync([
Coluna::PACIENTE => ['visivel' => true],
Coluna::CNS => ['visivel' => true],
Coluna::CPF => ['visivel' => true],
Coluna::PRIORIDADE => ['visivel' => true],
Coluna::TIPO_DE_SOLICITACAO => ['visivel' => true],
Coluna::TEMPO_MEDIO_PREVISTO_PARA_ATENDIMENTO => ['visivel' => false],
Coluna::TEMPO_DE_ESPERA => ['visivel' => true],
Coluna::DATA_DA_MOVIMENTACAO => ['visivel' => true],
Coluna::STATUS => ['visivel' => true],
Coluna::DATA_DO_ATENDIMENTO => ['visivel' => true],
Coluna::CLASSIFICACAO => ['visivel' => true],
Coluna::PROCEDIMENTO_CONSULTA => ['visivel' => true],
Coluna::DATA_DA_SOLICITACAO => ['visivel' => true],
]);
}
}

View File

@@ -0,0 +1,27 @@
<?php
use App\Enums\Regulacao\ParametrizacaoDivulgacaoAba as Aba;
use App\Enums\Regulacao\StatusTipo;
use App\Models\Regulacao\ParametrizacaoDivulgacaoAba;
use Illuminate\Database\Seeder;
class ParametrizacaoDivulgacaoAbaStatusTipo_20260331135750 extends Seeder
{
public function run()
{
ParametrizacaoDivulgacaoAba::findOrFail(Aba::SOLICITACOES_EM_ESPERA)->statusTipos()->sync([
StatusTipo::SOLICITADO => ['visivel' => true],
StatusTipo::EM_ESPERA => ['visivel' => true],
StatusTipo::REENVIADA => ['visivel' => true],
StatusTipo::REMARCAR => ['visivel' => true],
StatusTipo::DEVOLVIDO => ['visivel' => true],
]);
ParametrizacaoDivulgacaoAba::findOrFail(Aba::SOLICITACOES_ATENDIDAS)->statusTipos()->sync([
StatusTipo::AGENDADO => ['visivel' => true],
StatusTipo::FALTA => ['visivel' => true],
StatusTipo::REAGENDADO => ['visivel' => true],
StatusTipo::CANCELADO => ['visivel' => true],
]);
}
}

View File

@@ -0,0 +1,18 @@
<?php
use App\Enums\Regulacao\ParametrizacaoDivulgacaoModoTempoMedio as Enum;
use App\Models\Regulacao\ParametrizacaoDivulgacaoModoTempoMedio;
use Illuminate\Database\Seeder;
class ParametrizacaoDivulgacaoModoTempoMedio_20260331174132 extends Seeder
{
public function run()
{
$modos = [
['id' => Enum::MANUAL, 'nome' => 'Manual'],
['id' => Enum::AUTOMATICO, 'nome' => 'Automático'],
];
\SeederUtil::saveList(ParametrizacaoDivulgacaoModoTempoMedio::class, $modos, 'id');
}
}

View File

@@ -0,0 +1,17 @@
<?php
use App\Enums\Regulacao\ParametrizacaoDivulgacaoColuna as Enum;
use App\Models\Regulacao\ParametrizacaoDivulgacaoColuna;
use Illuminate\Database\Seeder;
class ParametrizacaoDivulgacaoColuna_20260401165053 extends Seeder
{
public function run()
{
$colunas = [
['id' => Enum::OBSERVACAO, 'nome' => 'Observação'],
];
\SeederUtil::saveList(ParametrizacaoDivulgacaoColuna::class, $colunas, 'id');
}
}

View File

@@ -0,0 +1,21 @@
<?php
use App\Enums\Regulacao\ParametrizacaoDivulgacaoAba as Aba;
use App\Enums\Regulacao\ParametrizacaoDivulgacaoColuna as Coluna;
use App\Models\Regulacao\ParametrizacaoDivulgacaoAba;
use Illuminate\Database\Seeder;
class ParametrizacaoDivulgacaoAbaColuna_20260401165104 extends Seeder
{
public function run()
{
ParametrizacaoDivulgacaoAba::findOrFail(Aba::SOLICITACOES_EM_ESPERA)->colunas()->attach([
Coluna::OBSERVACAO => ['visivel' => true],
]);
ParametrizacaoDivulgacaoAba::findOrFail(Aba::SOLICITACOES_ATENDIDAS)->colunas()->attach([
Coluna::OBSERVACAO => ['visivel' => true],
]);
}
}

View File

@@ -0,0 +1,16 @@
<?php
use App\Enums\Regulacao\ParametrizacaoDivulgacaoAba as Aba;
use App\Enums\Regulacao\StatusTipo;
use App\Models\Regulacao\ParametrizacaoDivulgacaoAba;
use Illuminate\Database\Seeder;
class ParametrizacaoDivulgacaoAbaStatusTipo_20260401165105 extends Seeder
{
public function run()
{
ParametrizacaoDivulgacaoAba::findOrFail(Aba::SOLICITACOES_ATENDIDAS)->statusTipos()->attach([
StatusTipo::REALIZADO => ['visivel' => true],
]);
}
}

View File

@@ -0,0 +1,104 @@
<?php
use App\Enums\Parametrizacao\Exame\Tipo;
use App\Enums\Regulacao\SolicitacaoPrioridade as SolicitacaoPrioridadeEnum;
use App\Enums\Regulacao\StatusTipo;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class UpdateSolicitacaoPosicoes_20260406084053 extends Seeder
{
public function run()
{
DB::transaction(function () {
DB::table('regulacao_solicitacao')->update([
'posicao_municipal' => null,
'posicao_regulador' => null,
]);
$solicitacoes = DB::table('regulacao_solicitacao AS solicitacao')
->join('regulacao_status AS status', 'status.id', 'solicitacao.status_id')
->whereNotIn('status.tipo_id', [
StatusTipo::FALTA,
StatusTipo::REALIZADO,
StatusTipo::CANCELADO,
])
->select(
'solicitacao.id',
'solicitacao.regulador_id',
'solicitacao.prioridade_id',
DB::raw("(
SELECT CONCAT(
CASE
WHEN item.exame_id IS NOT NULL THEN 'exame'
WHEN item.procedimento_cirurgico_id IS NOT NULL THEN 'proc'
WHEN item.especialidade_id IS NOT NULL THEN 'esp'
END,
':',
CASE
WHEN item.exame_id IS NOT NULL THEN
IF(exame.tipo_id = " . Tipo::LABORATORIAL . ", 'LAB', item.exame_id)
WHEN item.procedimento_cirurgico_id IS NOT NULL THEN item.procedimento_cirurgico_id
WHEN item.especialidade_id IS NOT NULL THEN item.especialidade_id
END
)
FROM regulacao_solicitacao_item AS item
LEFT JOIN parametrizacao_exame AS exame ON exame.id = item.exame_id
WHERE item.solicitacao_id = solicitacao.id
LIMIT 1
) AS origem_key")
)
->orderByRaw("
FIELD(solicitacao.prioridade_id, ?, ?, ?, ?),
solicitacao.data,
solicitacao.numero
", [
SolicitacaoPrioridadeEnum::EMERGENCIA,
SolicitacaoPrioridadeEnum::URGENCIA,
SolicitacaoPrioridadeEnum::PRIORITARIO,
SolicitacaoPrioridadeEnum::ELETIVO,
])
->get();
$municipalCounters = [];
$reguladorCounters = [];
$updates = [];
foreach ($solicitacoes as $sol) {
$key = $sol->origem_key;
$rKey = $key . ':' . $sol->regulador_id;
$municipalCounters[$key] = ($municipalCounters[$key] ?? 0) + 1;
$reguladorCounters[$rKey] = ($reguladorCounters[$rKey] ?? 0) + 1;
$updates[(int) $sol->id] = [
'm' => $municipalCounters[$key],
'r' => $reguladorCounters[$rKey],
];
}
unset($solicitacoes);
foreach (array_chunk($updates, 1000, true) as $chunk) {
$caseMunicipal = '';
$caseRegulador = '';
$ids = [];
foreach ($chunk as $id => $pos) {
$ids[] = $id;
$caseMunicipal .= "WHEN {$id} THEN {$pos['m']} ";
$caseRegulador .= "WHEN {$id} THEN {$pos['r']} ";
}
$idList = implode(',', $ids);
DB::statement("
UPDATE regulacao_solicitacao
SET posicao_municipal = CASE id {$caseMunicipal} END,
posicao_regulador = CASE id {$caseRegulador} END
WHERE id IN ({$idList})
");
}
});
}
}

View File

@@ -0,0 +1,94 @@
<?php
use App\Enums\Parametrizacao\Exame\Tipo;
use App\Enums\Regulacao\SolicitacaoPrioridade as SolicitacaoPrioridadeEnum;
use App\Enums\Regulacao\StatusTipo;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class UpdateSolicitacaoPosicaoPortal_20260406084054 extends Seeder
{
public function run()
{
DB::transaction(function () {
DB::table('regulacao_solicitacao')->update([
'posicao_portal' => null,
]);
$solicitacoes = DB::table('regulacao_solicitacao AS solicitacao')
->join('regulacao_status AS status', 'status.id', 'solicitacao.status_id')
->whereNotIn('status.tipo_id', [
StatusTipo::AGENDADO,
StatusTipo::REAGENDADO,
StatusTipo::FALTA,
StatusTipo::REALIZADO,
StatusTipo::CANCELADO,
])
->select(
'solicitacao.id',
DB::raw("(
SELECT CONCAT(
CASE
WHEN item.exame_id IS NOT NULL THEN 'exame'
WHEN item.procedimento_cirurgico_id IS NOT NULL THEN 'proc'
WHEN item.especialidade_id IS NOT NULL THEN 'esp'
END,
':',
CASE
WHEN item.exame_id IS NOT NULL THEN
IF(exame.tipo_id = " . Tipo::LABORATORIAL . ", 'LAB', item.exame_id)
WHEN item.procedimento_cirurgico_id IS NOT NULL THEN item.procedimento_cirurgico_id
WHEN item.especialidade_id IS NOT NULL THEN item.especialidade_id
END
)
FROM regulacao_solicitacao_item AS item
LEFT JOIN parametrizacao_exame AS exame ON exame.id = item.exame_id
WHERE item.solicitacao_id = solicitacao.id
LIMIT 1
) AS origem_key")
)
->orderByRaw("
FIELD(solicitacao.prioridade_id, ?, ?, ?, ?),
solicitacao.data,
solicitacao.numero
", [
SolicitacaoPrioridadeEnum::EMERGENCIA,
SolicitacaoPrioridadeEnum::URGENCIA,
SolicitacaoPrioridadeEnum::PRIORITARIO,
SolicitacaoPrioridadeEnum::ELETIVO,
])
->get();
$portalCounters = [];
$updates = [];
foreach ($solicitacoes as $sol) {
$key = $sol->origem_key;
$portalCounters[$key] = ($portalCounters[$key] ?? 0) + 1;
$updates[(int) $sol->id] = $portalCounters[$key];
}
unset($solicitacoes);
foreach (array_chunk($updates, 1000, true) as $chunk) {
$casePortal = '';
$ids = [];
foreach ($chunk as $id => $pos) {
$ids[] = $id;
$casePortal .= "WHEN {$id} THEN {$pos} ";
}
$idList = implode(',', $ids);
DB::statement("
UPDATE regulacao_solicitacao
SET posicao_portal = CASE id {$casePortal} END
WHERE id IN ({$idList})
");
}
});
}
}