# Intertravamentos

> O histórico persistente da trava de intertravamento de parada de cada unidade: disparos, o retorno da origem a uma leitura segura e os rearmes manuais com quem os fez.

A aba Intertravamentos de [Eventos](events) (`/events?view=interlocks`) é a linha do tempo
persistente do **intertravamento de parada**: o sinal booleano que um modelo vigia por unidade para
encerrar uma execução quando a máquina foi parada por fora. Vê-la exige **Ver eventos**; exportar
exige **Exportar/importar históricos**. O intertravamento é configurado em
[Process > Definição > Automação](process-automation) e rearmado pelo componente Intertravamento
de um dashboard ou pela visão da unidade; esta aba grava e não muda nada.

Ela segue a conduta compartilhada das três linhas do tempo descrita em
[Eventos](events#how-the-three-timelines-behave).

## As três transições {#the-three-transitions}

O monitor de intertravamento lê a origem configurada a cada 100 ms, tomando apenas o valor e a
qualidade que o Connector ou a Logic já publicam, sem expressão e sem antirrepique. A trava de uma
unidade passa por Indisponível (nenhuma leitura válida ainda), Sem disparo, Disparado e Aguardando
rearme; três dos seus movimentos vão para o diário:

| Transição | Quando é gravada | Mensagem |
| --- | --- | --- |
| Desarmado | A origem, uma vez armada por uma primeira leitura boa, informa a polaridade de disparo configurada, ou perde a qualidade. A trava é persistida, toda nova execução na unidade é recusada, as suas origens graváveis são bloqueadas, e uma execução em andamento termina como Abortada / NOK com o motivo StopInterlock. Uma unidade que aguardava um rearme e dispara de novo grava um novo Desarmado. | "A origem relata o valor ativo configurado (True)." (ou "(False)"), ou "A origem está indisponível ou com qualidade ruim depois que o intertravamento armou." |
| Origem segura | Enquanto travada, a origem volta a uma leitura boa do valor seguro. A unidade continua bloqueada até que alguém a rearme. | "A origem está segura de novo; é preciso rearmar à mão." |
| Rearmado | Uma pessoa libera a trava enquanto a origem está boa e segura e a unidade não está ocupada terminando a sua execução. Gravado com o nome da pessoa. | "A trava do intertravamento foi rearmada à mão." |

Uma transição observada enquanto o monitor está iniciando ou retomando (quando ele lê sem publicar)
é guardada e escrita na próxima leitura que publica, ou no momento do rearme que a segue, de modo
que um rearme nunca é gravado antes da aresta segura que ele responde. Dentro de uma unidade, todo
instante gravado é estritamente posterior ao anterior, por pelo menos um milissegundo, então a ordem
das linhas nunca é ambígua.

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

| Controle | Valores | O que faz |
| --- | --- | --- |
| Busca | Texto de exemplo "Busque por modelo, unidade, origem, autor ou mensagem" | Casamento por "contém" no nome do modelo, no nome da unidade, na chave e no nome da origem, no autor de um rearme e na mensagem. |
| Transição | **Todas as transições** (padrão), **Desarmado**, **Origem segura**, **Rearmado** | Mantém um tipo de transição. |
| Atualizar | | Relê o diário; dica "Atualizar eventos de intertravamento". |
| Exportar | **Exportar como CSV…**, **Exportar como JSON…** | Grava todo evento que a busca, o filtro de transição 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}

| Parte da linha | Conteúdo |
| --- | --- |
| Hora | Data e hora da transição. |
| Ponto | Crítico para Desarmado, cautela para Origem segura, neutro para Rearmado. |
| Nome | O nome da unidade na hora. |
| Resumo | "Transição · Modelo / Unidade · Origem = valor · qualidade Boa", por exemplo "Desarmado · Prensa 40 / Célula A · EmergencyStop = True · qualidade Boa". O valor se lê True, False ou Indisponível; a qualidade se lê Boa ou Indisponível. |
| Nível | A palavra da transição: Desarmado, Origem segura ou Rearmado. |

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

Selecionar uma linha abre o painel com o distintivo da transição e o nome da unidade, o instante
completo, a linha de resumo, a mensagem e três cartões:

