@php
$dc = $relatorio['debito_credito'] ?? ['debito_valor'=>0,'debito_linhas'=>0,'credito_valor'=>0,'credito_linhas'=>0];
$dcSemanal = $relatorio['debito_credito_semanal'] ?? [];
$porCfop = $relatorio['por_cfop'] ?? collect();
$porNatOper = $relatorio['por_nat_oper'] ?? collect();
$chartCfop = $porCfop->map(fn($c) => ['label' => $c->cfop, 'valor' => (float)($c->soma_valor_item ?? 0)])->values();
$filtroAtivo = !empty($filtro_card_tipo) && (string)$filtro_card_valor !== '';
$tituloFiltro = '';
if ($filtroAtivo) {
if ($filtro_card_tipo === 'receita') {
$card = collect($receitasCards ?? [])->firstWhere('key', $filtro_card_valor);
$tituloFiltro = $card['label'] ?? $filtro_card_valor;
} elseif ($filtro_card_tipo === 'credito') {
$card = collect($creditosCards ?? [])->firstWhere('key', $filtro_card_valor);
$tituloFiltro = $card['label'] ?? $filtro_card_valor;
} else {
$tituloFiltro = ($filtro_card_tipo === 'cfop' ? 'CFOP ' : ($filtro_card_tipo === 'nat_oper' ? 'Natureza ' : ($filtro_card_tipo === 'aba' ? 'Aba ' : ''))) . $filtro_card_valor;
}
}
$somaReceitasCards = collect($receitasCards ?? [])->sum('valor');
$somaCreditosCards = collect($creditosCards ?? [])->sum('valor');
@endphp
{{-- Função global para fechar o modal (compatível com Livewire 2 e 3) --}}
{{-- Dados para os gráficos em divs (Livewire atualiza o conteúdo ao filtrar; script lê e redesenha) --}}
{!! json_encode($dcSemanal) !!}
{!! json_encode($chartCfop) !!}
{{-- 1) BARRA DE FILTROS (antes de tudo) --}}
{{-- 2) Cabeçalho do import + ações --}}
Status: {{ $import->status }}
Arquivo: {{ $import->arquivo_nome }}
Recebido em: {{ optional($import->recebido_em)->format('d/m/Y H:i') }}
Exportar Excel
{{-- 3) Indicadores --}}
Indicadores
Período
{{ $import->periodo }}
Valor total itens
R$ {{ number_format($totais->soma_valor_item ?? 0, 2, ',', '.') }}
Tributos (soma)
R$ {{ number_format(($totais->soma_pis ?? 0) + ($totais->soma_cofins ?? 0) + ($totais->soma_icms ?? 0) + ($totais->soma_ipi ?? 0), 2, ',', '.') }}
PIS + COFINS + ICMS + IPI
Clientes/Fornecedores
{{ $participantes->count() }}
No Simples/MEI
{{ $participantes->whereIn('regimetributario', ['Simples Nacional', 'MEI'])->count() }}
de {{ $participantes->count() }} com regime consultado
{{-- 3b) Tributos (cada um separado) --}}
Tributos
PIS
R$ {{ number_format($totais->soma_pis ?? 0, 2, ',', '.') }}
COFINS
R$ {{ number_format($totais->soma_cofins ?? 0, 2, ',', '.') }}
ICMS
R$ {{ number_format($totais->soma_icms ?? 0, 2, ',', '.') }}
IPI
R$ {{ number_format($totais->soma_ipi ?? 0, 2, ',', '.') }}
{{-- 4) Débito e Crédito (cards + gráfico linha) --}}
Débito e Crédito
Débito = saídas (vendas/clientes). Crédito = entradas (compras/fornecedores). Regime C = saída, D/F = entrada. Os dois primeiros cards são totais do SPED (todas as linhas por ind_oper).
Débito (Saídas) — SPED
R$ {{ number_format($dc['debito_valor'] ?? 0, 2, ',', '.') }}
{{ number_format($dc['debito_linhas'] ?? 0, 0, ',', '.') }} linhas
Crédito (Entradas) — SPED
R$ {{ number_format($dc['credito_valor'] ?? 0, 2, ',', '.') }}
{{ number_format($dc['credito_linhas'] ?? 0, 0, ',', '.') }} linhas
Saldo (Débito − Crédito)
R$ {{ number_format(($dc['debito_valor'] ?? 0) - ($dc['credito_valor'] ?? 0), 2, ',', '.') }}
@if($simulacao && (count($receitasCards ?? []) > 0 || count($creditosCards ?? []) > 0))
Conferência simulação:
Soma Receitas (cards) = R$ {{ number_format($somaReceitasCards, 2, ',', '.') }} @if($somaReceitasCards != ($dc['debito_valor'] ?? 0))(dif. Débito SPED: R$ {{ number_format($somaReceitasCards - ($dc['debito_valor'] ?? 0), 2, ',', '.') }})@endif
Soma Créditos (cards) = R$ {{ number_format($somaCreditosCards, 2, ',', '.') }} @if($somaCreditosCards != ($dc['credito_valor'] ?? 0))(dif. Crédito SPED: R$ {{ number_format($somaCreditosCards - ($dc['credito_valor'] ?? 0), 2, ',', '.') }})@endif
Os cards abaixo são da simulação (podem ter sido editados). A diferença pode vir de edição manual, arredondamento ou lançamentos do SPED que não se enquadram nas categorias da simulação.
@endif
{{-- Gráfico linha (8) + Pizza CFOP (4). wire:ignore evita o Livewire substituir os canvas ao filtrar --}}
{{-- 5) Cards de Receitas e Custos/Créditos (da simulação) — clique para ver lançamentos --}}
@if($simulacao && (count($receitasCards ?? []) > 0 || count($creditosCards ?? []) > 0))
Receitas e Custos (da simulação)
Valores da tela de Receitas e Custos. Clique em um card para ver os lançamentos do SPED que compõem aquele total.
Tributos (PIS, COFINS, ICMS, IPI): o total está no indicador «Tributos (soma)» na seção Indicadores no topo — não entram nos cards de Receitas/Custos (estes são bases/valores das operações).
@if(!empty($receitasCards))
Receitas (valores em verde = receita/entrada)
@foreach($receitasCards as $card)
{{ $card['label'] }}
R$ {{ number_format($card['valor'] ?? 0, 2, ',', '.') }}
@endforeach
@endif
@if(!empty($creditosCards))
Custos / Créditos (valores em cinza = créditos fiscais/custos)
@foreach($creditosCards as $card)
{{ $card['label'] }}
R$ {{ number_format($card['valor'] ?? 0, 2, ',', '.') }}
@endforeach
@endif
@endif
{{-- Modal de lançamentos ao clicar em um card --}}
@if($filtroAtivo)
@php
// Mesma regra de valor do SpedToSimulacaoService (valor_mercadorias e bases se valor principal for 0)
$valorParaItem = function($item) {
$v = (float)($item->valor_item ?? $item->valor_total ?? $item->vl_total_prod ?? $item->valor_mercadorias ?? 0);
if ($v <= 0) {
$v = (float)(($item->base_icms ?? 0) + ($item->base_pis ?? 0) + ($item->base_cofins ?? 0));
}
return $v;
};
$totalValor = $lancamentosFiltrados->sum($valorParaItem);
$totalPis = $lancamentosFiltrados->sum(fn($item) => (float)($item->valor_pis ?? 0));
$totalCofins = $lancamentosFiltrados->sum(fn($item) => (float)($item->valor_cofins ?? 0));
$totalIcms = $lancamentosFiltrados->sum(fn($item) => (float)($item->valor_icms ?? 0));
@endphp
@endif
{{-- 6) Participantes: Clientes e Fornecedores separados --}}
@php
$participantesClientes = $participantes->where('tipo', 'cliente')->values();
$participantesFornecedores = $participantes->where('tipo', 'fornecedor')->values();
$linhaParticipante = function($p) {
$cnpjFmt = preg_match('/^\d{14}$/', $p->cnpj) ? substr($p->cnpj,0,2).'.'.substr($p->cnpj,2,3).'.'.substr($p->cnpj,5,3).'/'.substr($p->cnpj,8,4).'-'.substr($p->cnpj,12,2) : $p->cnpj;
$regimeBadge = $p->regimetributario ? '
'.e($p->regimetributario).'' : '
—';
$dataSimples = $p->data_opcao_simples ? $p->data_opcao_simples->format('d/m/Y') : '—';
return compact('cnpjFmt', 'regimeBadge', 'dataSimples');
};
@endphp
Participantes (Simples consultado)
| CNPJ | Nome | Qtd. docs | Valor total | Regime | Data opção Simples |
@forelse($participantesClientes as $p)
@php $row = $linhaParticipante($p); @endphp
| {{ $row['cnpjFmt'] }} |
{{ $p->nome ?? '—' }} |
{{ number_format($p->qtd_documentos, 0, ',', '.') }} |
R$ {{ number_format($p->valor_total ?? 0, 2, ',', '.') }} |
{!! $row['regimeBadge'] !!} |
{{ $row['dataSimples'] }} |
@empty
| Nenhum cliente identificado. |
@endforelse
| CNPJ | Nome | Qtd. docs | Valor total | Regime | Data opção Simples |
@forelse($participantesFornecedores as $p)
@php $row = $linhaParticipante($p); @endphp
| {{ $row['cnpjFmt'] }} |
{{ $p->nome ?? '—' }} |
{{ number_format($p->qtd_documentos, 0, ',', '.') }} |
R$ {{ number_format($p->valor_total ?? 0, 2, ',', '.') }} |
{!! $row['regimeBadge'] !!} |
{{ $row['dataSimples'] }} |
@empty
| Nenhum fornecedor identificado. |
@endforelse
{{-- 7) Resumo (cards) --}}
Linhas importadas
{{ number_format($totais->qtd_linhas ?? 0, 0, ',', '.') }}
Notas distintas
{{ number_format($totais->qtd_notas ?? 0, 0, ',', '.') }}
Valor dos Itens
R$ {{ number_format($totais->soma_valor_item ?? 0, 2, ',', '.') }}
Tributos
PIS/COFINS/ICMS/IPI
{{-- 8) Tabela por REG --}}
| REG | Linhas | Notas | Valor Itens | PIS | COFINS | ICMS | IPI |
@forelse($byReg as $r)
| {{ $r->reg }} |
{{ number_format($r->qtd_linhas, 0, ',', '.') }} |
{{ number_format($r->qtd_notas, 0, ',', '.') }} |
R$ {{ number_format($r->soma_valor_item, 2, ',', '.') }} |
R$ {{ number_format($r->soma_pis, 2, ',', '.') }} |
R$ {{ number_format($r->soma_cofins, 2, ',', '.') }} |
R$ {{ number_format($r->soma_icms, 2, ',', '.') }} |
R$ {{ number_format($r->soma_ipi, 2, ',', '.') }} |
@empty
| Sem dados. |
@endforelse
{{-- 9) Tabela por CFOP --}}
@if($porCfop->isNotEmpty())
| CFOP | Linhas | Notas | Valor Itens | PIS | COFINS | ICMS | IPI |
@foreach($porCfop as $c)
| {{ $c->cfop }} |
{{ number_format($c->qtd_linhas ?? 0, 0, ',', '.') }} |
{{ number_format($c->qtd_notas ?? 0, 0, ',', '.') }} |
R$ {{ number_format($c->soma_valor_item ?? 0, 2, ',', '.') }} |
R$ {{ number_format($c->soma_pis ?? 0, 2, ',', '.') }} |
R$ {{ number_format($c->soma_cofins ?? 0, 2, ',', '.') }} |
R$ {{ number_format($c->soma_icms ?? 0, 2, ',', '.') }} |
R$ {{ number_format($c->soma_ipi ?? 0, 2, ',', '.') }} |
@endforeach
@endif
{{-- 10) Tabela por NATOP --}}
@if($porNatOper->isNotEmpty())
| NATOP | Linhas | Notas | Valor Itens |
@foreach($porNatOper as $n)
| {{ $n->nat_oper }} |
{{ number_format($n->qtd_linhas ?? 0, 0, ',', '.') }} |
{{ number_format($n->qtd_notas ?? 0, 0, ',', '.') }} |
R$ {{ number_format($n->soma_valor_item ?? 0, 2, ',', '.') }} |
@endforeach
@endif
{{-- 11) Por ABA --}}
@if($byAba->isNotEmpty())
| Aba | Linhas | Notas | Valor Itens | PIS | COFINS | ICMS | IPI |
@foreach($byAba as $r)
| {{ $r->aba }} |
{{ number_format($r->qtd_linhas, 0, ',', '.') }} |
{{ number_format($r->qtd_notas, 0, ',', '.') }} |
R$ {{ number_format($r->soma_valor_item, 2, ',', '.') }} |
R$ {{ number_format($r->soma_pis, 2, ',', '.') }} |
R$ {{ number_format($r->soma_cofins, 2, ',', '.') }} |
R$ {{ number_format($r->soma_icms, 2, ',', '.') }} |
R$ {{ number_format($r->soma_ipi, 2, ',', '.') }} |
@endforeach
@endif
{{-- Gráficos: carregar Chart.js e desenhar aqui (garante que canvas e dados existem) --}}