Mejoras de sesion: estabilizacion, IA, Nexus Yonke y marketplace B2B
Some checks failed
CI / lint-and-test (3.11) (push) Has been cancelled
CI / lint-and-test (3.13) (push) Has been cancelled

- F0 blindaje: Redis/Celery, pg_hba sin trust LAN, secretos a env 600, backups, webhook auth, jobs muertos
- F1 caja: bugs POS, reembolsos al corte, apartados, CFDI, topes de descuento en cotizacion/apartado
- F2/F7 IA de catalogo: autocategorizacion, dedup de SKUs con embeddings, OCR de facturas, descripciones, claves SAT, limpieza de fitment
- F3 IA en el flujo: vision Yonke, preguntas MeLi, venta cruzada, anomalias, sinonimos, busqueda semantica (rerank/embeddings)
- F4/F8 escala y cartera: /metrics+Prometheus+Grafana, pool, score de credito, churn, metricas multi-tenant
- Nexus Yonke (M1-M6): modelo de datos 1-de-1, alta por donador, vitrina publica, MeLi usado, consignacion, garantia por dias, reportes, etiquetas
- Marketplace B2B entre yonkes (catalogo + pedidos cross-tenant)
- Seguridad: auth en /api/admin/* (35 endpoints), alertas por tenant
- Migraciones v4.27/v4.28; timers expire-demos y rollup-metrics
This commit is contained in:
2026-10-12 00:57:31 +00:00
parent f2d4558b80
commit a386ca5b4a
165 changed files with 31313 additions and 2203 deletions

View File

@@ -56,6 +56,10 @@
<span>Tenants</span>
<span class="badge" id="tenant-count">0</span>
</a>
<a href="#/portfolio" class="nav-item" data-page="portfolio">
<i class="fas fa-briefcase"></i>
<span>Cartera</span>
</a>
<a href="#/health" class="nav-item" data-page="health">
<i class="fas fa-heartbeat"></i>
<span>Salud</span>
@@ -240,6 +244,63 @@
</div>
</section>
<!-- Portfolio Page -->
<section id="page-portfolio" class="page" style="display:none;">
<div class="card">
<div class="card-header">
<h3><i class="fas fa-briefcase"></i> Salud de Cartera</h3>
<div class="card-actions">
<span id="portfolio-meta" class="text-muted" style="font-size:12px;"></span>
<button class="btn btn-sm btn-secondary" onclick="loadPortfolio()">
<i class="fas fa-sync"></i> Refrescar
</button>
</div>
</div>
<div class="card-body">
<table class="table">
<thead>
<tr>
<th>Tenant</th>
<th>Salud</th>
<th>Ventas (día)</th>
<th>Ticket prom.</th>
<th>Items</th>
<th>Clientes</th>
<th>Fitment</th>
<th>Señales</th>
</tr>
</thead>
<tbody id="portfolio-table">
<tr><td colspan="8" class="text-muted">Cargando...</td></tr>
</tbody>
</table>
</div>
</div>
<div class="card">
<div class="card-header">
<h3><i class="fas fa-exclamation-triangle"></i> Anomalías entre Tenants</h3>
</div>
<div class="card-body">
<div id="anomalies-note" class="text-muted" style="font-size:12px;margin-bottom:8px;"></div>
<table class="table">
<thead>
<tr>
<th>Tenant</th>
<th>Métrica</th>
<th>Valor</th>
<th>Mediana cohorte</th>
<th>z</th>
<th>Dirección</th>
</tr>
</thead>
<tbody id="anomalies-table">
<tr><td colspan="6" class="text-muted">Cargando...</td></tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- Health Page -->
<section id="page-health" class="page" style="display:none;">
<div class="grid-3">