@epilot/sdk 2.20.56 → 2.20.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/definitions/integration-toolkit.json +133 -16
  2. package/definitions/validation-rules-runtime.json +1 -1
  3. package/definitions/validation-rules.json +32 -18
  4. package/dist/apis/access-token.cjs +11 -7
  5. package/dist/apis/access-token.js +7 -3
  6. package/dist/apis/address-suggestions.cjs +11 -7
  7. package/dist/apis/address-suggestions.js +7 -3
  8. package/dist/apis/address.cjs +11 -7
  9. package/dist/apis/address.js +7 -3
  10. package/dist/apis/ai-agents.cjs +11 -7
  11. package/dist/apis/ai-agents.js +7 -3
  12. package/dist/apis/app.cjs +11 -7
  13. package/dist/apis/app.js +7 -3
  14. package/dist/apis/audit-logs.cjs +11 -7
  15. package/dist/apis/audit-logs.js +7 -3
  16. package/dist/apis/automation.cjs +11 -7
  17. package/dist/apis/automation.js +7 -3
  18. package/dist/apis/billing.cjs +11 -7
  19. package/dist/apis/billing.js +7 -3
  20. package/dist/apis/blueprint-manifest.cjs +11 -7
  21. package/dist/apis/blueprint-manifest.js +7 -3
  22. package/dist/apis/calendar.cjs +11 -7
  23. package/dist/apis/calendar.js +7 -3
  24. package/dist/apis/chat.cjs +11 -7
  25. package/dist/apis/chat.js +7 -3
  26. package/dist/apis/configuration-hub.cjs +11 -7
  27. package/dist/apis/configuration-hub.js +7 -3
  28. package/dist/apis/consent.cjs +11 -7
  29. package/dist/apis/consent.js +7 -3
  30. package/dist/apis/customer-portal.cjs +11 -7
  31. package/dist/apis/customer-portal.js +7 -3
  32. package/dist/apis/dashboard.cjs +11 -7
  33. package/dist/apis/dashboard.js +7 -3
  34. package/dist/apis/data-governance.cjs +11 -7
  35. package/dist/apis/data-governance.js +7 -3
  36. package/dist/apis/deduplication.cjs +11 -7
  37. package/dist/apis/deduplication.js +7 -3
  38. package/dist/apis/design.cjs +11 -7
  39. package/dist/apis/design.js +7 -3
  40. package/dist/apis/document.cjs +11 -7
  41. package/dist/apis/document.js +7 -3
  42. package/dist/apis/email-settings.cjs +11 -7
  43. package/dist/apis/email-settings.js +7 -3
  44. package/dist/apis/email-template.cjs +11 -7
  45. package/dist/apis/email-template.js +7 -3
  46. package/dist/apis/entity-mapping.cjs +11 -7
  47. package/dist/apis/entity-mapping.js +7 -3
  48. package/dist/apis/entity.cjs +11 -7
  49. package/dist/apis/entity.js +7 -3
  50. package/dist/apis/environments.cjs +11 -7
  51. package/dist/apis/environments.js +7 -3
  52. package/dist/apis/event-catalog.cjs +11 -7
  53. package/dist/apis/event-catalog.js +7 -3
  54. package/dist/apis/external-values.cjs +11 -7
  55. package/dist/apis/external-values.js +7 -3
  56. package/dist/apis/file.cjs +11 -7
  57. package/dist/apis/file.js +7 -3
  58. package/dist/apis/iban.cjs +11 -7
  59. package/dist/apis/iban.js +7 -3
  60. package/dist/apis/identity.cjs +11 -7
  61. package/dist/apis/identity.js +7 -3
  62. package/dist/apis/integration-toolkit.cjs +11 -7
  63. package/dist/apis/integration-toolkit.d.cts +2 -2
  64. package/dist/apis/integration-toolkit.d.ts +2 -2
  65. package/dist/apis/integration-toolkit.js +7 -3
  66. package/dist/apis/journey.cjs +11 -7
  67. package/dist/apis/journey.js +7 -3
  68. package/dist/apis/kanban.cjs +11 -7
  69. package/dist/apis/kanban.js +7 -3
  70. package/dist/apis/message.cjs +11 -7
  71. package/dist/apis/message.js +7 -3
  72. package/dist/apis/metering.cjs +11 -7
  73. package/dist/apis/metering.js +7 -3
  74. package/dist/apis/notes.cjs +11 -7
  75. package/dist/apis/notes.js +7 -3
  76. package/dist/apis/notification.cjs +11 -7
  77. package/dist/apis/notification.js +7 -3
  78. package/dist/apis/organization.cjs +11 -7
  79. package/dist/apis/organization.js +7 -3
  80. package/dist/apis/partner-directory.cjs +11 -7
  81. package/dist/apis/partner-directory.js +7 -3
  82. package/dist/apis/permissions.cjs +11 -7
  83. package/dist/apis/permissions.js +7 -3
  84. package/dist/apis/phone-integration.cjs +11 -7
  85. package/dist/apis/phone-integration.js +7 -3
  86. package/dist/apis/pricing-tier.cjs +11 -7
  87. package/dist/apis/pricing-tier.js +7 -3
  88. package/dist/apis/pricing.cjs +11 -7
  89. package/dist/apis/pricing.js +7 -3
  90. package/dist/apis/purpose.cjs +11 -7
  91. package/dist/apis/purpose.js +7 -3
  92. package/dist/apis/query.cjs +11 -7
  93. package/dist/apis/query.js +7 -3
  94. package/dist/apis/sandbox.cjs +11 -7
  95. package/dist/apis/sandbox.js +7 -3
  96. package/dist/apis/sharing.cjs +11 -7
  97. package/dist/apis/sharing.js +7 -3
  98. package/dist/apis/snapshot.cjs +11 -7
  99. package/dist/apis/snapshot.js +7 -3
  100. package/dist/apis/submission.cjs +11 -7
  101. package/dist/apis/submission.js +7 -3
  102. package/dist/apis/target.cjs +11 -7
  103. package/dist/apis/target.js +7 -3
  104. package/dist/apis/targeting.cjs +11 -7
  105. package/dist/apis/targeting.js +7 -3
  106. package/dist/apis/template-variables.cjs +11 -7
  107. package/dist/apis/template-variables.js +7 -3
  108. package/dist/apis/user.cjs +11 -7
  109. package/dist/apis/user.js +7 -3
  110. package/dist/apis/validation-rules.cjs +12 -8
  111. package/dist/apis/validation-rules.d.cts +2 -2
  112. package/dist/apis/validation-rules.d.ts +2 -2
  113. package/dist/apis/validation-rules.js +8 -4
  114. package/dist/apis/webhooks.cjs +11 -7
  115. package/dist/apis/webhooks.js +7 -3
  116. package/dist/apis/workflow-definition.cjs +11 -7
  117. package/dist/apis/workflow-definition.js +7 -3
  118. package/dist/apis/workflow.cjs +11 -7
  119. package/dist/apis/workflow.js +7 -3
  120. package/dist/chunk-HRSCAD3W.cjs +14 -0
  121. package/dist/chunk-PPX45U34.js +14 -0
  122. package/dist/{chunk-GMONLMVN.cjs → chunk-S5K3TLPQ.cjs} +3 -3
  123. package/dist/{chunk-A73AZOKT.js → chunk-VAC7N66U.js} +3 -3
  124. package/dist/index.cjs +19 -12
  125. package/dist/index.d.cts +2 -2
  126. package/dist/index.d.ts +2 -2
  127. package/dist/index.js +11 -4
  128. package/dist/integration-toolkit-3J7KVCK7.cjs +7 -0
  129. package/dist/integration-toolkit-CV2AU2R7.js +7 -0
  130. package/dist/{integration-toolkit.d-CLlaZx6b.d.cts → integration-toolkit.d-DWslwG3c.d.cts} +71 -6
  131. package/dist/{integration-toolkit.d-CLlaZx6b.d.ts → integration-toolkit.d-DWslwG3c.d.ts} +71 -6
  132. package/dist/validation-rules-2XSKTPDC.js +7 -0
  133. package/dist/validation-rules-PHF3RPTN.cjs +7 -0
  134. package/dist/{validation-rules-runtime-X7M3QE5I.cjs → validation-rules-runtime-DENVKYLF.cjs} +2 -2
  135. package/dist/{validation-rules-runtime-6MRCS5X2.js → validation-rules-runtime-VGLVHV36.js} +1 -1
  136. package/dist/{validation-rules.d-Bbo90IYn.d.cts → validation-rules.d-ChX2VKqg.d.cts} +105 -48
  137. package/dist/{validation-rules.d-Bbo90IYn.d.ts → validation-rules.d-ChX2VKqg.d.ts} +105 -48
  138. package/docs/integration-toolkit.md +41 -7
  139. package/docs/validation-rules.md +301 -66
  140. package/package.json +1 -1
  141. package/dist/chunk-7IKQIVUS.js +0 -14
  142. package/dist/chunk-JIUTCNTB.cjs +0 -14
  143. package/dist/integration-toolkit-CG6SFVKC.cjs +0 -7
  144. package/dist/integration-toolkit-TLIEE3DY.js +0 -7
  145. package/dist/validation-rules-2JQLB6PH.cjs +0 -7
  146. package/dist/validation-rules-VQXUQSMC.js +0 -7
