knowledge-base/records/plugin-dev/KB-PLUGIN-035-glpi11-service-desk-kpi-data-model.md
Rodolpho Lopes 0c88e71f92 docs(KB-035): modelo de dados dos KPIs de Service Desk no GLPI 11
Documenta as colunas/tabelas reais usadas pelas 7 tools de KPI (MTTR via
solve_delay_stat, FCR via solução recusada, SLA TTR/TTO, workload, backlog,
CSAT, volume). Atualiza snapshot KB-026 para 26 tools.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 22:52:14 +00:00

4.4 KiB
Raw Permalink Blame History

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_itilsolutionsstatus usa CommonITILValidation: 2=Waiting, 3=Accepted, 4=Refused. Múltiplas soluções / uma recusada ⇒ houve reabertura.
  • glpi_ticketsatisfactionssatisfaction (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();.