fastcheck/TENANT_ACTIVE_CRITERIA.md
2026-04-08 13:58:46 -04:00

3.8 KiB

Criteri per Tenant Attivi - Sistema Duxiter

📊 Panoramica

Questo documento descrive i criteri utilizzati dal sistema Duxiter per determinare quando un tenant è considerato "attivo" nelle statistiche del pannello amministrativo.

Criterio Principale

Un tenant è considerato attivo se ha utilizzato almeno una valutazione (evaluation).

Dettagli Tecnici

Il sistema determina l'attività di un tenant attraverso i seguenti passaggi:

  1. Ricerca nelle operazioni di credito: Il sistema cerca nella collezione CreditOperation tutte le operazioni con:

    • operationType: 'evaluation'
    • creditsChanged < 0 (deduzioni di credito, che indicano valutazioni effettive)
  2. Raggruppamento per tenant: Le operazioni vengono raggruppate per tenantId per contare quante valutazioni ha utilizzato ogni tenant

  3. Conteggio tenant attivi: Il numero di tenant attivi corrisponde al numero di tenant unici che appaiono nel risultato dell'aggregazione

🔍 Implementazione nel Codice

Posizione

  • File: /server/src/controllers/tenant.controller.ts
  • Funzione: getTenantStatistics
  • Linee: circa 244-254

Codice di Riferimento

// Aggregazione per trovare tenant con valutazioni utilizzate
const tenantEvaluationStats = await CreditOperation.aggregate([
  {
    $match: {
      operationType: 'evaluation',
      creditsChanged: { $lt: 0 }  // Solo deduzioni (valutazioni effettive)
    }
  },
  {
    $group: {
      _id: '$tenantId',
      evaluationsUsed: { $sum: 1 },
      lastEvaluationDate: { $max: '$createdAt' }
    }
  }
]);

// Il numero di tenant attivi = numero di tenant nel risultato
const activeTenants = tenantEvaluationStats.length;

📈 Distinzioni Aggiuntive

Tenant Recentemente Attivi

Il sistema distingue anche i tenant recentemente attivi (ultimi 30 giorni) da quelli attivi in generale:

const thirtyDaysAgo = new Date();
thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
const recentlyActiveTenants = tenantEvaluationStats.filter(stat => 
  stat.lastEvaluationDate && new Date(stat.lastEvaluationDate) > thirtyDaysAgo
).length;

Distribuzione dell'Utilizzo

I tenant attivi vengono ulteriormente categorizzati in base al loro livello di utilizzo:

  • Heavy users: > 50 valutazioni utilizzate
  • Moderate users: 11-50 valutazioni utilizzate
  • Light users: 1-10 valutazioni utilizzate

🎯 Esempi Pratici

Scenario 1: Tenant Attivo

  • Tenant ID: 6827419eecdd4cff1cd6ad69
  • Ha 2 operazioni di tipo 'evaluation' con creditsChanged: -1 e creditsChanged: -10
  • Risultato: Considerato attivo

Scenario 2: Tenant Inattivo

  • Tenant ID: 68655c938b15fbb6b1ed48be
  • Non ha operazioni di tipo 'evaluation' con creditsChanged < 0
  • Risultato: Non considerato attivo

🔄 Aggiornamenti Recenti

Data: Agosto 2025 Modifica: Il sistema è stato aggiornato per calcolare le statistiche basandosi sulle operazioni di credito reali (CreditOperation) invece che sui campi usageStats dei tenant, che erano obsoleti.

Benefici:

  • Dati più accurati e aggiornati in tempo reale
  • Eliminazione di discrepanze tra statistiche e dati effettivi
  • Maggiore affidabilità del pannello amministrativo

📝 Note Importanti

  1. Solo deduzioni contano: Solo le operazioni con creditsChanged < 0 sono considerate valutazioni effettive
  2. Tempo reale: Le statistiche si aggiornano automaticamente quando vengono create nuove operazioni di credito
  3. Persistenza: Un tenant rimane "attivo" finché ha almeno una valutazione utilizzata, indipendentemente da quando è stata effettuata

🔗 File Correlati

  • /server/src/models/creditOperation.model.ts - Modello delle operazioni di credito
  • /server/src/models/tenant.model.ts - Modello dei tenant
  • /server/src/controllers/tenant.controller.ts - Controller con la logica delle statistiche