Turni Polizia Penitenziaria
Preparazione
Ferie
Generazione
Consolidamento
Output
Snapshot

Caricamento...

Seleziona un anno e premi Aggiorna.

Agenti

In servizio
Cognome e NomeGradoRuoloAnz.NottiInizio servizioFine servizio

Limiti Ferie

Come viene calcolato il conteggio (clicca per dettagli)

La verifica conta i giorni di ferie/riposo di ogni agente nel range della sua regola e li confronta con Max gg. Codici considerati equivalenti: C R RD RR (in fase di generazione le domeniche preimpostate C diventano RD: trattarli come equivalenti rende il conteggio invariante).

Regola dei blocchi consecutivi di codici ferie/riposo:

Lunghezza blocco Caso Conta
1 giorno Sempre isolato 0
2 giorni Primo giorno = domenica (pattern dom+lun naturale) 0
2 giorni Primo giorno ≠ domenica 2
N ≥ 3 giorni Qualsiasi combinazione N

Note: giorni non ancora importati in turni_mensili sono trattati come "non ferie" (interrompono il blocco, conteggio conservativo). La verifica e' cross-mese: scansiona l'intero range di ciascuna regola, indipendentemente dai confini di mese.

AgenteDalAlMax ggNote

Ruoli Agente

Ord.NomeInclude PrepostoDescrizioneAttivo

Macroturni

Ord.CodiceCategoriaFamigliaDescrizioneAttivo

Ruoli Ricoperti

Ord.NomePrepostoDescrizioneAttivo

Combinazioni Turno

RuoloMacroturnoMacro FamigliaOrarioOreRuolo RicopertoPrioAttivo

Postazioni

IdSezioneNomeAttivaPrio. anz.

Coppie Postazioni

Ord.SezioneNomePostazione 1Postazione 2StandaloneGiorniPrepostoObbl.Attivo

Scenari Copertura

CoppiaScenarioPostazioneMacroturnoOrarioAgentiRankGiorni attiviValidita'Attivo

Parametri Solver

Come funzionano i pesi: il solver genera i turni cercando di soddisfare più obiettivi contemporaneamente (equità notti, riposi, copertura, ecc.). I pesi determinano la priorità relativa tra questi obiettivi.

  • Peso più alto = il solver dà più importanza a quell'obiettivo (es. aumentare w_notti produce una distribuzione notti più equa, a scapito di altri obiettivi)
  • Peso 0 = l'obiettivo viene ignorato
  • Peso uguale tra più obiettivi = il solver li bilancia equamente

Ordine L2 (rilassamento granulare): quando il solver non trova soluzione con tutti i pesi attivi (L1), entra nel Livello 2 e rilassa progressivamente i pesi nell'ordine qui indicato (1 rilassato per primo, poi 2, 3, ...). La cascata si ferma appena trova una soluzione.

  • Stesso ordine assegnato a più pesi = vengono rilassati contemporaneamente nello stesso sotto-tentativo
  • Vuoto (—) = il peso non viene mai rilassato
  • I gap sono ammessi (es. ordini 1, 3, 5): il solver itera sui valori in ordine crescente ignorando i buchi

La modifica dei pesi influenza il risultato della generazione. Se il risultato non è soddisfacente, provare a variare i pesi e rigenerare. Usare Ripristina Default per tornare ai valori consigliati.

Pesi obiettivi (rilassabili in Livello 2)

ParametroDescrizioneValoreDefaultOrdine L2

Timeout e soglie

ParametroDescrizioneValoreDefault

Regole di Sistema Solo lettura

Queste regole sono implementate nella logica del solver e non sono modificabili dall'interfaccia. I vincoli obbligatori devono sempre essere soddisfatti; quelli preferenziali vengono ottimizzati ma possono essere rilassati se necessario per garantire la copertura.

Gestione Ferie

