diff --git a/src/openapi/products/ABTProducts-v2.2.json b/src/openapi/products/ABTProducts-v2.2.json index 952d0c9..a595d16 100644 --- a/src/openapi/products/ABTProducts-v2.2.json +++ b/src/openapi/products/ABTProducts-v2.2.json @@ -44,6 +44,7 @@ "Entries": [ { "productId": 1, + "productCode": "30901-WL", "productName": "HTM pilot 90% korting", "productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!", "productCategory": { @@ -91,6 +92,7 @@ "Entries": [ { "productId": 2, + "productCode": "312AB-WL", "productName": "HTM dagkaart", "productDescription": "Reis een dag met het openbaar vervoer bij HTM", "productCategory": { @@ -114,6 +116,7 @@ "Entries": [ { "productId": 1, + "productCode": "30901-WL", "productName": "HTM pilot 90% korting", "productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!", "productCategory": { @@ -131,6 +134,7 @@ }, { "productId": 2, + "productCode": "312AB-WL", "productName": "HTM dagkaart", "productDescription": "Reis een dag met het openbaar vervoer bij HTM", "productCategory": { @@ -211,25 +215,331 @@ }, "examples": { "postMinimalProduct": { - "$ref": "#/components/examples/postMinimalProduct" + "summary": "Minimum request body (to be used as minimal parent-template for hierarchical products)", + "value": { + "productOwnerId": 1, + "isRenewable": false, + "isSellableAtHtm": false, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false + } }, "postGboProduct": { - "$ref": "#/components/examples/postGboProduct" + "summary": "Add new GBO product (non-renewable)", + "value": { + "productCode": "30901-WL", + "gboPackageTemplateId": "30901", + "productName": "HTM pilot 90% korting", + "productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!", + "validityPeriod": { + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM pilot 90% discount", + "description": "Travel with 90% discount during the first F&F pilot!" + } + ], + "productOwnerId": 1, + "marketSegmentIds": [ + 1 + ], + "customerSegmentIds": [ + 2, + 3, + 4, + 5 + ], + "productCategoryId": 1, + "requiredCustomerLevelId": 1, + "incompatibleProducts": [ + { + "incompatibleProductId": 1, + "description": "Kan niet combineren met zichzelf" + } + ], + "mandatoryCustomerDataItemIds": [ + 4, + 5 + ], + "tokenTypeIds": [ + 1 + ], + "paymentMomentId": 1, + "validityDuration": "P7D", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "salesTouchpointId": 3, + "sellingPrices": [ + { + "amountExclTax": 92, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 100, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "internalPrice": 92.0000 + } + ] + } + ], + "purchasePrices": [ + { + "amountExclTax": 0, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F", + "amountInclTax": 0, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00" + } + ] + } }, "postGboProductMultiplePeriods": { - "$ref": "#/components/examples/postGboProductMultiplePeriods" + "summary": "Add new GBO product (non-renewable, multiple sellingPeriods/prices per period)", + "value": { + "productCode": "30901-WL", + "gboPackageTemplateId": "30901", + "productName": "HTM pilot 90% korting", + "productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!", + "validityPeriod": { + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM pilot 90% discount", + "description": "Travel with 90% discount during the first F&F pilot!" + } + ], + "productOwnerId": 1, + "marketSegmentIds": [ + 1 + ], + "customerSegmentIds": [ + 2, + 3, + 4, + 5 + ], + "productCategoryId": 1, + "requiredCustomerLevelId": 1, + "incompatibleProducts": [ + { + "incompatibleProductId": 2, + "description": "Kan niet combineren met zichzelf" + } + ], + "mandatoryCustomerDataItemIds": [ + 4, + 5 + ], + "tokenTypeIds": [ + 1 + ], + "paymentMomentId": 1, + "validityDuration": "P7D", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00", + "salesTouchpointId": 3, + "sellingPrices": [ + { + "amountExclTax": 92, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 100, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "internalPrice": 92.0000 + }, + { + "amountExclTax": 101, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 110, + "fromInclusive": "2025-01-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00", + "internalPrice": 101.0000 + } + ] + }, + { + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00", + "salesTouchpointId": 2, + "sellingPrices": [ + { + "amountExclTax": 92, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 100, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "internalPrice": 92.0000 + }, + { + "amountExclTax": 101, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 110, + "fromInclusive": "2025-01-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00", + "internalPrice": 101.0000 + } + ] + } + ], + "purchasePrices": [ + { + "amountExclTax": 0, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F", + "amountInclTax": 0, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00" + } + ] + } }, "postGboPadProduct": { - "$ref": "#/components/examples/postGboPadProduct" + "summary": "Add new GBO product (PAD required, renewable, serviceOptions, forbiddenPaymentMethods)", + "value": { + "productCode": "35301-MA", + "gboPackageTemplateId": "35301", + "productName": "HTM Regio Vrij DH73", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", + "validityPeriod": { + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free DH73", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area in the Rotterdam The Hague region." + } + ], + "productOwnerId": 1, + "marketSegmentIds": [ + 1 + ], + "customerSegmentIds": [ + 2, + 3, + 4, + 5 + ], + "productCategoryId": 3, + "requiredCustomerLevelId": 3, + "requiredProducts": [ + { + "requiredProductId": 1, + "description": "Basisproduct nodig" + } + ], + "incompatibleProducts": [ + { + "incompatibleProductId": 3, + "description": "Kan niet combineren met zichzelf" + } + ], + "mandatoryCustomerDataItemIds": [ + 3, + 4, + 5, + 6 + ], + "requiredGboPersonalAttributeIds": [ + 1, + 2, + 3 + ], + "tokenTypeIds": [ + 1, + 2, + 3 + ], + "paymentMomentId": 1, + "serviceOptionIds": [ + 1, + 2 + ], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": true, + "sendInvoice": true, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "salesTouchpointId": 3, + "forbiddenPaymentMethodIds": [ + 1 + ], + "sellingPrices": [ + { + "amountExclTax": 5413, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 5900, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "internalPrice": 5413.0000 + } + ] + } + ], + "purchasePrices": [ + { + "amountExclTax": 0, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F", + "amountInclTax": 0, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00" + } + ] + } }, "postGboProductSupplement": { - "$ref": "#/components/examples/postGboProductSupplement" + "summary": "Add new GBO product (supplement with requirements)", + "value": { + "productName": "TODO" + } }, "postTapConnectProduct": { - "$ref": "#/components/examples/postTapConnectProduct" + "summary": "Add new TapConnect product", + "value": { + "productName": "TODO" + } }, "postIbanMandate": { - "$ref": "#/components/examples/postIbanMandate" + "summary": "Add new IBAN mandate (functional product)", + "value": { + "productName": "TODO" + } } } } @@ -241,7 +551,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateProductResponse" + "$ref": "#/components/schemas/CreateOrUpdateProductResponse" } } } @@ -450,7 +760,7 @@ "sellingPriceId": 1, "amountExclTax": 92, "taxMetadata": { - "taxMetadataId": 2, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", "taxCode": "V09", "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%" @@ -466,10 +776,9 @@ "purchasePrices": [ { "purchasePriceId": 1, - "productId": 1, "amountExclTax": 0, "taxMetadata": { - "taxMetadataId": 1, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F", "taxCode": "V0", "taxPercentageAmount": 0, "description": "BTW VERKOOP NUL" @@ -625,7 +934,7 @@ "sellingPriceId": 1, "amountExclTax": 92, "taxMetadata": { - "taxMetadataId": 2, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", "taxCode": "V09", "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%" @@ -639,7 +948,7 @@ "sellingPriceId": 2, "amountExclTax": 101, "taxMetadata": { - "taxMetadataId": 2, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", "taxCode": "V09", "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%" @@ -680,7 +989,7 @@ "sellingPriceId": 3, "amountExclTax": 92, "taxMetadata": { - "taxMetadataId": 2, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", "taxCode": "V09", "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%" @@ -694,7 +1003,7 @@ "sellingPriceId": 4, "amountExclTax": 101, "taxMetadata": { - "taxMetadataId": 2, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", "taxCode": "V09", "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%" @@ -710,10 +1019,9 @@ "purchasePrices": [ { "purchasePriceId": 1, - "productId": 1, "amountExclTax": 0, "taxMetadata": { - "taxMetadataId": 1, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F", "taxCode": "V0", "taxPercentageAmount": 0, "description": "BTW VERKOOP NUL" @@ -915,7 +1223,7 @@ "sellingPriceId": 5, "amountExclTax": 5413, "taxMetadata": { - "taxMetadataId": 2, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", "taxCode": "V09", "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%" @@ -931,10 +1239,9 @@ "purchasePrices": [ { "purchasePriceId": 1, - "productId": 1, "amountExclTax": 0, "taxMetadata": { - "taxMetadataId": 1, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F", "taxCode": "V0", "taxPercentageAmount": 0, "description": "BTW VERKOOP NUL" @@ -1028,7 +1335,7 @@ "ABTProducts CRUD" ], "summary": "Replace the entire product (as specified by the productId) with the given raw JSON request body, after successful validation", - "description": "Replace the entire product (as specified by the productId) with the given raw JSON request body, but only after successful validation of the entire request body. When any (subset of) validation fails, nothing is persisted in the underlying database.", + "description": "For nested JSON, including id's for reference tables indicates an update of an existing reference - no id's indicates a new reference", "parameters": [ { "name": "productId", @@ -1036,7 +1343,7 @@ "required": true, "style": "simple", "explode": false, - "description": "The id of the product to replace", + "description": "The id of the product to replace/update", "schema": { "type": "integer" } @@ -1046,29 +1353,457 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateProductRequest" + "$ref": "#/components/schemas/UpdateProductRequest" }, "examples": { - "postMinimalProduct": { - "$ref": "#/components/examples/postMinimalProduct" + "updateMinimalProduct": { + "summary": "Minimum request body (to be used as minimal parent-template for hierarchical products)", + "value": { + "productOwnerId": 1, + "isRenewable": false, + "isSellableAtHtm": false, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false + } }, - "postGboProduct": { - "$ref": "#/components/examples/postGboProduct" + "updateGboProduct": { + "summary": "Update existing GBO product (non-renewable)", + "value": { + "productCode": "30901-WL", + "gboPackageTemplateId": "30901", + "productName": "HTM pilot 90% korting", + "productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!", + "validityPeriod": { + "validityPeriodId": 1, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM pilot 90% discount", + "description": "Travel with 90% discount during the first F&F pilot!" + } + ], + "productOwnerId": 1, + "marketSegmentIds": [ + 1 + ], + "customerSegmentIds": [ + 2, + 3, + 4, + 5 + ], + "productCategoryId": 1, + "requiredCustomerLevelId": 1, + "incompatibleProducts": [ + { + "incompatibleProductId": 1, + "description": "Kan niet combineren met zichzelf" + } + ], + "mandatoryCustomerDataItemIds": [ + 4, + 5 + ], + "tokenTypeIds": [ + 1 + ], + "paymentMomentId": 1, + "validityDuration": "P7D", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 1, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "salesTouchpointId": 3, + "sellingPrices": [ + { + "sellingPriceId": 1, + "amountExclTax": 92, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 100, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "internalPrice": 92.0000 + } + ] + } + ], + "purchasePrices": [ + { + "purchasePriceId": 1, + "amountExclTax": 0, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F", + "amountInclTax": 0, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00" + } + ] + } }, - "postGboProductMultiplePeriods": { - "$ref": "#/components/examples/postGboProductMultiplePeriods" + "advancedUpdateGboProduct": { + "summary": "Advanced update (remove mandatoryCustomerDataItem references, add new second sellingPeriod)", + "value": { + "productCode": "30901-WL", + "gboPackageTemplateId": "30901", + "productName": "HTM pilot 90% korting", + "productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!", + "validityPeriod": { + "validityPeriodId": 1, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM pilot 90% discount", + "description": "Travel with 90% discount during the first F&F pilot!" + } + ], + "productOwnerId": 1, + "marketSegmentIds": [ + 1 + ], + "customerSegmentIds": [ + 2, + 3, + 4, + 5 + ], + "productCategoryId": 1, + "requiredCustomerLevelId": 1, + "incompatibleProducts": [ + { + "incompatibleProductId": 1, + "description": "Kan niet combineren met zichzelf" + } + ], + "mandatoryCustomerDataItemIds": null, + "tokenTypeIds": [ + 1 + ], + "paymentMomentId": 1, + "validityDuration": "P7D", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 1, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "salesTouchpointId": 3, + "sellingPrices": [ + { + "sellingPriceId": 1, + "amountExclTax": 92, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 100, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "internalPrice": 92.0000 + } + ] + }, + { + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00", + "salesTouchpointId": 2, + "sellingPrices": [ + { + "amountExclTax": 92, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 100, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "internalPrice": 92.0000 + }, + { + "amountExclTax": 101, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 110, + "fromInclusive": "2025-01-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00", + "internalPrice": 101.0000 + } + ] + } + ], + "purchasePrices": [ + { + "purchasePriceId": 1, + "amountExclTax": 0, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F", + "amountInclTax": 0, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00" + } + ] + } }, - "postGboPadProduct": { - "$ref": "#/components/examples/postGboPadProduct" + "updateGboProductMultiplePeriods": { + "summary": "Update existing GBO product (non-renewable, multiple sellingPeriods/prices per period)", + "value": { + "productCode": "30901-WL", + "gboPackageTemplateId": "30901", + "productName": "HTM pilot 90% korting", + "productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!", + "validityPeriod": { + "validityPeriodId": 1, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM pilot 90% discount", + "description": "Travel with 90% discount during the first F&F pilot!" + } + ], + "productOwnerId": 1, + "marketSegmentIds": [ + 1 + ], + "customerSegmentIds": [ + 2, + 3, + 4, + 5 + ], + "productCategoryId": 1, + "requiredCustomerLevelId": 1, + "incompatibleProducts": [ + { + "incompatibleProductId": 2, + "description": "Kan niet combineren met zichzelf" + } + ], + "mandatoryCustomerDataItemIds": [ + 4, + 5 + ], + "tokenTypeIds": [ + 1 + ], + "paymentMomentId": 1, + "validityDuration": "P7D", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 1, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00", + "salesTouchpointId": 3, + "sellingPrices": [ + { + "sellingPriceId": 1, + "amountExclTax": 92, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 100, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "internalPrice": 92.0000 + }, + { + "sellingPriceId": 2, + "amountExclTax": 101, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 110, + "fromInclusive": "2025-01-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00", + "internalPrice": 101.0000 + } + ] + }, + { + "sellingPeriodId": 2, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00", + "salesTouchpointId": 2, + "sellingPrices": [ + { + "sellingPriceId": 3, + "amountExclTax": 92, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 100, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "internalPrice": 92.0000 + }, + { + "sellingPriceId": 4, + "amountExclTax": 101, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 110, + "fromInclusive": "2025-01-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00", + "internalPrice": 101.0000 + } + ] + } + ], + "purchasePrices": [ + { + "purchasePriceId": 1, + "amountExclTax": 0, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F", + "amountInclTax": 0, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2025-12-31T23:59:59.999+02:00" + } + ] + } }, - "postGboProductSupplement": { - "$ref": "#/components/examples/postGboProductSupplement" + "updateGboPadProduct": { + "summary": "Update existing GBO product (PAD required, renewable, serviceOptions, forbiddenPaymentMethods)", + "value": { + "productCode": "35301-MA", + "gboPackageTemplateId": "35301", + "productName": "HTM Regio Vrij DH73", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", + "validityPeriod": { + "validityPeriodId": 3, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free DH73", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area in the Rotterdam The Hague region." + } + ], + "productOwnerId": 1, + "marketSegmentIds": [ + 1 + ], + "customerSegmentIds": [ + 2, + 3, + 4, + 5 + ], + "productCategoryId": 3, + "requiredCustomerLevelId": 3, + "requiredProducts": [ + { + "requiredProductId": 1, + "description": "Basisproduct nodig" + } + ], + "incompatibleProducts": [ + { + "incompatibleProductId": 3, + "description": "Kan niet combineren met zichzelf" + } + ], + "mandatoryCustomerDataItemIds": [ + 3, + 4, + 5, + 6 + ], + "requiredGboPersonalAttributeIds": [ + 1, + 2, + 3 + ], + "tokenTypeIds": [ + 1, + 2, + 3 + ], + "paymentMomentId": 1, + "serviceOptionIds": [ + 1, + 2 + ], + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": true, + "sendInvoice": true, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 1, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "salesTouchpointId": 3, + "forbiddenPaymentMethodIds": [ + 1 + ], + "sellingPrices": [ + { + "sellingPriceId": 1, + "amountExclTax": 5413, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "amountInclTax": 5900, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00", + "internalPrice": 5413.0000 + } + ] + } + ], + "purchasePrices": [ + { + "purchasePriceId": 1, + "amountExclTax": 0, + "taxMetadataId": "501B17EF-36C4-4039-B92C-6517969B464F", + "amountInclTax": 0, + "fromInclusive": "2024-09-01T00:00:00.000+02:00", + "toInclusive": "2024-12-31T23:59:59.999+02:00" + } + ] + } }, - "postTapConnectProduct": { - "$ref": "#/components/examples/postTapConnectProduct" + "updateGboProductSupplement": { + "summary": "Update existing GBO product (supplement with requirements)", + "value": { + "productName": "TODO" + } }, - "postIbanMandate": { - "$ref": "#/components/examples/postIbanMandate" + "updateTapConnectProduct": { + "summary": "Update existing TapConnect product", + "value": { + "productName": "TODO" + } + }, + "updateIbanMandate": { + "summary": "Update existing IBAN mandate (functional product)", + "value": { + "productName": "TODO" + } } } } @@ -1080,7 +1815,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateProductResponse" + "$ref": "#/components/schemas/CreateOrUpdateProductResponse" } } } @@ -1125,7 +1860,7 @@ } } } - }, + }, "x-auth-type": "Application & Application User", "x-throttling-tier": "Unlimited" } @@ -1133,12 +1868,12 @@ }, "components": { "schemas": { - "TaxMetadata": { + "TaxMetadataResponse": { "type": "object", "properties": { "taxMetadataId": { - "type": "integer", - "example": 1 + "type": "string", + "example": "501B17EF-36C4-4039-B92C-6517969B464E" }, "taxCode": { "type": "string", @@ -1154,7 +1889,7 @@ } } }, - "ProductTranslation": { + "ProductTranslationResponse": { "type": "object", "properties": { "language": { @@ -1171,7 +1906,7 @@ } } }, - "SellingPrice": { + "SellingPriceResponse": { "type": "object", "properties": { "sellingPriceId": { @@ -1183,7 +1918,7 @@ "example": 750 }, "taxMetadata": { - "$ref": "#/components/schemas/TaxMetadata" + "$ref": "#/components/schemas/TaxMetadataResponse" }, "amountInclTax": { "type": "integer", @@ -1203,7 +1938,7 @@ } } }, - "PurchasePrice": { + "PurchasePriceResponse": { "type": "object", "properties": { "purchasePriceId": { @@ -1215,7 +1950,7 @@ "example": 750 }, "taxMetadata": { - "$ref": "#/components/schemas/TaxMetadata" + "$ref": "#/components/schemas/TaxMetadataResponse" }, "amountInclTax": { "type": "integer", @@ -1231,7 +1966,7 @@ } } }, - "SalesTouchpoint": { + "SalesTouchpointResponse": { "type": "object", "properties": { "salesTouchpointId": { @@ -1313,6 +2048,10 @@ "type": "integer", "example": 1 }, + "productCode": { + "type": "string", + "example": "30901-WL" + }, "productName": { "type": "string", "example": "HTM pilot 90% korting" @@ -1393,8 +2132,8 @@ "type": "object", "properties": { "productGroupMetadataId": { - "type": "integer", - "example": 1 + "type": "string", + "example": "501B17EF-36C4-4039-B92C-6517969B464E" }, "productGroupCode": { "type": "string", @@ -1466,7 +2205,7 @@ "productTranslations": { "type": "array", "items": { - "$ref": "#/components/schemas/ProductTranslation" + "$ref": "#/components/schemas/ProductTranslationResponse" } }, "productOwner": { @@ -1486,7 +2225,7 @@ } } }, - "marketSegments": { + "marketSegmentse": { "type": "array", "items": { "type": "object", @@ -1563,6 +2302,7 @@ }, "description": { "type": "string", + "description": "Reason why the product is required", "example": "Description" } } @@ -1583,6 +2323,7 @@ }, "description": { "type": "string", + "description": "Reason why the product is incompatible with the selected product", "example": "Description" } } @@ -1728,7 +2469,7 @@ "example": "2022-06-01T00:00:00.000Z" }, "salesTouchpoint": { - "$ref": "#/components/schemas/SalesTouchpoint" + "$ref": "#/components/schemas/SalesTouchpointResponse" }, "forbiddenPaymentMethods": { "type": "array", @@ -1753,7 +2494,7 @@ "sellingPrices": { "type": "array", "items": { - "$ref": "#/components/schemas/SellingPrice" + "$ref": "#/components/schemas/SellingPriceResponse" } } } @@ -1762,7 +2503,7 @@ "purchasePrices": { "type": "array", "items": { - "$ref": "#/components/schemas/PurchasePrice" + "$ref": "#/components/schemas/PurchasePriceResponse" } }, "auditTrail": { @@ -1822,9 +2563,9 @@ "example": "1234AB" }, "productGroupMetadataId": { - "type": "integer", + "type": "string", "description": "The ID of the productGroupMetadata for administration in U4F", - "example": 1 + "example": "501B17EF-36C4-4039-B92C-6517969B464E" }, "productName": { "type": "string", @@ -1837,6 +2578,10 @@ "example": "Test product description" }, "validityPeriod": { + "required": [ + "fromInclusive", + "toInclusive" + ], "type": "object", "description": "The validity period of the product", "properties": { @@ -1856,7 +2601,26 @@ "type": "array", "description": "Translations of the product name and description", "items": { - "$ref": "#/components/schemas/ProductTranslation" + "type": "object", + "required": [ + "language", + "name", + "description" + ], + "properties": { + "language": { + "type": "string", + "example": "en" + }, + "name": { + "type": "string", + "example": "HTM F&F 90% korting" + }, + "description": { + "type": "string", + "example": "Travel with 90% discount for a week during the first HTM F&F OVpay pilot!" + } + } } }, "productOwnerId": { @@ -1889,8 +2653,11 @@ "type": "integer", "description": "The ID of the required customer level to be allowed to purchase the product" }, - "requiredProductIds": { + "requiredProducts": { "type": "array", + "required": [ + "requiredProductId" + ], "description": "The IDs of products that should already be owned by the customer (for travel products, the validity of the given productIds should fully overlap on the customer's travel medium)", "items": { "type": "object", @@ -1907,8 +2674,11 @@ } } }, - "incompatibleProductIds": { + "incompatibleProducts": { "type": "array", + "required": [ + "incompatibleProductId" + ], "description": "The IDs of products that can not be active at the same time as this product (for travel products, none of the listed productIds should have overlapping validity with this product on the customer's travel medium)", "items": { "type": "object", @@ -2013,6 +2783,12 @@ "type": "array", "description": "The sellingPeriods of the product. Can contain multiple periods for the same or different touchpoints, as long as there is no overlap for the same touchpoint", "items": { + "type": "object", + "required": [ + "fromInclusive", + "toInclusive", + "salesTouchpointId" + ], "properties": { "fromInclusive": { "type": "string", @@ -2041,7 +2817,41 @@ "type": "array", "description": "The sellingPrices of this product for the touchpoint defined in this sellingPeriod. Can contain multiple prices, as long as there is no overlap in validity", "items": { - "$ref": "#/components/schemas/SellingPrice" + "type": "object", + "required": [ + "amountExclTax", + "taxMetadataId", + "amountInclTax", + "fromInclusive", + "toInclusive", + "internalPrice" + ], + "properties": { + "amountExclTax": { + "type": "integer", + "example": 750 + }, + "taxMetadataId": { + "type": "string", + "example": "501B17EF-36C4-4039-B92C-6517969B464E" + }, + "amountInclTax": { + "type": "integer", + "example": 908 + }, + "fromInclusive": { + "type": "string", + "example": "2022-03-01T00:00:00.000Z" + }, + "toInclusive": { + "type": "string", + "example": "2022-06-01T00:00:00.000Z" + }, + "internalPrice": { + "type": "number", + "example": 908.1234 + } + } } } } @@ -2051,12 +2861,424 @@ "type": "array", "description": "The purchasePrices of the product. Can contain multiple prices, as long as there is no overlap in validity", "items": { - "$ref": "#/components/schemas/PurchasePrice" + "type": "object", + "required": [ + "amountExclTax", + "taxMetadataId", + "amountInclTax", + "fromInclusive", + "toInclusive" + ], + "properties": { + "amountExclTax": { + "type": "integer", + "example": 750 + }, + "taxMetadataId": { + "type": "string", + "example": "501B17EF-36C4-4039-B92C-6517969B464E" + }, + "amountInclTax": { + "type": "integer", + "example": 908 + }, + "fromInclusive": { + "type": "string", + "example": "2022-03-01T00:00:00.000Z" + }, + "toInclusive": { + "type": "string", + "example": "2022-06-01T00:00:00.000Z" + } + } } } } }, - "CreateProductResponse": { + "UpdateProductRequest": { + "required": [ + "productOwnerId", + "isRenewable", + "isSellableAtHtm", + "needsSolvencyCheckConsumer", + "needsSolvencyCheckBusiness" + ], + "type": "object", + "properties": { + "parentProductId": { + "type": "integer", + "description": "The ID of the parent product (if any)", + "example": 1 + }, + "productCode": { + "type": "string", + "description": "The HTM-internal product code", + "example": "30901-WL" + }, + "gboPackageTemplateId": { + "type": "string", + "description": "The ID of the GBO SalesPackage that should be instantiated after buying this product", + "example": "30901" + }, + "tapConnectProductCode": { + "type": "string", + "description": "The productCode of the TapConnect product that should be issued after buying this product", + "example": "1234AB" + }, + "productGroupMetadataId": { + "type": "string", + "description": "The ID of the productGroupMetadata for administration in U4F", + "example": "501B17EF-36C4-4039-B92C-6517969B464E" + }, + "productName": { + "type": "string", + "description": "The name of the product", + "example": "Test product name" + }, + "productDescription": { + "type": "string", + "description": "The description of the product", + "example": "Test product description" + }, + "validityPeriod": { + "required": [ + "fromInclusive", + "toInclusive" + ], + "type": "object", + "description": "The validity period of the product", + "properties": { + "validityPeriodId": { + "type": "integer", + "description": "Including a validityPeriodId will update the existing validityPeriod for this product - if omitted, a new validityPeriod will be created", + "example": 1 + }, + "fromInclusive": { + "type": "string", + "description": "The start of the validity period", + "example": "2022-03-01T00:00:00.000Z" + }, + "toInclusive": { + "type": "string", + "description": "The end of the validity period", + "example": "2022-06-01T00:00:00.000Z" + } + } + }, + "productTranslations": { + "type": "array", + "description": "Translations of the product name and description", + "items": { + "type": "object", + "required": [ + "language", + "name", + "description" + ], + "properties": { + "language": { + "type": "string", + "example": "en" + }, + "name": { + "type": "string", + "example": "HTM F&F 90% korting" + }, + "description": { + "type": "string", + "example": "Travel with 90% discount for a week during the first HTM F&F OVpay pilot!" + } + } + } + }, + "productOwnerId": { + "type": "integer", + "description": "The ID of the owner of the product", + "example": 1 + }, + "marketSegmentIds": { + "type": "array", + "description": "The IDs of the market segments that the product is targeted towards", + "items": { + "type": "integer", + "example": 1 + } + }, + "customerSegmentIds": { + "type": "array", + "description": "The IDs of the customer segments that the product is targeted towards", + "items": { + "type": "integer", + "example": 1 + } + }, + "productCategoryId": { + "type": "integer", + "description": "The ID of the category the product belongs to", + "example": 1 + }, + "requiredCustomerLevelId": { + "type": "integer", + "description": "The ID of the required customer level to be allowed to purchase the product" + }, + "requiredProducts": { + "type": "array", + "required": [ + "requiredProductId" + ], + "description": "The IDs of products that should already be owned by the customer (for travel products, the validity of the given productIds should fully overlap on the customer's travel medium)", + "items": { + "type": "object", + "properties": { + "requiredProductId": { + "type": "integer", + "example": 1 + }, + "description": { + "type": "string", + "description": "Description of why the product is required", + "example": "Benodigd basisproduct" + } + } + } + }, + "incompatibleProducts": { + "type": "array", + "required": [ + "incompatibleProductId" + ], + "description": "The IDs of products that can not be active at the same time as this product (for travel products, none of the listed productIds should have overlapping validity with this product on the customer's travel medium)", + "items": { + "type": "object", + "properties": { + "incompatibleProductId": { + "type": "integer", + "example": 1 + }, + "description": { + "type": "string", + "description": "Description of why the product is incompatible", + "example": "Kan niet combineren met zichzelf" + } + } + } + }, + "mandatoryCustomerDataItemIds": { + "type": "array", + "description": "The IDs of the customer data items that should be filled in by the customer", + "items": { + "type": "integer", + "example": 1 + } + }, + "requiredGboPersonalAttributeIds": { + "type": "array", + "description": "GBO specific; the IDs of the GBO Personal Attribute Data (PAD) elements that should be present (or filled during the order flow) on the customer's chosen travel medium. This attribute should not be user-editable, but only be filled by PMT, based on the chosen gboPackageTemplateId!", + "items": { + "type": "integer", + "example": 1 + } + }, + "tokenTypeIds": { + "type": "array", + "description": "The IDs of the token types that the product can be instantiated on", + "items": { + "type": "integer", + "example": 1 + } + }, + "paymentMomentId": { + "type": "integer", + "description": "The ID of the payment moment for the product", + "example": 1 + }, + "serviceOptionIds": { + "type": "array", + "description": "The IDs of the service options that are available for this product", + "items": { + "type": "integer", + "example": 1 + } + }, + "validityDuration": { + "type": "string", + "description": "The validity duration of the product. Should only contain one single unit of duration (D, W, M, Y)", + "example": "P7D" + }, + "maxStartInFutureDuration": { + "type": "string", + "description": "The maximum amount of time in the future allowed for the start of the product validity. Should only contain one single unit of duration (D, W, M, Y)", + "example": "P6W" + }, + "isRenewable": { + "type": "boolean", + "description": "Indicates if the product is renewable", + "example": false + }, + "sendInvoice": { + "type": "boolean", + "description": "Indicates if an invoice should be sent to the customer after ordering this product", + "example": false + }, + "imageReference": { + "type": "string", + "description": "A reference/URL to the image of the product", + "example": "https://www.htm.nl/nog-onbekende-productafbeelding" + }, + "productPageUrl": { + "type": "string", + "description": "The URL of the product page, to be used by touchpoints which are not allowed to sell the product, to redirect the customer. If the product is sold via multiple touchpoints, this URL should point to the preferred touchpoint for sales", + "example": "https://www.htm.nl/nog-onbekende-productpagina" + }, + "termsUrl": { + "type": "string", + "description": "The URL for the webpage or document containing terms for this product", + "example": "https://www.htm.nl/nog-onbekende-productvoorwaarden" + }, + "isSellableAtHtm": { + "type": "boolean", + "description": "Indicates if the product is sellable at HTM. If false, no sellingPrices/Periods should be defined - this product may only be used for tracking/reporting purposed, or internal use" + }, + "needsSolvencyCheckConsumer": { + "type": "boolean", + "description": "Indicates if a solvency check is required for consumers purchasing the product" + }, + "needsSolvencyCheckBusiness": { + "type": "boolean", + "description": "Indicates if a solvency check is required for businesses purchasing the product" + }, + "sellingPeriods": { + "type": "array", + "description": "The sellingPeriods of the product. Can contain multiple periods for the same or different touchpoints, as long as there is no overlap for the same touchpoint", + "items": { + "type": "object", + "required": [ + "fromInclusive", + "toInclusive", + "salesTouchpointId" + ], + "properties": { + "sellingPeriodId": { + "type": "integer", + "description": "Including a sellingPeriodId will update an existing sellingPeriod for this product - if omitted, a new sellingPeriod will be created", + "example": 1 + }, + "fromInclusive": { + "type": "string", + "description": "The start date of the period", + "example": "2020-01-01T00:00:00.000Z" + }, + "toInclusive": { + "type": "string", + "description": "The end date of the period", + "example": "2020-01-01T00:00:00.000Z" + }, + "salesTouchpointId": { + "type": "integer", + "description": "The ID of the touchpoint this period applies to", + "example": 1 + }, + "forbiddenPaymentMethodIds": { + "type": "array", + "description": "The IDs of the payment methods that are not allowed to be used for this touchpoint and period", + "items": { + "type": "integer", + "example": 1 + } + }, + "sellingPrices": { + "type": "array", + "description": "The sellingPrices of this product for the touchpoint defined in this sellingPeriod. Can contain multiple prices, as long as there is no overlap in validity", + "items": { + "type": "object", + "required": [ + "amountExclTax", + "taxMetadataId", + "amountInclTax", + "fromInclusive", + "toInclusive", + "internalPrice" + ], + "properties": { + "sellingPeriodId": { + "type": "integer", + "description": "Including a sellingPriceId will update an existing sellingPrice for this product - if omitted, a new sellingPrice will be created", + "example": 1 + }, + "amountExclTax": { + "type": "integer", + "example": 750 + }, + "taxMetadataId": { + "type": "string", + "example": "501B17EF-36C4-4039-B92C-6517969B464E" + }, + "amountInclTax": { + "type": "integer", + "example": 908 + }, + "fromInclusive": { + "type": "string", + "example": "2022-03-01T00:00:00.000Z" + }, + "toInclusive": { + "type": "string", + "example": "2022-06-01T00:00:00.000Z" + }, + "internalPrice": { + "type": "number", + "example": 908.1234 + } + } + } + } + } + } + }, + "purchasePrices": { + "type": "array", + "description": "The purchasePrices of the product. Can contain multiple prices, as long as there is no overlap in validity", + "items": { + "type": "object", + "required": [ + "amountExclTax", + "taxMetadataId", + "amountInclTax", + "fromInclusive", + "toInclusive" + ], + "properties": { + "purchasePriceId": { + "type": "integer", + "description": "Including a purchasePriceId will update an existing purchasePrice for this product - if omitted, a new purchasePrice will be created", + "example": 1 + }, + "amountExclTax": { + "type": "integer", + "example": 750 + }, + "taxMetadataId": { + "type": "string", + "example": "501B17EF-36C4-4039-B92C-6517969B464E" + }, + "amountInclTax": { + "type": "integer", + "example": 908 + }, + "fromInclusive": { + "type": "string", + "example": "2022-03-01T00:00:00.000Z" + }, + "toInclusive": { + "type": "string", + "example": "2022-06-01T00:00:00.000Z" + } + } + } + } + } + }, + "CreateOrUpdateProductResponse": { "type": "object", "properties": { "productId": { @@ -2185,335 +3407,6 @@ } } } - }, - "examples": { - "postMinimalProduct": { - "summary": "Minimum request body (to be used as minimal parent-template for hierarchical products)", - "value": { - "productOwnerId": 1, - "isRenewable": false, - "isSellableAtHtm": false, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false - } - }, - "postGboProduct": { - "summary": "GBO product (non-renewable)", - "value": { - "productCode": "30901-WL", - "gboPackageTemplateId": "30901", - "productName": "HTM pilot 90% korting", - "productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!", - "validityPeriod": { - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2024-12-31T23:59:59.999+02:00" - }, - "productTranslations": [ - { - "language": "en", - "name": "HTM pilot 90% discount", - "description": "Travel with 90% discount during the first F&F pilot!" - } - ], - "productOwnerId": 1, - "marketSegmentIds": [ - 1 - ], - "customerSegmentIds": [ - 2, - 3, - 4, - 5 - ], - "productCategoryId": 1, - "requiredCustomerLevelId": 1, - "incompatibleProducts": [ - { - "productName": "HTM pilot 90% korting", - "description": "Kan niet combineren met zichzelf" - } - ], - "mandatoryCustomerDataItemIds": [ - 4, - 5 - ], - "tokenTypeIds": [ - 1 - ], - "paymentMomentId": 1, - "validityDuration": "P7D", - "maxStartInFutureDuration": "P6W", - "isRenewable": false, - "sendInvoice": false, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2024-12-31T23:59:59.999+02:00", - "salesTouchpointId": 3, - "sellingPrices": [ - { - "amountExclTax": 92, - "taxMetadataId": 2, - "amountInclTax": 100, - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2024-12-31T23:59:59.999+02:00", - "internalPrice": 92.0000 - } - ] - } - ], - "purchasePrices": [ - { - "amountExclTax": 0, - "taxMetadataId": 1, - "amountInclTax": 0, - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2024-12-31T23:59:59.999+02:00" - } - ] - } - }, - "postGboProductMultiplePeriods": { - "summary": "GBO product (non-renewable, multiple sellingPeriods/prices per period)", - "value": { - "productCode": "30901-WL", - "gboPackageTemplateId": "30901", - "productName": "HTM pilot 90% korting", - "productDescription": "Reis met 90% korting gedurende de eerste F&F pilot!", - "validityPeriod": { - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2025-12-31T23:59:59.999+02:00" - }, - "productTranslations": [ - { - "language": "en", - "name": "HTM pilot 90% discount", - "description": "Travel with 90% discount during the first F&F pilot!" - } - ], - "productOwnerId": 1, - "marketSegmentIds": [ - 1 - ], - "customerSegmentIds": [ - 2, - 3, - 4, - 5 - ], - "productCategoryId": 1, - "requiredCustomerLevelId": 1, - "incompatibleProducts": [ - { - "incompatibleProductId": 2, - "description": "Kan niet combineren met zichzelf" - } - ], - "mandatoryCustomerDataItemIds": [ - 4, - 5 - ], - "tokenTypeIds": [ - 1 - ], - "paymentMomentId": 1, - "validityDuration": "P7D", - "maxStartInFutureDuration": "P6W", - "isRenewable": false, - "sendInvoice": false, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2025-12-31T23:59:59.999+02:00", - "salesTouchpointId": 3, - "sellingPrices": [ - { - "amountExclTax": 92, - "taxMetadataId": 2, - "amountInclTax": 100, - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2024-12-31T23:59:59.999+02:00", - "internalPrice": 92.0000 - }, - { - "amountExclTax": 101, - "taxMetadataId": 2, - "amountInclTax": 110, - "fromInclusive": "2025-01-01T00:00:00.000+02:00", - "toInclusive": "2025-12-31T23:59:59.999+02:00", - "internalPrice": 101.0000 - } - ] - }, - { - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2025-12-31T23:59:59.999+02:00", - "salesTouchpointId": 2, - "sellingPrices": [ - { - "amountExclTax": 92, - "taxMetadataId": 2, - "amountInclTax": 100, - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2024-12-31T23:59:59.999+02:00", - "internalPrice": 92.0000 - }, - { - "amountExclTax": 101, - "taxMetadataId": 2, - "amountInclTax": 110, - "fromInclusive": "2025-01-01T00:00:00.000+02:00", - "toInclusive": "2025-12-31T23:59:59.999+02:00", - "internalPrice": 101.0000 - } - ] - } - ], - "purchasePrices": [ - { - "amountExclTax": 0, - "taxMetadataId": 1, - "amountInclTax": 0, - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2025-12-31T23:59:59.999+02:00" - } - ] - } - }, - "postGboPadProduct": { - "summary": "GBO product (PAD required, renewable, serviceOptions, forbiddenPaymentMethods)", - "value": { - "productCode": "35301-MA", - "gboPackageTemplateId": "35301", - "productName": "HTM Regio Vrij DH73", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", - "validityPeriod": { - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2024-12-31T23:59:59.999+02:00" - }, - "productTranslations": [ - { - "language": "en", - "name": "HTM Regio Free DH73", - "description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area in the Rotterdam The Hague region." - } - ], - "productOwnerId": 1, - "marketSegmentIds": [ - 1 - ], - "customerSegmentIds": [ - 2, - 3, - 4, - 5 - ], - "productCategoryId": 3, - "requiredCustomerLevelId": 3, - "requiredProducts": [ - { - "requiredProductId": 1, - "description": "Basisproduct nodig" - } - ], - "incompatibleProducts": [ - { - "incompatibleProductId": 3, - "description": "Kan niet combineren met zichzelf" - } - ], - "mandatoryCustomerDataItemIds": [ - 3, - 4, - 5, - 6 - ], - "requiredGboPersonalAttributeIds": [ - 1, - 2, - 3 - ], - "tokenTypeIds": [ - 1, - 2, - 3 - ], - "paymentMomentId": 1, - "serviceOptionIds": [ - 1, - 2 - ], - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": true, - "sendInvoice": true, - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", - "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", - "termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina", - "isSellableAtHtm": true, - "needsSolvencyCheckConsumer": false, - "needsSolvencyCheckBusiness": false, - "sellingPeriods": [ - { - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2024-12-31T23:59:59.999+02:00", - "salesTouchPointId": 3, - "forbiddenPaymentMethodIds": [ - 1 - ], - "sellingPrices": [ - { - "amountExclTax": 5413, - "taxMetadataId": 2, - "amountInclTax": 5900, - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2024-12-31T23:59:59.999+02:00", - "internalPrice": 5413.0000 - } - ] - } - ], - "purchasePrices": [ - { - "amountExclTax": 0, - "taxMetadataId": 1, - "amountInclTax": 0, - "fromInclusive": "2024-09-01T00:00:00.000+02:00", - "toInclusive": "2024-12-31T23:59:59.999+02:00" - } - ] - } - }, - "postGboProductSupplement": { - "summary": "GBO product (supplement with requirements)", - "value": { - "productName": "TODO" - } - }, - "postTapConnectProduct": { - "summary": "TapConnect product", - "value": { - "productName": "TODO" - } - }, - "postIbanMandate": { - "summary": "IBAN mandate (functional product)", - "value": { - "productName": "TODO" - } - } } } } \ No newline at end of file