From 361813a734f08302e7062223e548469254a8da10 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Fri, 5 Sep 2025 18:21:57 +0200 Subject: [PATCH 1/9] Add productCategory 8 (saldo), with isTravelProduct=true (as it can only exist on an OV-pas) --- src/openapi/products/productreference-crud.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/openapi/products/productreference-crud.yaml b/src/openapi/products/productreference-crud.yaml index c4f4109..b8b7526 100644 --- a/src/openapi/products/productreference-crud.yaml +++ b/src/openapi/products/productreference-crud.yaml @@ -1550,6 +1550,9 @@ components: - productCategoryId: 7 name: Functioneel product isTravelProduct: false + - productCategoryId: 8 + name: Saldo + isTravelProduct: true type: array items: $ref: '#/components/schemas/productCategoryGetEntity' From d5cbf06ec40c071a3d9550d12901ca4af2546118 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Fri, 5 Sep 2025 18:23:03 +0200 Subject: [PATCH 2/9] Add examples for saldo and change IBAN mandate (only in CRUD for now, not yet in SE/TP) --- src/openapi/products/products-crud.yaml | 343 +++++++++++++++++++++++- 1 file changed, 336 insertions(+), 7 deletions(-) diff --git a/src/openapi/products/products-crud.yaml b/src/openapi/products/products-crud.yaml index dd73366..c67400e 100644 --- a/src/openapi/products/products-crud.yaml +++ b/src/openapi/products/products-crud.yaml @@ -1468,7 +1468,7 @@ paths: { "productId": 4, "parentProductId": 3, - "layerInfoId": { + "layerInfo": { "layerInfoId": 1, "choiceKey": "allowedGboAgeProfiles", "choiceLabel": "Wat is uw geboortedatum?", @@ -1669,6 +1669,340 @@ paths: } ] } + getDetailsFunctionalProductChangeIbanMandate: + summary: Functional product (change IBAN mandate) + value: + { + "productId": 143, + "parentProductId": null, + "layerInfo": null, + "fikoArticleNumber": null, + "isValid": true, + "isArchived": false, + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productName": "IBAN wijzigen functioneel product", + "productDescription": "IBAN wijzigen functioneel product", + "validityPeriod": { + "validityPeriodId": 254, + "fromInclusive": "2023-12-31T23:00:00.000+00:00", + "toInclusive": "2100-12-08T04:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "Change IBAN functional product", + "description": "Change IBAN functional product" + } + ], + "productOwner": { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM" + }, + "marketSegments": [ + { + "marketSegmentId": 1, + "name": "B2C" + } + ], + "customerSegments": null, + "allowedGboAgeProfiles": null, + "productCategory": { + "productCategoryId": 7, + "isTravelProduct": false, + "name": "Functioneel product" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": null, + "requiredGboPersonalAttributes": null, + "tokenTypes": null, + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": [ + { + "serviceOptionId": 4, + "action": "cancel_notAllowed", + "description": "Stopzetting is niet toegestaan (doorgaans in combinatie met refund_notAllowed)" + }, + { + "serviceOptionId": 10, + "action": "refund_notAllowed", + "description": "Terugbetaling niet toegestaan (doorgaans in combinatie met cancel_notAllowed)" + } + ], + "validityDuration": null, + "maxStartInFutureDuration": null, + "isRenewable": null, + "sendInvoice": null, + "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/onbekend/", + "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/onbekend/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 204, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" + } + }, + "forbiddenPaymentMethods": [ + { + "forbiddenPaymentMethodId": 1, + "name": "creditcard", + "issuer": "Mastercard" + }, + { + "forbiddenPaymentMethodId": 2, + "name": "creditcard", + "issuer": "Visa" + }, + { + "forbiddenPaymentMethodId": 3, + "name": "creditcard", + "issuer": "American Express" + } + ], + "sellingPrices": [ + { + "sellingPriceId": 187, + "taxCode": "V0", + "taxPercentage": 0.0000, + "amountExclTax": 1, + "amountInclTax": 1, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + "internalPrice": 0.0000 + } + ] + }, + { + "sellingPeriodId": 448, + "fromInclusive": "2023-12-31T23:00:00.000+00:00", + "toInclusive": "2099-12-08T04:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 6, + "name": "SMP (Service Medewerker Portaal)", + "isActive": true, + "retailer": { + "retailerId": 1000, + "name": "HTM interne touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" + } + }, + "forbiddenPaymentMethods": [ + { + "forbiddenPaymentMethodId": 1, + "name": "creditcard", + "issuer": "Mastercard" + }, + { + "forbiddenPaymentMethodId": 2, + "name": "creditcard", + "issuer": "Visa" + }, + { + "forbiddenPaymentMethodId": 3, + "name": "creditcard", + "issuer": "American Express" + } + ], + "sellingPrices": [ + { + "sellingPriceId": 383, + "taxCode": "V00", + "taxPercentage": 0.0000, + "amountExclTax": 1, + "amountInclTax": 1, + "fromInclusive": "2025-01-31T23:00:00.000+00:00", + "toInclusive": "2030-12-08T04:00:00.000+00:00", + "internalPrice": 1.0000 + } + ] + } + ], + "purchasePrices": null, + "auditTrail": [ + { + "auditTrailId": 5124, + "action": "update", + "user": "api", + "timestamp": "2025-09-05T16:06:25.823+00:00" + } + ] + } + getDetailsSaldoProduct: + summary: Saldo product + value: + { + "productId": 123, + "parentProductId": null, + "layerInfo": null, + "fikoArticleNumber": null, + "isValid": true, + "isArchived": false, + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productName": "OV-pas saldo (1 euro)", + "productDescription": "1 euro saldo voor de OV-pas ", + "validityPeriod": { + "validityPeriodId": 123, + "fromInclusive": "2023-12-31T23:00:00.000+00:00", + "toInclusive": "2100-12-08T04:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "OV-pas credit (1 euro)", + "description": "1 euro credit for the OV-pas" + } + ], + "productOwner": { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM" + }, + "marketSegments": [ + { + "marketSegmentId": 1, + "name": "B2C" + } + ], + "customerSegments": null, + "allowedGboAgeProfiles": null, + "productCategory": { + "productCategoryId": 8, + "isTravelProduct": true, + "name": "Saldo" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": null, + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 2, + "name": "OVPas physical" + }, + { + "tokenTypeId": 3, + "name": "OVPas digital" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": [ + { + "serviceOptionId": 4, + "action": "cancel_notAllowed", + "description": "Stopzetting is niet toegestaan (doorgaans in combinatie met refund_notAllowed)" + }, + { + "serviceOptionId": 10, + "action": "refund_notAllowed", + "description": "Terugbetaling niet toegestaan (doorgaans in combinatie met cancel_notAllowed)" + } + ], + "validityDuration": null, + "maxStartInFutureDuration": null, + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/onbekend/", + "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/onbekend/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 123, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailer": { + "retailerId": 1001, + "name": "HTM externe touchpoints", + "street": "Koningin Julianaplein", + "number": 10, + "numberAddition": null, + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "Nederland", + "emailAddress": "info@htm.nl", + "phoneNumber": "070 374 9002", + "taxId": 572309345923, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" + } + }, + "forbiddenPaymentMethods": null, + "sellingPrices": [ + { + "sellingPriceId": 123, + "taxCode": null, + "taxPercentage": null, + "amountExclTax": 100, + "amountInclTax": 100, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00", + "internalPrice": 0.0000 + } + ] + } + ], + "purchasePrices": null, + "auditTrail": [ + { + "auditTrailId": 5124, + "action": "update", + "user": "api", + "timestamp": "2025-09-05T16:06:25.823+00:00" + } + ] + } getDetailsGboProductSupplement: summary: TODO - GBO product (supplement with requirements) value: @@ -1681,12 +2015,7 @@ paths: { "productName": "TODO" } - getDetailsIbanMandate: - summary: TODO - IBAN mandate (functional product) - value: - { - "productName": "TODO" - } + '400': description: '400' content: From a7c1908d00dc3f7c22e57a35da1433d5f3025b51 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Fri, 12 Sep 2025 12:53:42 +0200 Subject: [PATCH 3/9] DateOfBirth and Birthdate are always formatted YYYY-MM-DD. --- src/openapi/orders/orders-crud.yaml | 26 ++++----- src/openapi/orders/service_engine_orders.yaml | 56 +++++++++---------- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/src/openapi/orders/orders-crud.yaml b/src/openapi/orders/orders-crud.yaml index 7b84f83..96866d3 100644 --- a/src/openapi/orders/orders-crud.yaml +++ b/src/openapi/orders/orders-crud.yaml @@ -192,7 +192,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" , "challengeType": { @@ -373,7 +373,7 @@ paths: "personalAccountData": { "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "DSC_0502.JPG", "challengeTypeId": 1, "oneTimePassword": "H5Iiz3JTaQeIV8p", @@ -555,7 +555,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" , "challengeType": { "challengeTypeId": 1, "name": "email" }, @@ -779,7 +779,7 @@ paths: "verificationCode": "A7H6", "personalAccountData": { - "birthdate": "01-01-1970" + "birthdate": "1970-01-01" }, }, ], @@ -1136,7 +1136,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" , "challengeType": { "challengeTypeId": 1, "name": "email" }, @@ -1275,7 +1275,7 @@ paths: "verificationCode": "A7H6", "personalAccountData": { - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", } } responses: @@ -1377,7 +1377,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" , "challengeType": { "challengeTypeId": 1, "name": "email" }, @@ -1457,7 +1457,7 @@ paths: description: Only record birthdate PersonalAccountData value: { - "birthdate": "01-01-1970" + "birthdate": "1970-01-01" } name PersonalAccountData: summary: PersonalAccountData name @@ -1479,7 +1479,7 @@ paths: value: { "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" , "challengeTypeId": 1, "oneTimePassword": "H5Iiz3JTaQeIV8p", @@ -1490,7 +1490,7 @@ paths: value: { "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" , "challengeTypeId": 1, "oneTimePassword": "H5Iiz3JTaQeIV8p", @@ -1558,7 +1558,7 @@ paths: format: date example: 1970-01-01 required: false - description: The date of birth of the customer. + description: "The date of birth of the customer (formatted: YYYY-MM-DD)." - in: query name: photo schema: @@ -1598,7 +1598,7 @@ paths: "orderLineId": "858e31b9-67f0-46ca-bf88-91a382b9c079", "orderId": "858e31b9-67f0-46ca-bf88-91a382b9c079", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" , "challengeType": { "challengeTypeId": 1, "name": "email" }, "oneTimePassword": "H5Iiz3JTaQeIV8p", @@ -2164,7 +2164,7 @@ paths: format: date example: 1970-01-01 required: false - description: The date of birth of the customer. + description: "The date of birth of the customer (formatted: YYYY-MM-DD)." responses: "200": description: OK diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 3546a4c..1a110a2 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -64,7 +64,7 @@ paths: "personalAccountData": { "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", + "dateOfBirth": "1970-01-01", "photoReference": "DSC_0502.JPG", "fileType": "image/jpg", "challengeTypeId": 1, @@ -205,7 +205,7 @@ paths: "personalAccountData": { "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", + "dateOfBirth": "1970-01-01", "photoReference": "DSC_0502.JPG", "fileType": "image/jpg", "challengeTypeId": 1, @@ -355,7 +355,7 @@ paths: "personalAccountData": { "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", + "dateOfBirth": "1970-01-01", "photoReference": "DSC_0502.JPG", "fileType": "image/jpg", "challengeTypeId": 1, @@ -462,7 +462,7 @@ paths: "personalAccountData": { "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", + "dateOfBirth": "1970-01-01", "photoReference": "DSC_0502.JPG", "fileType": "image/jpg", "challengeTypeId": 1, @@ -529,8 +529,8 @@ paths: value: { "customerProfileID": 123415, - "customerProfileData": { "dateOfBirth": "09-03-1989" }, - "personalAccountData": { "birthdate": "09-03-1989" }, + "customerProfileData": { "dateOfBirth": "1989-03-09" }, + "personalAccountData": { "birthdate": "1989-03-09" }, "directDebitMandate": { "consumerName": "J. de Tèster", @@ -624,7 +624,7 @@ paths: "personalAccountData": { "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", + "dateOfBirth": "1970-01-01", "photoReference": "DSC_0502.JPG", "fileType": "image/jpg", "challengeTypeId": 1, @@ -998,7 +998,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeType": { @@ -1084,7 +1084,7 @@ paths: "personalAccountData": { "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeTypeId": 1, "oneTimePassword": "H5Iiz3JTaQeIV8p", @@ -1134,7 +1134,7 @@ paths: "personalAccountData": { "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", + "dateOfBirth": "1970-01-01", "photoReference": "DSC_0502.JPG", "fileType": "image/jpg", "challengeTypeId": 1, @@ -1255,7 +1255,7 @@ paths: "personalAccountData": { "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", + "dateOfBirth": "1970-01-01", "photoReference": "DSC_0502.JPG", "fileType": "image/jpg", "challengeTypeId": 1, @@ -1414,7 +1414,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeType": { @@ -1598,7 +1598,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeType": { @@ -1825,7 +1825,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeType": { @@ -1999,7 +1999,7 @@ paths: "personalAccountData": { "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", + "dateOfBirth": "1970-01-01", "photoReference": "DSC_0502.JPG", "fileType": "image/jpg", "challengeTypeId": 1, @@ -2104,7 +2104,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeType": { @@ -2438,7 +2438,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeType": { @@ -2973,7 +2973,7 @@ paths: value: { "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" , "challengeTypeId": 1, "oneTimePassword": "H5Iiz3JTaQeIV8p", @@ -3066,7 +3066,7 @@ paths: "personalAccountData":{ "personalAccountDataId": "d9021fdd-6e83-45c0-9aef-71680f0b4e74", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" , "challengeTypeId": 1, "oneTimePassword": "H5Iiz3JTaQeIV8p", @@ -3115,7 +3115,7 @@ paths: description: Update personal account data v2.2 value: { - "birthdate": "01-01-2010", + "birthdate": "2010-01-01", } responses: "201": @@ -3205,7 +3205,7 @@ paths: "personalAccountData":{ "personalAccountDataId": "d9021fdd-6e83-45c0-9aef-71680f0b4e74", "name": "Jan de Vries", - "birthdate": "01-01-2010", + "birthdate": "2010-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC" , "challengeTypeId": 1, "oneTimePassword": "H5Iiz3JTaQeIV8p", @@ -3497,7 +3497,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeType": { @@ -3766,7 +3766,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeType": { @@ -3955,7 +3955,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeType": { @@ -4245,7 +4245,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeType": { @@ -4431,7 +4431,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeType": { @@ -4621,7 +4621,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeType": { @@ -4799,7 +4799,7 @@ paths: { "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", "name": "Jan de Vries", - "birthdate": "01-01-1970", + "birthdate": "1970-01-01", "photo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAWJLR0Q+SWQA4wAAAAd0SU1FB+YCBAwmK58TFQgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMDRUMTI6Mzg6NDMrMDA6MDBAjYOrAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTA0VDEyOjM4OjQzKzAwOjAwMdA7FwAAAFd6VFh0UmF3IHByb2ZpbGUgdHlwZSBpcHRjAAB4nOPyDAhxVigoyk/LzEnlUgADIwsuYwsTIxNLkxQDEyBEgDTDZAMjs1Qgy9jUyMTMxBzEB8uASKBKLgDqFxF08kI1lQAAAYdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPjx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+PC9yZGY6RGVzY3JpcHRpb24+PC9yZGY6UkRGPjwveDp4bXBtZXRhPg0KPD94cGFja2V0IGVuZD0ndyc/PiyUmAsAAAANSURBVBhXY3grk/YfAAXYAm/HQierAAAAAElFTkSuQmCC", "challengeType": { From 17d7b7754107ccf8d50e6daa47934ae0708168ed Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 15 Sep 2025 10:55:54 +0200 Subject: [PATCH 4/9] TransactionId, transactionLineId and articleNumber are strings. --- src/openapi/fiko/fiko-crud.yaml | 66 ++++++++++++++++----------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 8b3908f..81c5de9 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -104,8 +104,8 @@ paths: transactionItemId: afce35b2-1dff-4ace-98d0-4b9ac405c87d transactionType: sales sourceName: HTM-website - transactionId: 1001236 - transactionLineId: 1 + transactionId: "1001236" + transactionLineId: "1" name: HTM Maandkorting 20% quantity: 1 taxCode: V21 @@ -114,7 +114,7 @@ paths: amountTax: 21 occurredOn: 2024-10-04T00:00:00Z type: debit - articleNumber: 4031 + articleNumber: "4031" status: created aggregationReference: null accountingSystemReference: null @@ -123,8 +123,8 @@ paths: transactionItemId: 1c1fc1c8-57f4-4336-9b43-a974eae5afbf transactionType: sales sourceName: HTM-website - transactionId: 1002001 - transactionLineId: 1 + transactionId: "1002001" + transactionLineId: "1" name: Reisproduct HTM 3 dag Anoniem quantity: 1 taxCode: V21 @@ -133,7 +133,7 @@ paths: amountTax: 21 occurredOn: 2024-10-04T00:00:00Z type: debit - articleNumber: 4051 + articleNumber: "4051" status: failed aggregationReference: null accountingSystemReference: null @@ -142,8 +142,8 @@ paths: transactionItemId: 3f58441e-dc8f-4956-9bc5-c952312476db transactionType: sales sourceName: HTM-website - transactionId: 1001871 - transactionLineId: 1 + transactionId: "1001871" + transactionLineId: "1" name: Reisproduct HTM 3 dag Anoniem quantity: 1 taxCode: V21 @@ -152,7 +152,7 @@ paths: amountTax: 21 occurredOn: 2024-10-04T00:00:00Z type: debit - articleNumber: 4051 + articleNumber: "4051" status: returned to src aggregationReference: FIKO-171f40609e accountingSystemReference: null @@ -161,8 +161,8 @@ paths: transactionItemId: 4418825f-3f9b-45bc-b662-dc3cd4ce6599 transactionType: sales sourceName: HTM-website - transactionId: 1001131 - transactionLineId: 1 + transactionId: "1001131" + transactionLineId: "1" name: Reisproduct HTM 3 dag Anoniem quantity: 1 taxCode: V21 @@ -171,7 +171,7 @@ paths: amountTax: 21 occurredOn: 2024-10-04T00:00:00Z type: debit - articleNumber: 4051 + articleNumber: "4051" status: returned to trx-db aggregationReference: null accountingSystemReference: null @@ -180,8 +180,8 @@ paths: transactionItemId: 2ddc1831-cf7b-4a77-8aa1-11aaf8e98d9f transactionType: sales sourceName: HTM-website - transactionId: 1001885 - transactionLineId: 1 + transactionId: "1001885" + transactionLineId: "1" name: Reisproduct HTM 3 dag Anoniem quantity: 1 taxCode: V21 @@ -190,7 +190,7 @@ paths: amountTax: 21 occurredOn: 2024-10-04T00:00:00Z type: debit - articleNumber: 4051 + articleNumber: "4051" status: re-entered aggregationReference: null accountingSystemReference: null @@ -199,8 +199,8 @@ paths: transactionItemId: 5ab2513d-f334-4cf8-8895-4e7269374a4b transactionType: sales sourceName: HTM-website - transactionId: 1001679 - transactionLineId: 1 + transactionId: "1001679" + transactionLineId: "1" name: Reisproduct HTM 1 dag Anoniem quantity: 1 taxCode: V21 @@ -209,7 +209,7 @@ paths: amountTax: 21 occurredOn: 2024-10-04T00:00:00Z type: debit - articleNumber: 1737 + articleNumber: "1737" status: succeeded aggregationReference: FIKO-6a4fca8cd6 accountingSystemReference: U4F-123456 @@ -237,8 +237,8 @@ paths: transactionItems: - transactionType: sales sourceName: HTM-website - transactionId: 1001236 - transactionLineId: 1 + transactionId: "1001236" + transactionLineId: "1" name: HTM Maandkorting 20% quantity: 1 taxCode: V21 @@ -247,7 +247,7 @@ paths: amountTax: 21 occurredOn: 2024-10-04T00:00:00Z type: debit - articleNumber: 4031 + articleNumber: "4031" Add multiple transaction items: summary: Add multiple transaction items description: Add multiple transaction items of type sales. @@ -255,8 +255,8 @@ paths: transactionItems: - transactionType: sales sourceName: HTM-website - transactionId: 1001236 - transactionLineId: 1 + transactionId: "1001236" + transactionLineId: "1" name: HTM Maandkorting 20% quantity: 1 taxCode: V21 @@ -265,11 +265,11 @@ paths: amountTax: 21 occurredOn: 2024-10-04T00:00:00Z type: debit - articleNumber: 4031 + articleNumber: "4031" - transactionType: sales sourceName: HTM-website - transactionId: 1001237 - transactionLineId: 1 + transactionId: "1001237" + transactionLineId: "1" name: HTM Maandkorting 20% quantity: 1 taxCode: V21 @@ -278,7 +278,7 @@ paths: amountTax: 21 occurredOn: 2024-10-04T00:00:00Z type: debit - articleNumber: 4031 + articleNumber: "4031" responses: "202": description: Accepted @@ -3022,11 +3022,11 @@ components: example: HTM-website transactionId: type: string - example: 1001236 + example: "1001236" transactionLineId: type: string nullable: true - example: 1 + example: "1" name: type: string example: HTM Maandkorting 20% @@ -3058,7 +3058,7 @@ components: articleNumber: type: string nullable: true - example: 4031 + example: "4031" status: type: string enum: @@ -3109,11 +3109,11 @@ components: example: HTM-website transactionId: type: string - example: 1001236 + example: "1001236" transactionLineId: type: string nullable: true - example: 1 + example: "1" name: type: string example: HTM Maandkorting 20% @@ -3145,7 +3145,7 @@ components: articleNumber: type: string nullable: true - example: 4031 + example: "4031" required: - sourceName - transactionType From 1413cbd01d95111c8498d566f27517b88e1d9e88 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 15 Sep 2025 12:03:11 +0200 Subject: [PATCH 5/9] OVPAY-1110 - Added endpoint to undo pending contract cancellation. --- src/openapi/contracts/contracts-se.yaml | 117 ++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/src/openapi/contracts/contracts-se.yaml b/src/openapi/contracts/contracts-se.yaml index 7e3aba9..5b03035 100644 --- a/src/openapi/contracts/contracts-se.yaml +++ b/src/openapi/contracts/contracts-se.yaml @@ -453,6 +453,123 @@ paths: "refundAmount": 2489, "refundMethod": "creditInvoice", } + /contracts/{contractId}/undocancellation: + parameters: + - in: header + name: X-HTM-JWT-AUTH-HEADER + schema: + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + required: true + description: The JWT of the logged in customer. + - in: path + name: contractId + schema: + type: string + format: uuid + example: 9e224750-3065-471d-af57-85b9cffa7c89 + required: true + description: The id of the contract to process. + post: + summary: Undo a pending cancellation of a contract. + description: Undo a pending cancellation of a contract. + tags: + - SE Contract Cancellation v2 + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + Successfully undid cancellation of contract: + summary: Successfully undid pending cancellation + description: | + Successfully undid a pending cancellation of a contract. The contract + is active again. + value: + { + "contractId": "9e224750-3065-471d-af57-85b9cffa7c89", + "contractNumber": "D123456", + "customerProfileId": 42, + "orderId": "eb3d08f7-7feb-4f31-9f5b-daa634e51f48", + "orderLineId": "52efbbfc-8c28-4016-9ece-dc3ef9a70bd8", + "touchpointId": 2, + "contractStatus": + { "contractStatusId": 2, "name": "active" }, + "productId": 1, + "productName": "HTM Maand 20% korting", + "termDuration": "P0Y1M0D", + "billingDay": 15, + "highestInvoiceTerm": 1, + "ovPayTokenId": 1337, + "contractVersions": + [ + { + "contractVersionId": 1, + "termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/", + "termAmountExclTax": 1200, + "taxCode": "V21", + "taxAmount": 108, + "termAmountInclTax": 1308, + "start": "2024-07-04 15:01:00.000", + "end": "2024-12-31 15:01:00.000", + }, + { + "contractVersionId": 2, + "termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/", + "termAmountExclTax": 1300, + "taxCode": "V21", + "taxAmount": 117, + "termAmountInclTax": 1417, + "start": "2025-01-01 15:01:00.000", + }, + ], + "contractActions": + [ + { + "contractActionId": "67687851-59dd-4bbc-aa74-0f7abd26c883", + "actionType": + { "actionTypeId": 1, "name": "create" }, + "user": "subid123456", + "timestamp": "2024-07-02 15:01:00.000", + "details": "Contract created", + "correlationId": "976e7a4c-bf24-43d2-b444-55817556e7ee", + }, + { + "contractActionId": "ea9ad287-9cd3-4e76-bcb9-d71db551cf55", + "actionType": + { "actionTypeId": 2, "name": "change" }, + "user": "subid123456", + "timestamp": "2024-07-03 15:01:00.000", + "details": "Contract changed", + "correlationId": "e2462347-6749-4841-b42a-cf8de19ec727", + }, + ], + "contractInvoices": + [ + { + "contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f", + "externalReference": "F2024-0001", + "term": 1, + "invoiceDate": "2024-07-02", + "created": "2024-07-02 15:01:00.000", + "updated": "2024-07-02 15:01:00.000", + "state": "invoice_created", + "data": "{json}", + "isCredit": false, + }, + ], + "_links": + { + "get_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPayTokenId=1337", + "method": "GET", + }, + }, + } /contractpayments: parameters: - in: header From 5aabd3e52964f4e5ed558de89bad0b76d3c1a281 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Fri, 26 Sep 2025 18:41:23 +0200 Subject: [PATCH 6/9] Add fikoArticleNumber everywhere; set amountExlTax to null everywhere to prepare for upcoming deprecation --- src/openapi/products/SE-products-SE.yaml | 14 ++-- src/openapi/products/SE-products-TP.yaml | 14 ++-- src/openapi/products/products-crud.yaml | 84 ++++++++++++------------ 3 files changed, 56 insertions(+), 56 deletions(-) diff --git a/src/openapi/products/SE-products-SE.yaml b/src/openapi/products/SE-products-SE.yaml index eb40747..627cb36 100644 --- a/src/openapi/products/SE-products-SE.yaml +++ b/src/openapi/products/SE-products-SE.yaml @@ -401,7 +401,7 @@ paths: [ { "sellingPriceId": 78, - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "fromInclusive": "2024-09-30T23:00:00.000+00:00", "toInclusive": "2028-11-17T23:00:00.000+00:00", @@ -632,7 +632,7 @@ paths: [ { "sellingPriceId": 149, - "amountExclTax": 276, + "amountExclTax": null, "amountInclTax": 300, "fromInclusive": "2025-01-19T23:00:00.000+00:00", "toInclusive": "2028-11-17T23:00:00.000+00:00", @@ -752,7 +752,7 @@ paths: [ { "sellingPriceId": 148, - "amountExclTax": 276, + "amountExclTax": null, "amountInclTax": 300, "fromInclusive": "2025-01-19T23:00:00.000+00:00", "toInclusive": "2028-11-17T23:00:00.000+00:00", @@ -1205,7 +1205,7 @@ paths: [ { "sellingPriceId": 139, - "amountExclTax": 5412, + "amountExclTax": null, "amountInclTax": 5900, "fromInclusive": "2024-12-31T23:00:00.000+00:00", "toInclusive": "2025-12-31T23:00:00.000+00:00", @@ -1355,7 +1355,7 @@ paths: [ { "sellingPriceId": 140, - "amountExclTax": 8899, + "amountExclTax": null, "amountInclTax": 9700, "fromInclusive": "2024-12-31T23:00:00.000+00:00", "toInclusive": "2025-12-31T23:00:00.000+00:00", @@ -1509,7 +1509,7 @@ paths: [ { "sellingPriceId": 141, - "amountExclTax": 8899, + "amountExclTax": null, "amountInclTax": 9700, "fromInclusive": "2024-12-31T23:00:00.000+00:00", "toInclusive": "2025-12-31T23:00:00.000+00:00", @@ -1663,7 +1663,7 @@ paths: [ { "sellingPriceId": 142, - "amountExclTax": 8899, + "amountExclTax": null, "amountInclTax": 9700, "fromInclusive": "2024-12-31T23:00:00.000+00:00", "toInclusive": "2025-12-31T23:00:00.000+00:00", diff --git a/src/openapi/products/SE-products-TP.yaml b/src/openapi/products/SE-products-TP.yaml index 7be3d25..a4b15cb 100644 --- a/src/openapi/products/SE-products-TP.yaml +++ b/src/openapi/products/SE-products-TP.yaml @@ -401,7 +401,7 @@ paths: [ { "sellingPriceId": 78, - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "fromInclusive": "2024-09-30T23:00:00.000+00:00", "toInclusive": "2028-11-17T23:00:00.000+00:00", @@ -632,7 +632,7 @@ paths: [ { "sellingPriceId": 149, - "amountExclTax": 276, + "amountExclTax": null, "amountInclTax": 300, "fromInclusive": "2025-01-19T23:00:00.000+00:00", "toInclusive": "2028-11-17T23:00:00.000+00:00", @@ -752,7 +752,7 @@ paths: [ { "sellingPriceId": 148, - "amountExclTax": 276, + "amountExclTax": null, "amountInclTax": 300, "fromInclusive": "2025-01-19T23:00:00.000+00:00", "toInclusive": "2028-11-17T23:00:00.000+00:00", @@ -1205,7 +1205,7 @@ paths: [ { "sellingPriceId": 139, - "amountExclTax": 5412, + "amountExclTax": null, "amountInclTax": 5900, "fromInclusive": "2024-12-31T23:00:00.000+00:00", "toInclusive": "2025-12-31T23:00:00.000+00:00", @@ -1355,7 +1355,7 @@ paths: [ { "sellingPriceId": 140, - "amountExclTax": 8899, + "amountExclTax": null, "amountInclTax": 9700, "fromInclusive": "2024-12-31T23:00:00.000+00:00", "toInclusive": "2025-12-31T23:00:00.000+00:00", @@ -1509,7 +1509,7 @@ paths: [ { "sellingPriceId": 141, - "amountExclTax": 8899, + "amountExclTax": null, "amountInclTax": 9700, "fromInclusive": "2024-12-31T23:00:00.000+00:00", "toInclusive": "2025-12-31T23:00:00.000+00:00", @@ -1663,7 +1663,7 @@ paths: [ { "sellingPriceId": 142, - "amountExclTax": 8899, + "amountExclTax": null, "amountInclTax": 9700, "fromInclusive": "2024-12-31T23:00:00.000+00:00", "toInclusive": "2025-12-31T23:00:00.000+00:00", diff --git a/src/openapi/products/products-crud.yaml b/src/openapi/products/products-crud.yaml index c67400e..814ab87 100644 --- a/src/openapi/products/products-crud.yaml +++ b/src/openapi/products/products-crud.yaml @@ -435,7 +435,7 @@ paths: "salesTouchpointId": 3, "sellingPrices": [ { - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -448,7 +448,7 @@ paths: ], "purchasePrices": [ { - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -522,7 +522,7 @@ paths: "salesTouchpointId": 3, "sellingPrices": [ { - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -535,7 +535,7 @@ paths: ], "purchasePrices": [ { - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -608,7 +608,7 @@ paths: "salesTouchpointId": 3, "sellingPrices": [ { - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -617,7 +617,7 @@ paths: "internalPrice": 92.0000 }, { - "amountExclTax": 101, + "amountExclTax": null, "amountInclTax": 110, "taxCode": "V09", "taxPercentage": 9.0000, @@ -633,7 +633,7 @@ paths: "salesTouchpointId": 2, "sellingPrices": [ { - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -642,7 +642,7 @@ paths: "internalPrice": 92.0000 }, { - "amountExclTax": 101, + "amountExclTax": null, "amountInclTax": 110, "taxCode": "V09", "taxPercentage": 9.0000, @@ -655,7 +655,7 @@ paths: ], "purchasePrices": [ { - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -750,7 +750,7 @@ paths: ], "sellingPrices": [ { - "amountExclTax": 5413, + "amountExclTax": null, "amountInclTax": 5900, "taxCode": "V09", "taxPercentage": 9.0000, @@ -763,7 +763,7 @@ paths: ], "purchasePrices": [ { - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -973,7 +973,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 1, - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -987,7 +987,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "taxCode": "V09", "taxPercentage": 9.0000, "amountInclTax": 0, @@ -1148,7 +1148,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 1, - "amountExclTax": 92, + "amountExclTax": null, "taxCode": "V09", "taxPercentage": 9.0000, "amountInclTax": 100, @@ -1158,7 +1158,7 @@ paths: }, { "sellingPriceId": 2, - "amountExclTax": 101, + "amountExclTax": null, "taxCode": "V09", "taxPercentage": 9.0000, "amountInclTax": 110, @@ -1195,7 +1195,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 3, - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -1205,7 +1205,7 @@ paths: }, { "sellingPriceId": 4, - "amountExclTax": 101, + "amountExclTax": null, "amountInclTax": 110, "taxCode": "V09", "taxPercentage": 9.0000, @@ -1219,7 +1219,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -1419,7 +1419,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 5, - "amountExclTax": 5413, + "amountExclTax": null, "amountInclTax": 5900, "taxCode": "V09", "taxPercentage": 9.0000, @@ -1433,7 +1433,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "taxCode": "V09", "taxPercentage": 9.0000, "amountInclTax": 0, @@ -1632,7 +1632,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 5, - "amountExclTax": 5413, + "amountExclTax": null, "amountInclTax": 5900, "taxCode": "V09", "taxPercentage": 9.0000, @@ -1646,7 +1646,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "taxCode": "V09", "taxPercentage": 9.0000, "amountInclTax": 0, @@ -1676,7 +1676,7 @@ paths: "productId": 143, "parentProductId": null, "layerInfo": null, - "fikoArticleNumber": null, + "fikoArticleNumber": "1234", "isValid": true, "isArchived": false, "gboPackageTemplateId": null, @@ -1794,7 +1794,7 @@ paths: "sellingPriceId": 187, "taxCode": "V0", "taxPercentage": 0.0000, - "amountExclTax": 1, + "amountExclTax": null, "amountInclTax": 1, "fromInclusive": "2024-09-30T23:00:00.000+00:00", "toInclusive": "2099-12-30T23:00:00.000+00:00", @@ -1847,7 +1847,7 @@ paths: "sellingPriceId": 383, "taxCode": "V00", "taxPercentage": 0.0000, - "amountExclTax": 1, + "amountExclTax": null, "amountInclTax": 1, "fromInclusive": "2025-01-31T23:00:00.000+00:00", "toInclusive": "2030-12-08T04:00:00.000+00:00", @@ -1873,7 +1873,7 @@ paths: "productId": 123, "parentProductId": null, "layerInfo": null, - "fikoArticleNumber": null, + "fikoArticleNumber": "1234", "isValid": true, "isArchived": false, "gboPackageTemplateId": null, @@ -1984,7 +1984,7 @@ paths: "sellingPriceId": 123, "taxCode": null, "taxPercentage": null, - "amountExclTax": 100, + "amountExclTax": null, "amountInclTax": 100, "fromInclusive": "2024-09-30T23:00:00.000+00:00", "toInclusive": "2099-12-30T23:00:00.000+00:00", @@ -2141,7 +2141,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 1, - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2155,7 +2155,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2232,7 +2232,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 1, - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2246,7 +2246,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2319,7 +2319,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 1, - "amountExclTax": 92, + "amountExclTax": null, "taxCode": "V09", "taxPercentage": 9.0000, "amountInclTax": 100, @@ -2335,7 +2335,7 @@ paths: "salesTouchpointId": 2, "sellingPrices": [ { - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2344,7 +2344,7 @@ paths: "internalPrice": 92.0000 }, { - "amountExclTax": 101, + "amountExclTax": null, "amountInclTax": 110, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2358,7 +2358,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2434,7 +2434,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 1, - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2444,7 +2444,7 @@ paths: }, { "sellingPriceId": 2, - "amountExclTax": 101, + "amountExclTax": null, "amountInclTax": 110, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2462,7 +2462,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 3, - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2472,7 +2472,7 @@ paths: }, { "sellingPriceId": 4, - "amountExclTax": 101, + "amountExclTax": null, "amountInclTax": 110, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2486,7 +2486,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2584,7 +2584,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 1, - "amountExclTax": 5413, + "amountExclTax": null, "amountInclTax": 5900, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2598,7 +2598,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, From 67e459d1b0abe1839fa4cc6888027340aed4ce89 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Mon, 29 Sep 2025 08:16:09 +0200 Subject: [PATCH 7/9] Support for layerInfo, fix some null attribute namings --- .../bin/ABTProductsPUTGenerator.jar | Bin 4551594 -> 4551842 bytes .../ovpay/abt/ABTProductsPUTGenerator.java | 25 ++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar b/src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar index eb23d377a3cced193a6daa9a28449688ed9e1d04..d36d6eca869e8b74f9036825b9a48150c0093f8b 100644 GIT binary patch delta 8833 zcmY+~Wl$VTqXuBy7k4MPySo!yg1fsr0XDe1TL=z;;O@3)aCZm}0fL9c?w<4As{7rk zeyZQ8p01keKl5YW@5dQ1#itoC=;}(aa41kvNKjB9Nm0WTbZWSN<_2C;R@!Pvfcmcs z7Lr|@*#B?GKM$n&uu{SO8}eA`{}V=7nc;^2S-NKx`Zt7evqf>UK|{bmz(T-5z(XKF zAVMHPAVZ))phBQQ03gsIFd#4?upqD@a3F9Y@F4IZ2p|X{h#-g|NFYcd$RNleC?F^y zs31N-P(#o_&_d8b&_gglFhVdvFhj6FutNOv-s}(@5S$QP5Zn+v5WEn45d07V5P}dw z5W)~55TX!b5aMmzY!Xc2z?aWe2C82w1Tx{Fpfd5HpdhCXW$)tV?ZxKc>FRQ!=j^({ zhxxW`T7Z?3~K?r!z7IOD^FR1p3e⋘EXjAJqX3mVFW;n>8`|HfRRX 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 AF#rGn delta 8588 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 jsonField, JsonNode newJsonNode) { switch (jsonField.getKey()) { + case "productOwner" -> { + LOGGER.info("Rewriting null productOwner to productOwnerId..."); + ((ObjectNode)newJsonNode).putRawValue("productOwnerId", null); + } + case "productCategory" -> { + LOGGER.info("Rewriting null productCategory to productCategoryId..."); + ((ObjectNode)newJsonNode).putRawValue("productCategoryId", null); + } + case "paymentMoment" -> { + LOGGER.info("Rewriting null paymentMoment to paymentMomentId..."); + ((ObjectNode)newJsonNode).putRawValue("paymentMomentId", null); + } + case "requiredCustomerLevel" -> { + LOGGER.info("Rewriting null requiredCustomerLevel to requiredCustomerLevelId..."); + ((ObjectNode)newJsonNode).putRawValue("requiredCustomerLevelId", null); + } + case "layerInfo" -> { + LOGGER.info("Rewriting null layerInfo to layerInfoId..."); + ((ObjectNode)newJsonNode).putRawValue("layerInfoId", null); + } case "marketSegments" -> { LOGGER.info("Rewriting null marketSegments to marketSegmentIds..."); ((ObjectNode)newJsonNode).putRawValue("marketSegmentIds", null); @@ -148,6 +168,11 @@ public class ABTProductsPUTGenerator { Long requiredCustomerLevelId = jsonField.getValue().get("requiredCustomerLevelId").asLong(); ((ObjectNode)newJsonNode).put("requiredCustomerLevelId", requiredCustomerLevelId); } + case "layerInfo" -> { + LOGGER.info("Rewriting layerInfo to layerInfoId..."); + Long layerInfoId = jsonField.getValue().get("layerInfoId").asLong(); + ((ObjectNode)newJsonNode).put("layerInfoId", layerInfoId); + } } } From d1b83d19b5ba30155b2e3487ff74f2ee932b486d Mon Sep 17 00:00:00 2001 From: Max Martens Date: Tue, 30 Sep 2025 18:04:04 +0200 Subject: [PATCH 8/9] Refactor layerInfo to communicate what differentiates underlying variants, instead of being defined on every variant itself --- src/openapi/products/SE-products-SE.yaml | 106 +++++---- src/openapi/products/SE-products-TP.yaml | 106 +++++---- src/openapi/products/products-crud.yaml | 269 +++-------------------- 3 files changed, 128 insertions(+), 353 deletions(-) diff --git a/src/openapi/products/SE-products-SE.yaml b/src/openapi/products/SE-products-SE.yaml index 627cb36..b97f796 100644 --- a/src/openapi/products/SE-products-SE.yaml +++ b/src/openapi/products/SE-products-SE.yaml @@ -421,12 +421,20 @@ paths: All details (that the calling touchpoint is allowed to see) for the 20% Discount product.\ Even though this product has sellingPeriods for multiple touchpoints (3 and 4), only the currently active sellingPeriod and price for touchpointId 4 are returned. - This product has two `productVariants`: a single month variant and a subscription variant. + This product has two `productVariants`: a single month variant and a subscription variant.\ + The top-level parent contains `LayerInfo` to communicate what differentiates + the underlying product-variants.\ + When no `LayerInfo` is present, the touchpoint can conclude that the product is a final fulfillable product. value: { "productId": 126, "parentProductId": null, - "layerInfo": null, + "layerInfo": { + "layerInfoId": 1, + "choiceKey": "isRenewable", + "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", + "isCustomChoice": false, + }, "fikoArticleNumber": "1234", "gboPackageTemplateId": "30001", "tapConnectProductCode": null, @@ -529,12 +537,7 @@ paths: { "productId": 119, "parentProductId": 126, - "layerInfo": { - "layerInfoId": 1, - "choiceKey": "isRenewable", - "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", - "isCustomChoice": false, - }, + "layerInfo": null, "fikoArticleNumber": "1234", "gboPackageTemplateId": "30001", "tapConnectProductCode": null, @@ -649,12 +652,7 @@ paths: { "productId": 120, "parentProductId": 126, - "layerInfo": { - "layerInfoId": 1, - "choiceKey": "isRenewable", - "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", - "isCustomChoice": false, - }, + "layerInfo": null, "fikoArticleNumber": "1234", "gboPackageTemplateId": "30001", "tapConnectProductCode": null, @@ -774,12 +772,19 @@ paths: All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product and (7 out of 84 of) its productVariants; the full tree would be too huge to be useful as an example. - The full depth of the tree is included in the example for the HL62 Reduced Fare Variant. + The full depth of the tree is included in the example for the HL62 Reduced Fare Variant.\ + Each non-leaf-node product contains `LayerInfo` to communicate what differentiates the underlying product-variants.\ + When no `LayerInfo` is present, the touchpoint can conclude that the product is a final fulfillable product. value: { "productId": 49, "parentProductId": null, - "layerInfo": null, + "layerInfo": { + "layerInfoId": 2, + "choiceKey": "regio", + "choiceLabel": "Kies de gewenste regio", + "isCustomChoice": true, + }, "fikoArticleNumber": "1234", "gboPackageTemplateId": null, "tapConnectProductCode": null, @@ -922,10 +927,10 @@ paths: "productId": 109, "parentProductId": 49, "layerInfo": { - "layerInfoId": 2, - "choiceKey": "regio", - "choiceLabel": "Kies de gewenste regio", - "isCustomChoice": true, + "layerInfoId": 3, + "choiceKey": "allowedGboAgeProfiles", + "choiceLabel": "Wat is uw geboortedatum?", + "isCustomChoice": false, }, "fikoArticleNumber": "1234", "gboPackageTemplateId": "33615", @@ -1072,9 +1077,9 @@ paths: "productId": 114, "parentProductId": 109, "layerInfo": { - "layerInfoId": 3, - "choiceKey": "allowedGboAgeProfiles", - "choiceLabel": "Wat is uw geboortedatum?", + "layerInfoId": 1, + "choiceKey": "isRenewable", + "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", "isCustomChoice": false, }, "fikoArticleNumber": "1234", @@ -1222,9 +1227,9 @@ paths: "productId": 115, "parentProductId": 109, "layerInfo": { - "layerInfoId": 3, - "choiceKey": "allowedGboAgeProfiles", - "choiceLabel": "Wat is uw geboortedatum?", + "layerInfoId": 1, + "choiceKey": "isRenewable", + "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", "isCustomChoice": false, }, "fikoArticleNumber": "1234", @@ -1372,12 +1377,7 @@ paths: { "productId": 116, "parentProductId": 115, - "layerInfo": { - "layerInfoId": 1, - "choiceKey": "isRenewable", - "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", - "isCustomChoice": false, - }, + "layerInfo": null, "fikoArticleNumber": "1234", "gboPackageTemplateId": "33615", "tapConnectProductCode": null, @@ -1526,12 +1526,7 @@ paths: { "productId": 117, "parentProductId": 115, - "layerInfo": { - "layerInfoId": 1, - "choiceKey": "isRenewable", - "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", - "isCustomChoice": false, - }, + "layerInfo": null, "fikoArticleNumber": "1234", "gboPackageTemplateId": "33615", "tapConnectProductCode": null, @@ -1685,10 +1680,10 @@ paths: "productId": 112, "parentProductId": 49, "layerInfo": { - "layerInfoId": 2, - "choiceKey": "regio", - "choiceLabel": "Kies de gewenste regio", - "isCustomChoice": true, + "layerInfoId": 3, + "choiceKey": "allowedGboAgeProfiles", + "choiceLabel": "Wat is uw geboortedatum?", + "isCustomChoice": false, }, "fikoArticleNumber": "1234", "gboPackageTemplateId": "33618", @@ -1858,10 +1853,11 @@ components: description: >- Gives information on the choice that the customer has to make, to enable the touchpoint to proceed further "down the product-tree" by selecting (PATCH-ing) the correct product-variant. - LayerInfo is not a mandatory product-attribute, but it should always be present on all product for which - `parentProductId != null`. (LayerInfo makes no sense for top-level parents as there is always a single starting point). \ + LayerInfo is not a mandatory product-attribute, but it should always be present on all products for which + there are underlying products, i.e. for which `GET /products?parentProductId=...` returns a non-empty list. + When no LayerInfo is present, the touchpoint can conclude that the product is a final fulfillable product. \ - **PMT should ensure that all products in the same "product-branch" (same `parentProductId`) have the same `layerInfoId` + **PMT should ensure that all non-leaf-node products (i.e. products that have underlying products) have a `layerInfoId` referenced. If a product is found to be in violation of this rule, its attribtue `isValid` should be set to `false`.** required: - layerInfoId @@ -1877,12 +1873,12 @@ components: type: string description: >- Contains the JSON Key of the product-attribute that the customer has to make some - choice on (determined by PMT), so that te correct product-variant can be selected by the touchpoint. For some - decisions (like region), there is no product attribute, and thus `isCustomChoice` will be set - to `true`, and `choiceKey` can then be set to any string on which touchpoints can also trigger - behaviour if desired (think "region picker tool"). Therefore, reuse of choiceKeys should be + choice on (determined by PMT), so that te correct product-variant (one of the direct child-products) can be + selected by the touchpoint. For some decisions (like region), there is no product attribute, and thus + `isCustomChoice` will be set to `true`, and `choiceKey` can then be set to any string on which touchpoints + can also trigger behaviour if desired (think "region picker tool"). Therefore, reuse of `choiceKeys` should be the goal, so touchoints can keep their triggers simple and prevent duplication of - similar choiceKeys to trigger the same behaviour. + similar `choiceKeys` to trigger the same behaviour. choiceLabel: example: Kies voor een doorlopend abonnement of een enkele termijn type: string @@ -1894,12 +1890,10 @@ components: example: false type: boolean description: >- - Indicates if the choice is a custom choice. If `false`, the PMT should fill `choiceKey` with the - "differing attribute for this product-layer" and the user should not be able to override this. When - no single attribute can be pinpointed by PMT, the product will become invalid (`isValid == false`) until either - a situation with a single differing attribute is created, or if `isCustomChoice` is set to `true` - this would, - however, also mean that touchpoints should be notified of this, especially if the configured LayerInfo contains - a new, not previously used, `choiceKey`. + Indicates if the choice is a custom choice. If `false`, the PMT should validate that the `choiceKey` is a + differentiating attribute for the underlying product-variants. When the attribute denoted by the `choiceKey` is + the same for all underlying variants, PMT validation will fail and the product will become invalid (`isValid == false`) + until either the underlying products are updated, or a `LayerInfo` with `isCustomChoice == true` is configured. GboAgeProfileResponse: type: object required: diff --git a/src/openapi/products/SE-products-TP.yaml b/src/openapi/products/SE-products-TP.yaml index a4b15cb..da86e36 100644 --- a/src/openapi/products/SE-products-TP.yaml +++ b/src/openapi/products/SE-products-TP.yaml @@ -421,12 +421,20 @@ paths: All details (that the calling touchpoint is allowed to see) for the 20% Discount product.\ Even though this product has sellingPeriods for multiple touchpoints (3 and 4), only the currently active sellingPeriod and price for touchpointId 4 are returned. - This product has two `productVariants`: a single month variant and a subscription variant. + This product has two `productVariants`: a single month variant and a subscription variant.\ + The top-level parent contains `LayerInfo` to communicate what differentiates + the underlying product-variants.\ + When no `LayerInfo` is present, the touchpoint can conclude that the product is a final fulfillable product. value: { "productId": 126, "parentProductId": null, - "layerInfo": null, + "layerInfo": { + "layerInfoId": 1, + "choiceKey": "isRenewable", + "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", + "isCustomChoice": false, + }, "fikoArticleNumber": "1234", "gboPackageTemplateId": "30001", "tapConnectProductCode": null, @@ -529,12 +537,7 @@ paths: { "productId": 119, "parentProductId": 126, - "layerInfo": { - "layerInfoId": 1, - "choiceKey": "isRenewable", - "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", - "isCustomChoice": false, - }, + "layerInfo": null, "fikoArticleNumber": "1234", "gboPackageTemplateId": "30001", "tapConnectProductCode": null, @@ -649,12 +652,7 @@ paths: { "productId": 120, "parentProductId": 126, - "layerInfo": { - "layerInfoId": 1, - "choiceKey": "isRenewable", - "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", - "isCustomChoice": false, - }, + "layerInfo": null, "fikoArticleNumber": "1234", "gboPackageTemplateId": "30001", "tapConnectProductCode": null, @@ -774,12 +772,19 @@ paths: All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product and (7 out of 84 of) its productVariants; the full tree would be too huge to be useful as an example. - The full depth of the tree is included in the example for the HL62 Reduced Fare Variant. + The full depth of the tree is included in the example for the HL62 Reduced Fare Variant.\ + Each non-leaf-node product contains `LayerInfo` to communicate what differentiates the underlying product-variants.\ + When no `LayerInfo` is present, the touchpoint can conclude that the product is a final fulfillable product. value: { "productId": 49, "parentProductId": null, - "layerInfo": null, + "layerInfo": { + "layerInfoId": 2, + "choiceKey": "regio", + "choiceLabel": "Kies de gewenste regio", + "isCustomChoice": true, + }, "fikoArticleNumber": "1234", "gboPackageTemplateId": null, "tapConnectProductCode": null, @@ -922,10 +927,10 @@ paths: "productId": 109, "parentProductId": 49, "layerInfo": { - "layerInfoId": 2, - "choiceKey": "regio", - "choiceLabel": "Kies de gewenste regio", - "isCustomChoice": true, + "layerInfoId": 3, + "choiceKey": "allowedGboAgeProfiles", + "choiceLabel": "Wat is uw geboortedatum?", + "isCustomChoice": false, }, "fikoArticleNumber": "1234", "gboPackageTemplateId": "33615", @@ -1072,9 +1077,9 @@ paths: "productId": 114, "parentProductId": 109, "layerInfo": { - "layerInfoId": 3, - "choiceKey": "allowedGboAgeProfiles", - "choiceLabel": "Wat is uw geboortedatum?", + "layerInfoId": 1, + "choiceKey": "isRenewable", + "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", "isCustomChoice": false, }, "fikoArticleNumber": "1234", @@ -1222,9 +1227,9 @@ paths: "productId": 115, "parentProductId": 109, "layerInfo": { - "layerInfoId": 3, - "choiceKey": "allowedGboAgeProfiles", - "choiceLabel": "Wat is uw geboortedatum?", + "layerInfoId": 1, + "choiceKey": "isRenewable", + "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", "isCustomChoice": false, }, "fikoArticleNumber": "1234", @@ -1372,12 +1377,7 @@ paths: { "productId": 116, "parentProductId": 115, - "layerInfo": { - "layerInfoId": 1, - "choiceKey": "isRenewable", - "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", - "isCustomChoice": false, - }, + "layerInfo": null, "fikoArticleNumber": "1234", "gboPackageTemplateId": "33615", "tapConnectProductCode": null, @@ -1526,12 +1526,7 @@ paths: { "productId": 117, "parentProductId": 115, - "layerInfo": { - "layerInfoId": 1, - "choiceKey": "isRenewable", - "choiceLabel": "Kies voor een doorlopend abonnement of een enkele termijn", - "isCustomChoice": false, - }, + "layerInfo": null, "fikoArticleNumber": "1234", "gboPackageTemplateId": "33615", "tapConnectProductCode": null, @@ -1685,10 +1680,10 @@ paths: "productId": 112, "parentProductId": 49, "layerInfo": { - "layerInfoId": 2, - "choiceKey": "regio", - "choiceLabel": "Kies de gewenste regio", - "isCustomChoice": true, + "layerInfoId": 3, + "choiceKey": "allowedGboAgeProfiles", + "choiceLabel": "Wat is uw geboortedatum?", + "isCustomChoice": false, }, "fikoArticleNumber": "1234", "gboPackageTemplateId": "33618", @@ -1858,10 +1853,11 @@ components: description: >- Gives information on the choice that the customer has to make, to enable the touchpoint to proceed further "down the product-tree" by selecting (PATCH-ing) the correct product-variant. - LayerInfo is not a mandatory product-attribute, but it should always be present on all product for which - `parentProductId != null`. (LayerInfo makes no sense for top-level parents as there is always a single starting point). \ + LayerInfo is not a mandatory product-attribute, but it should always be present on all products for which + there are underlying products, i.e. for which `GET /products?parentProductId=...` returns a non-empty list. + When no LayerInfo is present, the touchpoint can conclude that the product is a final fulfillable product. \ - **PMT should ensure that all products in the same "product-branch" (same `parentProductId`) have the same `layerInfoId` + **PMT should ensure that all non-leaf-node products (i.e. products that have underlying products) have a `layerInfoId` referenced. If a product is found to be in violation of this rule, its attribtue `isValid` should be set to `false`.** required: - layerInfoId @@ -1877,12 +1873,12 @@ components: type: string description: >- Contains the JSON Key of the product-attribute that the customer has to make some - choice on (determined by PMT), so that te correct product-variant can be selected by the touchpoint. For some - decisions (like region), there is no product attribute, and thus `isCustomChoice` will be set - to `true`, and `choiceKey` can then be set to any string on which touchpoints can also trigger - behaviour if desired (think "region picker tool"). Therefore, reuse of choiceKeys should be + choice on (determined by PMT), so that te correct product-variant (one of the direct child-products) can be + selected by the touchpoint. For some decisions (like region), there is no product attribute, and thus + `isCustomChoice` will be set to `true`, and `choiceKey` can then be set to any string on which touchpoints + can also trigger behaviour if desired (think "region picker tool"). Therefore, reuse of `choiceKeys` should be the goal, so touchoints can keep their triggers simple and prevent duplication of - similar choiceKeys to trigger the same behaviour. + similar `choiceKeys` to trigger the same behaviour. choiceLabel: example: Kies voor een doorlopend abonnement of een enkele termijn type: string @@ -1894,12 +1890,10 @@ components: example: false type: boolean description: >- - Indicates if the choice is a custom choice. If `false`, the PMT should fill `choiceKey` with the - "differing attribute for this product-layer" and the user should not be able to override this. When - no single attribute can be pinpointed by PMT, the product will become invalid (`isValid == false`) until either - a situation with a single differing attribute is created, or if `isCustomChoice` is set to `true` - this would, - however, also mean that touchpoints should be notified of this, especially if the configured LayerInfo contains - a new, not previously used, `choiceKey`. + Indicates if the choice is a custom choice. If `false`, the PMT should validate that the `choiceKey` is a + differentiating attribute for the underlying product-variants. When the attribute denoted by the `choiceKey` is + the same for all underlying variants, PMT validation will fail and the product will become invalid (`isValid == false`) + until either the underlying products are updated, or a `LayerInfo` with `isCustomChoice == true` is configured. GboAgeProfileResponse: type: object required: diff --git a/src/openapi/products/products-crud.yaml b/src/openapi/products/products-crud.yaml index 814ab87..deb549a 100644 --- a/src/openapi/products/products-crud.yaml +++ b/src/openapi/products/products-crud.yaml @@ -1243,12 +1243,22 @@ paths: ] } getDetailsGboPadProduct: - summary: GBO product (PAD required, renewable, allowedGboAgeProfiles, padBirthDate) + summary: GBO product (PAD required, layerInfo, allowedGboAgeProfiles, padBirthDate) + description: >- + This product has `layerInfo` defined, which means that this product is not a final fulfillable product, but that there are underlying variants + that the customer has to choose between. The `layerInfo` defines what distinguishes the underlying variants - in this case the + `allowedGboAgeProfiles` array contains different values for the underlying variants. Based on age information provided by the customer, + the correct underlying variant can be selected. value: { "productId": 3, "parentProductId": null, - "layerInfo": null, + "layerInfo": { + "layerInfoId": 1, + "choiceKey": "allowedGboAgeProfiles", + "choiceLabel": "Wat is uw geboortedatum?", + "isCustomChoice": false + }, "fikoArticleNumber": "1234", "isValid": true, "isArchived": false, @@ -1279,16 +1289,7 @@ paths: "name": "B2C" } ], - "customerSegments": [ - { - "customerSegmentId": 5, - "name": "Student" - }, - { - "customerSegmentId": 6, - "name": "Ooievaarspas-gerechtigde" - } - ], + "customerSegments": null, "allowedGboAgeProfiles": [ { "gboAgeProfileId": 2, @@ -1377,221 +1378,8 @@ paths: "serviceOptions": [], "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": 5, - "fromInclusive": "2024-09-01T00:00:00.000+00:00", - "toInclusive": "2024-12-31T23:59:59.999+00:00", - "salesTouchpoint": { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailer": { - "retailerId": 1001, - "name": "HTM externe touchpoints", - "street": "Koningin Julianaplein", - "number": "10", - "numberAddition": null, - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "Nederland", - "emailAddress": "info@htm.nl", - "phoneNumber": "070 374 9002", - "taxId": "572309345923", - "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg" - } - }, - "forbiddenPaymentMethods": [ - { - "forbiddenPaymentMethodId": 3, - "name": "creditcard", - "issuer": "American Express" - } - ], - "sellingPrices": [ - { - "sellingPriceId": 5, - "amountExclTax": null, - "amountInclTax": 5900, - "taxCode": "V09", - "taxPercentage": 9.0000, - "fromInclusive": "2024-09-01T00:00:00.000+00:00", - "toInclusive": "2024-12-31T23:59:59.999+00:00", - "internalPrice": 5413.0000 - } - ] - } - ], - "purchasePrices": [ - { - "purchasePriceId": 1, - "amountExclTax": null, - "taxCode": "V09", - "taxPercentage": 9.0000, - "amountInclTax": 0, - "fromInclusive": "2024-09-01T00:00:00.000+00:00", - "toInclusive": "2024-12-31T23:59:59.999+00:00" - } - ], - "auditTrail": [ - { - "auditTrailId": 2, - "action": "update", - "user": "api", - "timestamp": "2024-09-03T08:39:38.000+00:00" - }, - { - "auditTrailId": 1, - "action": "insert", - "user": "api", - "timestamp": "2024-09-03T08:38:24.000+00:00" - } - ] - } - getDetailsProductVariantWithParent: - summary: GBO product-variant, meaning that parentProductId and layerInfo are present - description: >- - This product is not a top-level parent, but a product-variant that refers to another product (via `parentProductId`). - This means that the `layerInfo` should be present for this product-variant. The parent product references is `productId 3`, - so the product in this example is an extension of that product-definition. MOre specifically: in this product-variant, we - removed some `allowedGboAgeProfiles` from the definition - this means that the customer has to provide the birthdate of - the token-owner (padBirthdate) in order to be able to buy this product-variant. - value: - { - "productId": 4, - "parentProductId": 3, - "layerInfo": { - "layerInfoId": 1, - "choiceKey": "allowedGboAgeProfiles", - "choiceLabel": "Wat is uw geboortedatum?", - "isCustomChoice": false - }, - "fikoArticleNumber": "1234", - "isValid": true, - "isArchived": false, - "gboPackageTemplateId": "33610", - "tapConnectProductCode": null, - "productName": "HTM Regio Vrij DH73 Reductietarief", - "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+00:00", - "toInclusive": "2024-12-31T23:59:59.999+00: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." - } - ], - "productOwner": { - "productOwnerId": 1, - "name": "Corneel Verstoep", - "organization": "HTM" - }, - "marketSegments": [ - { - "marketSegmentId": 1, - "name": "B2C" - } - ], - "customerSegments": [ - { - "customerSegmentId": 5, - "name": "Student" - }, - { - "customerSegmentId": 6, - "name": "Ooievaarspas-gerechtigde" - } - ], - "allowedGboAgeProfiles": [ - { - "gboAgeProfileId": 2, - "name": "Kind (4 t/m 11 jaar)", - "ageFromInclusive": 4, - "ageUntilInclusive": 11 - }, - { - "gboAgeProfileId": 3, - "name": "Jongere (12 t/m 18 jaar)", - "ageFromInclusive": 12, - "ageUntilInclusive": 18 - } - ], - "productCategory": { - "productCategoryId": 2, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" - }, - "requiredCustomerLevel": { - "requiredCustomerLevelId": 3, - "name": "profile" - }, - "requiredProducts": null, - "incompatibleProducts": [ - { - "incompatibleProductId": 4, - "productName": "HTM Regio Vrij DH73 Reductietarief", - "description": "Kan niet combineren met zichzelf" - } - ], - "mandatoryCustomerDataItems": [ - { - "mandatoryCustomerDataItemId": 4, - "customerDataItem": "emailAddress" - }, - { - "mandatoryCustomerDataItemId": 8, - "customerDataItem": "padBirthDate" - }, - ], - "requiredGboPersonalAttributes": [ - { - "requiredGboPersonalAttributeId": 1, - "name": "NAME" - }, - { - "requiredGboPersonalAttributeId": 2, - "name": "BIRTHDATE" - }, - { - "requiredGboPersonalAttributeId": 3, - "name": "PHOTO" - } - ], - "tokenTypes": [ - { - "tokenTypeId": 1, - "name": "EMV" - }, - { - "tokenTypeId": 2, - "name": "OVpas physical" - }, - { - "tokenTypeId": 3, - "name": "OVpas digital" - } - ], - "paymentMoment": { - "paymentMomentId": 1, - "name": "prepaid" - }, - "serviceOptions": null, - "validityDuration": "P1M", - "maxStartInFutureDuration": "P6W", - "isRenewable": true, - "sendInvoice": true, + "isRenewable": null, + "sendInvoice": null, "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", @@ -2663,10 +2451,11 @@ components: description: >- Gives information on the choice that the customer has to make, to enable the touchpoint to proceed further "down the product-tree" by selecting (PATCH-ing) the correct product-variant. - LayerInfo is not a mandatory product-attribute, but it should always be present on all product for which - `parentProductId != null`. (LayerInfo makes no sense for top-level parents as there is always a single starting point). \ + LayerInfo is not a mandatory product-attribute, but it should always be present on all products for which + there are underlying products, i.e. for which `GET /products?parentProductId=...` returns a non-empty list. + When no LayerInfo is present, the touchpoint can conclude that the product is a final fulfillable product. \ - **PMT should ensure that all products in the same "product-branch" (same `parentProductId`) have the same `layerInfoId` + **PMT should ensure that all non-leaf-node products (i.e. products that have underlying products) have a `layerInfoId` referenced. If a product is found to be in violation of this rule, its attribtue `isValid` should be set to `false`.** required: - layerInfoId @@ -2682,12 +2471,12 @@ components: type: string description: >- Contains the JSON Key of the product-attribute that the customer has to make some - choice on (determined by PMT), so that te correct product-variant can be selected by the touchpoint. For some - decisions (like region), there is no product attribute, and thus `isCustomChoice` will be set - to `true`, and `choiceKey` can then be set to any string on which touchpoints can also trigger - behaviour if desired (think "region picker tool"). Therefore, reuse of choiceKeys should be + choice on (determined by PMT), so that te correct product-variant (one of the direct child-products) can be + selected by the touchpoint. For some decisions (like region), there is no product attribute, and thus + `isCustomChoice` will be set to `true`, and `choiceKey` can then be set to any string on which touchpoints + can also trigger behaviour if desired (think "region picker tool"). Therefore, reuse of `choiceKeys` should be the goal, so touchoints can keep their triggers simple and prevent duplication of - similar choiceKeys to trigger the same behaviour. + similar `choiceKeys` to trigger the same behaviour. choiceLabel: example: Kies voor een doorlopend abonnement of een enkele termijn type: string @@ -2699,12 +2488,10 @@ components: example: false type: boolean description: >- - Indicates if the choice is a custom choice. If `false`, the PMT should fill `choiceKey` with the - "differing attribute for this product-layer" and the user should not be able to override this. When - no single attribute can be pinpointed by PMT, the product will become invalid (`isValid == false`) until either - a situation with a single differing attribute is created, or if `isCustomChoice` is set to `true` - this would, - however, also mean that touchpoints should be notified of this, especially if the configured LayerInfo contains - a new, not previously used, `choiceKey`. + Indicates if the choice is a custom choice. If `false`, the PMT should validate that the `choiceKey` is a + differentiating attribute for the underlying product-variants. When the attribute denoted by the `choiceKey` is + the same for all underlying variants, PMT validation will fail and the product will become invalid (`isValid == false`) + until either the underlying products are updated, or a `LayerInfo` with `isCustomChoice == true` is configured. GboAgeProfileResponse: type: object required: From fea8e01e479bb38c55718e50fd67026b4fb3218c Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 1 Oct 2025 11:34:52 +0200 Subject: [PATCH 9/9] Bugfix. --- src/openapi/contracts/contracts-crud.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/openapi/contracts/contracts-crud.yaml b/src/openapi/contracts/contracts-crud.yaml index 3b123f2..63bd2ef 100644 --- a/src/openapi/contracts/contracts-crud.yaml +++ b/src/openapi/contracts/contracts-crud.yaml @@ -695,8 +695,7 @@ paths: [ { "invoiceAccountingStatusId": 1, - "createdOn", - "2024-07-02 15:01:00.000", + "createdOn": "2024-07-02 15:01:00.000", "description": null, }, ], @@ -1242,7 +1241,7 @@ components: data: type: string format: json - example: { json } + example: "{json}" isCredit: type: boolean example: false