@@ -0,0 +1,7 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});require('./chunk-NJK5F5TF.cjs');
2
+
3
+ // src/docs/validation-rules.json
4
+ var validation_rules_default = '# Validation Rules API\n\n- **Full API Docs:** [https://docs.epilot.io/api/validation-rules](https://docs.epilot.io/api/validation-rules)\n\n## Usage\n\n```ts\nimport { epilot } from \'@epilot/sdk\'\n\nepilot.authorize(() => \'<token>\')\nconst { data } = await epilot.validationRules.getValidationRules(...)\n```\n\n### Tree-shakeable import\n\n```ts\nimport { getClient, authorize } from \'@epilot/sdk/validation-rules\'\n\nconst validationRulesClient = getClient()\nauthorize(validationRulesClient, () => \'<token>\')\nconst { data } = await validationRulesClient.getValidationRules(...)\n```\n\n## Operations\n\n**Validation Rules**\n- [`getValidationRules`](#getvalidationrules)\n- [`createValidationRule`](#createvalidationrule)\n- [`getValidationRuleById`](#getvalidationrulebyid)\n- [`updateValidationRule`](#updatevalidationrule)\n- [`deleteValidationRule`](#deletevalidationrule)\n- [`addUsedByReference`](#addusedbyreference)\n- [`removeUsedByReference`](#removeusedbyreference)\n\n**Schemas**\n- [`GetValidationRulesResponse`](#getvalidationrulesresponse)\n- [`CreateValidationRuleRequest`](#createvalidationrulerequest)\n- [`UpdateValidationRuleRequest`](#updatevalidationrulerequest)\n- [`ValidationRuleBase`](#validationrulebase)\n- [`ValidationRule`](#validationrule)\n- [`UsedBy`](#usedby)\n- [`RegexRuleType`](#regexruletype)\n- [`PatternRuleType`](#patternruletype)\n- [`NumericRuleType`](#numericruletype)\n- [`RegexCondition`](#regexcondition)\n- [`RegexNestedCondition`](#regexnestedcondition)\n- [`RegexFactCondition`](#regexfactcondition)\n- [`PatternCondition`](#patterncondition)\n- [`PatternNestedCondition`](#patternnestedcondition)\n- [`PatternFactCondition`](#patternfactcondition)\n- [`NumericCondition`](#numericcondition)\n- [`NumericNestedCondition`](#numericnestedcondition)\n- [`NumericFactCondition`](#numericfactcondition)\n- [`ComparisonRuleType`](#comparisonruletype)\n- [`Condition`](#condition)\n- [`Operator`](#operator)\n- [`ConditionValue`](#conditionvalue)\n- [`ScalarValue`](#scalarvalue)\n- [`ValueReference`](#valuereference)\n- [`EnvironmentValue`](#environmentvalue)\n- [`ExternalValue`](#externalvalue)\n- [`StaticValue`](#staticvalue)\n- [`ContextValue`](#contextvalue)\n- [`ValueAdjustment`](#valueadjustment)\n- [`RelativeDateValue`](#relativedatevalue)\n- [`RangeValue`](#rangevalue)\n- [`NoValue`](#novalue)\n- [`DocumentRuleType`](#documentruletype)\n- [`DocumentCheck`](#documentcheck)\n- [`DocumentCondition`](#documentcondition)\n- [`DocumentOperator`](#documentoperator)\n- [`DocumentConditionValue`](#documentconditionvalue)\n- [`FileTypesValue`](#filetypesvalue)\n- [`CriteriaValue`](#criteriavalue)\n- [`AppliesWhen`](#applieswhen)\n- [`ContextRequirement`](#contextrequirement)\n\n### `getValidationRules`\n\nReturns all validation rules belonging to the authenticated user\'s organization.\n\n`GET /v1/validation-rules`\n\n```ts\nconst { data } = await client.getValidationRules()\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "results": [\n {\n "title": "string",\n "placeholder": "string",\n "used_by": [\n {\n "type": "journey",\n "source_id": "journey-xyz789"\n }\n ],\n "rule": {\n "type": "regex",\n "conditions": {\n "all": [\n {\n "fact": "inputValue",\n "operator": "regexMatch",\n "value": "string",\n "params": {\n "errorMessage": "string"\n }\n },\n {\n "all": [\n {\n "fact": "inputValue",\n "operator": "regexMatch",\n "value": "string",\n "params": {\n "errorMessage": "string"\n }\n }\n ]\n }\n ]\n }\n },\n "contexts": [\n {\n "schema": "contract"\n }\n ],\n "_schema_version": "string",\n "_id": "string",\n "_organization_id": "string",\n "created_at": "string",\n "updated_at": "string",\n "created_by": "string",\n "updated_by": "string"\n }\n ]\n}\n```\n\n</details>\n\n---\n\n### `createValidationRule`\n\nCreates a new validation rule for the authenticated organization.\n\n`POST /v1/validation-rules`\n\n```ts\nconst { data } = await client.createValidationRule(\n null,\n {\n title: \'string\',\n placeholder: \'string\',\n used_by: [\n {\n type: \'journey\',\n source_id: \'journey-xyz789\'\n }\n ],\n rule: {\n type: \'regex\',\n conditions: {\n all: [\n {\n fact: \'inputValue\',\n operator: \'regexMatch\',\n value: \'string\',\n params: {\n errorMessage: \'string\'\n }\n },\n {\n all: [\n {\n fact: \'inputValue\',\n operator: \'regexMatch\',\n value: \'string\',\n params: {\n errorMessage: \'string\'\n }\n }\n ]\n }\n ]\n }\n },\n contexts: [\n {\n schema: \'contract\'\n }\n ]\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "title": "string",\n "placeholder": "string",\n "used_by": [\n {\n "type": "journey",\n "source_id": "journey-xyz789"\n }\n ],\n "rule": {\n "type": "regex",\n "conditions": {\n "all": [\n {\n "fact": "inputValue",\n "operator": "regexMatch",\n "value": "string",\n "params": {\n "errorMessage": "string"\n }\n },\n {\n "all": [\n {\n "fact": "inputValue",\n "operator": "regexMatch",\n "value": "string",\n "params": {\n "errorMessage": "string"\n }\n }\n ]\n }\n ]\n }\n },\n "contexts": [\n {\n "schema": "contract"\n }\n ],\n "_schema_version": "string",\n "_id": "string",\n "_organization_id": "string",\n "created_at": "string",\n "updated_at": "string",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `getValidationRuleById`\n\nRetrieves a specific validation rule by its unique ID.\n\n`GET /v1/validation-rules/{ruleId}`\n\n```ts\nconst { data } = await client.getValidationRuleById({\n ruleId: \'example\',\n})\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "title": "string",\n "placeholder": "string",\n "used_by": [\n {\n "type": "journey",\n "source_id": "journey-xyz789"\n }\n ],\n "rule": {\n "type": "regex",\n "conditions": {\n "all": [\n {\n "fact": "inputValue",\n "operator": "regexMatch",\n "value": "string",\n "params": {\n "errorMessage": "string"\n }\n },\n {\n "all": [\n {\n "fact": "inputValue",\n "operator": "regexMatch",\n "value": "string",\n "params": {\n "errorMessage": "string"\n }\n }\n ]\n }\n ]\n }\n },\n "contexts": [\n {\n "schema": "contract"\n }\n ],\n "_schema_version": "string",\n "_id": "string",\n "_organization_id": "string",\n "created_at": "string",\n "updated_at": "string",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `updateValidationRule`\n\nPartially updates an existing validation rule by ID. Only the fields provided in the request body are updated.\n\n`PATCH /v1/validation-rules/{ruleId}`\n\n```ts\nconst { data } = await client.updateValidationRule(\n {\n ruleId: \'example\',\n },\n {\n title: \'string\',\n placeholder: \'string\',\n used_by: [\n {\n type: \'journey\',\n source_id: \'journey-xyz789\'\n }\n ],\n rule: {\n type: \'regex\',\n conditions: {\n all: [\n {\n fact: \'inputValue\',\n operator: \'regexMatch\',\n value: \'string\',\n params: {\n errorMessage: \'string\'\n }\n },\n {\n all: [\n {\n fact: \'inputValue\',\n operator: \'regexMatch\',\n value: \'string\',\n params: {\n errorMessage: \'string\'\n }\n }\n ]\n }\n ]\n }\n },\n contexts: [\n {\n schema: \'contract\'\n }\n ]\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "title": "string",\n "placeholder": "string",\n "used_by": [\n {\n "type": "journey",\n "source_id": "journey-xyz789"\n }\n ],\n "rule": {\n "type": "regex",\n "conditions": {\n "all": [\n {\n "fact": "inputValue",\n "operator": "regexMatch",\n "value": "string",\n "params": {\n "errorMessage": "string"\n }\n },\n {\n "all": [\n {\n "fact": "inputValue",\n "operator": "regexMatch",\n "value": "string",\n "params": {\n "errorMessage": "string"\n }\n }\n ]\n }\n ]\n }\n },\n "contexts": [\n {\n "schema": "contract"\n }\n ],\n "_schema_version": "string",\n "_id": "string",\n "_organization_id": "string",\n "created_at": "string",\n "updated_at": "string",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `deleteValidationRule`\n\nPermanently deletes a validation rule by ID. Any journeys or entity attributes referencing this rule should be updated before deletion.\n\n`DELETE /v1/validation-rules/{ruleId}`\n\n```ts\nconst { data } = await client.deleteValidationRule({\n ruleId: \'example\',\n})\n```\n\n---\n\n### `addUsedByReference`\n\nAdds a single `used_by` reference to an existing validation rule.\n\n`POST /v1/validation-rules/{ruleId}/used-by`\n\n```ts\nconst { data } = await client.addUsedByReference(\n {\n ruleId: \'example\',\n },\n {\n type: \'journey\',\n source_id: \'journey-xyz789\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "title": "string",\n "placeholder": "string",\n "used_by": [\n {\n "type": "journey",\n "source_id": "journey-xyz789"\n }\n ],\n "rule": {\n "type": "regex",\n "conditions": {\n "all": [\n {\n "fact": "inputValue",\n "operator": "regexMatch",\n "value": "string",\n "params": {\n "errorMessage": "string"\n }\n },\n {\n "all": [\n {\n "fact": "inputValue",\n "operator": "regexMatch",\n "value": "string",\n "params": {\n "errorMessage": "string"\n }\n }\n ]\n }\n ]\n }\n },\n "contexts": [\n {\n "schema": "contract"\n }\n ],\n "_schema_version": "string",\n "_id": "string",\n "_organization_id": "string",\n "created_at": "string",\n "updated_at": "string",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n### `removeUsedByReference`\n\nRemoves a specific `used_by` reference from an existing validation rule.\n\n`DELETE /v1/validation-rules/{ruleId}/used-by`\n\n```ts\nconst { data } = await client.removeUsedByReference(\n {\n ruleId: \'example\',\n },\n {\n type: \'journey\',\n source_id: \'journey-xyz789\'\n },\n)\n```\n\n<details>\n<summary>Response</summary>\n\n```json\n{\n "title": "string",\n "placeholder": "string",\n "used_by": [\n {\n "type": "journey",\n "source_id": "journey-xyz789"\n }\n ],\n "rule": {\n "type": "regex",\n "conditions": {\n "all": [\n {\n "fact": "inputValue",\n "operator": "regexMatch",\n "value": "string",\n "params": {\n "errorMessage": "string"\n }\n },\n {\n "all": [\n {\n "fact": "inputValue",\n "operator": "regexMatch",\n "value": "string",\n "params": {\n "errorMessage": "string"\n }\n }\n ]\n }\n ]\n }\n },\n "contexts": [\n {\n "schema": "contract"\n }\n ],\n "_schema_version": "string",\n "_id": "string",\n "_organization_id": "string",\n "created_at": "string",\n "updated_at": "string",\n "created_by": "string",\n "updated_by": "string"\n}\n```\n\n</details>\n\n---\n\n## Schemas\n\n### `GetValidationRulesResponse`\n\nResponse envelope for listing all validation rules within an organization.\n\n```ts\ntype GetValidationRulesResponse = {\n results?: Array<{\n _schema_version: string\n _id: string\n _organization_id: string\n created_at: string\n updated_at: string\n created_by: string\n updated_by: string\n }>\n}\n```\n\n### `CreateValidationRuleRequest`\n\n```ts\ntype CreateValidationRuleRequest = object\n```\n\n### `UpdateValidationRuleRequest`\n\n```ts\ntype UpdateValidationRuleRequest = {\n title?: string\n placeholder?: string\n used_by?: Array<{\n type: "journey" | "entity"\n schema_slug?: string\n source_id?: string\n }>\n rule?: {\n type: "regex"\n conditions: {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }\n } | {\n type: "pattern"\n conditions: {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }\n } | {\n type: "numeric"\n conditions: {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }\n } | {\n input_type: "number" | "date" | "text"\n conditions: Array<{\n id: { ... }\n operator: { ... }\n value: { ... }\n error_message: { ... }\n applies_when?: { ... }\n allow_failure?: { ... }\n }>\n } | {\n input_type: "document"\n check: {\n level: { ... }\n }\n conditions: Array<{\n id: { ... }\n operator: { ... }\n value: { ... }\n error_message: { ... }\n allow_failure?: { ... }\n }>\n }\n contexts?: Array<{\n schema: string\n }>\n}\n```\n\n### `ValidationRuleBase`\n\n```ts\ntype ValidationRuleBase = {\n title?: string\n placeholder?: string\n used_by?: Array<{\n type: "journey" | "entity"\n schema_slug?: string\n source_id?: string\n }>\n rule?: {\n type: "regex"\n conditions: {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }\n } | {\n type: "pattern"\n conditions: {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }\n } | {\n type: "numeric"\n conditions: {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }\n } | {\n input_type: "number" | "date" | "text"\n conditions: Array<{\n id: { ... }\n operator: { ... }\n value: { ... }\n error_message: { ... }\n applies_when?: { ... }\n allow_failure?: { ... }\n }>\n } | {\n input_type: "document"\n check: {\n level: { ... }\n }\n conditions: Array<{\n id: { ... }\n operator: { ... }\n value: { ... }\n error_message: { ... }\n allow_failure?: { ... }\n }>\n }\n contexts?: Array<{\n schema: string\n }>\n}\n```\n\n### `ValidationRule`\n\nThe Validation rule definition.\n\n```ts\ntype ValidationRule = {\n _schema_version: string\n _id: string\n _organization_id: string\n created_at: string\n updated_at: string\n created_by: string\n updated_by: string\n}\n```\n\n### `UsedBy`\n\nDescribes where and how a validation rule is applied. Used to track associations between rules and the journeys or entity schemas that reference them.\n\n```ts\ntype UsedBy = {\n type: "journey" | "entity"\n schema_slug?: string\n source_id?: string\n}\n```\n\n### `RegexRuleType`\n\nValidation rule that uses a regular expression to validate input.\n\n```ts\ntype RegexRuleType = {\n type: "regex"\n conditions: {\n all: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }>\n } | {\n any: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }>\n } | {\n not: {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }\n }\n}\n```\n\n### `PatternRuleType`\n\nValidation rule that uses a sequence of patterns to validate input.\n\n```ts\ntype PatternRuleType = {\n type: "pattern"\n conditions: {\n all: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }>\n } | {\n any: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }>\n } | {\n not: {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }\n }\n}\n```\n\n### `NumericRuleType`\n\nValidation rule for numeric values, supporting range and digit count constraints.\n\n```ts\ntype NumericRuleType = {\n type: "numeric"\n conditions: {\n all: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }>\n } | {\n any: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }>\n } | {\n not: {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n all: { ... }\n } | {\n any: { ... }\n } | {\n not: { ... }\n }\n }\n}\n```\n\n### `RegexCondition`\n\nCondition definition for a regex-based validation rule (2 levels deep)\n\n```ts\ntype RegexCondition = {\n all: Array<{\n fact: "inputValue"\n operator: "regexMatch"\n value: string\n params?: {\n errorMessage?: { ... }\n }\n } | {\n all: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }>\n } | {\n any: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }>\n } | {\n not: {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }\n }>\n} | {\n any: Array<{\n fact: "inputValue"\n operator: "regexMatch"\n value: string\n params?: {\n errorMessage?: { ... }\n }\n } | {\n all: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }>\n } | {\n any: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }>\n } | {\n not: {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }\n }>\n} | {\n not: {\n fact: "inputValue"\n operator: "regexMatch"\n value: string\n params?: {\n errorMessage?: { ... }\n }\n } | {\n all: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }>\n } | {\n any: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }>\n } | {\n not: {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }\n }\n}\n```\n\n### `RegexNestedCondition`\n\nNested condition with logical operators (level 2 only)\n\n```ts\ntype RegexNestedCondition = {\n all: Array<{\n fact: "inputValue"\n operator: "regexMatch"\n value: string\n params?: {\n errorMessage?: { ... }\n }\n }>\n} | {\n any: Array<{\n fact: "inputValue"\n operator: "regexMatch"\n value: string\n params?: {\n errorMessage?: { ... }\n }\n }>\n} | {\n not: {\n fact: "inputValue"\n operator: "regexMatch"\n value: string\n params?: {\n errorMessage?: { ... }\n }\n }\n}\n```\n\n### `RegexFactCondition`\n\nFact-based condition for regex validation\n\n```ts\ntype RegexFactCondition = {\n fact: "inputValue"\n operator: "regexMatch"\n value: string\n params?: {\n errorMessage?: string\n }\n}\n```\n\n### `PatternCondition`\n\nCondition definition for a pattern-based validation rule (2 levels deep)\n\n```ts\ntype PatternCondition = {\n all: Array<{\n fact: "total-length"\n operator: "equal" | "notEqual" | "lessThan" | "lessThanInclusive" | "greaterThan" | "greaterThanInclusive"\n value: number\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n } | {\n fact: "static-check" | "total-length"\n operator: "exactlyNDigits"\n value: number\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n } | {\n fact: "static-check"\n operator: "in" | "notIn" | "contains" | "doesNotContain"\n value: string[]\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n } | {\n fact: "static-check"\n operator: "equal" | "notEqual"\n value: string\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n } | {\n all: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }>\n } | {\n any: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }>\n } | {\n not: {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n // ...\n}\n```\n\n### `PatternNestedCondition`\n\nNested condition with logical operators (level 2 only)\n\n```ts\ntype PatternNestedCondition = {\n all: Array<{\n fact: "total-length"\n operator: "equal" | "notEqual" | "lessThan" | "lessThanInclusive" | "greaterThan" | "greaterThanInclusive"\n value: number\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n } | {\n fact: "static-check" | "total-length"\n operator: "exactlyNDigits"\n value: number\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n } | {\n fact: "static-check"\n operator: "in" | "notIn" | "contains" | "doesNotContain"\n value: string[]\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n } | {\n fact: "static-check"\n operator: "equal" | "notEqual"\n value: string\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n }>\n} | {\n any: Array<{\n fact: "total-length"\n operator: "equal" | "notEqual" | "lessThan" | "lessThanInclusive" | "greaterThan" | "greaterThanInclusive"\n value: number\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n } | {\n fact: "static-check" | "total-length"\n operator: "exactlyNDigits"\n value: number\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n } | {\n fact: "static-check"\n operator: "in" | "notIn" | "contains" | "doesNotContain"\n value: string[]\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n } | {\n fact: "static-check"\n operator: "equal" | "notEqual"\n value: string\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n }>\n} | {\n not: {\n fact: "total-length"\n operator: "equal" | "notEqual" | "lessThan" | "lessThanInclusive" | "greaterThan" | "greaterThanInclusive"\n value: number\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n } | {\n fact: "static-check" | "total-length"\n operator: "exactlyNDigits"\n value: number\n params?: {\n errorMessage?: { ... }\n start?: { ... }\n end?: { ... }\n }\n } | {\n fact: "static-check"\n operator: "in" | "notIn" | "contains" | "doesNotContain"\n value: string[]\n params?: {\n // ...\n}\n```\n\n### `PatternFactCondition`\n\nFact-based condition for pattern validation\n\n```ts\ntype PatternFactCondition = {\n fact: "total-length"\n operator: "equal" | "notEqual" | "lessThan" | "lessThanInclusive" | "greaterThan" | "greaterThanInclusive"\n value: number\n params?: {\n errorMessage?: string\n start?: number\n end?: number\n }\n} | {\n fact: "static-check" | "total-length"\n operator: "exactlyNDigits"\n value: number\n params?: {\n errorMessage?: string\n start?: number\n end?: number\n }\n} | {\n fact: "static-check"\n operator: "in" | "notIn" | "contains" | "doesNotContain"\n value: string[]\n params?: {\n errorMessage?: string\n start?: number\n end?: number\n }\n} | {\n fact: "static-check"\n operator: "equal" | "notEqual"\n value: string\n params?: {\n errorMessage?: string\n start?: number\n end?: number\n }\n}\n```\n\n### `NumericCondition`\n\nCondition definition for a numeric-based validation rule (2 levels deep)\n\n```ts\ntype NumericCondition = {\n all: Array<{\n fact: "numeric-value" | "total-length"\n operator: "equal" | "notEqual" | "lessThan" | "lessThanInclusive" | "greaterThan" | "greaterThanInclusive"\n value: number\n params?: {\n errorMessage?: { ... }\n }\n } | {\n fact: "integer-digits-count"\n operator: "equal" | "exactlyNDigits" | "minIntegerDigits" | "maxIntegerDigits"\n value: number\n params?: {\n errorMessage?: { ... }\n allowLeadingZeroes?: { ... }\n }\n } | {\n fact: "decimal-digits-count"\n operator: "equal" | "minDecimalDigits" | "maxDecimalDigits"\n value: number\n params?: {\n errorMessage?: { ... }\n }\n } | {\n fact: "has-leading-zeroes"\n operator: "equal" | "notAllowed"\n value: boolean\n params?: {\n errorMessage?: { ... }\n }\n } | {\n all: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }>\n } | {\n any: Array<{\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }>\n } | {\n not: {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n } | {\n fact: { ... }\n operator: { ... }\n value: { ... }\n params?: { ... }\n }\n }>\n} | {\n any: Array<{\n fact: "numeric-value" | "total-length"\n // ...\n}\n```\n\n### `NumericNestedCondition`\n\nNested condition with logical operators (level 2 only)\n\n```ts\ntype NumericNestedCondition = {\n all: Array<{\n fact: "numeric-value" | "total-length"\n operator: "equal" | "notEqual" | "lessThan" | "lessThanInclusive" | "greaterThan" | "greaterThanInclusive"\n value: number\n params?: {\n errorMessage?: { ... }\n }\n } | {\n fact: "integer-digits-count"\n operator: "equal" | "exactlyNDigits" | "minIntegerDigits" | "maxIntegerDigits"\n value: number\n params?: {\n errorMessage?: { ... }\n allowLeadingZeroes?: { ... }\n }\n } | {\n fact: "decimal-digits-count"\n operator: "equal" | "minDecimalDigits" | "maxDecimalDigits"\n value: number\n params?: {\n errorMessage?: { ... }\n }\n } | {\n fact: "has-leading-zeroes"\n operator: "equal" | "notAllowed"\n value: boolean\n params?: {\n errorMessage?: { ... }\n }\n }>\n} | {\n any: Array<{\n fact: "numeric-value" | "total-length"\n operator: "equal" | "notEqual" | "lessThan" | "lessThanInclusive" | "greaterThan" | "greaterThanInclusive"\n value: number\n params?: {\n errorMessage?: { ... }\n }\n } | {\n fact: "integer-digits-count"\n operator: "equal" | "exactlyNDigits" | "minIntegerDigits" | "maxIntegerDigits"\n value: number\n params?: {\n errorMessage?: { ... }\n allowLeadingZeroes?: { ... }\n }\n } | {\n fact: "decimal-digits-count"\n operator: "equal" | "minDecimalDigits" | "maxDecimalDigits"\n value: number\n params?: {\n errorMessage?: { ... }\n }\n } | {\n fact: "has-leading-zeroes"\n operator: "equal" | "notAllowed"\n value: boolean\n params?: {\n errorMessage?: { ... }\n }\n }>\n} | {\n not: {\n fact: "numeric-value" | "total-length"\n operator: "equal" | "notEqual" | "lessThan" | "lessThanInclusive" | "greaterThan" | "greaterThanInclusive"\n value: number\n params?: {\n errorMessage?: { ... }\n }\n } | {\n fact: "integer-digits-count"\n operator: "equal" | "exactlyNDigits" | "minIntegerDigits" | "maxIntegerDigits"\n value: number\n params?: {\n errorMessage?: { ... }\n allowLeadingZeroes?: { ... }\n }\n } | {\n fact: "decimal-digits-count"\n operator: "equal" | "minDecimalDigits" | "maxDecimalDigits"\n value: number\n params?: {\n errorMessage?: { ... }\n }\n } | {\n fact: "has-leading-zeroes"\n operator: "equal" | "notAllowed"\n value: boolean\n params?: {\n errorMessage?: { ... }\n }\n }\n}\n```\n\n### `NumericFactCondition`\n\nFact-based condition for numeric validation\n\n```ts\ntype NumericFactCondition = {\n fact: "numeric-value" | "total-length"\n operator: "equal" | "notEqual" | "lessThan" | "lessThanInclusive" | "greaterThan" | "greaterThanInclusive"\n value: number\n params?: {\n errorMessage?: string\n }\n} | {\n fact: "integer-digits-count"\n operator: "equal" | "exactlyNDigits" | "minIntegerDigits" | "maxIntegerDigits"\n value: number\n params?: {\n errorMessage?: string\n allowLeadingZeroes?: boolean\n }\n} | {\n fact: "decimal-digits-count"\n operator: "equal" | "minDecimalDigits" | "maxDecimalDigits"\n value: number\n params?: {\n errorMessage?: string\n }\n} | {\n fact: "has-leading-zeroes"\n operator: "equal" | "notAllowed"\n value: boolean\n params?: {\n errorMessage?: string\n }\n}\n```\n\n### `ComparisonRuleType`\n\nDeclarative validation rule (schema version v2). Supports predefined comparison operators\nover number, date and text inputs, with static, dynamic (context path), relative-date and\nexternal (app-provided) comparison values.\n\n\n```ts\ntype ComparisonRuleType = {\n input_type: "number" | "date" | "text"\n conditions: Array<{\n id: string\n operator: "equal" | "notEqual" | "greaterThan" | "greaterThanInclusive" | "lessThan" | "lessThanInclusive" | "between" | "dateBefore" | "dateOnOrBefore" | "dateAfter" | "dateOnOrAfter" | "dateBetween" | "notInFuture" | "notInPast" | "contains" | "doesNotContain" | "startsWith" | "endsWith" | "regexMatch" | "lengthBetween" | "maxDigits" | "maxDecimals"\n value: {\n source: { ... }\n data: { ... }\n } | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n offset: { ... }\n unit: { ... }\n anchor?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n min: { ... }\n max: { ... }\n } | {\n source: { ... }\n }\n error_message: string\n applies_when?: {\n path: { ... }\n operator: { ... }\n value?: { ... }\n }\n allow_failure?: boolean\n }>\n}\n```\n\n### `Condition`\n\nA single comparison the input value must satisfy.\n\n```ts\ntype Condition = {\n id: string\n operator: "equal" | "notEqual" | "greaterThan" | "greaterThanInclusive" | "lessThan" | "lessThanInclusive" | "between" | "dateBefore" | "dateOnOrBefore" | "dateAfter" | "dateOnOrAfter" | "dateBetween" | "notInFuture" | "notInPast" | "contains" | "doesNotContain" | "startsWith" | "endsWith" | "regexMatch" | "lengthBetween" | "maxDigits" | "maxDecimals"\n value: {\n source: "static"\n data: number | string | boolean\n } | {\n source: "context"\n path: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "relative_date"\n offset: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n unit: "days" | "months" | "years"\n anchor?: "today"\n } | {\n source: "environment"\n key: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "external"\n app_id: string\n hook_id: string\n result_id: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "range"\n min: {\n source: { ... }\n data: { ... }\n } | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n offset: { ... }\n unit: { ... }\n anchor?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n max: {\n source: { ... }\n data: { ... }\n } | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n offset: { ... }\n unit: { ... }\n anchor?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n // ...\n}\n```\n\n### `Operator`\n\nPredefined comparison operator. Compatibility (enforced at write time):\n- number: equal, notEqual, greaterThan, greaterThanInclusive, lessThan, lessThanInclusive, between, regexMatch,\n maxDigits, maxDecimals\n- date: dateBefore, dateOnOrBefore, dateAfter, dateOnOrAfter, dateBetween, notInFuture, not\n\n```ts\ntype Operator = "equal" | "notEqual" | "greaterThan" | "greaterThanInclusive" | "lessThan" | "lessThanInclusive" | "between" | "dateBefore" | "dateOnOrBefore" | "dateAfter" | "dateOnOrAfter" | "dateBetween" | "notInFuture" | "notInPast" | "contains" | "doesNotContain" | "startsWith" | "endsWith" | "regexMatch" | "lengthBetween" | "maxDigits" | "maxDecimals"\n```\n\n### `ConditionValue`\n\nThe comparison value of a condition - a scalar, a range of scalars, or nothing (unary operators).\n\n```ts\ntype ConditionValue = {\n source: "static"\n data: number | string | boolean\n} | {\n source: "context"\n path: string\n adjust?: {\n type: "percent" | "absolute"\n value: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n direction: "increase" | "decrease"\n rounding?: "up" | "down"\n }\n} | {\n source: "relative_date"\n offset: number | {\n source: "context"\n path: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "environment"\n key: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "external"\n app_id: string\n hook_id: string\n result_id: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n }\n unit: "days" | "months" | "years"\n anchor?: "today"\n} | {\n source: "environment"\n key: string\n adjust?: {\n type: "percent" | "absolute"\n value: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n direction: "increase" | "decrease"\n rounding?: "up" | "down"\n }\n} | {\n source: "external"\n app_id: string\n hook_id: string\n result_id: string\n adjust?: {\n type: "percent" | "absolute"\n value: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n // ...\n}\n```\n\n### `ScalarValue`\n\nA single comparison value - static, resolved from context, a relative date, an organisation environment variable, or an external value.\n\n```ts\ntype ScalarValue = {\n source: "static"\n data: number | string | boolean\n} | {\n source: "context"\n path: string\n adjust?: {\n type: "percent" | "absolute"\n value: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n direction: "increase" | "decrease"\n rounding?: "up" | "down"\n }\n} | {\n source: "relative_date"\n offset: number | {\n source: "context"\n path: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "environment"\n key: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "external"\n app_id: string\n hook_id: string\n result_id: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n }\n unit: "days" | "months" | "years"\n anchor?: "today"\n} | {\n source: "environment"\n key: string\n adjust?: {\n type: "percent" | "absolute"\n value: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n direction: "increase" | "decrease"\n rounding?: "up" | "down"\n }\n} | {\n source: "external"\n app_id: string\n hook_id: string\n result_id: string\n adjust?: {\n type: "percent" | "absolute"\n value: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n // ...\n}\n```\n\n### `ValueReference`\n\nA value resolved at evaluation time instead of written into the rule, identified by\n`source`. Each field that accepts a reference lists the sources it allows; a rule using\nany other source is rejected when it is saved.\n\n\n```ts\ntype ValueReference = {\n source: "context"\n path: string\n adjust?: {\n type: "percent" | "absolute"\n value: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n direction: "increase" | "decrease"\n rounding?: "up" | "down"\n }\n} | {\n source: "environment"\n key: string\n adjust?: {\n type: "percent" | "absolute"\n value: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n direction: "increase" | "decrease"\n rounding?: "up" | "down"\n }\n} | {\n source: "external"\n app_id: string\n hook_id: string\n result_id: string\n adjust?: {\n type: "percent" | "absolute"\n value: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n direction: "increase" | "decrease"\n rounding?: "up" | "down"\n }\n}\n```\n\n### `EnvironmentValue`\n\nA comparison value resolved at evaluation time from an organisation environment variable\n(environments-api). The rule stores the key, never the value, so one change to the variable\nreaches every rule that references it and a blueprint install never overwrites the\norganisation\'s own value.\n\nOnly brow\n\n```ts\ntype EnvironmentValue = {\n source: "environment"\n key: string\n adjust?: {\n type: "percent" | "absolute"\n value: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n direction: "increase" | "decrease"\n rounding?: "up" | "down"\n }\n}\n```\n\n### `ExternalValue`\n\nA comparison value produced at evaluation time by an External Values hook of an installed\napp (component type `EXTERNAL_VALUES`). The rule stores the reference only; the value is\nresolved server-side by the external-values-api, which executes the hook\'s HTTP call with\nthe app\'s credentials and retur\n\n```ts\ntype ExternalValue = {\n source: "external"\n app_id: string\n hook_id: string\n result_id: string\n adjust?: {\n type: "percent" | "absolute"\n value: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n direction: "increase" | "decrease"\n rounding?: "up" | "down"\n }\n}\n```\n\n### `StaticValue`\n\nA fixed comparison value.\n\n```ts\ntype StaticValue = {\n source: "static"\n data: number | string | boolean\n}\n```\n\n### `ContextValue`\n\nA dynamic comparison value resolved from runtime context, e.g. `contract.installment_amount`\nor `previous_reading.value`. The first path segment must match the `name` of a declared\ncontext requirement.\n\n\n```ts\ntype ContextValue = {\n source: "context"\n path: string\n adjust?: {\n type: "percent" | "absolute"\n value: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n direction: "increase" | "decrease"\n rounding?: "up" | "down"\n }\n}\n```\n\n### `ValueAdjustment`\n\nAdjusts a context-resolved numeric value before comparison, e.g. "context value plus 10 percent".\nUsed to express tolerance bands such as "at most 10% above the current instalment amount".\n\n\n```ts\ntype ValueAdjustment = {\n type: "percent" | "absolute"\n value: number | {\n source: "context"\n path: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "environment"\n key: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "external"\n app_id: string\n hook_id: string\n result_id: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n }\n direction: "increase" | "decrease"\n rounding?: "up" | "down"\n}\n```\n\n### `RelativeDateValue`\n\nA date relative to the evaluation moment, e.g. "today minus 30 days". Only valid for date rules.\n\n```ts\ntype RelativeDateValue = {\n source: "relative_date"\n offset: number | {\n source: "context"\n path: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "environment"\n key: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "external"\n app_id: string\n hook_id: string\n result_id: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n }\n unit: "days" | "months" | "years"\n anchor?: "today"\n}\n```\n\n### `RangeValue`\n\nA lower and upper bound for range operators (between, dateBetween, lengthBetween). Bounds are inclusive.\n\n```ts\ntype RangeValue = {\n source: "range"\n min: {\n source: "static"\n data: number | string | boolean\n } | {\n source: "context"\n path: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "relative_date"\n offset: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n unit: "days" | "months" | "years"\n anchor?: "today"\n } | {\n source: "environment"\n key: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "external"\n app_id: string\n hook_id: string\n result_id: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n }\n max: {\n source: "static"\n data: number | string | boolean\n } | {\n source: "context"\n path: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "relative_date"\n offset: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n unit: "days" | "months" | "years"\n anchor?: "today"\n } | {\n source: "environment"\n key: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "external"\n app_id: string\n hook_id: string\n result_id: string\n adjust?: {\n // ...\n}\n```\n\n### `NoValue`\n\nNo comparison value - used by unary operators such as notInFuture / notInPast.\n\n```ts\ntype NoValue = {\n source: "none"\n}\n```\n\n### `DocumentRuleType`\n\nDeclarative validation rule (schema version v2) for uploaded files. The rule declares how deep\nthe check goes (`check.level`) and the conditions the file must satisfy. Property conditions\n(file type, size, page count, image resolution, blank and password-protected detection) are\ndeterministic and av\n\n```ts\ntype DocumentRuleType = {\n input_type: "document"\n check: {\n level: "basic" | "standard" | "advanced"\n }\n conditions: Array<{\n id: string\n operator: "fileTypeIn" | "sizeBelow" | "pageCountBetween" | "resolutionAtLeast" | "resolutionAtMost" | "isNotBlank" | "isNotPasswordProtected" | "meetsCriteria"\n value: {\n source: { ... }\n data: { ... }\n } | {\n source: { ... }\n min: { ... }\n max: { ... }\n } | {\n source: { ... }\n } | {\n source: { ... }\n types: { ... }\n } | {\n source: { ... }\n text: { ... }\n }\n error_message: string\n allow_failure?: boolean\n }>\n}\n```\n\n### `DocumentCheck`\n\nHow deep the document check goes. Levels are cumulative.\n\n```ts\ntype DocumentCheck = {\n level: "basic" | "standard" | "advanced"\n}\n```\n\n### `DocumentCondition`\n\nA single check the uploaded file must satisfy.\n\n```ts\ntype DocumentCondition = {\n id: string\n operator: "fileTypeIn" | "sizeBelow" | "pageCountBetween" | "resolutionAtLeast" | "resolutionAtMost" | "isNotBlank" | "isNotPasswordProtected" | "meetsCriteria"\n value: {\n source: "static"\n data: number | string | boolean\n } | {\n source: "range"\n min: {\n source: { ... }\n data: { ... }\n } | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n offset: { ... }\n unit: { ... }\n anchor?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n max: {\n source: { ... }\n data: { ... }\n } | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n offset: { ... }\n unit: { ... }\n anchor?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n } | {\n source: "none"\n } | {\n source: "file_types"\n types: "image" | "pdf" | "document" | "spreadsheet"[]\n } | {\n source: "criteria"\n text: string\n }\n error_message: string\n allow_failure?: boolean\n}\n```\n\n### `DocumentOperator`\n\nPredefined document check. Value compatibility (enforced at write time):\n- fileTypeIn: `file_types` value listing the accepted file categories.\n- sizeBelow: static integer, maximum file size in bytes.\n- pageCountBetween: `range` of static non-negative integers (inclusive).\n- resolutionAtLeast / reso\n\n```ts\ntype DocumentOperator = "fileTypeIn" | "sizeBelow" | "pageCountBetween" | "resolutionAtLeast" | "resolutionAtMost" | "isNotBlank" | "isNotPasswordProtected" | "meetsCriteria"\n```\n\n### `DocumentConditionValue`\n\nThe value of a document condition - a static scalar, a range, nothing, accepted file categories, or a free-text criterion.\n\n```ts\ntype DocumentConditionValue = {\n source: "static"\n data: number | string | boolean\n} | {\n source: "range"\n min: {\n source: "static"\n data: number | string | boolean\n } | {\n source: "context"\n path: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "relative_date"\n offset: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n unit: "days" | "months" | "years"\n anchor?: "today"\n } | {\n source: "environment"\n key: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "external"\n app_id: string\n hook_id: string\n result_id: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n }\n max: {\n source: "static"\n data: number | string | boolean\n } | {\n source: "context"\n path: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "relative_date"\n offset: number | {\n source: { ... }\n path: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n key: { ... }\n adjust?: { ... }\n } | {\n source: { ... }\n app_id: { ... }\n hook_id: { ... }\n result_id: { ... }\n adjust?: { ... }\n }\n unit: "days" | "months" | "years"\n anchor?: "today"\n } | {\n source: "environment"\n key: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "external"\n app_id: string\n // ...\n}\n```\n\n### `FileTypesValue`\n\nAccepted file categories; each category expands to a mime list at check time.\n\n```ts\ntype FileTypesValue = {\n source: "file_types"\n types: "image" | "pdf" | "document" | "spreadsheet"[]\n}\n```\n\n### `CriteriaValue`\n\nA free-text requirement judged against the document\'s extracted content, e.g. "The photo shows\nan electricity meter with the meter number and the current reading fully legible." One requirement\nper condition keeps results specific and lets each requirement be graded separately.\n\n\n```ts\ntype CriteriaValue = {\n source: "criteria"\n text: string\n}\n```\n\n### `AppliesWhen`\n\nOptional precondition on a condition: the condition only takes part in the\nvalidation when this comparison over context holds. Examples: apply the\ndual-tariff reference only when `contract.htnt` is not empty, or run a\nplausibility check only when a context value reaches a threshold.\n\n\n```ts\ntype AppliesWhen = {\n path: string\n operator: "equal" | "notEqual" | "greaterThan" | "greaterThanInclusive" | "lessThan" | "lessThanInclusive" | "isEmpty" | "isNotEmpty"\n value?: number | string | boolean | {\n source: "context"\n path: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "environment"\n key: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n } | {\n source: "external"\n app_id: string\n hook_id: string\n result_id: string\n adjust?: {\n type: { ... }\n value: { ... }\n direction: { ... }\n rounding?: { ... }\n }\n }\n}\n```\n\n### `ContextRequirement`\n\nAn entity context source the rule needs at evaluation time, referenced by `context`\nvalue paths via the schema slug as their first segment (e.g. `contract.installment_amount`).\nHow the source is resolved (which entity instance) is decided by the consuming surface,\nnot by the rule. Meter reading comp\n\n```ts\ntype ContextRequirement = {\n schema: string\n}\n```\n';
5
+
6
+
7
+ exports.default = validation_rules_default;
@@ -1,5 +1,5 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkJIUTCNTBcjs = require('./chunk-JIUTCNTB.cjs');
3
+ var _chunkHRSCAD3Wcjs = require('./chunk-HRSCAD3W.cjs');
4
4
  require('./chunk-NJK5F5TF.cjs');
