トラベルルールポリシー
トラベルルールの適用閾値・対象取引・必要証跡・適用対象外理由コードを定めるスキーマ
| フィールド | 値 |
|---|---|
| Schema ID | https://github.com/ksuk/merlon/schemas/travel_rule_v1.json |
| JSON Schema dialect | https://json-schema.org/draft/2020-12/schema |
| 型 | object |
| Required top-level fields | schema_version, policy_version, threshold_amount, threshold_currency, covered_channels, covered_directions, not_applicable_reasons, assertion_authority, incomplete_routing |
プロパティ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
schema_version | const | Yes | |
policy_version | string | Yes | Recorded on every assessment made under this policy |
threshold_amount | number | Yes | Transfers at or above this value are in scope |
threshold_currency | string | Yes | ISO 4217 code the threshold is expressed in |
covered_channels | array of string | Yes | |
covered_directions | array of enum | Yes | |
applicable_counterparty_types | array | No | |
required_evidence_fields | object | No | Evidence a complete transfer must carry, keyed by counterparty type |
not_applicable_reasons | array of string | Yes | Closed set of exemption reason codes; free text is not accepted in their place |
assertion_authority | enum | Yes | client records a conflicting caller assertion alongside the policy verdict; server rejects it |
incomplete_routing | enum | Yes | Where an applicable-but-incomplete transfer goes for follow-up |
schema_version
| 制約 | 値 |
|---|---|
| Const | "travel_rule_v1" |
policy_version
| 制約 | 値 |
|---|---|
| Min length | 1 |
threshold_amount
| 制約 | 値 |
|---|---|
| Exclusive minimum | 0 |
threshold_currency
| 制約 | 値 |
|---|---|
| Pattern | ^[A-Z]{3}$ |
covered_channels
| 制約 | 値 |
|---|---|
| Min items | 1 |
| Unique items | true |
covered_directions
| 制約 | 値 |
|---|---|
| Min items | 1 |
| Unique items | true |
applicable_counterparty_types
| 制約 | 値 |
|---|---|
| Unique items | true |
required_evidence_fields
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
(any key) | array of string | — |
required_evidence_fields.*
| 制約 | 値 |
|---|---|
| Unique items | true |
not_applicable_reasons
| 制約 | 値 |
|---|---|
| Min items | 1 |
| Unique items | true |
assertion_authority
| 制約 | 値 |
|---|---|
| Enum | "client", "server" |
incomplete_routing
| 制約 | 値 |
|---|---|
| Enum | "pending_review", "none" |
完全なスキーマ
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://github.com/ksuk/merlon/schemas/travel_rule_v1.json",
"title": "Travel Rule Policy",
"description": "Schema for when the Travel Rule applies to a transfer and what evidence a complete transfer must carry",
"type": "object",
"required": [
"schema_version",
"policy_version",
"threshold_amount",
"threshold_currency",
"covered_channels",
"covered_directions",
"not_applicable_reasons",
"assertion_authority",
"incomplete_routing"
],
"properties": {
"schema_version": {
"type": "string",
"const": "travel_rule_v1"
},
"policy_version": {
"type": "string",
"minLength": 1,
"description": "Recorded on every assessment made under this policy"
},
"threshold_amount": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Transfers at or above this value are in scope"
},
"threshold_currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "ISO 4217 code the threshold is expressed in"
},
"covered_channels": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "string"
}
},
"covered_directions": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "string",
"enum": [
"inbound",
"outbound",
"internal"
]
}
},
"applicable_counterparty_types": {
"type": "array",
"uniqueItems": true,
"items": {
"$ref": "#/$defs/counterpartyType"
}
},
"required_evidence_fields": {
"type": "object",
"description": "Evidence a complete transfer must carry, keyed by counterparty type",
"propertyNames": {
"$ref": "#/$defs/counterpartyType"
},
"additionalProperties": {
"type": "array",
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
}
}
},
"not_applicable_reasons": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
},
"description": "Closed set of exemption reason codes; free text is not accepted in their place"
},
"assertion_authority": {
"type": "string",
"enum": [
"client",
"server"
],
"description": "client records a conflicting caller assertion alongside the policy verdict; server rejects it"
},
"incomplete_routing": {
"type": "string",
"enum": [
"pending_review",
"none"
],
"description": "Where an applicable-but-incomplete transfer goes for follow-up"
}
},
"$defs": {
"counterpartyType": {
"type": "string",
"enum": [
"vasp",
"unhosted_wallet",
"unknown"
]
}
}
}