@php use App\Support\ConfrontoSubetapa; $etapa = (int) ($etapaVisivel ?? 1); $steps = $mvpProgress['steps'] ?? []; $stepAtual = collect($steps)->firstWhere('numero', $etapa) ?? []; $prevUrl = $etapa > 1 ? (collect($steps)->firstWhere('numero', $etapa - 1)['url'] ?? null) : null; $nextUrl = $etapa < 5 ? (collect($steps)->firstWhere('numero', $etapa + 1)['url'] ?? null) : null; $confrontoSub = null; $prevSub = null; $nextSub = null; $nextBloqueado = false; $nextBloqueioMsg = null; $secao = null; if ($etapa === 2 && isset($sim)) { $painel = $confrontoPainel ?? []; $secao = ConfrontoSubetapa::normalizar(request('confronto')); $confrontoSub = ConfrontoSubetapa::info($secao); $prevSecao = ConfrontoSubetapa::secaoAnterior($secao); $nextSecao = ConfrontoSubetapa::secaoProxima($secao); $prevSub = $prevSecao ? ConfrontoSubetapa::info($prevSecao) : null; $nextSub = $nextSecao ? ConfrontoSubetapa::info($nextSecao) : null; $prevUrl = $prevSecao ? ConfrontoSubetapa::url($sim->idsimulacao, $prevSecao) : (collect($steps)->firstWhere('numero', 1)['url'] ?? $prevUrl); if ($nextSecao) { $nextUrl = ConfrontoSubetapa::url($sim->idsimulacao, $nextSecao); // Visão geral sempre pode ir para 2.2; demais só após concluir a atual. if ($secao !== 'resumo' && !ConfrontoSubetapa::podeAvancarDe($secao, $painel)) { $nextBloqueado = true; $nextBloqueioMsg = 'Conclua a etapa ' . $confrontoSub['rotulo'] . ' (' . $confrontoSub['titulo'] . ') antes de avançar para ' . $nextSub['rotulo'] . '.'; } elseif ($secao === 'classtrib') { $qtdSemMatch = (int) ($painel['classtrib_painel']['qtd_pendentes'] ?? 0); if ($qtdSemMatch > 0) { $nextBloqueioMsg = $qtdSemMatch . ' produto(s) sem cClassTrib automático — opcional. Pode avançar.'; } } } elseif (!ConfrontoSubetapa::conferenciaConcluida($painel)) { $pend = ConfrontoSubetapa::primeiraPendente($painel); $nextSub = ConfrontoSubetapa::info($pend); $nextUrl = ConfrontoSubetapa::url($sim->idsimulacao, $pend); $nextBloqueado = true; $nextBloqueioMsg = 'Ainda falta concluir ' . $nextSub['rotulo'] . ' (' . $nextSub['titulo'] . '). ' . 'Ordem obrigatória: 2.2 → 2.3 → 2.4.'; } else { $nextUrl = collect($steps)->firstWhere('numero', 3)['url'] ?? $nextUrl; } } elseif ($etapa === 3) { // Após salvar parâmetros, sempre libera ir à simulação (etapa 4). $nextUrl = collect($steps)->firstWhere('numero', 4)['url'] ?? $nextUrl; $nextBloqueado = false; $nextBloqueioMsg = null; } $dentroConfronto = $etapa === 2 && str_contains((string) $nextUrl, 'confronto='); $dentroConfrontoPrev = $etapa === 2 && str_contains((string) $prevUrl, 'confronto='); $nextLabel = $dentroConfronto && $nextSub ? 'Próxima: ' . $nextSub['rotulo'] . ' ' . $nextSub['titulo'] : ($dentroConfronto ? 'Próxima tarefa' : 'Próxima etapa'); $prevLabel = $dentroConfrontoPrev && $prevSub ? 'Anterior: ' . $prevSub['rotulo'] . ' ' . $prevSub['titulo'] : ($dentroConfrontoPrev ? 'Tarefa anterior' : 'Etapa anterior'); @endphp