@extends('layouts.app') @section('titulo', 'Alertas Sanitarias') @section('contenido')
{{-- HEADER --}}

Alertas Sanitarias

Productos vencidos, próximos a vencer y con stock por debajo del mínimo.

{{-- KPI CARDS --}}

Vencidos

{{ $vencidos->count() }}

Por vencer (60 días)

{{ $porVencer->count() }}

Stock bajo

{{ $stockBajo->count() }}

{{-- PRODUCTOS VENCIDOS --}}

Productos vencidos

@forelse ($vencidos as $p) @php $fechaVencimiento = $p->fecha_vencimiento ? \Illuminate\Support\Carbon::parse($p->fecha_vencimiento) : null; $diasVencido = $fechaVencimiento ? abs((int) $hoy->diffInDays($fechaVencimiento, false)) : 0; @endphp @empty @endforelse
PRODUCTO ALMACÉN LOTE STOCK VENCIÓ ACCIÓN
{{ $p->producto?->nombre ?? 'Producto no encontrado' }} {{ $p->almacen?->nombre ?? '—' }} {{ $p->lote ?: '—' }} {{ $p->stock }} @if ($fechaVencimiento) {{ $fechaVencimiento->format('d/m/Y') }} ({{ $diasVencido }} d) @else @endif Retirar stock
🎉

Sin productos vencidos.

{{-- PRÓXIMOS A VENCER --}}

Próximos a vencer (60 días)

@forelse ($porVencer as $p) @php $fechaVencimiento = $p->fecha_vencimiento ? \Illuminate\Support\Carbon::parse($p->fecha_vencimiento) : null; $diasRestantes = $fechaVencimiento ? (int) $hoy->diffInDays($fechaVencimiento, false) : 0; @endphp @empty @endforelse
PRODUCTO ALMACÉN LOTE STOCK VENCE
{{ $p->producto?->nombre ?? 'Producto no encontrado' }} {{ $p->almacen?->nombre ?? '—' }} {{ $p->lote ?: '—' }} {{ $p->stock }} @if ($fechaVencimiento) {{ $fechaVencimiento->format('d/m/Y') }} (en {{ $diasRestantes }} d) @else @endif

Ningún producto próximo a vencer.

{{-- STOCK POR DEBAJO DEL MÍNIMO --}}

Stock por debajo del mínimo

@forelse ($stockBajo as $p) @empty @endforelse
PRODUCTO CATEGORÍA ALMACÉN STOCK TOTAL MÍNIMO ACCIÓN
{{ $p->producto?->nombre ?? 'Producto no encontrado' }} {{ $p->producto?->categoria?->nombre ?? '—' }} {{ $p->almacen?->nombre ?? '—' }} {{ $p->stock }} {{ $p->stock_minimo }} Reponer
👍

Todo el stock está por encima del mínimo.

@endsection