@php $grupos = $grupos ?? []; $totalPendentes = count($pendentes ?? []); $gruposSemAcao = collect($grupos)->filter(fn ($g) => empty($g['opcoes']))->values(); $qtdSemAuto = $gruposSemAcao->sum('qtd'); $produtosFila = collect($pendentes ?? []) ->filter(fn ($p) => ($p['qtd_opcoes'] ?? 0) > 0) ->sortBy([ fn ($p) => ($p['status'] ?? '') === 'ambiguo' ? 0 : 1, fn ($p) => -1 * (float) ($p['valor_operacao'] ?? 0), fn ($p) => $p['rotulo_produto'] ?? $p['cod_item'], ]) ->values(); $qtdEscolha = $produtosFila->where('status', 'ambiguo')->count(); $qtdConfirmar = $produtosFila->where('status', 'sugerido')->count(); $gruposLote = collect($grupos) ->filter(fn ($g) => !empty($g['opcoes']) && ($g['qtd'] ?? 0) > 1) ->values(); $cstAtivo = preg_replace('/\D/', '', (string) request('cst', '')); if ($cstAtivo !== '') { $cstAtivo = str_pad($cstAtivo, 3, '0', STR_PAD_LEFT); } // Mantém o CST da URL após salvar; se o grupo já acabou, limpa a seleção. if ($cstAtivo !== '' && $gruposSemAcao->isNotEmpty()) { $cstExiste = $gruposSemAcao->contains(fn ($g) => (string) ($g['cst'] ?? '') === $cstAtivo); if (!$cstExiste) { $cstAtivo = ''; } } elseif ($cstAtivo !== '' && $gruposSemAcao->isEmpty()) { $cstAtivo = ''; } $fmtNcm = fn (?string $ncm) => ($d = preg_replace('/\D/', '', (string) $ncm)) && strlen($d) === 8 ? substr($d, 0, 4) . '.' . substr($d, 4, 2) . '.' . substr($d, 6, 2) : ($ncm ?: '—'); $statusLabel = fn (array $p) => match ($p['status'] ?? '') { 'ambiguo' => ['Escolher', 'warning', 'Várias opções — você decide'], 'sugerido' => ['Confirmar', 'success', 'Só 1 opção na tabela SVRS'], default => ['Classificar', 'secondary', 'Pendente'], }; @endphp @if($totalPendentes > 0 || count($definidos ?? []) > 0 || ($tabelaVazia ?? false)) @include('admin.simulacoes._etapa_guia', [ 'titulo' => 'Como funciona', 'intro' => 'O CST do SPED (ICMS) muitas vezes não existe na tabela SVRS da reforma. ' . 'Clique em um CST abaixo para ver os produtos e classifique buscando o cClassTrib na tabela oficial.', 'passos' => [ 'Clique no CST que quer analisar (090, 051, 040… — todos aparecem).', 'Abra o produto (ou use lote) e busque o cClassTrib pelo código ou nome.', 'Salvar vale para o cadastro do cliente — não altera o arquivo SPED.', ], ]) @if($qtdEscolha > 0)
{{ $qtdEscolha }} produto(s) na fila · {{ $qtdConfirmar }} com confirmação rápida (1 opção)
@elseif($produtosFila->isEmpty() && $qtdSemAuto > 0)
Etapa 2.3 liberada. Restam {{ $qtdSemAuto }} produto(s) em CST do SPED sem match automático na SVRS (ex.: 051, 090). Classificar é opcional — a simulação usa alíquota padrão neles.
Ir para 2.4 Cadastro
@endif
Produtos para classificar

Um produto por linha — classifique na ordem que preferir.

@if($produtosFila->isNotEmpty()) {{ $produtosFila->count() }} na fila @endif
@if($tabelaVazia ?? false)
{{ $alerta ?? 'Tabela cClassTrib não carregada.' }}
@elseif($produtosFila->isNotEmpty())
@foreach($produtosFila as $i => $item) @php [$btnLabel, $btnCor, $sitTxt] = $statusLabel($item); @endphp @endforeach
# Produto Cód. NCM CST Valor SPED Situação Ação
{{ $i + 1 }} {{ $item['rotulo_produto'] ?? $item['descr_item'] ?? ('Código ' . $item['cod_item']) }} {{ $item['cod_item'] }} {{ $fmtNcm($item['ncm'] ?? null) }} {{ $item['cst'] ? 'CST ' . $item['cst'] : '—' }} @if(($item['valor_operacao'] ?? 0) > 0) R$ {{ number_format($item['valor_operacao'], 2, ',', '.') }} @else @endif {{ $sitTxt }} @if(($item['qtd_opcoes'] ?? 0) > 1) {{ $item['qtd_opcoes'] }} opções @endif @if(($item['qtd_opcoes'] ?? 0) === 1) @else @endif
@if($gruposLote->isNotEmpty())

Opcional. Só use se tiver certeza de que todos os produtos do grupo recebem a mesma classificação.

@foreach($gruposLote as $grupo) @php $qtdOpcoes = count($grupo['opcoes'] ?? []); @endphp
{{ $grupo['cst_label'] }} {{ $grupo['qtd'] }} produtos @if($qtdOpcoes === 1) @else @endif
@endforeach
@endif @elseif($totalPendentes === 0)

Todos os produtos classificados.

@elseif($gruposSemAcao->isEmpty())

Nenhum produto com opção automática na tabela SVRS.

@endif @if($gruposSemAcao->isNotEmpty())
{{ $qtdSemAuto }} produtos · {{ $gruposSemAcao->count() }} CSTs do SPED

Clique no CST para ver a lista. Clique de novo no ativo ou em Limpar para fechar. O CST do SPED é de ICMS — busque o cClassTrib na tabela SVRS se quiser ajustar; não é obrigatório para avançar.

@foreach($gruposSemAcao as $grupo) @endforeach

Nenhum CST selecionado. Clique em um código acima para analisar os produtos.

@foreach($gruposSemAcao as $grupo) @php $cstKey = (string) ($grupo['cst'] ?? ''); @endphp
{{ $grupo['cst_label'] }} · {{ $grupo['qtd'] }} produtos · R$ {{ number_format($grupo['valor_total'] ?? 0, 2, ',', '.') }}
@foreach($grupo['itens'] ?? [] as $item) @endforeach
Produto Cód. NCM Valor Ação
{{ $item['rotulo_produto'] ?? $item['descr_item'] ?? '—' }} {{ $item['cod_item'] }} {{ $fmtNcm($item['ncm'] ?? null) }} @if(($item['valor_operacao'] ?? 0) > 0) R$ {{ number_format($item['valor_operacao'], 2, ',', '.') }} @else — @endif
@endforeach @endif @if(count($definidos ?? []) > 0)
@foreach(array_slice($definidos, 0, 50) as $item) @endforeach
ProdutoCód.CSTcClassTrib
{{ $item['rotulo_produto'] ?? $item['descr_item'] ?? '—' }} {{ $item['cod_item'] }} {{ $item['cst'] ?: '—' }} {{ $item['c_class_trib'] ?? '—' }}
@endif
@push('css') @endpush @push('js') @endpush @endif