@gruncellka/porto-data 0.3.1 → 0.4.1

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 (88) hide show
  1. package/CHANGELOG.md +85 -1
  2. package/LICENSE +199 -5
  3. package/README.md +52 -39
  4. package/index.d.ts +35 -18
  5. package/index.js +2 -1
  6. package/package.json +23 -9
  7. package/porto_data/formats/envelopes.json +120 -0
  8. package/porto_data/formats/layouts.json +288 -0
  9. package/porto_data/mappings.json +65 -10
  10. package/porto_data/metadata.json +662 -125
  11. package/porto_data/policy/jurisdictions.json +839 -0
  12. package/porto_data/policy/markets.json +75 -0
  13. package/porto_data/policy/restrictions.json +668 -0
  14. package/porto_data/providers/deutschepost/features.json +42 -0
  15. package/porto_data/providers/deutschepost/graph.json +203 -0
  16. package/porto_data/providers/deutschepost/limits.json +17 -0
  17. package/porto_data/providers/deutschepost/marks.json +71 -0
  18. package/porto_data/providers/deutschepost/prices/products.json +239 -0
  19. package/porto_data/providers/deutschepost/prices/services.json +51 -0
  20. package/porto_data/providers/deutschepost/products.json +197 -0
  21. package/porto_data/providers/deutschepost/services.json +88 -0
  22. package/porto_data/providers/deutschepost/weights.json +46 -0
  23. package/porto_data/providers/deutschepost/zones.json +231 -0
  24. package/porto_data/providers/laposte/features.json +42 -0
  25. package/porto_data/providers/laposte/graph.json +234 -0
  26. package/porto_data/providers/laposte/limits.json +17 -0
  27. package/porto_data/providers/laposte/marks.json +39 -0
  28. package/porto_data/providers/laposte/prices/products.json +947 -0
  29. package/porto_data/providers/laposte/prices/services.json +41 -0
  30. package/porto_data/providers/laposte/products.json +276 -0
  31. package/porto_data/providers/laposte/services.json +63 -0
  32. package/porto_data/providers/laposte/weights.json +38 -0
  33. package/porto_data/providers/laposte/zones.json +230 -0
  34. package/porto_data/providers/swisspost/features.json +21 -0
  35. package/porto_data/providers/swisspost/graph.json +212 -0
  36. package/porto_data/providers/swisspost/limits.json +17 -0
  37. package/porto_data/providers/swisspost/marks.json +41 -0
  38. package/porto_data/providers/swisspost/prices/products.json +347 -0
  39. package/porto_data/providers/swisspost/prices/services.json +31 -0
  40. package/porto_data/providers/swisspost/products.json +193 -0
  41. package/porto_data/providers/swisspost/rules.json +25 -0
  42. package/porto_data/providers/swisspost/services.json +40 -0
  43. package/porto_data/providers/swisspost/weights.json +38 -0
  44. package/porto_data/providers/swisspost/zones.json +223 -0
  45. package/porto_data/providers/ukrposhta/features.json +28 -0
  46. package/porto_data/providers/ukrposhta/graph.json +148 -0
  47. package/porto_data/providers/ukrposhta/limits.json +17 -0
  48. package/porto_data/providers/ukrposhta/marks.json +25 -0
  49. package/porto_data/providers/ukrposhta/prices/products.json +123 -0
  50. package/porto_data/providers/ukrposhta/prices/services.json +42 -0
  51. package/porto_data/providers/ukrposhta/products.json +74 -0
  52. package/porto_data/providers/ukrposhta/services.json +40 -0
  53. package/porto_data/providers/ukrposhta/weights.json +26 -0
  54. package/porto_data/providers/ukrposhta/zones.json +226 -0
  55. package/porto_data/providers.json +37 -0
  56. package/porto_data/schemas/envelopes.schema.json +120 -0
  57. package/porto_data/schemas/features.schema.json +66 -55
  58. package/porto_data/schemas/graph.schema.json +189 -0
  59. package/porto_data/schemas/jurisdictions.schema.json +116 -0
  60. package/porto_data/schemas/layouts.schema.json +156 -0
  61. package/porto_data/schemas/limits.schema.json +253 -0
  62. package/porto_data/schemas/mappings.schema.json +73 -0
  63. package/porto_data/schemas/markets.schema.json +186 -0
  64. package/porto_data/schemas/marks.schema.json +127 -0
  65. package/porto_data/schemas/metadata.schema.json +183 -0
  66. package/porto_data/schemas/porto_ids.schema.json +45 -0
  67. package/porto_data/schemas/product_prices.schema.json +126 -0
  68. package/porto_data/schemas/products.schema.json +338 -110
  69. package/porto_data/schemas/providers.schema.json +71 -0
  70. package/porto_data/schemas/restrictions.schema.json +175 -355
  71. package/porto_data/schemas/rules.schema.json +104 -0
  72. package/porto_data/schemas/service_prices.schema.json +116 -0
  73. package/porto_data/schemas/services.schema.json +113 -70
  74. package/porto_data/schemas/weights.schema.json +70 -0
  75. package/porto_data/schemas/zones.schema.json +78 -72
  76. package/porto_data/data/data_links.json +0 -148
  77. package/porto_data/data/dimensions.json +0 -158
  78. package/porto_data/data/features.json +0 -66
  79. package/porto_data/data/prices.json +0 -242
  80. package/porto_data/data/products.json +0 -84
  81. package/porto_data/data/restrictions.json +0 -795
  82. package/porto_data/data/services.json +0 -61
  83. package/porto_data/data/weight_tiers.json +0 -54
  84. package/porto_data/data/zones.json +0 -230
  85. package/porto_data/schemas/data_links.schema.json +0 -223
  86. package/porto_data/schemas/dimensions.schema.json +0 -215
  87. package/porto_data/schemas/prices.schema.json +0 -180
  88. package/porto_data/schemas/weight_tiers.schema.json +0 -70
