Radar Inteligente de Incidentes


🎯 Objetivo

Garantir visibilidade, antecipação de riscos e direcionamento de ação sobre incidentes, de forma simples, contínua e baseada em dados.

👉 O Radar permite identificar rapidamente:


🧠 O que é o Radar Inteligente

O Radar Inteligente de Incidentes é um modelo estruturado de acompanhamento que utiliza:

👉 Não é apenas um relatório — é um mecanismo de gestão operacional e tomada de decisão.


⚙️ Como funciona

1. Extração da base unificada de incidentes
2. Validação automática dos dados (Modo Auditor)
3. Análise inteligente (GPT)
4. Geração do Radar (visão executiva)
5. Direcionamento para atuação dos times

📊 Fonte de Dados

A base do Radar é:

📡 Radar Inteligente — Base Unificada de Incidentes

Essa base contém:

👉 Princípio fundamental: CSV gerado a partir dessa base é a única fonte de verdade.


🛡️ Validação de Dados (Modo Auditor)

Antes de qualquer análise, os dados passam por validação automática:

Classificação da Qualidade

🟢 Aprovado → Pode ser apresentado
🟡 Aprovado com ressalvas → Atenção
🔴 Reprovado → NÃO deve ser utilizado

👉 Se reprovado, o Radar não deve ser gerado.


📡 Estrutura do Radar

O Radar é composto por:

1. Resumo Executivo

Visão clara do cenário atual (máx. 5 linhas)


2. Situação Atual


3. Análise por Time


4. Gargalos por Departamento

👉 Identificação de onde o tempo está sendo consumido


5. Evolução


6. Recorrência e Padrões


7. Problema ITIL (CRÍTICO)

Validação real de problemas com base em:

👉 Regra:

Título parecido NÃO define problema

A descrição deve confirmar:
✔ mesmo erro
✔ mesmo comportamento
✔ mesma falha

Classificação:

👉 Apenas problemas confirmados devem ser considerados


8. Direcionamento da Semana

Ações práticas para atuação:


🎨 Dashboard

O Radar gera um dashboard executivo contendo:

👉 Regras:


📈 Histórico

O Radar mantém evolução ao longo do tempo:

Data | ICs Abertos | Críticos | Atenção | Sem Movimentação | Muito Antigos | Tempo Atendimento | Tempo Análise | Tempo Infra | Resolvidos | Tempo Médio

👉 Utilizado para:


👥 Papéis e Responsabilidades

Scrum Master


Product Owner / Supervisor


Times


⚠️ Regras do Processo

✔ Não é relatório → é direcionamento
✔ Não é cobrança → é gestão de risco
✔ Não é volume → é ação baseada em dados
✔ Não é opinião → é evidência

⏱️ Frequência


🧠 Princípio

Dados → Validação → Análise → Insight → Ação

🚀 Resultado Esperado

Após algumas semanas de uso:


💥 Conclusão

O Radar Inteligente de Incidentes transforma dados operacionais em:

✔ Visão clara
✔ Decisão rápida
✔ Ação direcionada
✔ Gestão estruturada

👉 Tornando-se um instrumento essencial de gestão da operação.


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


Revisão #10
Criado 29 abril 2026 18:06:51 por Stephanie Correa
Atualizado 13 maio 2026 13:59:18 por Stephanie Correa