Gestione di Budget e Contratti con GLPI

Passo dopo passo di contratti, budget, fornitori e ammortamento in GLPI: come registrarli, far scattare davvero gli avvisi di scadenza (cron + glpi_alerts), diagnosticare i contratti in scadenza con SQL e scegliere il metodo di ammortamento corretto.

In questo articolo8 sezioni

Gestire l'IT senza controllo finanziario è navigare senza bussola. GLPI offre moduli nativi per contratti, budget, fornitori e ammortamento, tutti integrati con asset e ticket. In pratica, però, la parte difficile non è l'inserimento: è far scattare gli avvisi e far quadrare i numeri.

Contratti: cosa registrare (e cosa spesso manca)

In Gestione > Contratti, ogni contratto deve contenere:

  • Identificazione: numero, tipo (supporto, manutenzione, noleggio, licenza) e fornitore collegato.
  • Validità: data di inizio e durata in mesi. GLPI non memorizza la data di fine; la calcola dall'inizio più la durata.
  • Preavviso (notice): in mesi. Definisce con quanto anticipo deve arrivare l'avviso di rinnovo.
  • Rinnovo: mai, tacito o espresso.
  • Costi: nella scheda costi, con periodicità (mensile, annuale) affinché il consumo coincida con il budget.
  • Asset coperti: colleghi computer, server e altri elementi per sapere cosa resta senza copertura alla scadenza.

La trappola classica: registrare il contratto con durata 0 (indeterminata). Senza durata non c'è una data di fine calcolabile, e l'avviso di scadenza semplicemente non scatta mai.

Far scattare davvero gli avvisi

Tre livelli devono essere attivi contemporaneamente, altrimenti non parte alcuna e-mail:

  1. Notifiche globali abilitate in Configurazione > Notifiche, con un destinatario reale configurato.
  2. Avviso attivato sul contratto stesso (fine contratto o preavviso). Il valore predefinito viene dalla chiave default_contract_alert.
  3. Azione automatica in esecuzione. L'attività contract invia solo se il cron di GLPI viene realmente richiamato.

Negli ambienti dei clienti, il guasto numero uno è il cron fermo. Si assicuri che GLPI venga avviato dal sistema operativo, e non solo quando qualcuno apre l'interfaccia:

# /etc/cron.d/glpi - avvia le azioni automatiche di GLPI ogni minuto
* * * * * www-data /usr/bin/php /var/www/html/glpi/front/cron.php >/dev/null 2>&1

Poi, in Configurazione > Azioni automatiche, apra l'attività contract e verifichi: modalità CLI/esterna, frequenza (giornaliera per impostazione predefinita) e la data dell'ultima esecuzione. Se la modalità è "GLPI" (interna), l'attività dipende da qualcuno che naviga nel sistema al momento giusto, il che è fragile.

L'avviso configurato che non reinvia

Questo è il dettaglio che emerge solo nell'operatività quotidiana: GLPI scrive in glpi_alerts ogni notifica già inviata per non duplicare. Se l'e-mail è fallita (SMTP errato, casella piena) ma la riga è stata scritta, GLPI la considera "già avvisato" e non reinvia, anche dopo aver corretto l'SMTP. Per forzare il reinvio di un contratto specifico, pulisca il marcatore dell'avviso:

-- Trovare l'id del contratto per nome
SELECT id, name FROM glpi_contracts WHERE name LIKE '%Supporto Datacenter%';

-- Rimuovere il marcatore di avviso già inviato (es. contratto 42)
DELETE FROM glpi_alerts
WHERE itemtype = 'Contract' AND items_id = 42;

Alla successiva esecuzione del cron, l'attività contract rivaluta la scadenza e reinvia. Lo stesso vale per le garanzie, sostituendo con itemtype = 'Infocom'.

Diagnosi rapida: contratti in scadenza

Prima di fidarsi del cruscotto, una SELECT diretta conferma cosa scade davvero nei prossimi 90 giorni, con fornitore e giorni rimanenti:

SELECT c.id,
       c.name                                            AS contratto,
       s.name                                            AS fornitore,
       c.begin_date,
       DATE_ADD(c.begin_date, INTERVAL c.duration MONTH) AS fine,
       DATEDIFF(DATE_ADD(c.begin_date, INTERVAL c.duration MONTH),
                CURDATE())                               AS giorni_rimanenti
