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>
94 lines
4.4 KiB
Markdown
94 lines
4.4 KiB
Markdown
---
|
||
id: KB-PLUGIN-035
|
||
title: Modelo de dados dos KPIs de Service Desk no GLPI 11 (tools de BI do mcprotocol)
|
||
domain: plugin-dev
|
||
tags:
|
||
- glpi
|
||
- glpi11
|
||
- mcp
|
||
- kpi
|
||
- bi
|
||
- tickets
|
||
- sla
|
||
- csat
|
||
status: active
|
||
severity: medium
|
||
created_at: 2026-06-22
|
||
updated_at: 2026-06-22
|
||
applies_to:
|
||
- glpi-11
|
||
- mcprotocol-plugin
|
||
related_records:
|
||
- 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();`.
|