@include('inventory::reports.partials.styles')
Stock Valuation Expiry Forecast ABC Analysis Dead Stock Reorder Stock Aging

Expiry Forecast Report

Track batch expiry dates and prevent inventory losses

Expired
{{ $stats['expired_count'] }}
Critical (0-7 days)
{{ $stats['critical_count'] }}
Warning (8-30 days)
{{ $stats['warning_count'] }}
Upcoming (31-90 days)
{{ $stats['upcoming_count'] }}
Safe (90+ days)
{{ $stats['safe_count'] }}
@if($stats['expired_value'] > 0 || $stats['at_risk_value'] > 0)
⚠️ Value at Risk: ₹{{ number_format($stats['expired_value'], 0) }} expired + ₹{{ number_format($stats['at_risk_value'], 0) }} expiring within 30 days = ₹{{ number_format($stats['expired_value'] + $stats['at_risk_value'], 0) }}
@endif
Reset
All Lots by Expiry Status
@php $allLots = array_merge($expired, $critical, $warning, $upcoming, array_slice($safe, 0, 10)); @endphp @if(count($allLots) > 0)
@foreach($allLots as $i => $lot) @endforeach
# Lot / Batch Product Warehouse Qty Value Expiry Date Days Left Status
{{ $i + 1 }} {{ $lot->lot_no }}{{ $lot->batch_no ? ' / '.$lot->batch_no : '' }}
{{ $lot->product_name }}
{{ $lot->warehouse }} {{ number_format($lot->qty, 2) }} {{ $lot->unit_name }} ₹{{ number_format($lot->value, 0) }} {{ $lot->expiry_date ?? 'N/A' }} @if($lot->expiry_status == 'expired') {{ abs($lot->days_to_expiry) }}d ago @elseif($lot->days_to_expiry) {{ $lot->days_to_expiry }}d @else - @endif {{ ucfirst($lot->expiry_status) }}
@if(count($safe) > 10)
+ {{ count($safe) - 10 }} more safe lots not shown
@endif @else
📭

No batch-managed products found

@endif