Ir para o conteúdo principal

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.

Query oficial — ICs abertos / Radar

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

LIMIT 50;

Query — ICs fechados / evoluçEvolução por períPeríodo

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;

Query — recorrêRecorrência de incidentesIncidentes

SELECT
    s.NomeSistema AS TimeSistema,
    m.NomeModulo AS Produto,
    a.NomeAtividade AS Servico,
    e.NomeEmpresa AS Cliente,

    COUNT(*) AS TotalIncidentes,
    MIN(t.DataCriacao) AS PrimeiroRegistro,
    MAX(t.DataCriacao) AS UltimoRegistro,

    SUM(CASE 
        WHEN t.DataEncerramento IS NULL THEN 1 
        ELSE 0 
    END) AS IncidentesAbertos,

    SUM(CASE 
        WHEN t.DataEncerramento IS NOT NULL THEN 1 
        ELSE 0 
    END) AS IncidentesFechados

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

WHERE 
    t.Tipo = 4
    AND t.DataCriacao >= DATE_SUB(CURDATE(), INTERVAL 90 DAY)

GROUP BY
    s.NomeSistema,
    m.NomeModulo,
    a.NomeAtividade,
    e.NomeEmpresa

HAVING COUNT(*) >= 3

ORDER BY 
    TotalIncidentes DESC;