# Dashboard Monitor de Macros JOR005

## Visão Geral

Este dashboard foi criado para auxiliar na visualização e gestão de macros de jornada que não foram processadas pela job JOR005. Permite cruzar informações entre as macros recebidas (`ft_returndiario`) e as jornadas/eventos processados (`jor005_jornada`, `jor005a_eventosjornada`).

## Acesso

- **URL:** `/dashboard_jor005/index.php`
- **Restrição:** Apenas empresa 1 (admin) pode acessar
- **Funcionalidade:** Permite selecionar qualquer empresa para visualizar

## Funcionalidades

### 1. Aba: Visão Geral

- **Cards de Indicadores:**
  - Macros Processadas (jornada = 1)
  - Macros Pendentes (jornada = 0)
  - Sem Motorista (rastreador não cadastrado)
  - Macro Não Configurada (sem entrada em `jor005d_parametrojornada`)
  - Jornadas Abertas (sem dtfim)
  - Motorista "Sumiu" (jornada aberta sem macro há >1h)

- **Alertas Inteligentes:**
  - Detecta automaticamente problemas comuns
  - Exibe alertas visuais com sugestões de ação

- **Resumo por Tipo de Macro:**
  - Tabela agrupando macros por tipo configurado

### 2. Aba: Macros Não Processadas

Lista todas as macros com `jornada = 0` no período selecionado.

**Filtros disponíveis:**
- Todos os tipos
- Sem vínculo funcionário (rastreador não cadastrado)
- Macro não configurada (não existe em parâmetros)
- Sem jornada (funcionário OK, mas sem jornada ativa)

**Ações disponíveis:**
- **Editar:** Corrigir dados da macro (rastreador, macro, tecnologia)
- **Inserir como Evento:** Inserir manualmente na `jor005a_eventosjornada`
- **Reprocessar:** Marcar para reprocessamento pela job (jornada = 0)

### 3. Aba: Jornadas Abertas

Lista jornadas sem `dtfim` que podem estar com problemas.

**Informações exibidas:**
- Tempo que está aberta
- Última macro recebida
- Tempo sem sinal do motorista
- Status visual (Normal, Atenção, Crítico)

**Ações disponíveis:**
- **Fechar Jornada:** Encerrar manualmente com data/hora e motivo
- **Ver Detalhes:** Link para a rotina jor005_jornada
- **Fechar Antigas (+7 dias):** Botão para fechar em lote jornadas muito antigas

### 4. Aba: Eventos Processados

Lista eventos já inseridos na `jor005a_eventosjornada`.

**Filtros:**
- Por jornada específica

**Ações:**
- **Mover:** Transferir evento para outra jornada

### 5. Aba: Conflitos / Mover

Detecta automaticamente eventos que podem estar na jornada errada:

- **Evento dia seguinte:** Data do evento é diferente da data da jornada
- **Evento após fim:** Evento registrado após o dtfim da jornada

**Ações:**
- **Mover para sugerida:** Move para a jornada correta automaticamente detectada
- **Mover manual:** Selecionar jornada de destino

## Estrutura de Arquivos

```
dashboard_jor005/
├── index.php              # Interface principal do dashboard
├── select.php             # Backend AJAX para todas as operações
├── registrar_rotina.sql   # SQL para registrar no menu do sistema
└── README.md              # Esta documentação
```

## Instalação

1. Os arquivos já estão na pasta `dashboard_jor005/`

2. Execute o SQL para registrar a rotina no sistema:
   ```sql
   -- Execute no banco SAG
   \i registrar_rotina.sql
   ```
   
   Ou execute manualmente o conteúdo do arquivo `registrar_rotina.sql`

3. Acesse o sistema com a empresa 1 e navegue até o menu Jornada

## Tabelas Envolvidas

| Tabela | Uso |
|--------|-----|
| `ft_returndiario` | Fonte de macros com flag `jornada` (0/1) |
| `ft_return` | Fonte alternativa (módulo de início usa esta) |
| `jor005d_parametrojornada` | Configuração de macros por empresa |
| `jor005_jornada` | Jornadas criadas/finalizadas |
| `jor005a_eventosjornada` | Eventos dentro de cada jornada |
| `dim_motorista` | Cadastro de motoristas (rastreador, rastreador2) |
| `jor002_funcionario` | Vínculo motorista ↔ funcionário |

## Referência: Razões para Macros Não Processadas

1. **Sem `idmotorista_return`:** Campo nulo na ft_returndiario
2. **Rastreador não cadastrado:** Não existe em `dim_motorista`
3. **Macro não configurada:** Não existe em `jor005d_parametrojornada`
4. **Sem mensagem:** Campo `mensagem_return` vazio
5. **Sem jornada ativa:** Funcionário sem jornada aberta no momento
6. **Duplicidade:** Evento já processado anteriormente

## Notas Técnicas

- A job JOR005 roda a cada 30 segundos
- Janela de processamento de início: apenas macros do dia corrente
- Janela de eventos intermediários: últimos 3 dias
- Janela de fechamento: jornadas abertas com até 7 dias
- Jornadas com mais de 7 dias nunca serão fechadas automaticamente

## Changelog

- **2026-03-02:** Versão inicial do dashboard