5
- exports. default = _chunkJIUTCNTBcjs.require_validation_rules_runtime.call(void 0, );
5
+ exports. default = _chunkHRSCAD3Wcjs.require_validation_rules_runtime.call(void 0, );
@@ -1,5 +1,5 @@
1
1
  import {
2
2
  require_validation_rules_runtime
3
- } from "./chunk-7IKQIVUS.js";
3
+ } from "./chunk-PPX45U34.js";
4
4
  import "./chunk-YPSWSI3M.js";
5
5
  export default require_validation_rules_runtime();
@@ -24,31 +24,28 @@ declare namespace Components {
24
24
  */
25
25
  operator: "equal" | "notEqual" | "greaterThan" | "greaterThanInclusive" | "lessThan" | "lessThanInclusive" | "isEmpty" | "isNotEmpty";
26
26
  /**
27
- * Comparison value for binary operators: a static number, string or boolean, or an
28
- * organisation environment variable (`Number`, `Text` or `Boolean`) so a precondition
29
- * can act as a per-organisation switch or threshold.
27
+ * Comparison value for binary operators: a static number, string or boolean, or a
28
+ * reference resolved at evaluation time. Accepted reference source: `environment` (a
29
+ * `Number`, `Text` or `Boolean` organisation environment variable), so a precondition
30
+ * can act as a per-organisation switch or threshold. Any other source is rejected at
31
+ * write time, and the reference must not carry an `adjust`.
30
32
  *
31
33
  */
32
34
  value?: /**
33
- * Comparison value for binary operators: a static number, string or boolean, or an
34
- * organisation environment variable (`Number`, `Text` or `Boolean`) so a precondition
35
- * can act as a per-organisation switch or threshold.
35
+ * Comparison value for binary operators: a static number, string or boolean, or a
36
+ * reference resolved at evaluation time. Accepted reference source: `environment` (a
37
+ * `Number`, `Text` or `Boolean` organisation environment variable), so a precondition
38
+ * can act as a per-organisation switch or threshold. Any other source is rejected at
39
+ * write time, and the reference must not carry an `adjust`.
36
40
  *
37
41
  */
38
42
  number | string | boolean | /**
39
- * A comparison value resolved at evaluation time from an organisation environment variable
40
- * (environments-api). The rule stores the key, never the value, so one change to the variable
41
- * reaches every rule that references it and a blueprint install never overwrites the
42
- * organisation's own value.
43
- *
44
- * Only browser-safe variable types are allowed: `Number` for numeric comparisons, `Text` for
45
- * text comparisons and for dates (ISO 8601 string), `Boolean` for `applies_when` values.
46
- * `String` and `SecretString` variables are rejected at write time. Write-time validation also
47
- * checks that the variable exists in the organisation; a variable that exists without a value
48
- * (for example seeded by a blueprint install) is accepted and resolves as unavailable until set.
43
+ * A value resolved at evaluation time instead of written into the rule, identified by
44
+ * `source`. Each field that accepts a reference lists the sources it allows; a rule using
45
+ * any other source is rejected when it is saved.
49
46
  *
50
47
  */
51
- EnvironmentValue;
48
+ ValueReference;
52
49
  }
