@extends('../padre.padre') @section('styles') @endsection @section('contenido')
|
Producto / Marca
|
{{-- Columna 2 Fija: Clasificación ABC --}}
Cat. ABC
|
{{-- Columna 3 Fija: Predictivo / Frecuencia & Recencia --}}
Frecuencia ⚡
|
{{-- Columna 4 Fija: Rotación e Inventario --}}
Rot / Inv
|
{{-- Columna 5 Fija: Proveedor Sugerido --}}
Prov. Sugerido 💡
|
{{-- Columnas Dinámicas: Bodegas Compactas --}}
@foreach($bodegasColumnas as $index => $bc)
{{ $bc->nombreBodega }}
${{ number_format($valorizacionPorBodega[$bc->id] ?? 0, 0, ',', '.') }}
ABC
ROT
INV
DÍAS
PEND
PEDIR
|
@endforeach
{{-- Columna Fija Derecha: Total Sugerido --}}
Total Sug.
|
|---|---|---|---|---|---|---|
| {{-- Filtro Col 2: ABC --}} | {{-- Filtro Col 3: Frecuencia / Dinámica --}} | {{-- Filtro Col 4: Rot / Inv --}} | {{-- Filtro Col 5: Proveedor Sugerido --}} | {{-- Filtros Columnas Dinámicas: Bodegas --}} @foreach($bodegasColumnas as $index => $bc) |
|
@endforeach
{{-- Filtro Columna Fija Derecha: Total Sugerido --}}
|
|
{{$p['nombre']}}
@if($esTrans)
LAB
@endif
Cod:
{{$p['codigo']}}
{{$p['nommarca']}}
|
{{-- Col 2: ABC --}}
{{ $catAbc }}
@if(!empty($p['reclasificadoInactividad']))
Inactivo
@endif
Global: {{ $p['provisionAplicada'] ?? 0 }}d
|
{{-- Col 3: Frecuencia & Recencia --}}
Recencia:
{{ ($p['diasSinVenta'] ?? 0) == 0 ? 'Hoy (0d)' : ($p['diasSinVenta'] ?? 0) . 'd' }}
Frecuencia:
{{ $p['frecuenciaPorcentaje'] }}%
Cada {{ $p['diasEntreVentas'] }} días
@if($p['tendencia'] == 'alza')
📈
@elseif($p['tendencia'] == 'baja')
📉
@else
➡️
@endif
|
{{-- Col 4: Rot / Inv Total --}}
{{$p['ventaTotalEmpresa']}}
{{$p['inventarioTotalEmpresa']}}
|
{{-- Col 5: Proveedor Sugerido --}}
@if(isset($p['provSugerido']) && $p['provSugerido'] != 'Sin compras')
{{ $p['provSugerido'] }}
${{ number_format($p['costoAplicado'], 0, ',', '.') }}
@if(!empty($p['provHistorial']))
@endif
@else
Sin compras
@endif
|
{{-- Bodegas --}}
@foreach($bodegasColumnas as $index => $bc)
@php
$data = $p['dataBodegas'][$bc->id] ?? ['stock' => 0, 'rotIndividual' => 0, 'pedir' => 0, 'pendiente' => 0, 'runwayDias' => 0, 'categoriaAbc' => 'C', 'provisionAplicada' => 3];
$cellClass = ($index % 2 == 0) ? 'bg-warehouse-1' : 'bg-warehouse-2';
if ($data['pedir'] > 0) $cellClass = 'table-warning';
$catBodega = $data['categoriaAbc'] ?? 'C';
$provBodega = $data['provisionAplicada'] ?? 3;
$badgeAbcBodClass = 'bg-secondary';
if ($catBodega == 'AAA') $badgeAbcBodClass = 'badge-abc-aaa';
elseif ($catBodega == 'AA') $badgeAbcBodClass = 'badge-abc-aa';
elseif ($catBodega == 'A') $badgeAbcBodClass = 'badge-abc-a';
elseif ($catBodega == 'B') $badgeAbcBodClass = 'badge-abc-b';
$runway = (float)($data['runwayDias'] ?? 0);
$runwayBadge = 'badge bg-secondary';
$runwayText = round($runway, 1) . 'd';
if ($data['stock'] == 0) {
$runwayBadge = 'badge bg-danger text-white';
$runwayText = '0d ⚠️';
} elseif ($runway < 3) {
$runwayBadge = 'badge bg-danger text-white';
} elseif ($runway < 7) {
$runwayBadge = 'badge bg-warning text-dark';
} elseif ($runway <= 30) {
$runwayBadge = 'badge bg-success text-white';
} else {
$runwayBadge = 'badge bg-info text-dark';
$runwayText = '>30d';
}
@endphp
{{ $catBodega }} {{ $provBodega }}d
{{$data['rotIndividual']}}
{{$data['stock']}}
{{ $runwayText }}
{{$data['pendiente'] ?? 0}}
@php
$isManualPedir = !empty($data['is_manual']);
$sugCalc = $data['sugeridoCalculado'] ?? 0;
$inputBorder = $isManualPedir ? 'border: 2px solid #ff9800 !important; background-color: #fff9c4;' : 'border: 1.5px solid #0d6efd;';
$inputTitle = $isManualPedir ? "✏️ Modificado manualmente: {$data['pedir']} (Sugerido por sistema: {$sugCalc})" : "Sugerido por sistema: {$data['pedir']}";
$prodHash = $p['hash'] ?? md5((string)$p['codigo']);
@endphp
|
@endforeach
{{-- Total Sugerido --}}
{{$p['sugeridoTotalEmpresa']}} ${{ number_format($p['sugeridoTotalEmpresa'] * ($p['costoAplicado'] ?? 0), 0, ',', '.') }} |
| 💰 Valorización Total | @foreach($bodegasColumnas as $bc)${{ number_format($valorizacionPorBodega[$bc->id] ?? 0, 0, ',', '.') }} | @endforeach${{ number_format($valorizacionTotalGeneral ?? 0, 0, ',', '.') }} | ||||
Este módulo calcula las compras óptimas evaluando frecuencia real de venta, días sin vender (recencia), clasificación Pareto (AAA a C) y transferencias directas a laboratorios para evitar sobrestock y duplicidad de pedidos.
Marca en el botón superior las marcas que pides por transferencia para excluirlas de compras regulares.
Selecciona el rango de fechas (ej. 30 días) y marca las bodegas o sedes a aprovisionar.
Los productos AAA reciben pedidos ajustados (ej. 7d) y los C stock mínimo para proteger el capital.
Descarga pedidos para laboratorios o el pedido general a distribuidores sin mezclar datos.