added sales summary

This commit is contained in:
2026-10-16 15:37:01 +02:00
parent e17a14d58e
commit ad4bac5874
7 changed files with 2140 additions and 4 deletions
+26
View File
@@ -211,6 +211,32 @@ class MagoSalesStats
];
}
/**
* SOMMARIO (semafori): soglie [verde, rosso]. Tra le due = giallo.
* Per gli indicatori "più alto è meglio" verde se >= primo valore, rosso se < secondo.
* Per quelli "più basso è meglio" verde se <= primo valore, rosso se > secondo.
*/
const SUMMARY_THRESHOLDS = [
'growth' => [3, -3], // % crescita vs stessa data anno prima (fatturato, ordinato, previsione)
'b2b' => [1.05, 0.95], // book-to-bill 90 gg
'cover_weeks' => [8, 4], // settimane di lavoro in portafoglio
'late_pct' => [10, 25], // % del portafoglio già oltre data ZIBO (più basso è meglio)
'risk_pct' => [3, 8], // % fatturato 12 mesi di clienti dormienti/persi (più basso è meglio)
'top5_pct' => [40, 60], // % fatturato 12 mesi dei primi 5 clienti (più basso è meglio)
'cn_pct' => [1.5, 3], // % note di credito su fatturato 12 mesi (più basso è meglio)
'customers' => [0, -5], // % variazione clienti attivi 12 mesi
];
/** Semaforo: 'green' | 'yellow' | 'red' | 'grey' (dato non disponibile). */
public static function light($value, $key, $lowerIsBetter = false)
{
if ($value === null || !is_finite((float)$value)) return 'grey';
[$g, $r] = self::SUMMARY_THRESHOLDS[$key];
$v = (float)$value;
if ($lowerIsBetter) return $v <= $g ? 'green' : ($v > $r ? 'red' : 'yellow');
return $v >= $g ? 'green' : ($v < $r ? 'red' : 'yellow');
}
/** Etichette dei tipi documento (tabella documenti). */
const INVOICE_TYPE_LABELS = [
3407874 => 'Fattura',