53
50
  /**
54
51
  * Declarative validation rule (schema version v2). Supports predefined comparison operators
@@ -133,8 +130,9 @@ declare namespace Components {
133
130
  * reaches every rule that references it and a blueprint install never overwrites the
134
131
  * organisation's own value.
135
132
  *
136
- * Only browser-safe variable types are allowed: `Number` for numeric comparisons, `Text` for
137
- * text comparisons and for dates (ISO 8601 string), `Boolean` for `applies_when` values.
133
+ * Only browser-safe variable types are allowed: `Number` for numeric comparisons, adjustment
134
+ * amounts and relative-date offsets, `Text` for text comparisons and for dates (ISO 8601
135
+ * string), `Boolean` for `applies_when` values.
138
136
  * `String` and `SecretString` variables are rejected at write time. Write-time validation also
139
137
  * checks that the variable exists in the organisation; a variable that exists without a value
140
138
  * (for example seeded by a blueprint install) is accepted and resolves as unavailable until set.
@@ -354,8 +352,9 @@ declare namespace Components {
354
352
  * reaches every rule that references it and a blueprint install never overwrites the
355
353
  * organisation's own value.
356
354
  *
357
- * Only browser-safe variable types are allowed: `Number` for numeric comparisons, `Text` for
358
- * text comparisons and for dates (ISO 8601 string), `Boolean` for `applies_when` values.
355
+ * Only browser-safe variable types are allowed: `Number` for numeric comparisons, adjustment
356
+ * amounts and relative-date offsets, `Text` for text comparisons and for dates (ISO 8601
357
+ * string), `Boolean` for `applies_when` values.
359
358
  * `String` and `SecretString` variables are rejected at write time. Write-time validation also
360
359
  * checks that the variable exists in the organisation; a variable that exists without a value
361
360
  * (for example seeded by a blueprint install) is accepted and resolves as unavailable until set.
@@ -812,8 +811,27 @@ declare namespace Components {
812
811
  source: "relative_date";
813
812
  /**
814
813
  * Offset from the anchor. Negative values are in the past, positive in the future, 0 is the anchor itself.
814
+ * Either a fixed whole number, or a reference resolved at evaluation time. Accepted reference source:
815
+ * `environment` (a `Number` organisation environment variable). Any other source is rejected at write
816
+ * time, and the reference must not carry an `adjust`. If the referenced value is missing or is not a
817
+ * whole number within ±36500, the comparison is unresolved.
818
+ *
819
+ */
820
+ offset: /**
821
+ * Offset from the anchor. Negative values are in the past, positive in the future, 0 is the anchor itself.
822
+ * Either a fixed whole number, or a reference resolved at evaluation time. Accepted reference source:
823
+ * `environment` (a `Number` organisation environment variable). Any other source is rejected at write
824
+ * time, and the reference must not carry an `adjust`. If the referenced value is missing or is not a
825
+ * whole number within ±36500, the comparison is unresolved.
826
+ *
827
+ */
828
+ number | /**
829
+ * A value resolved at evaluation time instead of written into the rule, identified by
830
+ * `source`. Each field that accepts a reference lists the sources it allows; a rule using
831
+ * any other source is rejected when it is saved.
832
+ *
815
833
  */
