106 lines
3.8 KiB
Markdown
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 |