{
  "schemaVersion": 1,
  "kind": "rule-node",
  "count": 5,
  "items": [
    {
      "schemaVersion": 1,
      "type": "CONDITION",
      "name": "CONDITION",
      "category": "FLUXO",
      "summary": "Avalia um campo ou expressão do contexto e escolhe entre os caminhos verdadeiro e falso. Aceita no máximo duas saídas.",
      "documentationUrl": "/rules/nodes/condition",
      "inputs": [
        {
          "key": "expression",
          "label": "Campo ou expressão",
          "type": "EXPRESSION",
          "required": true,
          "description": "Valor do contexto que será avaliado."
        },
        {
          "key": "operator",
          "label": "Operador",
          "type": "ENUM",
          "required": true,
          "description": "Comparação permitida para o tipo informado."
        },
        {
          "key": "value",
          "label": "Valor esperado",
          "type": "ANY",
          "required": false,
          "description": "Segundo operando, quando o operador exigir um."
        }
      ],
      "outputs": []
    },
    {
      "schemaVersion": 1,
      "type": "DELAY",
      "name": "DELAY",
      "category": "FLUXO",
      "summary": "Pausa a execução por uma duração maior que zero. O estado é persistido e o scheduler retoma a regra quando o prazo vence.",
      "documentationUrl": "/rules/nodes/delay",
      "inputs": [
        {
          "key": "duration",
          "label": "Duração",
          "type": "DURATION",
          "required": true,
          "description": "Precisa ser positiva. Para horários de calendário, use um gatilho de agendamento."
        }
      ],
      "outputs": []
    },
    {
      "schemaVersion": 1,
      "type": "JOIN",
      "name": "JOIN",
      "category": "FLUXO",
      "summary": "Barreira de sincronização: aguarda as chegadas esperadas dos ramos paralelos antes de liberar uma única continuação. As chegadas são persistidas.",
      "documentationUrl": "/rules/nodes/join",
      "inputs": [],
      "outputs": []
    },
    {
      "schemaVersion": 1,
      "type": "SUBFLOW",
      "name": "SUBFLOW",
      "category": "FLUXO",
      "summary": "Chama uma regra publicada como parte da execução atual. A regra filha declara um contrato de entrada e saída, e o chamador mapeia valores para esse contrato.",
      "documentationUrl": "/rules/nodes/subflow",
      "inputs": [
        {
          "key": "ruleId",
          "label": "Regra chamada",
          "type": "REFERENCE",
          "required": true,
          "description": "Regra publicada com gatilho SUBFLOW."
        },
        {
          "key": "inputMapping",
          "label": "Mapeamento de entrada",
          "type": "MAP",
          "required": true,
          "description": "Todo input obrigatório do contrato precisa estar mapeado antes da publicação."
        }
      ],
      "outputs": []
    },
    {
      "schemaVersion": 1,
      "type": "USER_TASK",
      "name": "USER TASK",
      "category": "PROCESSO",
      "summary": "Cria uma tarefa humana e pausa a execução da regra até que uma pessoa registre um resultado.",
      "documentationUrl": "/rules/nodes/user-task",
      "inputs": [
        {
          "key": "title",
          "label": "Título",
          "type": "TEXT",
          "required": true
        },
        {
          "key": "description",
          "label": "Descrição",
          "type": "TEXT",
          "required": false
        },
        {
          "key": "assignee",
          "label": "Responsável",
          "type": "REFERENCE",
          "required": false
        },
        {
          "key": "outcomeOptions",
          "label": "Opções de resultado",
          "type": "LIST",
          "required": true,
          "description": "Desfechos possíveis, mutuamente exclusivos."
        },
        {
          "key": "saveOutcomeAs",
          "label": "Variável de resultado",
          "type": "TEXT",
          "required": true,
          "description": "Onde o desfecho escolhido fica disponível para os próximos nós."
        }
      ],
      "outputs": []
    }
  ]
}
