RELATÓRIO DE RASTREABILIDADE DE LOTE (RECALL)

Gerado em: {{ \Carbon\Carbon::now()->format('d/m/Y H:i:s') }}

ISO 9001:2015 - Requisito de Rastreabilidade | Cadeia Completa Montante e Jusante

@if($lote->status == 'BLOQUEADO')
⚠ LOTE BLOQUEADO
Motivo: {{ $lote->motivo_bloqueio ?? 'Não especificado' }}
@endif

RESUMO DO LOTE

Código do Lote: {{ $rastreabilidade['resumo']['codigo_lote'] }}
Produto: {{ $rastreabilidade['resumo']['produto'] }}
Status: @if($rastreabilidade['resumo']['status'] == 'DISPONIVEL') Disponível @elseif($rastreabilidade['resumo']['status'] == 'BLOQUEADO') Bloqueado @elseif($rastreabilidade['resumo']['status'] == 'QUARENTENA') Quarentena @else {{ $rastreabilidade['resumo']['status'] }} @endif
Data de Validade: @if($rastreabilidade['resumo']['data_validade']) {{ \Carbon\Carbon::parse($rastreabilidade['resumo']['data_validade'])->format('d/m/Y') }} @if($rastreabilidade['resumo']['vencido']) VENCIDO @elseif($rastreabilidade['resumo']['dias_para_vencer'] <= 30) {{ $rastreabilidade['resumo']['dias_para_vencer'] }} dias @endif @else Indeterminado @endif

{{ number_format($rastreabilidade['resumo']['quantidade_inicial'], 2, ',', '.') }}

Qtd. Inicial

{{ number_format($rastreabilidade['resumo']['quantidade_atual'], 2, ',', '.') }}

Qtd. Atual

{{ number_format($rastreabilidade['jusante']['quantidade_consumida'], 2, ',', '.') }}

Qtd. Consumida

{{ number_format($rastreabilidade['jusante']['quantidade_disponivel'], 2, ',', '.') }}

Qtd. Disponível

↑ RASTREABILIDADE MONTANTE (ORIGEM)

Fornecedor
@if($rastreabilidade['montante']['fornecedor'])
Razão Social: {{ $rastreabilidade['montante']['fornecedor']->razao_social }}
CNPJ: {{ $rastreabilidade['montante']['fornecedor']->cnpj }}
@else Produção própria ou entrada manual @endif
Compra
@if($rastreabilidade['montante']['compra'])
Número Pedido: {{ $rastreabilidade['montante']['compra']->numero_pedido ?? '-' }}
Nota Fiscal: {{ $rastreabilidade['montante']['compra']->numero_nota_fiscal ?? '-' }}
Data Compra: {{ \Carbon\Carbon::parse($rastreabilidade['montante']['compra']->data_compra)->format('d/m/Y') }}
@else Entrada manual sem compra vinculada @endif
Data de Entrada: {{ \Carbon\Carbon::parse($rastreabilidade['montante']['data_entrada'])->format('d/m/Y') }}
Data de Fabricação: @if($rastreabilidade['montante']['data_fabricacao']) {{ \Carbon\Carbon::parse($rastreabilidade['montante']['data_fabricacao'])->format('d/m/Y') }} @else Não informada @endif
Certificado: {{ $rastreabilidade['montante']['numero_certificado'] ?? 'Não informado' }}

↓ RASTREABILIDADE JUSANTE (DESTINO/USO)

@if($rastreabilidade['jusante']['ordens_producao']->count() > 0)
Ordens de Produção que Consumiram este Lote
@foreach($rastreabilidade['jusante']['ordens_producao'] as $opLote) @endforeach
Número OP Produto Fabricado Cliente Qtd. Consumida Data Consumo
OP #{{ $opLote->ordemProducao->numero_ordem }} @if($opLote->ordemProducao->itens->first()) {{ $opLote->ordemProducao->itens->first()->produto->nome }} @else - @endif @if($opLote->ordemProducao->orcamento) {{ $opLote->ordemProducao->orcamento->cliente->razao_social ?? 'Cliente não informado' }} @else Produção interna @endif {{ number_format($opLote->quantidade_consumida, 2, ',', '.') }} {{ $opLote->created_at->format('d/m/Y H:i') }}
TOTAL CONSUMIDO: {{ number_format($rastreabilidade['jusante']['quantidade_consumida'], 2, ',', '.') }}
@else
Informação: Este lote ainda não foi consumido em nenhuma ordem de produção.
@endif @if($rastreabilidade['jusante']['movimentacoes']->count() > 0)
Histórico de Movimentações
@foreach($rastreabilidade['jusante']['movimentacoes'] as $mov) @endforeach
Data/Hora Tipo Quantidade Localização Referência
{{ $mov->data_movimentacao->format('d/m/Y H:i') }} @if($mov->tipo == 'ENTRADA') Entrada @elseif($mov->tipo == 'SAIDA') Saída @elseif($mov->tipo == 'TRANSFERENCIA') Transferência @else {{ $mov->tipo }} @endif {{ $mov->tipo == 'ENTRADA' ? '+' : '-' }}{{ number_format($mov->quantidade, 2, ',', '.') }} {{ $mov->localizacao->descricao ?? 'Não especificada' }} @if($mov->ordemProducao) OP #{{ $mov->ordemProducao->numero_ordem }} @else - @endif
@endif