# Alarmes

> Os alarmes que aguardam uma resposta, reconhecidos onde são lidos, sobre a linha do tempo persistente de toda transição de estado de alarme.

A aba Alarmes é a tela de operação dos alarmes: o que aguarda agora e o registro do que já
aconteceu, empilhados numa tela só. Ela é a primeira aba de [Eventos](events)
(`/events?view=alarms`), a aba em que a página abre, e onde o indicador de alarme da barra de status
cai quando você clica nele. Vê-la exige **Ver eventos**; responder a um alarme aqui exige **Operar a
lógica**; exportar o histórico exige **Exportar/importar históricos**. Os alarmes em si são
definidos em [Logic > Alarms](logic-alarms); esta aba nunca edita um.

A aba empilha dois cartões: **Alarmes atuais** em cima, lido ao vivo do registro de alarmes, e
**Histórico** embaixo, lido do diário persistente.

## Alarmes atuais {#current-alarms}

O cartão lista todo alarme que está ativo ou ainda aguardando um reconhecimento: exatamente a
população que a barra de status conta, para que as duas nunca discordem. Ele é lido direto do
registro ao vivo e redesenhado pelos sinais do próprio registro (uma subida, uma normalização ou um
reconhecimento vindo de qualquer superfície, uma definição salva, desabilitada ou excluída), nunca
por relógio.

### O cabeçalho {#the-head}

| Elemento | O que mostra |
| --- | --- |
| Sino | A marca de alarme. Ele troca para a variante tocando enquanto qualquer coisa está ativa ou não reconhecida, e assume a cor da pior prioridade da lista. |
| Resumo | "N ativos (M não reconhecidos)": quantas condições são verdadeiras agora, e quantos alarmes ainda aguardam resposta. Um alarme que normalizou antes de alguém reconhecê-lo continua contado como não reconhecido. O texto assume o tom da pior prioridade. |
| Reconhecer todos | Responde a todo alarme que aguarda, num comando só. Desenhado apenas para um papel com **Operar a lógica**. Fica cinza com o motivo na dica enquanto o runtime está parado ("Runtime parado") ou enquanto nada aguarda ("Nenhum alarme está esperando resposta."); fora disso a dica diz "Reconhecer todo alarme que ainda espera resposta". O feed de ações responde "Todos os alarmes reconhecidos." |

### As linhas {#the-rows}

As linhas são ordenadas por prioridade, da pior para a melhor (Crítica, Alta, Média, Baixa), e
dentro de uma prioridade pela ativação mais antiga primeiro, de modo que o alarme que mais merece
resposta fique mais perto do topo. A grade é compacta, com no máximo 240 pixels de altura, e rola
dentro do cartão.

| Coluna | O que é |
| --- | --- |
| Nome | Um ponto no tom da prioridade e, em seguida, o nome do alarme. Passar o ponteiro sobre o nome mostra a mensagem do alarme. |
| Endereço | O endereço Logic com raiz do alarme, `Alarms.<folders>.<name>`, do jeito que expressões e dashboards se referem a ele. |
| Estado | O estado e a prioridade, por exemplo "Ativo, não reconhecido · Crítica". As palavras de estado são as quatro da máquina de estados do alarme: **Sem alarme**, **Ativo, não reconhecido**, **Ativo, reconhecido** e **Normalizado, não reconhecido** (a condição voltou ao normal antes de alguém responder). |
| Desde | A data e a hora em que a ativação atual começou; um traço quando a condição já normalizou e a linha só aguarda o seu reconhecimento. |
| Reconhecer | Desenhado apenas numa linha ainda não reconhecida, e apenas para um papel com **Operar a lógica**. A sua dica diz "Reconhecer" seguido do nome do alarme; ele fica cinza com "Runtime parado" enquanto o runtime está parado. O feed de ações responde com o nome do alarme seguido de "reconhecido." |

