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

106 lines
3.8 KiB
Markdown

# 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
```javascript
// 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:
```javascript
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