@shushed/helpers 0.0.202-v2-20251208085030 → 0.0.202

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 (95) hide show
  1. package/dist/cjs/contracts/asset.schema.json +78 -0
  2. package/dist/cjs/contracts/category.schema.json +86 -0
  3. package/dist/cjs/contracts/country.schema.json +258 -0
  4. package/dist/cjs/contracts/currency.schema.json +177 -0
  5. package/dist/cjs/contracts/customer-segment.schema.json +32 -0
  6. package/dist/cjs/contracts/development-colour.schema.json +97 -0
  7. package/dist/cjs/contracts/index.js +48 -0
  8. package/dist/cjs/contracts/marketing-preferences.schema.json +41 -0
  9. package/dist/cjs/contracts/messages/ean-change.schema.json +22 -0
  10. package/dist/cjs/contracts/messages/index.js +29 -0
  11. package/dist/cjs/contracts/messages/order/delivered.schema.json +26 -0
  12. package/dist/cjs/contracts/messages/order/index.js +18 -0
  13. package/dist/cjs/contracts/messages/order/new.schema.json +32 -0
  14. package/dist/cjs/contracts/messages/order/processed.schema.json +15 -0
  15. package/dist/cjs/contracts/messages/order/return-initiated.schema.json +26 -0
  16. package/dist/cjs/contracts/messages/order/returned.schema.json +25 -0
  17. package/dist/cjs/contracts/messages/order/shipped.schema.json +26 -0
  18. package/dist/cjs/contracts/messages/product-category.schema.json +21 -0
  19. package/dist/cjs/contracts/messages/product-draft.schema.json +66 -0
  20. package/dist/cjs/contracts/messages/product.schema.json +29 -0
  21. package/dist/cjs/contracts/money.schema.json +54 -0
  22. package/dist/cjs/contracts/order/address.schema.json +127 -0
  23. package/dist/cjs/contracts/order/customer.schema.json +149 -0
  24. package/dist/cjs/contracts/order/index.js +31 -0
  25. package/dist/cjs/contracts/order/item.schema.json +98 -0
  26. package/dist/cjs/contracts/order/payment.schema.json +115 -0
  27. package/dist/cjs/contracts/order/shipment/index.js +29 -0
  28. package/dist/cjs/contracts/order/shipment/item/index.js +8 -0
  29. package/dist/cjs/contracts/order/shipment/item/returned.schema.json +30 -0
  30. package/dist/cjs/contracts/order/shipment/item.schema.json +22 -0
  31. package/dist/cjs/contracts/order/shipment/pos/index.js +10 -0
  32. package/dist/cjs/contracts/order/shipment/pos/outbound.schema.json +37 -0
  33. package/dist/cjs/contracts/order/shipment/pos/return.schema.json +31 -0
  34. package/dist/cjs/contracts/order/shipment/pos.schema.json +48 -0
  35. package/dist/cjs/contracts/order/shipment/shipped/index.js +10 -0
  36. package/dist/cjs/contracts/order/shipment/shipped/outbound.schema.json +34 -0
  37. package/dist/cjs/contracts/order/shipment/shipped/return.schema.json +43 -0
  38. package/dist/cjs/contracts/order/shipment/shipped.schema.json +52 -0
  39. package/dist/cjs/contracts/order/shipment.schema.json +58 -0
  40. package/dist/cjs/contracts/order.schema.json +231 -0
  41. package/dist/cjs/contracts/product-category.schema.json +34 -0
  42. package/dist/cjs/contracts/product-draft.schema.json +782 -0
  43. package/dist/cjs/contracts/product.schema.json +816 -0
  44. package/dist/cjs/contracts/total.schema.json +41 -0
  45. package/dist/cjs/dist-dereferenced/messages/order/delivered.js +1 -1
  46. package/dist/cjs/dist-dereferenced/messages/order/new.js +1 -1
  47. package/dist/cjs/dist-dereferenced/messages/order/processed.js +1 -1
  48. package/dist/cjs/dist-dereferenced/messages/order/return-initiated.js +1 -1
  49. package/dist/cjs/dist-dereferenced/messages/order/returned.js +1 -1
  50. package/dist/cjs/dist-dereferenced/messages/order/shipped.js +1 -1
  51. package/dist/cjs/dist-dereferenced/order/customer.js +1 -1
  52. package/dist/cjs/dist-dereferenced/order/item.js +1 -1
  53. package/dist/cjs/dist-dereferenced/order/orderMain.js +1 -1
  54. package/dist/cjs/dist-dereferenced/order/payment.js +1 -1
  55. package/dist/cjs/dist-dereferenced/order/shipment/pos/outbound.js +1 -1
  56. package/dist/cjs/dist-dereferenced/order/shipment/pos/return.js +1 -1
  57. package/dist/cjs/src-public/bcOrder.js +943 -0
  58. package/dist/cjs/src-public/dato.js +10 -287
  59. package/dist/cjs/src-public/index.js +3 -1
  60. package/dist/cjs/src-public/validate.js +34 -0
  61. package/dist/types/contracts/index.d.ts +15 -0
  62. package/dist/types/contracts/messages/index.d.ts +5 -0
  63. package/dist/types/contracts/messages/order/index.d.ts +6 -0
  64. package/dist/types/contracts/order/index.d.ts +6 -0
  65. package/dist/types/contracts/order/shipment/index.d.ts +6 -0
  66. package/dist/types/contracts/order/shipment/item/index.d.ts +1 -0
  67. package/dist/types/contracts/order/shipment/pos/index.d.ts +2 -0
  68. package/dist/types/contracts/order/shipment/shipped/index.d.ts +2 -0
  69. package/dist/types/dist-dereferenced/messages/order/delivered.d.ts +34 -10
  70. package/dist/types/dist-dereferenced/messages/order/new.d.ts +34 -10
  71. package/dist/types/dist-dereferenced/messages/order/processed.d.ts +34 -10
  72. package/dist/types/dist-dereferenced/messages/order/return-initiated.d.ts +34 -10
  73. package/dist/types/dist-dereferenced/messages/order/returned.d.ts +34 -10
  74. package/dist/types/dist-dereferenced/messages/order/shipped.d.ts +34 -10
  75. package/dist/types/dist-dereferenced/order/customer.d.ts +3 -0
  76. package/dist/types/dist-dereferenced/order/index.d.ts +34 -10
  77. package/dist/types/dist-dereferenced/order/item.d.ts +6 -3
  78. package/dist/types/dist-dereferenced/order/orderMain.d.ts +34 -10
  79. package/dist/types/dist-dereferenced/order/payment.d.ts +16 -0
  80. package/dist/types/dist-dereferenced/order/shipment/pos/outbound.d.ts +0 -1
  81. package/dist/types/dist-dereferenced/order/shipment/pos/return.d.ts +0 -1
  82. package/dist/types/dist-types/messages/order/delivered.d.ts +13 -5
  83. package/dist/types/dist-types/messages/order/new.d.ts +13 -5
  84. package/dist/types/dist-types/messages/order/processed.d.ts +13 -5
  85. package/dist/types/dist-types/messages/order/return-initiated.d.ts +13 -5
  86. package/dist/types/dist-types/messages/order/returned.d.ts +13 -5
  87. package/dist/types/dist-types/messages/order/shipped.d.ts +13 -5
  88. package/dist/types/dist-types/order/customer.d.ts +1 -0
  89. package/dist/types/dist-types/order/item.d.ts +4 -3
  90. package/dist/types/dist-types/order/orderMain.d.ts +13 -5
  91. package/dist/types/dist-types/order/payment.d.ts +4 -0
  92. package/dist/types/src-public/bcOrder.d.ts +84 -0
  93. package/dist/types/src-public/dato.d.ts +1 -34
  94. package/dist/types/src-public/index.d.ts +1 -0
  95. package/package.json +1 -1