Um reconhecimento é despachado por vez; um segundo acionamento enquanto o primeiro ainda está na
fila da lógica é ignorado, em vez de responder a uma linha que a lista já soltou. Todo
reconhecimento feito neste cartão passa pelo mesmo funil registrado em diário que a página Logic usa
e é gravado no histórico abaixo com o nome do usuário autenticado naquela janela, ou Estação
quando ninguém está autenticado ali. Reconhecer um alarme que não tem nada pendente não faz nada. Um alarme cuja definição não
exige reconhecimento nunca aparece como não reconhecido: ele sobe direto para "Ativo, reconhecido"
e cai direto para Sem alarme, então a sua linha aparece enquanto ele está ativo e não carrega
**Reconhecer**.

Quando nada está ativo nem aguardando, o cartão diz "Nenhum alarme está ativo ou esperando
resposta." com "Quando um alarme sobe, ele aparece aqui para poder ser reconhecido."

### Recusas {#refusals}

| Situação | O que acontece |
| --- | --- |
| O papel não tem Operar a lógica | Nem **Reconhecer** nem **Reconhecer todos** é desenhado; as linhas continuam legíveis. Um acionamento que ainda assim chegue ao tratador responde "Seu papel pode ver a Logic, mas não pode operá-la (escrever valores, executar ações, reconhecer alarmes)." |
| O runtime está parado | Os dois verbos continuam desenhados e cinzas com "Runtime parado"; a lista ainda mostra o estado que o registro guarda. |
| Nada aguarda | **Reconhecer todos** fica cinza com "Nenhum alarme está esperando resposta."; nenhuma linha carrega **Reconhecer**. |

## Histórico {#history}

