diff --git a/src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar b/src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar index eb23d37..d36d6ec 100644 Binary files a/src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar and b/src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar differ diff --git a/src/java/ABTProductsPUTGenerator/src/main/java/nl/htm/ovpay/abt/ABTProductsPUTGenerator.java b/src/java/ABTProductsPUTGenerator/src/main/java/nl/htm/ovpay/abt/ABTProductsPUTGenerator.java index 69426ac..b2910d3 100644 --- a/src/java/ABTProductsPUTGenerator/src/main/java/nl/htm/ovpay/abt/ABTProductsPUTGenerator.java +++ b/src/java/ABTProductsPUTGenerator/src/main/java/nl/htm/ovpay/abt/ABTProductsPUTGenerator.java @@ -91,6 +91,26 @@ public class ABTProductsPUTGenerator { private static void checkRewriteNullFields(Map.Entry 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); + } } } 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 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 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 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": { diff --git a/src/openapi/products/SE-products-SE.yaml b/src/openapi/products/SE-products-SE.yaml index eb40747..b97f796 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", @@ -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, @@ -632,7 +635,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", @@ -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, @@ -752,7 +750,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", @@ -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", @@ -1205,7 +1210,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", @@ -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", @@ -1355,7 +1360,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", @@ -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, @@ -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", @@ -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, @@ -1663,7 +1658,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", @@ -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 7be3d25..da86e36 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", @@ -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, @@ -632,7 +635,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", @@ -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, @@ -752,7 +750,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", @@ -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", @@ -1205,7 +1210,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", @@ -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", @@ -1355,7 +1360,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", @@ -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, @@ -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", @@ -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, @@ -1663,7 +1658,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", @@ -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/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' diff --git a/src/openapi/products/products-crud.yaml b/src/openapi/products/products-crud.yaml index dd73366..deb549a 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, @@ -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,8 +1378,8 @@ paths: "serviceOptions": [], "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", @@ -1419,7 +1420,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 5, - "amountExclTax": 5413, + "amountExclTax": null, "amountInclTax": 5900, "taxCode": "V09", "taxPercentage": 9.0000, @@ -1433,7 +1434,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "taxCode": "V09", "taxPercentage": 9.0000, "amountInclTax": 0, @@ -1456,45 +1457,34 @@ paths: } ] } - 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. + getDetailsFunctionalProductChangeIbanMandate: + summary: Functional product (change IBAN mandate) value: { - "productId": 4, - "parentProductId": 3, - "layerInfoId": { - "layerInfoId": 1, - "choiceKey": "allowedGboAgeProfiles", - "choiceLabel": "Wat is uw geboortedatum?", - "isCustomChoice": false - }, + "productId": 143, + "parentProductId": null, + "layerInfo": null, "fikoArticleNumber": "1234", "isValid": true, "isArchived": false, - "gboPackageTemplateId": "33610", + "gboPackageTemplateId": null, "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.", + "productName": "IBAN wijzigen functioneel product", + "productDescription": "IBAN wijzigen functioneel product", "validityPeriod": { - "validityPeriodId": 3, - "fromInclusive": "2024-09-01T00:00:00.000+00:00", - "toInclusive": "2024-12-31T23:59:59.999+00:00" + "validityPeriodId": 254, + "fromInclusive": "2023-12-31T23:00:00.000+00:00", + "toInclusive": "2100-12-08T04:00:00.000+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." + "name": "Change IBAN functional product", + "description": "Change IBAN functional product" } ], "productOwner": { - "productOwnerId": 1, + "productOwnerId": 17, "name": "Corneel Verstoep", "organization": "HTM" }, @@ -1504,105 +1494,53 @@ paths: "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 - } - ], + "customerSegments": null, + "allowedGboAgeProfiles": null, "productCategory": { - "productCategoryId": 2, - "isTravelProduct": true, - "name": "Afgekocht reisrecht" + "productCategoryId": 7, + "isTravelProduct": false, + "name": "Functioneel product" }, "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" - } - ], + "incompatibleProducts": null, + "mandatoryCustomerDataItems": null, + "requiredGboPersonalAttributes": null, + "tokenTypes": null, "paymentMoment": { "paymentMomentId": 1, "name": "prepaid" }, - "serviceOptions": null, - "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", + "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": 5, - "fromInclusive": "2024-09-01T00:00:00.000+00:00", - "toInclusive": "2024-12-31T23:59:59.999+00:00", + "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)", @@ -1611,18 +1549,28 @@ paths: "retailerId": 1001, "name": "HTM externe touchpoints", "street": "Koningin Julianaplein", - "number": "10", + "number": 10, "numberAddition": null, "postalCode": "2595 AA", "city": "Den Haag", "country": "Nederland", "emailAddress": "info@htm.nl", "phoneNumber": "070 374 9002", - "taxId": "572309345923", + "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", @@ -1631,41 +1579,215 @@ paths: ], "sellingPrices": [ { - "sellingPriceId": 5, - "amountExclTax": 5413, - "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 + "sellingPriceId": 187, + "taxCode": "V0", + "taxPercentage": 0.0000, + "amountExclTax": null, + "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": null, + "amountInclTax": 1, + "fromInclusive": "2025-01-31T23:00:00.000+00:00", + "toInclusive": "2030-12-08T04:00:00.000+00:00", + "internalPrice": 1.0000 } ] } ], - "purchasePrices": [ - { - "purchasePriceId": 1, - "amountExclTax": 0, - "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" - } - ], + "purchasePrices": null, "auditTrail": [ { - "auditTrailId": 2, + "auditTrailId": 5124, "action": "update", "user": "api", - "timestamp": "2024-09-03T08:39:38.000+00:00" + "timestamp": "2025-09-05T16:06:25.823+00:00" + } + ] + } + getDetailsSaldoProduct: + summary: Saldo product + value: + { + "productId": 123, + "parentProductId": null, + "layerInfo": null, + "fikoArticleNumber": "1234", + "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" }, { - "auditTrailId": 1, - "action": "insert", + "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": null, + "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": "2024-09-03T08:38:24.000+00:00" + "timestamp": "2025-09-05T16:06:25.823+00:00" } ] } @@ -1681,12 +1803,7 @@ paths: { "productName": "TODO" } - getDetailsIbanMandate: - summary: TODO - IBAN mandate (functional product) - value: - { - "productName": "TODO" - } + '400': description: '400' content: @@ -1812,7 +1929,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 1, - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -1826,7 +1943,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -1903,7 +2020,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 1, - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -1917,7 +2034,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -1990,7 +2107,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 1, - "amountExclTax": 92, + "amountExclTax": null, "taxCode": "V09", "taxPercentage": 9.0000, "amountInclTax": 100, @@ -2006,7 +2123,7 @@ paths: "salesTouchpointId": 2, "sellingPrices": [ { - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2015,7 +2132,7 @@ paths: "internalPrice": 92.0000 }, { - "amountExclTax": 101, + "amountExclTax": null, "amountInclTax": 110, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2029,7 +2146,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2105,7 +2222,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 1, - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2115,7 +2232,7 @@ paths: }, { "sellingPriceId": 2, - "amountExclTax": 101, + "amountExclTax": null, "amountInclTax": 110, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2133,7 +2250,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 3, - "amountExclTax": 92, + "amountExclTax": null, "amountInclTax": 100, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2143,7 +2260,7 @@ paths: }, { "sellingPriceId": 4, - "amountExclTax": 101, + "amountExclTax": null, "amountInclTax": 110, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2157,7 +2274,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2255,7 +2372,7 @@ paths: "sellingPrices": [ { "sellingPriceId": 1, - "amountExclTax": 5413, + "amountExclTax": null, "amountInclTax": 5900, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2269,7 +2386,7 @@ paths: "purchasePrices": [ { "purchasePriceId": 1, - "amountExclTax": 0, + "amountExclTax": null, "amountInclTax": 0, "taxCode": "V09", "taxPercentage": 9.0000, @@ -2334,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 @@ -2353,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 @@ -2370,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: