Files
html/weval-data-hub.html

119 lines
6.4 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="fr"><head>
<meta charset="UTF-8"><title>WEVAL Data Hub · Agents · Webhooks · LinkedIn KPI · Ethica Boost</title>
<style>
body{font-family:-apple-system,sans-serif;background:#0a0e27;color:#e4e8f7;margin:0;padding:24px}
h1{color:#6ba3ff;border-bottom:2px solid #1e3a8a;padding-bottom:8px}
h2{color:#c084fc;margin-top:24px}
.card{background:#141933;border:1px solid #263161;border-radius:8px;padding:16px;margin:12px 0}
.flex{display:flex;gap:16px;flex-wrap:wrap}.flex>div{flex:1;min-width:180px;text-align:center}
.num{font-size:28px;font-weight:bold;color:#6ba3ff}.lbl{color:#9ca8d3;font-size:12px;text-transform:uppercase}
table{width:100%;border-collapse:collapse}th,td{padding:8px;border-bottom:1px solid #263161;text-align:left}
th{background:#1e2549;color:#9ca8d3;font-size:12px;text-transform:uppercase}
a{color:#6ba3ff;text-decoration:none}a:hover{text-decoration:underline}
.badge{padding:2px 8px;border-radius:4px;font-size:11px;font-weight:bold}
.ok{background:#10b981}.warn{background:#f59e0b}
</style></head>
<body>
<h1>📦 WEVAL Data Hub · Agents · Webhooks · KPI · Boost</h1>
<p>Page unifiée couvrant: agents-context, em-webhooks, ethica-dz-boost, linkedin-alignment-kpi. Doctrine 53.</p>
<h2>🤖 Agents Context (static JSON)</h2>
<div class="flex">
<div class="card"><div class="num" id="agents_count"></div><div class="lbl">Agents dans context</div></div>
<div class="card"><div class="num" id="skills_count"></div><div class="lbl">Skills cumul</div></div>
<div class="card"><div class="num" id="tiers_count"></div><div class="lbl">Tiers</div></div>
</div>
<div class="card">
<p><strong>Source</strong>: <a href="/api/agents-context.json" target="_blank">/api/agents-context.json</a> (static file de référence agents Paperclip)</p>
<p>Aussi accessible via <a href="/agents-archi.html">/agents-archi.html</a> · <a href="/agents-fleet.html">/agents-fleet.html</a></p>
</div>
<h2>🔗 EM Webhooks</h2>
<div class="card">
<p>5 endpoints webhook configurés pour Enterprise Model SaaS:</p>
<table>
<tr><th>Webhook</th><th>Event</th><th>Status</th></tr>
<tr><td><code>/api/em-webhooks.php?hook=stripe</code></td><td>Stripe subscription/payment</td><td><span class="badge warn">Requires signing secret</span></td></tr>
<tr><td><code>/api/em-webhooks.php?hook=cf-dns</code></td><td>Cloudflare DNS tenant bootstrap</td><td><span class="badge warn">Requires CF_API_KEY</span></td></tr>
<tr><td><code>/api/em-webhooks.php?hook=case-study</code></td><td>Case study generation (docx)</td><td><span class="badge ok">Live</span></td></tr>
<tr><td><code>/api/em-webhooks.php?hook=video-tour</code></td><td>Video tour Playwright+ffmpeg</td><td><span class="badge warn">Stub</span></td></tr>
<tr><td><code>/api/em-webhooks.php?hook=nonreg-tenant</code></td><td>NonReg scoped par tenant</td><td><span class="badge ok">Live 3/3</span></td></tr>
</table>
<p><a href="/api/em-webhooks.php" target="_blank">Voir index webhooks (JSON)</a></p>
</div>
<h2>🏥 Ethica DZ Boost</h2>
<div class="card">
<p>Cron 4×/jour (4h, 10h, 16h, 22h) enrichit HCPs Algérie.</p>
<div class="flex">
<div class="card"><div class="num" id="dz_now"></div><div class="lbl">DZ HCPs actuel</div></div>
<div class="card"><div class="num" id="dz_email"></div><div class="lbl">DZ avec email</div></div>
<div class="card"><div class="num" id="dz_gap"></div><div class="lbl">Gap email</div></div>
</div>
<p><a href="/api/ethica-dz-boost.php" target="_blank">Endpoint direct</a> · <a href="/ethica-hub.html">Ethica Hub</a> · <a href="/ethica-country.html">Vue par pays</a></p>
</div>
<h2>📊 LinkedIn Alignment KPI</h2>
<div class="card">
<p>Mesure l'alignement entre posts LinkedIn et architecture plateforme réelle.</p>
<div class="flex">
<div class="card"><div class="num" id="posts_count"></div><div class="lbl">Posts publiés</div></div>
<div class="card"><div class="num" id="archi_mentions"></div><div class="lbl">Mentions archi</div></div>
<div class="card"><div class="num" id="alignment_pct"></div><div class="lbl">Alignment %</div></div>
</div>
<p><a href="/api/linkedin-alignment-kpi.php" target="_blank">Endpoint JSON</a></p>
</div>
<h2>🔗 Pages data liées</h2>
<div class="card">
<ul>
<li><a href="/agents-archi.html">Agents Architecture</a></li>
<li><a href="/agents-fleet.html">Agents Fleet</a></li>
<li><a href="/em-dashboard.html">EM Dashboard</a></li>
<li><a href="/ethica-hub.html">Ethica Hub</a></li>
<li><a href="/ethica-country.html">Ethica par pays</a></li>
<li><a href="/crm-audit.html">CRM Audit</a></li>
<li><a href="/doctrine-53.html">Doctrine 53</a></li>
</ul>
</div>
<script>
fetch('/api/agents-context.json').then(r=>r.json()).then(d=>{
const list = Array.isArray(d)? d : (d.agents || d.list || []);
document.getElementById('agents_count').textContent = list.length || '—';
let skills = 0, tiers = new Set();
list.forEach(a => { if (a.skills) skills += (Array.isArray(a.skills)? a.skills.length : 0); if (a.tier) tiers.add(a.tier); });
document.getElementById('skills_count').textContent = skills || '—';
document.getElementById('tiers_count').textContent = tiers.size || '—';
}).catch(e=>{
document.getElementById('agents_count').textContent = '—';
document.getElementById('skills_count').textContent = '—';
document.getElementById('tiers_count').textContent = '—';
});
fetch('/api/ethica-country-api.php?country=dz').then(r=>r.json()).then(d=>{
const dz = d.dz || d;
const total = dz.total || dz.hcps || 0;
const email = dz.with_email || dz.email || 0;
document.getElementById('dz_now').textContent = total.toLocaleString();
document.getElementById('dz_email').textContent = email.toLocaleString();
document.getElementById('dz_gap').textContent = (total - email).toLocaleString();
}).catch(e=>{
document.getElementById('dz_now').textContent = '—';
document.getElementById('dz_email').textContent = '—';
document.getElementById('dz_gap').textContent = '—';
});
fetch('/api/linkedin-alignment-kpi.php').then(r=>r.json()).then(d=>{
document.getElementById('posts_count').textContent = d.posts || d.total_posts || '—';
document.getElementById('archi_mentions').textContent = d.archi_mentions || d.mentions || '?';
document.getElementById('alignment_pct').textContent = (d.alignment_pct || d.score || '?') + '%';
}).catch(e=>{
document.getElementById('posts_count').textContent = '—';
document.getElementById('archi_mentions').textContent = '?';
document.getElementById('alignment_pct').textContent = '?%';
});
</script>
</body></html>