O cartão sob os alarmes atuais é a linha do tempo persistente: uma linha por transição de estado de
alarme, na conduta compartilhada das três linhas do tempo descrita em
[Eventos](events#how-the-three-timelines-behave).

### Busca e filtro {#search-and-filter}

| Controle | Valores | O que faz |
| --- | --- | --- |
| Busca | Texto de exemplo "Busque por nome, mensagem ou origem" | Casamento por "contém" no nome do alarme, na sua mensagem e na origem da transição, como foram fotografados na hora. |
| Prioridade | **Todas as prioridades** (padrão), **Crítica**, **Alta**, **Média**, **Baixa** | Mantém apenas as transições de alarmes que tinham aquela prioridade quando aconteceram. |
| De, Até | Duas caixas de data, vazias de início | Mantém apenas as transições dentro do período, cada caixa um extremo dele: uma caixa vazia não é limite nenhum, e o dia escolhido em **Até** entra inteiro. Enquanto alguma das duas tem uma data, um xis ao lado ("Limpar o período") esvazia as duas. As regras são as que todas as linhas do tempo compartilham, em [Eventos](events#how-the-three-timelines-behave). |
| Atualizar | | Relê o diário; dica "Atualizar eventos de alarme". |
| Exportar | **Exportar como CSV…**, **Exportar como JSON…** | Grava toda transição que a busca, a prioridade e o período alcançam, página após página, e não só as linhas listadas no momento. Desenhado apenas com **Exportar/importar históricos**; fica cinza enquanto a lista está vazia. |

### As linhas {#the-rows-1}

| Parte da linha | Conteúdo |
| --- | --- |
| Hora | Data e hora da transição. |
| Ponto | O tom da prioridade: crítico para Crítica, cautela para Alta, atenção para Média, neutro para Baixa. |
| Nome | O nome do alarme na hora da transição. |
| Resumo | "De → Para · Origem", por exemplo "Sem alarme → Ativo, não reconhecido · Logic". |
| Nível | A palavra da prioridade. |

Toda transição da máquina de estados é gravada, seja qual for a causa. A **Origem** nomeia a
procedência:

| Origem | Significado |
| --- | --- |
| Logic | A varredura da lógica avaliou a condição: uma subida depois do atraso para ligar, ou uma queda depois do atraso para desligar. |
| *O nome de um usuário* | Um reconhecimento feito nesta aba, na página Logic ou num [Aviso de alarme](component-alarm-banner) pelo usuário autenticado ali. |
| Estação | O mesmo reconhecimento sem ninguém autenticado ali, e o **Reconhecer** da tarja de notificação do alarme, que grava sempre a estação. |
| Agente | Um reconhecimento feito por um agente via MCP, que o diário grava como MCP. |
| Configuração | O alarme foi levado de volta a Sem alarme porque a sua definição foi salva com condição, atrasos, exigência de reconhecimento ou estado de habilitação alterados, ou porque ele foi excluído. |

A linha e o painel de detalhes dizem a origem na língua da estação, e a busca a encontra tanto por
essa palavra quanto pela que o diário gravou. A linha copiada e os arquivos exportados a escrevem
como o diário a gravou: Logic, Station, MCP, Configuration ou o nome do usuário.

### O painel de detalhes {#the-detail-panel}

Selecionar uma linha abre o painel com o distintivo da prioridade e o nome, o instante completo, o
resumo da transição, a mensagem que o alarme anunciou na hora (ou "Nenhuma mensagem capturada.") e
dois cartões:

| Cartão | Campo | Conteúdo |
| --- | --- | --- |
| EVENTO | Nível | A prioridade. |
| EVENTO | ID do evento | A identidade desta transição no diário. |
| SNAPSHOT DO ALARME | Transição | "De → Para" nas palavras de estado. |
| SNAPSHOT DO ALARME | Origem | Logic, o nome de um usuário, Estação, Agente ou Configuração. |
| SNAPSHOT DO ALARME | ID do alarme | O id estável da definição do alarme, o mesmo depois de renomear. |

**Copiar o evento** copia "instante | Alarme | prioridade | nome | De → Para · Origem | mensagem" como
uma linha e responde "Evento copiado para a área de transferência."

### Colunas da exportação {#export-columns}

| Coluna | CSV | JSON |
| --- | --- | --- |
| Instante | Primeira coluna, encabeçada "Timestamp (UTC-03:00)" (o fuso da própria estação) | `Timestamp` |
| Prioridade | `Priority` | `Priority` |
| Nome | `Name` | `Name` |
| Transição | `Transition`, escrito "De → Para" | `From` e `To`, dois campos |
| Origem | `Source` | `Source` |
| Mensagem | `Message` | `Message` |
| Id do evento | `EventId` | `EventId` |
| Id do alarme | `AlarmId` | `AlarmId` |

O arquivo JSON é um envelope, `{ "TimeZone": "...", "Events": [ ... ] }`. Os nomes dos arquivos são
`alarm-history-<yyyyMMdd-HHmmss>.csv` e `.json`. O CSV segue a preferência de separador decimal da
estação como toda outra exportação: com decimais por ponto o separador de lista é `,`, com decimais
por vírgula ele é `;`. Uma célula que começa com `=`, `+`, `-` ou `@` recebe um apóstrofo na frente
para que a planilha a leia como texto.

### Estados vazios e a linha de status {#empty-states-and-the-status-line}

- "Nenhum evento de alarme ainda" com "As transições de alarme vão aparecer aqui conforme o runtime
  as observar."
- "Nenhum registro de eventos de alarme combina com estes filtros" com "Ajuste o filtro de
  prioridade ou os termos de busca para ampliar este histórico."
- A linha de status diz "N mostrados · página 1" e, em seguida, " · filtrado" quando uma busca, uma
  prioridade ou um período está em vigor; à direita, "1 selecionada" e
  "Atualizado hh:mm:ss".

## O que a aba Alarmes não faz {#what-the-alarms-tab-does-not-do}

- Ela não cria, edita, habilita, desabilita nem exclui um alarme; isso é [Logic > Alarms](logic-alarms).
- Ela não silencia nem engaveta um alarme, e não emite som nenhum.
- Ela não restaura o estado reconhecido depois de um reinício: o registro rededuz todo estado a
  partir da primeira varredura, e um reconhecimento que estava pendente precisa ser dado de novo. O
  histórico guarda as transições de antes e de depois.
- Ela não diz quem respondeu pelo **Reconhecer** da tarja de notificação: esse reconhecimento é
  gravado como Estação, seja quem for o usuário autenticado.
- Ela não filtra o histórico por alarme nem por estado; busque pelo nome, estreite o período com
  **De** e **Até**, ou exporte o resultado.
- O histórico não tem verbo próprio: nada aqui exclui uma transição.