| Cartão | Campo | Conteúdo |
| --- | --- | --- |
| EVENTO | Nível | A transição. |
| EVENTO | ID do evento | A identidade desta transição no diário. |
| SNAPSHOT DO INTERTRAVAMENTO | Transição | Desarmado, Origem segura ou Rearmado. |
| SNAPSHOT DO INTERTRAVAMENTO | Sequência no diário | O número de inserção da linha no diário. |
| SNAPSHOT DO INTERTRAVAMENTO | Modelo, ID do modelo | O nome do modelo na hora e o seu id estável. |
| SNAPSHOT DO INTERTRAVAMENTO | Unidade, ID da unidade | O nome da unidade na hora e o seu id estável. |
| ORIGEM CONGELADA | Origem | O nome do tag ou da variável vigiada na hora ("Origem indisponível" quando não foi possível lê-la; "Variável removida" quando a variável não existia mais). |
| ORIGEM CONGELADA | Chave da origem | A identidade da origem independente de nome, `tag:<id>` ou `var:<id>`, para que uma origem renomeada continue casando com o seu histórico; `unit:<id>` quando a unidade não tinha origem configurada. |
| ORIGEM CONGELADA | Polaridade do disparo | "Disparar quando verdadeiro" ou "Disparar quando falso": qual leitura do booleano encerra a execução. |
| ORIGEM CONGELADA | Valor observado | True, False ou Indisponível (a origem não pôde ser lida ou convertida em booleano). |
| ORIGEM CONGELADA | Qualidade | Boa, ou Indisponível. |
| ORIGEM CONGELADA | Autor | Para Rearmado, o nome de exibição do usuário autenticado na tela que rearmou ("Não conectado" quando não havia ninguém; "Unknown operator" quando nenhum nome chegou). "Automático" para Desarmado e Origem segura. |

**Copiar o evento** copia uma linha: "instante | Intertravamento | transição | unidade | resumo |
mensagem | EventId=… | ModelId=… | UnitId=… | SourceKey=… | SourceName=… | TripWhenTrue=… |
QualityGood=… | ObservedValue=… | Author=…".

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

O CSV e o JSON carregam os mesmos campos, nesta ordem: `Timestamp` (o cabeçalho do CSV acrescenta a
referência de tempo, "Timestamp (UTC-03:00)"), `JournalSequence`, `Transition` (escrito com o nome
bruto `SourceSafe`), `Model`, `ModelId`, `Unit`, `UnitId`, `SourceKey`, `SourceName`,
`TripWhenTrue`, `QualityGood`, `ObservedValue` (vazio quando indisponível), `Author` (vazio numa
transição automática), `Message` e `EventId`. O JSON é um envelope com `TimeZone` e `Events`. Os
nomes dos arquivos são `interlock-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.

## Onde mais uma transição é gravada {#where-else-a-transition-is-recorded}

Toda transição também deixa uma linha no Console sob a área Process: "Interlock tripped: …" como
aviso, "Interlock source returned safe: …" e "Interlock rearmed: …" como informação, cada uma com o
modelo, a unidade, a origem, a polaridade, a qualidade e o valor. A execução que um disparo encerrou
guarda o seu próprio registro em [Históricos](histories), com o motivo StopInterlock. A trava
persistida em si é uma linha à parte, que o monitor mantém até o rearme; ela não é mostrada nesta
aba.

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

- "Nenhum evento de intertravamento ainda" com "Os disparos de intertravamento, as bordas de origem
  segura e os rearmes manuais vão aparecer aqui."
- "Nenhum registro de intertravamento combina com estes filtros" com "Ajuste o filtro de transição
  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
  transição ou um período está em vigor; à direita, "1 selecionada"
  e "Atualizado hh:mm:ss".

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

- Ela não habilita o intertravamento, não escolhe a origem ou a polaridade dele e não desprende uma
  unidade do padrão do modelo ([Process > Definição > Automação](process-automation)).
- Ela não rearma: o comando Rearmar vive no componente Intertravamento e na visão da unidade, e
  precisa de uma origem boa e segura e de uma unidade que não esteja ainda terminando a sua
  execução.
- Ela não mostra o estado ao vivo de uma trava (Indisponível, Sem disparo, Disparado, Aguardando
  rearme); isso é o painel da unidade e o componente Intertravamento. Uma unidade que ainda aguarda
  rearme é reconhecida aqui apenas por uma linha de Origem segura sem um Rearmado depois dela.
- O estado Indisponível antes da primeira leitura boa não é uma transição e não deixa linha.
- Ela não tem filtro por unidade nem por data; busque pelo nome da unidade ou do modelo.
