@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,193 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/gruncellka/porto-data/refs/heads/main/porto_data/schemas/products.schema.json",
3
+ "file_type": "products",
4
+ "provider": "swisspost",
5
+ "unit": {
6
+ "weight": "g"
7
+ },
8
+ "products": [
9
+ {
10
+ "id": "a_post_standardbrief",
11
+ "porto_id": "small",
12
+ "name": "A-Post Standardbrief",
13
+ "envelope_ids": [
14
+ "DL",
15
+ "C6"
16
+ ],
17
+ "zones": [
18
+ "domestic"
19
+ ],
20
+ "effective_from": "2026-01-01",
21
+ "effective_to": null,
22
+ "mark_type": "stamp",
23
+ "tracking_mode": "optional",
24
+ "delivery": [
25
+ {
26
+ "zones": [
27
+ "domestic"
28
+ ],
29
+ "span": "next",
30
+ "days_max": 1
31
+ }
32
+ ]
33
+ },
34
+ {
35
+ "id": "a_post_grossbrief",
36
+ "porto_id": "large",
37
+ "name": "A-Post Grossbrief",
38
+ "envelope_ids": [
39
+ "C4",
40
+ "B4"
41
+ ],
42
+ "zones": [
43
+ "domestic"
44
+ ],
45
+ "effective_from": "2026-01-01",
46
+ "effective_to": null,
47
+ "mark_type": "stamp",
48
+ "tracking_mode": "optional",
49
+ "delivery": [
50
+ {
51
+ "zones": [
52
+ "domestic"
53
+ ],
54
+ "span": "next",
55
+ "days_max": 1
56
+ }
57
+ ]
58
+ },
59
+ {
60
+ "id": "b_post_standardbrief",
61
+ "porto_id": "small",
62
+ "name": "B-Post Standardbrief",
63
+ "envelope_ids": [
64
+ "DL",
65
+ "C6"
66
+ ],
67
+ "zones": [
68
+ "domestic"
69
+ ],
70
+ "effective_from": "2026-01-01",
71
+ "effective_to": null,
72
+ "mark_type": "stamp",
73
+ "tracking_mode": "optional",
74
+ "delivery": [
75
+ {
76
+ "zones": [
77
+ "domestic"
78
+ ],
79
+ "span": "within",
80
+ "days_max": 3,
81
+ "weekdays": "mon_fri"
82
+ }
83
+ ]
84
+ },
85
+ {
86
+ "id": "b_post_grossbrief",
87
+ "porto_id": "large",
88
+ "name": "B-Post Grossbrief",
89
+ "envelope_ids": [
90
+ "C4",
91
+ "B4"
92
+ ],
93
+ "zones": [
94
+ "domestic"
95
+ ],
96
+ "effective_from": "2026-01-01",
97
+ "effective_to": null,
98
+ "mark_type": "stamp",
99
+ "tracking_mode": "optional",
100
+ "delivery": [
101
+ {
102
+ "zones": [
103
+ "domestic"
104
+ ],
105
+ "span": "within",
106
+ "days_max": 3,
107
+ "weekdays": "mon_fri"
108
+ }
109
+ ]
110
+ },
111
+ {
112
+ "id": "international_standardbrief",
113
+ "porto_id": "small",
114
+ "name": "International Standardbrief (documents)",
115
+ "envelope_ids": [
116
+ "DL",
117
+ "C6",
118
+ "C5"
119
+ ],
120
+ "zones": [
121
+ "zone_1_eu",
122
+ "world"
123
+ ],
124
+ "effective_from": "2026-01-01",
125
+ "effective_to": null,
126
+ "mark_type": "stamp",
127
+ "tracking_mode": "none",
128
+ "delivery": [
129
+ {
130
+ "zones": [
131
+ "zone_1_eu",
132
+ "world"
133
+ ],
134
+ "span": "within",
135
+ "days_max": 8
136
+ }
137
+ ]
138
+ },
139
+ {
140
+ "id": "international_grossbrief",
141
+ "porto_id": "large",
142
+ "name": "International Grossbrief (documents)",
143
+ "envelope_ids": [
144
+ "C4",
145
+ "B4"
146
+ ],
147
+ "zones": [
148
+ "zone_1_eu",
149
+ "world"
150
+ ],
151
+ "effective_from": "2026-01-01",
152
+ "effective_to": null,
153
+ "mark_type": "stamp",
154
+ "tracking_mode": "none",
155
+ "delivery": [
156
+ {
157
+ "zones": [
158
+ "zone_1_eu",
159
+ "world"
160
+ ],
161
+ "span": "within",
162
+ "days_max": 8
163
+ }
164
+ ]
165
+ },
166
+ {
167
+ "id": "international_maxibrief",
168
+ "porto_id": "extra_large",
169
+ "name": "International Maxibrief (documents)",
170
+ "envelope_ids": [
171
+ "B4"
172
+ ],
173
+ "zones": [
174
+ "zone_1_eu",
175
+ "world"
176
+ ],
177
+ "effective_from": "2026-01-01",
178
+ "effective_to": null,
179
+ "mark_type": "stamp",
180
+ "tracking_mode": "none",
181
+ "delivery": [
182
+ {
183
+ "zones": [
184
+ "zone_1_eu",
185
+ "world"
186
+ ],
187
+ "span": "within",
188
+ "days_max": 8
189
+ }
190
+ ]
191
+ }
192
+ ]
193
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/gruncellka/porto-data/refs/heads/main/porto_data/schemas/rules.schema.json",
3
+ "file_type": "provider_rules",
4
+ "provider": "swisspost",
5
+ "unit": {
6
+ "thickness": "mm"
7
+ },
8
+ "rules": [
9
+ {
10
+ "id": "domestic_letter_thickness",
11
+ "kind": "band_attach",
12
+ "metric": "thickness",
13
+ "description": "Swiss Post A/B Mail domestic letters: thickness > 2 cm and <= 5 cm incurs surcharge per post.ch footnotes (verify live tariff). Amount in prices/services.json. Zone scope follows graph.edges for each product_id.",
14
+ "product_ids": [
15
+ "a_post_standardbrief",
16
+ "a_post_grossbrief",
17
+ "b_post_standardbrief",
18
+ "b_post_grossbrief"
19
+ ],
20
+ "min_exclusive": 20,
21
+ "max_inclusive": 50,
22
+ "service_id": "brief_dicke_zuschlag"
23
+ }
24
+ ]
25
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/gruncellka/porto-data/refs/heads/main/porto_data/schemas/services.schema.json",
3
+ "file_type": "services",
4
+ "provider": "swisspost",
5
+ "services": [
6
+ {
7
+ "id": "a_mail_plus",
8
+ "porto_id": "tracking",
9
+ "name": "A-Mail Plus",
10
+ "label": "Tracked letter with next-day domestic delivery (A-Mail Plus)",
11
+ "description": "Premium domestic letter with electronic tracking; orderable online where Swiss Post offers it (e.g. WebStamp). International letters in this catalog use untracked products unless the operator adds a supported service.",
12
+ "features": [
13
+ "sendungsnummer"
14
+ ],
15
+ "enables_tracking": true,
16
+ "online_supported": true,
17
+ "integrations": {
18
+ "webstamp": true
19
+ },
20
+ "supported_zones": [
21
+ "domestic"
22
+ ]
23
+ },
24
+ {
25
+ "id": "brief_dicke_zuschlag",
26
+ "porto_id": "thickness",
27
+ "name": "Zuschlag Dicke",
28
+ "label": "Letter thickness surcharge (>2 cm up to 5 cm)",
29
+ "description": "Rule-attached surcharge when thickness > 20 mm and <= 50 mm for domestic A/B letters; not user-selectable. Amount in prices/services.json.",
30
+ "features": [
31
+ "brief_dicke_band"
32
+ ],
33
+ "enables_tracking": false,
34
+ "online_supported": false,
35
+ "supported_zones": [
36
+ "domestic"
37
+ ]
38
+ }
39
+ ]
40
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/gruncellka/porto-data/refs/heads/main/porto_data/schemas/weights.schema.json",
3
+ "file_type": "weights",
4
+ "provider": "swisspost",
5
+ "unit": {
6
+ "weight": "g"
7
+ },
8
+ "weights": {
9
+ "W0020": {
10
+ "min": 0,
11
+ "max": 20
12
+ },
13
+ "W0050": {
14
+ "min": 21,
15
+ "max": 50
16
+ },
17
+ "W0100": {
18
+ "min": 51,
19
+ "max": 100
20
+ },
21
+ "W0250": {
22
+ "min": 101,
23
+ "max": 250
24
+ },
25
+ "W0500": {
26
+ "min": 251,
27
+ "max": 500
28
+ },
29
+ "W1000": {
30
+ "min": 501,
31
+ "max": 1000
32
+ },
33
+ "W2000": {
34
+ "min": 1001,
35
+ "max": 2000
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,223 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/gruncellka/porto-data/refs/heads/main/porto_data/schemas/zones.schema.json",
3
+ "file_type": "zones",
4
+ "provider": "swisspost",
5
+ "unit": {
6
+ "country_code": "ISO 3166-1 alpha-2"
7
+ },
8
+ "zones": [
9
+ {
10
+ "id": "domestic",
11
+ "name": "Schweiz",
12
+ "description": "Switzerland (domestic)",
13
+ "country_codes": [
14
+ "CH"
15
+ ]
16
+ },
17
+ {
18
+ "id": "zone_1_eu",
19
+ "name": "Zone 1 - Europe (letter tariff)",
20
+ "description": "Swiss Post international letter tariff group for Europe (EU, EEA, UK, and other listed European states). Switzerland (CH) is not in the EU and is not part of this zone when posting from Switzerland — domestic applies for CH destinations.",
21
+ "country_codes": [
22
+ "AD",
23
+ "AL",
24
+ "AT",
25
+ "BA",
26
+ "BE",
27
+ "BG",
28
+ "BY",
29
+ "CY",
30
+ "CZ",
31
+ "DE",
32
+ "DK",
33
+ "EE",
34
+ "ES",
35
+ "FI",
36
+ "FO",
37
+ "FR",
38
+ "GB",
39
+ "GI",
40
+ "GR",
41
+ "HR",
42
+ "HU",
43
+ "IE",
44
+ "IS",
45
+ "IT",
46
+ "LI",
47
+ "LT",
48
+ "LU",
49
+ "LV",
50
+ "MC",
51
+ "MD",
52
+ "ME",
53
+ "MK",
54
+ "MT",
55
+ "NL",
56
+ "NO",
57
+ "PL",
58
+ "PT",
59
+ "RO",
60
+ "RS",
61
+ "RU",
62
+ "SE",
63
+ "SI",
64
+ "SK",
65
+ "SM",
66
+ "TR",
67
+ "UA",
68
+ "VA",
69
+ "XK"
70
+ ]
71
+ },
72
+ {
73
+ "id": "world",
74
+ "name": "Welt",
75
+ "description": "All countries outside Europe (international mail)",
76
+ "country_codes": [
77
+ "AF",
78
+ "DZ",
79
+ "AO",
80
+ "AR",
81
+ "AM",
82
+ "AU",
83
+ "AZ",
84
+ "BH",
85
+ "BD",
86
+ "BB",
87
+ "BZ",
88
+ "BJ",
89
+ "BT",
90
+ "BO",
91
+ "BW",
92
+ "BR",
93
+ "BN",
94
+ "BF",
95
+ "BI",
96
+ "KH",
97
+ "CM",
98
+ "CA",
99
+ "CV",
100
+ "CF",
101
+ "TD",
102
+ "CL",
103
+ "CN",
104
+ "CO",
105
+ "KM",
106
+ "CG",
107
+ "CD",
108
+ "CR",
109
+ "CI",
110
+ "CU",
111
+ "DJ",
112
+ "DM",
113
+ "DO",
114
+ "EC",
115
+ "EG",
116
+ "SV",
117
+ "GQ",
118
+ "ER",
119
+ "ET",
120
+ "FJ",
121
+ "GA",
122
+ "GM",
123
+ "GE",
124
+ "GH",
125
+ "GD",
126
+ "GT",
127
+ "GN",
128
+ "GW",
129
+ "GY",
130
+ "HT",
131
+ "HN",
132
+ "IN",
133
+ "ID",
134
+ "IR",
135
+ "IQ",
136
+ "IL",
137
+ "JM",
138
+ "JP",
139
+ "JO",
140
+ "KZ",
141
+ "KE",
142
+ "KI",
143
+ "KP",
144
+ "KR",
145
+ "KW",
146
+ "KG",
147
+ "LA",
148
+ "LB",
149
+ "LS",
150
+ "LR",
151
+ "LY",
152
+ "MG",
153
+ "MW",
154
+ "MY",
155
+ "MV",
156
+ "ML",
157
+ "MH",
158
+ "MR",
159
+ "MU",
160
+ "MX",
161
+ "FM",
162
+ "MN",
163
+ "MA",
164
+ "MZ",
165
+ "MM",
166
+ "NA",
167
+ "NR",
168
+ "NP",
169
+ "NZ",
170
+ "NI",
171
+ "NE",
172
+ "NG",
173
+ "OM",
174
+ "PK",
175
+ "PW",
176
+ "PA",
177
+ "PG",
178
+ "PY",
179
+ "PE",
180
+ "PH",
181
+ "QA",
182
+ "RW",
183
+ "WS",
184
+ "ST",
185
+ "SA",
186
+ "SN",
187
+ "SC",
188
+ "SL",
189
+ "SG",
190
+ "SB",
191
+ "SO",
192
+ "ZA",
193
+ "LK",
194
+ "SD",
195
+ "SR",
196
+ "SZ",
197
+ "SY",
198
+ "TW",
199
+ "TJ",
200
+ "TZ",
201
+ "TH",
202
+ "TL",
203
+ "TG",
204
+ "TO",
205
+ "TT",
206
+ "TN",
207
+ "TM",
208
+ "TV",
209
+ "UG",
210
+ "AE",
211
+ "US",
212
+ "UY",
213
+ "UZ",
214
+ "VU",
215
+ "VE",
216
+ "VN",
217
+ "YE",
218
+ "ZM",
219
+ "ZW"
220
+ ]
221
+ }
222
+ ]
223
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/gruncellka/porto-data/refs/heads/main/porto_data/schemas/features.schema.json",
3
+ "file_type": "features",
4
+ "provider": "ukrposhta",
5
+ "features": [
6
+ {
7
+ "id": "recipient_signature",
8
+ "porto_id": "recipient_signature",
9
+ "name": "Особисте вручення",
10
+ "label": "Recipient signature",
11
+ "description": "Delivery with recipient signature required."
12
+ },
13
+ {
14
+ "id": "return_receipt_paper",
15
+ "porto_id": "return_receipt",
16
+ "name": "Повідомлення про вручення (паперове)",
17
+ "label": "Return receipt (paper)",
18
+ "description": "Paper delivery notice returned to the sender."
19
+ },
20
+ {
21
+ "id": "return_receipt_electronic",
22
+ "porto_id": "return_receipt",
23
+ "name": "Повідомлення про вручення (електронне)",
24
+ "label": "Return receipt (electronic)",
25
+ "description": "Electronic delivery notice returned to the sender."
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,148 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/gruncellka/porto-data/refs/heads/main/porto_data/schemas/graph.schema.json",
3
+ "file_type": "graph",
4
+ "provider": "ukrposhta",
5
+ "unit": {
6
+ "weight": "g",
7
+ "dimension": "mm",
8
+ "price": "cents",
9
+ "currency": "UAH"
10
+ },
11
+ "dependencies": {
12
+ "products": {
13
+ "file": "products.json",
14
+ "depends_on": [
15
+ "zones.json",
16
+ "weights.json",
17
+ "formats/envelopes.json",
18
+ "services.json",
19
+ "features.json",
20
+ "marks.json"
21
+ ],
22
+ "description": "Products require zones, weight tiers, envelope formats, services, features, and mark profiles"
23
+ },
24
+ "services": {
25
+ "file": "services.json",
26
+ "depends_on": [
27
+ "features.json"
28
+ ],
29
+ "description": "Services reference feature ids"
30
+ },
31
+ "product_prices": {
32
+ "file": "prices/products.json",
33
+ "depends_on": [
34
+ "products.json",
35
+ "zones.json",
36
+ "weights.json"
37
+ ],
38
+ "description": "Base postage grid for Ukrposhta letter products"
39
+ },
40
+ "service_prices": {
41
+ "file": "prices/services.json",
42
+ "depends_on": [
43
+ "products.json",
44
+ "services.json",
45
+ "zones.json",
46
+ "weights.json"
47
+ ],
48
+ "description": "Service surcharge amounts"
49
+ },
50
+ "zones": {
51
+ "file": "zones.json",
52
+ "depends_on": [
53
+ "policy/restrictions.json"
54
+ ],
55
+ "description": "Domestic/international zone definitions"
56
+ },
57
+ "weights": {
58
+ "file": "weights.json",
59
+ "depends_on": [],
60
+ "description": "Weight brackets"
61
+ },
62
+ "envelopes": {
63
+ "file": "formats/envelopes.json",
64
+ "depends_on": [],
65
+ "description": "Envelope catalog"
66
+ },
67
+ "envelope_layouts": {
68
+ "file": "formats/layouts.json",
69
+ "depends_on": [
70
+ "formats/envelopes.json"
71
+ ],
72
+ "description": "Jurisdiction-keyed print/window layout (DE/CH/FR); file formats/layouts.json"
73
+ },
74
+ "jurisdictions": {
75
+ "file": "policy/jurisdictions.json",
76
+ "depends_on": [],
77
+ "description": "UN/EU membership sets for restriction framework jurisdiction resolution"
78
+ },
79
+ "markets": {
80
+ "file": "policy/markets.json",
81
+ "depends_on": [],
82
+ "description": "Country-level currency, VAT, and international quote currencies for providers.json country"
83
+ },
84
+ "restrictions": {
85
+ "file": "policy/restrictions.json",
86
+ "depends_on": [
87
+ "policy/jurisdictions.json",
88
+ "zones.json",
89
+ "products.json"
90
+ ],
91
+ "description": "Global destination restrictions (bundled as policy/restrictions.json); optional cross-reference to zones and products"
92
+ },
93
+ "marks": {
94
+ "file": "marks.json",
95
+ "depends_on": [],
96
+ "description": "Franking profile catalog: profiles[] (sizes); resolution in graph.edges.marks"
97
+ },
98
+ "features": {
99
+ "file": "features.json",
100
+ "depends_on": [],
101
+ "description": "Feature catalog"
102
+ },
103
+ "limits": {
104
+ "file": "limits.json",
105
+ "depends_on": [
106
+ "policy/restrictions.json"
107
+ ],
108
+ "description": "Operational limits overlay"
109
+ }
110
+ },
111
+ "services": [
112
+ "return_receipt_paper",
113
+ "return_receipt_electronic",
114
+ "recommended_international"
115
+ ],
116
+ "edges": {
117
+ "products": {
118
+ "lyst_standartnyi": {
119
+ "zones": [
120
+ "domestic",
121
+ "world"
122
+ ],
123
+ "weight_tiers": [
124
+ "W0050",
125
+ "W0250",
126
+ "W1000",
127
+ "W2000"
128
+ ]
129
+ },
130
+ "dokument": {
131
+ "zones": [
132
+ "domestic"
133
+ ],
134
+ "weight_tiers": [
135
+ "W1000"
136
+ ]
137
+ }
138
+ },
139
+ "marks": {
140
+ "domestic": {
141
+ "profile": "domestic"
142
+ },
143
+ "world": {
144
+ "profile": "domestic"
145
+ }
146
+ }
147
+ }
148
+ }