@php $painel = $confrontoPainel ?? []; $pendencias = $painel['pendencias'] ?? collect(); $cadastro = $painel['cadastro_resumo'] ?? []; $grupo = $painel['grupo_resumo'] ?? []; $semCadastro = $painel['sem_cadastro'] ?? []; $unidadesDiv = $painel['unidades_divergentes'] ?? []; $ncmSemPreencher = $painel['ncm_sem_preencher'] ?? []; $ncmCorrecoes = $painel['ncm_correcoes'] ?? []; $porRegra = $painel['pendencias_por_regra'] ?? collect(); $pront = $painel['prontidao'] ?? ($prontidao ?? null); $regraLabels = \App\Services\ConfrontoRegrasCatalog::labels(); $fmtNcm = function (?string $ncm) { $d = preg_replace('/\D/', '', (string) $ncm); if (strlen($d) === 8) { return substr($d, 0, 4) . '.' . substr($d, 4, 2) . '.' . substr($d, 6, 2); } return $ncm ?: '—'; }; @endphp @include('admin.simulacoes._confronto_fluxo', [ 'sim' => $sim, 'pendencias' => $pendencias, 'fluxoPosImport' => $fluxoPosImport ?? false, 'dashboardUrl' => $dashboardUrl ?? null, ])

Confronto Produto / Cadastro

Identifique o que impede simular, corrija cadastros e acompanhe a prontidão desta análise.

@csrf
@if($sim->idpessoa) Painel global @endif
@if($pront)
Prontidão para simular: @include('components.prontidao-badge', ['prontidao' => $pront]) {{ $pront->pendencias_bloqueantes }} bloqueante(s) · {{ $pront->pendencias_ressalva }} ressalva(s)
@if(($pront->criterios_json['pct_vinculado'] ?? null) !== null) @endif
@endif
Cadastro SPED × interno
{{ $cadastro['pct_vinculado'] ?? 0 }}%
{{ $cadastro['com_cadastro'] ?? 0 }} de {{ $cadastro['total_sped'] ?? 0 }} códigos vinculados @if(($cadastro['sem_cadastro'] ?? 0) > 0) · {{ $cadastro['sem_cadastro'] }} pendente(s) @endif
Grupos de-para
@if(($grupo['total'] ?? 0) > 0) {{ round(100 * ($grupo['com_grupo'] ?? 0) / max(1, $grupo['total']), 0) }}% @else — @endif
{{ $grupo['com_grupo'] ?? 0 }} com grupo · {{ $grupo['sem_grupo'] ?? 0 }} sem grupo @if(($grupo['sem_grupo'] ?? 0) > 0) · Configurar de-para @endif
Pendências abertas
{{ $pendencias->count() }}
@forelse($porRegra->take(3) as $cod => $qtd) {{ $regraLabels[$cod] ?? $cod }} ({{ $qtd }})@if(!$loop->last), @endif @empty Nenhuma pendência ativa @endforelse
Backlog de pendências
{{ $pendencias->count() }} ativa(s)
@include('admin.pendencias._tabela', [ 'pendencias' => $pendencias, 'sim' => $sim, 'hideCliente' => true, 'contextoSimulacao' => true, ])
@if(count($ncmSemPreencher) > 0 || count($ncmCorrecoes) > 0) @push('css') @endpush
Correção interna de NCM

Marque os produtos, informe o NCM e clique em Aplicar — ou digite/cole o NCM direto na linha (salva automaticamente). Quando terminar, clique em Recalcular confronto no topo para atualizar simulações e projeções. A correção vale para todo o cliente (todas as simulações, meses e projeções 2026–2033) — o arquivo SPED original não é alterado.

@if(count($ncmSemPreencher) > 0)
@csrf
@foreach($ncmSemPreencher as $item) @endforeach
Sel. Código SPED Descrição Reg. Valor total Volume total Preço médio unit. NCM *
{{ $item['cod_item'] }} {{ Str::limit($item['descr_item'] ?? '', 50) }} {{ $item['reg'] ?? '—' }} R$ {{ number_format((float) ($item['valor_total'] ?? 0), 2, ',', '.') }} @if(!empty($item['volume_total'])) {{ number_format((float) $item['volume_total'], 2, ',', '.') }} {{ $item['unidade'] ?? '' }} @else @endif @if(!empty($item['preco_medio'])) R$ {{ number_format((float) $item['preco_medio'], 2, ',', '.') }} @else @endif
@else

Nenhum produto pendente de NCM.

@endif @if(count($ncmCorrecoes) > 0)
Correções salvas para este cliente
@foreach($ncmCorrecoes as $c) @endforeach
Código Descrição NCM Observação
{{ $c['cod_item'] }} {{ Str::limit($c['descr_item'] ?? '', 50) }} {{ $fmtNcm($c['ncm'] ?? '') }} {{ Str::limit($c['observacao'] ?? '', 40) }}
@csrf
@endif
@endif @if(count($semCadastro) > 0)
Vincular produtos SPED ao cadastro