@@ -0,0 +1,156 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://raw.githubusercontent.com/gruncellka/porto-data/refs/heads/main/porto_data/schemas/layouts.schema.json",
4
+ "title": "Envelope layouts by jurisdiction",
5
+ "description": "Print geometry on the envelope front per ISO 3166-1 alpha-2 jurisdiction. Physical sizes: formats/envelopes.json. Coordinates: origin top-left, mm, landscape front. Optional standard cites the norm (e.g. DIN678, SN010130, NFEN13850).",
6
+ "type": "object",
7
+ "required": [
8
+ "file_type",
9
+ "unit",
10
+ "jurisdictions"
11
+ ],
12
+ "definitions": {
13
+ "rectangleMm": {
14
+ "type": "object",
15
+ "required": [
16
+ "x",
17
+ "y",
18
+ "width",
19
+ "height"
20
+ ],
21
+ "properties": {
22
+ "x": {
23
+ "type": "integer",
24
+ "minimum": 0
25
+ },
26
+ "y": {
27
+ "type": "integer",
28
+ "minimum": 0
29
+ },
30
+ "width": {
31
+ "type": "integer",
32
+ "minimum": 1
33
+ },
34
+ "height": {
35
+ "type": "integer",
36
+ "minimum": 1
37
+ }
38
+ },
39
+ "additionalProperties": false
40
+ },
41
+ "postMarkAnchorMm": {
42
+ "type": "object",
43
+ "required": [
44
+ "x",
45
+ "y"
46
+ ],
47
+ "properties": {
48
+ "x": {
49
+ "type": "integer",
50
+ "minimum": 0
51
+ },
52
+ "y": {
53
+ "type": "integer",
54
+ "minimum": 0
55
+ }
56
+ },
57
+ "additionalProperties": false
58
+ },
59
+ "layoutBody": {
60
+ "type": "object",
61
+ "required": [
62
+ "post_mark",
63
+ "window"
64
+ ],
65
+ "properties": {
66
+ "post_mark": {
67
+ "$ref": "#/definitions/postMarkAnchorMm"
68
+ },
69
+ "window": {
70
+ "type": "object",
71
+ "required": [
72
+ "supported"
73
+ ],
74
+ "properties": {
75
+ "supported": {
76
+ "type": "boolean"
77
+ },
78
+ "area": {
79
+ "$ref": "#/definitions/rectangleMm"
80
+ }
81
+ },
82
+ "additionalProperties": false
83
+ }
84
+ },
85
+ "additionalProperties": false
86
+ },
87
+ "envelopeLayoutRow": {
88
+ "type": "object",
89
+ "required": [
90
+ "orientation",
91
+ "layout"
92
+ ],
93
+ "properties": {
94
+ "standard": {
95
+ "type": "string",
96
+ "minLength": 1
97
+ },
98
+ "orientation": {
99
+ "type": "string",
100
+ "enum": [
101
+ "landscape",
102
+ "portrait"
103
+ ]
104
+ },
105
+ "layout": {
106
+ "$ref": "#/definitions/layoutBody"
107
+ }
108
+ },
109
+ "additionalProperties": false
110
+ }
111
+ },
112
+ "properties": {
113
+ "$schema": {
114
+ "type": "string",
115
+ "format": "uri"
116
+ },
117
+ "file_type": {
118
+ "type": "string",
119
+ "const": "layouts"
120
+ },
121
+ "unit": {
122
+ "type": "object",
123
+ "required": [
124
+ "dimension"
125
+ ],
126
+ "properties": {
127
+ "dimension": {
128
+ "type": "string",
129
+ "const": "mm"
130
+ }
131
+ },
132
+ "additionalProperties": false
133
+ },
134
+ "jurisdictions": {
135
+ "type": "object",
136
+ "minProperties": 1,
137
+ "additionalProperties": {
138
+ "type": "object",
139
+ "required": [
140
+ "envelopes"
141
+ ],
142
+ "properties": {
143
+ "envelopes": {
144
+ "type": "object",
145
+ "minProperties": 1,
146
+ "additionalProperties": {
147
+ "$ref": "#/definitions/envelopeLayoutRow"
148
+ }
149
+ }
150
+ },
151
+ "additionalProperties": false
152
+ }
153
+ }
154
+ },
155
+ "additionalProperties": false
156
+ }
@@ -0,0 +1,253 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://raw.githubusercontent.com/gruncellka/porto-data/refs/heads/main/porto_data/schemas/limits.schema.json",
4
+ "title": "Provider limits schema",
5
+ "description": "Provider-scoped operational limits: how this operator applies service (conflicts, infrastructure, internal policy). Not shared legal sanctions—those live in policy/restrictions.json (country / EU / UN regimes, independent of any single carrier). Each limits file is keyed by provider; regime periods and calendar use the provider operational timezone (see frameworks.timezone, aligned with providers.json for the same provider id).",
6
+ "type": "object",
7
+ "required": [
8
+ "file_type",
9
+ "provider",
10
+ "unit",
11
+ "limits",
12
+ "frameworks"
13
+ ],
14
+ "properties": {
15
+ "$schema": {
16
+ "type": "string",
17
+ "format": "uri",
18
+ "description": "JSON Schema URI reference"
19
+ },
20
+ "file_type": {
21
+ "type": "string",
22
+ "const": "limits",
23
+ "description": "File type identifier"
24
+ },
25
+ "provider": {
26
+ "type": "string",
27
+ "pattern": "^[a-z_]+$",
28
+ "description": "Provider id (must match path providers/<id>/)"
29
+ },
30
+ "unit": {
31
+ "type": "object",
32
+ "required": [
33
+ "country_code",
34
+ "date"
35
+ ],
36
+ "properties": {
37
+ "country_code": {
38
+ "type": "string",
39
+ "const": "ISO 3166-1 alpha-2"
40
+ },
41
+ "date": {
42
+ "type": "string",
43
+ "const": "ISO 8601"
44
+ }
45
+ },
46
+ "additionalProperties": false
47
+ },
48
+ "limits": {
49
+ "type": "array",
50
+ "items": {
51
+ "type": "object",
52
+ "required": [
53
+ "id",
54
+ "country_code",
55
+ "status",
56
+ "reason",
57
+ "notes",
58
+ "effective_from"
59
+ ],
60
+ "properties": {
61
+ "id": {
62
+ "type": "string"
63
+ },
64
+ "country_code": {
65
+ "type": "string",
66
+ "pattern": "^[A-Z]{2}$"
67
+ },
68
+ "region_code": {
69
+ "type": "string"
70
+ },
71
+ "status": {
72
+ "type": "string",
73
+ "enum": [
74
+ "restricted",
75
+ "limited",
76
+ "prohibited",
77
+ "severe",
78
+ "operational"
79
+ ]
80
+ },
81
+ "reason": {
82
+ "type": "string"
83
+ },
84
+ "description": {
85
+ "type": "string"
86
+ },
87
+ "notes": {
88
+ "type": "string"
89
+ },
90
+ "areas": {
91
+ "type": "object",
92
+ "additionalProperties": {
93
+ "type": "string"
94
+ }
95
+ },
96
+ "entity_type": {
97
+ "type": "string",
98
+ "enum": [
99
+ "country",
100
+ "territory",
101
+ "disputed"
102
+ ]
103
+ },
104
+ "effective_from": {
105
+ "type": [
106
+ "string",
107
+ "null"
108
+ ],
109
+ "format": "date"
110
+ },
111
+ "effective_to": {
112
+ "type": [
113
+ "string",
114
+ "null"
115
+ ],
116
+ "format": "date"
117
+ },
118
+ "partial": {
119
+ "type": "boolean"
120
+ },
121
+ "reference": {
122
+ "type": [
123
+ "string",
124
+ "null"
125
+ ],
126
+ "format": "uri"
127
+ }
128
+ },
129
+ "additionalProperties": false
130
+ }
131
+ },
132
+ "context": {
133
+ "type": "object",
134
+ "description": "Provider-facing narrative only (this limits file’s carrier). Do not use this object to stand in for legal regimes; policy/restrictions.json holds verifiable destination rows and EU/UN-style frameworks.",
135
+ "properties": {
136
+ "national": {
137
+ "type": "object",
138
+ "required": [
139
+ "description",
140
+ "notes"
141
+ ],
142
+ "properties": {
143
+ "description": {
144
+ "type": "string"
145
+ },
146
+ "notes": {
147
+ "type": "string"
148
+ }
149
+ },
150
+ "additionalProperties": false
151
+ }
152
+ },
153
+ "additionalProperties": false
154
+ },
155
+ "frameworks": {
156
+ "type": "object",
157
+ "description": "Operational regime metadata for this provider. Each framework documents the regime time window (effective_from / effective_to, nullable) interpreted in timezone (provider operational calendar—must match providers.<id>.timezone). limits[] row effective_from/effective_to remain authoritative for SDK activation; framework dates are the documented span, usually aligned with the primary limit row.",
158
+ "patternProperties": {
159
+ "^[A-Z0-9_]+$": {
160
+ "type": "object",
161
+ "required": [
162
+ "id",
163
+ "label",
164
+ "description",
165
+ "type",
166
+ "applies_to",
167
+ "effective_from",
168
+ "effective_to",
169
+ "timezone"
170
+ ],
171
+ "properties": {
172
+ "id": {
173
+ "type": "string"
174
+ },
175
+ "label": {
176
+ "type": "string"
177
+ },
178
+ "description": {
179
+ "type": "string"
180
+ },
181
+ "type": {
182
+ "type": "string",
183
+ "enum": [
184
+ "conflict",
185
+ "infrastructure",
186
+ "political"
187
+ ]
188
+ },
189
+ "applies_to": {
190
+ "type": "array",
191
+ "items": {
192
+ "type": "string",
193
+ "pattern": "^[A-Z]{2}$|^ALL$"
194
+ }
195
+ },
196
+ "regions": {
197
+ "type": "array",
198
+ "items": {
199
+ "type": "object",
200
+ "required": [
201
+ "code",
202
+ "name"
203
+ ],
204
+ "properties": {
205
+ "code": {
206
+ "type": "string"
207
+ },
208
+ "name": {
209
+ "type": "string"
210
+ }
211
+ },
212
+ "additionalProperties": false
213
+ }
214
+ },
215
+ "note": {
216
+ "type": "string"
217
+ },
218
+ "reference": {
219
+ "type": [
220
+ "string",
221
+ "null"
222
+ ],
223
+ "format": "uri"
224
+ },
225
+ "effective_from": {
226
+ "type": [
227
+ "string",
228
+ "null"
229
+ ],
230
+ "format": "date"
231
+ },
232
+ "effective_to": {
233
+ "type": [
234
+ "string",
235
+ "null"
236
+ ],
237
+ "format": "date"
238
+ },
239
+ "timezone": {
240
+ "type": "string",
241
+ "minLength": 3,
242
+ "pattern": "^[A-Za-z0-9_+-]+(/[A-Za-z0-9_+-]+)+$",
243
+ "description": "IANA zone for this provider’s operational calendar (must match providers.json → providers.<id>.timezone for the limits file’s provider). Used when interpreting framework and limits row effective_* dates."
244
+ }
245
+ },
246
+ "additionalProperties": false
247
+ }
248
+ },
249
+ "additionalProperties": false
250
+ }
251
+ },
252
+ "additionalProperties": false
253
+ }
@@ -0,0 +1,73 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://raw.githubusercontent.com/gruncellka/porto-data/refs/heads/main/porto_data/schemas/mappings.schema.json",
4
+ "title": "Porto-data schema ↔ data mappings",
5
+ "description": "Maps each JSON Schema path under schemas/ to its canonical data file (policy/, formats/, providers/<id>/, or bundle root). Blocks mirror bundle layout: policy, formats, registry (e.g. providers.json), providers. Provider keys must match providers.json.",
6
+ "type": "object",
7
+ "required": [
8
+ "mappings"
9
+ ],
10
+ "additionalProperties": false,
11
+ "properties": {
12
+ "$schema": {
13
+ "type": "string",
14
+ "format": "uri"
15
+ },
16
+ "mappings": {
17
+ "type": "object",
18
+ "required": [
19
+ "policy",
20
+ "formats",
21
+ "registry",
22
+ "providers"
23
+ ],
24
+ "additionalProperties": false,
25
+ "properties": {
26
+ "policy": {
27
+ "type": "object",
28
+ "minProperties": 0,
29
+ "additionalProperties": {
30
+ "type": "string",
31
+ "minLength": 1,
32
+ "pattern": "^(?!\\.\\./)([A-Za-z0-9_.-]+/)*[A-Za-z0-9_.-]+\\.json$"
33
+ },
34
+ "description": "Schema paths → data under policy/."
35
+ },
36
+ "formats": {
37
+ "type": "object",
38
+ "minProperties": 0,
39
+ "additionalProperties": {
40
+ "type": "string",
41
+ "minLength": 1,
42
+ "pattern": "^(?!\\.\\./)([A-Za-z0-9_.-]+/)*[A-Za-z0-9_.-]+\\.json$"
43
+ },
44
+ "description": "Schema paths → data under formats/."
45
+ },
46
+ "registry": {
47
+ "type": "object",
48
+ "minProperties": 0,
49
+ "additionalProperties": {
50
+ "type": "string",
51
+ "minLength": 1,
52
+ "pattern": "^(?!\\.\\./)([A-Za-z0-9_.-]+/)*[A-Za-z0-9_.-]+\\.json$"
53
+ },
54
+ "description": "Schema paths → bundle-root manifest files (e.g. providers.json)."
55
+ },
56
+ "providers": {
57
+ "type": "object",
58
+ "minProperties": 0,
59
+ "additionalProperties": {
60
+ "type": "object",
61
+ "minProperties": 1,
62
+ "additionalProperties": {
63
+ "type": "string",
64
+ "minLength": 1,
65
+ "pattern": "^(?!\\.\\./)([A-Za-z0-9_.-]+/)*[A-Za-z0-9_.-]+\\.json$"
66
+ }
67
+ },
68
+ "description": "Provider id → map of schema path → data path under providers/<id>/."
69
+ }
70
+ }
71
+ }
72
+ }
73
+ }
@@ -0,0 +1,186 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://raw.githubusercontent.com/gruncellka/porto-data/refs/heads/main/porto_data/schemas/markets.schema.json",
4
+ "title": "Markets (country fiscal and calendar policy)",
5
+ "description": "Per-country currency, VAT, international quote currencies, and postal working-day calendar. providers.json country resolves fiscal and working_days defaults via markets[COUNTRY]. All operators in the same country share one market row.",
6
+ "type": "object",
7
+ "required": [
8
+ "file_type",
9
+ "unit",
10
+ "markets"
11
+ ],
12
+ "properties": {
13
+ "$schema": {
14
+ "type": "string",
15
+ "format": "uri"
16
+ },
17
+ "file_type": {
18
+ "type": "string",
19
+ "const": "markets"
20
+ },
21
+ "description": {
22
+ "type": "string"
23
+ },
24
+ "unit": {
25
+ "type": "object",
26
+ "description": "Encoding hints for country_code and currency fields in this file.",
27
+ "required": [
28
+ "country_code",
29
+ "currency"
30
+ ],
31
+ "properties": {
32
+ "country_code": {
33
+ "type": "string",
34
+ "const": "ISO 3166-1 alpha-2"
35
+ },
36
+ "currency": {
37
+ "type": "string",
38
+ "const": "ISO 4217"
39
+ }
40
+ },
41
+ "additionalProperties": {
42
+ "type": "string",
43
+ "minLength": 1
44
+ }
45
+ },
46
+ "markets": {
47
+ "type": "object",
48
+ "minProperties": 1,
49
+ "patternProperties": {
50
+ "^[A-Z]{2}$": {
51
+ "$ref": "#/definitions/market"
52
+ }
53
+ },
54
+ "additionalProperties": false
55
+ }
56
+ },
57
+ "definitions": {
58
+ "currency_code": {
59
+ "type": "string",
60
+ "enum": [
61
+ "EUR",
62
+ "CHF",
63
+ "UAH",
64
+ "USD"
65
+ ]
66
+ },
67
+ "vat_lane": {
68
+ "type": "object",
69
+ "required": [
70
+ "inclusive"
71
+ ],
72
+ "properties": {
73
+ "inclusive": {
74
+ "type": "boolean",
75
+ "description": "When true, published tariff amounts for this lane include VAT."
76
+ }
77
+ },
78
+ "additionalProperties": false
79
+ },
80
+ "vat": {
81
+ "type": "object",
82
+ "properties": {
83
+ "rate": {
84
+ "type": "number",
85
+ "minimum": 0,
86
+ "maximum": 1,
87
+ "description": "Standard VAT rate as a fraction (e.g. 0.2 for 20%)."
88
+ },
89
+ "exempt": {
90
+ "type": "boolean",
91
+ "description": "When true, universal letter service is VAT-exempt in this market (all lanes)."
92
+ },
93
+ "domestic": {
94
+ "$ref": "#/definitions/vat_lane",
95
+ "description": "VAT presentation for domestic-zone tariff rows."
96
+ },
97
+ "international": {
98
+ "$ref": "#/definitions/vat_lane",
99
+ "description": "VAT presentation for international-zone tariff rows."
100
+ }
101
+ },
102
+ "additionalProperties": false
103
+ },
104
+ "settlement": {
105
+ "type": "object",
106
+ "required": [
107
+ "currency",
108
+ "fx",
109
+ "fx_date"
110
+ ],
111
+ "properties": {
112
+ "currency": {
113
+ "$ref": "#/definitions/currency_code",
114
+ "description": "Currency charged at checkout or service date."
115
+ },
116
+ "fx": {
117
+ "type": "string",
118
+ "minLength": 1,
119
+ "description": "FX rate source when quoted amount differs from settlement currency (e.g. NBU)."
120
+ },
121
+ "fx_date": {
122
+ "type": "string",
123
+ "minLength": 1,
124
+ "description": "When FX applies (e.g. service for service-date rate)."
125
+ }
126
+ },
127
+ "additionalProperties": false
128
+ },
129
+ "working_days": {
130
+ "type": "object",
131
+ "required": [
132
+ "weekdays",
133
+ "exclude_public_holidays"
134
+ ],
135
+ "properties": {
136
+ "weekdays": {
137
+ "type": "string",
138
+ "enum": [
139
+ "mon_fri",
140
+ "mon_sat"
141
+ ],
142
+ "description": "Which weekdays count toward operator-stated delivery SLAs in this market."
143
+ },
144
+ "exclude_public_holidays": {
145
+ "type": "boolean",
146
+ "description": "When true, public holidays of this market do not count as delivery days."
147
+ }
148
+ },
149
+ "additionalProperties": false
150
+ },
151
+ "market": {
152
+ "type": "object",
153
+ "required": [
154
+ "currency",
155
+ "working_days"
156
+ ],
157
+ "properties": {
158
+ "currency": {
159
+ "$ref": "#/definitions/currency_code",
160
+ "description": "Default domestic postal quote currency for this market."
161
+ },
162
+ "working_days": {
163
+ "$ref": "#/definitions/working_days",
164
+ "description": "Default postal working-day calendar for operator delivery SLAs in this market."
165
+ },
166
+ "international_currency": {
167
+ "type": "array",
168
+ "minItems": 1,
169
+ "uniqueItems": true,
170
+ "items": {
171
+ "$ref": "#/definitions/currency_code"
172
+ },
173
+ "description": "Allowed row-level quote currencies when a tariff row differs from currency."
174
+ },
175
+ "vat": {
176
+ "$ref": "#/definitions/vat"
177
+ },
178
+ "settlement": {
179
+ "$ref": "#/definitions/settlement"
180
+ }
181
+ },
182
+ "additionalProperties": false
183
+ }
184
+ },
185
+ "additionalProperties": false
186
+ }