Pular para o conteúdo principal

Cálculos

O recurso de Cálculos (Admin > Metamodelo > aba Cálculos) permite definir fórmulas que computam automaticamente valores de campos quando cards são salvos. Isso é poderoso para derivar métricas, pontuações e agregações dos seus dados de arquitetura.

Como Funciona

  1. Um administrador define uma fórmula direcionada a um tipo de card e campo específicos
  2. Quando qualquer card desse tipo é criado ou atualizado, a fórmula é executada automaticamente
  3. O resultado é gravado no campo alvo
  4. O campo alvo é marcado como somente leitura na página de detalhe do card (usuários veem um badge "calculado")

Criando um Cálculo

Clique em + Novo Cálculo e configure:

CampoDescrição
NomeNome descritivo para o cálculo
Tipo AlvoO tipo de card ao qual este cálculo se aplica
Campo AlvoO campo onde o resultado é armazenado
FórmulaA expressão a ser avaliada (veja a sintaxe abaixo)
Ordem de ExecuçãoOrdem de execução quando múltiplos cálculos existem para o mesmo tipo (menor executa primeiro)
AtivoHabilitar ou desabilitar o cálculo

Sintaxe de Fórmulas

Fórmulas usam uma linguagem de expressão segura e isolada. Você pode referenciar atributos do card, dados de cards relacionados e informações do ciclo de vida.

Variáveis de Contexto

VariávelDescriçãoExemplo
fieldKeyQualquer atributo do card atualbusinessCriticality
related_{type_key}Array de cards relacionados de um determinado tiporelated_applications
lifecycle_plan, lifecycle_active, etc.Valores de data do ciclo de vidalifecycle_endOfLife

Funções Incorporadas

FunçãoDescriçãoExemplo
IF(condition, true_val, false_val)Lógica condicionalIF(riskLevel == "critical", 100, 25)
SUM(array)Soma de valores numéricosSUM(PLUCK(related_applications, "costTotalAnnual"))
AVG(array)Média de valores numéricosAVG(PLUCK(related_applications, "dataQuality"))
MIN(array)Valor mínimoMIN(PLUCK(related_itcomponents, "riskScore"))
MAX(array)Valor máximoMAX(PLUCK(related_itcomponents, "costAnnual"))
COUNT(array)Número de itensCOUNT(related_interfaces)
ROUND(value, decimals)Arredondar um númeroROUND(avgCost, 2)
ABS(value)Valor absolutoABS(delta)
COALESCE(a, b, ...)Primeiro valor não nuloCOALESCE(customScore, 0)
LOWER(text)Texto em minúsculasLOWER(status)
UPPER(text)Texto em maiúsculasUPPER(category)
CONCAT(a, b, ...)Juntar stringsCONCAT(firstName, " ", lastName)
CONTAINS(text, search)Verificar se texto contém substringCONTAINS(description, "legacy")
PLUCK(array, key)Extrair um campo de cada itemPLUCK(related_applications, "name")
FILTER(array, key, value)Filtrar itens por valor de campoFILTER(related_interfaces, "status", "ACTIVE")
MAP_SCORE(value, mapping)Mapear valores categóricos para pontuaçõesMAP_SCORE(criticality, {"high": 3, "medium": 2, "low": 1})

Exemplos de Fórmulas

Custo anual total de aplicações relacionadas:

SUM(PLUCK(related_applications, "costTotalAnnual"))

Pontuação de risco baseada em criticidade:

IF(riskLevel == "critical", 100, IF(riskLevel == "high", 75, IF(riskLevel == "medium", 50, 25)))

Contagem de interfaces ativas:

COUNT(FILTER(related_interfaces, "status", "ACTIVE"))

Posicionamento TIME Model (Tolerar / Investir / Migrar / Eliminar) — o mesmo exemplo que você verá no painel Formula Reference dentro de Admin → Metamodelo → Cálculos ao criar um novo cálculo. Tipo alvo = Application, campo alvo = timeModel. Assume que você adicionou dois campos single_select chamados businessFit e technicalFit com as opções excellent, adequate, insufficient, unreasonable:

# ── TIME Model (Tolerate / Invest / Migrate / Eliminate) ──
# Assumes single_select fields: businessFit and technicalFit
# with options: excellent, adequate, insufficient, unreasonable.
#
# Scoring: Map each dimension to 1-4 numeric scale.
# Business Fit = Y-axis (how well does it serve the business?)
# Technical Fit = X-axis (how healthy is the technology?)
#
# Quadrant logic (threshold at score 2.5):
# Invest = high business + high technical
# Migrate = high business + low technical
# Tolerate = low business + high technical
# Eliminate = low business + low technical
#
bf = MAP_SCORE(data.businessFit, {"excellent": 4, "adequate": 3, "insufficient": 2, "unreasonable": 1})
tf = MAP_SCORE(data.technicalFit, {"excellent": 4, "adequate": 3, "insufficient": 2, "unreasonable": 1})
IF(bf is None or tf is None, None, IF(bf >= 2.5, IF(tf >= 2.5, "invest", "migrate"), IF(tf >= 2.5, "tolerate", "eliminate")))

Este é também o exemplo prático referenciado pelo Guia do Iniciante em EA.

Comentários são suportados usando #:

# Calcular pontuação de risco ponderada
IF(businessCriticality == "missionCritical", riskScore * 2, riskScore)

Executando Cálculos

Cálculos são executados automaticamente quando um card é salvo. Você também pode acionar manualmente um cálculo para executar em todos os cards do tipo alvo:

  1. Encontre o cálculo na lista
  2. Clique no botão Executar
  3. A fórmula é avaliada para cada card correspondente e os resultados são salvos

Ordem de Execução

Quando múltiplos cálculos direcionam o mesmo tipo de card, eles são executados na ordem especificada pelo valor da ordem de execução. Isso é importante quando um cálculo depende do resultado de outro — defina a dependência para executar primeiro (número menor).