@@ -0,0 +1,816 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Product",
4
+ "$id": "https://shushed.example.com/product.schema.json",
5
+ "additionalProperties": false,
6
+ "type": "object",
7
+ "properties": {
8
+ "product_id": {
9
+ "type": "string",
10
+ "description": "Colour & Style ID combination seperated by a dash - Example: 000004-2763 "
11
+ },
12
+ "slug": {
13
+ "type": [
14
+ "string"
15
+ ],
16
+ "description": "URI of the product eg. leather-jack-barrel-trousers-chocolate-brown/013464-0533.html"
17
+ },
18
+ "style_slug": {
19
+ "type": [
20
+ "string"
21
+ ],
22
+ "description": "URI of the style eg. leather-jack-barrel-trousers/013464.html"
23
+ },
24
+ "style_id": {
25
+ "type": [
26
+ "string"
27
+ ],
28
+ "faker": {
29
+ "custom.style": []
30
+ },
31
+ "description": "Parent style_id - Example: 000697"
32
+ },
33
+ "colour_id": {
34
+ "type": "string",
35
+ "description": "ID of the colour inside the colour library. Part of the product ID (for the 000697-3203 it would be 3203). Warning! The id dos not link to a single generally-understood colour. I.e. leopard print has ~40 different colour ids. Instead it links to SPECIFIC leopard print ordered for this specific material (specific shared of Navy Dusk Blue etc.)"
36
+ },
37
+ "style_name": {
38
+ "type": "string",
39
+ "description": "Style Name - Example: Puff Sleeve Sweatshirt"
40
+ },
41
+ "product_name": {
42
+ "type": "string",
43
+ "description": "Product Name - Example: Puff Sleeve Sweatshirt (Blue)"
44
+ },
45
+ "display_name": {
46
+ "type": [
47
+ "string",
48
+ "null"
49
+ ],
50
+ "description": "Centra Name - Example: Brown Puff Shirt"
51
+ },
52
+ "buffer_quantity": {
53
+ "type": "integer",
54
+ "minimum": 0,
55
+ "description": "Quantity of product we keep on hand to guard against unforseen fluctuations in demand/supply"
56
+ },
57
+ "display_type": {
58
+ "description": "Change of how product is represented in the website. Example [{ channel: \"DIRECT-UK\", display_type: \"Out-of-stock\" }]. By default all products will have default display_type available",
59
+ "type": "string",
60
+ "enum": [
61
+ "Out-of-stock",
62
+ "Permanently-unavailable"
63
+ ]
64
+ },
65
+ "available_to_sell_from": {
66
+ "type": [
67
+ "string",
68
+ "null"
69
+ ],
70
+ "format": "date",
71
+ "description": "The Date (inclusive) from which the product should be available to sell. The string should be used for pre-orders, or product release dates. For the latter, the date should be coordinated with online_from"
72
+ },
73
+ "online_from": {
74
+ "type": [
75
+ "string",
76
+ "null"
77
+ ],
78
+ "format": "date-time",
79
+ "description": "The DateTime (inclusive) from which the product should be shown (in any way / design / display type) on the website (direct channel). Every online product should have a date, default to 1970-01-01T00:00:00.000Z"
80
+ },
81
+ "online_to": {
82
+ "type": [
83
+ "string",
84
+ "null"
85
+ ],
86
+ "format": "date-time",
87
+ "description": "The DateTime (inclusive) until which product should be shown (in any way / design / display type) on the website."
88
+ },
89
+ "first_online_at": {
90
+ "type": [
91
+ "string",
92
+ "null"
93
+ ],
94
+ "format": "date-time",
95
+ "description": "The DateTime of product last online in the direct channel"
96
+ },
97
+ "last_online_at": {
98
+ "type": [
99
+ "string",
100
+ "null"
101
+ ],
102
+ "format": "date-time",
103
+ "description": "The DateTime of product last online in the direct channel"
104
+ },
105
+ "first_purchased_at": {
106
+ "type": "string",
107
+ "format": "date-time",
108
+ "faker": {
109
+ "date.between": [
110
+ "2024-01-01T00:00:00.000Z",
111
+ "2025-04-30T00:00:00.000Z"
112
+ ]
113
+ }
114
+ },
115
+ "first_markdown_at": {
116
+ "type": [
117
+ "string",
118
+ "null"
119
+ ],
120
+ "format": "date-time",
121
+ "faker": {
122
+ "date.between": [
123
+ "2024-01-01T00:00:00.000Z",
124
+ "2025-04-30T00:00:00.000Z"
125
+ ]
126
+ }
127
+ },
128
+ "created_at": {
129
+ "type": "string",
130
+ "format": "date-time",
131
+ "faker": {
132
+ "date.between": [
133
+ "2024-01-01T00:00:00.000Z",
134
+ "2025-04-30T00:00:00.000Z"
135
+ ]
136
+ }
137
+ },
138
+ "last_modified_at": {
139
+ "type": "string",
140
+ "format": "date-time",
141
+ "faker": {
142
+ "date.between": [
143
+ "2024-01-01T00:00:00.000Z",
144
+ "2025-04-30T00:00:00.000Z"
145
+ ]
146
+ }
147
+ },
148
+ "colour_family_name": {
149
+ "type": "string",
150
+ "faker": {
151
+ "color.human": []
152
+ },
153
+ "description": "New Tags To Add - Example: yellow"
154
+ },
155
+ "colour_code": {
156
+ "type": "string",
157
+ "description": "Colours as Text - Example: buttercup-yellow from initial input of Buttercup Yellow"
158
+ },
159
+ "colour_name": {
160
+ "type": "string",
161
+ "description": "Toffee Brown"
162
+ },
163
+ "display_tags": {
164
+ "type": "array",
165
+ "items": {
166
+ "type": "string"
167
+ },
168
+ "description": "Example - [20% Off, Summer Sale])"
169
+ },
170
+ "sizerange_code": {
171
+ "type": "string",
172
+ "description": "Size range assigned to this product. Defines sizes to be created"
173
+ },
174
+ "sizerange_name": {
175
+ "type": "string",
176
+ "description": "Size range name for this product"
177
+ },
178
+ "variants": {
179
+ "type": "array",
180
+ "items": {
181
+ "type": "object",
182
+ "properties": {
183
+ "code": {
184
+ "type": "string",
185
+ "description": "Size code - Example: 10"
186
+ },
187
+ "name": {
188
+ "type": [
189
+ "string"
190
+ ],
191
+ "faker": {
192
+ "custom.size": []
193
+ },
194
+ "description": "Size label - Example: 10 becomes M"
195
+ }
196
+ },
197
+ "required": [
198
+ "code",
199
+ "name"
200
+ ]
201
+ }
202
+ },
203
+ "images": {
204
+ "type": "array",
205
+ "items": {
206
+ "type": "object",
207
+ "properties": {
208
+ "type": {
209
+ "type": "string",
210
+ "enum": [
211
+ "Campaign",
212
+ "Ecom",
213
+ "Flatlay",
214
+ "UGC",
215
+ "AI"
216
+ ],
217
+ "description": "Image type for product - Example: Campaign"
218
+ },
219
+ "url": {
220
+ "type": "string",
221
+ "format": "uri",
222
+ "description": "Image URl for product"
223
+ },
224
+ "description": {
225
+ "type": "string",
226
+ "description": "Style Title - Example: Puff Sleeve Sweatshirt"
227
+ }
228
+ },
229
+ "required": [
230
+ "type",
231
+ "url"
232
+ ]
233
+ }
234
+ },
235
+ "vat_rate_uk": {
236
+ "type": [
237
+ "number",
238
+ "null"
239
+ ],
240
+ "minimum": 0,
241
+ "description": "VAT represented as integer (percentage), 0.2 becomes 20 (as 20%)"
242
+ },
243
+ "supply_chain": {
244
+ "type": "object",
245
+ "properties": {
246
+ "hs_code": {
247
+ "type": [
248
+ "string",
249
+ "null"
250
+ ],
251
+ "description": "HS Code"
252
+ },
253
+ "commodity_code_ref": {
254
+ "type": "string",
255
+ "description": "Harmonized Commodity Code - Example: C0/101888|DutyRate"
256
+ },
257
+ "country_of_origin": {
258
+ "$ref": "https://shushed.example.com/country.schema.json",
259
+ "description": "Country Of Origin - Example: RO"
260
+ },
261
+ "port_of_origin": {
262
+ "type": "string",
263
+ "description": "Port Of Origin - Example: MUMBAI"
264
+ },
265
+ "supplier_id": {
266
+ "type": "string",
267
+ "pattern": "^SUP\\d{5}$",
268
+ "description": "Supplier ID in the format 'SUP00099', where 'SUP' is followed by exactly five digits - Example: SUP00045"
269
+ },
270
+ "supplier_name": {
271
+ "type": "string",
272
+ "description": "Supplier Name - Example: Binh Dinh Footwear Joint Stock Company"
273
+ },
274
+ "factory_id": {
275
+ "type": "string",
276
+ "pattern": "^FAC\\d{5}$",
277
+ "description": "Factory ID in the format 'FAC00074', where 'FAC' is followed by exactly five digits"
278
+ },
279
+ "packing_method": {
280
+ "type": [
281
+ "string",
282
+ "null"
283
+ ],
284
+ "enum": [
285
+ "Standard",
286
+ "Hanging"
287
+ ],
288
+ "description": "Packing Method; must be 'Standard', 'Hanging' or null"
289
+ },
290
+ "is_bought_in_product": {
291
+ "type": "boolean",
292
+ "description": "Bought In Product - Example: true or false"
293
+ }
294
+ },
295
+ "required": []
296
+ },
297
+ "merch": {
298
+ "type": "object",
299
+ "properties": {
300
+ "strategy_type": {
301
+ "type": "string",
302
+ "description": "Strategy Type - Example: Seasonal New"
303
+ },
304
+ "product_type": {
305
+ "type": "string",
306
+ "description": "Product Type - Example: Knit"
307
+ },
308
+ "stock_type": {
309
+ "type": "string",
310
+ "description": "Stock Type - Example: Knit"
311
+ },
312
+ "category": {
313
+ "type": "string",
314
+ "faker": {
315
+ "commerce.department": []
316
+ },
317
+ "description": "Category - Example: Knitwear"
318
+ },
319
+ "subcategory": {
320
+ "type": "string",
321
+ "faker": {
322
+ "commerce.product": []
323
+ },
324
+ "description": "Subcategory - Example: Parka Coat"
325
+ },
326
+ "range": {
327
+ "type": [
328
+ "string",
329
+ "null"
330
+ ],
331
+ "enum": [
332
+ "Main Collection",
333
+ "Seasonal"
334
+ ],
335
+ "description": "Range - Example: Main Collection"
336
+ },
337
+ "channels_availability": {
338
+ "type": [
339
+ "array"
340
+ ],
341
+ "items": {
342
+ "type": "string",
343
+ "enum": [
344
+ "DIRECT-UK",
345
+ "DIRECT-INT",
346
+ "DIRECT-US",
347
+ "JL-STORES",
348
+ "JL-WEB",
349
+ "NEXT",
350
+ "MS",
351
+ "FENWICK",
352
+ "MORLEYS"
353
+ ]
354
+ },
355
+ "description": "List of channels the product is exclusive to - Example: [MS]"
356
+ },
357
+ "collections": {
358
+ "type": [
359
+ "string"
360
+ ],
361
+ "description": "Collections [Centra] - Example: Spring 2025"
362
+ },
363
+ "seasons": {
364
+ "type": [
365
+ "array"
366
+ ],
367
+ "items": {
368
+ "type": "string"
369
+ },
370
+ "description": "Seasons ordered in cronological order - Example: [AW20, SS25]"
371
+ },
372
+ "drops": {
373
+ "type": [
374
+ "array"
375
+ ],
376
+ "items": {
377
+ "type": "string"
378
+ },
379
+ "description": "Drop - Example: [SS26 - December, SS25 - April]"
380
+ },
381
+ "fashionability": {
382
+ "type": [
383
+ "string",
384
+ "null"
385
+ ],
386
+ "description": "Fashionability - Example: Core"
387
+ }
388
+ },
389
+ "required": []
390
+ },
391
+ "attributes": {
392
+ "type": "object",
393
+ "properties": {
394
+ "seo_url_name": {
395
+ "type": "string",
396
+ "pattern": "^[a-z-]+$",
397
+ "description": "Part of the URL with the SEO-friendly product name (/${url_name}/${product_id}.html) - Example: for url_name: \"square-neck-texture-bikini-top-sage-green\" the final url will be /square-neck-texture-bikini-top-sage-green/013234-2274.html . Remember that this field will be filled in even before the product is published"
398
+ },
399
+ "embellishment": {
400
+ "type": [
401
+ "string",
402
+ "null"
403
+ ]
404
+ },
405
+ "seo_title": {
406
+ "type": [
407
+ "string",
408
+ "null"
409
+ ],
410
+ "description": "SEO Title - Example: Puff Sleeve Sweatshirt. null if the root.product_name should be used"
411
+ },
412
+ "seo_description": {
413
+ "type": [
414
+ "string",
415
+ "null"
416
+ ],
417
+ "description": "SEO Description - Example: Puff Sleeve Sweatshirt. null if root.description should be used"
418
+ },
419
+ "fit_description": {
420
+ "type": [
421
+ "string",
422
+ "null"
423
+ ],
424
+ "description": "Accordion product fit"
425
+ },
426
+ "description": {
427
+ "type": [
428
+ "string",
429
+ "null"
430
+ ],
431
+ "description": "Product description"
432
+ },
433
+ "fabric_care": {
434
+ "type": [
435
+ "string",
436
+ "null"
437
+ ],
438
+ "description": "Fabric and care accordion on the website"
439
+ },
440
+ "delivery_returns": {
441
+ "type": [
442
+ "string",
443
+ "null"
444
+ ],
445
+ "description": "Delivery & Returns accordion on the website"
446
+ },
447
+ "weight": {
448
+ "type": [
449
+ "number",
450
+ "null"
451
+ ],
452
+ "description": "The average weight of the garmet (across sizes)"
453
+ },
454
+ "weight_statement": {
455
+ "type": [
456
+ "string",
457
+ "null"
458
+ ],
459
+ "description": "The weight statement"
460
+ },
461
+ "main_fibre": {
462
+ "type": [
463
+ "string",
464
+ "null"
465
+ ],
466
+ "description": "Main Fibre - Applicable to garmets - Example: Cotton"
467
+ },
468
+ "main_metal": {
469
+ "type": [
470
+ "string",
471
+ "null"
472
+ ],
473
+ "description": "Main Metal - Applicable to jewellery - Example: Silver"
474
+ },
475
+ "extra_selling_points": {
476
+ "type": "array",
477
+ "items": {
478
+ "type": "string"
479
+ },
480
+ "description": "Extra Selling Points - Example: [Lovely Print, Recyclable Fabric]"
481
+ },
482
+ "length_measurement": {
483
+ "type": [
484
+ "string",
485
+ "null"
486
+ ],
487
+ "description": "Length Measurement - Example: Sole height: 1.5 cm"
488
+ },
489
+ "measurement_table_code": {
490
+ "type": [
491
+ "string"
492
+ ],
493
+ "description": "Measurement Table Code"
494
+ },
495
+ "fit": {
496
+ "type": [
497
+ "string",
498
+ "null"
499
+ ],
500
+ "description": "Fit of the garmet"
501
+ },
502
+ "pockets": {
503
+ "type": [
504
+ "string",
505
+ "null"
506
+ ],
507
+ "description": "Pockets details"
508
+ },
509
+ "pleats_gathers": {
510
+ "type": [
511
+ "string",
512
+ "null"
513
+ ],
514
+ "description": "Pleats & Gathers details"
515
+ },
516
+ "lining": {
517
+ "type": [
518
+ "string",
519
+ "null"
520
+ ],
521
+ "description": "Lining details"
522
+ },
523
+ "bias_cut": {
524
+ "type": [
525
+ "string",
526
+ "null"
527
+ ],
528
+ "description": "Bias cut details"
529
+ },
530
+ "designer": {
531
+ "type": [
532
+ "string",
533
+ "null"
534
+ ],
535
+ "description": "Designer of the garmet"
536
+ },
537
+ "fabric": {
538
+ "type": [
539
+ "string",
540
+ "null"
541
+ ],
542
+ "description": "Main fabric of the garmet"
543
+ },
544
+ "fabric_composition": {
545
+ "type": [
546
+ "string",
547
+ "null"
548
+ ],
549
+ "description": "Composition details"
550
+ },
551
+ "certificate_code": {
552
+ "type": [
553
+ "string",
554
+ "null"
555
+ ],
556
+ "description": "Certificate of the fabric"
557
+ },
558
+ "shape": {
559
+ "type": [
560
+ "string",
561
+ "null"
562
+ ],
563
+ "description": "Shape of the garmet"
564
+ },
565
+ "development_type": {
566
+ "type": "string",
567
+ "description": "Development Type - Example: Update"
568
+ },
569
+ "occasion": {
570
+ "type": [
571
+ "string",
572
+ "null"
573
+ ],
574
+ "description": "Occasion - Example: Party"
575
+ },
576
+ "design": {
577
+ "type": [
578
+ "string",
579
+ "null"
580
+ ],
581
+ "description": "Design type"
582
+ },
583
+ "block": {
584
+ "type": [
585
+ "string",
586
+ "null"
587
+ ],
588
+ "description": "Block"
589
+ },
590
+ "pattern_name": {
591
+ "type": [
592
+ "string",
593
+ "null"
594
+ ],
595
+ "description": "Pattern Name - Example: Interest"
596
+ },
597
+ "fit_type": {
598
+ "type": [
599
+ "string",
600
+ "null"
601
+ ],
602
+ "description": "Fit Styling Description(ESP) - Example: Oversized"
603
+ },
604
+ "neckline": {
605
+ "type": [
606
+ "string",
607
+ "null"
608
+ ],
609
+ "description": "Neckline - Example: Crew"
610
+ },
611
+ "sleeve_length": {
612
+ "type": [
613
+ "string",
614
+ "null"
615
+ ],
616
+ "nullable": true,
617
+ "description": "Sleeve Length - Example: Sleeveless"
618
+ },
619
+ "sleeve_type": {
620
+ "type": [
621
+ "string",
622
+ "null"
623
+ ],
624
+ "nullable": true,
625
+ "description": "Type of Sleeve i.e. "
626
+ },
627
+ "heel_height": {
628
+ "type": [
629
+ "string",
630
+ "null"
631
+ ],
632
+ "description": "Heel Height - Example: 0.5CM"
633
+ },
634
+ "heel_shape": {
635
+ "type": [
636
+ "string",
637
+ "null"
638
+ ],
639
+ "description": "Heel Shape - Example: Flat"
640
+ },
641
+ "toe_shape": {
642
+ "type": [
643
+ "string",
644
+ "null"
645
+ ],
646
+ "description": "Toe Shape - Example: Round"
647
+ },
648
+ "trouser_fit": {
649
+ "type": [
650
+ "string",
651
+ "null"
652
+ ],
653
+ "nullable": true
654
+ },
655
+ "leg_length": {
656
+ "type": [
657
+ "string",
658
+ "null"
659
+ ],
660
+ "description": "Leg Length - Example: Long"
661
+ },
662
+ "handle_straps": {
663
+ "type": [
664
+ "string",
665
+ "null"
666
+ ],
667
+ "description": "Handle Straps - Example: XBody Strap"
668
+ },
669
+ "straps_features": {
670
+ "type": [
671
+ "string",
672
+ "null"
673
+ ],
674
+ "description": "Features of the straps i.e. \"Detachable staps\""
675
+ },
676
+ "fastening": {
677
+ "anyOf": [
678
+ {
679
+ "type": [
680
+ "array",
681
+ "null"
682
+ ],
683
+ "items": {
684
+ "type": "string"
685
+ }
686
+ },
687
+ {
688
+ "type": "null"
689
+ }
690
+ ],
691
+ "description": "Fastening - Example: Zip Front"
692
+ },
693
+ "sole_material": {
694
+ "type": [
695
+ "string",
696
+ "null"
697
+ ],
698
+ "description": "Sole Material - Example: Rubber"
699
+ },
700
+ "care_instructions": {
701
+ "type": "array",
702
+ "items": {
703
+ "type": "string"
704
+ },
705
+ "description": " - Example: Fabric unlined / do not tumble dry"
706
+ }
707
+ },
708
+ "required": []
709
+ },
710
+ "presentations": {
711
+ "type": "object",
712
+ "description": "Presentation-specific overrides by key (e.g., default, website, email, website-US). Each key maps to an object containing a locale and presentation_type plus optional overrides of selected root fields.",
713
+ "additionalProperties": false,
714
+ "patternProperties": {
715
+ ".*": {
716
+ "type": "object",
717
+ "additionalProperties": false,
718
+ "properties": {
719
+ "locale": {
720
+ "type": "string",
721
+ "pattern": "^[a-z]{2}-[A-Z]{2}$",
722
+ "description": "Locale for this presentation (e.g., en-GB, en-US)."
723
+ },
724
+ "presentation_type": {
725
+ "type": "string",
726
+ "description": "Presentation type, e.g. website, email, default, website-US.",
727
+ "examples": [
728
+ "default",
729
+ "website",
730
+ "email",
731
+ "website-US"
732
+ ]
733
+ },
734
+ "slug": {
735
+ "$ref": "#/properties/slug"
736
+ },
737
+ "style_slug": {
738
+ "$ref": "#/properties/style_slug"
739
+ },
740
+ "style_name": {
741
+ "$ref": "#/properties/style_name"
742
+ },
743
+ "display_name": {
744
+ "$ref": "#/properties/display_name"
745
+ },
746
+ "display_type": {
747
+ "$ref": "#/properties/display_type"
748
+ },
749
+ "available_to_sell_from": {
750
+ "$ref": "#/properties/available_to_sell_from"
751
+ },
752
+ "online_from": {
753
+ "$ref": "#/properties/online_from"
754
+ },
755
+ "online_to": {
756
+ "$ref": "#/properties/online_to"
757
+ },
758
+ "last_online_at": {
759
+ "$ref": "#/properties/last_online_at"
760
+ },
761
+ "first_purchased_at": {
762
+ "$ref": "#/properties/first_purchased_at"
763
+ },
764
+ "first_markdown_at": {
765
+ "$ref": "#/properties/first_markdown_at"
766
+ },
767
+ "colour_family_name": {
768
+ "$ref": "#/properties/colour_family_name"
769
+ },
770
+ "colour_name": {
771
+ "$ref": "#/properties/colour_name"
772
+ },
773
+ "display_tags": {
774
+ "$ref": "#/properties/display_tags"
775
+ },
776
+ "sizerange_name": {
777
+ "$ref": "#/properties/sizerange_name"
778
+ },
779
+ "variants": {
780
+ "type": "array",
781
+ "items": {
782
+ "type": "object",
783
+ "properties": {
784
+ "code": {
785
+ "$ref": "#/properties/variants/items/properties/code"
786
+ },
787
+ "name": {
788
+ "$ref": "#/properties/variants/items/properties/name"
789
+ }
790
+ },
791
+ "required": [
792
+ "code",
793
+ "name"
794
+ ]
795
+ },
796
+ "description": "Per-variant display overrides. Include entries only for variants that differ."
797
+ },
798
+ "attributes": {
799
+ "$ref": "#/properties/attributes"
800
+ }
801
+ },
802
+ "required": [
803
+ "locale",
804
+ "presentation_type"
805
+ ]
806
+ }
807
+ }
808
+ }
809
+ },
810
+ "required": [
811
+ "product_id",
812
+ "style_id",
813
+ "product_name",
814
+ "online_from"
815
+ ]
816
+ }