FROM glpi_contracts c
LEFT JOIN glpi_contracts_suppliers cs ON cs.contracts_id = c.id
LEFT JOIN glpi_suppliers s            ON s.id = cs.suppliers_id
WHERE c.is_deleted  = 0
  AND c.is_template = 0
  AND c.duration    > 0
  AND DATE_ADD(c.begin_date, INTERVAL c.duration MONTH)
      BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 90 DAY)
ORDER BY fine ASC;

La esegua come query di sola lettura. È lo stesso calcolo che fa l'interfaccia, utile per verificare prima di un rinnovo in blocco.

Budget collegati a contratti e acquisti

In Gestione > Budget, definisca l'importo, il periodo (annuale, semestrale o per progetto) e il tipo. Il punto che molti ignorano: il budget in GLPI è un riferimento di monitoraggio, non un blocco. Non impedisce registrazioni oltre il tetto; mostra pianificato contro consumato non appena collega i costi dei contratti e le informazioni finanziarie degli asset (Infocom) a quel budget. Senza questo collegamento, il consumo resta a zero e il report inganna.

Ammortamento degli asset

Ogni asset ha una scheda Gestione (Infocom) con valore di acquisto, data di acquisizione, garanzia e ammortamento. GLPI calcola il valore contabile automaticamente in base al tipo e alla durata. Scegliere il metodo giusto evita distorsioni nel TCO:

ScenarioTipo (sink_type)Durata tipica (anni)Nota
Portatili e desktopLineare4 a 5Perdita costante; semplice da verificare.
Server e storageLineare5 a 7Segua in parallelo la garanzia estesa.
Apparecchiature con perdita accelerata all'inizioDecrescente3 a 5Richiede un coefficiente (sink_coeff) coerente.
Licenza o asset senza valore residuo rilevanteLineare1 a 3Allinei la durata alla validità del contratto.

Imposti i valori predefiniti in Configurazione > Generale > scheda Asset per non compilarli uno per uno. L'errore comune qui è lasciare vuota la data di inizio utilizzo: senza di essa GLPI non ha un punto di partenza per ammortizzare, e il valore contabile resta uguale a quello di acquisto per sempre.

Report e costo per ticket

  • Asset per valore: quanto è investito per sede o entità.
  • Contratti in scadenza: lo stesso elenco della SELECT sopra, ora nel cruscotto.
  • Ammortamento: valore contabile del parco nel tempo.
  • Costo per ticket: valore del contratto diviso per il numero di ticket gestiti da quel fornitore, ottimo per sostenere una rinegoziazione.

Checklist operativa NexTool

Quando prendiamo in carico gli ambienti dei clienti, prima di fidarci della gestione finanziaria di GLPI validiamo sempre la stessa sequenza: cron che richiama front/cron.php dal sistema operativo (non dal browser); attività contract in modalità esterna con un'ultima esecuzione recente; notifiche globali attive e un destinatario reale sull'avviso; contratti senza un duration = 0 improprio; e una scansione di glpi_alerts quando il cliente dice che "ha smesso di ricevere e-mail". Nove casi su dieci di "GLPI non avvisa della scadenza" ricadono in uno di questi cinque punti, non in un bug del prodotto.

Deve mettere in funzione contratti, budget e avvisi di GLPI da un capo all'altro? NexTool implementa e mantiene questi flussi in ambienti di clienti B2B: scopra il supporto operativo NexTool.


Revisionato dal team NexTool Solutions.

Domande Frequenti

Quasi sempre è una di tre cause: notifiche globali disattivate, avviso non abilitato sul contratto stesso, oppure l'azione automatica 'contract' che non gira perché il cron di sistema (front/cron.php) non è pianificato. Verifichi tutte e tre prima di sospettare un bug.

Non la memorizza. La data di fine è calcolata da begin_date più duration (in mesi). Per questo un contratto con durata 0 (indeterminata) non genera mai un avviso di scadenza.

GLPI registra ogni avviso inviato in glpi_alerts per evitare duplicati. Elimini la riga corrispondente (itemtype uguale a 'Contract' o 'Infocom' e l'items_id dell'oggetto) e la successiva esecuzione del cron rivaluta e reinvia.

Il lineare distribuisce la perdita di valore in parti uguali lungo la durata (sink_time). Il decrescente concentra la perdita all'inizio con un coefficiente (sink_coeff). Per un parco IT standard, il lineare è più semplice da verificare.

No. Il budget è un riferimento di monitoraggio (pianificato contro consumato), non un controllo bloccante. Il consumo appare solo quando collega i costi dei contratti e le informazioni finanziarie degli asset al budget.

Hai bisogno di aiuto?