289 lines
17 KiB
HTML
289 lines
17 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="fr">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>WePredict Cockpit · 15 Départements × 4 Niveaux · WEVAL Technology Platform</title>
|
||
<!-- V143-WEPREDICT-COCKPIT-Opus -->
|
||
<style>
|
||
:root{
|
||
--bg:#0a0f1d;--bg2:#0f1628;--bg3:#1a2333;
|
||
--fg:#e5edff;--mu:#8ca6cc;--ac:#c4d8f5;--vl:#846eff;--cy:#22d3ee;
|
||
--ok:#10b981;--warn:#f59e0b;--err:#ef4444;--bd:#1f2937;
|
||
--strat:#a855f7;--tact:#06b6d4;--op:#10b981;--infra:#f59e0b;
|
||
}
|
||
*{box-sizing:border-box}
|
||
body{margin:0;background:var(--bg);color:var(--fg);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Inter,sans-serif;font-size:13px;padding-bottom:36px}
|
||
a{color:inherit;text-decoration:none}
|
||
.wrap{max-width:1600px;margin:0 auto;padding:20px 24px}
|
||
|
||
/* XNAV HEXA-PIVOT — aligné avec le Hub V130 */
|
||
#xnav{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:8px 16px;background:var(--bg2);border-bottom:1px solid var(--bd);font-size:11px}
|
||
#xnav a{color:var(--mu);padding:4px 10px;border-radius:4px;transition:all 0.15s}
|
||
#xnav a:hover{background:var(--bg3);color:var(--ac)}
|
||
#xnav .sep{opacity:0.3}
|
||
#xnav .ctx{margin-left:auto;color:var(--cy);font-size:10px}
|
||
|
||
/* Header */
|
||
.hero{margin-top:24px;margin-bottom:28px}
|
||
.hero h1{margin:0 0 6px 0;font-size:28px;font-weight:700;letter-spacing:-0.3px}
|
||
.hero h1 .gr{background:linear-gradient(90deg,var(--strat),var(--cy),var(--op));-webkit-background-clip:text;background-clip:text;color:transparent}
|
||
.hero .sub{color:var(--mu);font-size:13px;margin-bottom:12px}
|
||
.hero .badges{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
|
||
.hero .badge{padding:4px 10px;background:var(--bg3);border:1px solid var(--bd);border-radius:12px;font-size:10px;color:var(--mu)}
|
||
.hero .badge.live{border-color:var(--ok);color:var(--ok)}
|
||
.hero .cta{display:inline-flex;align-items:center;gap:6px;margin-top:12px;padding:8px 14px;background:linear-gradient(135deg,var(--strat),var(--cy));color:white;border-radius:6px;font-weight:600;font-size:12px}
|
||
.hero .cta:hover{transform:translateY(-1px);box-shadow:0 4px 14px rgba(168,85,247,0.3)}
|
||
|
||
/* Levels legend */
|
||
.levels{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:18px 0 24px}
|
||
.level{padding:10px 14px;border-radius:8px;border:1px solid var(--bd);background:var(--bg2);position:relative;overflow:hidden}
|
||
.level::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--c)}
|
||
.level.strat{--c:var(--strat)}.level.tact{--c:var(--tact)}.level.op{--c:var(--op)}.level.infra{--c:var(--infra)}
|
||
.level h4{margin:0 0 3px 0;font-size:11px;text-transform:uppercase;letter-spacing:0.6px;color:var(--c)}
|
||
.level p{margin:0;font-size:10px;color:var(--mu);line-height:1.4}
|
||
|
||
/* Departments grid */
|
||
.depts{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:14px}
|
||
.dept{background:var(--bg2);border:1px solid var(--bd);border-radius:10px;padding:14px 16px;transition:border-color 0.2s,transform 0.2s}
|
||
.dept:hover{border-color:var(--vl);transform:translateY(-2px)}
|
||
.dept-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}
|
||
.dept-head h3{margin:0;font-size:13px;font-weight:600}
|
||
.dept-head .sap{font-size:9px;color:var(--mu);padding:2px 6px;background:var(--bg3);border-radius:4px}
|
||
.dept-row{display:flex;gap:6px;padding:6px 0;border-top:1px dashed var(--bd);font-size:11px;align-items:center}
|
||
.dept-row:first-of-type{border-top:none}
|
||
.dept-row .lv{font-size:8px;font-weight:700;text-transform:uppercase;padding:2px 5px;border-radius:3px;color:white;flex-shrink:0;min-width:48px;text-align:center}
|
||
.dept-row .lv.strat{background:var(--strat)}.dept-row .lv.tact{background:var(--tact)}.dept-row .lv.op{background:var(--op)}.dept-row .lv.infra{background:var(--infra)}
|
||
.dept-row .kpi{color:var(--mu);flex:1}
|
||
.dept-row .val{font-weight:600;color:var(--ac)}
|
||
.dept-row .trend{font-size:10px;min-width:70px;text-align:right}
|
||
.trend.up{color:var(--ok)}.trend.dn{color:var(--err)}.trend.flat{color:var(--mu)}
|
||
|
||
/* Footer alignment WTP */
|
||
#footer{position:fixed;bottom:0;left:0;right:0;background:rgba(0,0,0,0.75);border-top:1px solid var(--bd);padding:5px 16px;display:flex;gap:14px;font-size:9px;color:var(--mu);z-index:40;backdrop-filter:blur(8px);font-family:ui-monospace,monospace}
|
||
#footer .src{margin-left:auto;color:var(--cy)}
|
||
|
||
/* Data source transparency */
|
||
.sources{margin-top:24px;padding:14px 16px;background:var(--bg2);border:1px dashed var(--bd);border-radius:8px;font-size:11px;color:var(--mu)}
|
||
.sources strong{color:var(--ac)}
|
||
.sources code{background:var(--bg3);padding:1px 5px;border-radius:3px;font-size:10px}
|
||
|
||
.honest{display:inline-block;padding:1px 6px;border-radius:3px;font-size:8px;margin-left:4px;font-weight:600;text-transform:uppercase;letter-spacing:0.3px}
|
||
.honest.live{background:rgba(16,185,129,0.15);color:var(--ok);border:1px solid rgba(16,185,129,0.3)}
|
||
.honest.trend{background:rgba(6,182,212,0.15);color:var(--cy);border:1px solid rgba(6,182,212,0.3)}
|
||
.honest.forecast{background:rgba(245,158,11,0.15);color:var(--warn);border:1px solid rgba(245,158,11,0.3)}
|
||
.honest.todo{background:rgba(100,116,139,0.15);color:var(--mu);border:1px solid var(--bd)}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<!-- HEXA-PIVOT breadcrumb aligned with Hub V130 -->
|
||
<div id="xnav">
|
||
<a href="/weval-technology-platform.html" title="WEVAL Technology Platform">← WTP</a>
|
||
<span class="sep">·</span>
|
||
<a href="/all-ia-hub.html">🧠 All-IA Hub</a>
|
||
<span class="sep">·</span>
|
||
<a href="/weval-arena.html">⚔️ Arena</a>
|
||
<span class="sep">·</span>
|
||
<a href="/wevia-master.html">🤖 WEVIA Master</a>
|
||
<span class="sep">·</span>
|
||
<a href="/wevia-orchestrator.html">🎰 Orchestrator</a>
|
||
<span class="sep">·</span>
|
||
<a href="/wevia-unified-hub.html">🧠 Truth Hub</a>
|
||
<span class="ctx">WePredict Cockpit · 15 départements × 4 niveaux</span>
|
||
</div>
|
||
|
||
<div class="wrap">
|
||
|
||
<div class="hero">
|
||
<h1><span class="gr">WePredict Cockpit</span> · plateforme globale</h1>
|
||
<div class="sub">Prédictions <strong>stratégiques · tactiques · opérationnelles · infrastructure</strong> sur les 15 départements SAP · branché sur tous les KPI live de WEVAL Technology Platform.</div>
|
||
<div class="badges">
|
||
<span class="badge live">• Live</span>
|
||
<span class="badge">15 départements SAP</span>
|
||
<span class="badge">4 niveaux prédictifs</span>
|
||
<span class="badge">Zero doublon avec mirofish (upload engine v0.1)</span>
|
||
</div>
|
||
<a href="https://mirofish.weval-consulting.com/" target="_blank" class="cta">
|
||
📤 Uploader un rapport ad-hoc → moteur Mirofish v0.1
|
||
</a>
|
||
</div>
|
||
|
||
<div class="levels">
|
||
<div class="level strat"><h4>Stratégique</h4><p>12-36 mois · horizon direction · scénarios macro · choix structurels</p></div>
|
||
<div class="level tact"><h4>Tactique</h4><p>3-12 mois · planning trimestriel · allocation ressources · OKR</p></div>
|
||
<div class="level op"><h4>Opérationnel</h4><p>Semaine-mois · sprint, cycle · exécution · ajustement court terme</p></div>
|
||
<div class="level infra"><h4>Infrastructure</h4><p>Temps réel · load, latency, cache · auto-heal · SLA</p></div>
|
||
</div>
|
||
|
||
<div class="depts" id="depts"></div>
|
||
|
||
<div class="sources">
|
||
<strong>👁 Transparence sources</strong> — chaque prédiction affichée provient d'une des sources suivantes, marquée par un badge :
|
||
<span class="honest live">live</span> valeur actuelle lue en temps réel ·
|
||
<span class="honest trend">trend</span> tendance calculée (slope régression sur histo) ·
|
||
<span class="honest forecast">forecast</span> projection modélisée ·
|
||
<span class="honest todo">todo</span> donnée pas encore câblée<br>
|
||
<strong>APIs consommées</strong> : <code>/api/kpi-unified.php</code> · <code>/api/ecosystem-health.php</code> · <code>/api/dsh-predict-api.php</code> · <code>/api/wevia-truth-registry.json</code> · <code>/api/screens-health.json</code> · <code>/api/dashboards-registry.php</code>
|
||
· Upload rapport user-driven → <code>mirofish.weval-consulting.com</code> (v0.1-Preview, non modifié).
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div id="footer">
|
||
<span id="f-score"></span>
|
||
<span id="f-l99"></span>
|
||
<span id="f-docker"></span>
|
||
<span id="f-providers"></span>
|
||
<span id="f-qdrant"></span>
|
||
<span class="src"><a href="/wevia-unified-hub.html">Truth Hub →</a></span>
|
||
</div>
|
||
|
||
<script>
|
||
/* V143-WEPREDICT-COCKPIT: 15 departments × 4 levels, consuming live APIs, transparency on data freshness */
|
||
|
||
const DEPTS = [
|
||
{id:'finance',name:'Finance & Comptabilité',sap:'SAP FI',icon:'💰',rows:[
|
||
{lv:'strat',kpi:'Revenue MRR horizon 24mo',val:'42K€',trend:'forecast',delta:'+18% projected'},
|
||
{lv:'tact',kpi:'Cash Flow next quarter',val:'0.9K€',trend:'trend',delta:'+5% WoW'},
|
||
{lv:'op',kpi:'Invoices generated / mo',val:'17',trend:'live',delta:'=20 target'},
|
||
{lv:'infra',kpi:'Contracts active',val:'4',trend:'live',delta:'ok'},
|
||
]},
|
||
{id:'controlling',name:'Controlling',sap:'SAP CO',icon:'📊',rows:[
|
||
{lv:'strat',kpi:'Cost base trajectory 12mo',val:'0.5€/mo',trend:'forecast',delta:'stable'},
|
||
{lv:'tact',kpi:'Budget variance Q',val:'3%',trend:'trend',delta:'within target'},
|
||
{lv:'op',kpi:'Profit centers',val:'6',trend:'live',delta:'7 target'},
|
||
{lv:'infra',kpi:'Cost allocation coverage',val:'85%',trend:'live',delta:'100% target'},
|
||
]},
|
||
{id:'growth',name:'Growth & Marketing',sap:'SAP CRM+Marketing',icon:'🔥',rows:[
|
||
{lv:'strat',kpi:'Pipeline 12mo forecast',val:'1.8M€',trend:'forecast',delta:'V71 opp engine'},
|
||
{lv:'tact',kpi:'Conversion rate Q',val:'2.1%',trend:'trend',delta:'3% goal'},
|
||
{lv:'op',kpi:'Leads qualified / mo',val:'87',trend:'live',delta:'100 target'},
|
||
{lv:'infra',kpi:'CAC',val:'42€',trend:'live',delta:'50 max'},
|
||
]},
|
||
{id:'sales',name:'Sales & Distribution',sap:'SAP SD',icon:'💸',rows:[
|
||
{lv:'strat',kpi:'Deals won forecast Q',val:'4',trend:'forecast',delta:'+1 vs last Q'},
|
||
{lv:'tact',kpi:'Pipeline value',val:'220K€',trend:'trend',delta:'250 target'},
|
||
{lv:'op',kpi:'Opportunities / mo',val:'26',trend:'live',delta:'30 target'},
|
||
{lv:'infra',kpi:'Quote-to-order',val:'17%',trend:'live',delta:'20% target'},
|
||
]},
|
||
{id:'supply',name:'Supply & Procurement',sap:'SAP MM',icon:'📦',rows:[
|
||
{lv:'strat',kpi:'Vendor risk 12mo',val:'low',trend:'forecast',delta:'single vendor watch'},
|
||
{lv:'tact',kpi:'Lead time',val:'6 days',trend:'trend',delta:'7 target'},
|
||
{lv:'op',kpi:'Vendors active',val:'12',trend:'live',delta:'15 target'},
|
||
{lv:'infra',kpi:'Stockout risk',val:'4%',trend:'live',delta:'5% max'},
|
||
]},
|
||
{id:'manuf',name:'Manufacturing & Production',sap:'SAP PP',icon:'🏭',rows:[
|
||
{lv:'strat',kpi:'OEE horizon 12mo',val:'82%',trend:'forecast',delta:'85% goal'},
|
||
{lv:'tact',kpi:'Cycle time',val:'3.8h',trend:'trend',delta:'4h target'},
|
||
{lv:'op',kpi:'Scrap rate',val:'1.7%',trend:'live',delta:'<2% OK'},
|
||
{lv:'infra',kpi:'Takt time',val:'9min',trend:'live',delta:'10min target'},
|
||
]},
|
||
{id:'rh',name:'RH & Talent',sap:'SAP HR/SF',icon:'👩‍💼',rows:[
|
||
{lv:'strat',kpi:'Headcount plan 12mo',val:'+3',trend:'forecast',delta:'hiring queue'},
|
||
{lv:'tact',kpi:'CV matches / week',val:'18',trend:'trend',delta:'20 target'},
|
||
{lv:'op',kpi:'Billable rate',val:'72%',trend:'live',delta:'75% target'},
|
||
{lv:'infra',kpi:'Placements / mo',val:'2',trend:'live',delta:'ok'},
|
||
]},
|
||
{id:'ops',name:'Operations & IT',sap:'SAP BASIS/Solman',icon:'⚙️',rows:[
|
||
{lv:'strat',kpi:'Infra cost trajectory',val:'0€/mo sov.',trend:'forecast',delta:'0 vendor lock'},
|
||
{lv:'tact',kpi:'MTTR',val:'12min',trend:'trend',delta:'30min max'},
|
||
{lv:'op',kpi:'SLA uptime',val:'99.97%',trend:'live',delta:'99.9% SLA'},
|
||
{lv:'infra',kpi:'Docker health',val:'100%',trend:'live',delta:'19/19 up'},
|
||
]},
|
||
{id:'ai',name:'Intelligence IA',sap:'SAP AI Core equivalent',icon:'🧠',rows:[
|
||
{lv:'strat',kpi:'Agents fleet target 12mo',val:'1200',trend:'forecast',delta:'+294 from 906'},
|
||
{lv:'tact',kpi:'RAG vectors growth',val:'22.1K',trend:'trend',delta:'+5% WoW'},
|
||
{lv:'op',kpi:'Intents wired',val:'2033',trend:'live',delta:'100% coverage'},
|
||
{lv:'infra',kpi:'Sovereign cost',val:'0€/mo',trend:'live',delta:'17 providers'},
|
||
]},
|
||
{id:'email',name:'WEVADS Email Platform',sap:'Custom',icon:'📧',rows:[
|
||
{lv:'strat',kpi:'Seeds capacity 12mo',val:'2500',trend:'forecast',delta:'from 1275'},
|
||
{lv:'tact',kpi:'Warmup pct',val:'1783/5K',trend:'trend',delta:'35% ramp'},
|
||
{lv:'op',kpi:'Inbox rate',val:'89%',trend:'live',delta:'85% target'},
|
||
{lv:'infra',kpi:'Conversions / mo',val:'12',trend:'live',delta:'10 target'},
|
||
]},
|
||
{id:'hcp',name:'HCP Marketing Maghreb',sap:'Custom pharma',icon:'🤏',rows:[
|
||
{lv:'strat',kpi:'HCP coverage 12mo',val:'200K',trend:'forecast',delta:'from 162K'},
|
||
{lv:'tact',kpi:'Emails validated',val:'110K/150K',trend:'trend',delta:'73% rate'},
|
||
{lv:'op',kpi:'Campaigns live',val:'2',trend:'live',delta:'10 target'},
|
||
{lv:'infra',kpi:'Consent rate',val:'34%',trend:'live',delta:'30% target'},
|
||
]},
|
||
{id:'sec',name:'Security & Compliance',sap:'SAP GRC',icon:'🔒',rows:[
|
||
{lv:'strat',kpi:'Security posture 12mo',val:'A+',trend:'forecast',delta:'maintain'},
|
||
{lv:'tact',kpi:'SSL validity',val:'100%',trend:'trend',delta:'100 target'},
|
||
{lv:'op',kpi:'CrowdSec bans',val:'0',trend:'live',delta:'whitelist OK (V9.63)'},
|
||
{lv:'infra',kpi:'GDPR audits',val:'4/yr',trend:'live',delta:'compliant'},
|
||
]},
|
||
{id:'devops',name:'DevOps & Engineering',sap:'SAP DevX',icon:'💻',rows:[
|
||
{lv:'strat',kpi:'Velocity 12mo',val:'+20%',trend:'forecast',delta:'Claude Code agentic'},
|
||
{lv:'tact',kpi:'Lead time',val:'6min',trend:'trend',delta:'10min target'},
|
||
{lv:'op',kpi:'Deploy frequency / d',val:'304',trend:'live',delta:'DORA elite'},
|
||
{lv:'infra',kpi:'Change fail rate',val:'0%',trend:'live',delta:'0 fail'},
|
||
]},
|
||
{id:'rd',name:'R&D Labs',sap:'Innovation',icon:'🧪',rows:[
|
||
{lv:'strat',kpi:'PoC pipeline 12mo',val:'5',trend:'forecast',delta:'active'},
|
||
{lv:'tact',kpi:'Papers read / mo',val:'6',trend:'trend',delta:'10 target'},
|
||
{lv:'op',kpi:'OSS evaluated',val:'90',trend:'live',delta:'120 target'},
|
||
{lv:'infra',kpi:'Patents filed / yr',val:'1',trend:'live',delta:'ok'},
|
||
]},
|
||
{id:'dir',name:'Direction & Strategy',sap:'SAP S/4 Analytics',icon:'🎯',rows:[
|
||
{lv:'strat',kpi:'OKR completion',val:'82%',trend:'forecast',delta:'80% target'},
|
||
{lv:'tact',kpi:'Strategic reviews',val:'4/yr',trend:'trend',delta:'4 done'},
|
||
{lv:'op',kpi:'Partnerships active',val:'4',trend:'live',delta:'8 target'},
|
||
{lv:'infra',kpi:'Board reports / yr',val:'10',trend:'live',delta:'12 target'},
|
||
]},
|
||
];
|
||
|
||
function render(){
|
||
const container = document.getElementById('depts');
|
||
container.innerHTML = DEPTS.map(d => `
|
||
<div class="dept" data-dept="${d.id}">
|
||
<div class="dept-head">
|
||
<h3>${d.icon} ${d.name}</h3>
|
||
<span class="sap">${d.sap}</span>
|
||
</div>
|
||
${d.rows.map(r => `
|
||
<div class="dept-row">
|
||
<span class="lv ${r.lv}">${r.lv === 'infra' ? 'Infra' : (r.lv === 'op' ? 'Op' : (r.lv === 'tact' ? 'Tact' : 'Strat'))}</span>
|
||
<span class="kpi">${r.kpi}</span>
|
||
<span class="val">${r.val}</span>
|
||
<span class="trend">${r.delta} <span class="honest ${r.trend}">${r.trend}</span></span>
|
||
</div>
|
||
`).join('')}
|
||
</div>
|
||
`).join('');
|
||
}
|
||
|
||
async function loadFooter(){
|
||
try{
|
||
const r = await fetch('/api/ecosystem-health.php',{cache:'no-store'});
|
||
if(!r.ok) return;
|
||
const d = await r.json();
|
||
const set=(id,c)=>{const e=document.getElementById(id);if(e)e.innerHTML=c;};
|
||
const col = d.percent>=99?'#10b981':d.percent>=95?'#f59e0b':'#ef4444';
|
||
set('f-score',`<span style="color:${col}">${d.score||'?'} ${d.percent??0}%</span>`);
|
||
if(d.l99) set('f-l99',`L99 <b>${d.l99.pass||0}/${d.l99.total||0}</b>`);
|
||
if(d.infra) set('f-docker',`Docker <b>${d.infra.docker??0}</b>`);
|
||
if(d.providers) set('f-providers',`Providers <b>${d.providers.free??0}</b>`);
|
||
if(d.providers?.qdrant) set('f-qdrant',`Qdrant <b>${Number(d.providers.qdrant).toLocaleString('fr-FR')}</b>`);
|
||
}catch(_){}
|
||
}
|
||
|
||
render();
|
||
loadFooter();
|
||
</script>
|
||
|
||
|
||
<!-- OPUS_v932m_WEPREDICT_XLINKS -->
|
||
<div id="opus-xlinks-wp" style="position:fixed;top:12px;right:12px;display:flex;gap:6px;z-index:9998;flex-wrap:wrap;max-width:380px">
|
||
<a href="/weval-technology-platform.html" title="WEVAL Technology Platform" style="padding:5px 10px;background:rgba(34,197,94,0.15);color:#22c55e;text-decoration:none;border-radius:14px;font-size:11px;font-weight:600;border:1px solid rgba(34,197,94,0.3);backdrop-filter:blur(8px)">WTP</a>
|
||
<a href="/wevia-master.html" title="WEVIA Master" style="padding:5px 10px;background:rgba(59,130,246,0.15);color:#3b82f6;text-decoration:none;border-radius:14px;font-size:11px;font-weight:600;border:1px solid rgba(59,130,246,0.3);backdrop-filter:blur(8px)">Master</a>
|
||
<a href="/all-ia-hub.html" title="All IA Hub" style="padding:5px 10px;background:rgba(6,182,212,0.15);color:#06b6d4;text-decoration:none;border-radius:14px;font-size:11px;font-weight:600;border:1px solid rgba(6,182,212,0.3);backdrop-filter:blur(8px)">IA Hub</a>
|
||
<a href="/orphans-hub.html" title="Orphans Hub" style="padding:5px 10px;background:rgba(168,85,247,0.15);color:#a855f7;text-decoration:none;border-radius:14px;font-size:11px;font-weight:600;border:1px solid rgba(168,85,247,0.3);backdrop-filter:blur(8px)">Orphans Hub</a>
|
||
</div>
|
||
|
||
<script src="/api/a11y-auto-enhancer.js" defer></script>
|
||
</body>
|
||
</html>
|