Radar Inteligente de Incidentes
- Após conectar o banco do MySQL do Netservice via ODBC no Codex.
- Utilize as Query abaixo para ele consultar os dados necessários e extrairmos as informações via CSV.
Resumo
- 🏆 Base_Incidentes_Unificada_NetService
- 🚨 Query 1 - Radar → O que fazer AGORA
- 📊 Query 2 - Evolução → Estamos melhorando?
- 🔁 Query 3 - Recorrência → O que repete?
- 💥 Query 4 - Problema → Qual é a causa raiz?
Query - Base Unificada de Incidentes
SELECT
t.TarefaID AS IC,
t.Titulo AS Titulo,
t.Descricao AS DescricaoIncidente,
e.NomeEmpresa AS Cliente,
s.NomeSistema AS TimeSistema,
m.NomeModulo AS Produto,
a.NomeAtividade AS Servico,
u.NomeUsuario AS ResponsavelAtual,
COALESCE(st.NomeSituacao, 'Sem status') AS StatusAtual,
t.DataCriacao AS DataAbertura,
t.DataEncerramento AS DataEncerramento,
CASE
WHEN t.DataEncerramento IS NULL THEN 'Aberto'
ELSE 'Fechado'
END AS SituacaoIC,
DATEDIFF(
COALESCE(t.DataEncerramento, CURDATE()),
t.DataCriacao
) AS DiasDesdeAbertura,
CASE
WHEN t.DataEncerramento IS NOT NULL THEN
DATEDIFF(t.DataEncerramento, t.DataCriacao)
ELSE NULL
END AS DiasParaEncerrar,
lm.UltimaMovimentacao AS UltimaMovimentacao,
DATEDIFF(
COALESCE(t.DataEncerramento, CURDATE()),
COALESCE(lm.UltimaMovimentacao, t.DataCriacao)
) AS DiasSemMovimentacao,
CASE
WHEN t.DataEncerramento IS NULL
AND DATEDIFF(CURDATE(), t.DataCriacao) >= 15 THEN 'Crítico'
WHEN t.DataEncerramento IS NULL
AND DATEDIFF(CURDATE(), t.DataCriacao) BETWEEN 12 AND 14 THEN 'Atenção'
WHEN t.DataEncerramento IS NULL THEN 'Controlado'
ELSE 'Encerrado'
END AS ClassificacaoRadar,
CASE
WHEN t.DataEncerramento IS NULL
AND DATEDIFF(
CURDATE(),
COALESCE(lm.UltimaMovimentacao, t.DataCriacao)
) >= 5 THEN 'Sim'
ELSE 'Não'
END AS FlagSemMovimentacao,
CASE
WHEN t.DataEncerramento IS NULL
AND DATEDIFF(CURDATE(), t.DataCriacao) >= 30 THEN 'Sim'
ELSE 'Não'
END AS FlagMuitoAntigo,
CASE
WHEN st.NomeSituacao IS NULL OR st.NomeSituacao = '' THEN 'Sim'
ELSE 'Não'
END AS FlagStatusAusente,
COALESCE(td.DiasAtendimento, 0) AS DiasAtendimento,
COALESCE(td.DiasAnalise, 0) AS DiasAnalise,
COALESCE(td.DiasInfraestruturaBancoDados, 0) AS DiasInfraestruturaBancoDados,
COALESCE(td.DiasOutrosDepartamentos, 0) AS DiasOutrosDepartamentos
FROM netservice.tarefas t
LEFT JOIN netservice.empresas e
ON e.EmpresaID = t.EmpresaID
LEFT JOIN netservice.modulos m
ON m.ModuloID = t.ModuloID
LEFT JOIN netservice.sistemas s
ON s.SistemaID = m.SistemaID
LEFT JOIN netservice.atividades a
ON a.AtividadeID = t.AtividadeID
LEFT JOIN netservice.usuarios u
ON u.UsuarioID = t.ResponsavelID
LEFT JOIN netservice.situacoestarefas st
ON st.SituacaoTarefaID = t.SituacaoTarefaID
LEFT JOIN (
SELECT
TarefaID,
MAX(DataAtribuicao) AS UltimaMovimentacao
FROM netservice.andamentostarefas
GROUP BY TarefaID
) lm
ON lm.TarefaID = t.TarefaID
LEFT JOIN (
SELECT
mov.TarefaID,
SUM(CASE
WHEN dep.DepartamentoID = 3 THEN mov.DiasNoDepartamento
ELSE 0
END) AS DiasAtendimento,
SUM(CASE
WHEN dep.DepartamentoID = 1 THEN mov.DiasNoDepartamento
ELSE 0
END) AS DiasAnalise,
SUM(CASE
WHEN dep.DepartamentoID = 6 THEN mov.DiasNoDepartamento
ELSE 0
END) AS DiasInfraestruturaBancoDados,
SUM(CASE
WHEN dep.DepartamentoID NOT IN (1, 3, 6)
OR dep.DepartamentoID IS NULL
THEN mov.DiasNoDepartamento
ELSE 0
END) AS DiasOutrosDepartamentos
FROM (
SELECT
atf.AndamentoTarefaID,
atf.TarefaID,
atf.DestinoID,
DATEDIFF(
COALESCE((
SELECT MIN(atf2.DataAtribuicao)
FROM netservice.andamentostarefas atf2
WHERE atf2.TarefaID = atf.TarefaID
AND (
atf2.DataAtribuicao > atf.DataAtribuicao
OR (
atf2.DataAtribuicao = atf.DataAtribuicao
AND atf2.AndamentoTarefaID > atf.AndamentoTarefaID
)
)
), COALESCE(tf.DataEncerramento, NOW())),
atf.DataAtribuicao
) AS DiasNoDepartamento
FROM netservice.andamentostarefas atf
INNER JOIN netservice.tarefas tf
ON tf.TarefaID = atf.TarefaID
AND tf.Tipo = 4
) mov
LEFT JOIN netservice.usuarios ud
ON ud.UsuarioID = mov.DestinoID
LEFT JOIN netservice.departamentos dep
ON dep.DepartamentoID = ud.DepartamentoID
GROUP BY mov.TarefaID
) td
ON td.TarefaID = t.TarefaID
WHERE
t.Tipo = 4
ORDER BY
SituacaoIC ASC,
DiasDesdeAbertura DESC,
DiasSemMovimentacao DESC;
OBSERVAÇÃO: GERAR AQUIVO COM NOME: Base Unificada de Incidentes
Query 1 — ICs abertos / Radar
🎯 Objetivo
Mostrar a situação atual dos incidentes em aberto, identificando risco e necessidade de ação imediata.
👉 Tradução: O que precisa de atenção AGORA?
🔍 O que ela analisa
- ICs em aberto
- Dias em aberto
- Dias sem movimentação
- Responsável atual
- Time/Sistema
- Classificação de risco (Crítico, Atenção, Controlado)
- Falhas de processo (sem status)
- Tempo por departamento (Atendimento, Análise, Infra, etc.)
💡 Para que serve
- Identificar ICs críticos
- Ver ICs parados
- Direcionar ação dos P.Os e Supervisores
- Entender onde está o gargalo (área)
- Evitar crise
SELECT
t.TarefaID AS IC,
t.Titulo AS Titulo,
e.NomeEmpresa AS Cliente,
s.NomeSistema AS TimeSistema,
m.NomeModulo AS Produto,
a.NomeAtividade AS Servico,
u.NomeUsuario AS ResponsavelAtual,
COALESCE(st.NomeSituacao, 'Sem status') AS StatusAtual,
t.DataCriacao AS DataAbertura,
DATEDIFF(CURDATE(), t.DataCriacao) AS DiasEmAberto,
lm.UltimaMovimentacao AS UltimaMovimentacao,
DATEDIFF(CURDATE(), COALESCE(lm.UltimaMovimentacao, t.DataCriacao)) AS DiasSemMovimentacao,
CASE
WHEN DATEDIFF(CURDATE(), t.DataCriacao) >= 15 THEN 'Crítico'
WHEN DATEDIFF(CURDATE(), t.DataCriacao) BETWEEN 12 AND 14 THEN 'Atenção'
ELSE 'Controlado'
END AS ClassificacaoRadar,
CASE
WHEN DATEDIFF(CURDATE(), COALESCE(lm.UltimaMovimentacao, t.DataCriacao)) >= 5 THEN 'Sim'
ELSE 'Não'
END AS FlagSemMovimentacao,
CASE
WHEN DATEDIFF(CURDATE(), t.DataCriacao) >= 30 THEN 'Sim'
ELSE 'Não'
END AS FlagMuitoAntigo,
CASE
WHEN st.NomeSituacao IS NULL OR st.NomeSituacao = '' THEN 'Sim'
ELSE 'Não'
END AS FlagStatusAusente,
COALESCE(td.DiasAtendimento, 0) AS DiasAtendimento,
COALESCE(td.DiasAnalise, 0) AS DiasAnalise,
COALESCE(td.DiasInfraestruturaBancoDados, 0) AS DiasInfraestruturaBancoDados,
COALESCE(td.DiasOutrosDepartamentos, 0) AS DiasOutrosDepartamentos
FROM netservice.tarefas t
LEFT JOIN netservice.empresas e
ON e.EmpresaID = t.EmpresaID
LEFT JOIN netservice.modulos m
ON m.ModuloID = t.ModuloID
LEFT JOIN netservice.sistemas s
ON s.SistemaID = m.SistemaID
LEFT JOIN netservice.atividades a
ON a.AtividadeID = t.AtividadeID
LEFT JOIN netservice.usuarios u
ON u.UsuarioID = t.ResponsavelID
LEFT JOIN netservice.situacoestarefas st
ON st.SituacaoTarefaID = t.SituacaoTarefaID
LEFT JOIN (
SELECT
TarefaID,
MAX(DataAtribuicao) AS UltimaMovimentacao
FROM netservice.andamentostarefas
GROUP BY TarefaID
) lm
ON lm.TarefaID = t.TarefaID
LEFT JOIN (
SELECT
mov.TarefaID,
SUM(
CASE
WHEN dep.NomeDepartamento = 'Atendimento'
OR dep.DepartamentoID = 3
THEN mov.DiasNoDepartamento
ELSE 0
END
) AS DiasAtendimento,
SUM(
CASE
WHEN dep.DepartamentoID = 1
THEN mov.DiasNoDepartamento
ELSE 0
END
) AS DiasAnalise,
SUM(
CASE
WHEN dep.DepartamentoID = 6
THEN mov.DiasNoDepartamento
ELSE 0
END
) AS DiasInfraestruturaBancoDados,
SUM(
CASE
WHEN dep.NomeDepartamento IS NULL
OR (
dep.NomeDepartamento <> 'Atendimento'
AND dep.DepartamentoID NOT IN (1, 3, 6)
)
THEN mov.DiasNoDepartamento
ELSE 0
END
) AS DiasOutrosDepartamentos
FROM (
SELECT
atf.AndamentoTarefaID,
atf.TarefaID,
atf.DestinoID,
DATEDIFF(
COALESCE((
SELECT MIN(atf2.DataAtribuicao)
FROM netservice.andamentostarefas atf2
WHERE atf2.TarefaID = atf.TarefaID
AND (
atf2.DataAtribuicao > atf.DataAtribuicao
OR (
atf2.DataAtribuicao = atf.DataAtribuicao
AND atf2.AndamentoTarefaID > atf.AndamentoTarefaID
)
)
), NOW()),
atf.DataAtribuicao
) AS DiasNoDepartamento
FROM netservice.andamentostarefas atf
INNER JOIN netservice.tarefas tf
ON tf.TarefaID = atf.TarefaID
AND tf.Tipo = 4
AND tf.DataEncerramento IS NULL
) mov
LEFT JOIN netservice.usuarios ud
ON ud.UsuarioID = mov.DestinoID
LEFT JOIN netservice.departamentos dep
ON dep.DepartamentoID = ud.DepartamentoID
GROUP BY mov.TarefaID
) td
ON td.TarefaID = t.TarefaID
WHERE
t.Tipo = 4
AND t.DataEncerramento IS NULL
ORDER BY
DiasEmAberto DESC,
DiasSemMovimentacao DESC
OBSERVAÇÃO: GERAR AQUIVO COM NOME: ICs abertos (Radar)
Query 2 — ICs fechados / Evolução por Período
🎯 Objetivo
Medir a eficiência e evolução dos times ao longo do tempo.
👉 Tradução: Medir a eficiência e evolução dos times ao longo do tempo / Estamos melhorando ou piorando?
🔍 O que ela analisa
- ICs encerrados no período
- Tempo para resolução
- ICs dentro do prazo
- ICs fora do prazo
- Volume por time/sistema
💡 Para que serve
- Ver se estamos melhorando
- Medir desempenho dos times
- Acompanhar SLA
- Mostrar evolução para diretoria
SELECT
t.TarefaID AS IC,
t.Titulo AS Titulo,
e.NomeEmpresa AS Cliente,
s.NomeSistema AS TimeSistema,
m.NomeModulo AS Produto,
a.NomeAtividade AS Servico,
u.NomeUsuario AS ResponsavelAtual,
COALESCE(st.NomeSituacao, 'Sem status') AS StatusAtual,
t.DataCriacao AS DataAbertura,
t.DataEncerramento AS DataEncerramento,
DATEDIFF(t.DataEncerramento, t.DataCriacao) AS DiasParaEncerrar,
CASE
WHEN DATEDIFF(t.DataEncerramento, t.DataCriacao) <= 15 THEN 'Dentro do prazo'
ELSE 'Fora do prazo'
END AS ClassificacaoEncerramento
FROM netservice.tarefas t
LEFT JOIN netservice.empresas e ON e.EmpresaID = t.EmpresaID
LEFT JOIN netservice.modulos m ON m.ModuloID = t.ModuloID
LEFT JOIN netservice.sistemas s ON s.SistemaID = m.SistemaID
LEFT JOIN netservice.atividades a ON a.AtividadeID = t.AtividadeID
LEFT JOIN netservice.usuarios u ON u.UsuarioID = t.ResponsavelID
LEFT JOIN netservice.situacoestarefas st ON st.SituacaoTarefaID = t.SituacaoTarefaID
WHERE
t.Tipo = 4
AND t.DataEncerramento IS NOT NULL
AND t.DataEncerramento BETWEEN '2026-04-01' AND '2026-04-30'
ORDER BY
t.DataEncerramento DESC;
OBSERVAÇÃO: GERAR AQUIVO COM NOME: ICs fechados por período
Query 3 — Agrupamento Inteligente de Incidentes (Base para Problema ITIL)
🎯 Objetivo
Identificar grupos de incidentes que provavelmente representam o mesmo erro, mesmo sem confiar no catálogo de serviços.
👉 Tradução: Encontrar automaticamente padrões reais de erro e antecipar possíveis Problemas ITIL
🔍 O que ela analisa
- Agrupamento por padrão de título (erro semelhante)
- Quantidade de incidentes por grupo
- Quantidade de clientes afetados
- Sistema/Time envolvido
- Lista de ICs relacionados
💡 Para que serve
- Identificar problemas recorrentes de forma automatizada
- Reduzir análise manual de incidentes
- Encontrar erros que não aparecem pelo catálogo de serviços
- Apoiar abertura de Problema ITIL com evidência Priorizar correções estruturais
Importante: ela não prova que é o mesmo problema. Ela só aponta possíveis recorrências por contexto operacional. Para saber se é o mesmo erro, precisa olhar título/descrição, que é o objetivo da query 4.
``