Spaces:
Sleeping
Sleeping
| import numpy as np | |
| from src.config import cfg | |
| def get_final_coverage_matrix(schedule, employees): | |
| """ | |
| Proietta il genoma ottimizzato (la schedule finale) sulla matrice temporale. | |
| Genera il tensore 2D di copertura reale (Staffing effettivo) | |
| utilizzato per il rendering grafico su UI e l'analisi finale degli scostamenti. | |
| """ | |
| num_days = 7 | |
| num_slots = cfg.daily_slots | |
| # Inizializzazione matrice globale di copertura | |
| coverage = np.zeros((num_days, num_slots), dtype=int) | |
| for i, emp in enumerate(employees): | |
| # Estrazione del fenotipo (firma oraria comprensiva di pause VDT) | |
| mask = emp['mask'] | |
| for day in range(num_days): | |
| start = schedule[i, day] | |
| # Applicazione solo se il dipendente è schedulato (esclude OFF/Assenze) | |
| if start >= 0: | |
| # Boundary check: tronca la maschera se il turno sforerebbe la griglia oraria del giorno | |
| end = min(start + len(mask), num_slots) | |
| real_len = end - start | |
| # Proiezione algebrica della maschera operativa sulla coverage globale | |
| if real_len > 0: | |
| coverage[day, start:end] += mask[:real_len] | |
| return coverage |