116 lines
3.4 KiB
PHP
116 lines
3.4 KiB
PHP
<?php
|
|
require_once 'db/config.php';
|
|
|
|
header('Content-Type: application/json');
|
|
|
|
$profile_id = $_GET['id'] ?? null;
|
|
|
|
if (!$profile_id) {
|
|
echo json_encode(['error' => 'Profile ID is missing.']);
|
|
exit;
|
|
}
|
|
|
|
// Basic AI/Rule-based KPI generation
|
|
function generate_kpi_data($profile) {
|
|
// Default values
|
|
$base_mrr = 5000;
|
|
$base_cac = 400;
|
|
$base_nrr = 95;
|
|
|
|
// Adjust KPIs based on profile data
|
|
if (isset($profile['organization_size'])) {
|
|
switch ($profile['organization_size']) {
|
|
case '1-10':
|
|
$base_mrr = 5000;
|
|
break;
|
|
case '11-50':
|
|
$base_mrr = 25000;
|
|
break;
|
|
case '51-200':
|
|
$base_mrr = 75000;
|
|
break;
|
|
case '201+':
|
|
$base_mrr = 200000;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (isset($profile['market_approach'])) {
|
|
if ($profile['market_approach'] === 'Product-led') {
|
|
$base_nrr = 110;
|
|
$base_cac = 200;
|
|
} elseif ($profile['market_approach'] === 'Sales-led') {
|
|
$base_nrr = 98;
|
|
$base_cac = 800;
|
|
}
|
|
}
|
|
|
|
$current_mrr = $base_mrr * (rand(80, 120) / 100);
|
|
$target_mrr = $base_mrr * 2;
|
|
|
|
$current_cac = $base_cac * (rand(90, 130) / 100);
|
|
$target_cac = $base_cac * 0.8;
|
|
|
|
$current_nrr = $base_nrr * (rand(95, 105) / 100);
|
|
$target_nrr = $base_nrr * 1.1;
|
|
|
|
$kpis = [
|
|
['name' => 'Monthly Recurring Revenue (MRR)', 'current' => number_format($current_mrr), 'target' => number_format($target_mrr)],
|
|
['name' => 'Customer Acquisition Cost (CAC)', 'current' => number_format($current_cac), 'target' => number_format($target_cac)],
|
|
['name' => 'Net Revenue Retention (NRR)', 'current' => round($current_nrr) . '%', 'target' => round($target_nrr) . '%']
|
|
];
|
|
|
|
// Generate sample data for the chart
|
|
$labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'];
|
|
|
|
$mrr_growth_rate = ($target_mrr - $current_mrr) / 5;
|
|
|
|
$datasets = [
|
|
[
|
|
'label' => 'MRR (Actual)',
|
|
'data' => array_map(fn($i) => $current_mrr + ($mrr_growth_rate * $i * (rand(80,120)/100)), range(0, 5)),
|
|
'borderColor' => '#0d6efd',
|
|
'tension' => 0.2
|
|
],
|
|
[
|
|
'label' => 'MRR (Target)',
|
|
'data' => array_map(fn($i) => $current_mrr + ($mrr_growth_rate * $i), range(0, 5)),
|
|
'borderColor' => '#dc3545',
|
|
'borderDash' => [5, 5],
|
|
'tension' => 0.2
|
|
]
|
|
];
|
|
|
|
return [
|
|
'kpis' => $kpis,
|
|
'chartData' => [
|
|
'labels' => $labels,
|
|
'datasets' => $datasets
|
|
]
|
|
];
|
|
}
|
|
|
|
try {
|
|
$pdo = db();
|
|
$stmt = $pdo->prepare("SELECT * FROM gtm_profiles WHERE id = ?");
|
|
$stmt->execute([$profile_id]);
|
|
$profile = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
if (!$profile) {
|
|
echo json_encode(['error' => 'Profile not found.']);
|
|
exit;
|
|
}
|
|
|
|
$kpi_data = generate_kpi_data($profile);
|
|
$kpi_data_json = json_encode($kpi_data);
|
|
|
|
// Save the generated data to the database
|
|
$update_stmt = $pdo->prepare("UPDATE gtm_profiles SET kpi_data = ? WHERE id = ?");
|
|
$update_stmt->execute([$kpi_data_json, $profile_id]);
|
|
|
|
echo json_encode(['success' => true, 'kpi_data' => $kpi_data]);
|
|
|
|
} catch (PDOException $e) {
|
|
error_log('KPI Generation Error: ' . $e->getMessage());
|
|
echo json_encode(['error' => 'Database error during KPI generation.']);
|
|
} |