removedInput schema / properties / logicRule
Removed value: -{
- "description": "Single replacement rule. Insert another logic block for each additional rule.",
- "properties": {
- "actions": {
- "items": {
- "oneOf": [
- {
- "properties": {
- "targets": {
- "items": {
- "oneOf": [
- {
- "properties": {
- "questionId": {
- "description": "Any element with isHidden (question/paragraph/header/image/embed/list-item/table/row/column). Name kept for back-compat.",
- "type": "string"
- },
- "scope": {
- "const": "question",
- "type": "string"
- }
- },
- "required": [
- "scope",
- "questionId"
- ],
- "type": "object"
- },
- {
- "properties": {
- "optionId": {
- "type": "string"
- },
- "questionId": {
- "type": "string"
- },
- "scope": {
- "const": "option",
- "type": "string"
- }
- },
- "required": [
- "scope",
- "questionId",
- "optionId"
- ],
- "type": "object"
- }
- ]
- },
- "type": "array"
- },
- "type": {
- "enum": [
- "show",
- "hide"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "targets"
- ],
- "type": "object"
- },
- {
- "properties": {
- "questionIds": {
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "type": {
- "enum": [
- "require",
- "optional"
- ],
- "type": "string"
- }
- },
- "required": [
- "type",
- "questionIds"
- ],
- "type": "object"
- },
- {
- "properties": {
- "pageId": {
- "type": "string"
- },
- "type": {
- "const": "setNextPage",
- "type": "string"
- }
- },
- "required": [
- "type",
- "pageId"
- ],
- "type": "object"
- },
- {
- "properties": {
- "message": {
- "type": "string"
- },
- "type": {
- "enum": [
- "preventNextPageNavigation",
- "preventFormSubmit"
- ],
- "type": "string"
- }
- },
- "required": [
- "type"
- ],
- "type": "object"
- },
- {
- "properties": {
- "fieldId": {
- "description": "Target field id to mutate. Pass the nodeId of a calculated-field element (hidden-field targets are rejected).",
- "type": "string"
- },
- "operation": {
- "description": "Number fields: add/subtract/multiply/divide/set/reset (use set, never assign, for the first step of a numeric chain). Text fields: assign/concatenate/prepend/reset. Divide: literal 0 is rejected; a 0, empty or non-numeric fieldRef skips the step.",
- "oneOf": [
- {
- "properties": {
- "op": {
- "const": "reset",
- "type": "string"
- }
- },
- "required": [
- "op"
- ],
- "type": "object"
- },
- {
- "properties": {
- "op": {
- "enum": [
- "add",
- "subtract",
- "multiply",
- "divide",
- "set",
- "assign",
- "concatenate",
- "prepend"
- ],
- "type": "string"
- },
- "value": {
- "oneOf": [
- {
- "properties": {
- "kind": {
- "const": "literal",
- "type": "string"
- },
- "value": {
- "type": [
- "number",
- "string",
- "boolean"
- ]
- }
- },
- "required": [
- "kind",
- "value"
- ],
- "type": "object"
- },
- {
- "properties": {
- "fieldId": {
- "type": "string"
- },
- "kind": {
- "const": "fieldRef",
- "type": "string"
- }
- },
- "required": [
- "kind",
- "fieldId"
- ],
- "type": "object"
- }
- ]
- }
- },
- "required": [
- "op",
- "value"
- ],
- "type": "object"
- }
- ]
- },
- "type": {
- "const": "calculateValue",
- "type": "string"
- }
- },
- "required": [
- "type",
- "fieldId",
- "operation"
- ],
- "type": "object"
- },
- {
- "properties": {
- "inputId": {
- "description": "Target payment input id — the nodeId of a payment-input element (not the question id).",
- "type": "string"
- },
- "op": {
- "description": "How to apply value (default 'set'): 'set' replaces the amount; 'increase'/'decrease' adjust the configured base price. Adjustments stack across rules in document order and clamp at 0.",
- "enum": [
- "set",
- "increase",
- "decrease"
- ],
- "type": "string"
- },
- "type": {
- "const": "setPaymentAmount",
- "type": "string"
- },
- "value": {
- "description": "Amount: a literal number, or a fieldRef to a field / calculated value. For increase/decrease this is the delta.",
- "oneOf": [
- {
- "properties": {
- "kind": {
- "const": "literal",
- "type": "string"
- },
- "value": {
- "type": [
- "number",
- "string",
- "boolean"
- ]
- }
- },
- "required": [
- "kind",
- "value"
- ],
- "type": "object"
- },
- {
- "properties": {
- "fieldId": {
- "type": "string"
- },
- "kind": {
- "const": "fieldRef",
- "type": "string"
- }
- },
- "required": [
- "kind",
- "fieldId"
- ],
- "type": "object"
- }
- ]
- }
- },
- "required": [
- "type",
- "inputId",
- "value"
- ],
- "type": "object"
- }
- ]
- },
- "minItems": 1,
- "type": "array"
- },
- "conditionGroup": {
- "description": "Top-level: pass directly as conditionGroup. Nested { type: \"group\", group } children capped at 2 levels.",
- "properties": {
- "children": {
- "items": {
- "anyOf": [
- {
- "properties": {
- "condition": {
- "properties": {
- "field": {
- "description": "Field ID — question input, calculated-field, or hidden-field (not a question or container ID).",
- "type": "string"
- },
- "operator": {
- "enum": [
- "equals",
- "notEquals",
- "contains",
- "notContains",
- "greaterThan",
- "lessThan",
- "isEmpty",
- "isNotEmpty",
- "startsWith",
- "endsWith",
- "greaterThanOrEqual",
- "lessThanOrEqual",
- "isBetween",
- "hasCheckedAnyOf",
- "hasNotCheckedAnyOf",
- "hasCheckedAllOf",
- "hasCheckedExactly",
- "isOn",
- "isOff",
- "isSigned",
- "isNotSigned",
- "hasFile",
- "hasNoFile",
- "isCompleted",
- "isNotCompleted",
- "isBefore",
- "isAfter",
- "isRankedFirst",
- "isRankedLast",
- "isRankedAbove",
- "rowAnswerIs",
- "rowAnswerIsNot",
- "rowIsAnswered",
- "rowIsNotAnswered",
- "amountEquals",
- "amountGreaterThan",
- "amountLessThan"
- ],
- "type": "string"
- },
- "value": {
- "description": "Omit for isEmpty/isNotEmpty."
- }
- },
- "required": [
- "field",
- "operator"
- ],
- "type": "object"
- },
- "type": {
- "const": "condition",
- "type": "string"
- }
- },
- "required": [
- "type",
- "condition"
- ],
- "type": "object"
- },
- {
- "properties": {
- "group": {
- "description": "Nested group (max depth 2): children must be leaf conditions only.",
- "properties": {
- "children": {
- "items": {
- "properties": {
- "condition": {
- "properties": {
- "field": {
- "description": "Field ID — question input, calculated-field, or hidden-field (not a question or container ID).",
- "type": "string"
- },
- "operator": {
- "enum": [
- "equals",
- "notEquals",
- "contains",
- "notContains",
- "greaterThan",
- "lessThan",
- "isEmpty",
- "isNotEmpty",
- "startsWith",
- "endsWith",
- "greaterThanOrEqual",
- "lessThanOrEqual",
- "isBetween",
- "hasCheckedAnyOf",
- "hasNotCheckedAnyOf",
- "hasCheckedAllOf",
- "hasCheckedExactly",
- "isOn",
- "isOff",
- "isSigned",
- "isNotSigned",
- "hasFile",
- "hasNoFile",
- "isCompleted",
- "isNotCompleted",
- "isBefore",
- "isAfter",
- "isRankedFirst",
- "isRankedLast",
- "isRankedAbove",
- "rowAnswerIs",
- "rowAnswerIsNot",
- "rowIsAnswered",
- "rowIsNotAnswered",
- "amountEquals",
- "amountGreaterThan",
- "amountLessThan"
- ],
- "type": "string"
- },
- "value": {
- "description": "Omit for isEmpty/isNotEmpty."
- }
- },
- "required": [
- "field",
- "operator"
- ],
- "type": "object"
- },
- "type": {
- "const": "condition",
- "type": "string"
- }
- },
- "required": [
- "type",
- "condition"
- ],
- "type": "object"
- },
- "minItems": 1,
- "type": "array"
- },
- "combinator": {
- "enum": [
- "AND",
- "OR"
- ],
- "type": "string"
- }
- },
- "required": [
- "combinator",
- "children"
- ],
- "type": "object"
- },
- "type": {
- "const": "group",
- "type": "string"
- }
- },
- "required": [
- "type",
- "group"
- ],
- "type": "object"
- }
- ]
- },
- "minItems": 1,
- "type": "array"
- },
- "combinator": {
- "enum": [
- "AND",
- "OR"
- ],
- "type": "string"
- }
- },
- "required": [
- "combinator",
- "children"
- ],
- "type": "object"
- }
- },
- "required": [
- "conditionGroup",
- "actions"
- ],
- "type": "object"
-}
addedInput schema / properties / rule
Added value: +{
+ "description": "Single replacement rule. Insert another logic block for each additional rule.",
+ "properties": {
+ "actions": {
+ "items": {
+ "oneOf": [
+ {
+ "properties": {
+ "targets": {
+ "items": {
+ "oneOf": [
+ {
+ "properties": {
+ "questionId": {
+ "description": "Any element with isHidden (question/paragraph/header/image/embed/list-item/table/row/column). Name kept for back-compat.",
+ "type": "string"
+ },
+ "scope": {
+ "const": "question",
+ "type": "string"
+ }
+ },
+ "required": [
+ "scope",
+ "questionId"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "optionId": {
+ "type": "string"
+ },
+ "questionId": {
+ "type": "string"
+ },
+ "scope": {
+ "const": "option",
+ "type": "string"
+ }
+ },
+ "required": [
+ "scope",
+ "questionId",
+ "optionId"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "type": "array"
+ },
+ "type": {
+ "enum": [
+ "show",
+ "hide"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "targets"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "questionIds": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "type": {
+ "enum": [
+ "require",
+ "optional"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "questionIds"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "pageId": {
+ "type": "string"
+ },
+ "type": {
+ "const": "setNextPage",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "pageId"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "message": {
+ "type": "string"
+ },
+ "type": {
+ "enum": [
+ "preventNextPageNavigation",
+ "preventFormSubmit"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "fieldId": {
+ "description": "Target field id to mutate. Pass the nodeId of a calculated-field element (hidden-field targets are rejected).",
+ "type": "string"
+ },
+ "operation": {
+ "description": "Number fields: add/subtract/multiply/divide/set/reset (use set, never assign, for the first step of a numeric chain). Text fields: assign/concatenate/prepend/reset. Divide: literal 0 is rejected; a 0, empty or non-numeric fieldRef skips the step.",
+ "oneOf": [
+ {
+ "properties": {
+ "op": {
+ "const": "reset",
+ "type": "string"
+ }
+ },
+ "required": [
+ "op"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "op": {
+ "enum": [
+ "add",
+ "subtract",
+ "multiply",
+ "divide",
+ "set",
+ "assign",
+ "concatenate",
+ "prepend"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "oneOf": [
+ {
+ "properties": {
+ "kind": {
+ "const": "literal",
+ "type": "string"
+ },
+ "value": {
+ "type": [
+ "number",
+ "string",
+ "boolean"
+ ]
+ }
+ },
+ "required": [
+ "kind",
+ "value"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "fieldId": {
+ "type": "string"
+ },
+ "kind": {
+ "const": "fieldRef",
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "fieldId"
+ ],
+ "type": "object"
+ }
+ ]
+ }
+ },
+ "required": [
+ "op",
+ "value"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "type": {
+ "const": "calculateValue",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "fieldId",
+ "operation"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "inputId": {
+ "description": "Target payment input id — the nodeId of a payment-input element (not the question id).",
+ "type": "string"
+ },
+ "op": {
+ "description": "How to apply value (default 'set'): 'set' replaces the amount; 'increase'/'decrease' adjust the configured base price. Adjustments stack across rules in document order and clamp at 0.",
+ "enum": [
+ "set",
+ "increase",
+ "decrease"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "const": "setPaymentAmount",
+ "type": "string"
+ },
+ "value": {
+ "description": "Amount: a literal number, or a fieldRef to a field / calculated value. For increase/decrease this is the delta.",
+ "oneOf": [
+ {
+ "properties": {
+ "kind": {
+ "const": "literal",
+ "type": "string"
+ },
+ "value": {
+ "type": [
+ "number",
+ "string",
+ "boolean"
+ ]
+ }
+ },
+ "required": [
+ "kind",
+ "value"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "fieldId": {
+ "type": "string"
+ },
+ "kind": {
+ "const": "fieldRef",
+ "type": "string"
+ }
+ },
+ "required": [
+ "kind",
+ "fieldId"
+ ],
+ "type": "object"
+ }
+ ]
+ }
+ },
+ "required": [
+ "type",
+ "inputId",
+ "value"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "conditionGroup": {
+ "description": "Top-level: pass directly as conditionGroup. Nested { type: \"group\", group } children capped at 2 levels.",
+ "properties": {
+ "children": {
+ "items": {
+ "anyOf": [
+ {
+ "properties": {
+ "condition": {
+ "properties": {
+ "field": {
+ "description": "Field ID — question input, calculated-field, or hidden-field (not a question or container ID).",
+ "type": "string"
+ },
+ "operator": {
+ "enum": [
+ "equals",
+ "notEquals",
+ "contains",
+ "notContains",
+ "greaterThan",
+ "lessThan",
+ "isEmpty",
+ "isNotEmpty",
+ "startsWith",
+ "endsWith",
+ "greaterThanOrEqual",
+ "lessThanOrEqual",
+ "isBetween",
+ "hasCheckedAnyOf",
+ "hasNotCheckedAnyOf",
+ "hasCheckedAllOf",
+ "hasCheckedExactly",
+ "isOn",
+ "isOff",
+ "isSigned",
+ "isNotSigned",
+ "hasFile",
+ "hasNoFile",
+ "isCompleted",
+ "isNotCompleted",
+ "isBefore",
+ "isAfter",
+ "isRankedFirst",
+ "isRankedLast",
+ "isRankedAbove",
+ "rowAnswerIs",
+ "rowAnswerIsNot",
+ "rowIsAnswered",
+ "rowIsNotAnswered",
+ "amountEquals",
+ "amountGreaterThan",
+ "amountLessThan"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "Omit for isEmpty/isNotEmpty."
+ }
+ },
+ "required": [
+ "field",
+ "operator"
+ ],
+ "type": "object"
+ },
+ "type": {
+ "const": "condition",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "condition"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "group": {
+ "description": "Nested group (max depth 2): children must be leaf conditions only.",
+ "properties": {
+ "children": {
+ "items": {
+ "properties": {
+ "condition": {
+ "properties": {
+ "field": {
+ "description": "Field ID — question input, calculated-field, or hidden-field (not a question or container ID).",
+ "type": "string"
+ },
+ "operator": {
+ "enum": [
+ "equals",
+ "notEquals",
+ "contains",
+ "notContains",
+ "greaterThan",
+ "lessThan",
+ "isEmpty",
+ "isNotEmpty",
+ "startsWith",
+ "endsWith",
+ "greaterThanOrEqual",
+ "lessThanOrEqual",
+ "isBetween",
+ "hasCheckedAnyOf",
+ "hasNotCheckedAnyOf",
+ "hasCheckedAllOf",
+ "hasCheckedExactly",
+ "isOn",
+ "isOff",
+ "isSigned",
+ "isNotSigned",
+ "hasFile",
+ "hasNoFile",
+ "isCompleted",
+ "isNotCompleted",
+ "isBefore",
+ "isAfter",
+ "isRankedFirst",
+ "isRankedLast",
+ "isRankedAbove",
+ "rowAnswerIs",
+ "rowAnswerIsNot",
+ "rowIsAnswered",
+ "rowIsNotAnswered",
+ "amountEquals",
+ "amountGreaterThan",
+ "amountLessThan"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "Omit for isEmpty/isNotEmpty."
+ }
+ },
+ "required": [
+ "field",
+ "operator"
+ ],
+ "type": "object"
+ },
+ "type": {
+ "const": "condition",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "condition"
+ ],
+ "type": "object"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "combinator": {
+ "enum": [
+ "AND",
+ "OR"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "combinator",
+ "children"
+ ],
+ "type": "object"
+ },
+ "type": {
+ "const": "group",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "group"
+ ],
+ "type": "object"
+ }
+ ]
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ "combinator": {
+ "enum": [
+ "AND",
+ "OR"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "combinator",
+ "children"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "conditionGroup",
+ "actions"
+ ],
+ "type": "object"
+}
changedInput schema / required
Previous value: -[
- "formId",
- "nodeId",
- "logicRule"
-]New value: +[
+ "formId",
+ "nodeId",
+ "rule"
+]