@pagefront/lint-commerce 0.9.0 → 0.11.0

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 (44) hide show
  1. package/README.md +57 -13
  2. package/dist/catalogue.js +5 -3
  3. package/dist/generated/release-manifest.d.ts +22 -0
  4. package/dist/generated/release-manifest.js +27 -0
  5. package/dist/generated/schema-ids.d.ts +1 -0
  6. package/dist/generated/schema-ids.js +7 -0
  7. package/dist/generated/schema-properties.d.ts +1 -0
  8. package/dist/{schema-properties.js → generated/schema-properties.js} +2 -10
  9. package/dist/generated/schemas.d.ts +1 -0
  10. package/dist/generated/schemas.js +4883 -0
  11. package/dist/index.d.ts +10 -4
  12. package/dist/index.js +9 -3
  13. package/dist/organization-catalogue.js +6 -3
  14. package/dist/releases.d.ts +22 -0
  15. package/dist/releases.js +27 -0
  16. package/dist/rules/org-e-002.d.ts +7 -0
  17. package/dist/rules/org-e-002.js +13 -0
  18. package/dist/rules/org-e-003.d.ts +7 -0
  19. package/dist/rules/org-e-003.js +13 -0
  20. package/dist/rules/pdp-e-002.d.ts +3 -9
  21. package/dist/rules/pdp-e-002.js +6 -26
  22. package/dist/rules/pdp-e-016.d.ts +7 -0
  23. package/dist/rules/pdp-e-016.js +13 -0
  24. package/dist/rules/pdp-i-001.js +3 -2
  25. package/dist/rules/release-schema.d.ts +16 -0
  26. package/dist/rules/release-schema.js +77 -0
  27. package/dist/schema-registry.d.ts +29 -0
  28. package/dist/schema-registry.js +35 -0
  29. package/dist/schema-validators.d.ts +7 -6
  30. package/dist/schema-validators.js +15 -3
  31. package/dist/sheet-type.d.ts +17 -0
  32. package/dist/sheet-type.js +25 -0
  33. package/dist/validate-and-lint.d.ts +24 -17
  34. package/dist/validate-and-lint.js +47 -28
  35. package/dist/validate-organization.d.ts +5 -5
  36. package/dist/validate-organization.js +8 -15
  37. package/dist/version.d.ts +1 -1
  38. package/dist/version.js +1 -1
  39. package/package.json +3 -3
  40. package/dist/organization-schema.d.ts +0 -9
  41. package/dist/organization-schema.js +0 -441
  42. package/dist/product-schema.d.ts +0 -9
  43. package/dist/product-schema.js +0 -2014
  44. package/dist/schema-properties.d.ts +0 -10
