This commit is contained in:
19
api/database/seeders/regulacao/2024_07_22_161139_tipo.php
Normal file
19
api/database/seeders/regulacao/2024_07_22_161139_tipo.php
Normal 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');
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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],
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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],
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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],
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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],
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -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})
|
||||
");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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})
|
||||
");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user