Itens do SPED sem código vinculado no cadastro interno do cliente.

@foreach($semCadastro as $item) @endforeach
Código SPED Descrição NCM Ação
{{ $item['cod_item'] }} {{ Str::limit($item['descr_item'] ?? '', 60) }} {{ $item['ncm'] ?? '—' }} @if(!empty($item['sugestao']))
@csrf
@endif
@csrf
@endif @if(count($unidadesDiv) > 0) @php $unidadesDivValorTotal = array_sum(array_column($unidadesDiv, 'valor_total')); $unidadesDivPendentes = collect($unidadesDiv)->filter(fn ($u) => empty($u['conversoes']))->count(); @endphp
Conversões de unidade

No SPED o campo unid pode trazer sigla de medida (KG, UN, BAG, SC…) ou código de apresentação/embalagem (50M, 200K, SC40). Escolha a unidade padrão (sempre uma sigla) e converta cada código do SPED para ela: 1 KG = 50 × 50M — ou seja, 1 unidade padrão = quantas da outra.

Produtos com unidade divergente
{{ count($unidadesDiv) }}
{{ $unidadesDivPendentes }} sem conversão cadastrada
Valor movimentado (todos)
R$ {{ number_format($unidadesDivValorTotal, 2, ',', '.') }}
Soma das linhas SPED destes códigos
O que fazer

1. Veja siglas e códigos de apresentação usados no SPED.
2. Defina a unidade padrão (sigla: KG, UN, BAG…).
3. Para cada outro código, informe: 1 padrão = ? outro (ex.: 1 KG = 50 × 50M).

@foreach($unidadesDiv as $ud) @php $metricas = $ud['metricas_unidade'] ?? []; $unidadesLista = $ud['unidades'] ?? []; $siglasLista = $ud['siglas_disponiveis'] ?? ['UN', 'KG']; $padrao = $ud['unidade_padrao'] ?? ($siglasLista[0] ?? 'UN'); $convMap = $ud['conversoes_por_origem'] ?? []; $metricasPorUnid = collect($metricas)->keyBy(fn ($m) => strtoupper($m['unid'])); @endphp
{{ $ud['cod_item'] }}
{{ $ud['descr_item'] ?? '—' }}
Valor total no SPED
R$ {{ number_format((float) ($ud['valor_total'] ?? 0), 2, ',', '.') }}
Códigos no SPED (sigla × apresentação)
@if(!empty($ud['unid_inv']))
Unidade de inventário no cadastro 0200: {{ $ud['unid_inv'] }}
@endif
@foreach($metricas as $mu) @php $ehSigla = ($mu['tipo'] ?? '') === 'sigla'; @endphp @endforeach
Sigla Cód. SPED Volume Valor Preço médio
@if($ehSigla) {{ strtoupper($mu['unid']) }} @else @endif @if($ehSigla) {{ $mu['unid'] }} @else {{ $mu['unid'] }} apresentação @endif @if(!empty($mu['volume'])) {{ number_format((float) $mu['volume'], 2, ',', '.') }} @else — @endif R$ {{ number_format((float) ($mu['valor'] ?? 0), 2, ',', '.') }} @if(!empty($mu['preco_medio'])) R$ {{ number_format((float) $mu['preco_medio'], 2, ',', '.') }} @else — @endif
Sigla única (UN, KG, BAG, SC…) para consolidar volumes e simulações.
@if(!empty($ud['conversoes']))
@foreach($ud['conversoes'] as $c) 1 {{ $c['para'] }} = {{ rtrim(rtrim(number_format((float) $c['fator'], 4, ',', '.'), '0'), ',') }} {{ $c['de'] }} @endforeach
@endif
@foreach($unidadesLista as $un) @php $mu = $metricasPorUnid->get(strtoupper($un)); $mPad = $metricasPorUnid->get(strtoupper($padrao)); $fatorVal = $convMap[strtoupper($un)] ?? null; if ($fatorVal === null && $mu && $mPad && strtoupper($un) !== strtoupper($padrao) && ($mPad['volume'] ?? 0) > 0 && ($mu['volume'] ?? 0) > 0) { $fatorVal = round($mu['volume'] / $mPad['volume'], 4); } $ehPadrao = strtoupper($un) === strtoupper($padrao); $ehApresentacao = ($mu['tipo'] ?? '') === 'apresentacao'; @endphp
@csrf 1 {{ strtoupper($padrao) }} = {{ $un }} @if($ehApresentacao) apresentação @endif @if($mu && $mPad && ($mPad['volume'] ?? 0) > 0 && ($mu['volume'] ?? 0) > 0) SPED: {{ number_format((float) $mu['volume'], 0, ',', '.') }} ÷ {{ number_format((float) $mPad['volume'], 0, ',', '.') }} @endif
@endforeach
@endforeach
@endif
Como usar este painel
@include('admin.simulacoes._ncm_mask') @push('js') @endpush