Medir o tempo de um chamado e cobrar esse tempo são dois problemas diferentes. Um é sobre produtividade da equipe: quanto tempo real o técnico gastou. O outro é sobre contrato: quantas horas o cliente já consumiu e quanto ainda tem. Confundir os dois é o erro que mais vemos na sustentação - e a escolha entre ActualTime e Contract Hours começa exatamente aí.
O problema: três planos de "tempo" no GLPI
Antes de escolher plugin, vale separar três coisas que o GLPI trata de formas diferentes:
- Tempo estimado - a duração que você planejou para a tarefa.
- Tempo real - quanto o técnico de fato levou, cronometrado.
- Tempo faturável - o que entra na conta do contrato, já arredondado e com regras comerciais.
O campo nativo Duração da tarefa (armazenado em segundos no actiontime) resolve o básico, mas exige digitação manual e não sabe nada sobre contrato. É aí que entram os dois plugins.
ActualTime (TICGAL)
O ActualTime é um plugin gratuito e open source da TICGAL. Ele adiciona botões de play, pause e stop na tarefa do chamado e cronometra o tempo real que o técnico passa nela. Ao parar, grava esse tempo medido na duração da tarefa. O foco é honesto e estreito: transformar "acho que levei uns 40 minutos" em um número medido. Não tem noção de contrato, saldo ou faturamento - e não precisa ter, porque o objetivo dele é métrica de esforço, não cobrança.
Contract Hours (NexTool)
O Contract Hours é um módulo licenciado do NexTool voltado a quem vende pacote de horas. O cronômetro fica na timeline do chamado, mas o que ele produz é diferente: ao parar, o tempo é arredondado para o mínimo faturável configurado (padrão 15 minutos), vira uma TicketTask privada automática e debita o saldo do contrato vinculado àquele chamado. Ele carrega o que o ActualTime não tem: quota mensal por contrato, extrato de consumo, dashboard de "Consumo de Horas" para o cliente na interface simplificada, alertas de contrato expirado ou estourado e, desde a versão 3.6, o conceito de horas não faturáveis (cortesia) - tempo que é registrado mas não desconta do saldo.
Comparativo lado a lado
| Critério | Duração nativa (manual) | ActualTime (TICGAL) | Contract Hours (NexTool) |
|---|---|---|---|
| Como o tempo é capturado | Digitação manual | Cronômetro na tarefa | Cronômetro na timeline |
| Mede tempo real | Não (o que você digitar) | Sim | Sim |
| Arredondamento faturável | Não | Não | Sim (mínimo configurável, múltiplo de 5) |
| Vínculo com contrato | Não | Não | Sim (por entidade; grupo E categoria) |
| Saldo / quota de horas | Não | Não | Sim (quota mensal + alertas) |
| Horas não faturáveis (cortesia) | Não | Não | Sim (toggle por tarefa) |
| Extrato / relatório de consumo | Nativo (limitado) | Básico | Detalhado por ciclo / período |
| Dashboard para o cliente | Não | Não | Sim ("Consumo de Horas") |
| Onde grava o tempo | actiontime | actiontime | actiontime (fonte de verdade) + saldo |
| Licença | Nativo | Gratuito (GPL) | Licenciado |
| GLPI suportado | 10 e 11 | 10 e 11 | 11 apenas |
O trade-off que importa na operação
Na sustentação, já rodamos os dois: ActualTime em clientes onde a dor era produtividade interna, Contract Hours onde o contrato de horas era o coração do faturamento. O detalhe que só aparece operando é que os dois terminam tocando o mesmo campo nativo, o actiontime da tarefa. O ActualTime grava ali o tempo real medido; o Contract Hours trata o actiontime da tarefa como fonte de verdade (a partir da 3.4.2) e cria uma tarefa privada com o tempo já arredondado. Rodar os dois no mesmo chamado, sem uma regra de quem é o "dono" da tarefa, gera duas durações concorrentes - a medição crua do técnico brigando com o lançamento faturável arredondado. Decidimos, por isso, separar os planos: ActualTime como métrica interna (nunca faturável) e Contract Hours como plano contratual, e nunca deixar os dois criarem tarefa no mesmo ticket. O motivo é simples: o número que vai para a fatura do cliente precisa ser o arredondado e ciente do contrato, não os segundos crus - e os segundos crus são justamente o que a gestão quer para dimensionar capacidade. Duas audiências, dois números, duas ferramentas.
O erro comum é esperar que o ActualTime responda "quantas horas restam no contrato?". Ele não tem esse conceito. Todo cliente que tentou montar isso exportando dados do ActualTime para uma planilha viu o número divergir do real em semanas. E há o gap do arredondamento: o Contract Hours arredonda para cima até o mínimo faturável (15 minutos por padrão, múltiplo de 5 por compatibilidade com o GLPI). Uma tarefa de 3 minutos fatura 15. Num mês com muitos chamados curtos, a diferença entre o total real (ActualTime) e o total faturado (Contract Hours) é material - e é exatamente essa diferença que você negocia com o cliente, ou absorve como cortesia pelo toggle de não faturável.
Meça o gap você mesmo
Como os dois plugins gravam no campo nativo actiontime (em segundos), dá para quantificar o tempo lançado direto no banco, sem depender de tabela de plugin. Some por técnico no mês e compare com o total faturado que aparece no extrato do Contract Hours:
-- Horas lançadas por técnico no mês (campo nativo actiontime, em segundos)
SELECT u.name AS tecnico,
ROUND(SUM(tt.actiontime) / 3600, 2) AS horas_lancadas
FROM glpi_tickettasks tt
JOIN glpi_users u ON u.id = tt.users_id_tech
WHERE tt.date BETWEEN '2026-06-01' AND '2026-06-30 23:59:59'
AND tt.actiontime IS NOT NULL
GROUP BY tt.users_id_tech
ORDER BY horas_lancadas DESC;
Se o total daqui bater com o real medido mas divergir do faturado, a diferença é o arredondamento mais as horas de cortesia - e isso é informação de negociação, não erro.
Veredito por cenário
- Use ActualTime quando a pergunta é "minha equipe é produtiva?". Você quer medir esforço real, alimentar indicadores internos e não cobra por hora. Custo zero, instalação simples.
- Use Contract Hours quando você vende pacote de horas e o cliente pergunta "quanto já usei e quanto sobra?". Precisa de saldo, extrato, arredondamento faturável, dashboard do cliente e alerta de estouro. É investimento, mas paga o próprio custo no primeiro contrato que você deixa de subfaturar.
- Use os dois quando você quer o real interno E o faturável externo, desde que em planos separados: ActualTime como métrica (não faturável) e Contract Hours como cobrança, com regra clara de que só um cria tarefa por chamado.
- Fique só no campo nativo quando o volume é baixo e a duração manual já resolve. Não instale plugin para um problema que você não tem.
Custo e esforço
ActualTime é gratuito (GPL): o custo é o de sempre em plugin - validar a build para a sua versão do GLPI e incluí-lo na janela de upgrade. Contract Hours é licenciado, mas o esforço de implantação real não está no timer, e sim no modelo de contrato: definir quota, mapear o grupo e a categoria que resolvem cada contrato (a regra é E, não OU), configurar o mínimo faturável e a visibilidade de quem vê cada contrato no dashboard. É meia hora de clique e algumas horas de decisão comercial. O retorno aparece no primeiro fechamento de mês em que o extrato sai pronto para o cliente, sem planilha.
Na NexTool implantamos e sustentamos os dois modelos em GLPI de clientes B2B. Se o seu gargalo é transformar horas de chamado em faturamento defensável - com saldo, extrato e dashboard que o cliente entende - o módulo Contract Hours do plugin NexTool resolve exatamente isso. Se a dúvida ainda é qual plano faz sentido para a sua operação, fale com a gente.
Revisado pela equipe NexTool Solutions.