# Avaliações

> Os critérios de aprovação e reprovação pelos quais uma execução é julgada, cada campo de um critério, o que cada resultado faz com a execução, e como os resultados se dobram num veredito.

Uma **avaliação** é um conjunto reutilizável de critérios de aprovação e reprovação. Cada critério
vigia um canal legível dentro de uma janela da execução e julga as amostras gravadas dele contra uma
faixa fixa ou uma tolerância em torno de outro canal; cada um fecha com um resultado próprio, e o
veredito da execução é a dobra deles. O motor julga ao vivo sobre as linhas que o datalog grava,
então o canal de um critério e o canal de referência dele precisam ser colunas do datalog do
procedimento: o arquivo da execução prova o que foi julgado. As avaliações vivem em Process >
Modelos > modelo > Preparação > **Avaliações** e exigem a permissão **Editar receitas e avaliações**.

## A pasta Avaliações {#the-evaluations-folder}

Selecionar a linha **Avaliações** abre a página da pasta ("Critérios de aprovação e reprovação contra os
quais uma execução é julgada. A avaliação lê canais do processo.") com um cartão por avaliação, por
nome; clicar num cartão o abre, e o X o remove. Sem nenhuma, a página diz "Nenhuma avaliação ainda.
Adicione uma."

| Comando | O que faz | Fica cinza quando (situação) | Não é desenhado quando (papel) |
| --- | --- | --- | --- |
| **Avaliação** (barra de detalhe, com a pasta selecionada; clique direito **Adicionar avaliação**) | Acrescenta `Avaliação <n>` sem critérios. A linha entra no grupo dela, destacada e rolada até ficar à vista ali; o cartão dela a abre. | Alguma unidade tem uma execução, ou o runtime está parado. | Sem Editar receitas e avaliações. |

## A página da avaliação {#the-evaluations-page}

O cabeçalho carrega o nome, a frase "Critérios de aprovação e reprovação contra os quais uma execução é
julgada." e uma pílula contando os critérios. Todo campo salva sozinho, e toda edição redesenha a
prévia do critério escolhido.

### Definição {#definition}

| Campo | O que é | Valores / padrão |
| --- | --- | --- |
| **Nome** | Como a avaliação se chama na árvore, no seletor de Avaliação de um procedimento e no seletor Avaliar agora de um painel, e a pasta dela sob o `LastRun.Evaluations` de toda unidade ([Nomes são endereços](#names-are-addresses)). Ele é confirmado quando você deixa o campo, pela renomeação que diz antes quantas referências se movem com ele; um nome em branco é recusado. | Texto livre; `Avaliação <n>` na criação. |
| **Observações** | Texto livre para quem a lê. | Vazio por padrão. |

Sob os dois campos, o cartão diz quando um nome desta avaliação ou de um critério dela se lê igual
ao de outro, o que uma versão publicada pode ter salvado (veja
[Nomes são endereços](#names-are-addresses)).

### Como a execução é julgada {#how-the-run-is-judged}

Este cartão declara a dobra que o motor aplica, na ordem dele:

- **NOK** se algum critério reprovar.
- **Indeterminada** se nenhum reprovou e um não pôde ser julgado.
- **OK** só quando todos eles aprovaram.

"A severidade não muda nada disso. Ela é lida contra o limiar de aborto do procedimento e decide
apenas se uma reprovação também encerra a execução ali." O cartão também alerta antes de uma
execução: "Um critério não pode ser julgado como está configurado, então uma execução terminaria
Indeterminada." (ou "`<n>` critérios não podem ser julgados …"), e diz "Nenhum procedimento deste
modelo roda contra esta avaliação ainda." enquanto nada a referencia.

## A lista de critérios {#the-criteria-list}

A lista é encabeçada por **Critérios**, e o botão **Critério** dela acrescenta uma linha no primeiro
canal legível do modelo (âncora Execução inteira, modo Janela inteira, uma faixa fixa com os dois
lados abertos, severidade Grave, sem nome) e a escolhe. Clicar numa linha a abre na coluna
**Critério**; sem nada escolhido, a coluna diz "Selecione um critério para editá-lo inteiro num lugar
só, com o que cada campo decide ao lado dele." A lista carrega o critério inteiro e rola para o lado além
da largura do painel.

| Coluna | O que ela guarda |
| --- | --- |
| **Nome** | O nome do critério, editável ali mesmo. Ele é confirmado quando você deixa a caixa, pela mesma renomeação do campo **Nome** da coluna; uma recusa é dita na barra de status. |
| **Canal** | O canal legível julgado. |
| **Âncora** | Execução inteira, Janela de tempo ou Segmento, cada uma com a forma do trecho que ela julga ao lado do nome e a consequência dela na dica. |
| **Janela** | As duas configurações de que a âncora precisa: **Seg** e **Estab** numa âncora de Segmento, **De** e **Até** numa âncora de Janela de tempo, "Execução inteira" para Execução inteira. |
| **Modo** | Janela inteira ou Um ponto, com a forma dele. |
| **Limite** | Faixa fixa ou Em torno do setpoint, com a forma dele. |
| **Faixa** | **Mín** e **Máx** para uma faixa fixa ("em branco deixa o lado aberto"); o canal de referência e a tolerância **±** para um limite relativo. |
| **Severidade** | Leve, Grave ou Crítica. |
| **Resultado** | O que o critério acrescenta à execução ("NOK reprova a execução", "NOK reprova e interrompe a execução", "Não pode ser julgado"), com a frase inteira na dica. |
| Ação de linha | **Remover** pergunta "Excluir critério": o nome (ou o nome do canal), "Isso remove o critério da avaliação." |

## O critério por inteiro {#the-criterion-in-full}

A coluna abre com uma prévia: a faixa do critério escolhido e o trecho que ele julga, sobre eixos
declarados sem nenhuma amostra por perto (não há execução por trás de uma tela de configuração). Uma
faixa fixa é desenhada nos valores de engenharia do canal, com espaço para uma reprovação de cada
lado; uma faixa relativa é desenhada como desvio em relação ao canal de referência, que fica como a
linha no zero. Quando nada pode ser desenhado (nenhum limite definido, nenhuma referência escolhida)
a moldura diz por quê, em vez de ficar vazia. Sob ela, todo campo fica sobre uma legenda fixa e,
onde a resposta se move com as entradas, sobre o efeito do que está em vigor. As frases de efeito
escrevem os seus números no formato de número da estação ([Idioma e formatos](settings-localization)),
com os dígitos que cada um tem: um limite da faixa ou uma tolerância com até as seis casas que o seu
campo mostra, e um tempo em milissegundos abaixo de um segundo e em segundos daí em diante.

| Campo | O que é | Valores / padrão | Frase de efeito |
| --- | --- | --- | --- |
| **Nome** | "Nomeia esta verificação em todo lugar em que o resultado dela é mostrado." Vazio, cai no canal, no relatório e no endereço do critério sob `LastRun`; a coluna se encabeça `Critério <n>` até a linha ser nomeada. | Texto livre; vazio na criação. | O que confirmar o nome leva junto, como todo campo de renomeação diz: quantas referências se movem, ou que nenhuma se move. |
| **Canal** | "A leitura julgada. Ela precisa ser uma coluna de datalog do procedimento." | Os canais legíveis do modelo; o primeiro na criação. | |
| **Âncora** (JANELA) | "Sobre que trecho da execução este critério é julgado." | **Execução inteira** (padrão), **Janela de tempo**, **Segmento**. | Execução inteira: "Julgado sobre a execução inteira. Não precisa de receita." Janela de tempo: "Julgado entre dois instantes medidos desde a partida da execução." Segmento: "Julgado enquanto a receita está naquele segmento, depois do atraso. Uma pausa o estende." |
| **Segmento (contado do zero)** e **Estabilização (ms)** (âncora de Segmento) | "Qual segmento da receita é julgado, e quanto tempo dentro dele a janela espera antes de abrir." | Números inteiros; 0 e 0 por padrão. Nenhum dos dois campos aceita número negativo: a entrada é recusada, a nota diz isso embaixo do campo, e o valor anterior volta. | "Abre junto com o segmento 1." ou "Abre 2 s dentro do segmento 1." |
| **De (ms)** e **Até (ms, 0 = fim da execução)** (âncora de Janela de tempo) | "Os dois instantes, contados desde a partida da execução, entre os quais a janela fica." | Milissegundos; 0 e 0 por padrão. Até = 0 significa até a execução terminar; fora isso, o Até precisa ficar depois do De. | "De 5 s até o fim da execução.", "De 5 s até 30 s.", ou "Até está no mesmo instante de De ou antes dele, então a janela fica vazia." |
| **Modo** | "Sobre quanto desse trecho o veredito se apoia." | **Janela inteira** (padrão), **Um ponto**. | Janela inteira: "Toda amostra da janela precisa aprovar." Um ponto: "Só a última amostra da janela decide." |
| **Limite** (LIMITES) | "Que forma o limite toma, que é também o que os campos abaixo dele pedem." | **Faixa fixa** (padrão), **Em torno do setpoint**. | Faixa fixa: "Uma faixa fixa de engenharia. Qualquer um dos lados pode ficar aberto." Em torno do setpoint: "Uma faixa em torno de outro canal, amostrado na mesma linha." |
| **Mín** e **Máx** (faixa fixa) | "Os valores de engenharia entre os quais a leitura precisa ficar. Um lado deixado vazio fica aberto." | Números ou vazio; os dois vazios na criação. | "Nenhum limite definido, então toda leitura aprova.", "Aprova em 20 ou acima.", "Aprova em 80 ou abaixo.", "Aprova entre 20 e 80.", ou "O mínimo está acima do máximo, então isto não pode ser julgado e uma execução terminaria Indeterminada.", que é o que o bloco RESULTADO sob a linha também diz |
| **Referência** e **± Tolerância** (relativo) | "O canal contra o qual a leitura é medida, e a que distância dele ela pode ficar." | Um canal legível do modelo e um número; nenhum e 0 na criação. | "Aprova dentro de ±0,5 de Setpoint." ou "Escolha o canal em torno do qual a tolerância é medida." |
| **Severidade** | "Lida contra o limiar de aborto do procedimento. Ela também define o destaque no relatório." | **Leve**, **Grave** (padrão), **Crítica**. | |
| **RESULTADO** | O que o critério produz, e o que isso faz com a execução. | Somente leitura. | Veja abaixo. |

### O que o resultado diz {#what-the-result-says}

| Frase | Detalhe | Quando |
| --- | --- | --- |
| "NOK reprova a execução" | "Uma reprovação torna a execução NOK." ou, quando algum procedimento roda a avaliação, "Uma reprovação torna a execução NOK. A execução ainda termina, porque nenhum procedimento aborta nesta severidade." | Nenhum procedimento que roda esta avaliação aborta na severidade deste critério. |
| "NOK reprova e interrompe a execução" | "Uma reprovação torna a execução NOK e a encerra ali, porque `<procedure>` aborta nesta severidade." | Um procedimento que roda esta avaliação tem Abortar em NOK nesta severidade ou abaixo dela. |
| "Não pode ser julgado" | "Como está configurado ele não pode ser julgado, então deixaria a execução Indeterminada." seguido do motivo. | Um dos motivos abaixo vale. |

Os motivos pelos quais um critério não pode ser julgado, perguntados no momento da configuração na
ordem do próprio motor: "Ele não observa nenhum canal deste modelo."; "O canal que ele observa não é
registrado pelo datalog do procedimento que o executa."; "Ele não segue nenhum canal de referência deste
modelo."; "Até está no mesmo instante de De ou antes dele, então a janela fica vazia."; "Os limites dele estão
incompletos ou invertidos."; "O canal de referência não é registrado pelo datalog do procedimento que o
executa." Os motivos de datalog são perguntados apenas aos procedimentos que rodam a avaliação; uma
avaliação que procedimento nenhum pegou ainda está inacabada, não errada.

## Como os critérios se dobram num veredito {#how-criteria-fold-into-a-verdict}

Toda linha gravada dentro de uma janela ativa é classificada uma vez: **avaliada**, **indisponível**
(um valor faltando ou uma qualidade ruim) ou **inválida** (um valor bom que não é número finito; um
`NaN` bom continua sendo dado bruto auditável, mas não certifica um critério numérico). Um limite
fixo precisa do valor vigiado; um limite relativo precisa do valor vigiado e do de referência da
mesma linha. Os contadores Amostras avaliadas, Amostras fora, Amostras indisponíveis e Amostras
inválidas e o conjunto congelado de canais afetados são gravados por critério, e também são legíveis
ao vivo nos pontos `Procedure.*` da unidade (veja
[O espaço de endereços da unidade](process-addresses)).

Cada resultado também grava o que foi medido: o último valor avaliado do canal vigiado na janela (no
modo Um ponto, a amostra julgada), o menor e o maior valor avaliado, e a pior excursão, a maior
distância além de um limite entre as amostras contadas (0 quando houve amostras avaliadas e nenhuma
saiu). Linhas indisponíveis e inválidas nunca contam, então uma janela sem nada avaliado não grava
nenhum deles. Um arquivo de execução gravado por uma versão anterior não tem valores medidos e os lê
vazios.

Cada resultado guarda ainda o trecho da execução que julgou: o modo, a âncora, o início e o fim de
uma janela de tempo, o segmento e a sua estabilização. Uma execução aberta mais tarde continua
dizendo o que foi julgado, e a evidência no registro da execução e no relatório PDF abre com ele
(veja [Critérios julgados](histories-record#judged-criteria)). Um arquivo de execução gravado por
uma versão anterior não o guardou, e a sua evidência mostra só os contadores.

Os resultados são rigorosos quanto à evidência. No modo **Janela inteira**, qualquer violação
avaliada prova **NOK**; fora disso, uma linha indisponível ou inválida, uma observação interrompida
ou uma janela vazia marcam o critério como **Indeterminada**; só evidência completa dentro da faixa
o torna **OK**. O modo **Um ponto** decide pela última amostra ativa da janela apenas, e os
contadores, a pior excursão e os canais afetados do seu resultado são só dessa amostra; o menor e o
maior valor continuam cobrindo a janela inteira que ele vigiou. Um procedimento Temporizado reancora
todo critério por ciclo e conta os ciclos reprovados. O veredito da execução se dobra em ordem: uma
execução abortada ou qualquer critério NOK a torna **NOK**; fora isso, qualquer resultado
Indeterminado a torna **Indeterminada**; resultados todos OK a tornam **OK**; uma execução sem
avaliação termina sem veredito. Só um NOK confirmado dispara o limiar de aborto do procedimento ou a
contagem de ciclos reprovados.

## Nomes são endereços {#names-are-addresses}

Toda unidade publica o resultado da última execução dela sob
`Process.<Model>.<Unit>.LastRun.Evaluations.<Evaluation>.<Criterion>`
([LastRun](process-addresses#lastrun)), então o nome da avaliação e o nome de cada critério (ou, num
critério sem nome, o do canal dele) são segmentos de endereço, os nomes higienizados: "Soak check" é
`Soak_check`. Renomear um deles move esses endereços e reescreve as expressões, os scripts e as telas
que os escreveram, como toda renomeação do modelo; renomear o canal de um critério sem nome também o
move.

Dois nomes que se leem iguais respondem a um endereço só, que não sabe dizer qual resultado guarda,
então:

| Situação | O que acontece |
| --- | --- |
| Um nome daria a duas avaliações do modelo, ou a dois critérios desta avaliação, o mesmo segmento (maiúsculas e minúsculas não contam) | Recusado, nomeando o segmento e quem já responde a ele. |
| Dois critérios desta avaliação não têm nome e vigiam o mesmo canal | Permitido, já que um critério novo começa assim; nenhum dos dois resultados pode ser lido sob `LastRun` até um deles ganhar nome. |
| Um modelo salvo por uma versão anterior já tem dois nomes assim | Mantidos como estão, e salvos como estão. O endereço compartilhado não lê nada, e o cartão Definição diz isso: "O segmento de endereço Soak_check também é o de Soak Check, então a Logic não lê os resultados da última execução de nenhuma das duas. Renomeie uma delas." ou "Os critérios Oven air, Oven Air compartilham o segmento de endereço Oven_air, então a Logic não lê o resultado da última execução de nenhum deles. Dê a cada um um nome próprio." |
| Um modelo com nomes assim é copiado | A cópia os mantém como a origem os tinha. |

## Onde uma avaliação é usada {#where-an-evaluation-is-used}

| Superfície | O que ela faz com a avaliação |
| --- | --- |
| O estágio **Julgar** de um procedimento | Julga toda execução do procedimento; o seletor **Abortar em NOK ≥** chega junto. A frase do estágio diz "Julga 4 critérios, e um NOK Grave aborta a execução." ou "…, e um NOK nunca aborta a execução." Um procedimento com avaliação e sem datalog não valida. Veja [Procedimentos](process-procedures). |
| O cartão **Comandos avulsos** de um painel | **Avaliar agora** grava uma linha por um datalog e a julga contra a avaliação; o veredito é gravado nos Históricos. Os canais da avaliação precisam ser colunas do datalog escolhido. |
| Comandos de etiqueta | Um marcador pode ler o nome, o canal, os limites, a severidade, o resultado, o erro, os instantes da janela, os contadores de amostras, os canais afetados ou a pior excursão de um critério, para um ciclo explícito. Veja [Ações](process-actions#markers). |
| Relatórios | A seção de critérios imprime o resultado de cada critério com o destaque que a severidade dele define. |
| Logic | O `LastRun.Evaluations` de toda unidade lê o resultado de cada critério na última execução da unidade (resultado, valor medido, extremos, limites, pior excursão, ciclos reprovados), para uma ação da Logic disparada na Conclusão, uma tela ou um alarme. Veja [LastRun](process-addresses#lastrun). |

## Remover avaliação {#remove-evaluation}

**Remover avaliação** fica no grupo de perigo da barra de detalhe com a avaliação selecionada, no
menu de clique direito dela, e como o X no cartão da página da pasta. Ele pergunta antes ("Excluir
avaliação", "Isso remove a avaliação e os critérios dela."). Todo procedimento que julgava por ela
esvazia a referência de Avaliação dele e passa a terminar as execuções dele sem veredito. Ele exige
Editar receitas e avaliações e fica cinza sob a trava de engenharia e o runtime parado.

## O que uma avaliação não faz {#what-an-evaluation-does-not-do}

- Ela não julga nada que um datalog não grave, e nada fora de uma execução ou de uma amostra.
- Ela não tem critérios de expressão: um critério é uma faixa ou uma tolerância sobre um canal.
- Ela não difere entre unidades em nada: um conjunto de limites serve toda unidade do modelo.
- Ela não encerra execução por si. Se um NOK aborta a execução é o limiar Abortar em NOK do
  procedimento, lido contra a severidade do critério.