CodiceTipoDescrizione
FER.1Obbligatorio Il giorno prima dell'inizio ferie viene assegnato turno S (notte), il giorno -2 turno 2 (mattina).
Limite: massimo 4 turni S per giorno. Se più di 4 agenti iniziano ferie lo stesso giorno, solo 4 ricevono S secondo questa priorità:
1° livello: agenti con periodo ferie consecutivo tra 2 e 6 giorni
2° livello: tutti gli altri (1 giorno o 7+ giorni)
• A parità di livello: il più anziano ha precedenza
Gli agenti che eccedono i 4 ricevono M (mattina) al g-1, il g-2 resta libero (assegnato dal solver).
Eccezioni: i preposti puri ricevono sempre M al g-1 (mai S). Stesso trattamento per agenti con flag «non può fare notti» (NOT.1).
Priorità 0: agenti con turno obbligatorio (prio=0 in Combinazioni Turno) ricevono il codice obbligatorio al g-1, g-2 e rientro se la coppia è attiva nel giorno (es. Aule Scolastiche → MA nei giorni LUN-VEN).
FER.2ObbligatorioLe domeniche durante le ferie sono Riposo Settimanale (RD).
FER.3ObbligatorioL'ultimo giorno di ferie è riposo settimanale: RD se domenica, R altrimenti.
FER.4ObbligatorioIl primo giorno di rientro dalle ferie: macroturno 1 (prima), oppure il codice obbligatorio (prio=0) se la coppia è attiva nel giorno. L'orario viene assegnato dal postprocessore.

Turni Notte

CodiceTipoDescrizione
NOT.1ObbligatorioAgenti con flag «non può fare notti» (configurabile in Agenti): il turno S non viene mai assegnato né dal preprocessore né dal solver. Vincolo hard.
NOT.2ObbligatorioPreposti puri con turno SG preimpostato: giorno prima → M (mattina), giorno dopo → R/RD (riposo, RD se domenica); se non possibile → 1 (prima).
NOT.3ObbligatorioVietati due turni notte (S) a distanza inferiore a 3 giorni. Vincolo valido anche nella transizione tra mesi. NOT.5 (preferenziale) scoraggia comunque gap inferiori a seq5_min_gap giorni.
NOT.4ObbligatorioIl turno S può avvenire solo dopo un turno M (mattina). Implica: no S dopo 3, dopo 1, dopo R/RD, dopo C. Vincolo valido anche nella transizione tra mesi.
NOT.5PreferenzialeMinimo 6 giorni tra due notti (S) consecutive dello stesso agente. Configurabile tramite parametri seq5_min_gap e w_seq5.
NOT.6ObbligatorioMassimo 4 turni S per giorno (calcolato dal numero di slot S obbligatori nella copertura). Il solver non può assegnare più notti di quelle previste dalla copertura.

Riposo

CodiceTipoDescrizione
RIP.1ObbligatorioOgni settimana ISO deve avere esattamente un giorno di riposo. Se la settimana ha già riposi preimpostati, il solver non ne assegna altri.
RIP.2PreferenzialeUna percentuale configurabile dei riposi mensili di ogni agente dovrebbe cadere di domenica. Target definito da rip2_target_domenicale (default 50%, 0 disattiva la regola), peso del termine nell'obiettivo da w_rip2. Penalità per agente proporzionale alla deviazione assoluta dal target.
RIP.3PreferenzialeDopo un giorno di riposo (R), preferenza per il turno successivo: 1 (Prima) > 3 (Pomeriggio) > M (Mattina). Priorità orari per turno 1: 17:30 > 16:00 > 14:00 > 12:30.
RIP.4Obbligatorio + Pref.Prima di un giorno di riposo (R/RD): il turno 1 (Prima) è vietato (vincolo obbligatorio). Preferenza: S (Notte) > M (Mattina) > 3 (Pomeriggio). La sequenza ideale è M→S→R.

Sequenza Turni

CodiceTipoDescrizione
SEQ.1ObbligatorioSe il turno del giorno precedente termina alle 00:10, il turno mattutino successivo non può iniziare alle 06:00 (riposo minimo insufficiente). L'agente viene assegnato esclusivamente a slot dalle 07:50 in poi.
SEQ.2PreferenzialeDopo un turno notte (S), preferenza: R/RD (Riposo) > 1 (Prima) > 3 (Pomeriggio) > M (Mattina). Per turno 1 post-notte si assegna l'orario più tardo disponibile (17:30 > 16:00 > 14:00 > 12:30).

Ruoli e Copertura