@@ -1,2014 +0,0 @@
1
- /**
2
- * The Pagefront product JSON Schema (commerce/spec/product.json,
3
- * format 0.9), bundled verbatim so the published package can run
4
- * Layer 1 validation without the monorepo checkout. Generated from
5
- * the spec file; the schema drift test (test/schema.test.mjs) fails
6
- * when the two diverge. Regenerate on any schema change, in the same
7
- * change that motivates it.
8
- */
9
- export const PRODUCT_SCHEMA = {
10
- "$schema": "https://json-schema.org/draft/2020-12/schema",
11
- "$id": "https://themachineweb.org/pagefront/spec/commerce/product/v0.9.json",
12
- "title": "Pagefront Product Sheet v0.9",
13
- "description": "Formal schema for the Pagefront product sheet. Revision of 2026-10-01 (breaking, within v0.9): configurator pricing moves from pagefront:configurator to the offer. The configurator loses basePrice, basePriceCurrency and priceFormula, its options lose priceModifier and currency, and it gains an optional @id and an exclusions[] array; configurator dimensions gain affectsPrice, inputType (select or text, for free-text dimensions) and maxLength; Offer and AggregateOffer accept pagefront:configuratorPricing, which names the configurator it prices and carries baseConfiguration, basePrice, modifiers, optional adjustments[] and a pricing completeness flag; every amount field (Offer price, AggregateOffer lowPrice and highPrice, variant price hints, promotion discountAmount, and the pricing block's basePrice, modifiers and adjustment amounts) references a shared definition, a JSON number or a plain decimal string: nonNegativeAmount for prices, bounds, base prices, price hints and discount amounts, and the signed amount for modifiers and adjustment amounts. v0.9 sheets that carried prices inside the configurator no longer validate. v0.9 was otherwise an additive release on top of v0.8: the legalEntity entry's organization now also validates in reference-stub form (@type + @id, no name) so entries can reference a Commerce Organization Sheet; the inline form and all other constraints are unchanged, and v0.8 sheets remain valid once their format_version is updated. v0.8 is an additive release on top of v0.7: it adds a pagefront:featureGroup[] array for grouped, ordered technical specifications (groups of Schema.org PropertyValue entries, with an optional pagefront:presentationValue display variant per entry), a pagefront:productHighlights[] array of ordered publisher-authored selling-point strings, and a pagefront:legalEntity[] array for role-typed legal entities behind a product (closed role enum: brand_owner, licensee, authorized_representative, importer, manufacturer — EU GPSR responsible persons and similar). gtin and gtin13 now accept a string or an array of strings (regional packaging, re-releases); category now accepts the display string, a Schema.org CategoryCode object, or a mixed array of both. The pagefront:Document role enum gains repairability_index, recall_notice, and declaration_of_conformity; the pagefront:RelatedProduct relationship enum gains service. v0.8 also adds two GPSR-driven safety fields: a pagefront:safetyWarning[] array for typed, language-scoped safety warnings (text required; optional pictogram URL and open-vocabulary hazardCategory) and a pagefront:safetyNotice[] array for structured recall/safety notices (closed noticeType enum: recall, warning; closed remedy enum: repair, replacement, refund). v0.7 sheets remain valid under v0.8 once their format_version is updated. Validates the envelope and pagefront-namespaced extensions strictly; Schema.org-typed blocks permit additional unspecified properties.",
14
- "type": "object",
15
- "required": [
16
- "format_version",
17
- "schema_org_version",
18
- "canonical_url",
19
- "sheet_url",
20
- "generated_at",
21
- "data"
22
- ],
23
- "properties": {
24
- "$schema": {
25
- "type": "string",
26
- "format": "uri"
27
- },
28
- "format_version": {
29
- "const": "0.9"
30
- },
31
- "schema_org_version": {
32
- "type": "string",
33
- "pattern": "^\\d+(\\.\\d+)?$"
34
- },
35
- "canonical_url": {
36
- "type": "string",
37
- "format": "uri"
38
- },
39
- "sheet_url": {
40
- "type": "string",
41
- "format": "uri"
42
- },
43
- "generated_at": {
44
- "type": "string",
45
- "format": "date-time"
46
- },
47
- "expires_at": {
48
- "type": "string",
49
- "format": "date-time"
50
- },
51
- "data": {
52
- "$ref": "#/$defs/dataBlock"
53
- }
54
- },
55
- "additionalProperties": false,
56
- "$defs": {
57
- "dataBlock": {
58
- "type": "object",
59
- "required": [
60
- "@context",
61
- "@type",
62
- "@id",
63
- "name",
64
- "inLanguage"
65
- ],
66
- "properties": {
67
- "@context": {
68
- "oneOf": [
69
- {
70
- "const": "https://schema.org"
71
- },
72
- {
73
- "type": "array",
74
- "items": {
75
- "oneOf": [
76
- {
77
- "type": "string",
78
- "format": "uri"
79
- },
80
- {
81
- "type": "object"
82
- }
83
- ]
84
- },
85
- "minItems": 1
86
- }
87
- ]
88
- },
89
- "@type": {
90
- "type": "string"
91
- },
92
- "@id": {
93
- "type": "string",
94
- "format": "uri"
95
- },
96
- "url": {
97
- "type": "string",
98
- "format": "uri"
99
- },
100
- "name": {
101
- "type": "string",
102
- "minLength": 1
103
- },
104
- "inLanguage": {
105
- "type": "string"
106
- },
107
- "sku": {
108
- "type": "string"
109
- },
110
- "gtin13": {
111
- "$ref": "#/$defs/gtin13Value"
112
- },
113
- "gtin": {
114
- "$ref": "#/$defs/gtinValue"
115
- },
116
- "mpn": {
117
- "type": "string"
118
- },
119
- "productID": {
120
- "type": "string"
121
- },
122
- "productGroupID": {
123
- "type": "string"
124
- },
125
- "variesBy": {
126
- "type": "array",
127
- "items": {
128
- "type": "string"
129
- }
130
- },
131
- "hasVariant": {
132
- "type": "array",
133
- "items": {
134
- "$ref": "#/$defs/variantEntry"
135
- }
136
- },
137
- "brand": {
138
- "type": "object",
139
- "properties": {
140
- "pagefront:sheetUrl": {
141
- "type": "string",
142
- "format": "uri"
143
- }
144
- }
145
- },
146
- "description": {
147
- "type": "string"
148
- },
149
- "category": {
150
- "oneOf": [
151
- {
152
- "type": "string"
153
- },
154
- {
155
- "$ref": "#/$defs/categoryCode"
156
- },
157
- {
158
- "type": "array",
159
- "items": {
160
- "oneOf": [
161
- {
162
- "type": "string"
163
- },
164
- {
165
- "$ref": "#/$defs/categoryCode"
166
- }
167
- ]
168
- },
169
- "minItems": 1
170
- }
171
- ]
172
- },
173
- "color": {
174
- "type": "string"
175
- },
176
- "material": {
177
- "type": "string"
178
- },
179
- "weight": {
180
- "type": "object"
181
- },
182
- "height": {
183
- "type": "object"
184
- },
185
- "width": {
186
- "type": "object"
187
- },
188
- "depth": {
189
- "type": "object"
190
- },
191
- "countryOfOrigin": {
192
- "type": "string",
193
- "pattern": "^[A-Z]{2}$"
194
- },
195
- "image": {
196
- "type": "array",
197
- "items": {
198
- "$ref": "#/$defs/imageObject"
199
- }
200
- },
201
- "video": {
202
- "type": "array",
203
- "items": {
204
- "$ref": "#/$defs/videoObject"
205
- }
206
- },
207
- "additionalProperty": {
208
- "type": "array"
209
- },
210
- "hasCertification": {
211
- "type": "array",
212
- "items": {
213
- "$ref": "#/$defs/certification"
214
- }
215
- },
216
- "manufacturer": {
217
- "type": "object"
218
- },
219
- "offers": {
220
- "type": "array",
221
- "items": {
222
- "oneOf": [
223
- {
224
- "$ref": "#/$defs/offer"
225
- },
226
- {
227
- "$ref": "#/$defs/aggregateOffer"
228
- }
229
- ]
230
- },
231
- "minItems": 1
232
- },
233
- "aggregateRating": {
234
- "type": "object"
235
- },
236
- "review": {
237
- "type": "array"
238
- },
239
- "isVariantOf": {
240
- "type": "object"
241
- },
242
- "isRelatedTo": {
243
- "type": "array"
244
- },
245
- "isSimilarTo": {
246
- "type": "array"
247
- },
248
- "isPartOf": {
249
- "oneOf": [
250
- {
251
- "type": "object"
252
- },
253
- {
254
- "type": "array"
255
- }
256
- ]
257
- },
258
- "hasPart": {
259
- "oneOf": [
260
- {
261
- "type": "object"
262
- },
263
- {
264
- "type": "array"
265
- }
266
- ]
267
- },
268
- "question": {
269
- "type": "array",
270
- "items": {
271
- "$ref": "#/$defs/questionObject"
272
- }
273
- },
274
- "pagefront:document": {
275
- "type": "array",
276
- "items": {
277
- "$ref": "#/$defs/documentObject"
278
- }
279
- },
280
- "pagefront:relatedProduct": {
281
- "type": "array",
282
- "items": {
283
- "$ref": "#/$defs/relatedProductObject"
284
- }
285
- },
286
- "pagefront:featureGroup": {
287
- "type": "array",
288
- "items": {
289
- "$ref": "#/$defs/featureGroup"
290
- },
291
- "minItems": 1
292
- },
293
- "pagefront:productHighlights": {
294
- "type": "array",
295
- "items": {
296
- "type": "string"
297
- },
298
- "minItems": 1
299
- },
300
- "pagefront:legalEntity": {
301
- "type": "array",
302
- "items": {
303
- "$ref": "#/$defs/legalEntity"
304
- },
305
- "minItems": 1
306
- },
307
- "pagefront:safetyWarning": {
308
- "type": "array",
309
- "items": {
310
- "$ref": "#/$defs/safetyWarning"
311
- },
312
- "minItems": 1
313
- },
314
- "pagefront:safetyNotice": {
315
- "type": "array",
316
- "items": {
317
- "$ref": "#/$defs/safetyNotice"
318
- },
319
- "minItems": 1
320
- },
321
- "pagefront:sizeChart": {
322
- "$ref": "#/$defs/sizeChart"
323
- },
324
- "pagefront:sizeRecommendation": {
325
- "$ref": "#/$defs/sizeRecommendation"
326
- },
327
- "pagefront:materialComposition": {
328
- "type": "array",
329
- "items": {
330
- "$ref": "#/$defs/material"
331
- }
332
- },
333
- "pagefront:fabricComposition": {
334
- "type": "array",
335
- "items": {
336
- "$ref": "#/$defs/material"
337
- }
338
- },
339
- "pagefront:construction": {
340
- "$ref": "#/$defs/construction"
341
- },
342
- "pagefront:manufacturingChain": {
343
- "type": "array",
344
- "items": {
345
- "$ref": "#/$defs/manufacturingStage"
346
- }
347
- },
348
- "pagefront:gemstone": {
349
- "$ref": "#/$defs/gemstone"
350
- },
351
- "pagefront:configurator": {
352
- "$ref": "#/$defs/configurator"
353
- },
354
- "pagefront:madeToOrderTerms": {
355
- "$ref": "#/$defs/madeToOrderTerms"
356
- },
357
- "pagefront:manufacturerWarranty": {
358
- "type": "object"
359
- },
360
- "pagefront:careInstructions": {
361
- "type": "array",
362
- "items": {
363
- "type": "string"
364
- }
365
- },
366
- "pagefront:availableLanguages": {
367
- "type": "array",
368
- "items": {
369
- "type": "object",
370
- "required": [
371
- "lang",
372
- "url"
373
- ],
374
- "properties": {
375
- "lang": {
376
- "type": "string"
377
- },
378
- "url": {
379
- "type": "string",
380
- "format": "uri"
381
- }
382
- },
383
- "additionalProperties": false
384
- }
385
- }
386
- },
387
- "if": {
388
- "properties": {
389
- "@type": {
390
- "const": "ProductGroup"
391
- }
392
- },
393
- "required": [
394
- "@type"
395
- ]
396
- },
397
- "then": {
398
- "required": [
399
- "productGroupID"
400
- ]
401
- },
402
- "else": {
403
- "required": [
404
- "url"
405
- ],
406
- "anyOf": [
407
- {
408
- "required": [
409
- "sku"
410
- ]
411
- },
412
- {
413
- "required": [
414
- "gtin13"
415
- ]
416
- },
417
- {
418
- "required": [
419
- "gtin"
420
- ]
421
- },
422
- {
423
- "required": [
424
- "mpn"
425
- ]
426
- },
427
- {
428
- "required": [
429
- "productID"
430
- ]
431
- }
432
- ]
433
- },
434
- "additionalProperties": true
435
- },
436
- "amount": {
437
- "description": "A currency amount: a JSON number, or a decimal string with a dot as decimal point, no thousands separators and no currency symbol. A Sheet uses one of the two carriers for all its amounts.",
438
- "oneOf": [
439
- {
440
- "type": "number"
441
- },
442
- {
443
- "type": "string",
444
- "pattern": "^-?\\d+(\\.\\d+)?$"
445
- }
446
- ]
447
- },
448
- "nonNegativeAmount": {
449
- "description": "An amount that is zero or positive: the same two carriers as amount, with no leading minus. Used for prices, price bounds, base prices, price hints and discount amounts; only modifiers and adjustment amounts are signed.",
450
- "oneOf": [
451
- {
452
- "type": "number",
453
- "minimum": 0
454
- },
455
- {
456
- "type": "string",
457
- "pattern": "^\\d+(\\.\\d+)?$"
458
- }
459
- ]
460
- },
461
- "variantEntry": {
462
- "type": "object",
463
- "required": [
464
- "@type"
465
- ],
466
- "properties": {
467
- "@type": {
468
- "type": "string"
469
- },
470
- "@id": {
471
- "type": "string",
472
- "format": "uri"
473
- },
474
- "url": {
475
- "type": "string",
476
- "format": "uri"
477
- },
478
- "sheet_url": {
479
- "type": "string",
480
- "format": "uri"
481
- },
482
- "name": {
483
- "type": "string"
484
- },
485
- "sku": {
486
- "type": "string"
487
- },
488
- "gtin13": {
489
- "$ref": "#/$defs/gtin13Value"
490
- },
491
- "gtin": {
492
- "$ref": "#/$defs/gtinValue"
493
- },
494
- "mpn": {
495
- "type": "string"
496
- },
497
- "productID": {
498
- "type": "string"
499
- },
500
- "color": {
501
- "type": "string"
502
- },
503
- "size": {
504
- "type": "string"
505
- },
506
- "material": {
507
- "type": "string"
508
- },
509
- "price": {
510
- "$ref": "#/$defs/nonNegativeAmount"
511
- },
512
- "image": {
513
- "type": "string",
514
- "format": "uri"
515
- },
516
- "additionalProperty": {
517
- "type": "array"
518
- }
519
- },
520
- "additionalProperties": true
521
- },
522
- "imageObject": {
523
- "type": "object",
524
- "required": [
525
- "@type",
526
- "url"
527
- ],
528
- "properties": {
529
- "@type": {
530
- "const": "ImageObject"
531
- },
532
- "url": {
533
- "type": "string",
534
- "format": "uri"
535
- },
536
- "caption": {
537
- "type": "string"
538
- },
539
- "additionalProperty": {
540
- "type": "array",
541
- "items": {
542
- "type": "object",
543
- "properties": {
544
- "@type": {
545
- "const": "PropertyValue"
546
- },
547
- "name": {
548
- "type": "string"
549
- },
550
- "value": {
551
- "type": "string"
552
- }
553
- },
554
- "allOf": [
555
- {
556
- "if": {
557
- "properties": {
558
- "name": {
559
- "const": "role"
560
- }
561
- },
562
- "required": [
563
- "name"
564
- ]
565
- },
566
- "then": {
567
- "properties": {
568
- "value": {
569
- "enum": [
570
- "hero",
571
- "packshot",
572
- "lifestyle",
573
- "detail",
574
- "flatlay",
575
- "swatch",
576
- "size_chart",
577
- "context"
578
- ]
579
- }
580
- }
581
- }
582
- }
583
- ]
584
- }
585
- }
586
- },
587
- "additionalProperties": true
588
- },
589
- "videoObject": {
590
- "type": "object",
591
- "required": [
592
- "@type"
593
- ],
594
- "properties": {
595
- "@type": {
596
- "const": "VideoObject"
597
- },
598
- "url": {
599
- "type": "string",
600
- "format": "uri"
601
- },
602
- "contentUrl": {
603
- "type": "string",
604
- "format": "uri"
605
- },
606
- "embedUrl": {
607
- "type": "string",
608
- "format": "uri"
609
- },
610
- "thumbnailUrl": {
611
- "type": "string",
612
- "format": "uri"
613
- },
614
- "duration": {
615
- "type": "string",
616
- "pattern": "^P(?:\\d+Y)?(?:\\d+M)?(?:\\d+D)?(?:T(?:\\d+H)?(?:\\d+M)?(?:\\d+(?:\\.\\d+)?S)?)?$"
617
- },
618
- "uploadDate": {
619
- "type": "string"
620
- },
621
- "caption": {
622
- "type": "string"
623
- },
624
- "transcript": {
625
- "type": "string"
626
- },
627
- "description": {
628
- "type": "string"
629
- },
630
- "name": {
631
- "type": "string"
632
- },
633
- "additionalProperty": {
634
- "type": "array",
635
- "items": {
636
- "type": "object",
637
- "properties": {
638
- "@type": {
639
- "const": "PropertyValue"
640
- },
641
- "name": {
642
- "type": "string"
643
- },
644
- "value": {
645
- "type": "string"
646
- }
647
- },
648
- "allOf": [
649
- {
650
- "if": {
651
- "properties": {
652
- "name": {
653
- "const": "role"
654
- }
655
- },
656
- "required": [
657
- "name"
658
- ]
659
- },
660
- "then": {
661
- "properties": {
662
- "value": {
663
- "enum": [
664
- "overview",
665
- "tutorial",
666
- "lifestyle",
667
- "construction",
668
- "demonstration",
669
- "comparison",
670
- "unboxing",
671
- "spin"
672
- ]
673
- }
674
- }
675
- }
676
- }
677
- ]
678
- }
679
- }
680
- },
681
- "anyOf": [
682
- {
683
- "required": [
684
- "url"
685
- ]
686
- },
687
- {
688
- "required": [
689
- "contentUrl"
690
- ]
691
- },
692
- {
693
- "required": [
694
- "embedUrl"
695
- ]
696
- }
697
- ],
698
- "additionalProperties": true
699
- },
700
- "questionObject": {
701
- "type": "object",
702
- "required": [
703
- "@type",
704
- "name",
705
- "acceptedAnswer"
706
- ],
707
- "properties": {
708
- "@type": {
709
- "const": "Question"
710
- },
711
- "name": {
712
- "type": "string",
713
- "minLength": 1
714
- },
715
- "acceptedAnswer": {
716
- "type": "object",
717
- "required": [
718
- "@type",
719
- "text"
720
- ],
721
- "properties": {
722
- "@type": {
723
- "const": "Answer"
724
- },
725
- "text": {
726
- "type": "string",
727
- "minLength": 1
728
- }
729
- },
730
- "additionalProperties": true
731
- },
732
- "suggestedAnswer": {
733
- "type": "array",
734
- "items": {
735
- "type": "object",
736
- "required": [
737
- "@type",
738
- "text"
739
- ],
740
- "properties": {
741
- "@type": {
742
- "const": "Answer"
743
- },
744
- "text": {
745
- "type": "string",
746
- "minLength": 1
747
- }
748
- },
749
- "additionalProperties": true
750
- }
751
- }
752
- },
753
- "additionalProperties": true
754
- },
755
- "documentObject": {
756
- "type": "object",
757
- "required": [
758
- "@type",
759
- "url",
760
- "role"
761
- ],
762
- "properties": {
763
- "@type": {
764
- "const": "pagefront:Document"
765
- },
766
- "url": {
767
- "type": "string",
768
- "format": "uri"
769
- },
770
- "role": {
771
- "type": "string",
772
- "enum": [
773
- "manual",
774
- "assembly",
775
- "care_guide",
776
- "spec_sheet",
777
- "compatibility",
778
- "warranty",
779
- "certificate",
780
- "environmental_declaration",
781
- "audit_report",
782
- "lab_test",
783
- "safety_data_sheet",
784
- "installation_guide",
785
- "user_guide",
786
- "quick_start",
787
- "brochure",
788
- "repairability_index",
789
- "recall_notice",
790
- "declaration_of_conformity"
791
- ]
792
- },
793
- "name": {
794
- "type": "string"
795
- },
796
- "inLanguage": {
797
- "type": "string"
798
- },
799
- "description": {
800
- "type": "string"
801
- },
802
- "encodingFormat": {
803
- "type": "string"
804
- }
805
- },
806
- "additionalProperties": false
807
- },
808
- "relatedProductObject": {
809
- "type": "object",
810
- "required": [
811
- "@type",
812
- "relationship"
813
- ],
814
- "properties": {
815
- "@type": {
816
- "const": "pagefront:RelatedProduct"
817
- },
818
- "relationship": {
819
- "type": "string",
820
- "enum": [
821
- "accessory",
822
- "consumable",
823
- "required_part",
824
- "spare_part",
825
- "often_bought_with",
826
- "recommended_with",
827
- "replaces",
828
- "replaced_by",
829
- "bundle_component",
830
- "compatible_with",
831
- "service"
832
- ]
833
- },
834
- "@id": {
835
- "type": "string",
836
- "format": "uri"
837
- },
838
- "sku": {
839
- "type": "string"
840
- },
841
- "gtin": {
842
- "type": "string"
843
- },
844
- "gtin13": {
845
- "type": "string",
846
- "pattern": "^[0-9]{13}$"
847
- },
848
- "mpn": {
849
- "type": "string"
850
- },
851
- "name": {
852
- "type": "string"
853
- },
854
- "url": {
855
- "type": "string",
856
- "format": "uri"
857
- },
858
- "image": {
859
- "type": "string",
860
- "format": "uri"
861
- }
862
- },
863
- "anyOf": [
864
- {
865
- "required": [
866
- "@id"
867
- ]
868
- },
869
- {
870
- "required": [
871
- "sku"
872
- ]
873
- },
874
- {
875
- "required": [
876
- "gtin"
877
- ]
878
- },
879
- {
880
- "required": [
881
- "gtin13"
882
- ]
883
- },
884
- {
885
- "required": [
886
- "mpn"
887
- ]
888
- }
889
- ],
890
- "additionalProperties": false
891
- },
892
- "gtinValue": {
893
- "oneOf": [
894
- {
895
- "type": "string"
896
- },
897
- {
898
- "type": "array",
899
- "items": {
900
- "type": "string"
901
- },
902
- "minItems": 1
903
- }
904
- ]
905
- },
906
- "gtin13Value": {
907
- "oneOf": [
908
- {
909
- "type": "string",
910
- "pattern": "^[0-9]{13}$"
911
- },
912
- {
913
- "type": "array",
914
- "items": {
915
- "type": "string",
916
- "pattern": "^[0-9]{13}$"
917
- },
918
- "minItems": 1
919
- }
920
- ]
921
- },
922
- "categoryCode": {
923
- "type": "object",
924
- "required": [
925
- "@type",
926
- "codeValue"
927
- ],
928
- "properties": {
929
- "@type": {
930
- "const": "CategoryCode"
931
- },
932
- "codeValue": {
933
- "type": "string",
934
- "minLength": 1
935
- },
936
- "inCodeSet": {
937
- "oneOf": [
938
- {
939
- "type": "string",
940
- "format": "uri"
941
- },
942
- {
943
- "type": "object"
944
- }
945
- ]
946
- },
947
- "name": {
948
- "type": "string"
949
- }
950
- },
951
- "additionalProperties": true
952
- },
953
- "featureGroup": {
954
- "type": "object",
955
- "required": [
956
- "@type",
957
- "name",
958
- "feature"
959
- ],
960
- "properties": {
961
- "@type": {
962
- "const": "pagefront:FeatureGroup"
963
- },
964
- "name": {
965
- "type": "string",
966
- "minLength": 1
967
- },
968
- "sortOrder": {
969
- "type": "integer"
970
- },
971
- "feature": {
972
- "type": "array",
973
- "items": {
974
- "$ref": "#/$defs/featureEntry"
975
- },
976
- "minItems": 1
977
- }
978
- },
979
- "additionalProperties": false
980
- },
981
- "featureEntry": {
982
- "type": "object",
983
- "required": [
984
- "@type",
985
- "name",
986
- "value"
987
- ],
988
- "properties": {
989
- "@type": {
990
- "const": "PropertyValue"
991
- },
992
- "propertyID": {
993
- "type": "string"
994
- },
995
- "name": {
996
- "type": "string",
997
- "minLength": 1
998
- },
999
- "value": {
1000
- "anyOf": [
1001
- {
1002
- "type": "string"
1003
- },
1004
- {
1005
- "type": "number"
1006
- },
1007
- {
1008
- "type": "boolean"
1009
- }
1010
- ]
1011
- },
1012
- "unitCode": {
1013
- "type": "string"
1014
- },
1015
- "description": {
1016
- "type": "string"
1017
- },
1018
- "pagefront:presentationValue": {
1019
- "type": "string"
1020
- }
1021
- },
1022
- "additionalProperties": true
1023
- },
1024
- "legalEntity": {
1025
- "type": "object",
1026
- "required": [
1027
- "@type",
1028
- "role",
1029
- "organization"
1030
- ],
1031
- "properties": {
1032
- "@type": {
1033
- "const": "pagefront:LegalEntity"
1034
- },
1035
- "role": {
1036
- "type": "string",
1037
- "enum": [
1038
- "brand_owner",
1039
- "licensee",
1040
- "authorized_representative",
1041
- "importer",
1042
- "manufacturer"
1043
- ]
1044
- },
1045
- "organization": {
1046
- "type": "object",
1047
- "required": [
1048
- "@type"
1049
- ],
1050
- "anyOf": [
1051
- {
1052
- "required": [
1053
- "name"
1054
- ]
1055
- },
1056
- {
1057
- "required": [
1058
- "@id"
1059
- ]
1060
- }
1061
- ],
1062
- "properties": {
1063
- "@type": {
1064
- "const": "Organization"
1065
- },
1066
- "@id": {
1067
- "type": "string",
1068
- "format": "uri"
1069
- },
1070
- "name": {
1071
- "type": "string",
1072
- "minLength": 1
1073
- },
1074
- "address": {
1075
- "type": "object"
1076
- },
1077
- "url": {
1078
- "type": "string",
1079
- "format": "uri"
1080
- },
1081
- "email": {
1082
- "type": "string",
1083
- "format": "email"
1084
- },
1085
- "pagefront:sheetUrl": {
1086
- "type": "string",
1087
- "format": "uri"
1088
- }
1089
- },
1090
- "additionalProperties": true
1091
- }
1092
- },
1093
- "additionalProperties": false
1094
- },
1095
- "safetyWarning": {
1096
- "type": "object",
1097
- "required": [
1098
- "@type",
1099
- "text"
1100
- ],
1101
- "properties": {
1102
- "@type": {
1103
- "const": "pagefront:SafetyWarning"
1104
- },
1105
- "text": {
1106
- "type": "string",
1107
- "minLength": 1
1108
- },
1109
- "pictogram": {
1110
- "type": "string",
1111
- "format": "uri"
1112
- },
1113
- "hazardCategory": {
1114
- "type": "string"
1115
- }
1116
- },
1117
- "additionalProperties": false
1118
- },
1119
- "safetyNotice": {
1120
- "type": "object",
1121
- "required": [
1122
- "@type",
1123
- "noticeType"
1124
- ],
1125
- "properties": {
1126
- "@type": {
1127
- "const": "pagefront:SafetyNotice"
1128
- },
1129
- "noticeType": {
1130
- "type": "string",
1131
- "enum": [
1132
- "recall",
1133
- "warning"
1134
- ]
1135
- },
1136
- "hazard": {
1137
- "type": "string"
1138
- },
1139
- "remedy": {
1140
- "type": "string",
1141
- "enum": [
1142
- "repair",
1143
- "replacement",
1144
- "refund"
1145
- ]
1146
- },
1147
- "description": {
1148
- "type": "string"
1149
- },
1150
- "reference": {
1151
- "type": "string",
1152
- "format": "uri"
1153
- },
1154
- "datePublished": {
1155
- "type": "string",
1156
- "format": "date"
1157
- },
1158
- "url": {
1159
- "type": "string",
1160
- "format": "uri"
1161
- }
1162
- },
1163
- "additionalProperties": false
1164
- },
1165
- "certification": {
1166
- "type": "object",
1167
- "required": [
1168
- "@type",
1169
- "name"
1170
- ],
1171
- "properties": {
1172
- "@type": {
1173
- "const": "Certification"
1174
- },
1175
- "name": {
1176
- "type": "string"
1177
- },
1178
- "issuedBy": {
1179
- "type": "object"
1180
- },
1181
- "about": {
1182
- "type": "string"
1183
- },
1184
- "additionalProperty": {
1185
- "type": "array"
1186
- }
1187
- },
1188
- "additionalProperties": true
1189
- },
1190
- "offer": {
1191
- "type": "object",
1192
- "required": [
1193
- "@type"
1194
- ],
1195
- "properties": {
1196
- "@type": {
1197
- "const": "Offer"
1198
- },
1199
- "@id": {
1200
- "type": "string"
1201
- },
1202
- "itemOffered": {
1203
- "type": "object"
1204
- },
1205
- "price": {
1206
- "$ref": "#/$defs/nonNegativeAmount"
1207
- },
1208
- "priceCurrency": {
1209
- "type": "string",
1210
- "pattern": "^[A-Z]{3}$"
1211
- },
1212
- "priceSpecification": {
1213
- "oneOf": [
1214
- {
1215
- "type": "object"
1216
- },
1217
- {
1218
- "type": "array",
1219
- "items": {
1220
- "type": "object"
1221
- }
1222
- }
1223
- ]
1224
- },
1225
- "availability": {
1226
- "type": "string",
1227
- "pattern": "^https?://schema\\.org/(InStock|OutOfStock|PreOrder|BackOrder|InStoreOnly|LimitedAvailability|MadeToOrder|OnlineOnly|SoldOut|Discontinued|Reserved)$"
1228
- },
1229
- "itemCondition": {
1230
- "type": "string",
1231
- "pattern": "^https?://schema\\.org/(NewCondition|UsedCondition|RefurbishedCondition|DamagedCondition)$"
1232
- },
1233
- "seller": {
1234
- "type": "object",
1235
- "properties": {
1236
- "pagefront:sheetUrl": {
1237
- "type": "string",
1238
- "format": "uri"
1239
- }
1240
- }
1241
- },
1242
- "shippingDetails": {
1243
- "oneOf": [
1244
- {
1245
- "type": "object"
1246
- },
1247
- {
1248
- "type": "array",
1249
- "items": {
1250
- "type": "object"
1251
- }
1252
- }
1253
- ]
1254
- },
1255
- "hasMerchantReturnPolicy": {
1256
- "type": "object"
1257
- },
1258
- "warranty": {
1259
- "type": "object"
1260
- },
1261
- "areaServed": {},
1262
- "eligibleRegion": {
1263
- "type": "array"
1264
- },
1265
- "acceptedPaymentMethod": {
1266
- "type": "array"
1267
- },
1268
- "pagefront:estimatedDelivery": {
1269
- "$ref": "#/$defs/deliveryEstimate"
1270
- },
1271
- "pagefront:promotions": {
1272
- "type": "array",
1273
- "items": {
1274
- "$ref": "#/$defs/promotion"
1275
- }
1276
- },
1277
- "pagefront:priceOnRequest": {
1278
- "$ref": "#/$defs/priceOnRequest"
1279
- },
1280
- "pagefront:configuratorPricing": {
1281
- "$ref": "#/$defs/configuratorPricing"
1282
- }
1283
- },
1284
- "anyOf": [
1285
- {
1286
- "required": [
1287
- "price",
1288
- "priceCurrency"
1289
- ]
1290
- },
1291
- {
1292
- "required": [
1293
- "priceSpecification"
1294
- ]
1295
- },
1296
- {
1297
- "required": [
1298
- "pagefront:priceOnRequest"
1299
- ]
1300
- }
1301
- ],
1302
- "dependentRequired": {
1303
- "pagefront:configuratorPricing": [
1304
- "price",
1305
- "priceCurrency"
1306
- ]
1307
- },
1308
- "additionalProperties": true
1309
- },
1310
- "aggregateOffer": {
1311
- "type": "object",
1312
- "required": [
1313
- "@type",
1314
- "lowPrice",
1315
- "highPrice",
1316
- "priceCurrency"
1317
- ],
1318
- "properties": {
1319
- "@type": {
1320
- "const": "AggregateOffer"
1321
- },
1322
- "@id": {
1323
- "type": "string"
1324
- },
1325
- "lowPrice": {
1326
- "$ref": "#/$defs/nonNegativeAmount"
1327
- },
1328
- "highPrice": {
1329
- "$ref": "#/$defs/nonNegativeAmount"
1330
- },
1331
- "priceCurrency": {
1332
- "type": "string",
1333
- "pattern": "^[A-Z]{3}$"
1334
- },
1335
- "offerCount": {
1336
- "type": "integer"
1337
- },
1338
- "availability": {
1339
- "type": "string",
1340
- "pattern": "^https?://schema\\.org/(InStock|OutOfStock|PreOrder|BackOrder|InStoreOnly|LimitedAvailability|MadeToOrder|OnlineOnly|SoldOut|Discontinued|Reserved)$"
1341
- },
1342
- "itemCondition": {
1343
- "type": "string",
1344
- "pattern": "^https?://schema\\.org/(NewCondition|UsedCondition|RefurbishedCondition|DamagedCondition)$"
1345
- },
1346
- "eligibleRegion": {
1347
- "type": "array"
1348
- },
1349
- "areaServed": {},
1350
- "validFrom": {
1351
- "type": "string"
1352
- },
1353
- "validThrough": {
1354
- "type": "string"
1355
- },
1356
- "seller": {
1357
- "type": "object"
1358
- },
1359
- "pagefront:configuratorPricing": {
1360
- "$ref": "#/$defs/configuratorPricing"
1361
- }
1362
- },
1363
- "additionalProperties": true
1364
- },
1365
- "priceOnRequest": {
1366
- "type": "object",
1367
- "required": [
1368
- "@type",
1369
- "method"
1370
- ],
1371
- "properties": {
1372
- "@type": {
1373
- "const": "pagefront:PriceOnRequest"
1374
- },
1375
- "method": {
1376
- "type": "string",
1377
- "enum": [
1378
- "authorized_retailer",
1379
- "dealer_network",
1380
- "quote_form",
1381
- "email",
1382
- "phone",
1383
- "unspecified"
1384
- ]
1385
- },
1386
- "contactUrl": {
1387
- "type": "string",
1388
- "format": "uri"
1389
- },
1390
- "contactEmail": {
1391
- "type": "string",
1392
- "format": "email"
1393
- },
1394
- "contactPhone": {
1395
- "type": "string"
1396
- },
1397
- "note": {
1398
- "type": "string"
1399
- }
1400
- },
1401
- "additionalProperties": false
1402
- },
1403
- "sizeChart": {
1404
- "type": "object",
1405
- "required": [
1406
- "@type",
1407
- "unitCode",
1408
- "sizes",
1409
- "measurements"
1410
- ],
1411
- "properties": {
1412
- "@type": {
1413
- "const": "pagefront:SizeChart"
1414
- },
1415
- "unitCode": {
1416
- "type": "string"
1417
- },
1418
- "sizes": {
1419
- "type": "array",
1420
- "items": {
1421
- "type": "string"
1422
- },
1423
- "minItems": 1
1424
- },
1425
- "measurements": {
1426
- "type": "array",
1427
- "items": {
1428
- "$ref": "#/$defs/measurement"
1429
- },
1430
- "minItems": 1
1431
- },
1432
- "modelReferences": {
1433
- "type": "array",
1434
- "items": {
1435
- "$ref": "#/$defs/modelReference"
1436
- }
1437
- }
1438
- },
1439
- "additionalProperties": false
1440
- },
1441
- "measurement": {
1442
- "type": "object",
1443
- "required": [
1444
- "@type",
1445
- "name",
1446
- "values"
1447
- ],
1448
- "properties": {
1449
- "@type": {
1450
- "const": "pagefront:Measurement"
1451
- },
1452
- "name": {
1453
- "type": "string"
1454
- },
1455
- "values": {
1456
- "type": "object",
1457
- "additionalProperties": {
1458
- "type": "number"
1459
- }
1460
- }
1461
- },
1462
- "additionalProperties": false
1463
- },
1464
- "modelReference": {
1465
- "type": "object",
1466
- "required": [
1467
- "@type",
1468
- "name"
1469
- ],
1470
- "properties": {
1471
- "@type": {
1472
- "const": "pagefront:ModelReference"
1473
- },
1474
- "name": {
1475
- "type": "string"
1476
- },
1477
- "heightCm": {
1478
- "type": "number",
1479
- "minimum": 0
1480
- },
1481
- "wearsSize": {
1482
- "type": "string"
1483
- }
1484
- },
1485
- "additionalProperties": false
1486
- },
1487
- "sizeRecommendation": {
1488
- "type": "object",
1489
- "required": [
1490
- "@type"
1491
- ],
1492
- "properties": {
1493
- "@type": {
1494
- "const": "pagefront:SizeRecommendation"
1495
- },
1496
- "fitProfile": {
1497
- "type": "string",
1498
- "enum": [
1499
- "runs_small",
1500
- "true_to_size",
1501
- "runs_large"
1502
- ]
1503
- },
1504
- "sizeAdjustment": {
1505
- "$ref": "#/$defs/sizeAdjustment"
1506
- },
1507
- "description": {
1508
- "type": "string"
1509
- },
1510
- "appliesTo": {
1511
- "type": "string"
1512
- }
1513
- },
1514
- "additionalProperties": false
1515
- },
1516
- "sizeAdjustment": {
1517
- "type": "object",
1518
- "required": [
1519
- "@type",
1520
- "direction",
1521
- "magnitude"
1522
- ],
1523
- "properties": {
1524
- "@type": {
1525
- "const": "pagefront:SizeAdjustment"
1526
- },
1527
- "direction": {
1528
- "type": "string",
1529
- "enum": [
1530
- "up",
1531
- "down"
1532
- ]
1533
- },
1534
- "magnitude": {
1535
- "type": "number",
1536
- "minimum": 0
1537
- },
1538
- "sizeSystem": {
1539
- "type": "string"
1540
- }
1541
- },
1542
- "additionalProperties": false
1543
- },
1544
- "material": {
1545
- "type": "object",
1546
- "required": [
1547
- "@type",
1548
- "material"
1549
- ],
1550
- "properties": {
1551
- "@type": {
1552
- "const": "pagefront:Material"
1553
- },
1554
- "material": {
1555
- "type": "string"
1556
- },
1557
- "percentage": {
1558
- "type": "number",
1559
- "minimum": 0,
1560
- "maximum": 100
1561
- },
1562
- "purity": {
1563
- "type": "string"
1564
- },
1565
- "purityPercentage": {
1566
- "type": "number",
1567
- "minimum": 0,
1568
- "maximum": 100
1569
- },
1570
- "provenance": {
1571
- "type": "string",
1572
- "enum": [
1573
- "virgin",
1574
- "recycled",
1575
- "fair_mined",
1576
- "lab_grown",
1577
- "reclaimed",
1578
- "deadstock"
1579
- ]
1580
- },
1581
- "weightGrams": {
1582
- "type": "number",
1583
- "minimum": 0
1584
- }
1585
- },
1586
- "additionalProperties": false
1587
- },
1588
- "construction": {
1589
- "type": "object",
1590
- "required": [
1591
- "@type"
1592
- ],
1593
- "properties": {
1594
- "@type": {
1595
- "const": "pagefront:Construction"
1596
- },
1597
- "stitch": {
1598
- "type": "string"
1599
- },
1600
- "gauge": {
1601
- "type": "number"
1602
- },
1603
- "machine": {
1604
- "type": "string"
1605
- },
1606
- "constructionNotes": {
1607
- "type": "string"
1608
- }
1609
- },
1610
- "additionalProperties": true
1611
- },
1612
- "manufacturingStage": {
1613
- "type": "object",
1614
- "required": [
1615
- "@type",
1616
- "stage",
1617
- "country"
1618
- ],
1619
- "properties": {
1620
- "@type": {
1621
- "const": "pagefront:ManufacturingStage"
1622
- },
1623
- "stage": {
1624
- "type": "string"
1625
- },
1626
- "country": {
1627
- "type": "string",
1628
- "pattern": "^[A-Z]{2}$"
1629
- },
1630
- "facility": {
1631
- "type": "string"
1632
- },
1633
- "facilityCountry": {
1634
- "type": "string",
1635
- "pattern": "^[A-Z]{2}$"
1636
- }
1637
- },
1638
- "additionalProperties": false
1639
- },
1640
- "gemstone": {
1641
- "type": "object",
1642
- "required": [
1643
- "@type",
1644
- "type"
1645
- ],
1646
- "properties": {
1647
- "@type": {
1648
- "const": "pagefront:Gemstone"
1649
- },
1650
- "type": {
1651
- "type": "string"
1652
- },
1653
- "origin": {
1654
- "type": "string",
1655
- "enum": [
1656
- "natural_mined",
1657
- "lab_grown",
1658
- "treated",
1659
- "synthetic"
1660
- ]
1661
- },
1662
- "shape": {
1663
- "type": "string"
1664
- },
1665
- "caratWeight": {
1666
- "type": "number",
1667
- "minimum": 0
1668
- },
1669
- "colorGrade": {
1670
- "type": "string"
1671
- },
1672
- "clarityGrade": {
1673
- "type": "string"
1674
- },
1675
- "cutGrade": {
1676
- "type": "string"
1677
- },
1678
- "certifyingBody": {
1679
- "type": "string"
1680
- }
1681
- },
1682
- "additionalProperties": false
1683
- },
1684
- "configurator": {
1685
- "type": "object",
1686
- "required": [
1687
- "@type",
1688
- "dimensions"
1689
- ],
1690
- "properties": {
1691
- "@type": {
1692
- "const": "pagefront:Configurator"
1693
- },
1694
- "@id": {
1695
- "type": "string",
1696
- "minLength": 1
1697
- },
1698
- "dimensions": {
1699
- "type": "array",
1700
- "items": {
1701
- "$ref": "#/$defs/configuratorDimension"
1702
- },
1703
- "minItems": 1
1704
- },
1705
- "exclusions": {
1706
- "type": "array",
1707
- "items": {
1708
- "$ref": "#/$defs/configurationSelection",
1709
- "type": "object",
1710
- "minProperties": 1
1711
- }
1712
- }
1713
- },
1714
- "additionalProperties": false
1715
- },
1716
- "configuratorDimension": {
1717
- "type": "object",
1718
- "required": [
1719
- "name"
1720
- ],
1721
- "properties": {
1722
- "name": {
1723
- "type": "string"
1724
- },
1725
- "options": {
1726
- "type": "array",
1727
- "items": {
1728
- "type": "object",
1729
- "required": [
1730
- "value"
1731
- ],
1732
- "properties": {
1733
- "value": {
1734
- "anyOf": [
1735
- {
1736
- "type": "string"
1737
- },
1738
- {
1739
- "type": "number"
1740
- },
1741
- {
1742
- "type": "boolean"
1743
- }
1744
- ]
1745
- },
1746
- "description": {
1747
- "type": "string"
1748
- },
1749
- "priceModifier": false,
1750
- "currency": false
1751
- },
1752
- "additionalProperties": true
1753
- }
1754
- },
1755
- "affectsPrice": {
1756
- "type": "boolean",
1757
- "default": true
1758
- },
1759
- "inputType": {
1760
- "type": "string",
1761
- "enum": [
1762
- "select",
1763
- "text"
1764
- ],
1765
- "default": "select"
1766
- },
1767
- "maxLength": {
1768
- "type": "integer",
1769
- "minimum": 1
1770
- },
1771
- "system": {
1772
- "type": "string"
1773
- },
1774
- "note": {
1775
- "type": "string"
1776
- }
1777
- },
1778
- "additionalProperties": false
1779
- },
1780
- "configurationSelection": {
1781
- "type": "object",
1782
- "additionalProperties": {
1783
- "anyOf": [
1784
- {
1785
- "type": "string"
1786
- },
1787
- {
1788
- "type": "number"
1789
- },
1790
- {
1791
- "type": "boolean"
1792
- }
1793
- ]
1794
- }
1795
- },
1796
- "configuratorPricing": {
1797
- "type": "object",
1798
- "required": [
1799
- "@type",
1800
- "configurator",
1801
- "baseConfiguration",
1802
- "basePrice",
1803
- "modifiers"
1804
- ],
1805
- "properties": {
1806
- "@type": {
1807
- "const": "pagefront:ConfiguratorPricing"
1808
- },
1809
- "configurator": {
1810
- "type": "object",
1811
- "required": [
1812
- "@id"
1813
- ],
1814
- "properties": {
1815
- "@type": {
1816
- "const": "pagefront:Configurator"
1817
- },
1818
- "@id": {
1819
- "type": "string",
1820
- "minLength": 1
1821
- }
1822
- },
1823
- "additionalProperties": false
1824
- },
1825
- "baseConfiguration": {
1826
- "$ref": "#/$defs/configurationSelection"
1827
- },
1828
- "basePrice": {
1829
- "$ref": "#/$defs/nonNegativeAmount"
1830
- },
1831
- "modifiers": {
1832
- "type": "object",
1833
- "additionalProperties": {
1834
- "type": "object",
1835
- "additionalProperties": {
1836
- "$ref": "#/$defs/amount"
1837
- }
1838
- }
1839
- },
1840
- "adjustments": {
1841
- "type": "array",
1842
- "items": {
1843
- "type": "object",
1844
- "required": [
1845
- "when",
1846
- "priceModifier"
1847
- ],
1848
- "properties": {
1849
- "when": {
1850
- "$ref": "#/$defs/configurationSelection",
1851
- "type": "object",
1852
- "minProperties": 1
1853
- },
1854
- "priceModifier": {
1855
- "$ref": "#/$defs/amount"
1856
- }
1857
- },
1858
- "additionalProperties": false
1859
- }
1860
- },
1861
- "pricing": {
1862
- "type": "string",
1863
- "enum": [
1864
- "complete",
1865
- "partial"
1866
- ],
1867
- "default": "complete"
1868
- }
1869
- },
1870
- "additionalProperties": false
1871
- },
1872
- "madeToOrderTerms": {
1873
- "type": "object",
1874
- "required": [
1875
- "@type"
1876
- ],
1877
- "properties": {
1878
- "@type": {
1879
- "const": "pagefront:MadeToOrderTerms"
1880
- },
1881
- "productionLeadTime": {
1882
- "$ref": "#/$defs/duration"
1883
- },
1884
- "cancellationPolicy": {
1885
- "type": "string"
1886
- },
1887
- "returnsExceptions": {
1888
- "type": "array",
1889
- "items": {
1890
- "type": "string"
1891
- }
1892
- },
1893
- "aftermarketServices": {
1894
- "type": "array",
1895
- "items": {
1896
- "$ref": "#/$defs/aftermarketService"
1897
- }
1898
- }
1899
- },
1900
- "additionalProperties": false
1901
- },
1902
- "duration": {
1903
- "type": "object",
1904
- "required": [
1905
- "@type"
1906
- ],
1907
- "properties": {
1908
- "@type": {
1909
- "const": "pagefront:Duration"
1910
- },
1911
- "minDays": {
1912
- "type": "integer",
1913
- "minimum": 0
1914
- },
1915
- "maxDays": {
1916
- "type": "integer",
1917
- "minimum": 0
1918
- },
1919
- "description": {
1920
- "type": "string"
1921
- }
1922
- },
1923
- "additionalProperties": false
1924
- },
1925
- "deliveryEstimate": {
1926
- "type": "object",
1927
- "required": [
1928
- "@type"
1929
- ],
1930
- "properties": {
1931
- "@type": {
1932
- "const": "pagefront:DeliveryEstimate"
1933
- },
1934
- "earliest": {
1935
- "type": "string",
1936
- "format": "date"
1937
- },
1938
- "latest": {
1939
- "type": "string",
1940
- "format": "date"
1941
- },
1942
- "description": {
1943
- "type": "string"
1944
- }
1945
- },
1946
- "additionalProperties": false
1947
- },
1948
- "aftermarketService": {
1949
- "type": "object",
1950
- "required": [
1951
- "@type",
1952
- "service"
1953
- ],
1954
- "properties": {
1955
- "@type": {
1956
- "const": "pagefront:AftermarketService"
1957
- },
1958
- "service": {
1959
- "type": "string"
1960
- },
1961
- "limit": {
1962
- "type": "string"
1963
- },
1964
- "description": {
1965
- "type": "string"
1966
- }
1967
- },
1968
- "additionalProperties": false
1969
- },
1970
- "promotion": {
1971
- "type": "object",
1972
- "required": [
1973
- "@type",
1974
- "scope"
1975
- ],
1976
- "properties": {
1977
- "@type": {
1978
- "const": "pagefront:Promotion"
1979
- },
1980
- "code": {
1981
- "type": "string"
1982
- },
1983
- "discountPercentage": {
1984
- "type": "number",
1985
- "minimum": 0,
1986
- "maximum": 100
1987
- },
1988
- "discountAmount": {
1989
- "$ref": "#/$defs/nonNegativeAmount"
1990
- },
1991
- "discountCurrency": {
1992
- "type": "string",
1993
- "pattern": "^[A-Z]{3}$"
1994
- },
1995
- "scope": {
1996
- "type": "string",
1997
- "enum": [
1998
- "product",
1999
- "category",
2000
- "site_wide"
2001
- ]
2002
- },
2003
- "occasion": {
2004
- "type": "string"
2005
- },
2006
- "validUntil": {
2007
- "type": "string",
2008
- "format": "date-time"
2009
- }
2010
- },
2011
- "additionalProperties": false
2012
- }
2013
- }
2014
- };