Files
html/api/wevia-v67-roi-simulator.php
2026-04-18 01:30:02 +02:00

180 lines
16 KiB
PHP

<?php
// V67 — ROI SIMULATOR QUANTI + QUALI PAR AGENT
// Enrichit V66 avec: scaling_factors, qualitative_gains, payback, effort, complexity
// Consommé par page /agent-roi-simulator.html (sliders interactifs)
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
// Fetch V66 base (35 pain points + agents + baseline savings)
function fetch_internal($path, $timeout = 6) {
$ch = curl_init('http://127.0.0.1:5890' . $path);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => $timeout,
CURLOPT_HTTPHEADER => ['Host: weval-consulting.com']
]);
$r = curl_exec($ch);
curl_close($ch);
return $r ? @json_decode($r, true) : null;
}
$v66 = fetch_internal('/api/wevia-v66-all-erps-painpoints.php');
$pain_points = ($v66 && isset($v66['pain_points'])) ? $v66['pain_points'] : [];
// ======================================================
// ENRICHMENT PER AGENT — Qualitative + Quantitative
// Each pain_point id gets: qualitative (6 axes 0-5), implementation, payback, etc.
// ======================================================
$enrichment = [
// Finance
'PP001' => ['quali'=>['time_fte_saved'=>2.0,'risk_reduction'=>4,'compliance_uplift'=>5,'cx_impact'=>2,'brand_score'=>3,'strategic_value'=>5], 'payback_months'=>4, 'effort_md'=>40, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>['ERP read access','DB connector']],
'PP002' => ['quali'=>['time_fte_saved'=>1.5,'risk_reduction'=>5,'compliance_uplift'=>3,'cx_impact'=>1,'brand_score'=>2,'strategic_value'=>5], 'payback_months'=>3, 'effort_md'=>55, 'complexity'=>4, 'risk_of_failure'=>2, 'deps'=>['Historical data 3y','Forecasting model']],
'PP003' => ['quali'=>['time_fte_saved'=>3.0,'risk_reduction'=>3,'compliance_uplift'=>2,'cx_impact'=>3,'brand_score'=>2,'strategic_value'=>4], 'payback_months'=>2, 'effort_md'=>35, 'complexity'=>2, 'risk_of_failure'=>1, 'deps'=>['CRM API','Email/SMS gateway']],
'PP004' => ['quali'=>['time_fte_saved'=>1.0,'risk_reduction'=>5,'compliance_uplift'=>5,'cx_impact'=>1,'brand_score'=>4,'strategic_value'=>5], 'payback_months'=>3, 'effort_md'=>45, 'complexity'=>4, 'risk_of_failure'=>2, 'deps'=>['Transaction logs','Graph DB']],
'PP005' => ['quali'=>['time_fte_saved'=>1.5,'risk_reduction'=>4,'compliance_uplift'=>3,'cx_impact'=>1,'brand_score'=>2,'strategic_value'=>4], 'payback_months'=>4, 'effort_md'=>30, 'complexity'=>2, 'risk_of_failure'=>1, 'deps'=>['GL/CO access']],
'PP006' => ['quali'=>['time_fte_saved'=>2.5,'risk_reduction'=>4,'compliance_uplift'=>4,'cx_impact'=>1,'brand_score'=>3,'strategic_value'=>4], 'payback_months'=>5, 'effort_md'=>60, 'complexity'=>4, 'risk_of_failure'=>3, 'deps'=>['Multi-entity GL','FX rates feed']],
// Supply
'PP007' => ['quali'=>['time_fte_saved'=>1.5,'risk_reduction'=>5,'compliance_uplift'=>2,'cx_impact'=>5,'brand_score'=>4,'strategic_value'=>5], 'payback_months'=>3, 'effort_md'=>50, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>['SKU history 2y','POS data','Weather/promo signals']],
'PP008' => ['quali'=>['time_fte_saved'=>1.5,'risk_reduction'=>4,'compliance_uplift'=>2,'cx_impact'=>2,'brand_score'=>2,'strategic_value'=>4], 'payback_months'=>4, 'effort_md'=>45, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>['Inventory data','Multi-warehouse']],
'PP009' => ['quali'=>['time_fte_saved'=>1.0,'risk_reduction'=>5,'compliance_uplift'=>3,'cx_impact'=>3,'brand_score'=>3,'strategic_value'=>4], 'payback_months'=>4, 'effort_md'=>40, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>['Vendor master','News/rating APIs']],
'PP010' => ['quali'=>['time_fte_saved'=>1.0,'risk_reduction'=>5,'compliance_uplift'=>5,'cx_impact'=>1,'brand_score'=>4,'strategic_value'=>5], 'payback_months'=>4, 'effort_md'=>55, 'complexity'=>4, 'risk_of_failure'=>3, 'deps'=>['Procurement logs','KYB APIs']],
'PP011' => ['quali'=>['time_fte_saved'=>1.5,'risk_reduction'=>3,'compliance_uplift'=>3,'cx_impact'=>1,'brand_score'=>2,'strategic_value'=>3], 'payback_months'=>5, 'effort_md'=>35, 'complexity'=>3, 'risk_of_failure'=>1, 'deps'=>['Purchase invoice text']],
// Manufacturing
'PP012' => ['quali'=>['time_fte_saved'=>2.0,'risk_reduction'=>4,'compliance_uplift'=>2,'cx_impact'=>3,'brand_score'=>3,'strategic_value'=>5], 'payback_months'=>5, 'effort_md'=>80, 'complexity'=>5, 'risk_of_failure'=>3, 'deps'=>['IoT sensors','MES connector','5G/network']],
'PP013' => ['quali'=>['time_fte_saved'=>2.5,'risk_reduction'=>5,'compliance_uplift'=>3,'cx_impact'=>3,'brand_score'=>4,'strategic_value'=>5], 'payback_months'=>6, 'effort_md'=>90, 'complexity'=>5, 'risk_of_failure'=>3, 'deps'=>['Vibration/acoustic sensors','ML training data']],
'PP014' => ['quali'=>['time_fte_saved'=>1.5,'risk_reduction'=>5,'compliance_uplift'=>5,'cx_impact'=>5,'brand_score'=>5,'strategic_value'=>5], 'payback_months'=>5, 'effort_md'=>70, 'complexity'=>4, 'risk_of_failure'=>3, 'deps'=>['Vision AI cameras','QM data']],
'PP015' => ['quali'=>['time_fte_saved'=>1.5,'risk_reduction'=>3,'compliance_uplift'=>2,'cx_impact'=>3,'brand_score'=>3,'strategic_value'=>4], 'payback_months'=>5, 'effort_md'=>65, 'complexity'=>4, 'risk_of_failure'=>3, 'deps'=>['Routing data','Capacity model']],
// Sales
'PP016' => ['quali'=>['time_fte_saved'=>1.0,'risk_reduction'=>4,'compliance_uplift'=>1,'cx_impact'=>3,'brand_score'=>3,'strategic_value'=>5], 'payback_months'=>3, 'effort_md'=>35, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>['CRM','Email/Calendar access']],
'PP017' => ['quali'=>['time_fte_saved'=>2.0,'risk_reduction'=>2,'compliance_uplift'=>1,'cx_impact'=>4,'brand_score'=>3,'strategic_value'=>4], 'payback_months'=>3, 'effort_md'=>40, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>['CRM','Enrichment APIs (Clearbit/similar)']],
'PP018' => ['quali'=>['time_fte_saved'=>1.5,'risk_reduction'=>4,'compliance_uplift'=>1,'cx_impact'=>5,'brand_score'=>4,'strategic_value'=>5], 'payback_months'=>4, 'effort_md'=>55, 'complexity'=>4, 'risk_of_failure'=>2, 'deps'=>['Usage logs','Support tickets','Sentiment data']],
'PP019' => ['quali'=>['time_fte_saved'=>2.5,'risk_reduction'=>2,'compliance_uplift'=>2,'cx_impact'=>5,'brand_score'=>4,'strategic_value'=>4], 'payback_months'=>3, 'effort_md'=>45, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>['Price list','Approval rules']],
'PP020' => ['quali'=>['time_fte_saved'=>1.0,'risk_reduction'=>1,'compliance_uplift'=>1,'cx_impact'=>4,'brand_score'=>3,'strategic_value'=>5], 'payback_months'=>4, 'effort_md'=>50, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>['CRM 360','Product catalog']],
// HR
'PP021' => ['quali'=>['time_fte_saved'=>1.5,'risk_reduction'=>4,'compliance_uplift'=>2,'cx_impact'=>2,'brand_score'=>4,'strategic_value'=>5], 'payback_months'=>5, 'effort_md'=>55, 'complexity'=>4, 'risk_of_failure'=>3, 'deps'=>['HRIS','Perf/comp data','Engagement signals']],
'PP022' => ['quali'=>['time_fte_saved'=>2.5,'risk_reduction'=>3,'compliance_uplift'=>3,'cx_impact'=>3,'brand_score'=>4,'strategic_value'=>4], 'payback_months'=>3, 'effort_md'=>40, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>['ATS access','JD database']],
'PP023' => ['quali'=>['time_fte_saved'=>2.0,'risk_reduction'=>2,'compliance_uplift'=>1,'cx_impact'=>2,'brand_score'=>3,'strategic_value'=>5], 'payback_months'=>3, 'effort_md'=>45, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>['Timesheet','Project staffing','Skills matrix']],
'PP024' => ['quali'=>['time_fte_saved'=>1.0,'risk_reduction'=>5,'compliance_uplift'=>5,'cx_impact'=>3,'brand_score'=>3,'strategic_value'=>3], 'payback_months'=>4, 'effort_md'=>35, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>['Payroll data','Collective agreement rules']],
// Marketing
'PP025' => ['quali'=>['time_fte_saved'=>1.5,'risk_reduction'=>2,'compliance_uplift'=>2,'cx_impact'=>3,'brand_score'=>3,'strategic_value'=>4], 'payback_months'=>4, 'effort_md'=>50, 'complexity'=>4, 'risk_of_failure'=>2, 'deps'=>['Ad platforms','Analytics','CDP']],
'PP026' => ['quali'=>['time_fte_saved'=>3.0,'risk_reduction'=>1,'compliance_uplift'=>2,'cx_impact'=>4,'brand_score'=>4,'strategic_value'=>4], 'payback_months'=>2, 'effort_md'=>30, 'complexity'=>2, 'risk_of_failure'=>1, 'deps'=>['CMS','Brand guidelines']],
'PP027' => ['quali'=>['time_fte_saved'=>1.0,'risk_reduction'=>2,'compliance_uplift'=>3,'cx_impact'=>4,'brand_score'=>3,'strategic_value'=>3], 'payback_months'=>3, 'effort_md'=>40, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>['Sending infrastructure','Seeds']],
// Security
'PP028' => ['quali'=>['time_fte_saved'=>1.5,'risk_reduction'=>5,'compliance_uplift'=>5,'cx_impact'=>1,'brand_score'=>4,'strategic_value'=>4], 'payback_months'=>4, 'effort_md'=>50, 'complexity'=>4, 'risk_of_failure'=>2, 'deps'=>['Access logs','Role matrix']],
'PP029' => ['quali'=>['time_fte_saved'=>2.0,'risk_reduction'=>5,'compliance_uplift'=>5,'cx_impact'=>2,'brand_score'=>5,'strategic_value'=>5], 'payback_months'=>3, 'effort_md'=>55, 'complexity'=>4, 'risk_of_failure'=>2, 'deps'=>['Data catalog','Consent logs']],
'PP030' => ['quali'=>['time_fte_saved'=>2.0,'risk_reduction'=>5,'compliance_uplift'=>5,'cx_impact'=>3,'brand_score'=>5,'strategic_value'=>5], 'payback_months'=>3, 'effort_md'=>70, 'complexity'=>5, 'risk_of_failure'=>3, 'deps'=>['Transaction stream','Graph DB','Model retraining']],
// Operations
'PP031' => ['quali'=>['time_fte_saved'=>2.0,'risk_reduction'=>5,'compliance_uplift'=>3,'cx_impact'=>4,'brand_score'=>4,'strategic_value'=>4], 'payback_months'=>4, 'effort_md'=>50, 'complexity'=>4, 'risk_of_failure'=>2, 'deps'=>['ITSM','Runbooks','Monitoring']],
'PP032' => ['quali'=>['time_fte_saved'=>1.5,'risk_reduction'=>4,'compliance_uplift'=>3,'cx_impact'=>2,'brand_score'=>3,'strategic_value'=>4], 'payback_months'=>5, 'effort_md'=>45, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>['iPaaS/middleware','API access']],
// Direction
'PP033' => ['quali'=>['time_fte_saved'=>1.0,'risk_reduction'=>2,'compliance_uplift'=>1,'cx_impact'=>2,'brand_score'=>3,'strategic_value'=>4], 'payback_months'=>4, 'effort_md'=>30, 'complexity'=>2, 'risk_of_failure'=>1, 'deps'=>['KPI sources','OKR tool']],
'PP034' => ['quali'=>['time_fte_saved'=>2.0,'risk_reduction'=>2,'compliance_uplift'=>2,'cx_impact'=>2,'brand_score'=>3,'strategic_value'=>4], 'payback_months'=>3, 'effort_md'=>35, 'complexity'=>3, 'risk_of_failure'=>1, 'deps'=>['BI warehouse','Templates']],
'PP035' => ['quali'=>['time_fte_saved'=>3.0,'risk_reduction'=>5,'compliance_uplift'=>3,'cx_impact'=>2,'brand_score'=>4,'strategic_value'=>5], 'payback_months'=>6, 'effort_md'=>75, 'complexity'=>4, 'risk_of_failure'=>3, 'deps'=>['Data room access','NLP pipeline']]
];
// ======================================================
// SCALING FACTORS — function of company size / maturity / vertical
// ======================================================
$scaling_factors = [
'company_size' => [
'small' => ['label'=>'PME < 10M€ CA', 'multiplier'=>0.35, 'employees'=>'<100'],
'mid' => ['label'=>'ETI 10-100M€ CA', 'multiplier'=>1.00, 'employees'=>'100-500'],
'large' => ['label'=>'Grande Ent. 100M€-1Md€','multiplier'=>2.40, 'employees'=>'500-5000'],
'enterprise' => ['label'=>'Groupe > 1Md€ CA', 'multiplier'=>5.50, 'employees'=>'>5000']
],
'maturity_ai' => [
'low' => ['label'=>'Faible (pas d\'IA)', 'multiplier'=>1.30, 'note'=>'gap plus gros = plus de gain'],
'medium' => ['label'=>'Moyenne (IA partielle)','multiplier'=>1.00, 'note'=>'baseline'],
'high' => ['label'=>'Élevée (IA déployée)', 'multiplier'=>0.60, 'note'=>'quick-wins plus rares']
],
'verticals' => [
'retail' => ['label'=>'Retail', 'multiplier'=>1.10, 'amplified_depts'=>['sales','supply','marketing']],
'pharma' => ['label'=>'Pharma', 'multiplier'=>1.25, 'amplified_depts'=>['manufacturing','security','marketing']],
'banque' => ['label'=>'Banque', 'multiplier'=>1.40, 'amplified_depts'=>['security','sales','finance']],
'industrie' => ['label'=>'Industrie', 'multiplier'=>1.20, 'amplified_depts'=>['manufacturing','supply','operations']],
'services' => ['label'=>'Services', 'multiplier'=>1.00, 'amplified_depts'=>['hr','sales','direction']],
'consulting' => ['label'=>'Conseil', 'multiplier'=>0.90, 'amplified_depts'=>['hr','direction','sales']],
'energie' => ['label'=>'Énergie', 'multiplier'=>1.30, 'amplified_depts'=>['manufacturing','supply','security']],
'tech' => ['label'=>'Tech/SaaS', 'multiplier'=>0.80, 'amplified_depts'=>['sales','operations','marketing']],
'public' => ['label'=>'Secteur public','multiplier'=>0.70, 'amplified_depts'=>['security','hr','finance']]
]
];
// ======================================================
// PROGRESSIVE ROI CURVE — adoption over 12 months
// ======================================================
function roi_curve_12m($full_savings) {
// Ramp up: month 1-3 = 0→40%, month 4-9 = 40→90%, month 10-12 = 90→100%
$curve = [];
$ramp = [0.00, 0.05, 0.15, 0.30, 0.45, 0.60, 0.72, 0.82, 0.90, 0.95, 0.98, 1.00];
foreach ($ramp as $i => $pct) {
$curve[] = ['month'=>$i+1, 'pct'=>round($pct*100,1), 'savings_cumul'=>round($full_savings*$pct)];
}
return $curve;
}
// ======================================================
// MERGE V66 + enrichment
// ======================================================
$agents_full = [];
foreach ($pain_points as $pp) {
$id = $pp['id'];
$en = $enrichment[$id] ?? [
'quali'=>['time_fte_saved'=>1,'risk_reduction'=>3,'compliance_uplift'=>3,'cx_impact'=>3,'brand_score'=>3,'strategic_value'=>3],
'payback_months'=>6, 'effort_md'=>50, 'complexity'=>3, 'risk_of_failure'=>2, 'deps'=>[]
];
// Qualitative score composite /100
$quali = $en['quali'];
$quali_composite = round(($quali['time_fte_saved']*4 + $quali['risk_reduction']*4 + $quali['compliance_uplift']*3 + $quali['cx_impact']*3 + $quali['brand_score']*2 + $quali['strategic_value']*4) * 5, 1);
// Implementation cost estimate (WEVAL TJM moy 1200€ MD)
$impl_cost_eur = $en['effort_md'] * 1200;
// Baseline NPV 3 years (simplified: savings - impl_cost - 20% maintenance/year)
$savings = $pp['savings_eur_year'];
$npv_3y = ($savings * 3) - $impl_cost_eur - ($savings * 0.2 * 3);
$agents_full[] = array_merge($pp, [
'qualitative' => $quali,
'qualitative_composite_score' => $quali_composite,
'payback_months' => $en['payback_months'],
'effort_md' => $en['effort_md'],
'implementation_cost_eur' => $impl_cost_eur,
'complexity' => $en['complexity'],
'risk_of_failure' => $en['risk_of_failure'],
'dependencies' => $en['deps'],
'npv_3y_baseline_eur' => round($npv_3y),
'roi_ratio_3y' => $impl_cost_eur > 0 ? round($npv_3y / $impl_cost_eur, 2) : 0,
'roi_curve_12m' => roi_curve_12m($savings)
]);
}
// Total baseline
$total_savings = array_sum(array_column($agents_full, 'savings_eur_year'));
$total_impl_cost = array_sum(array_column($agents_full, 'implementation_cost_eur'));
$total_effort_md = array_sum(array_column($agents_full, 'effort_md'));
$avg_payback = $agents_full ? round(array_sum(array_column($agents_full, 'payback_months'))/count($agents_full), 1) : 0;
echo json_encode([
'generated_at' => date('c'),
'version' => 'V67',
'tool' => 'WEVAL ROI Simulator Agent-by-Agent',
'summary' => [
'agents_count' => count($agents_full),
'total_savings_baseline_eur' => $total_savings,
'total_implementation_cost_eur' => $total_impl_cost,
'total_effort_md' => $total_effort_md,
'avg_payback_months' => $avg_payback,
'global_npv_3y_eur' => array_sum(array_column($agents_full, 'npv_3y_baseline_eur')),
'dogfood_weval_savings_eur' => 2400000
],
'agents' => $agents_full,
'scaling_factors' => $scaling_factors,
'instructions' => [
'client_savings_formula' => 'baseline_savings_eur * company_size.multiplier * maturity_ai.multiplier * vertical.multiplier * (dept matches vertical.amplified_depts ? 1.25 : 1.0)',
'total_pack_formula' => 'SUM(selected_agents.adjusted_savings) - SUM(selected_agents.implementation_cost_eur)',
'roi_quali_formula' => 'WEIGHTED_AVG(quali axes) * vertical_strategic_alignment'
]
], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);