CodiceTipoDescrizione
RUO.1ObbligatorioPriorità copertura turni Preposto: agenti ruolo Preposto, Preposto+Sezione, Preposto+Sezione+Aule (solo SAB-DOM). Gli agenti con ruolo Aule Scolastiche sono forzati a macroturno M nei giorni LUN-VEN (convertito in MA dalla configurazione scenari).
RUO.2PreferenzialePer gli slot preposto, i P+S più anziani vengono preferiti. Configurabile tramite parametro w_ruo2.
RUO.3ObbligatorioAssegnazione postazioni sezione per anzianità: l'agente più anziano disponibile viene assegnato alla postazione con priorità più alta, indipendentemente dalla postazione assegnata dal solver. Ordine: 1° PT.BOX 2^, 2° PT.CANCELLI 2^, 3° P.T. 3^, 4° PT.BOX 3^, 5° PASSEGGI 3^, 6° PASSEGGI 2^, 7° 3°P.BOX 2^. Cascata per anzianità. Si applica a tutti i macroturni (M, 1, 3, S).
RUO.4PreferenzialePer gli slot HARD con piu agenti eleggibili, sono preferiti gli agenti con priorità di ruolo principale (priorita=1) rispetto a quelli backup (priorita=2). Penalità SOFT per ogni agente backup usato quando ne erano disponibili principali. Configurabile tramite parametro w_ruo4. (ex PRIO.1, rinominata 2026-05-19)

Bilanciamento

CodiceTipoDescrizione
BIL.1PreferenzialeAlternanza macroturni: evitare turni lavorativi uguali su giorni adiacenti (es. M-M, 1-1, 3-3). Non si applica a riposi (R) né a notti (S, già vietate consecutive).
BIL.2PreferenzialeEquilibrio macroturni tra agenti: distribuzione bilanciata di mattine (M) e pomeriggi (3) tra tutti gli agenti nel mese. Complementa l'equità su notti e prime già esistente.
BIL.3PreferenzialeBilanciamento eccesso agenti per slot: penalizzazione quadratica per agenti in più rispetto al fabbisogno. Distribuisce le risorse in surplus equamente tra le coppie. Configurabile tramite parametro w_bil3.
BIL.4ObbligatoriaMax prime serali per agente: ogni agente (P+S, Sezione) può fare al massimo max_prime_sera (default 8) turni Prima con orario inizio ≥ 16:00 nel mese. Preposti puri esclusi. Doppio livello: vincolo hard nel solver + verifica post-swap RUO.3.
BIL.5PreferenzialePreferenza scenario 6 ore rispetto a 8 ore quando l'organico è sufficiente. Penalizzazione (peso 8) per ogni scenario 8h scelto. La preferenza si applica indipendentemente per ogni coppia di piani per ogni giorno. Configurabile tramite parametro w_bil5. (ex RIS.2, rinominata 2026-05-19)

Guida operativa

Per iniziare

Questa applicazione genera il calendario turni mensile della Polizia Penitenziaria: assegna gli agenti alle postazioni rispettando i vincoli operativi e cercando la massima equità.

Il lavoro su ogni mese segue sempre lo stesso ciclo, nell'ordine:

  1. Preparazione — carichi i turni già decisi (ferie, malattie, servizi obbligatori).
  2. Ferie — rivedi e sistemi le ferie del mese.
  3. Generazione — il solver riempie le caselle vuote.
  4. Revisione — controlli il risultato nelle varie viste e correggi a mano se serve.
  5. Consolidamento — congeli il piano come definitivo.
  6. Esporta — scarichi il file Excel da stampare/distribuire.

Seleziona il mese dall'alto (scope Mese, frecce per mese precedente/successivo). Lo scope Anno apre l'analisi annuale.

1. Preparazione — Preimpostati

I preimpostati sono le caselle già decise prima della generazione: ferie (C), malattie/permessi (CS, CSL, PS…), turni obbligati. Il solver li rispetta e non li modifica.

  • Importa Preimpostati: carica i preimpostati da un file Excel (foglio "2^sez"). Le righe con cognome non presente in anagrafica, o agenti fuori servizio nel periodo, vengono saltate e segnalate.
  • Salva Preimpostati: registra sul database le modifiche fatte a mano sulla griglia e ne salva una "foto" (snapshot).
Approfondisci — perché salvare prima di generare

Salvare non è tecnicamente obbligatorio, ma è fortemente consigliato: "Genera Turni" legge comunque le caselle correnti, ma se non hai salvato lo snapshot resta quello vecchio. Di conseguenza "Cancella Generati" riporta all'ultimo snapshot salvato e perde le modifiche non salvate.

Dopo "Cancella Generati" i preimpostati restano, ma vengono ripuliti orario, postazione e ore: resta solo il codice (invariante dei "preimpostati puri").

2. Ferie