816
- offset: number;
834
+ ValueReference;
817
835
  unit: "days" | "months" | "years";
818
836
  anchor?: "today";
819
837
  }
@@ -832,8 +850,9 @@ declare namespace Components {
832
850
  * reaches every rule that references it and a blueprint install never overwrites the
833
851
  * organisation's own value.
834
852
  *
835
- * Only browser-safe variable types are allowed: `Number` for numeric comparisons, `Text` for
836
- * text comparisons and for dates (ISO 8601 string), `Boolean` for `applies_when` values.
853
+ * Only browser-safe variable types are allowed: `Number` for numeric comparisons, adjustment
854
+ * amounts and relative-date offsets, `Text` for text comparisons and for dates (ISO 8601
855
+ * string), `Boolean` for `applies_when` values.
837
856
  * `String` and `SecretString` variables are rejected at write time. Write-time validation also
838
857
  * checks that the variable exists in the organisation; a variable that exists without a value
839
858
  * (for example seeded by a blueprint install) is accepted and resolves as unavailable until set.
@@ -1101,37 +1120,28 @@ declare namespace Components {
1101
1120
  export interface ValueAdjustment {
1102
1121
  type: "percent" | "absolute";
1103
1122
  /**
1104
- * The adjustment amount - a fixed number, or a context path resolving to a number
1105
- * (e.g. a per-contract percentage limit). Contextual adjustment values must not
1106
- * carry a nested adjustment.
1123
+ * The adjustment amount - a fixed non-negative number, or a reference resolving to a
1124
+ * number at evaluation time. Accepted reference sources: `context` (e.g. a per-contract
1125
+ * percentage limit) and `environment` (a `Number` organisation environment variable).
1126
+ * Any other source is rejected at write time, and the reference must not carry its own
1127
+ * `adjust`.
1107
1128
  *
1108
1129
  */
1109
1130
  value: /**
1110
- * The adjustment amount - a fixed number, or a context path resolving to a number
1111
- * (e.g. a per-contract percentage limit). Contextual adjustment values must not
1112
- * carry a nested adjustment.
1131
+ * The adjustment amount - a fixed non-negative number, or a reference resolving to a
1132
+ * number at evaluation time. Accepted reference sources: `context` (e.g. a per-contract
1133
+ * percentage limit) and `environment` (a `Number` organisation environment variable).
1134
+ * Any other source is rejected at write time, and the reference must not carry its own
1135
+ * `adjust`.
1113
1136
  *
1114
1137
  */
1115
1138
  number | /**
1116
- * A dynamic comparison value resolved from runtime context, e.g. `contract.installment_amount`
1117
- * or `previous_reading.value`. The first path segment must match the `name` of a declared
1118
- * context requirement.
1119
- *
1120
- */
1121
- ContextValue | /**
1122
- * A comparison value resolved at evaluation time from an organisation environment variable
1123
- * (environments-api). The rule stores the key, never the value, so one change to the variable
1124
- * reaches every rule that references it and a blueprint install never overwrites the
1125
- * organisation's own value.
1126
- *
1127
- * Only browser-safe variable types are allowed: `Number` for numeric comparisons, `Text` for
1128
- * text comparisons and for dates (ISO 8601 string), `Boolean` for `applies_when` values.
1129
- * `String` and `SecretString` variables are rejected at write time. Write-time validation also
1130
- * checks that the variable exists in the organisation; a variable that exists without a value
1131
- * (for example seeded by a blueprint install) is accepted and resolves as unavailable until set.
1139
+ * A value resolved at evaluation time instead of written into the rule, identified by
1140
+ * `source`. Each field that accepts a reference lists the sources it allows; a rule using
1141
+ * any other source is rejected when it is saved.
1132
1142
  *
1133
1143
  */
1134
- EnvironmentValue;
1144
+ ValueReference;
1135
1145
  direction: "increase" | "decrease";
1136
1146
  /**
1137
1147
  * Rounds the adjusted result to a whole number - `up` (ceiling) or `down` (floor).
@@ -1140,6 +1150,52 @@ declare namespace Components {
1140
1150
  */
1141
1151
  rounding?: "up" | "down";
1142
1152
  }
1153
+ /**
1154
+ * A value resolved at evaluation time instead of written into the rule, identified by
1155
+ * `source`. Each field that accepts a reference lists the sources it allows; a rule using
1156
+ * any other source is rejected when it is saved.
1157
+ *
1158
+ */
1159
+ export type ValueReference = /**
1160
+ * A value resolved at evaluation time instead of written into the rule, identified by
1161
+ * `source`. Each field that accepts a reference lists the sources it allows; a rule using
1162
+ * any other source is rejected when it is saved.
1163
+ *
1164
+ */
1165
+ /**
1166
+ * A dynamic comparison value resolved from runtime context, e.g. `contract.installment_amount`
1167
+ * or `previous_reading.value`. The first path segment must match the `name` of a declared
1168
+ * context requirement.
1169
+ *
1170
+ */
1171
+ ContextValue | /**
1172
+ * A comparison value resolved at evaluation time from an organisation environment variable
1173
+ * (environments-api). The rule stores the key, never the value, so one change to the variable
1174
+ * reaches every rule that references it and a blueprint install never overwrites the
1175
+ * organisation's own value.
1176
+ *
1177
+ * Only browser-safe variable types are allowed: `Number` for numeric comparisons, adjustment
1178
+ * amounts and relative-date offsets, `Text` for text comparisons and for dates (ISO 8601
1179
+ * string), `Boolean` for `applies_when` values.
1180
+ * `String` and `SecretString` variables are rejected at write time. Write-time validation also
1181
+ * checks that the variable exists in the organisation; a variable that exists without a value
1182
+ * (for example seeded by a blueprint install) is accepted and resolves as unavailable until set.
1183
+ *
1184
+ */
1185
+ EnvironmentValue | /**
1186
+ * A comparison value produced at evaluation time by an External Values hook of an installed
1187
+ * app (component type `EXTERNAL_VALUES`). The rule stores the reference only; the value is
1188
+ * resolved server-side by the external-values-api, which executes the hook's HTTP call with
1189
+ * the app's credentials and returns the typed result identified by `result_id`.
1190
+ *
1191
+ * Write-time validation checks that the app is installed in the organisation, that the hook
1192
+ * and result exist, and that the result's type is compatible with the compared kind
1193
+ * (`number` results for numeric comparisons, `text` for text, `date` for date). External values
1194
+ * are resolved only for authenticated consumers (epilot 360 users and portal end customers);
1195
+ * in public journeys the dependent conditions are skipped.
1196
+ *
1197
+ */
1198
+ ExternalValue;
1143
1199
  }
1144
1200
  }
