{{-- Vista FOCUS — los cores madre publicados en el mercado. Pivot: separa los 11 cores (base técnica) de los N sub-productos derivados. Cada core muestra: - Identidad (slug, price, industry, demo) - 6 ejes de madurez - Publishability (semáforo de aparición en bewpro.com) - Sub-productos: activos / listos / bloqueados / total - Lo que falta para estar 100% publicado (gaps explícitos) Filtros: industry, demo, maturity, has_subproducts. --}} @push('styles') @endpush @php $f = $data['filters'] ?? []; $opts = $data['filter_opts'] ?? ['industries' => [], 'demos' => []]; $filterUrl = function (array $patch) use ($f) { $params = array_merge($f, $patch, ['view' => 'focus']); $params = array_filter($params, fn($v) => $v !== null && $v !== ''); return route('reseller.factory.index') . '?' . http_build_query($params); }; @endphp {{-- ════════ ACCIONES DE HOY ════════ --}} @if(!empty($today ?? []))
Acciones de hoy
priorizado automáticamente · top 4 palancas
@endif {{-- Top KPIs --}}
{{ $data['totals']['count'] }}
Cores madre publicados
{{ !empty($f) ? '(filtrado)' : 'is_active + stripe + slug=core_slug' }}
{{ $data['totals']['avg_health'] }}%
Health promedio
{{ $data['totals']['count_deluxe'] }}
Deluxe (100% técnico)
{{ $data['totals']['count_critical'] }}
Críticos (bloqueantes)
{{-- ════════ Filtros ════════ --}}
Industria: Todas @foreach($opts['industries'] as $ind) 🏷 {{ $ind }} @endforeach
@if(!empty($f)) @endif
Lectura: cada tarjeta = 1 core madre (la base técnica). Los sub-productos son variantes derivadas del mismo core, que se diferencian por copy + colores + a veces 1 módulo. La columna Publishability indica si está visible en bewpro.com (semáforo).
{{-- Listado de cores --}} @foreach($data['items'] as $item) @php $pub = $item['publishability']; $cardClass = 'publish-' . $pub['tone']; $mat = $item['maturity'] ?? null; @endphp
{{-- Header del core --}}
{{ $item['name'] }}
{{ $item['slug'] }} {{ $item['price_label'] }} {{ $pub['label'] }}
@if($item['industry'])🏷 {{ $item['industry'] }}@endif @if($item['demo'])🎨 {{ $item['demo'] }}@endif 🌐 {{ $item['tenants_live'] }} tenants live 🚀 {{ $item['stats']['total'] }} misiles · {{ $item['stats']['launched'] }} launched @if($item['cert_score'] !== null) 🛡 {{ $item['cert_score'] }}/100 @endif
@if($mat)
{{ $mat['overall'] }}%
Maturity overall
@endif
{{-- Sub-productos del core --}}
SUB-PRODUCTOS
{{ $item['sub_products']['total'] }}
total derivados
🟢 ACTIVOS
{{ $item['sub_products']['active'] }}
en bewpro.com
🟡 LISTOS
{{ $item['sub_products']['ready'] }}
tienen stripe, falta activar
🔴 BLOQUEADOS
{{ $item['sub_products']['blocked'] }}
falta stripe price
{{-- Maturity 6 ejes --}} @if($mat)
@foreach($mat['axes'] as $axis => $pct) @php $axisMeta = \App\Services\ProductHealthService::MATURITY_AXES[$axis] ?? null; $axisLabel = $axisMeta['label'] ?? $axis; $axisDesc = $axisMeta['desc'] ?? ''; $klass = $pct >= 80 ? 'deluxe' : ($pct < 50 ? 'gap' : ''); $color = $pct >= 80 ? '#198754' : ($pct >= 50 ? '#ffc107' : '#dc3545'); @endphp
{{ $axisLabel }}
{{ $pct }}%
@endforeach
@endif {{-- Lo que falta para llegar a "Publicado completo" en bewpro.com --}} @if(!empty($pub['gaps']))
Para llegar a "Publicado completo" en bewpro.com falta:
@foreach($pub['gaps'] as $g) {{ $g }} @endforeach
@endif {{-- Acciones --}}
Ver ficha + anatomía Editar Ficha PDF @if($item['sub_products']['ready'] > 0)
@csrf
@endif Construir variante similar @if($pub['in_bewpro_com']) Ver en bewpro.com @endif
@endforeach @if(empty($data['items']))
Sin resultados con los filtros actuales. Limpiar filtros.
@endif