Dal pulsante Gestione Ferie sistemi le ferie del mese scegliendo tra due modalità:

  • Rapida: editor veloce, clic diretti sulle caselle.
  • Guidata: proposte con punteggio di equità.
Approfondisci — ferie sospese e annullamento

Le ferie sospese sono ferie tolte temporaneamente perché il sistema non riesce a garantire la copertura quel giorno: appaiono col bordo rosso nella griglia e nell'export Excel.

Annulla Modifiche Ferie riporta allo snapshot dei preimpostati salvato prima delle ultime modifiche (il pulsante è disabilitato se non c'è nulla da annullare). Sulla singola cella, Ripristina riporta al valore dell'ultimo "Salva Preimpostati", anche in una sessione successiva.

3. Generazione

  • Genera Turni: avvia il solver, che assegna gli agenti agli slot di copertura rispettando i vincoli (vedi § Regole) e ottimizzando l'equità. Prima di calcolare, segnala eventuali conflitti di copertura (es. troppe ferie nello stesso giorno).
  • Cancella Generati: rimuove i turni calcolati ma mantiene i preimpostati.
Approfondisci — verifiche prima di generare

Dal menu Output → Altro:

  • Verifica Feasibility: esegue il solver in sola verifica (senza scrivere) per accertare che "Genera Turni" andrà a buon fine.
  • Verifica Preimpostati: controlla i vincoli hard sui preimpostati correnti e segnala eventuali conflitti con un banner.

4. Consolidamento

Consolida Piano congela il mese come definitivo e ne salva una "foto" (snapshot) della configurazione. Da quel momento le modifiche alla configurazione (coppie, scenari, pesi) non impattano più il mese consolidato.

Dopo il consolidamento puoi comunque fare correzioni puntuali (override, spostamenti, conversione orari 6h↔8h) — vedi Operazioni puntuali. Infine Esporta Excel per il file da stampare/distribuire.

Vista Turni

La matrice principale agente × giorno con il macroturno di ciascuna casella (M mattina, 3 pomeriggio, 1 prima, S notte; suffisso F = Preposto). È la vista per la maggior parte delle modifiche a mano.

Si modifica con la barra dei pennelli a sinistra: scegli un codice (o la Gomma), poi clic su una casella o trascina su più caselle. Esc deseleziona il pennello.

Approfondisci — annullare e clic destro

Ctrl+Z (o il pulsante Annulla) ripristina le ultime modifiche; lo storico si svuota cambiando mese.

Il clic destro su una casella già corretta apre il menu "Annulla correzione" (annulla scambio, annulla spostamento, ripristina codice originale, annulla conversione orari): serve a tornare indietro su una correzione, non a farne di nuove. Le voci mostrate sono solo quelle realmente applicabili.

Vista Programmato Mensile Personale

Matrice agente × giorno che mostra il codice di ogni casella (M, 3, 1, S, R, C…), pensata come prospetto personale leggibile. Evidenzia le ferie sospese e le correzioni post-generazione.

Questa vista mostra i codici, non gli orari. Per gli orari di inizio/fine usa la vista Carpetta.

Vista Postazioni

Matrice postazione × giorno: ogni cella mostra il cognome dell'agente che copre quella postazione quel giorno. Serve a leggere la copertura reale e individuare gli slot scoperti.

Approfondisci — cosa indicano le celle
  • Slot scoperti evidenziati (postazione obbligatoria senza agente).
  • Distinzione tra codice preimpostato e generato.
  • Bande colorate per gli scambi registrati.
  • Scenario 6h/8h rilevato automaticamente dai turni del giorno, con legenda.

Da qui (clic destro su una cella) puoi anche spostare un agente su un'altra postazione.

Vista Carpetta (e Carpetta+)

Mostra un giorno alla volta (navigabile a schede), con coppie/postazioni, orari e agenti assegnati — vicina al formato di stampa. Carpetta+ è una variante sperimentale che affianca il codice del giorno prima e del giorno dopo.

È il punto da cui partono le correzioni di copertura: clic su uno slot scoperto per spostarci un agente.

Approfondisci — la cella "+" verde (conversione 6h↔8h)

La cella "+" verde tratteggiata appare su un macroturno extra disponibile in un altro scenario (es. il "3" quando la coppia è in 8h). Cliccandola apri "Aggiungi agente al macroturno": il sistema può poi proporti la conversione orari 6h↔8h della coppia per quel giorno (vedi Operazioni puntuali).

Vista Analisi

Riepilogo grafico del mese (grafici Chart.js) per controllare equità e copertura. Comprende:

  • Distribuzione turni per agente (notti, mattine, prime, pomeriggi).
  • Ore totali per agente, confrontate con la media.
  • Domeniche lavorate per agente.
  • Copertura giornaliera (agenti in servizio per giorno).
  • Distribuzione per giorno della settimana e riepilogo assenze.

Viste Snapshot (sola lettura)

Le viste nel gruppo Snapshot sono fotografie congelate dello stato in momenti chiave, in sola lettura. Servono a confrontare lo stato attuale con i passaggi precedenti.

Approfondisci — i cinque snapshot
  • Preimpostati — lo stato prima della generazione.
  • Post modifica ferie — dopo l'applicazione delle ferie.
  • Post generazione — il risultato del solver.
  • Configurazione — coppie/scenari/parametri congelati al "Genera Turni".
  • Pre-consolidamento — il piano dopo le correzioni manuali, prima di consolidare.

Operazioni puntuali

Correzioni mirate su singole caselle, utilizzabili anche dopo il consolidamento:

  • Override cella: forza un codice diverso su una casella (dalla finestra di sostituzione cella).
  • Sposta agente: muove un agente su una postazione/slot — dalla vista Carpetta (clic su slot scoperto) o Postazioni.
  • Conversione orari 6h↔8h: riallinea al volo gli orari di una coppia in un singolo giorno quando cambia la disponibilità del personale. Parte dalla cella "+" verde in Carpetta; il sistema propone la conversione e attende conferma.
  • Annullamenti: clic destro sulla cella corretta → "Annulla correzione" (scambio, spostamento, ripristino codice, conversione orari). In alternativa Ctrl+Z per le modifiche di pennello.

Le azioni proposte sono sempre filtrate in base a ciò che è realmente applicabile sulla casella selezionata.

Glossario

Riferimento rapido di codici e termini ricorrenti.

Macroturni e suffisso F
  • M — Mattina (~06:00–14:00)
  • 3 — Pomeriggio (~11:30–18:10)
  • 1 — Prima/serale (~16:00–00:10)
  • S — Notte
  • Suffisso F (MF, 3F, 1F, SF) — lo stesso turno svolto come Preposto
  • MA — Aule Scolastiche (mattina, solo Lun–Ven)
Riposi e assenze
  • R riposo · RD riposo domenicale · RR riposo (variante)
  • C congedo ordinario (ferie) · CS/CSL/PS… malattia/permessi
  • NS non in servizio (fuori dal periodo di servizio dell'agente)
Termini
  • Preimpostato — casella fissata dall'utente, non modificabile dal solver.
  • Slot HARD — copertura obbligatoria; extra-risorse (SOFT) — copertura opzionale, riempita per ordine di priorità se ci sono agenti.
  • Coppia di postazioni — due postazioni che operano insieme, con scenari orari 6h/8h.
  • Ruoli — Preposto, Sezione, Preposto+Sezione (e variante Aule).

Problemi comuni

  • "Genera Turni" fallisce / soluzione non trovata: usa Verifica Feasibility per la diagnosi. Cause tipiche: copertura non soddisfacibile o ferie troppo concentrate negli stessi giorni.
  • Copertura scoperta: apri la vista Postazioni per vedere quali slot mancano; la vista Analisi aiuta a capire l'equilibrio complessivo.
  • Una modifica alla configurazione non si riflette su un mese già consolidato: è voluto — il consolidamento congela la configurazione del mese.
  • Ho perso modifiche dopo "Cancella Generati": probabilmente non avevi premuto "Salva Preimpostati"; il comando riporta all'ultimo snapshot salvato.

La logica dei vincoli (cosa il sistema rispetta) è in § Regole; i pesi delle regole preferenziali si regolano in ⚙ Configurazione.

Duplica combinazioni per altri ruoli

Seleziona una o piu' combinazioni di origine, scegli i ruoli destinazione e crea le righe corrispondenti. Le combinazioni gia' esistenti per il ruolo destinazione vengono saltate automaticamente.
RuoloMacroturnoOrarioOreRuolo Ricoperto

Ruoli destinazione (multi-select)

Analisi pre-generazione

Importa preimpostati da Excel

L'import sovrascriverà i preimpostati esistenti nell'intervallo selezionato. Le righe con cognome non presente in anagrafica vengono saltate (elenco mostrato nell'esito).

Pronto.