1145
1201
  declare namespace Paths {
@@ -1664,5 +1720,6 @@ type UsedBy = Components.Schemas.UsedBy;
1664
1720
  type ValidationRule = Components.Schemas.ValidationRule;
1665
1721
  type ValidationRuleBase = Components.Schemas.ValidationRuleBase;
1666
1722
  type ValueAdjustment = Components.Schemas.ValueAdjustment;
1723
+ type ValueReference = Components.Schemas.ValueReference;
1667
1724
 
1668
- export { type AppliesWhen as A, type RegexRuleType as B, type Client as C, type DocumentCheck as D, type EnvironmentValue as E, type FileTypesValue as F, type GetValidationRulesResponse as G, type RelativeDateValue as H, type StaticValue as I, type UsedBy as J, type ValidationRuleBase as K, type ValueAdjustment as L, type NoValue as N, type OperationMethods as O, Paths as P, type RangeValue as R, type ScalarValue as S, type UpdateValidationRuleRequest as U, type ValidationRule as V, Components as a, type PathsDictionary as b, type ComparisonRuleType as c, type Condition as d, type ConditionValue as e, type ContextRequirement as f, type ContextValue as g, type CreateValidationRuleRequest as h, type CriteriaValue as i, type DocumentCondition as j, type DocumentConditionValue as k, type DocumentOperator as l, type DocumentRuleType as m, type ExternalValue as n, type NumericCondition as o, type NumericFactCondition as p, type NumericNestedCondition as q, type NumericRuleType as r, type Operator as s, type PatternCondition as t, type PatternFactCondition as u, type PatternNestedCondition as v, type PatternRuleType as w, type RegexCondition as x, type RegexFactCondition as y, type RegexNestedCondition as z };
1725
+ export { type AppliesWhen as A, type RegexRuleType as B, type Client as C, type DocumentCheck as D, type EnvironmentValue as E, type FileTypesValue as F, type GetValidationRulesResponse as G, type RelativeDateValue as H, type StaticValue as I, type UsedBy as J, type ValidationRuleBase as K, type ValueAdjustment as L, type ValueReference as M, type NoValue as N, type OperationMethods as O, Paths as P, type RangeValue as R, type ScalarValue as S, type UpdateValidationRuleRequest as U, type ValidationRule as V, Components as a, type PathsDictionary as b, type ComparisonRuleType as c, type Condition as d, type ConditionValue as e, type ContextRequirement as f, type ContextValue as g, type CreateValidationRuleRequest as h, type CriteriaValue as i, type DocumentCondition as j, type DocumentConditionValue as k, type DocumentOperator as l, type DocumentRuleType as m, type ExternalValue as n, type NumericCondition as o, type NumericFactCondition as p, type NumericNestedCondition as q, type NumericRuleType as r, type Operator as s, type PatternCondition as t, type PatternFactCondition as u, type PatternNestedCondition as v, type PatternRuleType as w, type RegexCondition as x, type RegexFactCondition as y, type RegexNestedCondition as z };