Spaces:
Sleeping
Sleeping
File size: 1,305 Bytes
9e62f55 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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 |