| id |
title |
domain |
tags |
status |
severity |
created_at |
updated_at |
applies_to |
related_records |
| KB-PLUGIN-035 |
Modelo de dados dos KPIs de Service Desk no GLPI 11 (tools de BI do mcprotocol) |
plugin-dev |
| glpi |
| glpi11 |
| mcp |
| kpi |
| bi |
| tickets |
| sla |
| csat |
|
active |
medium |
2026-06-22 |
2026-06-22 |
| glpi-11 |
| mcprotocol-plugin |
|
| KB-PLUGIN-019 |
| KB-PLUGIN-022 |
| KB-PLUGIN-026 |
|
Modelo de dados dos KPIs de Service Desk no GLPI 11
Referência canônica das colunas/tabelas reais do GLPI 11 usadas pelas tools de KPI
(src/TicketKpiTools.php, plugin v1.2.0+). Mapeamento levantado direto no schema
do core (a KB não tinha isso antes). Princípio BFF: o LLM pede o KPI, o PHP conhece
as colunas (KB-PLUGIN-019).
Colunas-chave de glpi_tickets
| Coluna |
Tipo |
Uso |
date / date_creation |
timestamp |
Abertura do chamado |
takeintoaccountdate |
timestamp |
Data do primeiro atendimento (resposta) |
solvedate |
timestamp |
Data de solução |
closedate |
timestamp |
Data de fechamento |
status |
int |
1=Novo 2=Processando/Atribuído 3=Planejado 4=Pendente 5=Solucionado 6=Fechado |
solve_delay_stat |
int (s) |
Tempo real de solução em segundos, já calculado pelo GLPI (calendário de trabalho, descontando espera) |
takeintoaccount_delay_stat |
int (s) |
Tempo até o primeiro atendimento (resposta) |
close_delay_stat |
int (s) |
Tempo até o fechamento |
waiting_duration / sla_waiting_duration |
int (s) |
Tempo total em espera/pendente |
time_to_resolve |
timestamp |
Prazo do SLA de solução (TTR) |
time_to_own |
timestamp |
Prazo do SLA de resposta (TTO) |
slas_id_ttr / slas_id_tto |
int FK |
SLA atribuído (solução / resposta) |
⚠️ Para MTTR, prefira solve_delay_stat ao invés de solvedate - date: o GLPI já
desconta horário não-útil e tempo de espera. A tool expõe os dois (_wall = corrido).
Mapeamento KPI → fonte
| KPI |
Tool |
Fonte / regra |
| MTTR |
glpi_ticket_mttr_stats |
AVG(solve_delay_stat) de tickets status∈(5,6), solvedate no período |
| FCR ("sem reabertura") |
glpi_ticket_fcr_stats |
resolvidos − (resolvidos com solução recusada). Reabertura = glpi_itilsolutions.status = 4 (CommonITILValidation::REFUSED) |
| SLA solução (TTR) |
glpi_ticket_sla_compliance |
solvedate <= time_to_resolve (entre os que têm time_to_resolve e solvedate) |
| SLA resposta (TTO) |
glpi_ticket_sla_compliance |
takeintoaccountdate <= time_to_own |
| Workload |
glpi_team_productivity |
JOIN glpi_tickets_users (type=2 técnico) ou glpi_groups_tickets (type=2). Resolvidos no período + backlog (status∉(5,6)) |
| Backlog growth |
glpi_ticket_backlog_stats |
abertos(date) vs resolvidos(solvedate) no período; net = abertos − resolvidos |
| CSAT |
glpi_satisfaction_stats |
AVG(glpi_ticketsatisfactions.satisfaction_scaled_to_5) (float 0-5), date_answered p/ taxa de resposta |
| Volume |
glpi_ticket_volume_stats |
COUNT agrupado por itilcategories_id / priority / urgency / status |
Constantes de actor (type) — glpi_tickets_users e glpi_groups_tickets
1 = requerente · 2 = atribuído (técnico/grupo) · 3 = observador.
Tabelas auxiliares
glpi_itilsolutions — status usa CommonITILValidation: 2=Waiting, 3=Accepted, 4=Refused.
Múltiplas soluções / uma recusada ⇒ houve reabertura.
glpi_ticketsatisfactions — satisfaction (bruto), satisfaction_scaled_to_5 (float 0-5,
usar este), date_begin (enviada), date_answered (respondida).
glpi_itilcategories — tem name e completename (caminho completo).
Labels (resolver IDs para humanos)
\Ticket::getStatus($int) · \Ticket::getPriorityName($int) · \Ticket::getUrgencyName($int).
RBAC
As tools de KPI agregam via $DB direto (como glpi_ticket_bi_stats), com filtros
opcionais (entities_id, itilcategories_id). NÃO aplicam getEntitiesRestrictCriteria
automaticamente — escopo fica a cargo dos filtros. Para BI gerencial é aceitável; se
precisar de isolamento estrito por entidade, evoluir para restrição de sessão. Ver KB-019.
Notas de validação (2026-06-22)
Os 7 handlers foram testados contra o banco de dev via bootstrap CLI. Atenção: $DB
não é auto-inicializado pelo inc/includes.php no CLI do GLPI 11 — instanciar manual
após include config/config_db.php: $DB = new DB();.