From 87c545c68958d462dfb2ec9dba8c6bac0c5c12db Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 14 Oct 2024 12:03:28 +0200 Subject: [PATCH 001/372] OVPAY-982 - Added 'isCredit' to CRUD API's. --- src/openapi/contracts/contracts-crud.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/openapi/contracts/contracts-crud.yaml b/src/openapi/contracts/contracts-crud.yaml index ac961e4..1125bfc 100644 --- a/src/openapi/contracts/contracts-crud.yaml +++ b/src/openapi/contracts/contracts-crud.yaml @@ -216,6 +216,7 @@ paths: "created": "2024-06-02 15:01:00.000", "updated": "2024-06-02 15:01:00.000", "state": "invoice_created", + "isCredit": false, }, { "contractInvoiceId": "1c345237-4d84-47f0-93c2-7b94338e3355", @@ -224,6 +225,7 @@ paths: "created": "2024-07-02 15:01:00.000", "updated": "2024-07-02 15:01:00.000", "state": "invoice_created", + "isCredit": false, }, ], "contractVersions": @@ -273,6 +275,7 @@ paths: "created": "2024-06-02 15:01:00.000", "updated": "2024-06-02 15:01:00.000", "state": "invoice_created", + "isCredit": false, }, { "contractInvoiceId": "1c345237-4d84-47f0-93c2-7b94338e3355", @@ -281,6 +284,7 @@ paths: "created": "2024-07-02 15:01:00.000", "updated": "2024-07-02 15:01:00.000", "state": "invoice_created", + "isCredit": false, }, ], "contractVersions": @@ -401,6 +405,7 @@ paths: "updated": "2024-07-02 15:01:00.000", "state": "invoice_created", "data": "{json}", + "isCredit": false, }, ], }, @@ -568,6 +573,7 @@ paths: "updated": "2024-07-02 15:01:00.000", "state": "invoice_sent", "data": "{json}", + "isCredit": false, }, { "contractInvoiceId": "dadff658-4ff5-4eb8-b516-492f1f6c6245", @@ -577,6 +583,7 @@ paths: "updated": "2024-08-02 15:01:00.000", "state": "invoice_created", "data": "{json}", + "isCredit": false, }, ], } @@ -600,6 +607,7 @@ paths: "updated": "2024-07-02 15:01:00.000", "state": "invoice_created", "data": "{json}", + "isCredit": false, }, } responses: @@ -684,6 +692,13 @@ paths: example: created required: false description: Invoice state. + - in: query + name: isCredit + schema: + type: boolean + example: true + required: false + description: Whether the invoice is a credit invoice. responses: "200": description: OK @@ -704,6 +719,7 @@ paths: "updated": "2024-06-02 15:01:00.000", "state": "invoice_created", "data": "{json}", + "isCredit": false, }, { "contractId": "a7452e22-3894-40cc-87d6-869370a92277", @@ -714,6 +730,7 @@ paths: "updated": "2024-08-02 15:01:00.000", "state": "invoice_created", "data": "{json}", + "isCredit": false, }, ], } @@ -1049,6 +1066,9 @@ components: type: string format: json example: { json } + isCredit: + type: boolean + example: true ContractStatus: type: object properties: -- 2.45.2 From 0ce44a5616787199d6c10be60db704fa7d3758ee Mon Sep 17 00:00:00 2001 From: Max Martens Date: Thu, 17 Oct 2024 12:24:29 +0200 Subject: [PATCH 002/372] Fix typo validTo -> validUntil --- src/openapi/fiko/fikoreference-crud.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/openapi/fiko/fikoreference-crud.yaml b/src/openapi/fiko/fikoreference-crud.yaml index 516519a..52969ac 100644 --- a/src/openapi/fiko/fikoreference-crud.yaml +++ b/src/openapi/fiko/fikoreference-crud.yaml @@ -26,8 +26,8 @@ paths: summary: Get a list of all possible values of the "TaxMetadata" reference table. Mainly used for populating dropdown lists (in PMT for example). description: |- Get a list of all possible values of the `TaxMetadata` reference table. Mainly used for populating dropdown lists (in PMT for example).\ - The attributes `validFrom` and `validTo` are not yet present in the FIKO v1 datamodel, but are already included in this resourcemodel; to prevent rework in the near future.\ - For now, for `validFrom`, the value will always be returned as `2024-01-01T00:00:00.000+00:00` and for `validTo` it will always be `null`. + The attributes `validFrom` and `validUntil` are not yet present in the FIKO v1 datamodel, but are already included in this resourcemodel; to prevent rework in the near future.\ + For now, for `validFrom`, the value will always be returned as `2024-01-01T00:00:00.000+00:00` and for `validUntil` it will always be `null`. responses: '200': description: OK @@ -47,7 +47,7 @@ paths: "taxPercentageAmount": 21, "description": "BTW VERKOOP HOOG 21%", "validFrom": "2024-01-01T00:00:00.000+00:00", - "validTo": null + "validUntil": null }, { "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", @@ -55,7 +55,7 @@ paths: "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%", "validFrom": "2024-01-01T00:00:00.000+00:00", - "validTo": null + "validUntil": null }, { "taxMetadataId": "AC20A838-C81B-4652-96EA-F6E79E696E9C", @@ -63,7 +63,7 @@ paths: "taxPercentageAmount": 0, "description": "BTW VERKOOP NUL", "validFrom": "2024-01-01T00:00:00.000+00:00", - "validTo": null + "validUntil": null } ] } @@ -78,7 +78,7 @@ paths: "taxPercentageAmount": 21, "description": "BTW VERKOOP HOOG 21%", "validFrom": "2024-01-01T00:00:00.000+00:00", - "validTo": null + "validUntil": null }, { "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", @@ -86,7 +86,7 @@ paths: "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%", "validFrom": "2024-01-01T00:00:00.000+00:00", - "validTo": null + "validUntil": null }, { "taxMetadataId": "AC20A838-C81B-4652-96EA-F6E79E696E9C", @@ -94,7 +94,7 @@ paths: "taxPercentageAmount": 0, "description": "BTW VERKOOP NUL", "validFrom": "2024-01-01T00:00:00.000+00:00", - "validTo": null + "validUntil": null }, { "TBD": "TBD" @@ -106,7 +106,7 @@ paths: "TBD": "TBD" } ] - } + } '400': description: '400' content: -- 2.45.2 From 2621c6e18004537edbf638c212bc43f05ae45b87 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Thu, 17 Oct 2024 12:50:19 +0200 Subject: [PATCH 003/372] Revert "Fix typo validTo -> validUntil" This reverts commit 0ce44a5616787199d6c10be60db704fa7d3758ee. --- src/openapi/fiko/fikoreference-crud.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/openapi/fiko/fikoreference-crud.yaml b/src/openapi/fiko/fikoreference-crud.yaml index 52969ac..516519a 100644 --- a/src/openapi/fiko/fikoreference-crud.yaml +++ b/src/openapi/fiko/fikoreference-crud.yaml @@ -26,8 +26,8 @@ paths: summary: Get a list of all possible values of the "TaxMetadata" reference table. Mainly used for populating dropdown lists (in PMT for example). description: |- Get a list of all possible values of the `TaxMetadata` reference table. Mainly used for populating dropdown lists (in PMT for example).\ - The attributes `validFrom` and `validUntil` are not yet present in the FIKO v1 datamodel, but are already included in this resourcemodel; to prevent rework in the near future.\ - For now, for `validFrom`, the value will always be returned as `2024-01-01T00:00:00.000+00:00` and for `validUntil` it will always be `null`. + The attributes `validFrom` and `validTo` are not yet present in the FIKO v1 datamodel, but are already included in this resourcemodel; to prevent rework in the near future.\ + For now, for `validFrom`, the value will always be returned as `2024-01-01T00:00:00.000+00:00` and for `validTo` it will always be `null`. responses: '200': description: OK @@ -47,7 +47,7 @@ paths: "taxPercentageAmount": 21, "description": "BTW VERKOOP HOOG 21%", "validFrom": "2024-01-01T00:00:00.000+00:00", - "validUntil": null + "validTo": null }, { "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", @@ -55,7 +55,7 @@ paths: "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%", "validFrom": "2024-01-01T00:00:00.000+00:00", - "validUntil": null + "validTo": null }, { "taxMetadataId": "AC20A838-C81B-4652-96EA-F6E79E696E9C", @@ -63,7 +63,7 @@ paths: "taxPercentageAmount": 0, "description": "BTW VERKOOP NUL", "validFrom": "2024-01-01T00:00:00.000+00:00", - "validUntil": null + "validTo": null } ] } @@ -78,7 +78,7 @@ paths: "taxPercentageAmount": 21, "description": "BTW VERKOOP HOOG 21%", "validFrom": "2024-01-01T00:00:00.000+00:00", - "validUntil": null + "validTo": null }, { "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", @@ -86,7 +86,7 @@ paths: "taxPercentageAmount": 9, "description": "BTW VERKOOP LAAG 9%", "validFrom": "2024-01-01T00:00:00.000+00:00", - "validUntil": null + "validTo": null }, { "taxMetadataId": "AC20A838-C81B-4652-96EA-F6E79E696E9C", @@ -94,7 +94,7 @@ paths: "taxPercentageAmount": 0, "description": "BTW VERKOOP NUL", "validFrom": "2024-01-01T00:00:00.000+00:00", - "validUntil": null + "validTo": null }, { "TBD": "TBD" @@ -106,7 +106,7 @@ paths: "TBD": "TBD" } ] - } + } '400': description: '400' content: -- 2.45.2 From b020a02c826db30d8e390ba836d9dfc923ca1baa Mon Sep 17 00:00:00 2001 From: Max Martens Date: Thu, 17 Oct 2024 19:24:28 +0200 Subject: [PATCH 004/372] OVPAY-1145 - add tokenTypes array to products list respnse model schema and examples --- src/openapi/products/products-crud-v2.2.yaml | 48 ++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/openapi/products/products-crud-v2.2.yaml b/src/openapi/products/products-crud-v2.2.yaml index d73bc24..0f69225 100644 --- a/src/openapi/products/products-crud-v2.2.yaml +++ b/src/openapi/products/products-crud-v2.2.yaml @@ -59,6 +59,12 @@ paths: "isTravelProduct": true, "name": "Kortingsabonnement" }, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], "sellableTouchPointIds": null, "amountInclTax": null, "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", @@ -83,6 +89,7 @@ paths: "isTravelProduct": false, "name": "Barcode" }, + "tokenTypes": null, "sellableTouchPointIds": [ 1, 2, @@ -112,6 +119,7 @@ paths: "isTravelProduct": false, "name": "Barcode" }, + "tokenTypes": null, "sellableTouchPointIds": [ 3, 4 @@ -139,6 +147,12 @@ paths: "isTravelProduct": true, "name": "Kortingsabonnement" }, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], "sellableTouchPointIds": null, "amountInclTax": null, "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", @@ -154,6 +168,7 @@ paths: "isTravelProduct": false, "name": "Barcode" }, + "tokenTypes": null, "sellableTouchPointIds": [ 1, 2, @@ -174,6 +189,12 @@ paths: "isTravelProduct": true, "name": "Kortingsabonnement" }, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], "sellableTouchPointIds": [ 1, 2 @@ -192,6 +213,12 @@ paths: "isTravelProduct": true, "name": "Kortingsabonnement" }, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], "sellableTouchPointIds": [ 3, 4 @@ -219,6 +246,7 @@ paths: "isTravelProduct": false, "name": "Barcode" }, + "tokenTypes": null, "sellableTouchPointIds": [ 3, 4 @@ -237,6 +265,12 @@ paths: "isTravelProduct": true, "name": "Kortingsabonnement" }, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], "sellableTouchPointIds": [ 3, 4 @@ -2074,6 +2108,20 @@ components: name: type: string example: Kortingsabonnement + tokenTypes: + type: array + items: + type: object + required: + - tokenTypeId + - name + properties: + tokenTypeId: + type: integer + example: 1 + name: + type: string + example: EMV sellableTouchPointIds: type: array items: -- 2.45.2 From e534d7161be3ff4075eb697d6fc039e5c02ccfaa Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 21 Oct 2024 09:57:47 +0200 Subject: [PATCH 005/372] OVPAY-1147 - Init. --- src/openapi/customer/customers-crud-v2.yaml | 161 ++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 src/openapi/customer/customers-crud-v2.yaml diff --git a/src/openapi/customer/customers-crud-v2.yaml b/src/openapi/customer/customers-crud-v2.yaml new file mode 100644 index 0000000..1aac2d0 --- /dev/null +++ b/src/openapi/customer/customers-crud-v2.yaml @@ -0,0 +1,161 @@ +openapi: "3.0.3" +info: + title: ABT Customers CRUD APIs v2 + version: "1.0" + description: CRUD APIs for ABT Customer database. These are NOT the functional APIs from Service Engine. +servers: + - url: https://api.integratielaag.nl/v1 +paths: + /ovpaytokens: + get: + tags: + - Token + summary: Find OVpay tokens. + description: Find OVpay tokens. + parameters: + - in: query + name: ovPayTokenId + schema: + type: integer + example: 71 + required: false + description: The id of the token. + - in: query + name: customerProfileId + schema: + type: integer + example: 12 + required: false + description: The id of the customer profile. + - in: query + name: mediaTypeId + schema: + type: array + items: + type: integer + example: [1, 2] + explode: false + required: false + description: Filter on possible media types. 1 = EMV, 2 = OV-pas physical, 3 = OV-pas digital. + - in: query + name: xTat + schema: + type: string + format: uuid + example: 700b0516-bf8b-4e6e-bf16-13bfeb078e23 + explode: false + required: false + description: The XTAT of the token. + - in: query + name: xBot + schema: + type: string + format: uuid + example: de1a9a7a-a777-4473-889c-44a3bb07daae + explode: false + required: false + description: The XBOT of the token. + - in: query + name: alias + schema: + type: string + example: Mijn OV-pas + required: false + description: The alias of the token. + - in: query + name: lastDigits + schema: + type: integer + example: 3301 + required: false + description: The last digits of the token. + - in: query + name: ovpasNumber + schema: + type: string + example: 63AW974 + required: false + description: Number of the OVpas. + - in: query + name: tokenStatusId + schema: + type: array + items: + type: integer + example: [1, 2] + explode: false + required: false + description: Filter on possible token statuses. 1 = expired, 2 = active, 3 = replaced, 4 = inactive, 5 = suspended, 6 = removed by customer. + - in: query + name: expirationDate + schema: + type: string + format: date-time + example: 2029-03-22T09:00:00 + required: false + description: The expiration date of the token. + - in: query + name: replacedByTokenId + schema: + type: integer + example: 12 + required: false + description: The id of the token that replaced this token. + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + [ + { + "ovPayTokenId": 71, + "customerProfileId": 12, + "mediaTypeId": 1, + "xTat": "700b0516-bf8b-4e6e-bf16-13bfeb078e23", + "xBot": "de1a9a7a-a777-4473-889c-44a3bb07daae", + "alias": "Mijn OV-pas", + "lastDigits": 3301, + "ovpasNumber": "63AW974", + "tokenStatusId": 2, + "expirationDate": "2029-03-22T09:00:00", + "replacedByTokenId": 12, + }, + ] +components: + securitySchemes: + bearerToken: + type: http + scheme: bearer + bearerFormat: JWT + schemas: + unavailable: + type: object + rfc9457: + type: object + properties: + type: + type: string + format: url + example: https://example.com/probs/out-of-credit + title: + type: string + example: You do not have enough credit. + detail: + type: string + example: Your current balance is 30, but that costs 50. + instance: + type: string + example: /account/12345/msgs/abc + balance: + type: string + example: 30 + accounts: + type: array + items: + type: string + example: + - /account/12345 + - /account/67890 -- 2.45.2 From 3b1220456615ddfb44ad3b6cd64d3c09f940dbde Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 24 Oct 2024 15:23:09 +0200 Subject: [PATCH 006/372] OVPAY-1147 - MediaType should be TokenType. --- src/openapi/customer/customers-crud-v2.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/openapi/customer/customers-crud-v2.yaml b/src/openapi/customer/customers-crud-v2.yaml index 1aac2d0..464b49c 100644 --- a/src/openapi/customer/customers-crud-v2.yaml +++ b/src/openapi/customer/customers-crud-v2.yaml @@ -28,7 +28,7 @@ paths: required: false description: The id of the customer profile. - in: query - name: mediaTypeId + name: tokenTypeId schema: type: array items: @@ -113,13 +113,14 @@ paths: { "ovPayTokenId": 71, "customerProfileId": 12, - "mediaTypeId": 1, + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, "xTat": "700b0516-bf8b-4e6e-bf16-13bfeb078e23", "xBot": "de1a9a7a-a777-4473-889c-44a3bb07daae", "alias": "Mijn OV-pas", "lastDigits": 3301, "ovpasNumber": "63AW974", - "tokenStatusId": 2, + "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2029-03-22T09:00:00", "replacedByTokenId": 12, }, -- 2.45.2 From 330c7d1e2bda6c64b37a05b7adfa7b81322b18d6 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 24 Oct 2024 15:23:48 +0200 Subject: [PATCH 007/372] OVPAY-1147 - Typo. --- src/openapi/customer/customers-crud-v2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openapi/customer/customers-crud-v2.yaml b/src/openapi/customer/customers-crud-v2.yaml index 464b49c..e7ea50b 100644 --- a/src/openapi/customer/customers-crud-v2.yaml +++ b/src/openapi/customer/customers-crud-v2.yaml @@ -36,7 +36,7 @@ paths: example: [1, 2] explode: false required: false - description: Filter on possible media types. 1 = EMV, 2 = OV-pas physical, 3 = OV-pas digital. + description: Filter on possible token types. 1 = EMV, 2 = OV-pas physical, 3 = OV-pas digital. - in: query name: xTat schema: -- 2.45.2 From f7a56f3e62b4d56f732d807b0a4b7a0638d1afd4 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Fri, 25 Oct 2024 13:27:47 +0200 Subject: [PATCH 008/372] OVPAY-754 - Added find on directdebitmandate. --- src/openapi/customers/customers-crud-v2.yaml | 166 +++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 src/openapi/customers/customers-crud-v2.yaml diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml new file mode 100644 index 0000000..6a2d28e --- /dev/null +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -0,0 +1,166 @@ +openapi: "3.0.3" +info: + title: ABT Customers CRUD APIs v2 + version: "1.0" + description: CRUD APIs for ABT Customer database. These are NOT the functional APIs from Service Engine. +servers: + - url: https://api.integratielaag.nl/v1 +paths: + /directdebitmandates: + get: + tags: + - Mandates + summary: Find direct debit mandates. + description: Find direct debit mandates. + parameters: + - in: query + name: directDebitMandateId + schema: + type: integer + example: 71 + required: false + description: The id of the direct debit mandate. + - in: query + name: customerProfileId + schema: + type: integer + example: 12 + required: false + description: The id of the customer related to the mandate. + - in: query + name: customerNumber + schema: + type: integer + example: 14 + required: false + description: The number of the customer related to the mandate. + - in: query + name: billingInformationId + schema: + type: integer + example: 51 + required: false + description: The id of the billing information related to the mandate. + - in: query + name: directDebitMandateTypeId + schema: + type: array + items: + type: integer + example: [1, 2] + explode: false + required: false + description: The id of the direct debit mandate type. 1 = Paper contract, 2 = PIN transaction, 3 = SEPA eMandate, 4 = Digital signature, 5 = iDEAL transaction. + - in: query + name: mandateAddressId + schema: + type: integer + example: 21 + required: false + description: The id of the address related to the mandate. + - in: query + name: createdBefore + schema: + type: string + format: date-time + example: 2020-12-31T23:59:59 + required: false + description: Filter on created before. + - in: query + name: createdAfter + schema: + type: string + format: date-time + example: 2020-01-01T00:00:00 + required: false + description: Filter on created after. + - in: query + name: mandateReference + schema: + type: string + example: CORE01 + required: false + description: Filter on mandate reference. + - in: query + name: mandateState + schema: + type: array + items: + type: string + example: [SIGNED, PREPARED] + explode: false + required: false + description: Filter on possible states of the mandate. SIGNED = signed, PREPARED = prepared, CANCELLED = cancelled. + - in: query + name: updatedBefore + schema: + type: string + format: date-time + example: 2020-12-31T23:59:59 + required: false + description: Filter on updated before. + - in: query + name: updatedAfter + schema: + type: string + format: date-time + example: 2020-01-01T00:00:00 + required: false + description: Filter on updated after. + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + [ + { + "directDebitMandateId": 71, + "customerProfileId": 12, + "customerNumber": 14, + "billingInformationId": 51, + "directDebitMandateTypeId": 5, + "mandateAddressId": 21, + "created": "2024-03-22T08:55:00", + "mandateReference": "CORE01", + "mandateState": "SINGED", + "updateTimestamp": "2024-03-22T08:55:00" + }, + ] +components: + securitySchemes: + bearerToken: + type: http + scheme: bearer + bearerFormat: JWT + schemas: + unavailable: + type: object + rfc9457: + type: object + properties: + type: + type: string + format: url + example: https://example.com/probs/out-of-credit + title: + type: string + example: You do not have enough credit. + detail: + type: string + example: Your current balance is 30, but that costs 50. + instance: + type: string + example: /account/12345/msgs/abc + balance: + type: string + example: 30 + accounts: + type: array + items: + type: string + example: + - /account/12345 + - /account/67890 -- 2.45.2 From 0dabe488071a120f6d6c0a178f31cd1527227e50 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 7 Nov 2024 14:16:25 +0100 Subject: [PATCH 009/372] OVPAY-1180 - Added role and user to crud apis. --- src/openapi/util/util-crud.yaml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/openapi/util/util-crud.yaml b/src/openapi/util/util-crud.yaml index bb881b2..ddf015c 100644 --- a/src/openapi/util/util-crud.yaml +++ b/src/openapi/util/util-crud.yaml @@ -86,6 +86,20 @@ paths: example: 65ad5520-4e62-41b7-89dd-a01be6cb78bf required: false description: Pointer to executor of this action (e.g. the batch job). + - in: query + name: role + schema: + type: string + example: customer + required: false + description: Role of the user or process that initiated the action. + - in: query + name: user + schema: + type: string + example: 1255ab39-2f10-409a-bf61-38c07e1b8a9e + required: false + description: User that initiated the action. In case of a customer this is the customer id. - in: query name: resourceName schema: @@ -123,6 +137,8 @@ paths: "created": "2024-07-02 15:01:00.000", "updated": "2024-07-02 15:01:00.000", "correlationId": "fb4443c6-5a6a-47a3-adf0-db3dfc183399", + "role": "customer", + "user": "1255ab39-2f10-409a-bf61-38c07e1b8a9e", "scheduledActionResources": [ { @@ -157,6 +173,8 @@ paths: "created": "2024-07-02 15:01:00.000", "updated": "2024-07-02 15:01:00.000", "correlationId": "fb4443c6-5a6a-47a3-adf0-db3dfc183399", + "role": "customer", + "user": "1255ab39-2f10-409a-bf61-38c07e1b8a9e", "scheduledActionResources": [ { @@ -217,6 +235,8 @@ paths: "created": "2024-07-02 15:01:00.000", "updated": "2024-07-02 15:01:00.000", "correlationId": "fb4443c6-5a6a-47a3-adf0-db3dfc183399", + "role": "customer", + "user": "1255ab39-2f10-409a-bf61-38c07e1b8a9e", "scheduledActionResources": [ { @@ -390,6 +410,12 @@ components: type: string format: uuid example: 8699d72a-cf4d-4e6b-9e9c-549d837ca51f + role: + type: string + example: customer + user: + type: string + example: 1255ab39-2f10-409a-bf61-38c07e1b8a9e ScheduledActionType: type: object properties: -- 2.45.2 From 1f9e9c83ac76e24cb8d89ad60adeca8607d2755e Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 13 Nov 2024 14:24:33 +0100 Subject: [PATCH 010/372] OVPAY-108 - Simplified list orders operation. --- src/openapi/orders/service_engine_orders.yaml | 136 ------------------ 1 file changed, 136 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 0070185..ffa2f38 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -520,142 +520,6 @@ paths: "description": "Betaling in behandeling", }, ], - "orderLines": - [ - { - "orderLineId": "7a7a9d1a-3fc8-4058-a28b-082860aaa311", - "externalOrderLineId": "f5fddff0-7fbd-4285-bccb-e584f431ea69", - "productId": 1, - "productName": "HTM Maandkorting 20%", - "productCode": "HTM-MND-20", - "productDescription": "HTM Maandkorting 20%", - "taxAmount": 21, - "taxMetadata": - { - "taxMetadataId": "06270769-a263-4325-82d6-f49396f39d03", - "taxCode": "V21", - "taxPercentageAmount": 21, - "description": "21% BTW", - }, - "amountExclTax": 100, - "amountInclTax": 121, - "quantity": 1, - "orderLineTerms": - [ - { - "orderLineTermsId": "fe354db7-12ad-4fc1-bc63-a704c4e0d91e", - "termsUrl": "generalTermsAndConditions.pdf", - }, - ], - "validFrom": "2024-03-22T09:00:00", - "validUntil": "2025-03-22T09:00:00", - "orderLineStatus": - { "orderLineStatusId": 4, "name": "delivered" }, - "createdOn": "2024-03-22T09:00:00", - "lastUpdatedOn": "2024-03-22T09:00:00", - "customerTokens": - [ - { - "customerTokenId": "878ad7c1-cd8f-4bcf-a983-1bd8c6e6975e", - "tokenType": - { "tokenTypeId": 1, "name": "EMV" }, - - "ovPayTokenId": 1, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 34, - "ovpasNumber": "OV34567", - "verificationCode": "A7H6", - "personalAccountData": - { - "personalAccountDataId": "47db8a40-3238-4bf5-9284-759e3888bd47", - "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", - "photoReference": "DSC_0502.JPG", - "fileType": "image/jpg", - "challengeType": - { "challengeTypeId": 1, "name": "email" }, - "oneTimePassword": "H5Iiz3JTaQeIV8p", - }, - }, - ], - "orderAccountingStatuses": - [ - { - "orderAccountingStatusId": "7c5118d0-8535-4464-9239-83a7ba8fd2db", - "accountingStatus": - { "accountingStatusId": 1, "name": "open" }, - "createdOn": "2024-03-22T09:00:00", - "description": "Financiele transactie voor de FIKO.", - }, - ], - }, - ], - "payments": - [ - { - "paymentId": "3ba4a3c7-0803-4214-800b-365851b8903d", - "createdOn": "2024-03-22T09:00:00", - "amountDebit": 121, - "paymentMethod": - { - "paymentMethodId": 1, - "name": "ideal", - "provider": "Buckaroo", - }, - "touchPointId": 1, - "isRefund": false, - "htmPaymentReference": "HTM-1234", - "pspPaymentReference": "Buckaroo-1234", - "paymentStatuses": - [ - { - "paymentStatusId": 1, - "createdOn": "2024-03-22T09:00:00", - "statusCode": "190", - "statusDescription": "Success", - "statusSubCode": "S001", - "statusSubDescription": "PaymentSuccessFul", - }, - ], - "mandateInput": - { - "mandateInputId": "0a875e67-dc9f-4825-a030-d732a2adbfbc", - "directDebitMandateType": - { - "directDebitMandateTypeId": 1, - "name": "import", - }, - "createdOn": "2024-03-22T09:00:00", - "bic": "RABONL2U", - "iban": "NL44RABO0123456789", - "ascription": "J. de Vries", - "place": "Den Haag", - }, - }, - ], - "orderCustomer": - { - "orderCustomerId": "19ef6882-8eda-43bf-b48e-9b4ff8745a50", - "birthname": "Jan", - "surname": "Vries", - "prefix": "de", - "emailAddress": "jandevries@outlook.com", - "dateOfBirth": "1970-01-01", - "orderCustomerAddresses": - [ - { - "orderCustomerAddressId": "aa50047c-58ac-4f15-9448-ee000dfc6893", - "addressType": - { "addressTypeId": 1, "name": "Billing" }, - "street": "Kon. Julianaplein", - "houseNumber": 10, - "houseNumberSuffix": "a", - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "NL", - }, - ], - }, }, ] /orders: -- 2.45.2 From 5306f34dafdc3b6f91f1d3618d661d7143e1b64b Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 13 Nov 2024 14:40:03 +0100 Subject: [PATCH 011/372] OVPAY-1201 - Minor delta on data model. --- src/openapi/contracts/contracts-crud.yaml | 21 ++++++--------------- src/openapi/contracts/contracts-se.yaml | 3 --- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/src/openapi/contracts/contracts-crud.yaml b/src/openapi/contracts/contracts-crud.yaml index 09e1de6..0c3e90e 100644 --- a/src/openapi/contracts/contracts-crud.yaml +++ b/src/openapi/contracts/contracts-crud.yaml @@ -27,7 +27,7 @@ paths: type: integer example: 1 required: false - description: Filter on possible contract status. 1 = new, 2 = active, 3 = suspended, 4 = cancelled, 5 = terminated. + description: Filter on possible contract status. 1 = new, 2 = active, 3 = suspended, 4 = cancelled, 5 = terminated, 6 = pending cancellation, 7 = pending termination. responses: "200": description: OK @@ -53,7 +53,6 @@ paths: "termDuration": "P0Y1M0D", "billingDay": 15, "highestInvoiceTerm": 1, - "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355", "created": "2024-08-01 15:01:00.000", }, { @@ -70,7 +69,6 @@ paths: "termDuration": "P0Y1M0D", "billingDay": 15, "highestInvoiceTerm": 1, - "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355", "created": "2024-08-01 15:01:00.000", }, ], @@ -98,7 +96,6 @@ paths: "termDuration": "P0Y1M0D", "billingDay": 15, "highestInvoiceTerm": 0, - "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355", "contractVersions": [ { @@ -152,7 +149,7 @@ paths: type: integer explode: false required: false - description: Filter on possible contract status. 1 = new, 2 = active, 3 = suspended, 4 = cancelled, 5 = terminated. + description: Filter on possible contract status. 1 = new, 2 = active, 3 = suspended, 4 = cancelled, 5 = terminated, 6 = pending cancellation, 7 = pending termination. - in: query name: billingDay schema: @@ -206,7 +203,6 @@ paths: "termDuration": "P0Y1M0D", "billingDay": 15, "highestInvoiceTerm": 1, - "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355", "contractInvoices": [ { @@ -265,7 +261,6 @@ paths: "termDuration": "P0Y1M0D", "billingDay": 15, "highestInvoiceTerm": 1, - "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355", "contractInvoices": [ { @@ -351,7 +346,6 @@ paths: "termDuration": "P0Y1M0D", "billingDay": 15, "highestInvoiceTerm": 1, - "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355", "contractVersions": [ { @@ -429,7 +423,6 @@ paths: "productName": "HTM 20% korting 2024", "billingDay": 15, "highestInvoiceTerm": 2, - "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355", }, } responses: @@ -878,6 +871,8 @@ paths: { "contractStatusId": 3, "name": "suspended" }, { "contractStatusId": 4, "name": "cancelled" }, { "contractStatusId": 5, "name": "terminated" }, + { "contractStatusId": 6, "name": "pending cancellation" }, + { "contractStatusId": 7, "name": "pending termination" }, ], } /actiontypes: @@ -892,7 +887,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/ContractStatus" + $ref: "#/components/schemas/ActionType" example: { "actionTypes": @@ -957,10 +952,6 @@ components: highestInvoiceTerm: type: integer example: 1 - xSpit: - type: string - format: uuid - example: 1c345237-4d84-47f0-93c2-7b94338e3355 contractVersions: type: array items: @@ -1077,7 +1068,7 @@ components: example: 2 name: type: string - enum: [new, active, suspended, cancelled, terminated] + enum: [new, active, suspended, cancelled, terminated, pending cancellation, pending termination] example: active ActionType: type: object diff --git a/src/openapi/contracts/contracts-se.yaml b/src/openapi/contracts/contracts-se.yaml index 98ac462..934903f 100644 --- a/src/openapi/contracts/contracts-se.yaml +++ b/src/openapi/contracts/contracts-se.yaml @@ -43,7 +43,6 @@ paths: "termDuration": "P0Y1M0D", "billingDay": 15, "highestInvoiceTerm": 1, - "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355", "created": "2024-08-01 15:01:00.000", }, { @@ -59,7 +58,6 @@ paths: "termDuration": "P0Y1M0D", "billingDay": 15, "highestInvoiceTerm": 1, - "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355", "created": "2024-08-01 15:01:00.000", }, ] @@ -128,7 +126,6 @@ paths: "termDuration": "P0Y1M0D", "billingDay": 15, "highestInvoiceTerm": 1, - "xSpit": "1c345237-4d84-47f0-93c2-7b94338e3355", "contractVersions": [ { -- 2.45.2 From 889eeeb130bfe4409899b806e1c874b928103e32 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 19 Nov 2024 14:46:13 +0100 Subject: [PATCH 012/372] OVPAY-1136 - Added API versioning in HTTP headers. --- src/openapi/orders/service_engine_orders.yaml | 864 ++++++++++-------- 1 file changed, 499 insertions(+), 365 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index ffa2f38..9f822d6 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -9,217 +9,291 @@ paths: /orders/validation: post: tags: - - Order Validation v2 + - Order Validation v1 & v2 summary: Validate order. description: Validate order. parameters: - in: header name: X-HTM-JWT-AUTH-HEADER - required: true + required: false style: simple explode: false schema: type: string + - in: header + name: Accept-version + required: false + style: simple + explode: false + schema: + type: string + example: "2.0" + description: The version of the API. requestBody: content: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { - "purchaseDate": "2024-03-22", - "customerProfileId": 1337, - "languageId": 1, - "billingAddressId": 1, - "shippingAddressId": 1, - "contents": + examples: + v1: + summary: Order validation v1 + description: Order validation v1 + value: [ { - "productId": 1, - "quantity": 5, - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - "tokens": - [ - { - "tokenTypeId": 1, - "ovPayTokenId": 1, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 34, - "ovpasNumber": "OV34567", - "verificationCode": "A7H6", - "personalAccountData": - { - "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", - "photoReference": "DSC_0502.JPG", - "fileType": "image/jpg", - "challengeTypeId": 1, - "oneTimePassword": "H5Iiz3JTaQeIV8p", - }, - }, - ], + "ovPayTokenId": 2, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "productId": 2, + "startDate": "2024-03-22T09:00:00z", + "quantity": 1, }, { - "productId": 2, - "quantity": 3, - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, + "ovPayTokenId": 3, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 89, + "ovpasNumber": "OV34567", + "productId": 4, + "startDate": "2024-03-22T09:00:00z", + "quantity": 4, }, - ], - "customer": + ] + v2: + summary: Order validation v2 + description: Order validation v2 + value: { - "birthname": "Jan", - "surname": "Vries", - "prefix": "de", - "emailAddress": "jandevries@outlook.com", - "dateOfBirth": "1970-01-01", - "addresses": + "purchaseDate": "2024-03-22", + "customerProfileId": 1337, + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "contents": [ { - "addressTypeId": 1, - "street": "Kon. Julianaplein", - "houseNumber": 10, - "houseNumberSuffix": "a", - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "NL", + "productId": 1, + "quantity": 5, + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + }, + { + "productId": 2, + "quantity": 3, + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, }, ], - }, - } + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + }, + ], + }, + } responses: - "201": - description: Created + "200": + description: OK content: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { - "validContents": true, - "purchaseDate": "2024-03-22", - "customerProfileId": 1337, - "languageId": 1, - "billingAddressId": 1, - "shippingAddressId": 1, - "totalAmount": 121, - "contents": - [ - { - "productId": 1, - "quantity": 5, - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - "taxAmount": 21, - "taxCode": "V21", - "amountExclTax": 100, - "amountInclTax": 121, - "isRenewable": true, - "nextDebitDate": "2024-04-22", - "termAmountExclTax": 100, - "termAmountInclTax": 121, - "tokens": - [ - { - "tokenTypeId": 1, - "ovPayTokenId": 1, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 34, - "ovpasNumber": "OV34567", - "verificationCode": "A7H6", - "personalAccountData": - { - "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", - "photoReference": "DSC_0502.JPG", - "fileType": "image/jpg", - "challengeTypeId": 1, - "oneTimePassword": "H5Iiz3JTaQeIV8p", - }, - }, - ], - "additionalRemarks": [], - "validationErrors": - [ - { - "detail": "Startdate of this product should be at most 60 days in the future.", - "pointer": "#/contents[0]/validFrom", - }, - { - "detail": "Combination of product and token type is not valid.", - "pointer": "#/contents[0]/tokens[0]/ovPayTokenId", - }, - ], - }, - { - "productId": 2, - "quantity": 3, - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - "taxAmount": 21, - "taxCode": "V21", - "amountExclTax": 100, - "amountInclTax": 121, - "isRenewable": true, - "nextDebitDate": "2024-04-22", - "termAmountExclTax": 100, - "termAmountInclTax": 121, - }, - ], - "customer": + examples: + v1: + summary: Order validation v1 + description: Order validation v1 + value: { - "birthname": "Jan", - "surname": "Vries", - "prefix": "de", - "emailAddress": "jandevries@outlook.com", - "dateOfBirth": "1970-01-01", - "addresses": + "validContents": true, + "amountExclTax": 0, + "taxPercentage": 0, + "amountInclTax": 0, + "contents": [ { - "addressTypeId": 1, - "street": "Kon. Julianaplein", - "houseNumber": 10, - "houseNumberSuffix": "a", - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "NL", + "ovPayTokenId": 0, + "serviceReferenceId": "string", + "ovpasNumber": "string", + "productId": 0, + "quantity": 0, + "amountExclTax": 0, + "taxPercentage": 0, + "amountInclTax": 0, + "startDate": "string", + "endDate": "string", + "isRenewable": true, + "nextDebitDate": "string", + "termAmountExclTax": 0, + "termAmountInclTax": 0, + "additionalRemarks": + [{ "code": "string", "parameter": "string" }], + "validationErrors": + [{ "detail": "string", "pointer": "string" }], }, ], - "additionalRemarks": + } + v2: + summary: Order validation v2 + description: Order validation v2 + value: + { + "validContents": true, + "purchaseDate": "2024-03-22", + "customerProfileId": 1337, + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "totalAmount": 121, + "contents": [ { - "code": "PERSONAL_DATA_NEEDED", - "parameter": "dateOfBirth", + "productId": 1, + "quantity": 5, + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "isRenewable": true, + "nextDebitDate": "2024-04-22", + "termAmountExclTax": 100, + "termAmountInclTax": 121, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + "additionalRemarks": [], + "validationErrors": + [ + { + "detail": "Startdate of this product should be at most 60 days in the future.", + "pointer": "#/contents[0]/validFrom", + }, + { + "detail": "Combination of product and token type is not valid.", + "pointer": "#/contents[0]/tokens[0]/ovPayTokenId", + }, + ], }, { - "code": "PERSONAL_DATA_NEEDED", - "parameter": "photo", - }, - { - "code": "MANDATE_REQUIRED", - "parameter": "directDebitMandateId", + "productId": 2, + "quantity": 3, + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "isRenewable": true, + "nextDebitDate": "2024-04-22", + "termAmountExclTax": 100, + "termAmountInclTax": 121, }, ], - "validationErrors": - [ - { - "detail": "Startdate of this product should be at most 60 days in the future.", - "pointer": "#/contents[1]/validFrom", - }, - ], - }, - } + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + }, + ], + "additionalRemarks": + [ + { + "code": "PERSONAL_DATA_NEEDED", + "parameter": "dateOfBirth", + }, + { + "code": "PERSONAL_DATA_NEEDED", + "parameter": "photo", + }, + { + "code": "MANDATE_REQUIRED", + "parameter": "directDebitMandateId", + }, + ], + "validationErrors": + [ + { + "detail": "Startdate of this product should be at most 60 days in the future.", + "pointer": "#/contents[1]/validFrom", + }, + ], + }, + } /orders/{orderId}/fulfillment: post: tags: - - Order Fulfillment v2 + - Order Fulfillment v1 & v2 summary: Fulfill an order. description: Fulfill an order. parameters: - in: header name: X-HTM-JWT-AUTH-HEADER - required: true + required: false style: simple explode: false schema: @@ -233,116 +307,168 @@ paths: type: string format: uuid example: a0ef57fa-395c-4a03-96e9-234c26dccea9 + - in: header + name: Accept-version + required: false + style: simple + explode: false + schema: + type: string + example: "2.0" + description: The version of the API. requestBody: content: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { - "orderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9", - "customerProfileId": 1337, - "totalAmount": 121, - "languageId": 1, - "billingAddressId": 1, - "shippingAddressId": 1, - "createdOn": "2024-03-22T09:00:00", - "orderStatusId": 4, - "orderLines": - [ - { - "orderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f", - "productId": 1, - "productName": "HTM Maandkorting 20%", - "productCode": "HTM-MND-20", - "productDescription": "HTM Maandkorting 20%", - "taxAmount": 21, - "taxCode": "V21", - "amountExclTax": 100, - "amountInclTax": 121, - "quantity": 1, - "terms": - [ - "generalTermsAndConditions.pdf", - "productTermsAndConditions.pdf", - ], - "createdOn": "2024-03-22T09:00:00", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - "orderLineStatusId": 4, - "tokens": - [ - { - "tokenTypeId": 1, - "ovPayTokenId": 1, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 34, - "ovpasNumber": "OV34567", - "verificationCode": "A7H6", - "personalAccountData": - { - "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", - "photoReference": "DSC_0502.JPG", - "fileType": "image/jpg", - "challengeTypeId": 1, - "oneTimePassword": "H5Iiz3JTaQeIV8p", - }, - }, - ], - }, - ], - "payments": - [ - { - "createdOn": "2024-03-22T09:00:00", - "amountDebit": 121, - "paymentMethodId": 1, - "touchPointId": 1, - "isRefund": false, - "htmPaymentReference": "HTM-1234", - "pspPaymentReference": "Buckaroo-1234", - "paymentStatuses": - [ - { - "createdOn": "2024-03-22T09:00:00", - "statusCode": "190", - "statusDescription": "Success", - "statusSubCode": "S001", - "statusSubDescription": "PaymentSuccessFul", - }, - ], - "payPush": - { - "consumerIssuer": "ABN AMRO", - "transactionId": "0000000000000001", - "consumerName": "J. de Vries", - "consumerIBAN": "NL44RABO0123456789", - "consumerBIC": "RABONL2U", - }, - }, - ], - "customer": + examples: + v1: + summary: Order fulfillment v1 + description: Order fulfillment v1 + value: { - "birthname": "Jan", - "surname": "Vries", - "prefix": "de", - "emailAddress": "jandevries@outlook.com", - "dateOfBirth": "1970-01-01", - "addresses": + "customerProfileID": 123415, + "customerProfileData": { "dateOfBirth": "09-03-1989" }, + "personalAccountData": { "birthdate": "09-03-1989" }, + "directDebitMandate": + { + "consumerName": "J. de Tèster", + "consumerBic": "RABONL2U", + "consumerIban": "NL44RABO0123456789", + }, + "orderContents": [ { - "addressTypeId": 1, - "street": "Kon. Julianaplein", - "houseNumber": 10, - "houseNumberSuffix": "a", - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "NL", + "ovPayTokenId": 123, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 450, + "ovpasNumber": "63AW974", + "productId": 2, + "startDate": "2024-03-22T09:00:00Z", + "quantity": 1, + "orderlineId": "2d7fadc9-b64b-4516-9a7d-cf550f201372", + }, + { + "ovPayTokenId": 123, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 450, + "ovpasNumber": "63AW974", + "productId": 3, + "startDate": "2024-03-16T09:00:00Z", + "quantity": 1, + "orderlineId": "9d7fadc9-b64b-4516-9a7d-cf550f201378", }, ], - }, - } + "orderStatus": "succeededPayment", + } + v2: + summary: Order fulfillment v2 + description: Order fulfillment v2 + value: + { + "orderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9", + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "createdOn": "2024-03-22T09:00:00", + "orderStatusId": 4, + "orderLines": + [ + { + "orderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f", + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatusId": 4, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + }, + ], + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "payPush": + { + "consumerIssuer": "ABN AMRO", + "transactionId": "0000000000000001", + "consumerName": "J. de Vries", + "consumerIBAN": "NL44RABO0123456789", + "consumerBIC": "RABONL2U", + }, + }, + ], + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + }, + ], + }, + } responses: "201": description: Created @@ -350,112 +476,120 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { - "orderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9", - "orderNumber": "123456", - "customerProfileId": 1337, - "totalAmount": 121, - "languageId": 1, - "billingAddressId": 1, - "shippingAddressId": 1, - "createdOn": "2024-03-22T09:00:00", - "orderStatusId": 4, - "orderLines": - [ - { - "orderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f", - "productId": 1, - "productName": "HTM Maandkorting 20%", - "productCode": "HTM-MND-20", - "productDescription": "HTM Maandkorting 20%", - "taxAmount": 21, - "taxCode": "V21", - "amountExclTax": 100, - "amountInclTax": 121, - "quantity": 1, - "terms": - [ - "generalTermsAndConditions.pdf", - "productTermsAndConditions.pdf", - ], - "createdOn": "2024-03-22T09:00:00", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - "orderLineStatusId": 4, - "tokens": - [ - { - "tokenTypeId": 1, - "ovPayTokenId": 1, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 34, - "ovpasNumber": "OV34567", - "verificationCode": "A7H6", - "personalAccountData": - { - "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", - "photoReference": "DSC_0502.JPG", - "fileType": "image/jpg", - "challengeTypeId": 1, - "oneTimePassword": "H5Iiz3JTaQeIV8p", - }, - }, - ], - }, - ], - "payments": - [ - { - "createdOn": "2024-03-22T09:00:00", - "amountDebit": 121, - "paymentMethodId": 1, - "touchPointId": 1, - "isRefund": false, - "htmPaymentReference": "HTM-1234", - "pspPaymentReference": "Buckaroo-1234", - "paymentStatuses": - [ - { - "createdOn": "2024-03-22T09:00:00", - "statusCode": "190", - "statusDescription": "Success", - "statusSubCode": "S001", - "statusSubDescription": "PaymentSuccessFul", - }, - ], - "payPush": - { - "consumerIssuer": "ABN AMRO", - "transactionId": "0000000000000001", - "consumerName": "J. de Vries", - "consumerIBAN": "NL44RABO0123456789", - "consumerBIC": "RABONL2U", - }, - }, - ], - "customer": + examples: + v1: + summary: Order fulfillment v1 + description: Order fulfillment v1 + value: {} + v2: + summary: Order fulfillment v2 + description: Order fulfillment v2 + value: { - "birthname": "Jan", - "surname": "Vries", - "prefix": "de", - "emailAddress": "jandevries@outlook.com", - "dateOfBirth": "1970-01-01", - "addresses": + "orderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9", + "orderNumber": "123456", + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "createdOn": "2024-03-22T09:00:00", + "orderStatusId": 4, + "orderLines": [ { - "addressTypeId": 1, - "street": "Kon. Julianaplein", - "houseNumber": 10, - "houseNumberSuffix": "a", - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "NL", + "orderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f", + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatusId": 4, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], }, ], - }, - } + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "payPush": + { + "consumerIssuer": "ABN AMRO", + "transactionId": "0000000000000001", + "consumerName": "J. de Vries", + "consumerIBAN": "NL44RABO0123456789", + "consumerBIC": "RABONL2U", + }, + }, + ], + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + }, + ], + }, + } /customers/{customerProfileId}/orders: parameters: - in: path @@ -900,7 +1034,7 @@ paths: example: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", - "orderNumber": "ORD-123456" + "orderNumber": "ORD-123456", } delete: tags: -- 2.45.2 From 3b390e0c6e7c79ffc09cf52fa6136bf9d205dfe5 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 19 Nov 2024 15:53:30 +0100 Subject: [PATCH 013/372] OVPAY-108 - Added info for SMP. --- src/openapi/orders/service_engine_orders.yaml | 110 +++++++++++++----- 1 file changed, 78 insertions(+), 32 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 9f822d6..b9af7d6 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -619,43 +619,83 @@ paths: schema: $ref: "#/components/schemas/unavailable" example: - [ - { - "orderId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d", - "externalOrderId": "bac3958b-804a-43e3-b5f7-0b0fffaae5b7", - "orderNumber": "123456", - "customerProfileId": 42, - "totalAmount": 121, - "touchPointId": 1, - "language": - { - "languageId": 1, - "name": "Nederlands", - "iso639Code": "nl-NL", - "ietfCode": "nl", - }, - "billingAddressId": 1, - "shippingAddressId": 1, - "createdOn": "2024-03-22T09:00:00", - "lastUpdatedOn": "2024-03-22T09:00:00", - "order_OrderStatus": - [ + { + [ + { + "orderId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d", + "externalOrderId": "bac3958b-804a-43e3-b5f7-0b0fffaae5b7", + "orderNumber": "123456", + "customerProfileId": 42, + "totalAmount": 121, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, + "language": + { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl", + }, + "billingAddressId": 1, + "shippingAddressId": 1, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": { "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", "orderStatus": { "orderStatusId": 4, "name": "paid" }, "createdOn": "2024-03-22T09:00:00", "description": "Order succesvol betaald", }, - { - "order_orderStatusId": "2b9b7943-3a74-4f2e-ad65-012b62c80821", - "orderStatus": - { "orderStatusId": 3, "name": "pendingPayment" }, - "createdOn": "2024-03-22T08:55:00", - "description": "Betaling in behandeling", - }, - ], - }, - ] + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "mandateInput": + { + "directDebitMandateTypeId": 1, + "createdOn": "2024-03-22T09:00:00", + "bic": "RABONL2U", + "iban": "NL44RABO0123456789", + "ascription": "J. de Vries", + "place": "Den Haag", + }, + }, + ], + }, + "_links": + { + "self": + { + "href": "string", + "method": "string", + "templated": true, + }, + }, + ], + "href": null, + } /orders: parameters: - in: header @@ -679,7 +719,13 @@ paths: "externalOrderId": null, "customerProfileId": 1337, "totalAmount": 121, - "touchPointId": 1, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, "languageId": 1, "billingAddressId": 1, "shippingAddressId": 1, -- 2.45.2 From f065cb8072a3d5987d7890f8dd669620cfa06b43 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 21 Nov 2024 11:10:48 +0100 Subject: [PATCH 014/372] OVPAY-108 - Fixed JSON error. --- src/openapi/orders/service_engine_orders.yaml | 143 ++++++++++-------- 1 file changed, 77 insertions(+), 66 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index b9af7d6..31c4e6b 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -620,81 +620,92 @@ paths: $ref: "#/components/schemas/unavailable" example: { - [ - { - "orderId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d", - "externalOrderId": "bac3958b-804a-43e3-b5f7-0b0fffaae5b7", - "orderNumber": "123456", - "customerProfileId": 42, - "totalAmount": 121, - "touchPoint": - { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailerId": 1001, - }, - "language": - { - "languageId": 1, - "name": "Nederlands", - "iso639Code": "nl-NL", - "ietfCode": "nl", - }, - "billingAddressId": 1, - "shippingAddressId": 1, - "createdOn": "2024-03-22T09:00:00", - "lastUpdatedOn": "2024-03-22T09:00:00", - "order_OrderStatus": - { - "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", - "orderStatus": { "orderStatusId": 4, "name": "paid" }, - "createdOn": "2024-03-22T09:00:00", - "description": "Order succesvol betaald", - }, - "payments": - [ + "orders": + [ + { + "orderId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d", + "externalOrderId": "bac3958b-804a-43e3-b5f7-0b0fffaae5b7", + "orderNumber": "123456", + "customerProfileId": 42, + "totalAmount": 121, + "touchPoint": { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, + "language": + { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl", + }, + "billingAddressId": 1, + "shippingAddressId": 1, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": + { "orderStatusId": 4, "name": "paid" }, "createdOn": "2024-03-22T09:00:00", - "amountDebit": 121, - "paymentMethodId": 1, - "touchPointId": 1, - "isRefund": false, - "htmPaymentReference": "HTM-1234", - "pspPaymentReference": "Buckaroo-1234", - "paymentStatuses": - [ + "description": "Order succesvol betaald", + }, + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "mandateInput": { + "directDebitMandateTypeId": 1, "createdOn": "2024-03-22T09:00:00", - "statusCode": "190", - "statusDescription": "Success", - "statusSubCode": "S001", - "statusSubDescription": "PaymentSuccessFul", + "bic": "RABONL2U", + "iban": "NL44RABO0123456789", + "ascription": "J. de Vries", + "place": "Den Haag", }, - ], - "mandateInput": + }, + ], + "_links": + { + "self": { - "directDebitMandateTypeId": 1, - "createdOn": "2024-03-22T09:00:00", - "bic": "RABONL2U", - "iban": "NL44RABO0123456789", - "ascription": "J. de Vries", - "place": "Den Haag", + "href": "https://api.example.com/items/1", + "method": "GET", + "templated": true, }, }, - ], - }, - "_links": - { - "self": - { - "href": "string", - "method": "string", - "templated": true, - }, }, - ], - "href": null, + ], + "_links": + { + "self": + { + "href": "https://api.example.com/items", + "method": "GET", + "templated": true, + }, + }, + "href": "string", } /orders: parameters: -- 2.45.2 From eab79163cfb971c984053322e9dc94d2d8b80c75 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Mon, 25 Nov 2024 17:03:28 +0100 Subject: [PATCH 015/372] First commit, still WIP --- src/openapi/customers/SE-customers.yaml | 54 +++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/openapi/customers/SE-customers.yaml diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml new file mode 100644 index 0000000..6e4a7a8 --- /dev/null +++ b/src/openapi/customers/SE-customers.yaml @@ -0,0 +1,54 @@ +openapi: 3.0.1 +info: + title: Service Engine APIs for Customers + description: >- + Service Engine APIs for HTM Customers. These are NOT the CRUD APIs to access raw data in the database. + To be used by touchpoints to get information about HTM customers. + version: '1.0' +servers: + - url: https://api.integratielaag.nl/abt/serviceengine/customers/1.0 +tags: + - name: ServiceEngine Customers + description: >- + Service Engine APIs for HTM Customers. These are NOT the CRUD APIs to access raw data in the database. + To be used by touchpoints to get information about HTM customers. +paths: + /customers/tokens/{tokenId}/product-instances: + get: + tags: + - ServiceEngine Customers + summary: Get a list of all HTM products instantiated on the given OvPayToken + description: |- + Get a list of all HTM products instantiated on the given OvPayToken. + Only HTM products are returned; GBO does not allow HTM to get information on non-HTM product-instances. + Where relevant, operations to be performed are returned as HATEOAS links per product-instance. + parameters: + - name: tokenId + in: path + required: true + style: simple + description: Id of the OvPayToken to get product-instances for. + schema: + type: integer + example: 1 + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/TokenProductInstancesResponse' + examples: + getEmptyProductInstances: + summary: No product-instances found on token + value: + Entries: [] +components: + schemas: + TokenProductInstancesResponse: + type: object + required: + - Entries + properties: + Entries: + type: array -- 2.45.2 From 8e2ad79b5309042aeb6cd26f28900bb820c9aed6 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 26 Nov 2024 15:34:55 +0100 Subject: [PATCH 016/372] OVPAY-1147 - Added pagination. --- src/openapi/customer/customers-crud-v2.yaml | 36 ++++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/openapi/customer/customers-crud-v2.yaml b/src/openapi/customer/customers-crud-v2.yaml index e7ea50b..c491563 100644 --- a/src/openapi/customer/customers-crud-v2.yaml +++ b/src/openapi/customer/customers-crud-v2.yaml @@ -109,22 +109,26 @@ paths: schema: $ref: "#/components/schemas/unavailable" example: - [ - { - "ovPayTokenId": 71, - "customerProfileId": 12, - "tokenType": - { "tokenTypeId": 2, "name": "OV-pas physical" }, - "xTat": "700b0516-bf8b-4e6e-bf16-13bfeb078e23", - "xBot": "de1a9a7a-a777-4473-889c-44a3bb07daae", - "alias": "Mijn OV-pas", - "lastDigits": 3301, - "ovpasNumber": "63AW974", - "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, - "expirationDate": "2029-03-22T09:00:00", - "replacedByTokenId": 12, - }, - ] + { + "ovPayTokens": + [ + { + "ovPayTokenId": 71, + "customerProfileId": 12, + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "xTat": "700b0516-bf8b-4e6e-bf16-13bfeb078e23", + "xBot": "de1a9a7a-a777-4473-889c-44a3bb07daae", + "alias": "Mijn OV-pas", + "lastDigits": 3301, + "ovpasNumber": "63AW974", + "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2029-03-22T09:00:00", + "replacedByTokenId": 12, + }, + ], + "href": null, + } components: securitySchemes: bearerToken: -- 2.45.2 From bfea9a5967ae4e53a0642fc672e737113c2afc31 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 2 Dec 2024 10:46:08 +0100 Subject: [PATCH 017/372] OVPAY-754 - Fixed PR remarks. Thanks maks. --- src/openapi/customers/customers-crud-v2.yaml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 6a2d28e..7acbffe 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -27,13 +27,6 @@ paths: example: 12 required: false description: The id of the customer related to the mandate. - - in: query - name: customerNumber - schema: - type: integer - example: 14 - required: false - description: The number of the customer related to the mandate. - in: query name: billingInformationId schema: @@ -119,9 +112,12 @@ paths: { "directDebitMandateId": 71, "customerProfileId": 12, - "customerNumber": 14, "billingInformationId": 51, - "directDebitMandateTypeId": 5, + "directDebitMandateType": { + "directDebitMandateTypeId": 1, + "name": "import", + "description": "import" + }, "mandateAddressId": 21, "created": "2024-03-22T08:55:00", "mandateReference": "CORE01", -- 2.45.2 From 9cde41bfc3499a88c24f342362bef7c05e6701cc Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 2 Dec 2024 10:58:46 +0100 Subject: [PATCH 018/372] Update customer YAMLs on develop. --- src/openapi/customer/customers-crud-v2.yaml | 166 - src/openapi/customers/customers-crud-v2.yaml | 123 + src/openapi/customers/customers.yaml | 5376 +++++++++++++++++ .../customers/customers_reference-crud.yaml | 1047 ++++ 4 files changed, 6546 insertions(+), 166 deletions(-) delete mode 100644 src/openapi/customer/customers-crud-v2.yaml create mode 100644 src/openapi/customers/customers.yaml create mode 100644 src/openapi/customers/customers_reference-crud.yaml diff --git a/src/openapi/customer/customers-crud-v2.yaml b/src/openapi/customer/customers-crud-v2.yaml deleted file mode 100644 index c491563..0000000 --- a/src/openapi/customer/customers-crud-v2.yaml +++ /dev/null @@ -1,166 +0,0 @@ -openapi: "3.0.3" -info: - title: ABT Customers CRUD APIs v2 - version: "1.0" - description: CRUD APIs for ABT Customer database. These are NOT the functional APIs from Service Engine. -servers: - - url: https://api.integratielaag.nl/v1 -paths: - /ovpaytokens: - get: - tags: - - Token - summary: Find OVpay tokens. - description: Find OVpay tokens. - parameters: - - in: query - name: ovPayTokenId - schema: - type: integer - example: 71 - required: false - description: The id of the token. - - in: query - name: customerProfileId - schema: - type: integer - example: 12 - required: false - description: The id of the customer profile. - - in: query - name: tokenTypeId - schema: - type: array - items: - type: integer - example: [1, 2] - explode: false - required: false - description: Filter on possible token types. 1 = EMV, 2 = OV-pas physical, 3 = OV-pas digital. - - in: query - name: xTat - schema: - type: string - format: uuid - example: 700b0516-bf8b-4e6e-bf16-13bfeb078e23 - explode: false - required: false - description: The XTAT of the token. - - in: query - name: xBot - schema: - type: string - format: uuid - example: de1a9a7a-a777-4473-889c-44a3bb07daae - explode: false - required: false - description: The XBOT of the token. - - in: query - name: alias - schema: - type: string - example: Mijn OV-pas - required: false - description: The alias of the token. - - in: query - name: lastDigits - schema: - type: integer - example: 3301 - required: false - description: The last digits of the token. - - in: query - name: ovpasNumber - schema: - type: string - example: 63AW974 - required: false - description: Number of the OVpas. - - in: query - name: tokenStatusId - schema: - type: array - items: - type: integer - example: [1, 2] - explode: false - required: false - description: Filter on possible token statuses. 1 = expired, 2 = active, 3 = replaced, 4 = inactive, 5 = suspended, 6 = removed by customer. - - in: query - name: expirationDate - schema: - type: string - format: date-time - example: 2029-03-22T09:00:00 - required: false - description: The expiration date of the token. - - in: query - name: replacedByTokenId - schema: - type: integer - example: 12 - required: false - description: The id of the token that replaced this token. - responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - example: - { - "ovPayTokens": - [ - { - "ovPayTokenId": 71, - "customerProfileId": 12, - "tokenType": - { "tokenTypeId": 2, "name": "OV-pas physical" }, - "xTat": "700b0516-bf8b-4e6e-bf16-13bfeb078e23", - "xBot": "de1a9a7a-a777-4473-889c-44a3bb07daae", - "alias": "Mijn OV-pas", - "lastDigits": 3301, - "ovpasNumber": "63AW974", - "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, - "expirationDate": "2029-03-22T09:00:00", - "replacedByTokenId": 12, - }, - ], - "href": null, - } -components: - securitySchemes: - bearerToken: - type: http - scheme: bearer - bearerFormat: JWT - schemas: - unavailable: - type: object - rfc9457: - type: object - properties: - type: - type: string - format: url - example: https://example.com/probs/out-of-credit - title: - type: string - example: You do not have enough credit. - detail: - type: string - example: Your current balance is 30, but that costs 50. - instance: - type: string - example: /account/12345/msgs/abc - balance: - type: string - example: 30 - accounts: - type: array - items: - type: string - example: - - /account/12345 - - /account/67890 diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 7acbffe..72ef1eb 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -6,6 +6,129 @@ info: servers: - url: https://api.integratielaag.nl/v1 paths: + /ovpaytokens: + get: + tags: + - Token + summary: Find OVpay tokens. + description: Find OVpay tokens. + parameters: + - in: query + name: ovPayTokenId + schema: + type: integer + example: 71 + required: false + description: The id of the token. + - in: query + name: customerProfileId + schema: + type: integer + example: 12 + required: false + description: The id of the customer profile. + - in: query + name: tokenTypeId + schema: + type: array + items: + type: integer + example: [1, 2] + explode: false + required: false + description: Filter on possible token types. 1 = EMV, 2 = OV-pas physical, 3 = OV-pas digital. + - in: query + name: xTat + schema: + type: string + format: uuid + example: 700b0516-bf8b-4e6e-bf16-13bfeb078e23 + explode: false + required: false + description: The XTAT of the token. + - in: query + name: xBot + schema: + type: string + format: uuid + example: de1a9a7a-a777-4473-889c-44a3bb07daae + explode: false + required: false + description: The XBOT of the token. + - in: query + name: alias + schema: + type: string + example: Mijn OV-pas + required: false + description: The alias of the token. + - in: query + name: lastDigits + schema: + type: integer + example: 3301 + required: false + description: The last digits of the token. + - in: query + name: ovpasNumber + schema: + type: string + example: 63AW974 + required: false + description: Number of the OVpas. + - in: query + name: tokenStatusId + schema: + type: array + items: + type: integer + example: [1, 2] + explode: false + required: false + description: Filter on possible token statuses. 1 = expired, 2 = active, 3 = replaced, 4 = inactive, 5 = suspended, 6 = removed by customer. + - in: query + name: expirationDate + schema: + type: string + format: date-time + example: 2029-03-22T09:00:00 + required: false + description: The expiration date of the token. + - in: query + name: replacedByTokenId + schema: + type: integer + example: 12 + required: false + description: The id of the token that replaced this token. + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "ovPayTokens": + [ + { + "ovPayTokenId": 71, + "customerProfileId": 12, + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "xTat": "700b0516-bf8b-4e6e-bf16-13bfeb078e23", + "xBot": "de1a9a7a-a777-4473-889c-44a3bb07daae", + "alias": "Mijn OV-pas", + "lastDigits": 3301, + "ovpasNumber": "63AW974", + "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2029-03-22T09:00:00", + "replacedByTokenId": 12, + }, + ], + "href": null, + } /directdebitmandates: get: tags: diff --git a/src/openapi/customers/customers.yaml b/src/openapi/customers/customers.yaml new file mode 100644 index 0000000..65a9763 --- /dev/null +++ b/src/openapi/customers/customers.yaml @@ -0,0 +1,5376 @@ +openapi: 3.0.1 +info: + title: ABTCustomers + version: '1.0' +servers: + - url: https://services.acc.api.htm.nl/abt/abtcustomers/1.0 + - url: http://services.acc.api.htm.nl/abt/abtcustomers/1.0 +security: + - default: [] +tags: + - name: ABTCustomers + - name: ABTCustomersSelfService + - name: ABTCustomersFinancials + - name: ABTCustomersFinancialsSelfService +paths: + /customers/{customerNumber}/financials/directdebitmandates/{directDebitMandateId}: + patch: + tags: + - ABTCustomersFinancials + summary: Modify direct debit mandate information for a customer profile. + description: Modify direct debit mandate for a customer profile. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: directDebitMandateId + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/directDebitMandatePatch' + examples: + updateFullDirectDebitMandate: + value: + directDebitMandate: + directDebitMandateTypeId: 1 + billingInformationId: 1 + mandateAddressId: 2 + mandateReference: Dit is een test Reference + mandateState: SIGNED + updateDirectDebitMandateType: + value: + directDebitMandate: + directDebitMandateTypeId: 1 + updateBillingInformationId: + value: + directDebitMandate: + billingInformationId: 2 + updateMandateAddressId: + value: + directDebitMandate: + mandateAddressId: 3 + updateMandateReference: + value: + directDebitMandate: + mandateReference: Updated Reference + updateMandateState: + value: + directDebitMandate: + mandateState: PREPARED + required: true + responses: + '201': + description: Successful created financial information for a customer profile. + content: + application/json: + schema: + $ref: >- + #/components/schemas/patchCustomerProfileCustomerNumberResponse + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/financials/billinginformation/{billingInformationId}: + patch: + tags: + - ABTCustomersFinancials + summary: Modify billing information for a customer profile. + description: Modify billing information for a customer profile. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: billingInformationId + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/billingInformationPatch' + examples: + updateFullBillingInformation: + value: + billingInformation: + issuerCountry: NL + iban: '1234567890' + bic: ING + swift: Swift + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 2 + updateIssuerCountry: + value: + billingInformation: + issuerCountry: DE + updateIban: + value: + billingInformation: + iban: '0987654321' + updateBic: + value: + billingInformation: + bic: DEUT + updateSwift: + value: + billingInformation: + swift: UpdatedSwift + updateAscription: + value: + billingInformation: + ascription: Updated Ascription + updateAlias: + value: + billingInformation: + alias: Updated Alias + updateBillingAddressId: + value: + billingInformation: + billingAddressId: 3 + required: true + responses: + '201': + description: Successful created financial information for a customer profile. + content: + application/json: + schema: + $ref: >- + #/components/schemas/patchCustomerProfileCustomerNumberResponse + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/financials/billinginformation: + post: + tags: + - ABTCustomersFinancials + summary: Create billing information for a customer profile. + description: Create billing information for a customer profile. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/billingInformationPost' + examples: + fullFinancialInformation: + value: + billingInformation: + issuerCountry: NL + iban: '1234567890' + bic: ING + swift: Swift + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 2 + minimumBillingInformation: + value: + billingInformation: + issuerCountry: NL + iban: '1234567890' + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 2 + required: true + responses: + '201': + description: Successful created financial information for a customer profile. + content: + application/json: + schema: + $ref: >- + #/components/schemas/postCustomerProfileBillingInformationResponse + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/financials/directdebitmandates: + post: + tags: + - ABTCustomersFinancials + summary: Create direct debit mandate for a customer profile. + description: Create direct debit mandate for a customer profile. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/directDebitMandatePost' + examples: + fullFinancialInformation: + value: + directDebitMandate: + directDebitMandateTypeId: 1 + billingInformationId: 1 + mandateAddressId: 2 + created: '1900-01-01T00:00:00.000' + mandateReference: Dit is een test Reference + minimumdirectDebitMandate: + value: + directDebitMandate: + directDebitMandateTypeId: 1 + billingInformationId: 1 + mandateAddressId: 2 + created: '1900-01-01T00:00:00.000' + mandateReference: Dit is een test Reference + required: true + responses: + '201': + description: Successful created financial information for a customer profile. + content: + application/json: + schema: + $ref: >- + #/components/schemas/postCustomerProfileDirectDebitMandateResponse + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/financials: + get: + tags: + - ABTCustomersFinancials + summary: Search for customer profile financial information + description: 'search for a customer profile in the ABT database with query parameters ' + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Successful retrieved a customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/getCustomerProfileFinancials' + examples: + fullFinancialInformation: + value: + customerNumber: 1000003 + billingInformation: + - billingInformationId: 1 + issuerCountry: NL + iban: '1234567890' + bic: ING + swift: Swift + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 2 + - billingInformationId: 2 + issuerCountry: BE + iban: '0987654321' + bic: null + swift: null + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 3 + directDebitMandate: + - directDebitMandateId: 1 + directDebitMandateTypeName: PIN Transaction + billingInformationId: 1 + mandateAddressId: 2 + created: '1900-01-01T00:00:00.000' + mandateReference: Dit is een test Reference + mandateState: SIGNED + updateTimestamp: '2024-01-01T00:00:00.00' + - directDebitMandateId: 2 + directDebitMandateTypeName: Paper Contract + billingInformationId: 1 + mandateAddressId: 2 + created: '1900-01-01T00:00:00.000' + mandateReference: Dit is een test Reference + mandateState: CANCELLED + updateTimestamp: '2024-01-01T00:00:00.00' + missingBillingInformation: + value: + customerNumber: 1000003 + billingInformation: [] + directDebitMandate: + - directDebitMandateId: 1 + directDebitMandateTypeName: PIN transaction + billingInformationId: 1 + mandateAddressId: 2 + created: '1900-01-01T00:00:00.000' + mandateReference: Dit is een test Reference + - directDebitMandateId: 2 + directDebitMandateTypeName: Paper Contract + billingInformationId: 1 + mandateAddressId: 2 + created: '1900-01-01T00:00:00.000' + mandateReference: Dit is een test Reference + missingDebitMandateInformation: + value: + customerNumber: 1000003 + billingInformation: + - billingInformationId: 1 + issuerCountry: NL + iban: '1234567890' + bic: ING + swift: Swift + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 2 + - billingInformationId: 2 + issuerCountry: BE + iban: '0987654321' + bic: null + swift: null + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 3 + directDebitMandate: [] + minimumFinancialInformation: + value: + customerNumber: 1000003 + billingInformation: [] + directDebitMandate: [] + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/financials/directdebitmandates/{directDebitMandateId}: + patch: + tags: + - ABTCustomersFinancialsSelfService + summary: Modify direct debit mandate information for a customer profile. + description: Modify direct debit mandate for a customer profile. + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: directDebitMandateId + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/directDebitMandatePatch' + examples: + updateFullDirectDebitMandate: + value: + directDebitMandate: + directDebitMandateTypeId: 1 + billingInformationId: 1 + mandateAddressId: 2 + mandateReference: Dit is een test Reference + mandateState: SIGNED + updateDirectDebitMandateType: + value: + directDebitMandate: + directDebitMandateTypeId: 1 + updateBillingInformationId: + value: + directDebitMandate: + billingInformationId: 2 + updateMandateAddressId: + value: + directDebitMandate: + mandateAddressId: 3 + updateMandateReference: + value: + directDebitMandate: + mandateReference: Updated Reference + updateMandateState: + value: + directDebitMandate: + mandateState: PREPARED + required: true + responses: + '201': + description: Successful created financial information for a customer profile. + content: + application/json: + schema: + $ref: >- + #/components/schemas/patchCustomerProfileCustomerNumberResponse + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/financials/billinginformation/{billingInformationId}: + patch: + tags: + - ABTCustomersFinancialsSelfService + summary: Modify billing information for a customer profile. + description: Modify billing information for a customer profile. + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: billingInformationId + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/billingInformationPatch' + examples: + updateFullBillingInformation: + value: + billingInformation: + issuerCountry: NL + iban: '1234567890' + bic: ING + swift: Swift + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 2 + updateIssuerCountry: + value: + billingInformation: + issuerCountry: DE + updateIban: + value: + billingInformation: + iban: '0987654321' + updateBic: + value: + billingInformation: + bic: DEUT + updateSwift: + value: + billingInformation: + swift: UpdatedSwift + updateAscription: + value: + billingInformation: + ascription: Updated Ascription + updateAlias: + value: + billingInformation: + alias: Updated Alias + updateBillingAddressId: + value: + billingInformation: + billingAddressId: 3 + required: true + responses: + '201': + description: Successful created financial information for a customer profile. + content: + application/json: + schema: + $ref: >- + #/components/schemas/patchCustomerProfileCustomerNumberResponse + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/financials/billinginformation: + post: + tags: + - ABTCustomersFinancialsSelfService + summary: Create billing information for a customer profile. + description: Create billing information for a customer profile. + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/billingInformationPost' + examples: + fullFinancialInformation: + value: + billingInformation: + issuerCountry: NL + iban: '1234567890' + bic: ING + swift: Swift + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 2 + minimumBillingInformation: + value: + billingInformation: + issuerCountry: NL + iban: '1234567890' + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 2 + required: true + responses: + '201': + description: Successful created financial information for a customer profile. + content: + application/json: + schema: + $ref: >- + #/components/schemas/postCustomerProfileBillingInformationResponse + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/financials/directdebitmandates: + post: + tags: + - ABTCustomersFinancialsSelfService + summary: Create direct debit mandate for a customer profile. + description: Create direct debit mandate for a customer profile. + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/directDebitMandatePost' + examples: + fullFinancialInformation: + value: + directDebitMandate: + directDebitMandateTypeId: 1 + billingInformationId: 1 + mandateAddressId: 2 + created: '1900-01-01T00:00:00.000' + mandateReference: Dit is een test Reference + minimumdirectDebitMandate: + value: + directDebitMandate: + directDebitMandateTypeId: 1 + billingInformationId: 1 + mandateAddressId: 2 + created: '1900-01-01T00:00:00.000' + mandateReference: Dit is een test Reference + required: true + responses: + '201': + description: Successful created financial information for a customer profile. + content: + application/json: + schema: + $ref: >- + #/components/schemas/postCustomerProfileDirectDebitMandateResponse + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/financials: + get: + tags: + - ABTCustomersFinancialsSelfService + summary: Search for customer profile financial information + description: 'search for a customer profile in the ABT database with query parameters ' + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '200': + description: Successful retrieved a customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/getCustomerProfileFinancials' + examples: + fullFinancialInformation: + value: + customerNumber: 1000003 + billingInformation: + - billingInformationId: 1 + issuerCountry: NL + iban: '1234567890' + bic: ING + swift: Swift + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 2 + updateTimestamp: '2024-01-01T00:00:00.00' + - billingInformationId: 2 + issuerCountry: BE + iban: '0987654321' + bic: null + swift: null + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 3 + updateTimestamp: '2024-01-01T00:00:00.00' + directDebitMandate: + - directDebitMandateId: 1 + directDebitMandateTypeName: PIN transaction + billingInformationId: 1 + mandateAddressId: 2 + created: '1900-01-01T00:00:00.000' + mandateReference: Dit is een test Reference + mandateState: SIGNED + - directDebitMandateId: 2 + directDebitMandateTypeName: Paper Contract + billingInformationId: 1 + mandateAddressId: 2 + created: '1900-01-01T00:00:00.000' + mandateReference: Dit is een test Reference + mandateState: CANCELLED + missingBillingInformation: + value: + customerNumber: 1000003 + billingInformation: [] + directDebitMandate: + - directDebitMandateId: 1 + directDebitMandateTypeName: PIN transaction + billingInformationId: 1 + mandateAddressId: 2 + created: '1900-01-01T00:00:00.000' + mandateReference: Dit is een test Reference + - directDebitMandateId: 2 + directDebitMandateTypeName: Paper Contract + billingInformationId: 1 + mandateAddressId: 2 + created: '1900-01-01T00:00:00.000' + mandateReference: Dit is een test Reference + missingDebitMandateInformation: + value: + customerNumber: 1000003 + billingInformation: + - billingInformationId: 1 + issuerCountry: NL + iban: '1234567890' + bic: ING + swift: Swift + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 2 + - billingInformationId: 2 + issuerCountry: BE + iban: '0987654321' + bic: null + swift: null + ascription: Dit is een Test + alias: Alias Test + billingAddressId: 3 + directDebitMandate: [] + minimumFinancialInformation: + value: + customerNumber: 1000003 + billingInformation: [] + directDebitMandate: [] + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/list: + get: + tags: + - ABTCustomers + summary: Search for customer profile list + description: >- + search for a customer profile list in the ABT database with query + parameters + parameters: + - name: customerProfileId + in: query + required: false + style: form + explode: true + schema: + type: number + - name: customerNumber + in: query + required: false + style: form + explode: true + schema: + type: number + - name: emailAddress + in: query + required: false + style: form + explode: true + schema: + type: string + - name: chipCardNumber + in: query + required: false + style: form + explode: true + schema: + type: string + - name: ovPasNumber + in: query + required: false + style: form + explode: true + schema: + type: string + - name: phoneNumber + in: query + required: false + style: form + explode: true + schema: + type: string + - name: phoneCountryCode + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressStreet + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressHouseNumber + in: query + required: false + style: form + explode: true + schema: + type: number + - name: addressHouseNumberSuffix + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressPostalCode + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressCity + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressCountry + in: query + required: false + style: form + explode: true + schema: + type: string + - name: birthname + in: query + required: false + style: form + explode: true + schema: + type: string + - name: surname + in: query + required: false + style: form + explode: true + schema: + type: string + - name: dateOfBirth + in: query + required: false + style: form + explode: true + schema: + type: string + - name: customerStatus + in: query + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Successful retrieved a customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/getCustomerProfileList' + examples: + fullCustomerProfile: + value: + Entries: + - customerProfileId: 1 + customerNumber: 1000001 + debtorNumber: TEST001 + debtorStateId: 1 + vascustomerNumber: CST005 + customerPreference: + languageId: 1 + customerStatus: + - name: active + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: '2022-08-05 15:01:00.000' + - name: blocked + fromInclusive: '2022-08-05 15:01:00.000' + toInclusive: null + person: + birthname: Pieter + surname: De valen + prefix: dhr + suffix: De + dateOfBirth: '2002-10-29' + emailAddress: TEST@HTM.NL + address: + - addressId: 1 + street: mystreet + houseNumber: 1 + houseNumberSuffix: null + postalCode: 0000AA + city: Den Haag + country: NL + isPreferred: true + addressType: Office + - addressId: 2 + street: mystreet 33 + houseNumber: 1 + houseNumberSuffix: null + postalCode: 4455CA + city: Den BOSCH + country: NL + isPreferred: true + addressType: Office + phone: + - phoneId: 1 + number: '3112345678' + countryCode: NL + phoneType: TestNaam + isPreferred: true + - phoneId: 2 + number: '333225588' + countryCode: ES + phoneType: TestNaam + isPreferred: false + ovChipCard: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: '2023-01-01' + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: '2025-01-01' + alias: alias + ovPayToken: + - ovPayTokenId: 126 + tokenTypeId: 1 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 1 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenTypeId: 1 + xTat: hhe2830283 + xBot: jdhd828033 + alias: alias + lastDigits: '5674' + ovpasNumber: OV34568 + tokenStatusId: 1 + expirationDate: '2024-04-20T17:05:52.000+02:00' + replacedByTokenId: 2 + audit: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: '2023-10-20T17:05:52.000+02:00' + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + - customerNumber: 1000002 + debtorNumber: TEST001 + debtorStateId: 1 + vascustomerNumber: CST005 + customerPreference: + languageId: 1 + customerStatus: + - name: active + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: '2022-08-05 15:01:00.000' + - name: blocked + fromInclusive: '2022-08-05 15:01:00.000' + toInclusive: null + person: + birthname: Pieter + surname: De valen + prefix: dhr + suffix: De + dateOfBirth: '2002-10-29' + emailAddress: TEST@HTM.NL + address: + - addressId: 1 + street: mystreet + houseNumber: 1 + houseNumberSuffix: null + postalCode: 0000AA + city: Den Haag + country: NL + isPreferred: true + addressType: Office + - addressId: 2 + street: mystreet 33 + houseNumber: 1 + houseNumberSuffix: null + postalCode: 4455CA + city: Den BOSCH + country: NL + isPreferred: true + addressType: Office + phone: + - phoneId: 1 + number: '3112345678' + countryCode: NL + phoneType: TestNaam + isPreferred: true + - phoneId: 2 + number: '333225588' + countryCode: ES + phoneType: TestNaam + isPreferred: false + ovChipCard: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: '2023-01-01' + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: '2025-01-01' + alias: alias + ovPayToken: + - ovPayTokenId: 126 + tokenTypeId: 1 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 1 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenTypeId: 1 + xTat: hhe2830283 + xBot: jdhd828033 + alias: alias + lastDigits: '5674' + ovpasNumber: OV34568 + tokenStatusId: 1 + expirationDate: '2024-04-20T17:05:52.000+02:00' + replacedByTokenId: 2 + audit: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: '2023-10-20T17:05:52.000+02:00' + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + href: null + minimumCustomerProfile: + value: + Entries: + - customerNumber: 1000008 + debtorNumber: null + debtorStateId: null + vascustomerNumber: null + customerPreference: + languageId: null + customerStatus: + - name: active + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: null + person: + birthname: null + surname: null + prefix: null + suffix: null + dateOfBirth: null + emailAddress: TEST@TEST1.NL + address: [] + phone: [] + ovChipCard: [] + ovPayToken: [] + audit: [] + missingPersonDetailsCustomerProfile: + value: + Entries: + - emailAddress: TEST04@HTM.NL + customerNumber: 1000005 + debtorNumber: TEST004 + debtorStateId: 1 + vascustomerNumber: CST005 + customerPreference: + languageId: 1 + customerStatus: + - name: inactive + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: null + person: + birthname: Sophie + surname: Haardenburg + prefix: Mw + suffix: null + dateOfBirth: 1955-09-05+01:00 + emailAddress: TEST@TEST1.NL + address: [] + phone: [] + ovChipCard: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: '2023-01-01' + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: '2025-01-01' + alias: alias + ovPayToken: + - ovPayTokenId: 126 + tokenTypeId: 1 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 1 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenTypeId: 1 + xTat: hhe2830283 + xBot: jdhd828033 + alias: alias + lastDigits: '5674' + ovpasNumber: OV34568 + tokenStatusId: 1 + expirationDate: '2024-04-20T17:05:52.000+02:00' + replacedByTokenId: 2 + audit: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: '2023-10-20T17:05:52.000+02:00' + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers: + get: + tags: + - ABTCustomers + summary: Search for customer profile + description: 'search for a customer profile in the ABT database with query parameters ' + parameters: + - name: customerProfileId + in: query + required: false + style: form + explode: true + schema: + type: number + - name: customerNumber + in: query + required: false + style: form + explode: true + schema: + type: number + - name: emailAddress + in: query + required: false + style: form + explode: true + schema: + type: string + - name: chipCardNumber + in: query + required: false + style: form + explode: true + schema: + type: string + - name: ovPasNumber + in: query + required: false + style: form + explode: true + schema: + type: string + - name: phoneNumber + in: query + required: false + style: form + explode: true + schema: + type: string + - name: phoneCountryCode + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressStreet + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressHouseNumber + in: query + required: false + style: form + explode: true + schema: + type: number + - name: addressHouseNumberSuffix + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressPostalCode + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressCity + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressCountry + in: query + required: false + style: form + explode: true + schema: + type: string + - name: birthname + in: query + required: false + style: form + explode: true + schema: + type: string + - name: surname + in: query + required: false + style: form + explode: true + schema: + type: string + - name: dateOfBirth + in: query + required: false + style: form + explode: true + schema: + type: string + - name: customerStatus + in: query + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Successful retrieved a customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/getCustomerProfile' + examples: + fullCustomerProfile: + value: + customerProfileId: 1 + customerNumber: 1000001 + debtorNumber: TEST001 + vascustomerNumber: CST005 + debtorStateId: 1 + customerPreference: + languageId: 1 + customerStatus: + - name: active + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: '2022-08-05 15:01:00.000' + - name: blocked + fromInclusive: '2022-08-05 15:01:00.000' + toInclusive: null + person: + birthname: Pieter + surname: De valen + prefix: dhr + suffix: De + dateOfBirth: '2002-10-29' + emailAddress: TEST@HTM.NL + address: + - addressId: 1 + street: mystreet + houseNumber: 1 + houseNumberSuffix: null + postalCode: 0000AA + city: Den Haag + country: NL + isPreferred: true + addressType: Office + - addressId: 2 + street: mystreet 33 + houseNumber: 1 + houseNumberSuffix: null + postalCode: 4455CA + city: Den BOSCH + country: NL + isPreferred: true + addressType: Office + phone: + - phoneId: 1 + number: '3112345678' + countryCode: NL + phoneType: TestNaam + isPreferred: true + - phoneId: 2 + number: '333225588' + countryCode: ES + phoneType: TestNaam + isPreferred: false + ovChipCard: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: '2023-01-01' + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: '2025-01-01' + alias: alias + ovPayToken: + - ovPayTokenId: 126 + tokenTypeId: 1 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 1 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenTypeId: 1 + xTat: hhe2830283 + xBot: jdhd828033 + alias: alias + lastDigits: '5674' + ovpasNumber: OV34568 + tokenStatusId: 1 + expirationDate: '2024-04-20T17:05:52.000+02:00' + replacedByTokenId: 2 + audit: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: '2023-10-20T17:05:52.000+02:00' + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + minimumCustomerProfile: + value: + customerNumber: 1000008 + debtorNumber: null + debtorStateId: null + vascustomerNumber: null + customerPreference: + languageId: 1 + customerStatus: + - name: active + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: null + person: + birthname: null + surname: null + prefix: null + suffix: null + dateOfBirth: null + emailAddress: TEST@TEST1.NL + address: [] + phone: [] + ovChipCard: [] + ovPayToken: [] + audit: [] + missingPersonDetailsCustomerProfile: + value: + emailAddress: TEST04@HTM.NL + customerNumber: 1000005 + debtorNumber: TEST004 + debtorStateId: 1 + vascustomerNumber: CST008 + customerPreference: + languageId: 1 + customerStatus: + - name: inactive + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: null + person: + birthname: Sophie + surname: Haardenburg + prefix: Mw + suffix: null + dateOfBirth: '1955-09-05' + emailAddress: TEST@TEST1.NL + address: [] + phone: [] + ovChipCard: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: '2023-01-01' + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: '2025-01-01' + alias: alias + ovPayToken: + - ovPayTokenId: 126 + tokenTypeId: 1 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 1 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenTypeId: 1 + xTat: hhe2830283 + xBot: jdhd828033 + alias: alias + lastDigits: '5674' + ovpasNumber: OV34568 + tokenStatusId: 1 + expirationDate: '2024-04-20T17:05:52.000+02:00' + replacedByTokenId: 2 + audit: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: '2023-10-20T17:05:52.000+02:00' + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + post: + tags: + - ABTCustomers + summary: Create a customer profile + description: >- + Create a customer profile in the ABT database with status ACTIVE and + debtorStatus Inactive with a start date based on the timestamp of this + post call. + + - Requested format for postal code: + - 0000AA + parameters: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfile' + examples: + minimumProfile: + value: {} + basicCustomerProfile: + value: + debtorStatusId: 2 + person: + birthname: Jan + surname: Jansen + emailAddress: j.jansen@hatseflats.nl + fullCustomerProfile: + value: + customerPreference: + languageId: 1 + debtorStatusId: 2 + person: + birthname: Jan + surname: Jansen + prefix: dhr + suffix: jr + dateOfBirth: '1970-01-01' + emailAddress: j.jansen@hatseflats.nl + addresses: + - street: Laan van Meerdervoort + houseNumber: 5 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: true + addressTypeId: 1 + - street: Beeklaan + houseNumber: 30 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: false + addressTypeId: 2 + phones: + - number: '6123456789' + countryCode: '0031' + phoneTypeId: 1 + isPreferred: true + - number: '7012345678' + countryCode: '0031' + phoneTypeId: 2 + isPreferred: false + required: true + responses: + '201': + description: Successful created a customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfileCustomerNumberResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidPostalCodeFormatForAddressCountryNLError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter for country validation (NL). + description: >- + ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match + input string \"2500 AA\ + MissingRequiredParameterError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + object has missing required properties + ([\"addressTypeId\"]) + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"id\ + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + examples: + emailAddressAlreadyPresent: + value: + code: '409' + type: Conflict + message: emailAddress already exists. + description: '' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/customerpreferences: + patch: + tags: + - ABTCustomers + summary: Modify customer preference elements + description: Modify customer preference fields + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchCustomerPreferences' + examples: + PatchCustomerPreferences: + value: + customerPreference: + languageId: 2 + responses: + '202': + description: Successful modified the customer preferences + content: + application/json: + schema: + $ref: '#/components/schemas/patchCustomerPreferencesResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"languageId\ + InvalidReferenceIdError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request: Update Or Delete failed as conflicted with + foreign Key constraint 'languageId' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}: + patch: + tags: + - ABTCustomers + summary: Modify customer profile elements + description: Modify customer profile fields + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchCustomerProfile' + examples: + PatchCustomerProfile: + value: + debtorStatusId: 2 + responses: + '202': + description: Successful modified the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/patchCustomerProfileResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"debtorStatusId\ + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/ovchipcards: + post: + tags: + - ABTCustomers + summary: Create a new OV chipcard for a customerProfile. + description: Create a new OV chipcard in the database for a given customer. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postOvChipCard' + examples: + postNewOvChipCard: + value: + ovChipCard: + chipCardNumber: 1234123412341234 + validUntil: '2024-01-01' + alias: alias + responses: + '201': + description: Successful created an OV chipcard + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfileOvChipCardResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + chipCardNumberInvalidTooSmall: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + numeric instance is lower than the required minimum + (minimum: 1000000000000000, found: 999999999999999) + chipCardNumberInvalidTooLarge: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + numeric instance is greater than the required maximum + (maximum: 9999999999999999, found: 10000000000000000) + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/ovchipcards/{ovChipCardId}: + delete: + tags: + - ABTCustomers + summary: Delete a OV chipcard for a customerProfile. + description: Delete a OV chipcard in the database for a given customer. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: ovChipCardId + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '202': + description: Deleted record successfully + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/ovpaytokens: + get: + tags: + - ABTCustomers + summary: Get a OV paytoken for a customerProfile. + description: Get a new OV paytoken in the database for a given customer. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: ovPayTokenId + in: query + required: false + style: form + explode: false + schema: + type: integer + - name: xbot + in: query + required: false + style: form + explode: false + schema: + type: string + - name: xtat + in: query + required: false + style: form + explode: false + schema: + type: string + - name: ovPasNumber + in: query + required: false + style: form + explode: false + schema: + type: string + responses: + '200': + description: Successfully retrieved an OVPay token + content: + application/json: + schema: + $ref: '#/components/schemas/getCustomerProfileOvPayTokenResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + post: + tags: + - ABTCustomers + summary: Create a new OV paytoken for a customerProfile. + description: Create a new OV paytoken in the database for a given customer. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postOvPayToken' + examples: + postNewOvPayTokenCard: + value: + ovPayToken: + tokenTypeId: 2 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 2 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + responses: + '201': + description: Successful created an OVPay token + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfileOvPayTokenResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/statuses: + post: + tags: + - ABTCustomers + summary: Create a new customer status for a customerProfile. + description: >- + Create a new customer status for a customerProfile. The call will do the + following in the given order: a new status will be created with + fromInclusive equal to the time of the call. ToInclusive in the old, now + historic, status will also be set equal to the time of the call, deeming + it 'not currently active'. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerStatus' + examples: + postNewStatus: + value: + customerStatus: + name: blocked + responses: + '201': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/defaultCustomerProfileResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '422': + description: Unprocessable entity + content: + application/json: + schema: + $ref: '#/components/schemas/422Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/persons: + patch: + tags: + - ABTCustomers + summary: Partial update customer person details + description: Partial update a customer person details in the ABT database + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchPerson' + examples: + updatePerson: + value: + person: + birthname: Jan + surname: Jansen + prefix: dhr + suffix: jr + dateOfBirth: '1970-01-01' + emailAddress: TEST@TEST1.NL + updatePersonBirthname: + value: + person: + birthname: Jan + updatePersonSurname: + value: + person: + surname: Jansen + updatePersonPrefix: + value: + person: + prefix: dhr + updatePersonSuffix: + value: + person: + suffix: jr + updatePersonDateOfBirth: + value: + person: + dateOfBirth: '1970-01-01' + updatePersonEmailAddress: + value: + person: + emailAddress: TEST@TEST1.NL + responses: + '202': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/defaultCustomerProfileResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/ovpaytokens/{ovPayTokenId}: + delete: + tags: + - ABTCustomers + summary: Delete a OV PayToken for a customerProfile. + description: Delete a OV PayToken in the database for a given customer. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: ovPayTokenId + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '202': + description: Deleted record successfully + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + patch: + tags: + - ABTCustomers + summary: Partial update customer ovpaytokens + description: Partial update of a customer ovpaytokens in the ABT database + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: ovPayTokenId + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchOvPayToken' + examples: + updateOvPayTokens: + value: + ovPayToken: + tokenTypeId: 2 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 2 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + updateOvPayTokenTypeId: + value: + ovPayToken: + tokenTypeId: 2 + updateOvPayTokenXTat: + value: + ovPayToken: + xTat: twioq73033 + updateOvPayTokenXBot: + value: + ovPayToken: + xBot: hjihwqui27 + updateOvPayTokenAlias: + value: + ovPayToken: + alias: alias + updateOvPayTokenLastDigits: + value: + ovPayToken: + lastDigits: '5678' + updateOvPayTokenOvpasNumber: + value: + ovPayToken: + ovpasNumber: OV34567 + updateOvPayTokenStatusId: + value: + ovPayToken: + tokenStatusId: 1 + updateOvPayTokenExpirationDate: + value: + ovPayToken: + expirationDate: '2025-04-20T17:05:52.000+02:00' + updateOvPayTokenReplacedByTokenId: + value: + ovPayToken: + replacedByTokenId: 1 + responses: + '202': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/defaultCustomerProfileResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/addresses: + post: + tags: + - ABTCustomers + summary: Create a single customer address + description: Create a single customer address in the ABT database + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postAddress' + examples: + addFullAddress: + value: + address: + street: Laan van Meerdervoort + houseNumber: 5 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: true + addressTypeId: 1 + addMinimumAddress: + value: + address: + street: Laan van Meerdervoort + houseNumber: 5 + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: true + addressTypeId: 1 + responses: + '201': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfileAddressResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidPostalCodeFormatForAddressCountryNLError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter for country validation (NL). + description: >- + ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match + input string \"2500 AA\ + MissingRequiredParameterError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + object has missing required properties + ([\"addressTypeId\"]) + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"id\ + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/phones: + post: + tags: + - ABTCustomers + summary: Create a single customer phonenumber + description: Create a single customer phonenumber in the ABT database + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postPhone' + examples: + addPhone: + value: + phone: + number: '06123456789' + countryCode: '0031' + phoneTypeId: 1 + isPreferred: true + responses: + '201': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfilePhoneResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/addresses/{addressId}: + delete: + tags: + - ABTCustomers + summary: Delete a customer address + description: Delete a customer address from the ABT database + parameters: + - name: addressId + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '202': + description: Deleted record successfully + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + patch: + tags: + - ABTCustomers + summary: Partial update customer addresses + description: Partial update a customer address in the ABT database + parameters: + - name: addressId + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchAddress' + examples: + updateAddress: + value: + address: + street: Laan van Meerdervoort + houseNumber: 5 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + addressTypeId: 2 + isPreferred: true + updateStreet: + value: + address: + street: Nieuwe Parklaan + updateHouseNumber: + value: + address: + houseNumber: 10 + updateHouseNumberSuffix: + value: + address: + houseNumberSuffix: C + updatePostalCode: + value: + address: + postalCode: 2597LG + updateCity: + value: + address: + city: Amsterdam + updateCountry: + value: + address: + country: UK + updateAddressTypeId: + value: + address: + addressTypeId: 3 + updateIsPreferred: + value: + address: + isPreferred: false + responses: + '202': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/addressPatchOKResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidPostalCodeFormatForAddressCountryNLError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter for country validation (NL). + description: >- + ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match + input string \"2500 AA\ + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"id\ + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/phones/{phoneId}: + delete: + tags: + - ABTCustomers + summary: Delete a customer phone + description: Delete a customer phone from the ABT database + parameters: + - name: phoneId + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '202': + description: Deleted record successfully + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + patch: + tags: + - ABTCustomers + summary: Partial update customer phones + description: Partial update a customer phone in the ABT database + parameters: + - name: phoneId + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchPhone' + examples: + updatePhone: + value: + phone: + number: '06123456789' + countryCode: '0031' + phoneTypeId: 2 + isPreferred: true + updatePhoneNumber: + value: + phone: + number: '06987654321' + updateCountryCode: + value: + phone: + countryCode: '0044' + updatePhoneTypeId: + value: + phone: + phoneTypeId: 2 + updateisPreferred: + value: + phone: + isPreferred: true + responses: + '202': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/phonePatchOKResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers: + get: + tags: + - ABTCustomersSelfService + summary: Search for customer profile + description: Search for a customer profile based on the sub element from JWT + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + responses: + '200': + description: Successful retrieved a customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/getCustomerProfile' + examples: + fullCustomerProfile: + value: + customerNumber: 1000001 + debtorNumber: TEST001 + vascustomerNumber: CST005 + debtorStateId: 1 + customerPreference: + languageId: 1 + customerStatus: + - name: active + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: '2022-08-05 15:01:00.000' + - name: blocked + fromInclusive: '2022-08-05 15:01:00.000' + toInclusive: null + person: + birthname: Pieter + surname: De valen + prefix: dhr + suffix: De + dateOfBirth: '2002-10-29' + emailAddress: TEST@HTM.NL + address: + - addressId: 1 + street: mystreet + houseNumber: 1 + houseNumberSuffix: null + postalCode: 0000AA + city: Den Haag + country: NL + isPreferred: true + addressType: Office + - addressId: 2 + street: mystreet 33 + houseNumber: 1 + houseNumberSuffix: null + postalCode: 4455CA + city: Den BOSCH + country: NL + isPreferred: true + addressType: Office + phone: + - phoneId: 1 + number: '3112345678' + countryCode: NL + phoneType: TestNaam + isPreferred: true + - phoneId: 2 + number: '333225588' + countryCode: ES + phoneType: TestNaam + isPreferred: false + ovChipCard: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: '2023-01-01' + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: '2025-01-01' + alias: alias + ovPayToken: + - ovPayTokenId: 126 + tokenTypeId: 1 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 1 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenTypeId: 1 + xTat: hhe2830283 + xBot: jdhd828033 + alias: alias + lastDigits: '5674' + ovpasNumber: OV34568 + tokenStatusId: 1 + expirationDate: '2024-04-20T17:05:52.000+02:00' + replacedByTokenId: 2 + audit: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: '2023-10-20T17:05:52.000+02:00' + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + minimumCustomerProfile: + value: + customerNumber: 1000008 + debtorNumber: null + debtorStateId: null + vascustomerNumber: null + customerPreference: + languageId: 1 + customerStatus: + - name: active + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: null + person: + birthname: null + surname: null + prefix: null + suffix: null + dateOfBirth: null + emailAddress: TEST@TEST1.NL + address: [] + phone: [] + ovChipCard: [] + ovPayToken: [] + audit: [] + missingPersonDetailsCustomerProfile: + value: + emailAddress: TEST04@HTM.NL + customerNumber: 1000005 + debtorNumber: TEST004 + debtorStateId: 1 + vascustomerNumber: CST008 + customerPreference: + languageId: 1 + customerStatus: + - name: inactive + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: null + person: + birthname: Sophie + surname: Haardenburg + prefix: Mw + suffix: null + dateOfBirth: '1955-09-05' + emailAddress: TEST@TEST1.NL + address: [] + phone: [] + ovChipCard: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: '2023-01-01' + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: '2025-01-01' + alias: alias + ovPayToken: + - ovPayTokenId: 126 + tokenTypeId: 1 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 1 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenTypeId: 1 + xTat: hhe2830283 + xBot: jdhd828033 + alias: alias + lastDigits: '5674' + ovpasNumber: OV34568 + tokenStatusId: 1 + expirationDate: '2024-04-20T17:05:52.000+02:00' + replacedByTokenId: 2 + audit: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: '2023-10-20T17:05:52.000+02:00' + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + post: + tags: + - ABTCustomersSelfService + summary: Create for customer profile + description: Create a customer profile based on the sub element from JWT + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfile' + examples: + minimumProfile: + value: {} + basicCustomerProfile: + value: + debtorStatusId: 2 + person: + birthname: Jan + surname: Jansen + emailAddress: j.jansen@hatseflats.nl + fullCustomerProfile: + value: + customerPreference: + languageId: 1 + debtorStatusId: 2 + person: + birthname: Jan + surname: Jansen + prefix: dhr + suffix: jr + dateOfBirth: '1970-01-01' + emailAddress: j.jansen@hatseflats.nl + addresses: + - street: Laan van Meerdervoort + houseNumber: 5 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: true + addressTypeId: 1 + - street: Beeklaan + houseNumber: 30 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: false + addressTypeId: 2 + phones: + - number: '6123456789' + countryCode: '0031' + phoneTypeId: 1 + isPreferred: true + - number: '7012345678' + countryCode: '0031' + phoneTypeId: 2 + isPreferred: false + required: true + responses: + '201': + description: Successful created a customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfileCustomerNumberResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + examples: + emailAddressAlreadyPresent: + value: + code: '409' + type: Conflict + message: emailAddress already exists. + description: '' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + /selfservice/customers/{customerNumber}: + patch: + tags: + - ABTCustomersSelfService + summary: Modify customer profile elements + description: Modify customer profile fields + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchCustomerProfile' + examples: + PatchCustomerProfile: + value: + debtorStatusId: 2 + responses: + '202': + description: Successful modified the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/patchCustomerProfileResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"debtorStatusId\ + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/customerpreferences: + patch: + tags: + - ABTCustomersSelfService + summary: Modify customer preference elements + description: Modify customer preference fields + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchCustomerPreferences' + examples: + PatchCustomerPreferences: + value: + customerPreference: + languageId: 2 + responses: + '202': + description: Successful modified the customer preferences + content: + application/json: + schema: + $ref: '#/components/schemas/patchCustomerPreferencesResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"languageId\ + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/ovchipcards: + post: + tags: + - ABTCustomersSelfService + summary: Create a new OV chipcard for a customerProfile. + description: Create a new OV chipcard in the database for a given customer. + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postOvChipCard' + examples: + postNewOvChipCard: + value: + ovChipCard: + chipCardNumber: 1234123412341234 + validUntil: '2024-01-01' + alias: alias + responses: + '201': + description: Successful created an OV chipcard + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfileOvChipCardResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + chipCardNumberInvalidTooSmall: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + numeric instance is lower than the required minimum + (minimum: 1000000000000000, found: 999999999999999) + chipCardNumberInvalidTooLarge: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + numeric instance is greater than the required maximum + (maximum: 9999999999999999, found: 10000000000000000) + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/ovchipcards/{ovChipCardId}: + delete: + tags: + - ABTCustomersSelfService + summary: Delete a OV chipcard for a customerProfile. + description: Delete a OV chipcard in the database for a given customer. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: ovChipCardId + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '202': + description: Deleted record successfully + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/ovpaytokens: + post: + tags: + - ABTCustomersSelfService + summary: Create a new OV paytoken for a customerProfile. + description: Create a new OV paytoken in the database for a given customer. + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postOvPayToken' + examples: + postNewOvPayTokenCard: + value: + ovPayToken: + tokenTypeId: 2 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 2 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + responses: + '201': + description: Successful created an OV paytoken + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfileOvPayTokenResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/statuses: + post: + tags: + - ABTCustomersSelfService + summary: Create a new customer status for a customerProfile. + description: >- + Create a new customer status for a customerProfile. The call will do the + following in the given order: a new status will be created with + fromInclusive equal to the time of the call. ToInclusive in the old, now + historic, status will also be set equal to the time of the call, deeming + it 'not currently active'. + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerStatus' + examples: + postNewStatus: + value: + customerStatus: + name: blocked + responses: + '201': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfileCustomerNumberResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '422': + description: Unprocessable entity + content: + application/json: + schema: + $ref: '#/components/schemas/422Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/persons: + patch: + tags: + - ABTCustomersSelfService + summary: Partial update customer person details + description: Partial update a customer person details in the ABT database + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchPerson' + examples: + updatePerson: + value: + person: + birthname: Jan + surname: Jansen + prefix: dhr + suffix: jr + dateOfBirth: '1970-01-01' + emailAddress: TEST@TEST1.NL + updatePersonBirthname: + value: + person: + birthname: Jan + updatePersonSurname: + value: + person: + surname: Jansen + updatePersonPrefix: + value: + person: + prefix: dhr + updatePersonSuffix: + value: + person: + suffix: jr + updatePersonDateOfBirth: + value: + person: + dateOfBirth: '1970-01-01' + updatePersonEmailAddress: + value: + person: + emailAddress: TEST@TEST1.NL + responses: + '202': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/defaultCustomerProfileResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/ovpaytokens/{ovPayTokenId}: + delete: + tags: + - ABTCustomersSelfService + summary: Delete a OV PayToken for a customerProfile. + description: Delete a OV PayToken in the database for a given customer. + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: ovPayTokenId + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '202': + description: Deleted record successfully + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + patch: + tags: + - ABTCustomersSelfService + summary: Partial update customer ovpaytokens + description: Partial update of a customer ovpaytokens in the ABT database + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: ovPayTokenId + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchOvPayToken' + examples: + updateOvPayTokens: + value: + ovPayToken: + tokenTypeId: 2 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 2 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + updateOvPayTokenTypeId: + value: + ovPayToken: + tokenTypeId: 2 + updateOvPayTokenXTat: + value: + ovPayToken: + xTat: twioq73033 + updateOvPayTokenXBot: + value: + ovPayToken: + xBot: hjihwqui27 + updateOvPayTokenAlias: + value: + ovPayToken: + alias: alias + updateOvPayTokenLastDigits: + value: + ovPayToken: + lastDigits: '5678' + updateOvPayTokenOvpasNumber: + value: + ovPayToken: + ovpasNumber: OV34567 + updateOvPayTokenStatusId: + value: + ovPayToken: + tokenStatusId: 1 + updateOvPayTokenExpirationDate: + value: + ovPayToken: + expirationDate: '2025-04-20T17:05:52.000+02:00' + updateOvPayTokenReplacedByTokenId: + value: + ovPayToken: + replacedByTokenId: 1 + responses: + '202': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/defaultCustomerProfileResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/addresses: + post: + tags: + - ABTCustomersSelfService + summary: Create a single customer address + description: Create a single customer address in the ABT database + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postAddress' + examples: + addFullAddress: + value: + address: + street: Laan van Meerdervoort + houseNumber: 5 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: true + addressTypeId: 1 + addMinimumAddress: + value: + address: + street: Laan van Meerdervoort + houseNumber: 5 + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: true + addressTypeId: 1 + responses: + '201': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfileAddressResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidPostalCodeFormatForAddressCountryNLError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter for country validation (NL). + description: >- + ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match + input string \"2500 AA\ + MissingRequiredParameterError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + object has missing required properties + ([\"addressTypeId\"]) + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"id\ + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/phones: + post: + tags: + - ABTCustomersSelfService + summary: Create a single customer phonenumber + description: Create a single customer phonenumber in the ABT database + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postPhone' + examples: + addPhone: + value: + phone: + number: '06123456789' + countryCode: '0031' + phoneTypeId: 1 + isPreferred: true + responses: + '201': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfilePhoneResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/addresses/{addressId}: + delete: + tags: + - ABTCustomersSelfService + summary: Delete a customer address + description: Delete a customer address from the ABT database + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: addressId + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '202': + description: Deleted record successfully + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + patch: + tags: + - ABTCustomersSelfService + summary: Partial update customer addresses + description: Partial update a customer address in the ABT database + parameters: + - name: addressId + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchAddress' + examples: + updateAddress: + value: + address: + street: Laan van Meerdervoort + houseNumber: 5 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + addressTypeId: 2 + isPreferred: true + updateStreet: + value: + address: + street: Nieuwe Parklaan + updateHouseNumber: + value: + address: + houseNumber: 10 + updateHouseNumberSuffix: + value: + address: + houseNumberSuffix: C + updatePostalCode: + value: + address: + postalCode: 2597LG + updateCity: + value: + address: + city: Amsterdam + updateCountry: + value: + address: + country: UK + updateAddressTypeId: + value: + address: + addressTypeId: 3 + updateIsPreferred: + value: + address: + isPreferred: false + responses: + '202': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/addressPatchOKResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidPostalCodeFormatForAddressCountryNLError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter for country validation (NL). + description: >- + ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match + input string \"2500 AA\ + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"id\ + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /selfservice/customers/{customerNumber}/phones/{phoneId}: + delete: + tags: + - ABTCustomersSelfService + summary: Delete a customer phone + description: Delete a customer phone from the ABT database + parameters: + - name: X-HTM-JWT-AUTH-HEADER + in: header + required: true + style: simple + explode: false + schema: + type: string + - name: phoneId + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '202': + description: Deleted record successfully + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + patch: + tags: + - ABTCustomersSelfService + summary: Partial update customer phones + description: Partial update a customer phone in the ABT database + parameters: + - name: phoneId + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchPhone' + examples: + updatePhone: + value: + phone: + number: '06123456789' + countryCode: '0031' + phoneTypeId: 2 + isPreferred: true + updatePhoneNumber: + value: + phone: + number: '06987654321' + updateCountryCode: + value: + phone: + countryCode: '0044' + updatePhoneTypeId: + value: + phone: + phoneTypeId: 2 + updateisPreferred: + value: + phone: + isPreferred: true + responses: + '202': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/phonePatchOKResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited +components: + schemas: + audit: + type: object + properties: + auditTrailId: + type: integer + customerProfileId: + type: integer + action: + type: string + user: + type: string + timestamp: + type: string + format: datetime + correlationId: + type: string + ovPayToken: + type: object + properties: + ovPayTokenId: + type: integer + tokenTypeId: + type: integer + xTat: + type: string + xBot: + type: string + alias: + type: string + lastDigits: + type: integer + ovpasNumber: + type: string + tokenStatusId: + type: integer + expirationDate: + type: string + replacedByTokenId: + type: integer + getOvChipCard: + type: object + properties: + ovChipCardId: + type: integer + chipCardNumber: + type: integer + validUntil: + type: string + format: date + alias: + type: string + getCustomerStatus: + type: object + properties: + name: + type: string + fromInclusive: + type: string + format: date + toInclusive: + type: string + format: date + getPerson: + type: object + properties: + birthname: + type: string + surname: + type: string + prefix: + type: string + suffix: + type: string + dateOfBirth: + type: string + format: date + emailAddress: + type: string + format: email + address: + type: array + items: + $ref: '#/components/schemas/getAddress' + phone: + type: array + items: + $ref: '#/components/schemas/getPhone' + getAddress: + type: object + properties: + addressId: + type: integer + street: + type: string + houseNumber: + type: integer + houseNumberSuffix: + type: string + postalCode: + type: string + city: + type: string + country: + type: string + isPreferred: + type: boolean + addressType: + type: string + getPhone: + type: object + properties: + phoneId: + type: integer + number: + type: string + countryCode: + type: string + phoneType: + type: string + isPreferred: + type: boolean + getCustomerPreference: + type: object + properties: + languageId: + type: integer + getCustomerProfileList: + type: object + properties: + Entries: + type: array + items: + $ref: '#/components/schemas/getCustomerProfile' + getCustomerProfile: + type: object + properties: + customerNumber: + type: integer + debtorNumber: + type: integer + debtorStateId: + type: integer + vascustomerNumber: + type: integer + customerPreference: + $ref: '#/components/schemas/getCustomerPreference' + customerStatus: + type: array + items: + $ref: '#/components/schemas/getCustomerStatus' + person: + $ref: '#/components/schemas/getPerson' + ovChipCard: + type: array + items: + $ref: '#/components/schemas/getOvChipCard' + ovPayToken: + type: array + items: + $ref: '#/components/schemas/ovPayToken' + audit: + type: array + items: + $ref: '#/components/schemas/audit' + directDebitMandatePostEntity: + required: + - billingInformationId + - created + - directDebitMandateTypeName + - mandateAddressId + - mandateReference + type: object + properties: + directDebitMandateTypeName: + type: string + billingInformationId: + type: integer + mandateAddressId: + type: integer + created: + type: string + mandateReference: + type: string + directDebitMandatePost: + type: object + properties: + directDebitMandate: + $ref: '#/components/schemas/directDebitMandatePostEntity' + directDebitMandatePatchEntity: + type: object + properties: + directDebitMandateTypeName: + type: string + billingInformationId: + type: integer + mandateAddressId: + type: integer + mandateReference: + type: string + mandateState: + type: string + enum: + - SIGNED + - CANCELLED + - PREPARED + directDebitMandatePatch: + type: object + properties: + directDebitMandate: + $ref: '#/components/schemas/directDebitMandatePatchEntity' + directDebitMandateGETEntity: + type: object + properties: + directDebitMandateId: + type: integer + directDebitMandateTypeId: + type: integer + billingInformationId: + type: integer + mandateAddressId: + type: integer + created: + type: string + mandateReference: + type: string + mandateState: + type: string + updateTimestamp: + type: string + billingInformationGETEntity: + required: + - alias + - ascription + - bic + - billingAddressId + - billingInformationId + - iban + - issuerCountry + - swift + type: object + properties: + billingInformationId: + type: integer + issuerCountry: + type: string + iban: + type: string + bic: + type: string + swift: + type: string + ascription: + type: string + alias: + type: string + billingAddressId: + type: integer + billingInformationPostEntity: + required: + - alias + - ascription + - billingAddressId + - iban + - issuerCountry + type: object + properties: + issuerCountry: + type: string + iban: + type: string + bic: + type: string + swift: + type: string + ascription: + type: string + alias: + type: string + billingAddressId: + type: integer + billingInformationPost: + type: object + properties: + billingInformation: + $ref: '#/components/schemas/billingInformationPostEntity' + billingInformationPatchEntity: + type: object + properties: + issuerCountry: + type: string + iban: + type: string + bic: + type: string + swift: + type: string + ascription: + type: string + alias: + type: string + billingAddressId: + type: integer + billingInformationPatch: + type: object + properties: + billingInformation: + $ref: '#/components/schemas/billingInformationPatchEntity' + getCustomerProfileFinancials: + type: object + properties: + customerNumber: + type: integer + billingInformation: + type: array + items: + $ref: '#/components/schemas/billingInformationGETEntity' + directDebitMandate: + type: array + items: + $ref: '#/components/schemas/directDebitMandateGETEntity' + customerPreferencesEntity: + type: object + properties: + languageId: + type: string + postCustomerProfile: + type: object + properties: + debtorStatusId: + type: integer + customerPreference: + $ref: '#/components/schemas/customerPreferencesEntity' + person: + $ref: '#/components/schemas/personEntity' + addresses: + type: array + items: + $ref: '#/components/schemas/addressPostEntity' + phones: + type: array + items: + $ref: '#/components/schemas/phonePostEntity' + postCustomerStatusEntity: + type: object + properties: + name: + type: string + postCustomerStatus: + type: object + properties: + customerStatus: + $ref: '#/components/schemas/postCustomerStatusEntity' + postOvChipCardEntity: + required: + - chipCardNumber + type: object + properties: + chipCardNumber: + type: integer + validUntil: + type: string + format: date + alias: + type: string + patchCustomerProfile: + type: object + properties: + debtorStatusId: + type: integer + patchCustomerPreferencesEntity: + type: object + properties: + languageId: + type: string + patchCustomerPreferences: + type: object + properties: + customerPreference: + $ref: '#/components/schemas/patchCustomerPreferencesEntity' + postOvChipCard: + type: object + properties: + ovChipCard: + $ref: '#/components/schemas/postOvChipCardEntity' + postOvPayToken: + required: + - alias + - lastDigits + - tokenTypeId + - xBot + - xTat + type: object + properties: + ovPayToken: + type: object + properties: + tokenTypeId: + type: string + xTat: + type: string + xBot: + type: string + alias: + type: string + lastDigits: + type: integer + ovpasNumber: + type: string + tokenStatusId: + type: integer + expirationDate: + type: string + replacedByTokenId: + type: integer + ovPayTokenEntity: + type: object + properties: + tokenTypeId: + type: string + xTat: + type: string + xBot: + type: string + alias: + type: string + lastDigits: + type: integer + ovpasNumber: + type: string + tokenStatusId: + type: integer + expirationDate: + type: string + replacedByTokenId: + type: integer + patchOvPayToken: + type: object + properties: + ovPayToken: + $ref: '#/components/schemas/ovPayTokenEntity' + patchPerson: + type: object + properties: + person: + $ref: '#/components/schemas/personEntity' + patchAddress: + type: object + properties: + address: + $ref: '#/components/schemas/addressPatchEntity' + patchPhone: + type: object + properties: + phone: + $ref: '#/components/schemas/phonePatchEntity' + postAddress: + type: object + properties: + address: + $ref: '#/components/schemas/addressPostEntity' + postPhone: + type: object + properties: + phone: + $ref: '#/components/schemas/phonePostEntity' + personEntity: + type: object + properties: + birthname: + type: string + surname: + type: string + prefix: + type: string + suffix: + type: string + dateOfBirth: + type: string + format: date + emailAddress: + type: string + addressPostEntity: + required: + - addressTypeId + - city + - country + - houseNumber + - postalCode + - street + type: object + properties: + street: + type: string + houseNumber: + type: integer + houseNumberSuffix: + type: string + postalCode: + type: string + city: + type: string + country: + type: string + isPreferred: + type: boolean + addressTypeId: + type: integer + addressPatchEntity: + type: object + properties: + street: + type: string + houseNumber: + type: integer + houseNumberSuffix: + type: string + postalCode: + type: string + city: + type: string + country: + type: string + addressTypeId: + type: integer + isPreferred: + type: boolean + phonePostEntity: + required: + - countryCode + - number + - phoneTypeId + type: object + properties: + number: + type: string + countryCode: + type: string + phoneTypeId: + type: integer + isPreferred: + type: boolean + phonePatchEntity: + type: object + properties: + number: + type: string + countryCode: + type: string + phoneTypeId: + type: integer + isPreferred: + type: boolean + defaultCustomerProfileResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + phonePatchOKResponse: + type: object + properties: + id: + type: integer + example: 1 + addressPatchOKResponse: + type: object + properties: + id: + type: integer + example: 1 + postCustomerProfileCustomerNumberResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + postCustomerProfileAddressResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + addressId: + type: integer + example: 1 + postCustomerProfilePhoneResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + phoneId: + type: integer + example: 1 + postCustomerProfileBillingInformationResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + billingInformationId: + type: integer + example: 1 + postCustomerProfileDirectDebitMandateResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + directDebitMandateId: + type: integer + example: 1 + postCustomerProfileOvChipCardResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + ovChipCardId: + type: integer + example: 1 + patchCustomerProfileResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + patchCustomerPreferencesResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + ovPayTokenGetEntity: + type: object + properties: + ovPayTokenId: + type: integer + example: 1 + tokenTypeId: + type: integer + example: 1 + xTat: + type: string + example: 0044831b-8e80c-4f82-r989a-8d85ee1996 + xBot: + type: string + example: 0044831b-8e80c-4f82-r989a-8d85ee1996 + lastDigits: + type: string + example: '0001' + ovpasNumber: + type: integer + example: 1 + alias: + type: string + example: alias + tokenStatusId: + type: integer + expirationDate: + type: string + replacedByTokenId: + type: integer + getCustomerProfileOvPayTokenResponse: + type: object + properties: + ovPayToken: + type: array + items: + $ref: '#/components/schemas/ovPayTokenGetEntity' + postCustomerProfileOvPayTokenResponse: + type: object + properties: + ovPaytoken: + type: object + example: 10000001 + ovPayTokenId: + type: integer + example: 1 + patchCustomerProfileCustomerNumberResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + 400Response: + type: object + properties: + code: + type: string + example: '400' + type: + type: string + message: + type: string + example: Bad Request + description: + type: string + example: >- + 'Bad Request: Input parameters missing! Please fill in at least 1 + valid input parameter. + 401Response: + type: object + properties: + code: + type: string + example: '900901' + type: + type: string + message: + type: string + example: Invalid Credentials + description: + type: string + example: >- + Invalid Credentials. Make sure you have provided the correct + security credentials + 404Response: + type: object + properties: + code: + type: string + example: '404' + type: + type: string + example: Status report + message: + type: string + example: Not Found + description: + type: string + example: The requested resource is not available. + 409Response: + type: object + properties: + code: + type: string + example: '409' + type: + type: string + example: Conflict + message: + type: string + example: Entry already exists + description: + type: string + 422Response: + type: object + properties: + code: + type: string + example: '422' + type: + type: string + example: Unprocessable entity + message: + type: string + example: >- + Forbidden state transition requested! From Active to Cleared not + allowed. + description: + type: string + 500Response: + type: object + properties: + code: + type: string + example: '500' + type: + type: string + message: + type: string + example: Internal Server Error + description: + type: string + securitySchemes: + default: + type: oauth2 + flows: + implicit: + authorizationUrl: https://services.acc.api.htm.nl/authorize + scopes: {} diff --git a/src/openapi/customers/customers_reference-crud.yaml b/src/openapi/customers/customers_reference-crud.yaml new file mode 100644 index 0000000..ffb2500 --- /dev/null +++ b/src/openapi/customers/customers_reference-crud.yaml @@ -0,0 +1,1047 @@ +openapi: 3.0.1 +info: + title: ABTCustomerReference + version: '1.0' +servers: + - url: https://services.dev.api.htm.nl/abt/customerreference/1.0 + - url: http://services.dev.api.htm.nl/abt/customerreference/1.0 +security: + - default: [] +tags: + - name: ABTCustomerReference +paths: + /directdebitmandatetype: + get: + tags: + - ABTCustomerReference + summary: List of direct debit mandate types + description: gives list of direct debit mandate types + parameters: [] + responses: + '200': + description: Successful retrieved list of direct debit mandate types + content: + application/json: + schema: + $ref: '#/components/schemas/directDebitMandateTypes' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /phonetype: + get: + tags: + - ABTCustomerReference + summary: List of phone types + description: gives list of phone types + parameters: [] + responses: + '200': + description: Successful retrieved list of phoneTypes + content: + application/json: + schema: + $ref: '#/components/schemas/phoneTypes' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + post: + tags: + - ABTCustomerReference + summary: Create a phone type + description: Create a phone type with a specific value + parameters: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/phoneType' + required: true + responses: + '201': + description: Successful created a new phone type + content: + application/json: + schema: + type: object + properties: + id: + type: integer + example: 1 + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /phonetype/{phoneTypeId}: + put: + tags: + - ABTCustomerReference + summary: Update a phone type + description: Update an existing phone type with a specific value + parameters: + - name: phoneTypeId + in: path + required: true + style: simple + explode: false + schema: + type: integer + format: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/phoneType' + required: true + responses: + '202': + description: Successful updated an existing a phone type + content: + application/json: + schema: + type: object + properties: + id: + type: integer + example: 1 + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + delete: + tags: + - ABTCustomerReference + summary: Remove a phone type + description: Remove an existing phone type with a specific value + parameters: + - name: phoneTypeId + in: path + required: true + style: simple + explode: false + schema: + type: integer + format: integer + responses: + '202': + description: Successful removed a phone type + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/404ResponseId' + - $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /addresstype: + get: + tags: + - ABTCustomerReference + summary: List of address types + description: gives list of address types + parameters: [] + responses: + '200': + description: Successful retrieved list of addressTypes + content: + application/json: + schema: + $ref: '#/components/schemas/addressTypes' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + post: + tags: + - ABTCustomerReference + summary: Create a address type + description: Create a address type with a specific value + parameters: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/addressType' + required: true + responses: + '201': + description: Successful created a new address type + content: + application/json: + schema: + type: object + properties: + id: + type: integer + example: 1 + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /addresstype/{addressTypeId}: + put: + tags: + - ABTCustomerReference + summary: Update a address type + description: Update an existing address type with a specific value + parameters: + - name: addressTypeId + in: path + required: true + style: simple + explode: false + schema: + type: integer + format: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/addressType' + required: true + responses: + '202': + description: Successful updated an existing a address type + content: + application/json: + schema: + type: object + properties: + id: + type: integer + example: 1 + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + delete: + tags: + - ABTCustomerReference + summary: Remove a address type + description: Remove an existing address type with a specific value + parameters: + - name: addressTypeId + in: path + required: true + style: simple + explode: false + schema: + type: integer + format: integer + responses: + '202': + description: Successful removed a address type + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/404ResponseId' + - $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customerstatus: + get: + tags: + - ABTCustomerReference + summary: List of customer status + description: gives list of customer status + parameters: [] + responses: + '200': + description: Successful retrieved list of customer status + content: + application/json: + schema: + $ref: '#/components/schemas/customerStatus' + example: + Entries: + - customerStatusId: 1 + name: Inactive + - customerStatusId: 2 + name: Active + - customerStatusId: 3 + name: Blocked + - customerStatusId: 4 + name: Frozen + - customerStatusId: 5 + name: Cleared + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /tokentype: + get: + tags: + - ABTCustomerReference + summary: List of token types + description: gives list of token types + parameters: [] + responses: + '200': + description: Successful retrieved list of customer status + content: + application/json: + schema: + $ref: '#/components/schemas/tokenType' + example: + Entries: + - tokenTypeId: 1 + name: Debit card + - tokenTypeId: 2 + name: Credit card + - tokenTypeId: 3 + name: OVPas physical + - tokenTypeId: 4 + name: OVPas digital + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customerreferences: + get: + tags: + - ABTCustomerReference + summary: List of all possible customer reference values + description: gives list of all possible customer reference values availbale + parameters: [] + responses: + '200': + description: Successful retrieved list of all possible customer reference values + content: + application/json: + schema: + allOf: + - $ref: '#/components/schemas/customerReferences' + example: + Entries: + phoneTypes: + - name: mobile + id: 1 + - name: fixed line + id: 2 + addressTypes: + - name: home + id: 1 + - name: office + id: 2 + customerStatuses: + - name: active + id: 1 + - name: blocked + id: 2 + - name: inactive + id: 3 + - name: new + id: 4 + tokenTypes: + - name: Debit card + id: 1 + - name: Credit card + id: 2 + - name: OVPas physical + id: 3 + - name: OVPas digital + id: 4 + directDebitMandateTypes: + - name: Paper Contract + id: 1 + - name: PIN transaction + id: 2 + tokenStatuses: + - name: Expired + id: 1 + - name: Active + id: 2 + - name: Replaced + id: 3 + - name: Inactive + id: 4 + - name: Suspended + id: 5 + - name: Removed by customer + id: 6 + debtorStatuses: + - name: Inactive + id: 1 + - name: Active + id: 2 + languages: + - id: 1 + name: Nederlands + ietfCode: nl-Nl + iso639Code: nl + - id: 2 + name: English + ietfCode: en-US + iso639Code: en + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /tokenstatus: + get: + tags: + - ABTCustomerReference + summary: List of all token status + description: gives list of all token statuses + parameters: [] + responses: + '200': + description: Successful retrieved list of customer status + content: + application/json: + schema: + $ref: '#/components/schemas/language' + example: + Entries: + - tokenStatusId: 1 + name: Expired + - tokenStatusId: 2 + name: Active + - tokenStatusId: 3 + name: Replaced + - tokenStatusId: 4 + name: Inactive + - tokenStatusId: 5 + name: Suspended + - tokenStatusId: 6 + name: Removed by customer + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /language: + get: + tags: + - ABTCustomerReference + summary: List of all languages + description: gives list of all languages + parameters: [] + responses: + '200': + description: Successful retrieved list of languages + content: + application/json: + schema: + $ref: '#/components/schemas/language' + example: + Entries: + - languageId: 1 + name: Expired + ietfCode: nl-NL + iso639Code: nl + - languageId: 2 + name: Expired + ietfCode: en-US + iso639Code: en + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /debtorstatus: + get: + tags: + - ABTCustomerReference + summary: List of all debtorstatuses + description: gives list of all debtorstatuses + parameters: [] + responses: + '200': + description: Successful retrieved list of debtorstatuses + content: + application/json: + schema: + $ref: '#/components/schemas/tokenStatus' + example: + Entries: + - debtorStatusId: 1 + name: Inactive + - debtorStatusId: 2 + name: Active + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited +components: + schemas: + directDebitMandateTypeList: + type: array + items: + properties: + directDebitMandateTypeId: + type: integer + example: 1 + name: + type: string + example: name + directDebitMandateType: + properties: + name: + type: string + example: name + id: + type: integer + example: 1 + directDebitMandateTypes: + type: object + properties: + Entries: + $ref: '#/components/schemas/directDebitMandateTypeList' + phoneType: + properties: + name: + type: string + example: name + phoneTypeIdList: + type: array + items: + properties: + phoneTypeId: + type: integer + example: 123 + name: + type: string + example: name + phoneTypes: + type: object + properties: + Entries: + $ref: '#/components/schemas/phoneTypeIdList' + addressType: + properties: + name: + type: string + example: name + addressTypeIdList: + type: array + items: + properties: + addressTypeId: + type: integer + example: 123 + name: + type: string + example: name + addressTypes: + type: object + properties: + Entries: + $ref: '#/components/schemas/addressTypeIdList' + customerStatuses: + type: object + properties: + Entries: + $ref: '#/components/schemas/customerStatusIdList' + customerStatusIdList: + type: array + items: + properties: + customerStatusId: + type: integer + name: + type: string + customerStatus: + properties: + name: + type: string + example: name + tokenTypes: + type: object + properties: + Entries: + $ref: '#/components/schemas/customerStatusIdList' + tokenTypeIdList: + type: array + items: + properties: + tokenTypeId: + type: integer + name: + type: string + tokenType: + properties: + name: + type: string + example: name + tokenStatuses: + type: object + properties: + Entries: + $ref: '#/components/schemas/customerStatusIdList' + tokenStatusIdList: + type: array + items: + properties: + tokenStatusId: + type: integer + name: + type: string + tokenStatus: + properties: + tokenStatusId: + type: integer + example: 1 + name: + type: string + example: name + debtorStatus: + properties: + debtorStatusId: + type: integer + example: 1 + name: + type: string + example: name + language: + properties: + languageId: + type: integer + example: 1 + name: + type: string + example: name + ietfCode: + type: string + example: nl-NL + iso639Code: + type: string + example: nl + customerReferences: + type: object + properties: + Entries: + oneOf: + - $ref: '#/components/schemas/addressType' + - $ref: '#/components/schemas/phoneType' + - $ref: '#/components/schemas/customerStatus' + - $ref: '#/components/schemas/tokenType' + - $ref: '#/components/schemas/directDebitMandateType' + - $ref: '#/components/schemas/tokenStatus' + 400Response: + type: object + properties: + code: + type: string + example: '400' + type: + type: string + message: + type: string + example: Bad Request + description: + type: string + example: '''2023-02-01 00:00:00'' is not a valid Datetime' + 401Response: + type: object + properties: + code: + type: string + example: '900901' + type: + type: string + message: + type: string + example: Invalid Credentials + description: + type: string + example: >- + Invalid Credentials. Make sure you have provided the correct + security credentials + 404Response: + type: object + properties: + code: + type: string + example: '404' + type: + type: string + example: Status report + message: + type: string + example: Not Found + description: + type: string + example: The requested resource is not available. + 404ResponseId: + type: object + properties: + error: + type: string + example: 'No record found for id: 5' + 500Response: + type: object + properties: + code: + type: string + example: '500' + type: + type: string + message: + type: string + example: Internal Server Error + description: + type: string + securitySchemes: + default: + type: oauth2 + flows: + implicit: + authorizationUrl: https://services.dev.api.htm.nl/authorize + scopes: {} -- 2.45.2 From 3eb98b0d237371cc35b0a6ad8373e7dd2c7ef0f5 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 2 Dec 2024 14:59:28 +0000 Subject: [PATCH 019/372] Update src/openapi/customers/SE-customers.yaml Added Get Customer V2- first draft --- src/openapi/customers/SE-customers.yaml | 123 ++++++++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index 6e4a7a8..a9316b9 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -13,6 +13,127 @@ tags: Service Engine APIs for HTM Customers. These are NOT the CRUD APIs to access raw data in the database. To be used by touchpoints to get information about HTM customers. paths: + /customers: + get: + tags: + - ServiceEngine Customers + summary: Get a customer profile based on search parameters, only returns a unique profile + parameters: + - name: customerProfileId + in: query + schema: + type: integer + example: 1 + - name: customerNumber + in: query + schema: + type: integer + example: 1 + - name: debtorNumber + in: query + schema: + type: integer + example: 1 + - name: birthname + in: query + schema: + type: string + example: Jon + - name: surname + in: query + schema: + type: string + example: Doe + - name: emailAdress + in: query + schema: + type: string + format: email + example: jon.doe@mymailprovider.com + - name: dateOfBirth + in: query + schema: + type: string + format: date + example: "2000-01-01" + - name: addressStreet + in: query + schema: + type: string + example: Sesamestreet + - name: addressHouseNumber + in: query + schema: + type: integer + example: 1 + - name: addressHouseNumberSuffix + in: query + schema: + type: string + example: A + - name: addressPostalCode + in: query + schema: + type: string + example: 1234 AB + - name: addressCity + in: query + schema: + type: string + example: The Hague + - name: addressCountry + in: query + schema: + type: string + example: The Netherlands + - name: phoneNumber + in: query + schema: + type: string + example: The Netherlands + - name: ovChipcardNumber + in: query + schema: + type: integer + example: 0123456789 + - name: OvChipcardAlias + in: query + schema: + type: string + example: My ovchipcard + - name: ovPayTokenNumber + in: query + schema: + type: integer + example: 0123456789 + - name: ovPayTokenAlias + in: query + schema: + type: string + example: My Ov Pay Token + - name: ovPayTokenXTat + in: query + schema: + type: string + example: 180d04e0-a721-447e-a1d9-b416937b43bc + - name: ovPayTokenXBot + in: query + schema: + type: string + example: e1307c73-676a-4d07-967b-6141276f7c7c + responses: + '200': + description: Ok + content: + application/json: + schema: + $ref: '#/components/schemas/CustomersResponse' + '404': + description: Customer not found + content: + application/json: + schema: + $ref: '#/components/schemas/CustomersResponse' /customers/tokens/{tokenId}/product-instances: get: tags: @@ -52,3 +173,5 @@ components: properties: Entries: type: array + CustomersResponse: + type: object -- 2.45.2 From feaaec2a5312c513ef1287694bb5349ddee7ab5c Mon Sep 17 00:00:00 2001 From: Max Martens Date: Tue, 3 Dec 2024 09:00:49 +0100 Subject: [PATCH 020/372] WIP GET customers, GET OvPayTokens with HATEOAS --- src/openapi/customers/SE-customers.yaml | 392 +++++++++++++++++++++++- 1 file changed, 379 insertions(+), 13 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index a9316b9..1f0c2cd 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -13,11 +13,12 @@ tags: Service Engine APIs for HTM Customers. These are NOT the CRUD APIs to access raw data in the database. To be used by touchpoints to get information about HTM customers. paths: - /customers: + /customers: get: tags: - ServiceEngine Customers - summary: Get a customer profile based on search parameters, only returns a unique profile + summary: Get a single customer profile based on search parameters + description: Get a single customer profile based on search parameters. Only returns a profile if a single result matches the parameters; when multiple results are found, additional seach parameters are required to disambiguate. parameters: - name: customerProfileId in: query @@ -28,17 +29,17 @@ paths: in: query schema: type: integer - example: 1 + example: 1000001 - name: debtorNumber in: query schema: type: integer - example: 1 + example: 100001 - name: birthname in: query schema: type: string - example: Jon + example: John - name: surname in: query schema: @@ -49,7 +50,7 @@ paths: schema: type: string format: email - example: jon.doe@mymailprovider.com + example: john.doe@mymailprovider.com - name: dateOfBirth in: query schema: @@ -90,7 +91,7 @@ paths: in: query schema: type: string - example: The Netherlands + example: "0123456789" - name: ovChipcardNumber in: query schema: @@ -123,17 +124,53 @@ paths: example: e1307c73-676a-4d07-967b-6141276f7c7c responses: '200': - description: Ok + description: OK content: application/json: schema: $ref: '#/components/schemas/CustomersResponse' '404': - description: Customer not found + description: No customer found content: application/json: - schema: - $ref: '#/components/schemas/CustomersResponse' + example: + { + "type": "https://api.integratielaag.nl/abt/serviceengine/1.0/customers", + "apiErrorCode": "400.1", + "title": "Niet gevonden", + "detail": "Klant niet gevonden", + "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7", + "errors": [ + { + "subApiErrorCode": "0017" + } + ] + } + '409': + description: Multiple customers found + content: + application/json: + example: + { + "type": "https://api.integratielaag.nl/abt/serviceengine/1.0/customers", + "apiErrorCode": "409.1", + "title": "Meer dan 1 klantprofiel gevonden", + "detail": "Meer dan 1 klantprofiel gevonden. Verfijn je zoekcriteria.", + "instance": "555d00b5-bc3f-4591-949b-479e76d49ea7" + } + /customers/tokens: + get: + tags: + - ServiceEngine Customers + summary: Get a list of all OvPayTokens for a certain customer + description: Get a list of all OvPayTokens for a certain customer. + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/OvPayTokensResponse' /customers/tokens/{tokenId}/product-instances: get: tags: @@ -166,6 +203,335 @@ paths: Entries: [] components: schemas: + CustomersResponse: + type: object + properties: + customerProfileId: + type: integer + example: 1 + customerNumber: + type: integer + example: 1000001 + debtorNumber: + type: string + example: DB100001 + customerStatus: + type: object + properties: + customerStatusId: + type: integer + example: 1 + name: + type: string + example: Active + person: + type: object + properties: + prefix: + type: string + example: Mr + birthname: + type: string + example: John + surname: + type: string + example: Doe + suffix: + type: string + example: Jr. + dateOfBirth: + type: string + format: date + example: '2023-02-01' + emailAdress: + type: string + format: email + example: 4j2dD@example.com + addresses: + type: array + items: + type: object + properties: + addressId: + type: integer + example: 1 + isPreferred: + type: boolean + example: true + addressType: + type: object + properties: + addressTypeId: + type: integer + example: 1 + name: + type: string + example: Brug + street: + type: string + example: Appelstraat + houseNumber: + type: integer + example: 1 + houseNumberSuffix: + type: string + example: BS + postalCode: + type: string + example: 1234AB + city: + type: string + example: Den Haag + country: + type: string + example: Nederland + _links: + type: object + properties: + delete: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/addresses/1 + method: + type: string + example: DELETE + phones: + type: array + items: + type: object + properties: + phoneId: + type: integer + example: 1 + isPreferred: + type: boolean + example: true + phoneType: + type: object + properties: + phoneTypeId: + type: integer + example: 1 + name: + type: string + example: Mobiel + number: + type: string + example: "0123456789" + countryCode: + type: string + example: "0031" + _links: + type: object + properties: + delete: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/phones/1 + method: + type: string + example: DELETE + _links: + type: object + properties: + partial_edit: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers + method: + type: string + example: PATCH + templated: + type: boolean + example: true + get_tokens: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens + method: + type: string + example: GET + templated: + type: boolean + example: true + create_token: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens + method: + type: string + example: POST + templated: + type: boolean + example: true + _templates: + type: object + properties: + partial_edit: + type: object + properties: + method: + type: string + example: PATCH + properties: + example: + [ + { name: person, required: true, properties: [ + { name: prefix, required: false, type: string }, + { name: birthname, required: false, type: string }, + { name: surname, required: false, type: string }, + { name: suffix, required: false, type: string }, + { name: dateOfBirth, required: false, type: string }, + { name: emailAdress, required: false, type: string }, + { name: addresses, required: false, multi: true, properties: [ + { name: addressId, required: false, type: integer }, + { name: isPreferred, required: false, type: boolean }, + { name: addressTypeId, required: false, type: integer }, + { name: street, required: false, type: string }, + { name: houseNumber, required: false, type: integer }, + { name: houseNumberSuffix, required: false, type: string }, + { name: postalCode, required: false, type: string }, + { name: city, required: false, type: string }, + { name: country, required: false, type: string } + ]}, + { name: phones, required: false, multi: true, properties: [ + { name: phoneId, required: false, type: integer }, + { name: isPreferred, required: false, type: boolean }, + { name: phoneTypeId, required: false, type: integer }, + { name: number, required: false, type: string }, + { name: countryCode, required: false, type: string } + ]} + ] } + ] + create_token: + type: object + properties: + method: + type: string + example: POST + properties: + example: + [ + { name: ovPayToken, required: true, properties: [ + { name: tokenTypeId, required: true, type: integer }, + { name: alias, required: true, type: string }, + { name: serviceReferenceId, required: false, type: string }, + { name: amount, required: false, type: integer }, + ]} + ] + + OvPayTokensResponse: + type: object + required: + - ovPayTokens + properties: + Entries: + type: array + items: + type: object + properties: + ovPayTokenId: + type: integer + example: 1 + tokenType: + type: object + properties: + tokenTypeId: + type: integer + example: 1 + name: + type: string + example: EMV + alias: + type: string + example: MyToken + tokenStatus: + type: object + properties: + tokenStatusId: + type: integer + example: 1 + name: + type: string + example: Active + expirationDate: + type: string + format: date + example: '2023-02-01' + replacedByTokenId: + type: integer + example: 1 + _links: + type: object + properties: + partial_edit: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens/1 + method: + type: string + example: PATCH + templated: + type: boolean + example: true + delete: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens/1 + method: + type: string + example: DELETE + product-instances: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens/1/product-instances + method: + type: string + example: GET + trips: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens/1/trips + method: + type: string + example: GET + _templates: + type: object + properties: + partial_edit: + type: object + properties: + method: + type: string + example: PATCH + properties: + example: + [ + { name: ovPayToken, required: true, properties: [ + { name: tokenStatusId, required: false, type: integer }, + { name: alias, required: false, type: string } + ]} + ] + + TokenProductInstancesResponse: type: object required: @@ -173,5 +539,5 @@ components: properties: Entries: type: array - CustomersResponse: - type: object + + -- 2.45.2 From 33eef638d2c28b55be719586276a24fdde27ba46 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Tue, 3 Dec 2024 09:43:43 +0100 Subject: [PATCH 021/372] WIP update --- src/openapi/customers/SE-customers.yaml | 48 ++++++++++++++++++++----- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index 1f0c2cd..e85f1d7 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -195,12 +195,12 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/TokenProductInstancesResponse' + $ref: '#/components/schemas/OvPayTokenProductInstancesResponse' examples: getEmptyProductInstances: summary: No product-instances found on token value: - Entries: [] + productInstances: [] components: schemas: CustomersResponse: @@ -486,6 +486,18 @@ components: templated: type: boolean example: true + replace: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens/1/replace + method: + type: string + example: POST + templated: + type: boolean + example: true delete: type: object properties: @@ -525,19 +537,39 @@ components: properties: example: [ - { name: ovPayToken, required: true, properties: [ - { name: tokenStatusId, required: false, type: integer }, + { name: ovPayToken, required: true, properties: [ { name: alias, required: false, type: string } ]} ] + replace: + type: object + properties: + method: + type: string + example: POST + properties: + example: + [ + { name: ovPayToken, required: true, properties: [ + { name: newTokenId, required: false, type: integer }, + { name: tokenTypeId, required: false, type: integer }, + { name: alias, required: false, type: string }, + { name: serviceReferenceId, required: false, type: string }, + { name: amount, required: false, type: integer }, + ]} + ] - TokenProductInstancesResponse: + OvPayTokenProductInstancesResponse: type: object - required: - - Entries properties: - Entries: + productInstances: type: array + items: + type: object + properties: + productId: + type: integer + example: 1 -- 2.45.2 From c04530e6163609e3da58245a454f515dc7c0562f Mon Sep 17 00:00:00 2001 From: Max Martens Date: Tue, 3 Dec 2024 15:40:40 +0100 Subject: [PATCH 022/372] Process comments --- src/openapi/customers/SE-customers.yaml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index e85f1d7..bc50dab 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -45,7 +45,7 @@ paths: schema: type: string example: Doe - - name: emailAdress + - name: emailAddress in: query schema: type: string @@ -97,7 +97,7 @@ paths: schema: type: integer example: 0123456789 - - name: OvChipcardAlias + - name: ovChipcardAlias in: query schema: type: string @@ -171,7 +171,7 @@ paths: application/json: schema: $ref: '#/components/schemas/OvPayTokensResponse' - /customers/tokens/{tokenId}/product-instances: + /customers/tokens/{ovPayTokenId}/productInstances: get: tags: - ServiceEngine Customers @@ -181,7 +181,7 @@ paths: Only HTM products are returned; GBO does not allow HTM to get information on non-HTM product-instances. Where relevant, operations to be performed are returned as HATEOAS links per product-instance. parameters: - - name: tokenId + - name: ovPayTokenId in: path required: true style: simple @@ -243,7 +243,7 @@ components: type: string format: date example: '2023-02-01' - emailAdress: + emailAddress: type: string format: email example: 4j2dD@example.com @@ -266,7 +266,7 @@ components: example: 1 name: type: string - example: Brug + example: Home street: type: string example: Appelstraat @@ -316,7 +316,7 @@ components: example: 1 name: type: string - example: Mobiel + example: Home number: type: string example: "0123456789" @@ -392,7 +392,7 @@ components: { name: surname, required: false, type: string }, { name: suffix, required: false, type: string }, { name: dateOfBirth, required: false, type: string }, - { name: emailAdress, required: false, type: string }, + { name: emailAddress, required: false, type: string }, { name: addresses, required: false, multi: true, properties: [ { name: addressId, required: false, type: integer }, { name: isPreferred, required: false, type: boolean }, @@ -435,7 +435,7 @@ components: required: - ovPayTokens properties: - Entries: + ovPayTokens: type: array items: type: object @@ -507,12 +507,12 @@ components: method: type: string example: DELETE - product-instances: + productInstances: type: object properties: href: type: string - example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens/1/product-instances + example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens/1/productInstances method: type: string example: GET -- 2.45.2 From 107d5fac84550306126102fa19889b636b18c6e7 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 3 Dec 2024 16:48:54 +0100 Subject: [PATCH 023/372] OVPAY-108 Added /orders endpoint for SE. --- src/openapi/orders/service_engine_orders.yaml | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 31c4e6b..dbee45f 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -715,6 +715,139 @@ paths: type: string example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c description: The JWT of the logged in customer (in case of a web shop). + get: + parameters: + - in: query + name: orderId + schema: + type: string + format: uuid + example: afce35b2-1dff-4ace-98d0-4b9ac405c87d + description: The order id. + - in: query + name: orderNumber + schema: + type: string + example: "ORD123456" + description: The order number. + - in: query + name: externalOrderId + schema: + type: string + example: 7bef22f6-70a3-4655-bc2a-c40c61581b32 + description: The external order id. + - in: query + name: customerProfileId + schema: + type: integer + example: 42 + description: The customer profile id. + - in: query + name: xTat + schema: + type: string + example: 7208e73e-87a6-46d9-bb6d-867ffc460c9b + description: xTat used in order fulfillment. Note that this is a joined parameter via PurchasedProduct. + tags: + - Order Retrieval v2.1 + summary: Find orders. + description: Find orders. + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "orders": + [ + { + "orderId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d", + "externalOrderId": "bac3958b-804a-43e3-b5f7-0b0fffaae5b7", + "orderNumber": "123456", + "customerProfileId": 42, + "totalAmount": 121, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, + "language": + { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl", + }, + "billingAddressId": 1, + "shippingAddressId": 1, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": + { "orderStatusId": 4, "name": "paid" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order succesvol betaald", + }, + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "mandateInput": + { + "directDebitMandateTypeId": 1, + "createdOn": "2024-03-22T09:00:00", + "bic": "RABONL2U", + "iban": "NL44RABO0123456789", + "ascription": "J. de Vries", + "place": "Den Haag", + }, + }, + ], + "_links": + { + "self": + { + "href": "https://api.example.com/items/1", + "method": "GET", + "templated": true, + }, + }, + }, + ], + "_links": + { + "self": + { + "href": "https://api.example.com/items", + "method": "GET", + "templated": true, + }, + }, + "href": "string", + } post: tags: - Order Creation v2.1 -- 2.45.2 From a6878b9a341a10873611ba208e2b9cc9203b3f90 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Wed, 4 Dec 2024 16:03:10 +0100 Subject: [PATCH 024/372] WIP 3 --- src/openapi/customers/SE-customers.yaml | 70 ++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index bc50dab..f3d2c16 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -201,6 +201,29 @@ paths: summary: No product-instances found on token value: productInstances: [] + getSingleProductInstance: + summary: One product-instance found on token + value: + { + "productInstances": [ + { + "productId": 1, + "name": "HTM 90% Korting", + "status": "Active", + "fromInclusive": "2024-11-25T13:25:00+01:00", + "untilInclusive": "2024-12-25T03:59:59+01:00", + "productCategory": { + "productCategoryId": 1, + "name": "Kortingsabonnement" + }, + "gboTypeOfProduct": "discount", + "purchasedProductId": 1, + "orderId": "501B17EF-36C4-4039-B92C-6517969B464E", + "orderLineId": "38B17EF-36C4-4039-B92C-4817969B464E", + "contractId": "string" + } + ] + } components: schemas: CustomersResponse: @@ -402,7 +425,7 @@ components: { name: houseNumberSuffix, required: false, type: string }, { name: postalCode, required: false, type: string }, { name: city, required: false, type: string }, - { name: country, required: false, type: string } + { name: country, required: false, type: string } ]}, { name: phones, required: false, multi: true, properties: [ { name: phoneId, required: false, type: integer }, @@ -571,5 +594,50 @@ components: productId: type: integer example: 1 + name: + type: string + example: HTM 90% Korting + status: + type: string + example: Active + fromInclusive: + type: string + format: date-time-offset + example: "2024-11-25T13:25:00+01:00" + untilInclusive: + type: string + format: date-time-offset + description: >- + If not present, this product-instance represents a subscription/contract without a real end. If present, it can be either the natural end date or the refund timestamp. + example: "2024-12-25T03:59:59+01:00" + productCategory: + type: object + description: The category of the originating HTM product definition + properties: + productCategoryId: + type: integer + example: 1 + name: + type: string + example: Kortingsabonnement + gboTypeOfProduct: + type: string + example: discount + description: The type of the product instance as GBO defines it + purchasedProductId: + type: integer + example: 1 + orderId: + type: string + format: uuid + example: 501B17EF-36C4-4039-B92C-6517969B464E + orderLineId: + type: string + format: uuid + example: 38B17EF-36C4-4039-B92C-4817969B464E + contractId: + description: doen? of via purchasedProductId? + + -- 2.45.2 From 5c83fff7bf08ebd7f58f08116786151a4c5893d1 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Wed, 4 Dec 2024 16:32:34 +0100 Subject: [PATCH 025/372] Java RabbitMQ POC project Ugly and hardcoded, as a POC should be --- src/java/rabbitmq-poc/.gitignore | 39 ++++++++ src/java/rabbitmq-poc/pom.xml | 49 ++++++++++ .../nl/ovpay/queue/DummyX509TrustManager.java | 40 +++++++++ .../src/main/java/nl/ovpay/queue/Helpers.java | 90 +++++++++++++++++++ .../java/nl/ovpay/queue/RabbitConnector.java | 68 ++++++++++++++ .../src/main/resources/log4j2.xml | 17 ++++ 6 files changed, 303 insertions(+) create mode 100644 src/java/rabbitmq-poc/.gitignore create mode 100644 src/java/rabbitmq-poc/pom.xml create mode 100644 src/java/rabbitmq-poc/src/main/java/nl/ovpay/queue/DummyX509TrustManager.java create mode 100644 src/java/rabbitmq-poc/src/main/java/nl/ovpay/queue/Helpers.java create mode 100644 src/java/rabbitmq-poc/src/main/java/nl/ovpay/queue/RabbitConnector.java create mode 100644 src/java/rabbitmq-poc/src/main/resources/log4j2.xml diff --git a/src/java/rabbitmq-poc/.gitignore b/src/java/rabbitmq-poc/.gitignore new file mode 100644 index 0000000..fc3f89c --- /dev/null +++ b/src/java/rabbitmq-poc/.gitignore @@ -0,0 +1,39 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/src/java/rabbitmq-poc/pom.xml b/src/java/rabbitmq-poc/pom.xml new file mode 100644 index 0000000..ef24740 --- /dev/null +++ b/src/java/rabbitmq-poc/pom.xml @@ -0,0 +1,49 @@ + + 4.0.0 + nl.ovpay + rabbitmq + 1.0-SNAPSHOT + OVpay - RabbitMQ POC + + + com.rabbitmq + amqp-client + 5.23.0 + + + + + org.apache.logging.log4j + log4j-api + 2.23.1 + + + org.apache.logging.log4j + log4j-core + 2.23.1 + + + org.apache.logging.log4j + log4j-slf4j-impl + 2.23.1 + + + org.json + json + 20240303 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 11 + 11 + + + + + diff --git a/src/java/rabbitmq-poc/src/main/java/nl/ovpay/queue/DummyX509TrustManager.java b/src/java/rabbitmq-poc/src/main/java/nl/ovpay/queue/DummyX509TrustManager.java new file mode 100644 index 0000000..aa92afc --- /dev/null +++ b/src/java/rabbitmq-poc/src/main/java/nl/ovpay/queue/DummyX509TrustManager.java @@ -0,0 +1,40 @@ +package nl.ovpay.queue; + +import java.security.cert.X509Certificate; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +public final class DummyX509TrustManager implements X509TrustManager { + + private static DummyX509TrustManager INSTANCE; + + private DummyX509TrustManager() { + // prevent instantiation + } + + public static DummyX509TrustManager getInstance() { + if (INSTANCE == null) { + INSTANCE = new DummyX509TrustManager(); + } + return INSTANCE; + } + + public static TrustManager[] getDummyArray() { + if (INSTANCE == null) { + INSTANCE = new DummyX509TrustManager(); + } + return new TrustManager[] { INSTANCE }; + } + + public X509Certificate[] getAcceptedIssuers() { + return null; + } + + public void checkClientTrusted(X509Certificate[] certs, String authType) { + } + + public void checkServerTrusted(X509Certificate[] certs, String authType) { + } +} + + diff --git a/src/java/rabbitmq-poc/src/main/java/nl/ovpay/queue/Helpers.java b/src/java/rabbitmq-poc/src/main/java/nl/ovpay/queue/Helpers.java new file mode 100644 index 0000000..fce38e7 --- /dev/null +++ b/src/java/rabbitmq-poc/src/main/java/nl/ovpay/queue/Helpers.java @@ -0,0 +1,90 @@ +package nl.ovpay.queue; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.util.HashMap; +import java.util.Map; +import java.util.StringJoiner; +import javax.net.ssl.HttpsURLConnection; +import javax.net.ssl.SSLContext; + +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public final class Helpers { + + private static Logger LOGGER = LoggerFactory.getLogger(Helpers.class); + + public static String getAlertId(String string) throws IOException { + return new JSONObject(string).get("alertId").toString(); + } + + public static String getXbot(String string) throws IOException { + return new JSONObject(string).get("xbot").toString(); + } + + public static void getAlertDetails(String alertId, String xBot, String gboBearerToken) throws Exception { + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, DummyX509TrustManager.getDummyArray(), new java.security.SecureRandom()); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + + + URL url = new URL("https://api.sbx.idbt.translink.nl/api/v3/id-media/tokens/xbot/" + xBot + "/alerts/" + alertId + "/details"); + URLConnection con = url.openConnection(); + HttpURLConnection http = (HttpURLConnection)con; + http.setRequestMethod("GET"); + http.setDoOutput(true); + http.setRequestProperty("Authorization", "Bearer " + gboBearerToken); + http.connect(); + + try(InputStream is = http.getInputStream()) { + String response = new String(is.readAllBytes(), StandardCharsets.UTF_8); + LOGGER.info("GBO API 8851 alert details response for xBOT " + xBot + ": \n" + new JSONObject(response).toString(2)); + } + } + + public static String getGboBearerToken() throws IOException, NoSuchAlgorithmException, KeyManagementException { + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, DummyX509TrustManager.getDummyArray(), new java.security.SecureRandom()); + HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); + + URL url = new URL("https://api.sbx.idbt.translink.nl/api/v3/auth/oauth2/token"); + URLConnection con = url.openConnection(); + HttpURLConnection http = (HttpURLConnection)con; + http.setRequestMethod("POST"); + http.setDoOutput(true); + + Map arguments = new HashMap<>(); + arguments.put("client_id", "HTM-auth-client"); + arguments.put("client_secret", "HTM-auth-827kJJ"); + arguments.put("grant_type", "client_credentials"); + StringJoiner sj = new StringJoiner("&"); + for(Map.Entry entry : arguments.entrySet()) + sj.add(URLEncoder.encode(entry.getKey(), "UTF-8") + "=" + + URLEncoder.encode(entry.getValue(), "UTF-8")); + byte[] out = sj.toString().getBytes(StandardCharsets.UTF_8); + int length = out.length; + + http.setFixedLengthStreamingMode(length); + http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); + http.connect(); + try(OutputStream os = http.getOutputStream()) { + os.write(out); + } + try(InputStream is = http.getInputStream()) { + String response = new String(is.readAllBytes(), StandardCharsets.UTF_8); + JSONObject json = new JSONObject(response); + LOGGER.info("Got GBO bearer token: " + json.get("access_token")); + return json.get("access_token").toString(); + } + } +} diff --git a/src/java/rabbitmq-poc/src/main/java/nl/ovpay/queue/RabbitConnector.java b/src/java/rabbitmq-poc/src/main/java/nl/ovpay/queue/RabbitConnector.java new file mode 100644 index 0000000..a408dc0 --- /dev/null +++ b/src/java/rabbitmq-poc/src/main/java/nl/ovpay/queue/RabbitConnector.java @@ -0,0 +1,68 @@ +package nl.ovpay.queue; + +import java.util.Map; + +import com.rabbitmq.client.AMQP; +import com.rabbitmq.client.Channel; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.DeliverCallback; +import com.rabbitmq.client.impl.ForgivingExceptionHandler; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RabbitConnector { + + private static final Logger LOGGER = LoggerFactory.getLogger(RabbitConnector.class); + + public static void main(String[] args) throws Exception { + ConnectionFactory factory = new ConnectionFactory(); + factory.setVirtualHost("/"); + factory.setAutomaticRecoveryEnabled(true); + factory.setPort(443); + factory.setHost("not.sbx.idbt.translink.nl"); + factory.setUsername("BEID_3_ALERTS_nZs3"); + factory.setPassword("VyubhPnczKgTB2zJ"); + factory.useSslProtocol("TLSv1.2"); + factory.setExceptionHandler(new ForgivingExceptionHandler()); + Map configs = factory.getClientProperties(); + LOGGER.info("Client properties: \n" + new JSONObject(configs).toString(2)); + + Connection connection = factory.newConnection(); + Channel channel = connection.createChannel(); + DeliverCallback deliverCallback = initDeliverCallback(channel); + + AMQP.Queue.DeclareOk queue = channel.queueDeclarePassive("BEID_3.ALERTS"); + LOGGER.info( + "Declared queue: " + queue.getQueue() + ", consumer count: " + queue.getConsumerCount() + ", message count: " + + queue.getMessageCount()); + + // Second parameter controls autoAck - false = no autoAck = messages are only deleted from queue after consumer acknowledges them + channel.basicConsume(queue.getQueue(), false, deliverCallback, consumerTag -> {}); + LOGGER.info("Waiting for messages from the queue. To exit press CTRL+C"); + } + + private static DeliverCallback initDeliverCallback(Channel channel) { + return (consumerTag, delivery) -> { + final String message = new String(delivery.getBody(), "UTF-8"); + LOGGER.info("Received from message from the queue: \n " + new JSONObject(message).toString(2)); + + LOGGER.info("Acknowledging message with delivery tag: " + delivery.getEnvelope().getDeliveryTag()); + channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); + LOGGER.info("Successfully acknowledged message with delivery tag: " + delivery.getEnvelope().getDeliveryTag()); + + LOGGER.info("Getting alert details via GBO API 8851..."); + try { + String alertId = Helpers.getAlertId(message); + String xBot = Helpers.getXbot(message); + String gboBearerToken = Helpers.getGboBearerToken(); + + Helpers.getAlertDetails(alertId, xBot, gboBearerToken); + + } catch (Exception e) { + throw new RuntimeException(e); + } + }; + } +} diff --git a/src/java/rabbitmq-poc/src/main/resources/log4j2.xml b/src/java/rabbitmq-poc/src/main/resources/log4j2.xml new file mode 100644 index 0000000..47eb2d8 --- /dev/null +++ b/src/java/rabbitmq-poc/src/main/resources/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + -- 2.45.2 From 7c666aa351bc8943400ac1aca99699db65e8c269 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Wed, 4 Dec 2024 17:40:58 +0100 Subject: [PATCH 026/372] RC1 --- src/openapi/customers/SE-customers.yaml | 109 +++++++++++++++--------- 1 file changed, 71 insertions(+), 38 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index f3d2c16..c396c34 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -4,9 +4,9 @@ info: description: >- Service Engine APIs for HTM Customers. These are NOT the CRUD APIs to access raw data in the database. To be used by touchpoints to get information about HTM customers. - version: '1.0' + version: 'x.x' servers: - - url: https://api.integratielaag.nl/abt/serviceengine/customers/1.0 + - url: https://api.integratielaag.nl/abt/serviceengine/customers/x.x tags: - name: ServiceEngine Customers description: >- @@ -135,7 +135,7 @@ paths: application/json: example: { - "type": "https://api.integratielaag.nl/abt/serviceengine/1.0/customers", + "type": "https://api.integratielaag.nl/abt/serviceengine/x.x/customers", "apiErrorCode": "400.1", "title": "Niet gevonden", "detail": "Klant niet gevonden", @@ -152,7 +152,7 @@ paths: application/json: example: { - "type": "https://api.integratielaag.nl/abt/serviceengine/1.0/customers", + "type": "https://api.integratielaag.nl/abt/serviceengine/x.x/customers", "apiErrorCode": "409.1", "title": "Meer dan 1 klantprofiel gevonden", "detail": "Meer dan 1 klantprofiel gevonden. Verfijn je zoekcriteria.", @@ -171,7 +171,7 @@ paths: application/json: schema: $ref: '#/components/schemas/OvPayTokensResponse' - /customers/tokens/{ovPayTokenId}/productInstances: + /customers/tokens/{ovPayTokenId}/productinstances: get: tags: - ServiceEngine Customers @@ -202,7 +202,7 @@ paths: value: productInstances: [] getSingleProductInstance: - summary: One product-instance found on token + summary: One non-renewable product-instance value: { "productInstances": [ @@ -210,17 +210,26 @@ paths: "productId": 1, "name": "HTM 90% Korting", "status": "Active", - "fromInclusive": "2024-11-25T13:25:00+01:00", - "untilInclusive": "2024-12-25T03:59:59+01:00", + "isRenewable": true, "productCategory": { "productCategoryId": 1, "name": "Kortingsabonnement" }, - "gboTypeOfProduct": "discount", - "purchasedProductId": 1, + "fromInclusive": "2024-11-25T13:25:00+01:00", + "untilInclusive": "2024-12-25T03:59:59+01:00", "orderId": "501B17EF-36C4-4039-B92C-6517969B464E", "orderLineId": "38B17EF-36C4-4039-B92C-4817969B464E", - "contractId": "string" + "contractId": "56B17EF-C436-9043-B76C-481797WEB464F", + "_links": { + "get_order": { + "href": "https://api.integratielaag.nl/abt/serviceengine/x.x/orders/501B17EF-36C4-4039-B92C-6517969B464E", + "method": "GET" + }, + "get_contract": { + "href": "https://api.integratielaag.nl/abt/serviceengine/x.x/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F", + "method": "GET" + } + } } ] } @@ -316,7 +325,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/addresses/1 + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/addresses/1 method: type: string example: DELETE @@ -354,7 +363,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/phones/1 + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/phones/1 method: type: string example: DELETE @@ -366,7 +375,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers method: type: string example: PATCH @@ -378,7 +387,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/tokens method: type: string example: GET @@ -390,7 +399,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/tokens method: type: string example: POST @@ -502,7 +511,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens/1 + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/tokens/1 method: type: string example: PATCH @@ -514,7 +523,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens/1/replace + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/tokens/1/replace method: type: string example: POST @@ -526,7 +535,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens/1 + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/tokens/1 method: type: string example: DELETE @@ -535,7 +544,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens/1/productInstances + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/tokens/1/productinstances method: type: string example: GET @@ -544,7 +553,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/serviceengine/1.0/customers/tokens/1/trips + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/tokens/1/trips method: type: string example: GET @@ -599,17 +608,11 @@ components: example: HTM 90% Korting status: type: string + enum: [ "Active", "Ended", "Refunded" ] example: Active - fromInclusive: - type: string - format: date-time-offset - example: "2024-11-25T13:25:00+01:00" - untilInclusive: - type: string - format: date-time-offset - description: >- - If not present, this product-instance represents a subscription/contract without a real end. If present, it can be either the natural end date or the refund timestamp. - example: "2024-12-25T03:59:59+01:00" + isRenewable: + type: boolean + example: true productCategory: type: object description: The category of the originating HTM product definition @@ -620,13 +623,16 @@ components: name: type: string example: Kortingsabonnement - gboTypeOfProduct: + fromInclusive: type: string - example: discount - description: The type of the product instance as GBO defines it - purchasedProductId: - type: integer - example: 1 + format: date-time-offset + example: "2024-11-25T13:25:00+01:00" + untilInclusive: + type: string + format: date-time-offset + description: >- + If not present, this product-instance represents a subscription/contract without a real end date. If present, it can be either the natural end date or the refund timestamp. + example: "2024-12-25T03:59:59+01:00" orderId: type: string format: uuid @@ -636,7 +642,34 @@ components: format: uuid example: 38B17EF-36C4-4039-B92C-4817969B464E contractId: - description: doen? of via purchasedProductId? + type: string + format: uuid + example: 56B17EF-C436-9043-B76C-481797WEB464F + description: Only present for subscriptions/contracts + _links: + type: object + properties: + get_order: + type: object + properties: + href: + type: string + description: Always present for any HTM product-instance + example: https://api.integratielaag.nl/abt/serviceengine/x.x/orders/501B17EF-36C4-4039-B92C-6517969B464E + method: + type: string + example: GET + get_contract: + type: object + properties: + href: + type: string + description: Only present for subscriptions/contracts + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/contracts/56B17EF-C436-9043-B76C-481797WEB464F + method: + type: string + example: GET + -- 2.45.2 From ee8cdfc660bd1d72c49d4cd648976bc0f547c215 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Thu, 5 Dec 2024 15:23:37 +0100 Subject: [PATCH 027/372] Remove _templates, add self under _links, add some new links and attributes --- src/openapi/customers/SE-customers.yaml | 207 +++++++++++------------- 1 file changed, 90 insertions(+), 117 deletions(-) diff --git a/src/openapi/customers/SE-customers.yaml b/src/openapi/customers/SE-customers.yaml index c396c34..7238481 100644 --- a/src/openapi/customers/SE-customers.yaml +++ b/src/openapi/customers/SE-customers.yaml @@ -30,11 +30,21 @@ paths: schema: type: integer example: 1000001 + - name: customerStatusId + in: query + schema: + type: integer + example: 1 - name: debtorNumber in: query schema: type: integer example: 100001 + - name: debtorStatusId + in: query + schema: + type: integer + example: 1 - name: birthname in: query schema: @@ -221,6 +231,10 @@ paths: "orderLineId": "38B17EF-36C4-4039-B92C-4817969B464E", "contractId": "56B17EF-C436-9043-B76C-481797WEB464F", "_links": { + "self": { + "href": "https://api.integratielaag.nl/abt/serviceengine/x.x/customers/tokens/1/productinstances/1", + "method": "GET" + }, "get_order": { "href": "https://api.integratielaag.nl/abt/serviceengine/x.x/orders/501B17EF-36C4-4039-B92C-6517969B464E", "method": "GET" @@ -244,9 +258,6 @@ components: customerNumber: type: integer example: 1000001 - debtorNumber: - type: string - example: DB100001 customerStatus: type: object properties: @@ -256,6 +267,18 @@ components: name: type: string example: Active + debtorNumber: + type: string + example: DB100001 + debtorStatus: + type: object + properties: + debtorStatusId: + type: integer + example: 1 + name: + type: string + example: Active person: type: object properties: @@ -320,7 +343,16 @@ components: _links: type: object properties: - delete: + self: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/addresses/1 + method: + type: string + example: GET + delete_address: type: object properties: href: @@ -358,7 +390,16 @@ components: _links: type: object properties: - delete: + self: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/phones/1 + method: + type: string + example: GET + delete_phone: type: object properties: href: @@ -370,6 +411,25 @@ components: _links: type: object properties: + self: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers + method: + type: string + example: GET + create_customer_status: + type: object + description: ONLY ALLOWED FOR SMP - Create a new customer status + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/statuses + method: + type: string + example: POST partial_edit: type: object properties: @@ -379,9 +439,6 @@ components: method: type: string example: PATCH - templated: - type: boolean - example: true get_tokens: type: object properties: @@ -391,9 +448,6 @@ components: method: type: string example: GET - templated: - type: boolean - example: true create_token: type: object properties: @@ -402,66 +456,7 @@ components: example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/tokens method: type: string - example: POST - templated: - type: boolean - example: true - _templates: - type: object - properties: - partial_edit: - type: object - properties: - method: - type: string - example: PATCH - properties: - example: - [ - { name: person, required: true, properties: [ - { name: prefix, required: false, type: string }, - { name: birthname, required: false, type: string }, - { name: surname, required: false, type: string }, - { name: suffix, required: false, type: string }, - { name: dateOfBirth, required: false, type: string }, - { name: emailAddress, required: false, type: string }, - { name: addresses, required: false, multi: true, properties: [ - { name: addressId, required: false, type: integer }, - { name: isPreferred, required: false, type: boolean }, - { name: addressTypeId, required: false, type: integer }, - { name: street, required: false, type: string }, - { name: houseNumber, required: false, type: integer }, - { name: houseNumberSuffix, required: false, type: string }, - { name: postalCode, required: false, type: string }, - { name: city, required: false, type: string }, - { name: country, required: false, type: string } - ]}, - { name: phones, required: false, multi: true, properties: [ - { name: phoneId, required: false, type: integer }, - { name: isPreferred, required: false, type: boolean }, - { name: phoneTypeId, required: false, type: integer }, - { name: number, required: false, type: string }, - { name: countryCode, required: false, type: string } - ]} - ] } - ] - create_token: - type: object - properties: - method: - type: string - example: POST - properties: - example: - [ - { name: ovPayToken, required: true, properties: [ - { name: tokenTypeId, required: true, type: integer }, - { name: alias, required: true, type: string }, - { name: serviceReferenceId, required: false, type: string }, - { name: amount, required: false, type: integer }, - ]} - ] - + example: POST OvPayTokensResponse: type: object required: @@ -506,8 +501,18 @@ components: _links: type: object properties: - partial_edit: + self: type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/tokens/1 + method: + type: string + example: GET + partial_edit: + type: object + description: External touchpoints are only allowed to change alias - SMP can also change tokenStatus properties: href: type: string @@ -515,10 +520,7 @@ components: method: type: string example: PATCH - templated: - type: boolean - example: true - replace: + replace_token: type: object properties: href: @@ -527,10 +529,7 @@ components: method: type: string example: POST - templated: - type: boolean - example: true - delete: + delete_token: type: object properties: href: @@ -539,7 +538,7 @@ components: method: type: string example: DELETE - productInstances: + get_productinstances: type: object properties: href: @@ -548,7 +547,7 @@ components: method: type: string example: GET - trips: + get_trips: type: object properties: href: @@ -557,41 +556,6 @@ components: method: type: string example: GET - _templates: - type: object - properties: - partial_edit: - type: object - properties: - method: - type: string - example: PATCH - properties: - example: - [ - { name: ovPayToken, required: true, properties: [ - { name: alias, required: false, type: string } - ]} - ] - replace: - type: object - properties: - method: - type: string - example: POST - properties: - example: - [ - { name: ovPayToken, required: true, properties: [ - { name: newTokenId, required: false, type: integer }, - { name: tokenTypeId, required: false, type: integer }, - { name: alias, required: false, type: string }, - { name: serviceReferenceId, required: false, type: string }, - { name: amount, required: false, type: integer }, - ]} - ] - - OvPayTokenProductInstancesResponse: type: object properties: @@ -649,6 +613,15 @@ components: _links: type: object properties: + self: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/x.x/customers/tokens/1/productinstances + method: + type: string + example: GET get_order: type: object properties: -- 2.45.2 From 89b5f0a169f73bb8d301d85cc078db635e79d8f9 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Thu, 5 Dec 2024 15:47:56 +0100 Subject: [PATCH 028/372] Write logs to file, add color to Console logs, ignore logfiles from Git --- src/java/rabbitmq-poc/.gitignore | 4 +++- src/java/rabbitmq-poc/src/main/resources/log4j2.xml | 12 +++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/java/rabbitmq-poc/.gitignore b/src/java/rabbitmq-poc/.gitignore index fc3f89c..717ccc0 100644 --- a/src/java/rabbitmq-poc/.gitignore +++ b/src/java/rabbitmq-poc/.gitignore @@ -36,4 +36,6 @@ build/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store + +/logs \ No newline at end of file diff --git a/src/java/rabbitmq-poc/src/main/resources/log4j2.xml b/src/java/rabbitmq-poc/src/main/resources/log4j2.xml index 47eb2d8..62c23fb 100644 --- a/src/java/rabbitmq-poc/src/main/resources/log4j2.xml +++ b/src/java/rabbitmq-poc/src/main/resources/log4j2.xml @@ -8,10 +8,20 @@ + + + + + + + - + + -- 2.45.2 From 9c17102d048c396b49654f8a191a8e6e6309ecf2 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 11 Dec 2024 13:56:27 +0100 Subject: [PATCH 029/372] OVPAY-879 - Small changes to cost center. --- src/openapi/fiko/fiko-crud.yaml | 69 ++++++++++++++++++++++++++++----- 1 file changed, 59 insertions(+), 10 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index d3a48ac..9425e09 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -108,13 +108,19 @@ paths: schema: type: string example: FIKO-123456 - description: The aggregation reference of the transaction. + description: The aggregation reference of the transaction. %00 is searching for NULL-values. - in: query name: accountingSystemReference schema: type: string example: U4F-123456 - description: The accounting system reference of the transaction. + description: The accounting system reference of the transaction. %00 is searching for NULL-values. + - in: query + name: highestProcessingFailureStatus + schema: + type: string + example: open + description: Find the highest processing failure status of the transaction. %00 is searching for NULL-values. responses: "200": description: OK @@ -756,12 +762,6 @@ paths: type: string example: 900 description: The department. - - in: query - name: costCenter - schema: - type: string - example: 84955 - description: The cost center. - in: query name: costType schema: @@ -818,6 +818,12 @@ paths: format: uuid example: 08d96f94-f468-467e-9068-c86c34f43097 description: Find product metadata that is linked to this source metadata. + - in: query + name: costCenter + schema: + type: string + example: 84955 + description: Find product metadata that is linked to this cost center. responses: "200": description: OK @@ -833,7 +839,6 @@ paths: "productMetadataId": "39a87c2a-9011-4dfd-b35e-1245a98c2e61", "productCode": "4031", "department": "900", - "costCenter": "84955", "costType": "619031", "description": "O4031_Reisproduct HTM 1 dag Anoniem", "documentCode": "VERK_FACTUUR", @@ -865,6 +870,7 @@ paths: "validFrom": "2024-01-01T00:00:00.000", "validUntil": null, }, + "costCenter": "84955", "validFrom": "2024-03-22T09:00:00", "validUntil": null, }, @@ -927,6 +933,7 @@ paths: "contraAccountMetadataId": "e0af8c8f-d421-4567-a14e-48e2a1bb86fb", "concessionId": 1, "sourceMetadataId": "08d96f94-f468-467e-9068-c86c34f43097", + "costCenter": "84955", "validFrom": "2024-03-22T09:00:00", "validUntil": null, }, @@ -934,6 +941,7 @@ paths: "contraAccountMetadataId": "02e458ce-f77a-4262-8b38-490e54f52856", "concessionId": 2, "sourceMetadataId": "08d96f94-f468-467e-9068-c86c34f43097", + "costCenter": "84955", "validFrom": "2024-03-22T09:00:00", "validUntil": null, }, @@ -973,7 +981,6 @@ paths: { "productCode": "4031", "department": "900", - "costCenter": "84955", "costType": "619031", "description": "O4031_Reisproduct HTM 1 dag Anoniem", "documentCode": "VERK_FACTUUR", @@ -990,6 +997,47 @@ paths: $ref: "#/components/schemas/unavailable" example: { "productMetadataId": "39a87c2a-9011-4dfd-b35e-1245a98c2e61" } + /productmetadata/{productMetadataId}/productcontraaccounts: + parameters: + - in: path + name: productMetadataId + schema: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: true + description: The id of the product metadata. + post: + summary: Add product contra account. + description: Add product contra account. + tags: + - Metadata v2 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "contraAccountMetadataId": "e0af8c8f-d421-4567-a14e-48e2a1bb86fb", + "concessionId": 1, + "sourceMetadataId": "08d96f94-f468-467e-9068-c86c34f43097", + "costCenter": "84955", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + } + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "productContraAccountId": "39a87c2a-9011-4dfd-b35e-1245a98c2e61", + } /productcontraaccounts/{productContraAccountId}: parameters: - in: path @@ -1016,6 +1064,7 @@ paths: "contraAccountMetadataId": "e0af8c8f-d421-4567-a14e-48e2a1bb86fb", "concessionId": 1, "sourceMetadataId": "08d96f94-f468-467e-9068-c86c34f43097", + "costCenter": "84955", "validFrom": "2024-03-22T09:00:00", "validUntil": null, } -- 2.45.2 From e818ab6489d1993d9091aa7028cce6316270fca0 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 11 Dec 2024 16:09:59 +0100 Subject: [PATCH 030/372] OVPAY-879 - Converted search params to array. --- src/openapi/fiko/fiko-crud.yaml | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 9425e09..fe786a7 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -118,8 +118,11 @@ paths: - in: query name: highestProcessingFailureStatus schema: - type: string - example: open + type: array + items: + type: string + example: [open] + explode: false description: Find the highest processing failure status of the transaction. %00 is searching for NULL-values. responses: "200": @@ -447,6 +450,7 @@ paths: items: type: string example: [created, succeeded, failed] + explode: false description: The action of the event. - in: query name: description @@ -808,8 +812,11 @@ paths: - in: query name: concessionId schema: - type: integer - example: 1 + type: array + items: + type: integer + example: [1, 2] + explode: false description: Find product metadata that is linked to this concession. - in: query name: sourceMetadataId @@ -1510,8 +1517,11 @@ paths: - in: query name: rejectionProcessing schema: - type: string - example: system + type: array + items: + type: string + example: [mail, system] + explode: false description: The rejection processing of the source. - in: query name: rejectionInfo @@ -1833,6 +1843,7 @@ paths: items: type: integer example: [1, 2] + explode: false description: The id of the concession. - in: query name: percentage -- 2.45.2 From d0acf2b46511af75b00919afbd50fd7a0f06d339 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Mon, 16 Dec 2024 17:23:41 +0100 Subject: [PATCH 031/372] Add optional parentProductId query parameter --- src/openapi/products/products-crud-v2.2.yaml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/openapi/products/products-crud-v2.2.yaml b/src/openapi/products/products-crud-v2.2.yaml index 0f69225..a203013 100644 --- a/src/openapi/products/products-crud-v2.2.yaml +++ b/src/openapi/products/products-crud-v2.2.yaml @@ -1,13 +1,13 @@ openapi: 3.0.1 info: - title: ABTProducts (based on domainmodel v2.2) + title: ABTProducts description: >- CRUD APIs for HTM products (based on the new domainmodel v2.2). Internal use only; external touchpoints can get read-only, filtered access via the HTM Service Engine, using a different endpoint. - version: '2.2' + version: '1.0' servers: - - url: https://api.integratielaag.nl/abt/products/2.2 + - url: https://api.integratielaag.nl/abt/products/21.0 tags: - name: ABTProducts CRUD description: >- @@ -27,6 +27,16 @@ paths: only products that have active sellingPeriods for touchpoints within the same retailer as the calling retailer are returned. \ Touchpoint 1 and 2 belong to retailer 1; touchpoint 3 and 4 belong to retailer 2. + parameters: + - name: parentProductId + in: query + required: false + description: |- + Only return products that refer to the given parentProductId. \ + Returns parent-products (i.e. products with parentProductId = null) if left empty. + schema: + type: integer + example: 1 responses: '200': description: OK -- 2.45.2 From 53aa8cc62c35fbaef492f7f7315f02e22ebf22fc Mon Sep 17 00:00:00 2001 From: Max Martens Date: Mon, 16 Dec 2024 17:25:09 +0100 Subject: [PATCH 032/372] Typo --- src/openapi/products/products-crud-v2.2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openapi/products/products-crud-v2.2.yaml b/src/openapi/products/products-crud-v2.2.yaml index a203013..f6afd2e 100644 --- a/src/openapi/products/products-crud-v2.2.yaml +++ b/src/openapi/products/products-crud-v2.2.yaml @@ -7,7 +7,7 @@ info: Service Engine, using a different endpoint. version: '1.0' servers: - - url: https://api.integratielaag.nl/abt/products/21.0 + - url: https://api.integratielaag.nl/abt/products/1.0 tags: - name: ABTProducts CRUD description: >- -- 2.45.2 From ae387e822c1384058cf5ec0d9c8e78455aa1683e Mon Sep 17 00:00:00 2001 From: Max Martens Date: Mon, 16 Dec 2024 17:26:38 +0100 Subject: [PATCH 033/372] Update description --- src/openapi/products/products-crud-v2.2.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openapi/products/products-crud-v2.2.yaml b/src/openapi/products/products-crud-v2.2.yaml index f6afd2e..3daa4ec 100644 --- a/src/openapi/products/products-crud-v2.2.yaml +++ b/src/openapi/products/products-crud-v2.2.yaml @@ -20,8 +20,8 @@ paths: - ABTProducts CRUD summary: Get a list of all defined HTM products description: |- - Get a list of all HTM products, without any filters. Only a few details - are returned per product - use the `GET /products/{productId}` endpoint + Get a list of all HTM products that refer to a given parentProductId (or without parent, if not specified), without any other filters. \ + Only a few details are returned per product - use the `GET /products/{productId}` endpoint to get more details. \ In the examples, it can be seen that (when a touchpoint HTTP header is present) only products that have active sellingPeriods for touchpoints within the same -- 2.45.2 From 1f04619ff7e632d056f6a1c2084f05cd20e7147c Mon Sep 17 00:00:00 2001 From: Herald Date: Wed, 18 Dec 2024 16:04:37 +0100 Subject: [PATCH 034/372] added current state of customers CRUD as on WSO2 atm --- src/openapi/customers/customers-crud-v2.yaml | 2900 +++++++++++++++++- 1 file changed, 2898 insertions(+), 2 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 72ef1eb..e3e2650 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -3,9 +3,2124 @@ info: title: ABT Customers CRUD APIs v2 version: "1.0" description: CRUD APIs for ABT Customer database. These are NOT the functional APIs from Service Engine. -servers: - - url: https://api.integratielaag.nl/v1 +servers: + - url: https://api.integratielaag.nl/v2 paths: + /customers/list: + get: + tags: + - ABTCustomers + summary: Search for customer profile list + description: >- + search for a customer profile list in the ABT database with query + parameters + parameters: + - name: customerProfileId + in: query + required: false + style: form + explode: true + schema: + type: number + - name: customerNumber + in: query + required: false + style: form + explode: true + schema: + type: number + - name: emailAddress + in: query + required: false + style: form + explode: true + schema: + type: string + - name: chipCardNumber + in: query + required: false + style: form + explode: true + schema: + type: string + - name: ovPasNumber + in: query + required: false + style: form + explode: true + schema: + type: string + - name: phoneNumber + in: query + required: false + style: form + explode: true + schema: + type: string + - name: phoneCountryCode + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressStreet + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressHouseNumber + in: query + required: false + style: form + explode: true + schema: + type: number + - name: addressHouseNumberSuffix + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressPostalCode + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressCity + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressCountry + in: query + required: false + style: form + explode: true + schema: + type: string + - name: birthname + in: query + required: false + style: form + explode: true + schema: + type: string + - name: surname + in: query + required: false + style: form + explode: true + schema: + type: string + - name: dateOfBirth + in: query + required: false + style: form + explode: true + schema: + type: string + - name: customerStatus + in: query + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Successful retrieved a customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/getCustomerProfileList' + examples: + fullCustomerProfile: + value: + Entries: + - customerProfileId: 1 + customerNumber: 1000001 + debtorNumber: TEST001 + debtorStateId: 1 + vascustomerNumber: CST005 + customerPreference: + languageId: 1 + customerStatus: + - name: active + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: '2022-08-05 15:01:00.000' + - name: blocked + fromInclusive: '2022-08-05 15:01:00.000' + toInclusive: null + person: + birthname: Pieter + surname: De valen + prefix: dhr + suffix: De + dateOfBirth: '2002-10-29' + emailAddress: TEST@HTM.NL + address: + - addressId: 1 + street: mystreet + houseNumber: 1 + houseNumberSuffix: null + postalCode: 0000AA + city: Den Haag + country: NL + isPreferred: true + addressType: Office + - addressId: 2 + street: mystreet 33 + houseNumber: 1 + houseNumberSuffix: null + postalCode: 4455CA + city: Den BOSCH + country: NL + isPreferred: true + addressType: Office + phone: + - phoneId: 1 + number: '3112345678' + countryCode: NL + phoneType: TestNaam + isPreferred: true + - phoneId: 2 + number: '333225588' + countryCode: ES + phoneType: TestNaam + isPreferred: false + ovChipCard: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: '2023-01-01' + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: '2025-01-01' + alias: alias + ovPayToken: + - ovPayTokenId: 126 + tokenTypeId: 1 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 1 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenTypeId: 1 + xTat: hhe2830283 + xBot: jdhd828033 + alias: alias + lastDigits: '5674' + ovpasNumber: OV34568 + tokenStatusId: 1 + expirationDate: '2024-04-20T17:05:52.000+02:00' + replacedByTokenId: 2 + audit: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: '2023-10-20T17:05:52.000+02:00' + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + - customerNumber: 1000002 + debtorNumber: TEST001 + debtorStateId: 1 + vascustomerNumber: CST005 + customerPreference: + languageId: 1 + customerStatus: + - name: active + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: '2022-08-05 15:01:00.000' + - name: blocked + fromInclusive: '2022-08-05 15:01:00.000' + toInclusive: null + person: + birthname: Pieter + surname: De valen + prefix: dhr + suffix: De + dateOfBirth: '2002-10-29' + emailAddress: TEST@HTM.NL + address: + - addressId: 1 + street: mystreet + houseNumber: 1 + houseNumberSuffix: null + postalCode: 0000AA + city: Den Haag + country: NL + isPreferred: true + addressType: Office + - addressId: 2 + street: mystreet 33 + houseNumber: 1 + houseNumberSuffix: null + postalCode: 4455CA + city: Den BOSCH + country: NL + isPreferred: true + addressType: Office + phone: + - phoneId: 1 + number: '3112345678' + countryCode: NL + phoneType: TestNaam + isPreferred: true + - phoneId: 2 + number: '333225588' + countryCode: ES + phoneType: TestNaam + isPreferred: false + ovChipCard: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: '2023-01-01' + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: '2025-01-01' + alias: alias + ovPayToken: + - ovPayTokenId: 126 + tokenTypeId: 1 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 1 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenTypeId: 1 + xTat: hhe2830283 + xBot: jdhd828033 + alias: alias + lastDigits: '5674' + ovpasNumber: OV34568 + tokenStatusId: 1 + expirationDate: '2024-04-20T17:05:52.000+02:00' + replacedByTokenId: 2 + audit: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: '2023-10-20T17:05:52.000+02:00' + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + href: null + minimumCustomerProfile: + value: + Entries: + - customerNumber: 1000008 + debtorNumber: null + debtorStateId: null + vascustomerNumber: null + customerPreference: + languageId: null + customerStatus: + - name: active + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: null + person: + birthname: null + surname: null + prefix: null + suffix: null + dateOfBirth: null + emailAddress: TEST@TEST1.NL + address: [] + phone: [] + ovChipCard: [] + ovPayToken: [] + audit: [] + missingPersonDetailsCustomerProfile: + value: + Entries: + - emailAddress: TEST04@HTM.NL + customerNumber: 1000005 + debtorNumber: TEST004 + debtorStateId: 1 + vascustomerNumber: CST005 + customerPreference: + languageId: 1 + customerStatus: + - name: inactive + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: null + person: + birthname: Sophie + surname: Haardenburg + prefix: Mw + suffix: null + dateOfBirth: 1955-09-05+01:00 + emailAddress: TEST@TEST1.NL + address: [] + phone: [] + ovChipCard: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: '2023-01-01' + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: '2025-01-01' + alias: alias + ovPayToken: + - ovPayTokenId: 126 + tokenTypeId: 1 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 1 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenTypeId: 1 + xTat: hhe2830283 + xBot: jdhd828033 + alias: alias + lastDigits: '5674' + ovpasNumber: OV34568 + tokenStatusId: 1 + expirationDate: '2024-04-20T17:05:52.000+02:00' + replacedByTokenId: 2 + audit: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: '2023-10-20T17:05:52.000+02:00' + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers: + get: + tags: + - ABTCustomers + summary: Search for customer profile + description: 'search for a customer profile in the ABT database with query parameters ' + parameters: + - name: customerProfileId + in: query + required: false + style: form + explode: true + schema: + type: number + - name: customerNumber + in: query + required: false + style: form + explode: true + schema: + type: number + - name: emailAddress + in: query + required: false + style: form + explode: true + schema: + type: string + - name: chipCardNumber + in: query + required: false + style: form + explode: true + schema: + type: string + - name: ovPasNumber + in: query + required: false + style: form + explode: true + schema: + type: string + - name: phoneNumber + in: query + required: false + style: form + explode: true + schema: + type: string + - name: phoneCountryCode + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressStreet + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressHouseNumber + in: query + required: false + style: form + explode: true + schema: + type: number + - name: addressHouseNumberSuffix + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressPostalCode + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressCity + in: query + required: false + style: form + explode: true + schema: + type: string + - name: addressCountry + in: query + required: false + style: form + explode: true + schema: + type: string + - name: birthname + in: query + required: false + style: form + explode: true + schema: + type: string + - name: surname + in: query + required: false + style: form + explode: true + schema: + type: string + - name: dateOfBirth + in: query + required: false + style: form + explode: true + schema: + type: string + - name: customerStatus + in: query + required: false + style: form + explode: true + schema: + type: string + responses: + '200': + description: Successful retrieved a customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/getCustomerProfile' + examples: + fullCustomerProfile: + value: + customerProfileId: 1 + customerNumber: 1000001 + debtorNumber: TEST001 + vascustomerNumber: CST005 + debtorStateId: 1 + customerPreference: + languageId: 1 + customerStatus: + - name: active + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: '2022-08-05 15:01:00.000' + - name: blocked + fromInclusive: '2022-08-05 15:01:00.000' + toInclusive: null + person: + birthname: Pieter + surname: De valen + prefix: dhr + suffix: De + dateOfBirth: '2002-10-29' + emailAddress: TEST@HTM.NL + address: + - addressId: 1 + street: mystreet + houseNumber: 1 + houseNumberSuffix: null + postalCode: 0000AA + city: Den Haag + country: NL + isPreferred: true + addressType: Office + - addressId: 2 + street: mystreet 33 + houseNumber: 1 + houseNumberSuffix: null + postalCode: 4455CA + city: Den BOSCH + country: NL + isPreferred: true + addressType: Office + phone: + - phoneId: 1 + number: '3112345678' + countryCode: NL + phoneType: TestNaam + isPreferred: true + - phoneId: 2 + number: '333225588' + countryCode: ES + phoneType: TestNaam + isPreferred: false + ovChipCard: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: '2023-01-01' + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: '2025-01-01' + alias: alias + ovPayToken: + - ovPayTokenId: 126 + tokenTypeId: 1 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 1 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenTypeId: 1 + xTat: hhe2830283 + xBot: jdhd828033 + alias: alias + lastDigits: '5674' + ovpasNumber: OV34568 + tokenStatusId: 1 + expirationDate: '2024-04-20T17:05:52.000+02:00' + replacedByTokenId: 2 + audit: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: '2023-10-20T17:05:52.000+02:00' + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + minimumCustomerProfile: + value: + customerNumber: 1000008 + debtorNumber: null + debtorStateId: null + vascustomerNumber: null + customerPreference: + languageId: 1 + customerStatus: + - name: active + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: null + person: + birthname: null + surname: null + prefix: null + suffix: null + dateOfBirth: null + emailAddress: TEST@TEST1.NL + address: [] + phone: [] + ovChipCard: [] + ovPayToken: [] + audit: [] + missingPersonDetailsCustomerProfile: + value: + emailAddress: TEST04@HTM.NL + customerNumber: 1000005 + debtorNumber: TEST004 + debtorStateId: 1 + vascustomerNumber: CST008 + customerPreference: + languageId: 1 + customerStatus: + - name: inactive + fromInclusive: '2022-08-04 15:01:00.000' + toInclusive: null + person: + birthname: Sophie + surname: Haardenburg + prefix: Mw + suffix: null + dateOfBirth: '1955-09-05' + emailAddress: TEST@TEST1.NL + address: [] + phone: [] + ovChipCard: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: '2023-01-01' + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: '2025-01-01' + alias: alias + ovPayToken: + - ovPayTokenId: 126 + tokenTypeId: 1 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 1 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenTypeId: 1 + xTat: hhe2830283 + xBot: jdhd828033 + alias: alias + lastDigits: '5674' + ovpasNumber: OV34568 + tokenStatusId: 1 + expirationDate: '2024-04-20T17:05:52.000+02:00' + replacedByTokenId: 2 + audit: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: '2023-10-20T17:05:52.000+02:00' + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + post: + tags: + - ABTCustomers + summary: Create a customer profile + description: >- + Create a customer profile in the ABT database with status ACTIVE and + debtorStatus Inactive with a start date based on the timestamp of this + post call. + + - Requested format for postal code: + - 0000AA + parameters: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfile' + examples: + minimumProfile: + value: {} + basicCustomerProfile: + value: + debtorStatusId: 2 + person: + birthname: Jan + surname: Jansen + emailAddress: j.jansen@hatseflats.nl + fullCustomerProfile: + value: + customerPreference: + languageId: 1 + debtorStatusId: 2 + person: + birthname: Jan + surname: Jansen + prefix: dhr + suffix: jr + dateOfBirth: '1970-01-01' + emailAddress: j.jansen@hatseflats.nl + addresses: + - street: Laan van Meerdervoort + houseNumber: 5 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: true + addressTypeId: 1 + - street: Beeklaan + houseNumber: 30 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: false + addressTypeId: 2 + phones: + - number: '6123456789' + countryCode: '0031' + phoneTypeId: 1 + isPreferred: true + - number: '7012345678' + countryCode: '0031' + phoneTypeId: 2 + isPreferred: false + required: true + responses: + '201': + description: Successful created a customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfileCustomerNumberResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidPostalCodeFormatForAddressCountryNLError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter for country validation (NL). + description: >- + ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match + input string \"2500 AA\ + MissingRequiredParameterError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + object has missing required properties + ([\"addressTypeId\"]) + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"id\ + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + examples: + emailAddressAlreadyPresent: + value: + code: '409' + type: Conflict + message: emailAddress already exists. + description: '' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/customerpreferences: + patch: + tags: + - ABTCustomers + summary: Modify customer preference elements + description: Modify customer preference fields + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchCustomerPreferences' + examples: + PatchCustomerPreferences: + value: + customerPreference: + languageId: 2 + responses: + '202': + description: Successful modified the customer preferences + content: + application/json: + schema: + $ref: '#/components/schemas/patchCustomerPreferencesResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"languageId\ + InvalidReferenceIdError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request: Update Or Delete failed as conflicted with + foreign Key constraint 'languageId' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}: + patch: + tags: + - ABTCustomers + summary: Modify customer profile elements + description: Modify customer profile fields + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchCustomerProfile' + examples: + PatchCustomerProfile: + value: + debtorStatusId: 2 + responses: + '202': + description: Successful modified the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/patchCustomerProfileResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"debtorStatusId\ + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/ovchipcards: + post: + tags: + - ABTCustomers + summary: Create a new OV chipcard for a customerProfile. + description: Create a new OV chipcard in the database for a given customer. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postOvChipCard' + examples: + postNewOvChipCard: + value: + ovChipCard: + chipCardNumber: 1234123412341234 + validUntil: '2024-01-01' + alias: alias + responses: + '201': + description: Successful created an OV chipcard + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfileOvChipCardResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + chipCardNumberInvalidTooSmall: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + numeric instance is lower than the required minimum + (minimum: 1000000000000000, found: 999999999999999) + chipCardNumberInvalidTooLarge: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + numeric instance is greater than the required maximum + (maximum: 9999999999999999, found: 10000000000000000) + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/ovchipcards/{ovChipCardId}: + delete: + tags: + - ABTCustomers + summary: Delete a OV chipcard for a customerProfile. + description: Delete a OV chipcard in the database for a given customer. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: ovChipCardId + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '202': + description: Deleted record successfully + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/ovpaytokens: + get: + tags: + - ABTCustomers + summary: Get a OV paytoken for a customerProfile. + description: Get a new OV paytoken in the database for a given customer. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: ovPayTokenId + in: query + required: false + style: form + explode: false + schema: + type: integer + - name: xbot + in: query + required: false + style: form + explode: false + schema: + type: string + - name: xtat + in: query + required: false + style: form + explode: false + schema: + type: string + - name: ovPasNumber + in: query + required: false + style: form + explode: false + schema: + type: string + responses: + '200': + description: Successfully retrieved an OVPay token + content: + application/json: + schema: + $ref: '#/components/schemas/getCustomerProfileOvPayTokenResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + post: + tags: + - ABTCustomers + summary: Create a new OV paytoken for a customerProfile. + description: Create a new OV paytoken in the database for a given customer. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postOvPayToken' + examples: + postNewOvPayTokenCard: + value: + ovPayToken: + tokenTypeId: 2 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 2 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + responses: + '201': + description: Successful created an OVPay token + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfileOvPayTokenResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/statuses: + post: + tags: + - ABTCustomers + summary: Create a new customer status for a customerProfile. + description: >- + Create a new customer status for a customerProfile. The call will do the + following in the given order: a new status will be created with + fromInclusive equal to the time of the call. ToInclusive in the old, now + historic, status will also be set equal to the time of the call, deeming + it 'not currently active'. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerStatus' + examples: + postNewStatus: + value: + customerStatus: + name: blocked + responses: + '201': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/defaultCustomerProfileResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '422': + description: Unprocessable entity + content: + application/json: + schema: + $ref: '#/components/schemas/422Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/persons: + patch: + tags: + - ABTCustomers + summary: Partial update customer person details + description: Partial update a customer person details in the ABT database + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchPerson' + examples: + updatePerson: + value: + person: + birthname: Jan + surname: Jansen + prefix: dhr + suffix: jr + dateOfBirth: '1970-01-01' + emailAddress: TEST@TEST1.NL + updatePersonBirthname: + value: + person: + birthname: Jan + updatePersonSurname: + value: + person: + surname: Jansen + updatePersonPrefix: + value: + person: + prefix: dhr + updatePersonSuffix: + value: + person: + suffix: jr + updatePersonDateOfBirth: + value: + person: + dateOfBirth: '1970-01-01' + updatePersonEmailAddress: + value: + person: + emailAddress: TEST@TEST1.NL + responses: + '202': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/defaultCustomerProfileResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/ovpaytokens/{ovPayTokenId}: + delete: + tags: + - ABTCustomers + summary: Delete a OV PayToken for a customerProfile. + description: Delete a OV PayToken in the database for a given customer. + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: ovPayTokenId + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '202': + description: Deleted record successfully + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + patch: + tags: + - ABTCustomers + summary: Partial update customer ovpaytokens + description: Partial update of a customer ovpaytokens in the ABT database + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: ovPayTokenId + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchOvPayToken' + examples: + updateOvPayTokens: + value: + ovPayToken: + tokenTypeId: 2 + xTat: twioq73033 + xBot: hjihwqui27 + alias: alias + lastDigits: '5678' + ovpasNumber: OV34567 + tokenStatusId: 2 + expirationDate: '2025-04-20T17:05:52.000+02:00' + replacedByTokenId: 1 + updateOvPayTokenTypeId: + value: + ovPayToken: + tokenTypeId: 2 + updateOvPayTokenXTat: + value: + ovPayToken: + xTat: twioq73033 + updateOvPayTokenXBot: + value: + ovPayToken: + xBot: hjihwqui27 + updateOvPayTokenAlias: + value: + ovPayToken: + alias: alias + updateOvPayTokenLastDigits: + value: + ovPayToken: + lastDigits: '5678' + updateOvPayTokenOvpasNumber: + value: + ovPayToken: + ovpasNumber: OV34567 + updateOvPayTokenStatusId: + value: + ovPayToken: + tokenStatusId: 1 + updateOvPayTokenExpirationDate: + value: + ovPayToken: + expirationDate: '2025-04-20T17:05:52.000+02:00' + updateOvPayTokenReplacedByTokenId: + value: + ovPayToken: + replacedByTokenId: 1 + responses: + '202': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/defaultCustomerProfileResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/addresses: + post: + tags: + - ABTCustomers + summary: Create a single customer address + description: Create a single customer address in the ABT database + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postAddress' + examples: + addFullAddress: + value: + address: + street: Laan van Meerdervoort + houseNumber: 5 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: true + addressTypeId: 1 + addMinimumAddress: + value: + address: + street: Laan van Meerdervoort + houseNumber: 5 + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: true + addressTypeId: 1 + responses: + '201': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfileAddressResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidPostalCodeFormatForAddressCountryNLError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter for country validation (NL). + description: >- + ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match + input string \"2500 AA\ + MissingRequiredParameterError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + object has missing required properties + ([\"addressTypeId\"]) + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"id\ + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/phones: + post: + tags: + - ABTCustomers + summary: Create a single customer phonenumber + description: Create a single customer phonenumber in the ABT database + parameters: + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/postPhone' + examples: + addPhone: + value: + phone: + number: '06123456789' + countryCode: '0031' + phoneTypeId: 1 + isPreferred: true + responses: + '201': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/postCustomerProfilePhoneResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/addresses/{addressId}: + delete: + tags: + - ABTCustomers + summary: Delete a customer address + description: Delete a customer address from the ABT database + parameters: + - name: addressId + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '202': + description: Deleted record successfully + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + patch: + tags: + - ABTCustomers + summary: Partial update customer addresses + description: Partial update a customer address in the ABT database + parameters: + - name: addressId + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchAddress' + examples: + updateAddress: + value: + address: + street: Laan van Meerdervoort + houseNumber: 5 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + addressTypeId: 2 + isPreferred: true + updateStreet: + value: + address: + street: Nieuwe Parklaan + updateHouseNumber: + value: + address: + houseNumber: 10 + updateHouseNumberSuffix: + value: + address: + houseNumberSuffix: C + updatePostalCode: + value: + address: + postalCode: 2597LG + updateCity: + value: + address: + city: Amsterdam + updateCountry: + value: + address: + country: UK + updateAddressTypeId: + value: + address: + addressTypeId: 3 + updateIsPreferred: + value: + address: + isPreferred: false + responses: + '202': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/addressPatchOKResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + examples: + InvalidPostalCodeFormatForAddressCountryNLError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter for country validation (NL). + description: >- + ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match + input string \"2500 AA\ + InvalidDataTypeError: + value: + code: '400' + type: Bad Request - Input parameters + message: Invalid input parameter. + description: >- + Bad Request - please verify the value for the following + field \"id\ + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerNumber}/phones/{phoneId}: + delete: + tags: + - ABTCustomers + summary: Delete a customer phone + description: Delete a customer phone from the ABT database + parameters: + - name: phoneId + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + responses: + '202': + description: Deleted record successfully + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + patch: + tags: + - ABTCustomers + summary: Partial update customer phones + description: Partial update a customer phone in the ABT database + parameters: + - name: phoneId + in: path + required: true + style: simple + explode: false + schema: + type: integer + - name: customerNumber + in: path + required: true + style: simple + explode: false + schema: + type: integer + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/patchPhone' + examples: + updatePhone: + value: + phone: + number: '06123456789' + countryCode: '0031' + phoneTypeId: 2 + isPreferred: true + updatePhoneNumber: + value: + phone: + number: '06987654321' + updateCountryCode: + value: + phone: + countryCode: '0044' + updatePhoneTypeId: + value: + phone: + phoneTypeId: 2 + updateisPreferred: + value: + phone: + isPreferred: true + responses: + '202': + description: Successful updated the customer profile + content: + application/json: + schema: + $ref: '#/components/schemas/phonePatchOKResponse' + '400': + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: Not Found + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '409': + description: Conflict + content: + application/json: + schema: + $ref: '#/components/schemas/409Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /ovpaytokens: get: tags: @@ -250,6 +2365,12 @@ paths: ] components: securitySchemes: + default: + type: oauth2 + flows: + implicit: + authorizationUrl: https://services.acc.api.htm.nl/authorize + scopes: {} bearerToken: type: http scheme: bearer @@ -283,3 +2404,778 @@ components: example: - /account/12345 - /account/67890 + audit: + type: object + properties: + auditTrailId: + type: integer + customerProfileId: + type: integer + action: + type: string + user: + type: string + timestamp: + type: string + format: datetime + correlationId: + type: string + ovPayToken: + type: object + properties: + ovPayTokenId: + type: integer + tokenTypeId: + type: integer + xTat: + type: string + xBot: + type: string + alias: + type: string + lastDigits: + type: integer + ovpasNumber: + type: string + tokenStatusId: + type: integer + expirationDate: + type: string + replacedByTokenId: + type: integer + getOvChipCard: + type: object + properties: + ovChipCardId: + type: integer + chipCardNumber: + type: integer + validUntil: + type: string + format: date + alias: + type: string + getCustomerStatus: + type: object + properties: + name: + type: string + fromInclusive: + type: string + format: date + toInclusive: + type: string + format: date + getPerson: + type: object + properties: + birthname: + type: string + surname: + type: string + prefix: + type: string + suffix: + type: string + dateOfBirth: + type: string + format: date + emailAddress: + type: string + format: email + address: + type: array + items: + $ref: '#/components/schemas/getAddress' + phone: + type: array + items: + $ref: '#/components/schemas/getPhone' + getAddress: + type: object + properties: + addressId: + type: integer + street: + type: string + houseNumber: + type: integer + houseNumberSuffix: + type: string + postalCode: + type: string + city: + type: string + country: + type: string + isPreferred: + type: boolean + addressType: + type: string + getPhone: + type: object + properties: + phoneId: + type: integer + number: + type: string + countryCode: + type: string + phoneType: + type: string + isPreferred: + type: boolean + getCustomerPreference: + type: object + properties: + languageId: + type: integer + getCustomerProfileList: + type: object + properties: + Entries: + type: array + items: + $ref: '#/components/schemas/getCustomerProfile' + getCustomerProfile: + type: object + properties: + customerNumber: + type: integer + debtorNumber: + type: integer + debtorStateId: + type: integer + vascustomerNumber: + type: integer + customerPreference: + $ref: '#/components/schemas/getCustomerPreference' + customerStatus: + type: array + items: + $ref: '#/components/schemas/getCustomerStatus' + person: + $ref: '#/components/schemas/getPerson' + ovChipCard: + type: array + items: + $ref: '#/components/schemas/getOvChipCard' + ovPayToken: + type: array + items: + $ref: '#/components/schemas/ovPayToken' + audit: + type: array + items: + $ref: '#/components/schemas/audit' + directDebitMandatePostEntity: + required: + - billingInformationId + - created + - directDebitMandateTypeName + - mandateAddressId + - mandateReference + type: object + properties: + directDebitMandateTypeName: + type: string + billingInformationId: + type: integer + mandateAddressId: + type: integer + created: + type: string + mandateReference: + type: string + directDebitMandatePost: + type: object + properties: + directDebitMandate: + $ref: '#/components/schemas/directDebitMandatePostEntity' + directDebitMandatePatchEntity: + type: object + properties: + directDebitMandateTypeName: + type: string + billingInformationId: + type: integer + mandateAddressId: + type: integer + mandateReference: + type: string + mandateState: + type: string + enum: + - SIGNED + - CANCELLED + - PREPARED + directDebitMandatePatch: + type: object + properties: + directDebitMandate: + $ref: '#/components/schemas/directDebitMandatePatchEntity' + directDebitMandateGETEntity: + type: object + properties: + directDebitMandateId: + type: integer + directDebitMandateTypeId: + type: integer + billingInformationId: + type: integer + mandateAddressId: + type: integer + created: + type: string + mandateReference: + type: string + mandateState: + type: string + updateTimestamp: + type: string + billingInformationGETEntity: + required: + - alias + - ascription + - bic + - billingAddressId + - billingInformationId + - iban + - issuerCountry + - swift + type: object + properties: + billingInformationId: + type: integer + issuerCountry: + type: string + iban: + type: string + bic: + type: string + swift: + type: string + ascription: + type: string + alias: + type: string + billingAddressId: + type: integer + billingInformationPostEntity: + required: + - alias + - ascription + - billingAddressId + - iban + - issuerCountry + type: object + properties: + issuerCountry: + type: string + iban: + type: string + bic: + type: string + swift: + type: string + ascription: + type: string + alias: + type: string + billingAddressId: + type: integer + billingInformationPost: + type: object + properties: + billingInformation: + $ref: '#/components/schemas/billingInformationPostEntity' + billingInformationPatchEntity: + type: object + properties: + issuerCountry: + type: string + iban: + type: string + bic: + type: string + swift: + type: string + ascription: + type: string + alias: + type: string + billingAddressId: + type: integer + billingInformationPatch: + type: object + properties: + billingInformation: + $ref: '#/components/schemas/billingInformationPatchEntity' + getCustomerProfileFinancials: + type: object + properties: + customerNumber: + type: integer + billingInformation: + type: array + items: + $ref: '#/components/schemas/billingInformationGETEntity' + directDebitMandate: + type: array + items: + $ref: '#/components/schemas/directDebitMandateGETEntity' + customerPreferencesEntity: + type: object + properties: + languageId: + type: string + postCustomerProfile: + type: object + properties: + debtorStatusId: + type: integer + customerPreference: + $ref: '#/components/schemas/customerPreferencesEntity' + person: + $ref: '#/components/schemas/personEntity' + addresses: + type: array + items: + $ref: '#/components/schemas/addressPostEntity' + phones: + type: array + items: + $ref: '#/components/schemas/phonePostEntity' + postCustomerStatusEntity: + type: object + properties: + name: + type: string + postCustomerStatus: + type: object + properties: + customerStatus: + $ref: '#/components/schemas/postCustomerStatusEntity' + postOvChipCardEntity: + required: + - chipCardNumber + type: object + properties: + chipCardNumber: + type: integer + validUntil: + type: string + format: date + alias: + type: string + patchCustomerProfile: + type: object + properties: + debtorStatusId: + type: integer + patchCustomerPreferencesEntity: + type: object + properties: + languageId: + type: string + patchCustomerPreferences: + type: object + properties: + customerPreference: + $ref: '#/components/schemas/patchCustomerPreferencesEntity' + postOvChipCard: + type: object + properties: + ovChipCard: + $ref: '#/components/schemas/postOvChipCardEntity' + postOvPayToken: + required: + - alias + - lastDigits + - tokenTypeId + - xBot + - xTat + type: object + properties: + ovPayToken: + type: object + properties: + tokenTypeId: + type: string + xTat: + type: string + xBot: + type: string + alias: + type: string + lastDigits: + type: integer + ovpasNumber: + type: string + tokenStatusId: + type: integer + expirationDate: + type: string + replacedByTokenId: + type: integer + ovPayTokenEntity: + type: object + properties: + tokenTypeId: + type: string + xTat: + type: string + xBot: + type: string + alias: + type: string + lastDigits: + type: integer + ovpasNumber: + type: string + tokenStatusId: + type: integer + expirationDate: + type: string + replacedByTokenId: + type: integer + patchOvPayToken: + type: object + properties: + ovPayToken: + $ref: '#/components/schemas/ovPayTokenEntity' + patchPerson: + type: object + properties: + person: + $ref: '#/components/schemas/personEntity' + patchAddress: + type: object + properties: + address: + $ref: '#/components/schemas/addressPatchEntity' + patchPhone: + type: object + properties: + phone: + $ref: '#/components/schemas/phonePatchEntity' + postAddress: + type: object + properties: + address: + $ref: '#/components/schemas/addressPostEntity' + postPhone: + type: object + properties: + phone: + $ref: '#/components/schemas/phonePostEntity' + personEntity: + type: object + properties: + birthname: + type: string + surname: + type: string + prefix: + type: string + suffix: + type: string + dateOfBirth: + type: string + format: date + emailAddress: + type: string + addressPostEntity: + required: + - addressTypeId + - city + - country + - houseNumber + - postalCode + - street + type: object + properties: + street: + type: string + houseNumber: + type: integer + houseNumberSuffix: + type: string + postalCode: + type: string + city: + type: string + country: + type: string + isPreferred: + type: boolean + addressTypeId: + type: integer + addressPatchEntity: + type: object + properties: + street: + type: string + houseNumber: + type: integer + houseNumberSuffix: + type: string + postalCode: + type: string + city: + type: string + country: + type: string + addressTypeId: + type: integer + isPreferred: + type: boolean + phonePostEntity: + required: + - countryCode + - number + - phoneTypeId + type: object + properties: + number: + type: string + countryCode: + type: string + phoneTypeId: + type: integer + isPreferred: + type: boolean + phonePatchEntity: + type: object + properties: + number: + type: string + countryCode: + type: string + phoneTypeId: + type: integer + isPreferred: + type: boolean + defaultCustomerProfileResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + phonePatchOKResponse: + type: object + properties: + id: + type: integer + example: 1 + addressPatchOKResponse: + type: object + properties: + id: + type: integer + example: 1 + postCustomerProfileCustomerNumberResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + postCustomerProfileAddressResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + addressId: + type: integer + example: 1 + postCustomerProfilePhoneResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + phoneId: + type: integer + example: 1 + postCustomerProfileBillingInformationResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + billingInformationId: + type: integer + example: 1 + postCustomerProfileDirectDebitMandateResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + directDebitMandateId: + type: integer + example: 1 + postCustomerProfileOvChipCardResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + ovChipCardId: + type: integer + example: 1 + patchCustomerProfileResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + patchCustomerPreferencesResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + ovPayTokenGetEntity: + type: object + properties: + ovPayTokenId: + type: integer + example: 1 + tokenTypeId: + type: integer + example: 1 + xTat: + type: string + example: 0044831b-8e80c-4f82-r989a-8d85ee1996 + xBot: + type: string + example: 0044831b-8e80c-4f82-r989a-8d85ee1996 + lastDigits: + type: string + example: '0001' + ovpasNumber: + type: integer + example: 1 + alias: + type: string + example: alias + tokenStatusId: + type: integer + expirationDate: + type: string + replacedByTokenId: + type: integer + getCustomerProfileOvPayTokenResponse: + type: object + properties: + ovPayToken: + type: array + items: + $ref: '#/components/schemas/ovPayTokenGetEntity' + postCustomerProfileOvPayTokenResponse: + type: object + properties: + ovPaytoken: + type: object + example: 10000001 + ovPayTokenId: + type: integer + example: 1 + patchCustomerProfileCustomerNumberResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + 400Response: + type: object + properties: + code: + type: string + example: '400' + type: + type: string + message: + type: string + example: Bad Request + description: + type: string + example: >- + 'Bad Request: Input parameters missing! Please fill in at least 1 + valid input parameter. + 401Response: + type: object + properties: + code: + type: string + example: '900901' + type: + type: string + message: + type: string + example: Invalid Credentials + description: + type: string + example: >- + Invalid Credentials. Make sure you have provided the correct + security credentials + 404Response: + type: object + properties: + code: + type: string + example: '404' + type: + type: string + example: Status report + message: + type: string + example: Not Found + description: + type: string + example: The requested resource is not available. + 409Response: + type: object + properties: + code: + type: string + example: '409' + type: + type: string + example: Conflict + message: + type: string + example: Entry already exists + description: + type: string + 422Response: + type: object + properties: + code: + type: string + example: '422' + type: + type: string + example: Unprocessable entity + message: + type: string + example: >- + Forbidden state transition requested! From Active to Cleared not + allowed. + description: + type: string + 500Response: + type: object + properties: + code: + type: string + example: '500' + type: + type: string + message: + type: string + example: Internal Server Error + description: + type: string \ No newline at end of file -- 2.45.2 From 6526db8a1de8412ee16b5dd22fad012531912f69 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 18 Dec 2024 21:28:12 +0100 Subject: [PATCH 035/372] updated get customer list + get customer to include all query params and correct ref objects in response --- src/openapi/customers/customers-crud-v2.yaml | 2325 ++++-------------- 1 file changed, 521 insertions(+), 1804 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index e3e2650..6d717a6 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -3,144 +3,141 @@ info: title: ABT Customers CRUD APIs v2 version: "1.0" description: CRUD APIs for ABT Customer database. These are NOT the functional APIs from Service Engine. -servers: +servers: - url: https://api.integratielaag.nl/v2 paths: /customers/list: get: tags: - ABTCustomers - summary: Search for customer profile list + summary: Search for customer profiles description: >- - search for a customer profile list in the ABT database with query - parameters + Search for all customer profile list in the ABT database matching certain query parameters parameters: - name: customerProfileId - in: query - required: false - style: form - explode: true + in: query schema: - type: number + type: integer + example: 1 - name: customerNumber in: query - required: false - style: form - explode: true schema: - type: number - - name: emailAddress + type: integer + example: 1000001 + - name: customerStatusId in: query - required: false - style: form - explode: true schema: - type: string - - name: chipCardNumber + type: integer + example: 1 + - name: debtorNumber in: query - required: false - style: form - explode: true schema: - type: string - - name: ovPasNumber + type: integer + example: 100001 + - name: debtorStatusId in: query - required: false - style: form - explode: true schema: - type: string - - name: phoneNumber - in: query - required: false - style: form - explode: true - schema: - type: string - - name: phoneCountryCode - in: query - required: false - style: form - explode: true - schema: - type: string - - name: addressStreet - in: query - required: false - style: form - explode: true - schema: - type: string - - name: addressHouseNumber - in: query - required: false - style: form - explode: true - schema: - type: number - - name: addressHouseNumberSuffix - in: query - required: false - style: form - explode: true - schema: - type: string - - name: addressPostalCode - in: query - required: false - style: form - explode: true - schema: - type: string - - name: addressCity - in: query - required: false - style: form - explode: true - schema: - type: string - - name: addressCountry - in: query - required: false - style: form - explode: true - schema: - type: string + type: integer + example: 1 - name: birthname in: query - required: false - style: form - explode: true schema: type: string + example: John - name: surname in: query - required: false - style: form - explode: true schema: type: string + example: Doe + - name: emailAddress + in: query + schema: + type: string + format: email + example: john.doe@mymailprovider.com - name: dateOfBirth in: query - required: false - style: form - explode: true schema: type: string - - name: customerStatus + format: date + example: "2000-01-01" + - name: addressStreet in: query - required: false - style: form - explode: true schema: type: string + example: Sesamestreet + - name: addressHouseNumber + in: query + schema: + type: integer + example: 1 + - name: addressHouseNumberSuffix + in: query + schema: + type: string + example: A + - name: addressPostalCode + in: query + schema: + type: string + example: 1234 AB + - name: addressCity + in: query + schema: + type: string + example: The Hague + - name: addressCountry + in: query + schema: + type: string + example: The Netherlands + - name: phoneNumber + in: query + schema: + type: string + example: "0123456789" + - name: phoneCountryCode + in: query + schema: + type: string + example: "+31" + - name: ovChipcardNumber + in: query + schema: + type: integer + example: 0123456789 + - name: ovChipcardAlias + in: query + schema: + type: string + example: My ovchipcard + - name: ovPayTokenNumber + in: query + schema: + type: integer + example: 0123456789 + - name: ovPayTokenAlias + in: query + schema: + type: string + example: My Ov Pay Token + - name: ovPayTokenXTat + in: query + schema: + type: string + example: 180d04e0-a721-447e-a1d9-b416937b43bc + - name: ovPayTokenXBot + in: query + schema: + type: string + example: e1307c73-676a-4d07-967b-6141276f7c7c responses: - '200': + "200": description: Successful retrieved a customer profile content: application/json: schema: - $ref: '#/components/schemas/getCustomerProfileList' + $ref: "#/components/schemas/getCustomerProfileList" examples: fullCustomerProfile: value: @@ -148,23 +145,29 @@ paths: - customerProfileId: 1 customerNumber: 1000001 debtorNumber: TEST001 - debtorStateId: 1 + debtorStatus: + debtorStatusId: 1 + name: Inactive vascustomerNumber: CST005 customerPreference: languageId: 1 - customerStatus: - - name: active - fromInclusive: '2022-08-04 15:01:00.000' - toInclusive: '2022-08-05 15:01:00.000' - - name: blocked - fromInclusive: '2022-08-05 15:01:00.000' + customerStatusInstance: + - customerStatus: + name: Active + customerStatusId: 2 + fromInclusive: "2022-08-04 15:01:00.000" + toInclusive: "2022-08-05 15:01:00.000" + - customerStatus: + name: Blocked + customerStatusId: 3 + fromInclusive: "2022-08-05 15:01:00.000" toInclusive: null person: birthname: Pieter surname: De valen prefix: dhr suffix: De - dateOfBirth: '2002-10-29' + dateOfBirth: "2002-10-29" emailAddress: TEST@HTM.NL address: - addressId: 1 @@ -174,8 +177,10 @@ paths: postalCode: 0000AA city: Den Haag country: NL - isPreferred: true - addressType: Office + isPreferred: false + addressType: + addressTypeId: 2 + name: Office - addressId: 2 street: mystreet 33 houseNumber: 1 @@ -184,74 +189,95 @@ paths: city: Den BOSCH country: NL isPreferred: true - addressType: Office + addressType: + addressTypeId: 2 + name: Office phone: - phoneId: 1 - number: '3112345678' + number: "3112345678" countryCode: NL - phoneType: TestNaam + phoneType: + phoneTypeId: 1 + name: Home isPreferred: true - phoneId: 2 - number: '333225588' + number: "333225588" countryCode: ES - phoneType: TestNaam + phoneType: + phoneTypeId: 2 + name: Work isPreferred: false - ovChipCard: + ovChipCard: - ovChipCardId: 1 chipCardNumber: 1234123412341234 - validUntil: '2023-01-01' + validUntil: "2023-01-01" alias: alias - ovChipCardId: 2 chipCardNumber: 1234123412341235 - validUntil: '2025-01-01' + validUntil: "2025-01-01" alias: alias - ovPayToken: + ovPayToken: - ovPayTokenId: 126 - tokenTypeId: 1 + tokenType: + tokenTypeId: 1 + name: EMV xTat: twioq73033 xBot: hjihwqui27 alias: alias - lastDigits: '5678' - ovpasNumber: OV34567 - tokenStatusId: 1 - expirationDate: '2025-04-20T17:05:52.000+02:00' + lastDigits: "5678" + ovpasNumber: null + tokenStatus: + tokenStatusId: 2 + name: Active + expirationDate: "2025-04-20T17:05:52.000+02:00" replacedByTokenId: 1 - ovPayTokenId: 127 - tokenTypeId: 1 + tokenType: + tokenTypeId: 2 + name: OV-pas physical xTat: hhe2830283 xBot: jdhd828033 alias: alias - lastDigits: '5674' - ovpasNumber: OV34568 - tokenStatusId: 1 - expirationDate: '2024-04-20T17:05:52.000+02:00' + lastDigits: "5674" + ovpasNumber: OV34568 + tokenStatus: + tokenStatusId: 2 + name: Active + expirationDate: "2024-04-20T17:05:52.000+02:00" replacedByTokenId: 2 - audit: + audit: - auditTrailId: 1 customerProfileId: 1 action: insert user: user - timestamp: '2023-10-20T17:05:52.000+02:00' + timestamp: "2023-10-20T17:05:52.000+02:00" correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 - - customerNumber: 1000002 + - customerProfileId: 2 + customerNumber: 1000002 debtorNumber: TEST001 - debtorStateId: 1 + debtorStatus: + debtorStatusId: 1 + name: Inactive vascustomerNumber: CST005 customerPreference: languageId: 1 - customerStatus: - - name: active - fromInclusive: '2022-08-04 15:01:00.000' - toInclusive: '2022-08-05 15:01:00.000' - - name: blocked - fromInclusive: '2022-08-05 15:01:00.000' + customerStatusInstance: + - customerStatus: + name: Active + customerStatusId: 2 + fromInclusive: "2022-08-04 15:01:00.000" + toInclusive: "2022-08-05 15:01:00.000" + - customerStatus: + name: Blocked + customerStatusId: 3 + fromInclusive: "2022-08-05 15:01:00.000" toInclusive: null person: birthname: Pieter surname: De valen prefix: dhr suffix: De - dateOfBirth: '2002-10-29' + dateOfBirth: "2002-10-29" emailAddress: TEST@HTM.NL address: - addressId: 1 @@ -261,8 +287,10 @@ paths: postalCode: 0000AA city: Den Haag country: NL - isPreferred: true - addressType: Office + isPreferred: false + addressType: + addressTypeId: 2 + name: Office - addressId: 2 street: mystreet 33 houseNumber: 1 @@ -271,165 +299,94 @@ paths: city: Den BOSCH country: NL isPreferred: true - addressType: Office + addressType: + addressTypeId: 2 + name: Office phone: - phoneId: 1 - number: '3112345678' + number: "3112345678" countryCode: NL - phoneType: TestNaam + phoneType: + phoneTypeId: 1 + name: Home isPreferred: true - phoneId: 2 - number: '333225588' + number: "333225588" countryCode: ES - phoneType: TestNaam + phoneType: + phoneTypeId: 2 + name: Work isPreferred: false - ovChipCard: + ovChipCard: - ovChipCardId: 1 chipCardNumber: 1234123412341234 - validUntil: '2023-01-01' + validUntil: "2023-01-01" alias: alias - ovChipCardId: 2 chipCardNumber: 1234123412341235 - validUntil: '2025-01-01' + validUntil: "2025-01-01" alias: alias - ovPayToken: + ovPayToken: - ovPayTokenId: 126 - tokenTypeId: 1 + tokenType: + tokenTypeId: 2 + name: OV-pas physical xTat: twioq73033 xBot: hjihwqui27 alias: alias - lastDigits: '5678' + lastDigits: "5678" ovpasNumber: OV34567 - tokenStatusId: 1 - expirationDate: '2025-04-20T17:05:52.000+02:00' + tokenStatus: + tokenStatusId: 2 + name: active + expirationDate: "2025-04-20T17:05:52.000+02:00" replacedByTokenId: 1 - ovPayTokenId: 127 - tokenTypeId: 1 + tokenType: + tokenTypeId: 2 + name: OV-pas physical xTat: hhe2830283 xBot: jdhd828033 alias: alias - lastDigits: '5674' + lastDigits: "5674" ovpasNumber: OV34568 - tokenStatusId: 1 - expirationDate: '2024-04-20T17:05:52.000+02:00' + tokenStatus: + tokenStatusId: 2 + name: active + expirationDate: "2024-04-20T17:05:52.000+02:00" replacedByTokenId: 2 - audit: + audit: - auditTrailId: 1 customerProfileId: 1 action: insert user: user - timestamp: '2023-10-20T17:05:52.000+02:00' + timestamp: "2023-10-20T17:05:52.000+02:00" correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 href: null - minimumCustomerProfile: - value: - Entries: - - customerNumber: 1000008 - debtorNumber: null - debtorStateId: null - vascustomerNumber: null - customerPreference: - languageId: null - customerStatus: - - name: active - fromInclusive: '2022-08-04 15:01:00.000' - toInclusive: null - person: - birthname: null - surname: null - prefix: null - suffix: null - dateOfBirth: null - emailAddress: TEST@TEST1.NL - address: [] - phone: [] - ovChipCard: [] - ovPayToken: [] - audit: [] - missingPersonDetailsCustomerProfile: - value: - Entries: - - emailAddress: TEST04@HTM.NL - customerNumber: 1000005 - debtorNumber: TEST004 - debtorStateId: 1 - vascustomerNumber: CST005 - customerPreference: - languageId: 1 - customerStatus: - - name: inactive - fromInclusive: '2022-08-04 15:01:00.000' - toInclusive: null - person: - birthname: Sophie - surname: Haardenburg - prefix: Mw - suffix: null - dateOfBirth: 1955-09-05+01:00 - emailAddress: TEST@TEST1.NL - address: [] - phone: [] - ovChipCard: - - ovChipCardId: 1 - chipCardNumber: 1234123412341234 - validUntil: '2023-01-01' - alias: alias - - ovChipCardId: 2 - chipCardNumber: 1234123412341235 - validUntil: '2025-01-01' - alias: alias - ovPayToken: - - ovPayTokenId: 126 - tokenTypeId: 1 - xTat: twioq73033 - xBot: hjihwqui27 - alias: alias - lastDigits: '5678' - ovpasNumber: OV34567 - tokenStatusId: 1 - expirationDate: '2025-04-20T17:05:52.000+02:00' - replacedByTokenId: 1 - - ovPayTokenId: 127 - tokenTypeId: 1 - xTat: hhe2830283 - xBot: jdhd828033 - alias: alias - lastDigits: '5674' - ovpasNumber: OV34568 - tokenStatusId: 1 - expirationDate: '2024-04-20T17:05:52.000+02:00' - replacedByTokenId: 2 - audit: - - auditTrailId: 1 - customerProfileId: 1 - action: insert - user: user - timestamp: '2023-10-20T17:05:52.000+02:00' - correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 - '400': + "400": description: Bad Request content: application/json: schema: - $ref: '#/components/schemas/400Response' - '401': + $ref: "#/components/schemas/400Response" + "401": description: Unauthorized content: application/json: schema: - $ref: '#/components/schemas/401Response' - '404': + $ref: "#/components/schemas/401Response" + "404": description: Not Found content: application/json: schema: - $ref: '#/components/schemas/404Response' - '500': + $ref: "#/components/schemas/404Response" + "500": description: Internal Server Error content: application/json: schema: - $ref: '#/components/schemas/500Response' + $ref: "#/components/schemas/500Response" security: - default: [] x-auth-type: Application & Application User @@ -439,332 +396,269 @@ paths: tags: - ABTCustomers summary: Search for customer profile - description: 'search for a customer profile in the ABT database with query parameters ' + description: "Search for a unique customer profile in the ABT database with query parameters " parameters: - name: customerProfileId - in: query - required: false - style: form - explode: true + in: query schema: - type: number + type: integer + example: 1 - name: customerNumber in: query - required: false - style: form - explode: true schema: - type: number - - name: emailAddress + type: integer + example: 1000001 + - name: customerStatusId in: query - required: false - style: form - explode: true schema: - type: string - - name: chipCardNumber + type: integer + example: 1 + - name: debtorNumber in: query - required: false - style: form - explode: true schema: - type: string - - name: ovPasNumber + type: integer + example: 100001 + - name: debtorStatusId in: query - required: false - style: form - explode: true schema: - type: string - - name: phoneNumber - in: query - required: false - style: form - explode: true - schema: - type: string - - name: phoneCountryCode - in: query - required: false - style: form - explode: true - schema: - type: string - - name: addressStreet - in: query - required: false - style: form - explode: true - schema: - type: string - - name: addressHouseNumber - in: query - required: false - style: form - explode: true - schema: - type: number - - name: addressHouseNumberSuffix - in: query - required: false - style: form - explode: true - schema: - type: string - - name: addressPostalCode - in: query - required: false - style: form - explode: true - schema: - type: string - - name: addressCity - in: query - required: false - style: form - explode: true - schema: - type: string - - name: addressCountry - in: query - required: false - style: form - explode: true - schema: - type: string + type: integer + example: 1 - name: birthname in: query - required: false - style: form - explode: true schema: type: string + example: John - name: surname in: query - required: false - style: form - explode: true schema: type: string + example: Doe + - name: emailAddress + in: query + schema: + type: string + format: email + example: john.doe@mymailprovider.com - name: dateOfBirth in: query - required: false - style: form - explode: true schema: type: string - - name: customerStatus + format: date + example: "2000-01-01" + - name: addressStreet in: query - required: false - style: form - explode: true schema: type: string + example: Sesamestreet + - name: addressHouseNumber + in: query + schema: + type: integer + example: 1 + - name: addressHouseNumberSuffix + in: query + schema: + type: string + example: A + - name: addressPostalCode + in: query + schema: + type: string + example: 1234 AB + - name: addressCity + in: query + schema: + type: string + example: The Hague + - name: addressCountry + in: query + schema: + type: string + example: The Netherlands + - name: phoneNumber + in: query + schema: + type: string + example: "0123456789" + - name: phoneCountryCode + in: query + schema: + type: string + example: "+31" + - name: ovChipcardNumber + in: query + schema: + type: integer + example: 0123456789 + - name: ovChipcardAlias + in: query + schema: + type: string + example: My ovchipcard + - name: ovPayTokenNumber + in: query + schema: + type: integer + example: 0123456789 + - name: ovPayTokenAlias + in: query + schema: + type: string + example: My Ov Pay Token + - name: ovPayTokenXTat + in: query + schema: + type: string + example: 180d04e0-a721-447e-a1d9-b416937b43bc + - name: ovPayTokenXBot + in: query + schema: + type: string + example: e1307c73-676a-4d07-967b-6141276f7c7c responses: - '200': + "200": description: Successful retrieved a customer profile content: application/json: schema: - $ref: '#/components/schemas/getCustomerProfile' + $ref: "#/components/schemas/getCustomerProfile" examples: fullCustomerProfile: value: - customerProfileId: 1 - customerNumber: 1000001 - debtorNumber: TEST001 - vascustomerNumber: CST005 - debtorStateId: 1 - customerPreference: - languageId: 1 - customerStatus: - - name: active - fromInclusive: '2022-08-04 15:01:00.000' - toInclusive: '2022-08-05 15:01:00.000' - - name: blocked - fromInclusive: '2022-08-05 15:01:00.000' - toInclusive: null - person: - birthname: Pieter - surname: De valen - prefix: dhr - suffix: De - dateOfBirth: '2002-10-29' - emailAddress: TEST@HTM.NL - address: - - addressId: 1 - street: mystreet - houseNumber: 1 - houseNumberSuffix: null - postalCode: 0000AA - city: Den Haag - country: NL - isPreferred: true - addressType: Office - - addressId: 2 - street: mystreet 33 - houseNumber: 1 - houseNumberSuffix: null - postalCode: 4455CA - city: Den BOSCH - country: NL - isPreferred: true - addressType: Office - phone: - - phoneId: 1 - number: '3112345678' - countryCode: NL - phoneType: TestNaam - isPreferred: true - - phoneId: 2 - number: '333225588' - countryCode: ES - phoneType: TestNaam - isPreferred: false + customerProfileId: 1 + customerNumber: 1000001 + debtorNumber: TEST001 + debtorStatus: + debtorStatusId: 1 + name: Inactive + vascustomerNumber: CST005 + customerPreference: + languageId: 1 + customerStatusInstance: + - customerStatus: + name: Active + customerStatusId: 2 + fromInclusive: "2022-08-04 15:01:00.000" + toInclusive: "2022-08-05 15:01:00.000" + - customerStatus: + name: Blocked + customerStatusId: 3 + fromInclusive: "2022-08-05 15:01:00.000" + toInclusive: null + person: + birthname: Pieter + surname: De valen + prefix: dhr + suffix: De + dateOfBirth: "2002-10-29" + emailAddress: TEST@HTM.NL + address: + - addressId: 1 + street: mystreet + houseNumber: 1 + houseNumberSuffix: null + postalCode: 0000AA + city: Den Haag + country: NL + isPreferred: false + addressType: + addressTypeId: 2 + name: Office + - addressId: 2 + street: mystreet 33 + houseNumber: 1 + houseNumberSuffix: null + postalCode: 4455CA + city: Den BOSCH + country: NL + isPreferred: true + addressType: + addressTypeId: 2 + name: Office + phone: + - phoneId: 1 + number: "3112345678" + countryCode: NL + phoneType: + phoneTypeId: 1 + name: Home + isPreferred: true + - phoneId: 2 + number: "333225588" + countryCode: ES + phoneType: + phoneTypeId: 2 + name: Work + isPreferred: false ovChipCard: - ovChipCardId: 1 chipCardNumber: 1234123412341234 - validUntil: '2023-01-01' + validUntil: "2023-01-01" alias: alias - ovChipCardId: 2 chipCardNumber: 1234123412341235 - validUntil: '2025-01-01' + validUntil: "2025-01-01" alias: alias ovPayToken: - ovPayTokenId: 126 - tokenTypeId: 1 + tokenType: + tokenTypeId: 1 + name: EMV xTat: twioq73033 xBot: hjihwqui27 alias: alias - lastDigits: '5678' - ovpasNumber: OV34567 - tokenStatusId: 1 - expirationDate: '2025-04-20T17:05:52.000+02:00' + lastDigits: "5678" + ovpasNumber: null + tokenStatus: + tokenStatusId: 2 + name: Active + expirationDate: "2025-04-20T17:05:52.000+02:00" replacedByTokenId: 1 - ovPayTokenId: 127 - tokenTypeId: 1 + tokenType: + tokenTypeId: 2 + name: OV-pas physical xTat: hhe2830283 xBot: jdhd828033 alias: alias - lastDigits: '5674' - ovpasNumber: OV34568 - tokenStatusId: 1 - expirationDate: '2024-04-20T17:05:52.000+02:00' + lastDigits: "5674" + ovpasNumber: OV34568 + tokenStatus: + tokenStatusId: 2 + name: Active + expirationDate: "2024-04-20T17:05:52.000+02:00" replacedByTokenId: 2 audit: - - auditTrailId: 1 - customerProfileId: 1 - action: insert - user: user - timestamp: '2023-10-20T17:05:52.000+02:00' - correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 - minimumCustomerProfile: - value: - customerNumber: 1000008 - debtorNumber: null - debtorStateId: null - vascustomerNumber: null - customerPreference: - languageId: 1 - customerStatus: - - name: active - fromInclusive: '2022-08-04 15:01:00.000' - toInclusive: null - person: - birthname: null - surname: null - prefix: null - suffix: null - dateOfBirth: null - emailAddress: TEST@TEST1.NL - address: [] - phone: [] - ovChipCard: [] - ovPayToken: [] - audit: [] - missingPersonDetailsCustomerProfile: - value: - emailAddress: TEST04@HTM.NL - customerNumber: 1000005 - debtorNumber: TEST004 - debtorStateId: 1 - vascustomerNumber: CST008 - customerPreference: - languageId: 1 - customerStatus: - - name: inactive - fromInclusive: '2022-08-04 15:01:00.000' - toInclusive: null - person: - birthname: Sophie - surname: Haardenburg - prefix: Mw - suffix: null - dateOfBirth: '1955-09-05' - emailAddress: TEST@TEST1.NL - address: [] - phone: [] - ovChipCard: - - ovChipCardId: 1 - chipCardNumber: 1234123412341234 - validUntil: '2023-01-01' - alias: alias - - ovChipCardId: 2 - chipCardNumber: 1234123412341235 - validUntil: '2025-01-01' - alias: alias - ovPayToken: - - ovPayTokenId: 126 - tokenTypeId: 1 - xTat: twioq73033 - xBot: hjihwqui27 - alias: alias - lastDigits: '5678' - ovpasNumber: OV34567 - tokenStatusId: 1 - expirationDate: '2025-04-20T17:05:52.000+02:00' - replacedByTokenId: 1 - - ovPayTokenId: 127 - tokenTypeId: 1 - xTat: hhe2830283 - xBot: jdhd828033 - alias: alias - lastDigits: '5674' - ovpasNumber: OV34568 - tokenStatusId: 1 - expirationDate: '2024-04-20T17:05:52.000+02:00' - replacedByTokenId: 2 - audit: - - auditTrailId: 1 - customerProfileId: 1 - action: insert - user: user - timestamp: '2023-10-20T17:05:52.000+02:00' - correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 - '400': + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: "2023-10-20T17:05:52.000+02:00" + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + "400": description: Bad Request content: application/json: schema: - $ref: '#/components/schemas/400Response' - '401': + $ref: "#/components/schemas/400Response" + "401": description: Unauthorized content: application/json: schema: - $ref: '#/components/schemas/401Response' - '404': + $ref: "#/components/schemas/401Response" + "404": description: Not Found content: application/json: schema: - $ref: '#/components/schemas/404Response' - '500': + $ref: "#/components/schemas/404Response" + "500": description: Internal Server Error content: application/json: schema: - $ref: '#/components/schemas/500Response' + $ref: "#/components/schemas/500Response" security: - default: [] x-auth-type: Application & Application User @@ -785,7 +679,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/postCustomerProfile' + $ref: "#/components/schemas/postCustomerProfile" examples: minimumProfile: value: {} @@ -806,7 +700,7 @@ paths: surname: Jansen prefix: dhr suffix: jr - dateOfBirth: '1970-01-01' + dateOfBirth: "1970-01-01" emailAddress: j.jansen@hatseflats.nl addresses: - street: Laan van Meerdervoort @@ -826,32 +720,32 @@ paths: isPreferred: false addressTypeId: 2 phones: - - number: '6123456789' - countryCode: '0031' + - number: "6123456789" + countryCode: "0031" phoneTypeId: 1 isPreferred: true - - number: '7012345678' - countryCode: '0031' + - number: "7012345678" + countryCode: "0031" phoneTypeId: 2 isPreferred: false required: true responses: - '201': + "201": description: Successful created a customer profile content: application/json: schema: - $ref: '#/components/schemas/postCustomerProfileCustomerNumberResponse' - '400': + $ref: "#/components/schemas/postCustomerProfileCustomerNumberResponse" + "400": description: Bad Request content: application/json: schema: - $ref: '#/components/schemas/400Response' + $ref: "#/components/schemas/400Response" examples: InvalidPostalCodeFormatForAddressCountryNLError: value: - code: '400' + code: "400" type: Bad Request - Input parameters message: Invalid input parameter for country validation (NL). description: >- @@ -859,7 +753,7 @@ paths: input string \"2500 AA\ MissingRequiredParameterError: value: - code: '400' + code: "400" type: Bad Request - Input parameters message: Invalid input parameter. description: >- @@ -867,1256 +761,37 @@ paths: ([\"addressTypeId\"]) InvalidDataTypeError: value: - code: '400' + code: "400" type: Bad Request - Input parameters message: Invalid input parameter. description: >- Bad Request - please verify the value for the following field \"id\ - '401': + "401": description: Unauthorized content: application/json: schema: - $ref: '#/components/schemas/401Response' - '409': + $ref: "#/components/schemas/401Response" + "409": description: Conflict content: application/json: schema: - $ref: '#/components/schemas/409Response' + $ref: "#/components/schemas/409Response" examples: emailAddressAlreadyPresent: value: - code: '409' + code: "409" type: Conflict message: emailAddress already exists. - description: '' - '500': + description: "" + "500": description: Internal Server Error content: application/json: schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /customers/{customerNumber}/customerpreferences: - patch: - tags: - - ABTCustomers - summary: Modify customer preference elements - description: Modify customer preference fields - parameters: - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/patchCustomerPreferences' - examples: - PatchCustomerPreferences: - value: - customerPreference: - languageId: 2 - responses: - '202': - description: Successful modified the customer preferences - content: - application/json: - schema: - $ref: '#/components/schemas/patchCustomerPreferencesResponse' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - examples: - InvalidDataTypeError: - value: - code: '400' - type: Bad Request - Input parameters - message: Invalid input parameter. - description: >- - Bad Request - please verify the value for the following - field \"languageId\ - InvalidReferenceIdError: - value: - code: '400' - type: Bad Request - Input parameters - message: Invalid input parameter. - description: >- - Bad Request: Update Or Delete failed as conflicted with - foreign Key constraint 'languageId' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /customers/{customerNumber}: - patch: - tags: - - ABTCustomers - summary: Modify customer profile elements - description: Modify customer profile fields - parameters: - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/patchCustomerProfile' - examples: - PatchCustomerProfile: - value: - debtorStatusId: 2 - responses: - '202': - description: Successful modified the customer profile - content: - application/json: - schema: - $ref: '#/components/schemas/patchCustomerProfileResponse' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - examples: - InvalidDataTypeError: - value: - code: '400' - type: Bad Request - Input parameters - message: Invalid input parameter. - description: >- - Bad Request - please verify the value for the following - field \"debtorStatusId\ - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /customers/{customerNumber}/ovchipcards: - post: - tags: - - ABTCustomers - summary: Create a new OV chipcard for a customerProfile. - description: Create a new OV chipcard in the database for a given customer. - parameters: - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/postOvChipCard' - examples: - postNewOvChipCard: - value: - ovChipCard: - chipCardNumber: 1234123412341234 - validUntil: '2024-01-01' - alias: alias - responses: - '201': - description: Successful created an OV chipcard - content: - application/json: - schema: - $ref: '#/components/schemas/postCustomerProfileOvChipCardResponse' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - examples: - chipCardNumberInvalidTooSmall: - value: - code: '400' - type: Bad Request - Input parameters - message: Invalid input parameter. - description: >- - numeric instance is lower than the required minimum - (minimum: 1000000000000000, found: 999999999999999) - chipCardNumberInvalidTooLarge: - value: - code: '400' - type: Bad Request - Input parameters - message: Invalid input parameter. - description: >- - numeric instance is greater than the required maximum - (maximum: 9999999999999999, found: 10000000000000000) - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /customers/{customerNumber}/ovchipcards/{ovChipCardId}: - delete: - tags: - - ABTCustomers - summary: Delete a OV chipcard for a customerProfile. - description: Delete a OV chipcard in the database for a given customer. - parameters: - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - - name: ovChipCardId - in: path - required: true - style: simple - explode: false - schema: - type: integer - responses: - '202': - description: Deleted record successfully - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /customers/{customerNumber}/ovpaytokens: - get: - tags: - - ABTCustomers - summary: Get a OV paytoken for a customerProfile. - description: Get a new OV paytoken in the database for a given customer. - parameters: - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - - name: ovPayTokenId - in: query - required: false - style: form - explode: false - schema: - type: integer - - name: xbot - in: query - required: false - style: form - explode: false - schema: - type: string - - name: xtat - in: query - required: false - style: form - explode: false - schema: - type: string - - name: ovPasNumber - in: query - required: false - style: form - explode: false - schema: - type: string - responses: - '200': - description: Successfully retrieved an OVPay token - content: - application/json: - schema: - $ref: '#/components/schemas/getCustomerProfileOvPayTokenResponse' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - post: - tags: - - ABTCustomers - summary: Create a new OV paytoken for a customerProfile. - description: Create a new OV paytoken in the database for a given customer. - parameters: - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/postOvPayToken' - examples: - postNewOvPayTokenCard: - value: - ovPayToken: - tokenTypeId: 2 - xTat: twioq73033 - xBot: hjihwqui27 - alias: alias - lastDigits: '5678' - ovpasNumber: OV34567 - tokenStatusId: 2 - expirationDate: '2025-04-20T17:05:52.000+02:00' - replacedByTokenId: 1 - responses: - '201': - description: Successful created an OVPay token - content: - application/json: - schema: - $ref: '#/components/schemas/postCustomerProfileOvPayTokenResponse' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /customers/{customerNumber}/statuses: - post: - tags: - - ABTCustomers - summary: Create a new customer status for a customerProfile. - description: >- - Create a new customer status for a customerProfile. The call will do the - following in the given order: a new status will be created with - fromInclusive equal to the time of the call. ToInclusive in the old, now - historic, status will also be set equal to the time of the call, deeming - it 'not currently active'. - parameters: - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/postCustomerStatus' - examples: - postNewStatus: - value: - customerStatus: - name: blocked - responses: - '201': - description: Successful updated the customer profile - content: - application/json: - schema: - $ref: '#/components/schemas/defaultCustomerProfileResponse' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '422': - description: Unprocessable entity - content: - application/json: - schema: - $ref: '#/components/schemas/422Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /customers/{customerNumber}/persons: - patch: - tags: - - ABTCustomers - summary: Partial update customer person details - description: Partial update a customer person details in the ABT database - parameters: - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/patchPerson' - examples: - updatePerson: - value: - person: - birthname: Jan - surname: Jansen - prefix: dhr - suffix: jr - dateOfBirth: '1970-01-01' - emailAddress: TEST@TEST1.NL - updatePersonBirthname: - value: - person: - birthname: Jan - updatePersonSurname: - value: - person: - surname: Jansen - updatePersonPrefix: - value: - person: - prefix: dhr - updatePersonSuffix: - value: - person: - suffix: jr - updatePersonDateOfBirth: - value: - person: - dateOfBirth: '1970-01-01' - updatePersonEmailAddress: - value: - person: - emailAddress: TEST@TEST1.NL - responses: - '202': - description: Successful updated the customer profile - content: - application/json: - schema: - $ref: '#/components/schemas/defaultCustomerProfileResponse' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /customers/{customerNumber}/ovpaytokens/{ovPayTokenId}: - delete: - tags: - - ABTCustomers - summary: Delete a OV PayToken for a customerProfile. - description: Delete a OV PayToken in the database for a given customer. - parameters: - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - - name: ovPayTokenId - in: path - required: true - style: simple - explode: false - schema: - type: integer - responses: - '202': - description: Deleted record successfully - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - patch: - tags: - - ABTCustomers - summary: Partial update customer ovpaytokens - description: Partial update of a customer ovpaytokens in the ABT database - parameters: - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - - name: ovPayTokenId - in: path - required: true - style: simple - explode: false - schema: - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/patchOvPayToken' - examples: - updateOvPayTokens: - value: - ovPayToken: - tokenTypeId: 2 - xTat: twioq73033 - xBot: hjihwqui27 - alias: alias - lastDigits: '5678' - ovpasNumber: OV34567 - tokenStatusId: 2 - expirationDate: '2025-04-20T17:05:52.000+02:00' - replacedByTokenId: 1 - updateOvPayTokenTypeId: - value: - ovPayToken: - tokenTypeId: 2 - updateOvPayTokenXTat: - value: - ovPayToken: - xTat: twioq73033 - updateOvPayTokenXBot: - value: - ovPayToken: - xBot: hjihwqui27 - updateOvPayTokenAlias: - value: - ovPayToken: - alias: alias - updateOvPayTokenLastDigits: - value: - ovPayToken: - lastDigits: '5678' - updateOvPayTokenOvpasNumber: - value: - ovPayToken: - ovpasNumber: OV34567 - updateOvPayTokenStatusId: - value: - ovPayToken: - tokenStatusId: 1 - updateOvPayTokenExpirationDate: - value: - ovPayToken: - expirationDate: '2025-04-20T17:05:52.000+02:00' - updateOvPayTokenReplacedByTokenId: - value: - ovPayToken: - replacedByTokenId: 1 - responses: - '202': - description: Successful updated the customer profile - content: - application/json: - schema: - $ref: '#/components/schemas/defaultCustomerProfileResponse' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /customers/{customerNumber}/addresses: - post: - tags: - - ABTCustomers - summary: Create a single customer address - description: Create a single customer address in the ABT database - parameters: - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/postAddress' - examples: - addFullAddress: - value: - address: - street: Laan van Meerdervoort - houseNumber: 5 - houseNumberSuffix: B - postalCode: 2500AA - city: Den Haag - country: NL - isPreferred: true - addressTypeId: 1 - addMinimumAddress: - value: - address: - street: Laan van Meerdervoort - houseNumber: 5 - postalCode: 2500AA - city: Den Haag - country: NL - isPreferred: true - addressTypeId: 1 - responses: - '201': - description: Successful updated the customer profile - content: - application/json: - schema: - $ref: '#/components/schemas/postCustomerProfileAddressResponse' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - examples: - InvalidPostalCodeFormatForAddressCountryNLError: - value: - code: '400' - type: Bad Request - Input parameters - message: Invalid input parameter for country validation (NL). - description: >- - ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match - input string \"2500 AA\ - MissingRequiredParameterError: - value: - code: '400' - type: Bad Request - Input parameters - message: Invalid input parameter. - description: >- - object has missing required properties - ([\"addressTypeId\"]) - InvalidDataTypeError: - value: - code: '400' - type: Bad Request - Input parameters - message: Invalid input parameter. - description: >- - Bad Request - please verify the value for the following - field \"id\ - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /customers/{customerNumber}/phones: - post: - tags: - - ABTCustomers - summary: Create a single customer phonenumber - description: Create a single customer phonenumber in the ABT database - parameters: - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/postPhone' - examples: - addPhone: - value: - phone: - number: '06123456789' - countryCode: '0031' - phoneTypeId: 1 - isPreferred: true - responses: - '201': - description: Successful updated the customer profile - content: - application/json: - schema: - $ref: '#/components/schemas/postCustomerProfilePhoneResponse' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /customers/{customerNumber}/addresses/{addressId}: - delete: - tags: - - ABTCustomers - summary: Delete a customer address - description: Delete a customer address from the ABT database - parameters: - - name: addressId - in: path - required: true - style: simple - explode: false - schema: - type: integer - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - responses: - '202': - description: Deleted record successfully - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - patch: - tags: - - ABTCustomers - summary: Partial update customer addresses - description: Partial update a customer address in the ABT database - parameters: - - name: addressId - in: path - required: true - style: simple - explode: false - schema: - type: integer - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/patchAddress' - examples: - updateAddress: - value: - address: - street: Laan van Meerdervoort - houseNumber: 5 - houseNumberSuffix: B - postalCode: 2500AA - city: Den Haag - country: NL - addressTypeId: 2 - isPreferred: true - updateStreet: - value: - address: - street: Nieuwe Parklaan - updateHouseNumber: - value: - address: - houseNumber: 10 - updateHouseNumberSuffix: - value: - address: - houseNumberSuffix: C - updatePostalCode: - value: - address: - postalCode: 2597LG - updateCity: - value: - address: - city: Amsterdam - updateCountry: - value: - address: - country: UK - updateAddressTypeId: - value: - address: - addressTypeId: 3 - updateIsPreferred: - value: - address: - isPreferred: false - responses: - '202': - description: Successful updated the customer profile - content: - application/json: - schema: - $ref: '#/components/schemas/addressPatchOKResponse' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - examples: - InvalidPostalCodeFormatForAddressCountryNLError: - value: - code: '400' - type: Bad Request - Input parameters - message: Invalid input parameter for country validation (NL). - description: >- - ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match - input string \"2500 AA\ - InvalidDataTypeError: - value: - code: '400' - type: Bad Request - Input parameters - message: Invalid input parameter. - description: >- - Bad Request - please verify the value for the following - field \"id\ - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '409': - description: Conflict - content: - application/json: - schema: - $ref: '#/components/schemas/409Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /customers/{customerNumber}/phones/{phoneId}: - delete: - tags: - - ABTCustomers - summary: Delete a customer phone - description: Delete a customer phone from the ABT database - parameters: - - name: phoneId - in: path - required: true - style: simple - explode: false - schema: - type: integer - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - responses: - '202': - description: Deleted record successfully - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - patch: - tags: - - ABTCustomers - summary: Partial update customer phones - description: Partial update a customer phone in the ABT database - parameters: - - name: phoneId - in: path - required: true - style: simple - explode: false - schema: - type: integer - - name: customerNumber - in: path - required: true - style: simple - explode: false - schema: - type: integer - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/patchPhone' - examples: - updatePhone: - value: - phone: - number: '06123456789' - countryCode: '0031' - phoneTypeId: 2 - isPreferred: true - updatePhoneNumber: - value: - phone: - number: '06987654321' - updateCountryCode: - value: - phone: - countryCode: '0044' - updatePhoneTypeId: - value: - phone: - phoneTypeId: 2 - updateisPreferred: - value: - phone: - isPreferred: true - responses: - '202': - description: Successful updated the customer profile - content: - application/json: - schema: - $ref: '#/components/schemas/phonePatchOKResponse' - '400': - description: Bad Request - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - '401': - description: Unauthorized - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: Not Found - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '409': - description: Conflict - content: - application/json: - schema: - $ref: '#/components/schemas/409Response' - '500': - description: Internal Server Error - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' + $ref: "#/components/schemas/500Response" security: - default: [] x-auth-type: Application & Application User @@ -2351,16 +1026,17 @@ paths: "directDebitMandateId": 71, "customerProfileId": 12, "billingInformationId": 51, - "directDebitMandateType": { - "directDebitMandateTypeId": 1, - "name": "import", - "description": "import" - }, + "directDebitMandateType": + { + "directDebitMandateTypeId": 1, + "name": "import", + "description": "import", + }, "mandateAddressId": 21, "created": "2024-03-22T08:55:00", "mandateReference": "CORE01", "mandateState": "SINGED", - "updateTimestamp": "2024-03-22T08:55:00" + "updateTimestamp": "2024-03-22T08:55:00", }, ] components: @@ -2455,17 +1131,34 @@ components: format: date alias: type: string + getCustomerStatusInstance: + type: object + properties: + Entries: + type: array + properties: + customerStatus: + $ref: "#/components/schemas/getCustomerStatus" + fromInclusive: + type: string + format: date + toInclusive: + type: string + format: date getCustomerStatus: type: object properties: + customerStatusId: + type: integer name: type: string - fromInclusive: + getDebtorStatus: + type: object + properties: + debtorStatusId: + type: integer + name: type: string - format: date - toInclusive: - type: string - format: date getPerson: type: object properties: @@ -2486,11 +1179,11 @@ components: address: type: array items: - $ref: '#/components/schemas/getAddress' + $ref: "#/components/schemas/getAddress" phone: type: array items: - $ref: '#/components/schemas/getPhone' + $ref: "#/components/schemas/getPhone" getAddress: type: object properties: @@ -2511,6 +1204,13 @@ components: isPreferred: type: boolean addressType: + $ref: "#/components/schemas/getAddressType" + getAddressType: + type: object + properties: + addressTypeId: + type: integer + name: type: string getPhone: type: object @@ -2522,9 +1222,16 @@ components: countryCode: type: string phoneType: - type: string + $ref: "#/components/schemas/getPhoneType" isPreferred: type: boolean + getPhoneType: + type: object + properties: + phoneTypeId: + type: integer + name: + type: string getCustomerPreference: type: object properties: @@ -2536,7 +1243,7 @@ components: Entries: type: array items: - $ref: '#/components/schemas/getCustomerProfile' + $ref: "#/components/schemas/getCustomerProfile" getCustomerProfile: type: object properties: @@ -2544,30 +1251,30 @@ components: type: integer debtorNumber: type: integer - debtorStateId: - type: integer + debtorStatus: + $ref: "#/components/schemas/getDebtorStatus" vascustomerNumber: type: integer customerPreference: - $ref: '#/components/schemas/getCustomerPreference' + $ref: "#/components/schemas/getCustomerPreference" customerStatus: type: array items: - $ref: '#/components/schemas/getCustomerStatus' + $ref: "#/components/schemas/getCustomerStatusInstance" person: - $ref: '#/components/schemas/getPerson' + $ref: "#/components/schemas/getPerson" ovChipCard: type: array items: - $ref: '#/components/schemas/getOvChipCard' + $ref: "#/components/schemas/getOvChipCard" ovPayToken: type: array items: - $ref: '#/components/schemas/ovPayToken' + $ref: "#/components/schemas/ovPayToken" audit: type: array items: - $ref: '#/components/schemas/audit' + $ref: "#/components/schemas/audit" directDebitMandatePostEntity: required: - billingInformationId @@ -2591,7 +1298,7 @@ components: type: object properties: directDebitMandate: - $ref: '#/components/schemas/directDebitMandatePostEntity' + $ref: "#/components/schemas/directDebitMandatePostEntity" directDebitMandatePatchEntity: type: object properties: @@ -2613,7 +1320,7 @@ components: type: object properties: directDebitMandate: - $ref: '#/components/schemas/directDebitMandatePatchEntity' + $ref: "#/components/schemas/directDebitMandatePatchEntity" directDebitMandateGETEntity: type: object properties: @@ -2688,7 +1395,7 @@ components: type: object properties: billingInformation: - $ref: '#/components/schemas/billingInformationPostEntity' + $ref: "#/components/schemas/billingInformationPostEntity" billingInformationPatchEntity: type: object properties: @@ -2710,7 +1417,7 @@ components: type: object properties: billingInformation: - $ref: '#/components/schemas/billingInformationPatchEntity' + $ref: "#/components/schemas/billingInformationPatchEntity" getCustomerProfileFinancials: type: object properties: @@ -2719,11 +1426,11 @@ components: billingInformation: type: array items: - $ref: '#/components/schemas/billingInformationGETEntity' + $ref: "#/components/schemas/billingInformationGETEntity" directDebitMandate: type: array items: - $ref: '#/components/schemas/directDebitMandateGETEntity' + $ref: "#/components/schemas/directDebitMandateGETEntity" customerPreferencesEntity: type: object properties: @@ -2735,17 +1442,17 @@ components: debtorStatusId: type: integer customerPreference: - $ref: '#/components/schemas/customerPreferencesEntity' + $ref: "#/components/schemas/customerPreferencesEntity" person: - $ref: '#/components/schemas/personEntity' + $ref: "#/components/schemas/personEntity" addresses: type: array items: - $ref: '#/components/schemas/addressPostEntity' + $ref: "#/components/schemas/addressPostEntity" phones: type: array items: - $ref: '#/components/schemas/phonePostEntity' + $ref: "#/components/schemas/phonePostEntity" postCustomerStatusEntity: type: object properties: @@ -2755,7 +1462,7 @@ components: type: object properties: customerStatus: - $ref: '#/components/schemas/postCustomerStatusEntity' + $ref: "#/components/schemas/postCustomerStatusEntity" postOvChipCardEntity: required: - chipCardNumber @@ -2782,12 +1489,12 @@ components: type: object properties: customerPreference: - $ref: '#/components/schemas/patchCustomerPreferencesEntity' + $ref: "#/components/schemas/patchCustomerPreferencesEntity" postOvChipCard: type: object properties: ovChipCard: - $ref: '#/components/schemas/postOvChipCardEntity' + $ref: "#/components/schemas/postOvChipCardEntity" postOvPayToken: required: - alias @@ -2821,8 +1528,13 @@ components: ovPayTokenEntity: type: object properties: - tokenTypeId: - type: string + tokenType: + type: object + properties: + tokenTypeId: + type: string + name: + type: string xTat: type: string xBot: @@ -2833,8 +1545,13 @@ components: type: integer ovpasNumber: type: string - tokenStatusId: - type: integer + tokenStatus: + type: object + properties: + tokenStatusId: + type: integer + name: + type: string expirationDate: type: string replacedByTokenId: @@ -2843,32 +1560,32 @@ components: type: object properties: ovPayToken: - $ref: '#/components/schemas/ovPayTokenEntity' + $ref: "#/components/schemas/ovPayTokenEntity" patchPerson: type: object properties: person: - $ref: '#/components/schemas/personEntity' + $ref: "#/components/schemas/personEntity" patchAddress: type: object properties: address: - $ref: '#/components/schemas/addressPatchEntity' + $ref: "#/components/schemas/addressPatchEntity" patchPhone: type: object properties: phone: - $ref: '#/components/schemas/phonePatchEntity' + $ref: "#/components/schemas/phonePatchEntity" postAddress: type: object properties: address: - $ref: '#/components/schemas/addressPostEntity' + $ref: "#/components/schemas/addressPostEntity" postPhone: type: object properties: phone: - $ref: '#/components/schemas/phonePostEntity' + $ref: "#/components/schemas/phonePostEntity" personEntity: type: object properties: @@ -3054,7 +1771,7 @@ components: example: 0044831b-8e80c-4f82-r989a-8d85ee1996 lastDigits: type: string - example: '0001' + example: "0001" ovpasNumber: type: integer example: 1 @@ -3073,7 +1790,7 @@ components: ovPayToken: type: array items: - $ref: '#/components/schemas/ovPayTokenGetEntity' + $ref: "#/components/schemas/ovPayTokenGetEntity" postCustomerProfileOvPayTokenResponse: type: object properties: @@ -3094,7 +1811,7 @@ components: properties: code: type: string - example: '400' + example: "400" type: type: string message: @@ -3110,7 +1827,7 @@ components: properties: code: type: string - example: '900901' + example: "900901" type: type: string message: @@ -3126,7 +1843,7 @@ components: properties: code: type: string - example: '404' + example: "404" type: type: string example: Status report @@ -3141,7 +1858,7 @@ components: properties: code: type: string - example: '409' + example: "409" type: type: string example: Conflict @@ -3155,7 +1872,7 @@ components: properties: code: type: string - example: '422' + example: "422" type: type: string example: Unprocessable entity @@ -3171,11 +1888,11 @@ components: properties: code: type: string - example: '500' + example: "500" type: type: string message: type: string example: Internal Server Error description: - type: string \ No newline at end of file + type: string -- 2.45.2 From 10a4147869e33a4357739bc18cd736d150fc4d50 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Thu, 19 Dec 2024 09:48:48 +0100 Subject: [PATCH 036/372] fixed semantic error --- src/openapi/customers/customers-crud-v2.yaml | 23 +++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 6d717a6..d3942fc 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -151,7 +151,7 @@ paths: vascustomerNumber: CST005 customerPreference: languageId: 1 - customerStatusInstance: + customerStatusInstances: - customerStatus: name: Active customerStatusId: 2 @@ -261,7 +261,7 @@ paths: vascustomerNumber: CST005 customerPreference: languageId: 1 - customerStatusInstance: + customerStatusInstances: - customerStatus: name: Active customerStatusId: 2 @@ -534,7 +534,7 @@ paths: vascustomerNumber: CST005 customerPreference: languageId: 1 - customerStatusInstance: + customerStatusInstances: - customerStatus: name: Active customerStatusId: 2 @@ -1132,17 +1132,14 @@ components: alias: type: string getCustomerStatusInstance: - type: object - properties: - Entries: - type: array - properties: - customerStatus: - $ref: "#/components/schemas/getCustomerStatus" - fromInclusive: + type: object + properties: + customerStatus: + $ref: "#/components/schemas/getCustomerStatus" + fromInclusive: type: string format: date - toInclusive: + toInclusive: type: string format: date getCustomerStatus: @@ -1257,7 +1254,7 @@ components: type: integer customerPreference: $ref: "#/components/schemas/getCustomerPreference" - customerStatus: + customerStatusInstances: type: array items: $ref: "#/components/schemas/getCustomerStatusInstance" -- 2.45.2 From 0c6c93a507243bc21357e2d2c6eac53ca04f8023 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Thu, 19 Dec 2024 09:56:15 +0100 Subject: [PATCH 037/372] removed unnecessary schema's --- src/openapi/customers/customers-crud-v2.yaml | 528 +------------------ 1 file changed, 12 insertions(+), 516 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index d3942fc..3a332f2 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -132,8 +132,8 @@ paths: type: string example: e1307c73-676a-4d07-967b-6141276f7c7c responses: - "200": - description: Successful retrieved a customer profile + 200: + description: Successfully retrieved customer profile(s) content: application/json: schema: @@ -363,25 +363,25 @@ paths: timestamp: "2023-10-20T17:05:52.000+02:00" correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 href: null - "400": + 400: description: Bad Request content: application/json: schema: $ref: "#/components/schemas/400Response" - "401": + 401: description: Unauthorized content: application/json: schema: $ref: "#/components/schemas/401Response" - "404": + 404: description: Not Found content: application/json: schema: $ref: "#/components/schemas/404Response" - "500": + 500: description: Internal Server Error content: application/json: @@ -516,8 +516,8 @@ paths: type: string example: e1307c73-676a-4d07-967b-6141276f7c7c responses: - "200": - description: Successful retrieved a customer profile + 200: + description: Successfully retrieved a customer profile content: application/json: schema: @@ -635,25 +635,25 @@ paths: user: user timestamp: "2023-10-20T17:05:52.000+02:00" correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 - "400": + 400: description: Bad Request content: application/json: schema: $ref: "#/components/schemas/400Response" - "401": + 401: description: Unauthorized content: application/json: schema: $ref: "#/components/schemas/401Response" - "404": + 404: description: Not Found content: application/json: schema: $ref: "#/components/schemas/404Response" - "500": + 500: description: Internal Server Error content: application/json: @@ -1047,10 +1047,6 @@ components: implicit: authorizationUrl: https://services.acc.api.htm.nl/authorize scopes: {} - bearerToken: - type: http - scheme: bearer - bearerFormat: JWT schemas: unavailable: type: object @@ -1272,256 +1268,6 @@ components: type: array items: $ref: "#/components/schemas/audit" - directDebitMandatePostEntity: - required: - - billingInformationId - - created - - directDebitMandateTypeName - - mandateAddressId - - mandateReference - type: object - properties: - directDebitMandateTypeName: - type: string - billingInformationId: - type: integer - mandateAddressId: - type: integer - created: - type: string - mandateReference: - type: string - directDebitMandatePost: - type: object - properties: - directDebitMandate: - $ref: "#/components/schemas/directDebitMandatePostEntity" - directDebitMandatePatchEntity: - type: object - properties: - directDebitMandateTypeName: - type: string - billingInformationId: - type: integer - mandateAddressId: - type: integer - mandateReference: - type: string - mandateState: - type: string - enum: - - SIGNED - - CANCELLED - - PREPARED - directDebitMandatePatch: - type: object - properties: - directDebitMandate: - $ref: "#/components/schemas/directDebitMandatePatchEntity" - directDebitMandateGETEntity: - type: object - properties: - directDebitMandateId: - type: integer - directDebitMandateTypeId: - type: integer - billingInformationId: - type: integer - mandateAddressId: - type: integer - created: - type: string - mandateReference: - type: string - mandateState: - type: string - updateTimestamp: - type: string - billingInformationGETEntity: - required: - - alias - - ascription - - bic - - billingAddressId - - billingInformationId - - iban - - issuerCountry - - swift - type: object - properties: - billingInformationId: - type: integer - issuerCountry: - type: string - iban: - type: string - bic: - type: string - swift: - type: string - ascription: - type: string - alias: - type: string - billingAddressId: - type: integer - billingInformationPostEntity: - required: - - alias - - ascription - - billingAddressId - - iban - - issuerCountry - type: object - properties: - issuerCountry: - type: string - iban: - type: string - bic: - type: string - swift: - type: string - ascription: - type: string - alias: - type: string - billingAddressId: - type: integer - billingInformationPost: - type: object - properties: - billingInformation: - $ref: "#/components/schemas/billingInformationPostEntity" - billingInformationPatchEntity: - type: object - properties: - issuerCountry: - type: string - iban: - type: string - bic: - type: string - swift: - type: string - ascription: - type: string - alias: - type: string - billingAddressId: - type: integer - billingInformationPatch: - type: object - properties: - billingInformation: - $ref: "#/components/schemas/billingInformationPatchEntity" - getCustomerProfileFinancials: - type: object - properties: - customerNumber: - type: integer - billingInformation: - type: array - items: - $ref: "#/components/schemas/billingInformationGETEntity" - directDebitMandate: - type: array - items: - $ref: "#/components/schemas/directDebitMandateGETEntity" - customerPreferencesEntity: - type: object - properties: - languageId: - type: string - postCustomerProfile: - type: object - properties: - debtorStatusId: - type: integer - customerPreference: - $ref: "#/components/schemas/customerPreferencesEntity" - person: - $ref: "#/components/schemas/personEntity" - addresses: - type: array - items: - $ref: "#/components/schemas/addressPostEntity" - phones: - type: array - items: - $ref: "#/components/schemas/phonePostEntity" - postCustomerStatusEntity: - type: object - properties: - name: - type: string - postCustomerStatus: - type: object - properties: - customerStatus: - $ref: "#/components/schemas/postCustomerStatusEntity" - postOvChipCardEntity: - required: - - chipCardNumber - type: object - properties: - chipCardNumber: - type: integer - validUntil: - type: string - format: date - alias: - type: string - patchCustomerProfile: - type: object - properties: - debtorStatusId: - type: integer - patchCustomerPreferencesEntity: - type: object - properties: - languageId: - type: string - patchCustomerPreferences: - type: object - properties: - customerPreference: - $ref: "#/components/schemas/patchCustomerPreferencesEntity" - postOvChipCard: - type: object - properties: - ovChipCard: - $ref: "#/components/schemas/postOvChipCardEntity" - postOvPayToken: - required: - - alias - - lastDigits - - tokenTypeId - - xBot - - xTat - type: object - properties: - ovPayToken: - type: object - properties: - tokenTypeId: - type: string - xTat: - type: string - xBot: - type: string - alias: - type: string - lastDigits: - type: integer - ovpasNumber: - type: string - tokenStatusId: - type: integer - expirationDate: - type: string - replacedByTokenId: - type: integer ovPayTokenEntity: type: object properties: @@ -1553,256 +1299,6 @@ components: type: string replacedByTokenId: type: integer - patchOvPayToken: - type: object - properties: - ovPayToken: - $ref: "#/components/schemas/ovPayTokenEntity" - patchPerson: - type: object - properties: - person: - $ref: "#/components/schemas/personEntity" - patchAddress: - type: object - properties: - address: - $ref: "#/components/schemas/addressPatchEntity" - patchPhone: - type: object - properties: - phone: - $ref: "#/components/schemas/phonePatchEntity" - postAddress: - type: object - properties: - address: - $ref: "#/components/schemas/addressPostEntity" - postPhone: - type: object - properties: - phone: - $ref: "#/components/schemas/phonePostEntity" - personEntity: - type: object - properties: - birthname: - type: string - surname: - type: string - prefix: - type: string - suffix: - type: string - dateOfBirth: - type: string - format: date - emailAddress: - type: string - addressPostEntity: - required: - - addressTypeId - - city - - country - - houseNumber - - postalCode - - street - type: object - properties: - street: - type: string - houseNumber: - type: integer - houseNumberSuffix: - type: string - postalCode: - type: string - city: - type: string - country: - type: string - isPreferred: - type: boolean - addressTypeId: - type: integer - addressPatchEntity: - type: object - properties: - street: - type: string - houseNumber: - type: integer - houseNumberSuffix: - type: string - postalCode: - type: string - city: - type: string - country: - type: string - addressTypeId: - type: integer - isPreferred: - type: boolean - phonePostEntity: - required: - - countryCode - - number - - phoneTypeId - type: object - properties: - number: - type: string - countryCode: - type: string - phoneTypeId: - type: integer - isPreferred: - type: boolean - phonePatchEntity: - type: object - properties: - number: - type: string - countryCode: - type: string - phoneTypeId: - type: integer - isPreferred: - type: boolean - defaultCustomerProfileResponse: - type: object - properties: - customerNumber: - type: integer - example: 10000001 - phonePatchOKResponse: - type: object - properties: - id: - type: integer - example: 1 - addressPatchOKResponse: - type: object - properties: - id: - type: integer - example: 1 - postCustomerProfileCustomerNumberResponse: - type: object - properties: - customerNumber: - type: integer - example: 10000001 - postCustomerProfileAddressResponse: - type: object - properties: - customerNumber: - type: integer - example: 10000001 - addressId: - type: integer - example: 1 - postCustomerProfilePhoneResponse: - type: object - properties: - customerNumber: - type: integer - example: 10000001 - phoneId: - type: integer - example: 1 - postCustomerProfileBillingInformationResponse: - type: object - properties: - customerNumber: - type: integer - example: 10000001 - billingInformationId: - type: integer - example: 1 - postCustomerProfileDirectDebitMandateResponse: - type: object - properties: - customerNumber: - type: integer - example: 10000001 - directDebitMandateId: - type: integer - example: 1 - postCustomerProfileOvChipCardResponse: - type: object - properties: - customerNumber: - type: integer - example: 10000001 - ovChipCardId: - type: integer - example: 1 - patchCustomerProfileResponse: - type: object - properties: - customerNumber: - type: integer - example: 10000001 - patchCustomerPreferencesResponse: - type: object - properties: - customerNumber: - type: integer - example: 10000001 - ovPayTokenGetEntity: - type: object - properties: - ovPayTokenId: - type: integer - example: 1 - tokenTypeId: - type: integer - example: 1 - xTat: - type: string - example: 0044831b-8e80c-4f82-r989a-8d85ee1996 - xBot: - type: string - example: 0044831b-8e80c-4f82-r989a-8d85ee1996 - lastDigits: - type: string - example: "0001" - ovpasNumber: - type: integer - example: 1 - alias: - type: string - example: alias - tokenStatusId: - type: integer - expirationDate: - type: string - replacedByTokenId: - type: integer - getCustomerProfileOvPayTokenResponse: - type: object - properties: - ovPayToken: - type: array - items: - $ref: "#/components/schemas/ovPayTokenGetEntity" - postCustomerProfileOvPayTokenResponse: - type: object - properties: - ovPaytoken: - type: object - example: 10000001 - ovPayTokenId: - type: integer - example: 1 - patchCustomerProfileCustomerNumberResponse: - type: object - properties: - customerNumber: - type: integer - example: 10000001 400Response: type: object properties: -- 2.45.2 From cb0c79f68cc8a87513d45ba3faea2b285dd9e03c Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Thu, 19 Dec 2024 11:47:23 +0100 Subject: [PATCH 038/372] removed to much --- src/openapi/customers/customers-crud-v2.yaml | 177 +++++++++++++++++++ 1 file changed, 177 insertions(+) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 3a332f2..00c7d03 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1299,6 +1299,183 @@ components: type: string replacedByTokenId: type: integer + postPhone: + type: object + properties: + phone: + $ref: "#/components/schemas/phonePostEntity" + personEntity: + type: object + properties: + birthname: + type: string + surname: + type: string + prefix: + type: string + suffix: + type: string + dateOfBirth: + type: string + format: date + emailAddress: + type: string + addressPostEntity: + required: + - addressTypeId + - city + - country + - houseNumber + - postalCode + - street + type: object + properties: + street: + type: string + houseNumber: + type: integer + houseNumberSuffix: + type: string + postalCode: + type: string + city: + type: string + country: + type: string + isPreferred: + type: boolean + addressTypeId: + type: integer + phonePostEntity: + required: + - countryCode + - number + - phoneTypeId + type: object + properties: + number: + type: string + countryCode: + type: string + phoneTypeId: + type: integer + isPreferred: + type: boolean + defaultCustomerProfileResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + postCustomerProfileCustomerNumberResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + postCustomerProfileAddressResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + addressId: + type: integer + example: 1 + postCustomerProfilePhoneResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + phoneId: + type: integer + example: 1 + postCustomerProfileBillingInformationResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + billingInformationId: + type: integer + example: 1 + postCustomerProfileDirectDebitMandateResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + directDebitMandateId: + type: integer + example: 1 + postCustomerProfileOvChipCardResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + ovChipCardId: + type: integer + example: 1 + patchCustomerProfileResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + patchCustomerPreferencesResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + ovPayTokenGetEntity: + type: object + properties: + ovPayTokenId: + type: integer + example: 1 + tokenTypeId: + type: integer + example: 1 + xTat: + type: string + example: 0044831b-8e80c-4f82-r989a-8d85ee1996 + xBot: + type: string + example: 0044831b-8e80c-4f82-r989a-8d85ee1996 + lastDigits: + type: string + example: "0001" + ovpasNumber: + type: integer + example: 1 + alias: + type: string + example: alias + tokenStatusId: + type: integer + expirationDate: + type: string + replacedByTokenId: + type: integer + getCustomerProfileOvPayTokenResponse: + type: object + properties: + ovPayToken: + type: array + items: + $ref: "#/components/schemas/ovPayTokenGetEntity" + postCustomerProfileOvPayTokenResponse: + type: object + properties: + ovPaytoken: + type: object + example: 10000001 + ovPayTokenId: + type: integer + example: 1 400Response: type: object properties: -- 2.45.2 From c5fa6746a221c221e3fa76c8b73dd16e57310d2b Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Thu, 19 Dec 2024 11:49:39 +0100 Subject: [PATCH 039/372] hoofdentiteit volgens specs --- src/openapi/customers/customers-crud-v2.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 00c7d03..eaea554 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -141,7 +141,7 @@ paths: examples: fullCustomerProfile: value: - Entries: + customers: - customerProfileId: 1 customerNumber: 1000001 debtorNumber: TEST001 @@ -1233,7 +1233,7 @@ components: getCustomerProfileList: type: object properties: - Entries: + customers: type: array items: $ref: "#/components/schemas/getCustomerProfile" -- 2.45.2 From dad9ece54668522a07111101d7284870a53d05da Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Thu, 19 Dec 2024 11:55:25 +0100 Subject: [PATCH 040/372] stuff --- src/openapi/customers/customers-crud-v2.yaml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index eaea554..65d5586 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -10,7 +10,7 @@ paths: get: tags: - ABTCustomers - summary: Search for customer profiles + summary: Search customer profiles description: >- Search for all customer profile list in the ABT database matching certain query parameters parameters: @@ -1367,6 +1367,24 @@ components: customerNumber: type: integer example: 10000001 + postCustomerProfile: + type: object + properties: + debtorStatusId: + type: integer + customerPreference: + $ref: '#/components/schemas/customerPreferencesEntity' + person: + $ref: '#/components/schemas/personEntity' + addresses: + type: array + items: + $ref: '#/components/schemas/addressPostEntity' + phones: + type: array + items: + $ref: '#/components/schemas/phonePostEntity' + postCustomerProfileCustomerNumberResponse: type: object properties: -- 2.45.2 From 27351f1101ed62216a8d8e0c104850264f3e04ea Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Thu, 19 Dec 2024 11:58:36 +0100 Subject: [PATCH 041/372] more stuff --- src/openapi/customers/customers-crud-v2.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 65d5586..1f93378 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1384,7 +1384,11 @@ components: type: array items: $ref: '#/components/schemas/phonePostEntity' - + customerPreferencesEntity: + type: object + properties: + languageId: + type: string postCustomerProfileCustomerNumberResponse: type: object properties: -- 2.45.2 From dbf8bff976a7de7fb2ba628e823d4f844a9079b1 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Fri, 20 Dec 2024 15:25:34 +0100 Subject: [PATCH 042/372] Tampermonkey plugin for adding a Swagger button to Gitea. --- src/plugins/gitea-add-swagger-button.user.js | 47 ++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/plugins/gitea-add-swagger-button.user.js diff --git a/src/plugins/gitea-add-swagger-button.user.js b/src/plugins/gitea-add-swagger-button.user.js new file mode 100644 index 0000000..e57049c --- /dev/null +++ b/src/plugins/gitea-add-swagger-button.user.js @@ -0,0 +1,47 @@ +// ==UserScript== +// @name gitea-add-swagger-button +// @namespace https://integratielaag.nl/ +// @version 0.1 +// @description Creates a button in Gitea to view Swagger +// @author bboterm +// @match https://git.integratielaag.nl/*.yaml +// @icon https://www.google.com/s2/favicons?sz=64&domain=gitea.com +// @grant none +// ==/UserScript== + +(function() { + 'use strict'; + + // Set the base URL for the Swagger instance + const swaggerBaseURL = 'https://swagger.integratielaag.nl/?url='; + // Get the base URL from the current webpage + const gitBaseURL = window.location.origin; + + // Replace 'parent-class-name' with the class name of the parent div + const parentClassName = 'file-actions'; + // Replace 'child-class-name' with the class name of the child div + const childClassName = 'buttons'; + + const parentDiv = document.querySelector('div.file-actions'); + if (parentDiv) { + const childDiv = parentDiv.querySelector('div.buttons'); + if (childDiv) { + const firstATag = childDiv.querySelector('a'); + if (firstATag) { + // Get the URL of the raw file + const hrefValue = firstATag.getAttribute('href'); + // Create a string literal for the new Swagger button + const swaggerButton = `Swagger`; + // Add the Swagger button to the HTML + childDiv.innerHTML = swaggerButton + childDiv.innerHTML; + } else { + console.log('No tag found inside the child div.'); + } + } else { + console.log(`Child div with class '${childClassName}' not found.`); + } + } else { + console.log(`Parent div with class '${parentClassName}' not found.`); + } +})(); + -- 2.45.2 From c595e257318bcffd8bc2dd57066b17c05d549283 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 23 Dec 2024 09:00:31 +0100 Subject: [PATCH 043/372] Added support for YAML and JSON files. --- src/plugins/gitea-add-swagger-button.user.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/plugins/gitea-add-swagger-button.user.js b/src/plugins/gitea-add-swagger-button.user.js index e57049c..e702cc3 100644 --- a/src/plugins/gitea-add-swagger-button.user.js +++ b/src/plugins/gitea-add-swagger-button.user.js @@ -1,13 +1,18 @@ // ==UserScript== // @name gitea-add-swagger-button // @namespace https://integratielaag.nl/ -// @version 0.1 +// @version 0.1.1 // @description Creates a button in Gitea to view Swagger // @author bboterm // @match https://git.integratielaag.nl/*.yaml +// @match https://git.integratielaag.nl/*.json // @icon https://www.google.com/s2/favicons?sz=64&domain=gitea.com // @grant none +// @updateURL https://git.integratielaag.nl/HTM/ovpay/raw/branch/develop/src/plugins/gitea-add-swagger-button.user.js +// @downloadURL https://git.integratielaag.nl/HTM/ovpay/raw/branch/develop/src/plugins/gitea-add-swagger-button.user.js // ==/UserScript== +// @history 0.1.0 Initial release +// @history 0.1.1 Added support for YAML and JSON files (function() { 'use strict'; -- 2.45.2 From 233c7114b937f632d2da95b3c06c847d184c6af7 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 24 Dec 2024 09:35:30 +0100 Subject: [PATCH 044/372] OVPAY-879 - Minor fixes. --- src/openapi/fiko/fiko-crud.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index fe786a7..b51e1ad 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -197,8 +197,8 @@ paths: "occurredOn": "2024-10-04T00:00:00Z", "type": "debit", "productCode": "HTM-MND-20", - "aggregationReference": "FIKO-123456", - "accountingSystemReference": "U4F-123456", + "aggregationReference": null, + "accountingSystemReference": null, } responses: "201": -- 2.45.2 From 8111b631f345b8d603bd6f78e6d5e8a8a2ca6244 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 24 Dec 2024 11:31:10 +0100 Subject: [PATCH 045/372] OVPAY-879 - Added schemas for Transactions v2. --- src/openapi/fiko/fiko-crud.yaml | 357 +++++++++++++++++++++----------- 1 file changed, 239 insertions(+), 118 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index b51e1ad..27dbd5b 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -130,48 +130,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "transactionItems": - [ - { - "transactionItemId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d", - "sourceName": "Verkoopengine", - "transactionId": "1001236", - "transactionLineId": "1", - "name": "HTM Maandkorting 20%", - "quantity": 1, - "taxCode": "V21", - "amountExclTax": 100, - "amountInclTax": 121, - "amountTax": 21, - "occurredOn": "2024-10-04T00:00:00Z", - "type": "debit", - "productCode": "HTM-MND-20", - "aggregationReference": "FIKO-123456", - "accountingSystemReference": "U4F-123456", - }, - { - "transactionItemId": "e63cc37b-4d87-4278-8eb5-1477e07edf3d", - "sourceName": "Verkoopengine", - "transactionId": "1001237", - "transactionLineId": "1", - "name": "HTM Maandkorting 20%", - "quantity": 1, - "taxCode": "V21", - "amountExclTax": 100, - "amountInclTax": 121, - "amountTax": 21, - "occurredOn": "2024-10-04T00:05:00Z", - "type": "debit", - "productCode": "HTM-MND-20", - "aggregationReference": "FIKO-123456", - "accountingSystemReference": "U4F-123456", - }, - ], - "href": null, - } + $ref: "#/components/schemas/TransactionItemsGetResponseBody" post: summary: Add a finanicial transaction item. description: Add a finanicial transaction item. @@ -182,33 +141,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "sourceName": "Verkoopengine", - "transactionId": "1001236", - "transactionLineId": "1", - "name": "HTM Maandkorting 20%", - "quantity": 1, - "taxCode": "V21", - "amountExclTax": 100, - "amountInclTax": 121, - "amountTax": 21, - "occurredOn": "2024-10-04T00:00:00Z", - "type": "debit", - "productCode": "HTM-MND-20", - "aggregationReference": null, - "accountingSystemReference": null, - } + $ref: "#/components/schemas/TransactionItemsPostRequestBody" responses: "201": description: Created content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { "transactionItemId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d" } + $ref: "#/components/schemas/TransactionItemsPostResponseBody" /transactionitems/bulk: post: summary: Add one ore more finanicial transaction items in bulk. @@ -220,58 +160,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - [ - { - "sourceName": "Verkoopengine", - "transactionId": "1001236", - "transactionLineId": "1", - "name": "HTM Maandkorting 20%", - "quantity": 1, - "taxCode": "V21", - "amountExclTax": 100, - "amountInclTax": 121, - "amountTax": 21, - "occurredOn": "2024-10-04T00:00:00Z", - "type": "debit", - "productCode": "HTM-MND-20", - "aggregationReference": null, - "accountingSystemReference": null, - }, - { - "sourceName": "Verkoopengine", - "transactionId": "1001237", - "transactionLineId": "1", - "name": "HTM Maandkorting 20%", - "quantity": 1, - "taxCode": "V21", - "amountExclTax": 100, - "amountInclTax": 121, - "amountTax": 21, - "occurredOn": "2024-10-04T00:05:00Z", - "type": "debit", - "productCode": "HTM-MND-20", - "aggregationReference": null, - "accountingSystemReference": null, - }, - ] + $ref: "#/components/schemas/TransactionItemsBulkPostRequestBody" responses: "201": description: Created content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - [ - { - "transactionItemId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d", - }, - { - "transactionItemId": "e63cc37b-4d87-4278-8eb5-1477e07edf3d", - }, - ] + $ref: "#/components/schemas/TransactionItemsBulkPostResponseBody" /transactionitems/{transactionItemId}: parameters: - in: path @@ -292,21 +188,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "aggregationReference": "FIKO-123456", - "accountingSystemReference": "U4F-123456", - } + $ref: "#/components/schemas/TransactionItemsPatchRequestBody" responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { "transactionItemId": "d667d293-aa82-4c9e-9b10-77cffc9058a1" } + $ref: "#/components/schemas/TransactionItemsPatchResponseBody" /transactionitems/{transactionItemId}/processingfailures: parameters: - in: path @@ -2172,6 +2061,238 @@ components: schemas: unavailable: type: object + TransactionItemsGetResponseBody: + type: object + properties: + transactionItems: + type: "array" + items: + type: object + properties: + transactionItemId: + type: string + example: afce35b2-1dff-4ace-98d0-4b9ac405c87d + sourceName: + type: string + example: Verkoopengine + transactionId: + type: string + example: 1001236 + transactionLineId: + type: string + nullable: true + example: 1 + name: + type: string + example: HTM Maandkorting 20% + quantity: + type: integer + example: 1 + taxCode: + type: string + example: V21 + amountExclTax: + type: number + example: 100 + amountInclTax: + type: number + example: 121 + amountTax: + type: number + example: 21 + occurredOn: + type: string + format: date-time + example: 2024-10-04T00:00:00Z + type: + type: string + enum: + - debit + - credit + example: debit + productCode: + type: string + example: HTM-MND-20 + aggregationReference: + type: string + nullable: true + example: FIKO-123456 + accountingSystemReference: + type: string + nullable: true + example: U4F-123456 + required: + - transactionItemId + - sourceName + - transactionId + - name + - quantity + - taxCode + - amountExclTax + - amountInclTax + - amountTax + - occurredOn + - type + - productCode + href: + type: string + nullable: true + description: URI for pagination. + example: null + TransactionItemsPostRequestBody: + type: object + properties: + sourceName: + type: string + example: Verkoopengine + transactionId: + type: string + example: 1001236 + transactionLineId: + type: string + nullable: true + example: 1 + name: + type: string + example: HTM Maandkorting 20% + quantity: + type: integer + example: 1 + taxCode: + type: string + example: V21 + amountExclTax: + type: integer + example: 100 + amountInclTax: + type: integer + example: 121 + amountTax: + type: integer + example: 21 + occurredOn: + type: string + format: date-time + example: 2024-10-04T00:00:00Z + type: + type: string + enum: + - debit + - credit + example: debit + productCode: + type: string + example: HTM-MND-20 + required: + - sourceName + - transactionId + - name + - quantity + - taxCode + - amountExclTax + - amountInclTax + - amountTax + - occurredOn + - type + - productCode + TransactionItemsPostResponseBody: + type: object + properties: + transactionItemId: + type: string + example: afce35b2-1dff-4ace-98d0-4b9ac405c87d + required: + - transactionItemId + TransactionItemsBulkPostRequestBody: + type: object + properties: + transactionItems: + type: array + items: + type: object + properties: + sourceName: + type: string + example: Verkoopengine + transactionId: + type: string + example: 1001236 + transactionLineId: + type: string + nullable: true + example: 1 + name: + type: string + example: HTM Maandkorting 20% + quantity: + type: integer + example: 1 + taxCode: + type: string + example: V21 + amountExclTax: + type: integer + example: 100 + amountInclTax: + type: integer + example: 121 + amountTax: + type: integer + example: 21 + occurredOn: + type: string + format: date-time + example: 2024-10-04T00:00:00Z + type: + type: string + enum: + - debit + - credit + example: debit + productCode: + type: string + example: HTM-MND-20 + required: + - sourceName + - transactionId + - name + - quantity + - taxCode + - amountExclTax + - amountInclTax + - amountTax + - occurredOn + - type + - productCode + TransactionItemsBulkPostResponseBody: + type: array + items: + type: object + properties: + transactionItemId: + type: string + example: afce35b2-1dff-4ace-98d0-4b9ac405c87d + required: + - transactionItemId + TransactionItemsPatchRequestBody: + type: object + properties: + aggregationReference: + type: string + nullable: true + example: FIKO-123456 + accountingSystemReference: + type: string + nullable: true + example: U4F-123456 + TransactionItemsPatchResponseBody: + type: object + properties: + transactionItemId: + type: string + example: afce35b2-1dff-4ace-98d0-4b9ac405c87d + required: + - transactionItemId rfc9457: type: object properties: -- 2.45.2 From 4ed63a75bfc150885fe584c638b9dbb94a55215d Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 24 Dec 2024 13:27:22 +0100 Subject: [PATCH 046/372] OVPAY-879 - Added schemas for Failures v2. --- src/openapi/fiko/fiko-crud.yaml | 462 ++++++++++++++++++++++---------- 1 file changed, 316 insertions(+), 146 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 27dbd5b..887bb4e 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -216,43 +216,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "department": "900", - "costCenter": "84955", - "costType": "619031", - "documentDate": "2022-01-01", - "documentCode": "VERK_FACTUUR", - "accountingPeriod": "2024/10", - "transactionDescription": "Dagkaart", - "contraAccountNumber": "220.10419", - "status": "open", - "occurence": 1, - "processingFailureInstances": - [ - { - "processingFailureInstanceId": "9afa9a6b-5b6a-4b0a-9c9e-4b0a5b6a4b0a", - "processingFailureId": "c93a5b6a-5b6a-4b0a-9c9e-4b0a5b6a4b0a", - "timestamp": "2022-01-01 00:00:00", - "failureReason": "122be602-139d-49f5-b34f-1e3e2de29408", - "element": "costCenter", - "occurence": 1, - "change": "Adapt config", - }, - ], - } + $ref: "#/components/schemas/ProcessingFailuresPostRequestBody" responses: "201": description: Created content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "processingFailureId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d", - } + $ref: "#/components/schemas/ProcessingFailuresPostResponseBody" /transactionitems/{transactionItemId}/transactionaudittrails: parameters: - in: path @@ -482,45 +453,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "processingFailures": - [ - { - "processingFailureId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - "transactionItemId": "000dd413-2d19-47c0-a9db-9efbb6bc39a2", - "department": "900", - "costCenter": "84955", - "costType": "619031", - "documentDate": "2022-01-01", - "documentCode": "VERK_FACTUUR", - "accountingPeriod": "2024/10", - "transactionDescription": "Dagkaart", - "contraAccountNumber": "220.10419", - "status": "open", - "occurence": 1, - "processingFailureInstances": - [ - { - "processingFailureInstanceId": "9afa9a6b-5b6a-4b0a-9c9e-4b0a5b6a4b0a", - "processingFailureId": "c93a5b6a-5b6a-4b0a-9c9e-4b0a5b6a4b0a", - "timestamp": "2022-01-01 00:00:00", - "failureReason": - { - "failureReasonId": 12, - "reasonCode": "1234ABCD", - "reasonDesc": "description", - }, - "element": "costCenter", - "occurence": 1, - "change": "Adapt config", - }, - ], - }, - ], - "href": null, - } + $ref: "#/components/schemas/ProcessingFailuresGetResponseBody" /processingfailures/{processingFailureId}: parameters: - in: path @@ -540,19 +473,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: { "status": "open", "occurence": 2 } + $ref: "#/components/schemas/ProcessingFailuresPatchRequestBody" responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "processingFailureId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - } + $ref: "#/components/schemas/ProcessingFailuresPatchResponseBody" /processingfailures/{processingFailureId}/processingfailureinstances: parameters: - in: path @@ -572,26 +500,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "timestamp": "2022-01-01 00:00:00", - "failureReasonId": 12, - "element": "costCenter", - "occurence": 1, - "change": "Adapt config", - } + $ref: "#/components/schemas/ProcessingFailureInstancesPostRequestBody" responses: "201": description: Created content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "processingFailureInstanceId": "9afa9a6b-5b6a-4b0a-9c9e-4b0a5b6a4b0a", - } + $ref: "#/components/schemas/ProcessingFailureInstancesPostResponseBody" /processingfailureinstances/{processingFailureInstanceId}: parameters: - in: path @@ -611,24 +527,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "timestamp": "2022-01-01 00:00:00", - "occurence": 2, - "change": "Adapt config", - } + $ref: "#/components/schemas/ProcessingFailureInstancesPatchRequestBody" responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "processingFailureInstanceId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - } + $ref: "#/components/schemas/ProcessingFailureInstancesPatchResponseBody" /productmetadata: get: summary: Find product metadata. @@ -2064,60 +1970,60 @@ components: TransactionItemsGetResponseBody: type: object properties: - transactionItems: - type: "array" + transactionItems: + type: array items: type: object properties: - transactionItemId: + transactionItemId: type: string example: afce35b2-1dff-4ace-98d0-4b9ac405c87d - sourceName: + sourceName: type: string example: Verkoopengine - transactionId: + transactionId: type: string example: 1001236 - transactionLineId: + transactionLineId: type: string nullable: true example: 1 - name: + name: type: string example: HTM Maandkorting 20% - quantity: + quantity: type: integer example: 1 - taxCode: + taxCode: type: string example: V21 - amountExclTax: - type: number + amountExclTax: + type: integer example: 100 - amountInclTax: - type: number + amountInclTax: + type: integer example: 121 - amountTax: - type: number + amountTax: + type: integer example: 21 - occurredOn: + occurredOn: type: string format: date-time example: 2024-10-04T00:00:00Z - type: + type: type: string enum: - debit - credit example: debit - productCode: + productCode: type: string example: HTM-MND-20 - aggregationReference: + aggregationReference: type: string nullable: true example: FIKO-123456 - accountingSystemReference: + accountingSystemReference: type: string nullable: true example: U4F-123456 @@ -2142,45 +2048,45 @@ components: TransactionItemsPostRequestBody: type: object properties: - sourceName: + sourceName: type: string example: Verkoopengine - transactionId: + transactionId: type: string example: 1001236 - transactionLineId: + transactionLineId: type: string nullable: true example: 1 - name: + name: type: string example: HTM Maandkorting 20% - quantity: + quantity: type: integer example: 1 - taxCode: + taxCode: type: string example: V21 - amountExclTax: + amountExclTax: type: integer example: 100 - amountInclTax: + amountInclTax: type: integer example: 121 - amountTax: + amountTax: type: integer example: 21 - occurredOn: + occurredOn: type: string format: date-time example: 2024-10-04T00:00:00Z - type: + type: type: string enum: - debit - credit example: debit - productCode: + productCode: type: string example: HTM-MND-20 required: @@ -2211,45 +2117,45 @@ components: items: type: object properties: - sourceName: + sourceName: type: string example: Verkoopengine - transactionId: + transactionId: type: string example: 1001236 - transactionLineId: + transactionLineId: type: string nullable: true example: 1 - name: + name: type: string example: HTM Maandkorting 20% - quantity: + quantity: type: integer example: 1 - taxCode: + taxCode: type: string example: V21 - amountExclTax: + amountExclTax: type: integer example: 100 - amountInclTax: + amountInclTax: type: integer example: 121 amountTax: type: integer example: 21 - occurredOn: + occurredOn: type: string format: date-time example: 2024-10-04T00:00:00Z - type: + type: type: string enum: - debit - credit example: debit - productCode: + productCode: type: string example: HTM-MND-20 required: @@ -2293,6 +2199,270 @@ components: example: afce35b2-1dff-4ace-98d0-4b9ac405c87d required: - transactionItemId + ProcessingFailuresPostRequestBody: + type: object + properties: + department: + type: string + nullable: true + example: 900 + costCenter: + type: string + nullable: true + example: 84955 + costType: + type: string + nullable: true + example: 619031 + documentDate: + type: string + format: date + nullable: true + example: 2022-01-01 + documentCode: + type: string + nullable: true + example: VERK_FACTUUR + accountingPeriod: + type: string + nullable: true + example: 2024/10 + transactionDescription: + type: string + nullable: true + example: Dagkaart + contraAccountNumber: + type: string + nullable: true + example: 220.10419 + status: + type: string + enum: + - open + - returned to trx-db + - returned to src + example: open + occurence: + type: integer + example: 1 + processingFailureInstances: + type: array + items: + $ref: "#/components/schemas/ProcessingFailureInstancesPostRequestBody" + required: + - status + - occurence + - processingFailureInstances + ProcessingFailuresPostResponseBody: + type: object + properties: + processingFailureId: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: + - processingFailureId + ProcessingFailuresGetResponseBody: + type: object + properties: + processingFailures: + type: array + items: + type: object + properties: + processingFailureId: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + transactionItemId: + type: string + format: uuid + example: 2d77d978-7141-499a-84ad-93fad8ee03ce + department: + type: string + nullable: true + example: 900 + costCenter: + type: string + nullable: true + example: 84955 + costType: + type: string + nullable: true + example: 619031 + documentDate: + type: string + format: date + nullable: true + example: 2022-01-01 + documentCode: + type: string + nullable: true + example: VERK_FACTUUR + accountingPeriod: + type: string + nullable: true + example: 2024/10 + transactionDescription: + type: string + nullable: true + example: Dagkaart + contraAccountNumber: + type: string + nullable: true + example: 220.10419 + status: + type: string + enum: + - open + - returned to trx-db + - returned to src + example: open + occurence: + type: integer + example: 1 + processingFailureInstances: + type: array + items: + type: object + properties: + processingFailureInstanceId: + type: string + format: uuid + example: 9afa9a6b-5b6a-4b0a-9c9e-4b0a5b6a4b0a + timestamp: + type: string + format: date-time + example: 2022-01-01 00:00:00 + failureReason: + type: object + properties: + failureReasonId: + type: integer + example: 1 + reasonCode: + type: string + example: 002 + reasonDesc: + type: string + example: Contra account does not exist + required: + - failureReasonId + - reasonCode + - reasonDesc + element: + type: string + example: costCenter + occurence: + type: integer + example: 1 + change: + type: string + nullable: true + example: Adapt config + required: + - processingFailureInstanceId + - timestamp + - failureReason + - element + - occurence + required: + - processingFailureId + - transactionItemId + - status + - occurence + - processingFailureInstances + href: + type: string + nullable: true + description: URI for pagination. + example: null + ProcessingFailuresPatchRequestBody: + type: object + properties: + status: + type: string + enum: + - open + - returned to trx-db + - returned to src + nullable: true + example: returned to trx-db + occurence: + type: integer + nullable: true + example: 2 + ProcessingFailuresPatchResponseBody: + type: object + properties: + processingFailureId: + type: string + format: uuid + nullable: false + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: + - processingFailureId + ProcessingFailureInstancesPostRequestBody: + type: object + properties: + timestamp: + type: string + format: date-time + example: 2022-01-01 00:00:00 + failureReasonId: + type: integer + example: 1 + element: + type: string + example: costCenter + occurence: + type: integer + example: 1 + change: + type: string + nullable: true + example: Adapt config + required: + - timestamp + - failureReason + - element + - occurence + ProcessingFailureInstancesPostResponseBody: + type: object + properties: + processingFailureInstanceId: + type: string + format: uuid + nullable: false + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: + - processingFailureInstanceId + ProcessingFailureInstancesPatchRequestBody: + type: object + properties: + timestamp: + type: string + format: date-time + nullable: true + example: 2022-01-01 00:00:00 + occurence: + type: integer + nullable: true + example: 1 + change: + type: string + nullable: true + example: Adapt config + ProcessingFailureInstancesPatchResponseBody: + type: object + properties: + processingFailureInstanceId: + type: string + format: uuid + nullable: false + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: + - processingFailureInstanceId rfc9457: type: object properties: -- 2.45.2 From 2515f36afa9af914da667b6dee60532290ec1418 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 24 Dec 2024 14:36:29 +0100 Subject: [PATCH 047/372] OVPAY-879 - Audit Trail v2 overhaul. --- src/openapi/fiko/fiko-crud.yaml | 643 ++++++++++++++------------------ 1 file changed, 285 insertions(+), 358 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 887bb4e..8a4a360 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -244,26 +244,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "user": "fiko", - "timestamp": "2022-01-01 00:00:00", - "action": "created", - "description": "Transaction created.", - "correlationId": "a3891560-3084-42cb-867c-f289e7cda47d", - } + $ref: "#/components/schemas/TransactionAuditTrailsPostRequestBody" responses: "201": description: Created content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "transactionAuditTrailId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d", - } + $ref: "#/components/schemas/TransactionAuditTrailsPostResponseBody" /transactionaudittrails: get: summary: Find audit trail entries. @@ -330,32 +318,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "transactionAuditTrails": - [ - { - "transactionAuditTrailId": "afce35b2-1dff-4ace-98d0-4b9ac405c87d", - "transactionItemId": "d667d293-aa82-4c9e-9b10-77cffc9058a1", - "user": "fiko", - "timestamp": "2022-01-01 00:00:00", - "action": "created", - "description": "Transaction created.", - "correlationId": "a3891560-3084-42cb-867c-f289e7cda47d", - }, - { - "transactionAuditTrailId": "e63cc37b-4d87-4278-8eb5-1477e07edf3d", - "transactionItemId": "d667d293-aa82-4c9e-9b10-77cffc9058a1", - "user": "fiko", - "timestamp": "2022-01-01 00:01:00", - "action": "processed", - "description": "Transaction processed.", - "correlationId": "3e9d7d4b-8adf-4e7f-8251-be308f16d3de", - }, - ], - "href": null, - } + $ref: "#/components/schemas/TransactionAuditTrailsGetResponseBody" /processingfailures: get: summary: Find processing failures. @@ -881,48 +844,6 @@ paths: { "productContraAccountId": "39a87c2a-9011-4dfd-b35e-1245a98c2e61", } - /productmetadata/{productMetadataId}/metadataaudittrails: - parameters: - - in: path - name: productMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: true - description: The id of the product metadata. - post: - summary: Add metadata audit trail. - description: Add metadata audit trail. - tags: - - Audit Trail v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - example: - { - "user": "rmeeuws", - "timestamp": "2024-10-04T00:00:00", - "correlationId": "a03cd0c2-38b5-4619-b9e3-d6e5b842e127", - "metadataChanges": - [ - { - "fieldName": "department", - "oldValue": "900", - "newValue": "999", - }, - ], - } - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/postMetadataAuditTrailResponse" /contraaccountmetadata: get: summary: Find contra account metadata. @@ -1044,48 +965,6 @@ paths: { "contraAccountMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf", } - /contraaccountmetadata/{contraAccountMetadataId}/metadataaudittrails: - parameters: - - in: path - name: contraAccountMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: true - description: The id of the contra account metadata. - post: - summary: Add metadata audit trail. - description: Add metadata audit trail. - tags: - - Audit Trail v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - example: - { - "user": "rmeeuws", - "timestamp": "2024-10-04T00:00:00", - "correlationId": "a03cd0c2-38b5-4619-b9e3-d6e5b842e127", - "metadataChanges": - [ - { - "fieldName": "contraAccountMetadataId", - "oldValue": "873810a3-a11a-4d4d-9af7-395520fa207c", - "newValue": "9a8eb116-5270-4ef9-81ef-fdc2e72c281a", - }, - ], - } - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/postMetadataAuditTrailResponse" /taxmetadata: get: summary: Find tax metadata. @@ -1229,48 +1108,6 @@ paths: $ref: "#/components/schemas/unavailable" example: { "taxMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf" } - /taxmetadata/{taxMetadataId}/metadataaudittrails: - parameters: - - in: path - name: taxMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: true - description: The id of the contra account metadata. - post: - summary: Add metadata audit trail. - description: Add metadata audit trail. - tags: - - Audit Trail v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - example: - { - "user": "rmeeuws", - "timestamp": "2024-10-04T00:00:00", - "correlationId": "a03cd0c2-38b5-4619-b9e3-d6e5b842e127", - "metadataChanges": - [ - { - "fieldName": "taxCode", - "oldValue": null, - "newValue": "V21", - }, - ], - } - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/postMetadataAuditTrailResponse" /sourcemetadata: get: summary: Find source metadata. @@ -1427,48 +1264,6 @@ paths: $ref: "#/components/schemas/unavailable" example: { "sourceMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf" } - /sourcemetadata/{sourceMetadataId}/metadataaudittrails: - parameters: - - in: path - name: sourceMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: true - description: The id of the contra account metadata. - post: - summary: Add metadata audit trail. - description: Add metadata audit trail. - tags: - - Audit Trail v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - example: - { - "user": "rmeeuws", - "timestamp": "2024-10-04T00:00:00", - "correlationId": "a03cd0c2-38b5-4619-b9e3-d6e5b842e127", - "metadataChanges": - [ - { - "fieldName": "businessOwner", - "oldValue": "Corneel Verstoep", - "newValue": "Mark Verheij", - }, - ], - } - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/postMetadataAuditTrailResponse" /accountingperiodmetadata: get: summary: Find accounting period metadata. @@ -1575,48 +1370,6 @@ paths: { "accountingPeriodMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf", } - /accountingperiodmetadata/{accountingPeriodMetadataId}/metadataaudittrails: - parameters: - - in: path - name: accountingPeriodMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: true - description: The id of the contra account metadata. - post: - summary: Add metadata audit trail. - description: Add metadata audit trail. - tags: - - Audit Trail v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - example: - { - "user": "rmeeuws", - "timestamp": "2024-10-04T00:00:00", - "correlationId": "a03cd0c2-38b5-4619-b9e3-d6e5b842e127", - "metadataChanges": - [ - { - "fieldName": "isOpen", - "oldValue": "true", - "newValue": "false", - }, - ], - } - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/postMetadataAuditTrailResponse" /concessionmetadata: get: summary: Find concession metadata. @@ -1748,48 +1501,6 @@ paths: { "concessionMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf", } - /concessionmetadata/{concessionMetadataId}/metadataaudittrails: - parameters: - - in: path - name: concessionMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: true - description: The id of the product metadata. - post: - summary: Add metadata audit trail. - description: Add metadata audit trail. - tags: - - Audit Trail v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - example: - { - "user": "rmeeuws", - "timestamp": "2024-10-04T00:00:00", - "correlationId": "a03cd0c2-38b5-4619-b9e3-d6e5b842e127", - "metadataChanges": - [ - { - "fieldName": "percentage", - "oldValue": null, - "newValue": "23.456", - }, - ], - } - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/postMetadataAuditTrailResponse" /metadataaudittrails: get: summary: Find metadata audit trails. @@ -1805,106 +1516,103 @@ paths: example: 37a8095b-19db-498f-9349-5f37d21c5bdf description: The id of the metadata audit trail. - in: query - name: productMetadataId + name: source schema: type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the product metadata. + example: FMT + description: The source of the metadata change. - in: query - name: concessionMetadataId + name: endpoint schema: type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the concession metadata. + format: url + example: https://dev.api.htm.nl/v2/productmetadata + description: The endpoint of the metadata change. - in: query - name: contraAccountMetadataId + name: operation schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the contra account metadata. + type: array + items: + type: string + enum: + - GET + - POST + - PATCH + - DELETE + example: POST + explode: false + description: The operation of the metadata change. - in: query - name: taxMetadataId + name: responseCode schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the tax metadata. + type: integer + example: 200 + description: The HTTP response code of the metadata change. - in: query - name: sourceMetadataId + name: requestBody schema: type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the source metadata. + format: json + example: { "json": "data" } + description: The request body of the metadata change. - in: query - name: accountingPeriodMetadataId + name: responseBody schema: type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the accounting period metadata. + format: json + example: { "json": "data" } + description: The response body of the metadata change. - in: query name: user schema: type: string - example: rmeeuws - description: The username of the user. + example: r.meeuws + description: The id of the user who performed the metadata change. - in: query name: timestampBefore schema: type: string - example: 2022-01-01 00:00:00 - description: The timestamp before the event occured. + format: date-time + example: 2024-01-01T00:00:00.000 + description: The timestamp before the metadata change was made. - in: query name: timestampAfter schema: type: string - example: 2022-01-01 00:00:00 - description: The timestamp after the event occured. + format: date-time + example: 2024-01-01T00:00:00.000 + description: The timestamp after the metadata change was made. - in: query name: correlationId schema: type: string - example: a3891560-3084-42cb-867c-f289e7cda47d - description: The correlation id of the event. + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + description: The correlation id of the metadata change. responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "metadataAuditTrails": - [ - { - "metadataAuditTrailId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - "productMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - "concessionMetadataId": null, - "contraAccountMetadataId": null, - "taxMetadataId": null, - "sourceMetadataId": null, - "accountingPeriodMetadataId": null, - "user": "rmeeuws", - "timestamp": "2022-01-01 00:00:00", - "correlationId": "a3891560-3084-42cb-867c-f289e7cda47d", - "metadataChanges": - [ - { - "metadataChangesId": "43a481a7-0845-460f-b44a-b4112cc2e193", - "fieldName": "businessOwner", - "oldValue": "Corneel Verstoep", - "newValue": "Jan-Willem Vermeij", - }, - ], - }, - ], - "href": null, - } + $ref: "#/components/schemas/MetadataAuditTrailsGetResponseBody" + post: + summary: Add metadata audit trail. + description: Add metadata audit trail. + tags: + - Audit Trail v2 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/MetadataAuditTrailsPostRequestBody" + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/MetadataAuditTrailsPostResponseBody" /concessions: get: summary: Get all concessions. @@ -2106,6 +1814,7 @@ components: properties: transactionItemId: type: string + format: uuid example: afce35b2-1dff-4ace-98d0-4b9ac405c87d required: - transactionItemId @@ -2177,6 +1886,7 @@ components: properties: transactionItemId: type: string + format: uuid example: afce35b2-1dff-4ace-98d0-4b9ac405c87d required: - transactionItemId @@ -2196,6 +1906,7 @@ components: properties: transactionItemId: type: string + format: uuid example: afce35b2-1dff-4ace-98d0-4b9ac405c87d required: - transactionItemId @@ -2398,7 +2109,6 @@ components: processingFailureId: type: string format: uuid - nullable: false example: 37a8095b-19db-498f-9349-5f37d21c5bdf required: - processingFailureId @@ -2433,7 +2143,6 @@ components: processingFailureInstanceId: type: string format: uuid - nullable: false example: 37a8095b-19db-498f-9349-5f37d21c5bdf required: - processingFailureInstanceId @@ -2459,10 +2168,228 @@ components: processingFailureInstanceId: type: string format: uuid - nullable: false example: 37a8095b-19db-498f-9349-5f37d21c5bdf required: - processingFailureInstanceId + TransactionAuditTrailsPostRequestBody: + type: object + properties: + user: + type: string + example: fiko + timestamp: + type: string + format: date-time + example: 2022-01-01 00:00:00 + action: + type: string + enum: + - created + - succeeded + - failed + - returned to trx-db + - returned to src + example: created + description: + type: string + nullable: true + example: Transaction created. + correlationId: + type: string + format: uuid + nullable: true + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: + - user + - timestamp + - action + TransactionAuditTrailsPostResponseBody: + type: object + properties: + transactionAuditTrailId: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: + - transactionAuditTrailId + TransactionAuditTrailsGetResponseBody: + type: object + properties: + transactionAuditTrails: + type: array + items: + type: object + properties: + transactionAuditTrailId: + type: string + format: uuid + example: afce35b2-1dff-4ace-98d0-4b9ac405c87d + transactionItemId: + type: string + format: uuid + example: d667d293-aa82-4c9e-9b10-77cffc9058a1 + user: + type: string + example: fiko + timestamp: + type: string + format: date-time + example: 2022-01-01 00:00:00 + action: + type: string + enum: + - created + - succeeded + - failed + - returned to trx-db + - returned to src + example: created + description: + type: string + nullable: true + example: Transaction created. + correlationId: + type: string + format: uuid + nullable: true + example: a3891560-3084-42cb-867c-f289e7cda47d + required: + - transactionAuditTrailId + - transactionItemId + - user + - timestamp + - action + href: + type: string + nullable: true + example: null + required: + - transactionAuditTrails + MetadataAuditTrailsGetResponseBody: + type: object + properties: + metadataAuditTrails: + type: array + items: + type: object + properties: + metadataAuditTrailId: + type: string + format: uuid + example: b6161270-eb08-4242-90ec-967d5db62070 + source: + type: string + example: FMT + endpoint: + type: string + format: url + example: https://dev.api.htm.nl/v2/productmetadata + operation: + type: string + enum: + - GET + - POST + - PATCH + - DELETE + example: POST + requestBody: + type: string + format: json + example: { "json": "data" } + responseCode: + type: integer + example: 200 + responseBody: + type: string + format: json + example: { "json": "data" } + user: + type: string + example: r.meeuws + timestamp: + type: string + format: date-time + example: 2022-01-01 00:00:00 + correlationId: + type: string + format: uuid + nullable: true + example: 662de47c-d809-41bd-b3f6-5c7e1dc5c030 + required: + - metadataAuditTrailId + - source + - endpoint + - operation + - requestBody + - responseCode + - responseBody + - user + - timestamp + href: + type: string + nullable: true + example: null + required: + - metadataAuditTrails + MetadataAuditTrailsPostRequestBody: + type: object + properties: + source: + type: string + example: FMT + endpoint: + type: string + format: url + example: https://dev.api.htm.nl/v2/productmetadata + operation: + type: string + enum: + - GET + - POST + - PATCH + - DELETE + example: POST + requestBody: + type: string + format: json + example: { "json": "data" } + responseCode: + type: integer + example: 200 + responseBody: + type: string + format: json + example: { "json": "data" } + user: + type: string + example: r.meeuws + timestamp: + type: string + format: date-time + example: 2022-01-01 00:00:00 + correlationId: + type: string + format: uuid + nullable: true + example: 662de47c-d809-41bd-b3f6-5c7e1dc5c030 + required: + - source + - endpoint + - operation + - requestBody + - responseCode + - responseBody + - user + - timestamp + MetadataAuditTrailsPostResponseBody: + type: object + properties: + metadataAuditTrailId: + type: string + format: uuid + example: b6161270-eb08-4242-90ec-967d5db62070 + required: + - metadataAuditTrailId rfc9457: type: object properties: -- 2.45.2 From 520362ae4de5058771921a76872224dc390b7e0b Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Fri, 3 Jan 2025 16:07:43 +0100 Subject: [PATCH 048/372] OVPAY-879 - Metadata v2 overhaul. --- src/openapi/fiko/fiko-crud.yaml | 1380 +++++++++++++++++++++---------- 1 file changed, 948 insertions(+), 432 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 8a4a360..94d7930 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -595,81 +595,8 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "productMetadata": - [ - { - "productMetadataId": "39a87c2a-9011-4dfd-b35e-1245a98c2e61", - "productCode": "4031", - "department": "900", - "costType": "619031", - "description": "O4031_Reisproduct HTM 1 dag Anoniem", - "documentCode": "VERK_FACTUUR", - "timestampUpdated": "2022-01-01T00:00:00", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - "productContraAccounts": - [ - { - "contraAccountMetadata": - { - "contraAccountMetadataId": "e0af8c8f-d421-4567-a14e-48e2a1bb86fb", - "contraAccountCode": "123456", - "contraAccountNumber": "220.10419", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - }, - "concession": - { "concessionId": 2, "name": "bus" }, - "sourceMetadata": - { - "sourceMetadataId": "bc4ea24a-27a5-40e8-bbbc-57a105afaaa0", - "incomingName": "VerkoopEngine", - "incomingEntity": "OrderLine", - "outgoingName": "Website Verkopen", - "businessOwner": "Corneel Verstoep", - "rejectionProcessing": "system", - "rejectionInfo": "api.htm.nl/v2/account/12345/msgs/abc", - "validFrom": "2024-01-01T00:00:00.000", - "validUntil": null, - }, - "costCenter": "84955", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - }, - { - "contraAccountMetadata": - { - "contraAccountMetadataId": "69c562ca-5299-4585-ac92-46fb54aeb99e", - "contraAccountCode": "123456", - "contraAccountNumber": "220.10419", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - }, - "concession": - { "concessionId": 1, "name": "bus" }, - "sourceMetadata": - { - "sourceMetadataId": "bc4ea24a-27a5-40e8-bbbc-57a105afaaa0", - "incomingName": "VerkoopEngine", - "incomingEntity": "OrderLine", - "outgoingName": "Website Verkopen", - "businessOwner": "Corneel Verstoep", - "rejectionProcessing": "system", - "rejectionInfo": "api.htm.nl/v2/account/12345/msgs/abc", - "validFrom": "2024-01-01T00:00:00.000", - "validUntil": null, - }, - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - }, - ], - }, - ], - "href": null, - } + $ref: "#/components/schemas/ProductMetadataGetResponseBody" + post: summary: Add product metadata. description: Add product metadata. @@ -680,47 +607,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "productCode": "4031", - "department": "900", - "costCenter": "84955", - "costType": "619031", - "description": "O4031_Reisproduct HTM 1 dag Anoniem", - "documentCode": "VERK_FACTUUR", - "timestampUpdated": "2022-01-01 00:00:00", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - "productContraAccounts": - [ - { - "contraAccountMetadataId": "e0af8c8f-d421-4567-a14e-48e2a1bb86fb", - "concessionId": 1, - "sourceMetadataId": "08d96f94-f468-467e-9068-c86c34f43097", - "costCenter": "84955", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - }, - { - "contraAccountMetadataId": "02e458ce-f77a-4262-8b38-490e54f52856", - "concessionId": 2, - "sourceMetadataId": "08d96f94-f468-467e-9068-c86c34f43097", - "costCenter": "84955", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - }, - ], - } + $ref: "#/components/schemas/ProductMetadataPostRequestBody" responses: "201": description: Created content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { "productMetadataId": "39a87c2a-9011-4dfd-b35e-1245a98c2e61" } + $ref: "#/components/schemas/ProductMetadataPostResponseBody" /productmetadata/{productMetadataId}: parameters: - in: path @@ -741,27 +635,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "productCode": "4031", - "department": "900", - "costType": "619031", - "description": "O4031_Reisproduct HTM 1 dag Anoniem", - "documentCode": "VERK_FACTUUR", - "timestampUpdated": "2022-01-01 00:00:00", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - } + $ref: "#/components/schemas/ProductMetadataPatchRequestBody" responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { "productMetadataId": "39a87c2a-9011-4dfd-b35e-1245a98c2e61" } + $ref: "#/components/schemas/ProductMetadataPatchResponseBody" /productmetadata/{productMetadataId}/productcontraaccounts: parameters: - in: path @@ -782,27 +663,77 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "contraAccountMetadataId": "e0af8c8f-d421-4567-a14e-48e2a1bb86fb", - "concessionId": 1, - "sourceMetadataId": "08d96f94-f468-467e-9068-c86c34f43097", - "costCenter": "84955", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - } + $ref: "#/components/schemas/ProductContraAccountsPostRequestBody" responses: "201": description: Created content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "productContraAccountId": "39a87c2a-9011-4dfd-b35e-1245a98c2e61", - } + $ref: "#/components/schemas/ProductContraAccountsPostResponseBody" + /productcontraaccounts: + get: + summary: Find product contra accounts. + description: Find product contra accounts. + tags: + - Metadata v2 + parameters: + - in: query + name: productContraAccountId + schema: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + description: The id of the product contra account. + - in: query + name: productMetadataId + schema: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + description: The id of the product metadata. + - in: query + name: contraAccountMetadataId + schema: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + description: The id of the contra account metadata. + - in: query + name: concessionId + schema: + type: array + items: + type: integer + example: [1, 2] + explode: false + description: Find product metadata that is linked to this concession. + - in: query + name: sourceMetadataId + schema: + type: string + format: uuid + example: 08d96f94-f468-467e-9068-c86c34f43097 + description: Find product metadata that is linked to this source metadata. + - in: query + name: costCenter + schema: + type: string + example: 84955 + description: Find product metadata that is linked to this cost center. + - in: query + name: validAt + schema: + type: string + example: 2024-03-22T09:00:00 + description: Timestamp that the metadata is valid. + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/ProductContraAccountsGetResponseBody" /productcontraaccounts/{productContraAccountId}: parameters: - in: path @@ -823,27 +754,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "contraAccountMetadataId": "e0af8c8f-d421-4567-a14e-48e2a1bb86fb", - "concessionId": 1, - "sourceMetadataId": "08d96f94-f468-467e-9068-c86c34f43097", - "costCenter": "84955", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - } + $ref: "#/components/schemas/ProductContraAccountsPatchRequestBody" responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "productContraAccountId": "39a87c2a-9011-4dfd-b35e-1245a98c2e61", - } + $ref: "#/components/schemas/ProductContraAccountsPatchResponseBody" /contraaccountmetadata: get: summary: Find contra account metadata. @@ -883,21 +801,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "contraAccountMetadata": - [ - { - "contraAccountMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - "contraAccountCode": "123456", - "contraAccountNumber": "220.10419", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - }, - ], - "href": null, - } + $ref: "#/components/schemas/ContraAccountMetadataGetResponseBody" post: summary: Add contra account metadata. description: Add contra account metadata. @@ -908,25 +812,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "contraAccountCode": "123456", - "contraAccountNumber": "220.10419", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - } + $ref: "#/components/schemas/ContraAccountMetadataPostRequestBody" responses: "201": description: Created content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "contraAccountMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - } + $ref: "#/components/schemas/ContraAccountMetadataPostResponseBody" /contraaccountmetadata/{contraAccountMetadataId}: parameters: - in: path @@ -947,24 +840,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "contraAccountNumber": "220.10419", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - } + $ref: "#/components/schemas/ContraAccountMetadataPatchRequestBody" responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "contraAccountMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - } + $ref: "#/components/schemas/ContraAccountMetadataPatchResponseBody" /taxmetadata: get: summary: Find tax metadata. @@ -1010,38 +893,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "taxMetadata": - [ - { - "taxMetadataId": "bc4ea24a-27a5-40e8-bbbc-57a105afaaa0", - "taxCode": "V21", - "taxPercentageAmount": 21, - "description": "BTW VERKOOP HOOG 21%", - "validFrom": "2024-01-01T00:00:00.000", - "validUntil": null, - }, - { - "taxMetadataId": "73c47af3-7c8b-44d3-b599-9b6f5a587a82", - "taxCode": "V09", - "taxPercentageAmount": 9, - "description": "BTW VERKOOP LAAG 9%", - "validFrom": "2024-01-01T00:00:00.000", - "validUntil": null, - }, - { - "taxMetadataId": "423b879c-e8db-4ba2-a2b4-0adfe037043d", - "taxCode": "V0", - "taxPercentageAmount": 0, - "description": "BTW VERKOOP NUL", - "validFrom": "2024-01-01T00:00:00.000", - "validUntil": null, - }, - ], - "href": null, - } + $ref: "#/components/schemas/TaxMetadataGetResponseBody" post: summary: Add tax metadata. description: Add tax metadata. @@ -1052,24 +904,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "taxCode": "V21", - "taxPercentageAmount": 21, - "description": "BTW VERKOOP HOOG 21%", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - } + $ref: "#/components/schemas/TaxMetadataPostRequestBody" responses: "201": description: Created content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { "taxMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf" } + $ref: "#/components/schemas/TaxMetadataPostResponseBody" /taxmetadata/{taxMetadataId}: parameters: - in: path @@ -1090,24 +932,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "taxCode": "V21", - "taxPercentageAmount": 21, - "description": "BTW VERKOOP HOOG 21%", - "validFrom": "2024-03-22T09:00:00", - "validUntil": "2025-12-31T23:59:59", - } + $ref: "#/components/schemas/TaxMetadataPatchRequestBody" responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { "taxMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf" } + $ref: "#/components/schemas/TaxMetadataPatchResponseBody" /sourcemetadata: get: summary: Find source metadata. @@ -1173,25 +1005,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "sourceMetadata": - [ - { - "sourceMetadataId": "bc4ea24a-27a5-40e8-bbbc-57a105afaaa0", - "incomingName": "VerkoopEngine", - "incomingEntity": "OrderLine", - "outgoingName": "Website Verkopen", - "businessOwner": "Corneel Verstoep", - "rejectionProcessing": "system", - "rejectionInfo": "api.htm.nl/v2/account/12345/msgs/abc", - "validFrom": "2024-01-01T00:00:00.000", - "validUntil": null, - }, - ], - "href": null, - } + $ref: "#/components/schemas/SourceMetadataGetResponseBody" post: summary: Add source metadata. description: Add source metadata. @@ -1202,27 +1016,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "incomingName": "VerkoopEngine", - "incomingEntity": "OrderLine", - "outgoingName": "Website Verkopen", - "businessOwner": "Corneel Verstoep", - "rejectionProcessing": "system", - "rejectionInfo": "api.htm.nl/v2/account/12345/msgs/abc", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - } + $ref: "#/components/schemas/SourceMetadataPostRequestBody" responses: "201": description: Created content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { "sourceMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf" } + $ref: "#/components/schemas/SourceMetadataPostResponseBody" /sourcemetadata/{sourceMetadataId}: parameters: - in: path @@ -1243,27 +1044,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "incomingName": "VerkoopEngine", - "incomingEntity": "OrderLine", - "outgoingName": "Website Verkopen", - "businessOwner": "Corneel Verstoep", - "rejectionProcessing": "system", - "rejectionInfo": "api.htm.nl/v2/account/12345/msgs/abc", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - } + $ref: "#/components/schemas/SourceMetadataPatchRequestBody" responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { "sourceMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf" } + $ref: "#/components/schemas/SourceMetadataPatchResponseBody" /accountingperiodmetadata: get: summary: Find accounting period metadata. @@ -1296,24 +1084,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "accountingPeriodMetadata": - [ - { - "accountingPeriodMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - "accountingPeriod": "2024-01", - "isOpen": false, - }, - { - "accountingPeriodMetadataId": "0302c651-f040-4cbc-8a4d-90dc82f29a32", - "accountingPeriod": "2024-02", - "isOpen": true, - }, - ], - "href": null, - } + $ref: "#/components/schemas/AccountingPeriodMetadataGetResponseBody" post: summary: Add accounting period metadata. description: Add accounting period metadata. @@ -1324,19 +1095,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: { "accountingPeriod": "2024-01", "isOpen": true } + $ref: "#/components/schemas/AccountingPeriodMetadataPostRequestBody" responses: "201": description: Created content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "accountingPeriodMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - } + $ref: "#/components/schemas/AccountingPeriodMetadataPostResponseBody" /accountingperiodmetadata/{accountingPeriodMetadataId}: parameters: - in: path @@ -1357,19 +1123,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: { "accountingPeriod": "2024-01", "isOpen": true } + $ref: "#/components/schemas/AccountingPeriodMetadataPatchRequestBody" responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "accountingPeriodMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - } + $ref: "#/components/schemas/AccountingPeriodMetadataPatchResponseBody" /concessionmetadata: get: summary: Find concession metadata. @@ -1411,28 +1172,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "concessionMetadata": - [ - { - "concessionMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - "concession": { "concessionId": 1, "name": "rail" }, - "percentage": 84.021, - "validFrom": "2024-01-01T00:00:00.000", - "validUntil": null, - }, - { - "concessionMetadataId": "5ac3a5a8-4b9b-4a6a-9b1f-86ae8d6d4a9b", - "concession": { "concessionId": 2, "name": "bus" }, - "percentage": 15.979, - "validFrom": "2024-01-01T00:00:00.000", - "validUntil": null, - }, - ], - "href": null, - } + $ref: "#/components/schemas/ConcessionMetadataGetResponseBody" post: summary: Add concession metadata. description: Add concession metadata. @@ -1443,25 +1183,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "concessionId": 2, - "percentage": 15.979, - "validFrom": "2024-01-01T00:00:00.000", - "validUntil": null, - } + $ref: "#/components/schemas/ConcessionMetadataPostRequestBody" responses: "201": description: Created content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "concessionMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - } + $ref: "#/components/schemas/ConcessionMetadataPostResponseBody" /concessionmetadata/{concessionMetadataId}: parameters: - in: path @@ -1482,25 +1211,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "concessionId": 2, - "percentage": 15.979, - "validFrom": "2024-01-01T00:00:00.000", - "validUntil": null, - } + $ref: "#/components/schemas/ConcessionMetadataPatchRequestBody" responses: "200": description: OK content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "concessionMetadataId": "37a8095b-19db-498f-9349-5f37d21c5bdf", - } + $ref: "#/components/schemas/ConcessionMetadataPatchResponseBody" /metadataaudittrails: get: summary: Find metadata audit trails. @@ -1596,7 +1314,7 @@ paths: schema: $ref: "#/components/schemas/MetadataAuditTrailsGetResponseBody" post: - summary: Add metadata audit trail. + summary: Add metadata audit trail. description: Add metadata audit trail. tags: - Audit Trail v2 @@ -1625,17 +1343,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "concessions": - [ - { "concessionId": 1, "name": "rail" }, - { "concessionId": 2, "name": "bus" }, - { "concessionId": 3, "name": "not_applicable" }, - ], - "href": null, - } + $ref: "#/components/schemas/ConcessionsGetResponseBody" /failurereasons: get: summary: Get all failure reasons. @@ -1648,24 +1356,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/unavailable" - example: - { - "failureReasons": - [ - { - "failureReasonId": 1, - "reasonCode": "002", - "reasonDesc": "Contra account does not exist", - }, - { - "failureReasonId": 2, - "reasonCode": "003", - "reasonDesc": "Accouting period closed", - }, - ], - "href": null, - } + $ref: "#/components/schemas/FailureReasonsGetResponseBody" components: securitySchemes: bearerToken: @@ -2046,21 +1737,7 @@ components: format: date-time example: 2022-01-01 00:00:00 failureReason: - type: object - properties: - failureReasonId: - type: integer - example: 1 - reasonCode: - type: string - example: 002 - reasonDesc: - type: string - example: Contra account does not exist - required: - - failureReasonId - - reasonCode - - reasonDesc + $ref: "#/components/schemas/FailureReason" element: type: string example: costCenter @@ -2390,6 +2067,852 @@ components: example: b6161270-eb08-4242-90ec-967d5db62070 required: - metadataAuditTrailId + ProductMetadataGetResponseBody: + type: object + properties: + productMetadata: + type: array + items: + type: object + properties: + productMetadataId: + type: string + format: uuid + example: 39a87c2a-9011-4dfd-b35e-1245a98c2e61 + productCode: + type: string + example: 4031 + department: + type: string + example: 900 + costType: + type: string + example: 619031 + description: + type: string + example: O4031_Reisproduct HTM 1 dag Anoniem + documentCode: + type: string + example: VERK_FACTUUR + timestampUpdated: + type: string + format: date-time + example: 2022-01-01T00:00:00 + validFrom: + type: string + format: date-time + example: 2024-03-22T09:00:00 + validUntil: + type: string + format: date-time + nullable: true + example: null + productContraAccounts: + type: array + items: + type: object + properties: + contraAccountMetadata: + $ref: "#/components/schemas/ContraAccountMetadata" + concession: + $ref: "#/components/schemas/Concession" + sourceMetadata: + $ref: "#/components/schemas/SourceMetadata" + costCenter: + type: string + example: 84955 + validFrom: + type: string + format: date-time + example: 2024-03-22T09:00:00 + validUntil: + type: string + format: date-time + nullable: true + example: null + required: + - contraAccountMetadata + - concession + - sourceMetadata + - costCenter + - validFrom + required: + - productMetadataId + - productCode + - department + - costType + - description + - documentCode + - timestampUpdated + - validFrom + - productContraAccounts + href: + type: string + nullable: true + description: URI for pagination. + example: null + ProductMetadataPostRequestBody: + type: object + properties: + productCode: + type: string + example: 4031 + department: + type: string + example: 900 + costType: + type: string + example: 619031 + description: + type: string + example: O4031_Reisproduct HTM 1 dag Anoniem + documentCode: + type: string + example: VERK_FACTUUR + timestampUpdated: + type: string + format: date-time + example: 2022-01-01T00:00:00 + validFrom: + type: string + format: date-time + example: 2024-03-22T09:00:00 + validUntil: + type: string + format: date-time + nullable: true + example: null + required: + - productCode + - department + - costType + - description + - documentCode + - timestampUpdated + - validFrom + ProductMetadataPostResponseBody: + type: object + properties: + productMetadataId: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: + - productMetadataId + ProductMetadataPatchRequestBody: + type: object + properties: + productCode: + type: string + example: 4031 + department: + type: string + example: 900 + costType: + type: string + example: 619031 + description: + type: string + example: O4031_Reisproduct HTM 1 dag Anoniem + documentCode: + type: string + example: VERK_FACTUUR + timestampUpdated: + type: string + format: date-time + example: 2022-01-01T00:00:00 + validFrom: + type: string + format: date-time + example: 2024-03-22T09:00:00 + validUntil: + type: string + format: date-time + nullable: true + example: 2024-06-22T09:00:00 + ProductMetadataPatchResponseBody: + type: object + properties: + productMetadataId: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: + - productMetadataId + ProductContraAccountsPostRequestBody: + type: object + properties: + contraAccountMetadataId: + type: string + format: uuid + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + concessionId: + type: integer + example: 1 + sourceMetadataId: + type: string + format: uuid + example: 08d96f94-f468-467e-9068-c86c34f43097 + costCenter: + type: string + example: 84955 + validFrom: + type: string + format: date-time + example: 2024-03-22T09:00:00 + validUntil: + type: string + format: date-time + nullable: true + example: null + required: + - contraAccountMetadataId + - concessionId + - sourceMetadataId + - costCenter + - validFrom + ProductContraAccountsPostResponseBody: + type: object + properties: + productContraAccountId: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: + - productContraAccountId + ProductContraAccountsGetResponseBody: + type: object + properties: + productContraAccounts: + type: array + items: + type: object + properties: + productContraAccountId: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + contraAccountMetadata: + $ref: "#/components/schemas/ContraAccountMetadata" + concession: + $ref: "#/components/schemas/Concession" + sourceMetadata: + $ref: "#/components/schemas/SourceMetadata" + costCenter: + type: string + example: 84955 + validFrom: + type: string + format: date-time + example: 2024-03-22T09:00:00 + validUntil: + type: string + format: date-time + nullable: true + example: null + required: + - productContraAccountId + - contraAccountMetadataId + - concessionId + - sourceMetadataId + - costCenter + - validFrom + href: + type: string + nullable: true + description: URI for pagination. + example: null + ProductContraAccountsPatchRequestBody: + type: object + properties: + contraAccountMetadataId: + type: string + format: uuid + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + concessionId: + type: integer + example: 1 + sourceMetadataId: + type: string + format: uuid + example: 08d96f94-f468-467e-9068-c86c34f43097 + costCenter: + type: string + example: 84955 + validFrom: + type: string + format: date-time + example: 2024-03-22T09:00:00 + validUntil: + type: string + format: date-time + nullable: true + example: null + ProductContraAccountsPatchResponseBody: + type: object + properties: + productContraAccountId: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: + - productContraAccountId + ContraAccountMetadataGetResponseBody: + type: object + properties: + contraAccountMetadata: + type: array + items: + $ref: "#/components/schemas/ContraAccountMetadata" + href: + type: string + nullable: true + description: URI for pagination. + example: null + ContraAccountMetadataPostRequestBody: + type: object + properties: + contraAccountCode: + type: string + example: 123456 + contraAccountNumber: + type: string + example: 220.10419 + validFrom: + type: string + format: date-time + example: 2024-03-22T09:00:00 + validUntil: + type: string + format: date-time + nullable: true + example: null + required: + - contraAccountCode + - contraAccountNumber + - validFrom + ContraAccountMetadataPostResponseBody: + type: object + properties: + contraAccountMetadataId: + type: string + format: uuid + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + required: + - contraAccountMetadataId + ContraAccountMetadataPatchRequestBody: + type: object + properties: + contraAccountCode: + type: string + example: 123456 + contraAccountNumber: + type: string + example: 220.10419 + validFrom: + type: string + format: date-time + example: 2024-03-22T09:00:00 + validUntil: + type: string + format: date-time + nullable: true + example: null + ContraAccountMetadataPatchResponseBody: + type: object + properties: + contraAccountMetadataId: + type: string + format: uuid + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + required: + - contraAccountMetadataId + TaxMetadataGetResponseBody: + type: object + properties: + taxMetadata: + type: array + items: + type: object + properties: + taxMetadataId: + type: string + format: uuid + example: 192882fe-3f51-46bb-bfdb-2e4cb31ef925 + taxCode: + type: string + example: V21 + taxPercentageAmount: + type: integer + example: 21 + description: + type: string + example: BTW VERKOOP HOOG 21% + validFrom: + type: string + format: date-time + example: 2024-03-22T09:00:00 + validUntil: + type: string + format: date-time + nullable: true + example: null + required: + - taxMetadataId + - taxCode + - taxPercentageAmount + - description + - validFrom + href: + type: string + nullable: true + description: URI for pagination. + example: null + TaxMetadataPostRequestBody: + type: object + properties: + taxCode: + type: string + example: V21 + taxPercentageAmount: + type: integer + example: 21 + description: + type: string + example: BTW VERKOOP HOOG 21% + validFrom: + type: string + format: date-time + example: 2024-03-22T09:00:00 + validUntil: + type: string + format: date-time + nullable: true + example: null + required: + - taxCode + - taxPercentageAmount + - description + - validFrom + TaxMetadataPostResponseBody: + type: object + properties: + taxMetadataId: + type: string + format: uuid + example: 192882fe-3f51-46bb-bfdb-2e4cb31ef925 + required: + - taxMetadataId + TaxMetadataPatchRequestBody: + type: object + properties: + taxCode: + type: string + example: V21 + taxPercentageAmount: + type: integer + example: 21 + description: + type: string + example: BTW VERKOOP HOOG 21% + validFrom: + type: string + format: date-time + example: 2024-03-22T09:00:00 + validUntil: + type: string + format: date-time + nullable: true + example: null + TaxMetadataPatchResponseBody: + type: object + properties: + taxMetadataId: + type: string + format: uuid + example: 192882fe-3f51-46bb-bfdb-2e4cb31ef925 + required: + - taxMetadataId + SourceMetadataGetResponseBody: + type: object + properties: + sourceMetadata: + type: array + items: + $ref: '#/components/schemas/SourceMetadata' + href: + type: string + nullable: true + description: URI for pagination. + example: null + SourceMetadataPostRequestBody: + type: object + properties: + incomingName: + type: string + example: VerkoopEngine + incomingEntity: + type: string + example: OrderLine + outgoingName: + type: string + example: Website Verkopen + businessOwner: + type: string + example: Corneel Verstoep + rejectionProcessing: + type: string + example: system + rejectionInfo: + type: string + example: api.htm.nl/v2/account/12345/msgs/abc + validFrom: + type: string + format: date-time + example: 2024-01-01T00:00:00.000 + validUntil: + type: string + format: date-time + nullable: true + example: null + required: + - sourceMetadataId + - incomingName + - incomingEntity + - outgoingName + - businessOwner + - rejectionProcessing + - rejectionInfo + - validFrom + SourceMetadataPostResponseBody: + type: object + properties: + sourceMetadataId: + type: string + format: uuid + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + required: + - sourceMetadataId + SourceMetadataPatchRequestBody: + type: object + properties: + incomingName: + type: string + example: VerkoopEngine + incomingEntity: + type: string + example: OrderLine + outgoingName: + type: string + example: Website Verkopen + businessOwner: + type: string + example: Corneel Verstoep + rejectionProcessing: + type: string + example: system + rejectionInfo: + type: string + example: api.htm.nl/v2/account/12345/msgs/abc + validFrom: + type: string + format: date-time + example: 2024-01-01T00:00:00.000 + validUntil: + type: string + format: date-time + nullable: true + example: null + SourceMetadataPatchResponseBody: + type: object + properties: + sourceMetadataId: + type: string + format: uuid + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + required: + - sourceMetadataId + AccountingPeriodMetadataGetResponseBody: + type: object + properties: + accountingPeriodMetadata: + type: array + items: + type: object + properties: + accountingPeriodMetadataId: + type: string + format: uuid + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + accountingPeriod: + type: string + example: 2024-01 + isOpen: + type: boolean + example: true + required: + - accountingPeriodMetadataId + - accountingPeriod + - isOpen + href: + type: string + nullable: true + description: URI for pagination. + example: null + AccountingPeriodMetadataPostRequestBody: + type: object + properties: + accountingPeriod: + type: string + example: 2024-01 + isOpen: + type: boolean + example: true + required: + - accountingPeriod + - isOpen + AccountingPeriodMetadataPostResponseBody: + type: object + properties: + accountingPeriodMetadataId: + type: string + format: uuid + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + required: + - accountingPeriodMetadataId + AccountingPeriodMetadataPatchRequestBody: + type: object + properties: + accountingPeriod: + type: string + example: 2024-01 + isOpen: + type: boolean + example: true + AccountingPeriodMetadataPatchResponseBody: + type: object + properties: + accountingPeriodMetadataId: + type: string + format: uuid + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + required: + - accountingPeriodMetadataId + ConcessionMetadataGetResponseBody: + type: object + properties: + concessionMetadata: + type: array + items: + type: object + properties: + concessionMetadataId: + type: string + format: uuid + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + concession: + $ref: '#/components/schemas/Concession' + percentage: + type: number + example: 84.021 + validFrom: + type: string + format: date-time + example: 2024-01-01T00:00:00.000 + validUntil: + type: string + format: date-time + nullable: true + example: null + required: + - concessionMetadataId + - concession + - percentage + - validFrom + href: + type: string + nullable: true + description: URI for pagination. + example: null + ConcessionMetadataPostRequestBody: + type: object + properties: + concessionId: + type: integer + example: 1 + percentage: + type: number + example: 84.021 + validFrom: + type: string + format: date-time + example: 2024-01-01T00:00:00.000 + validUntil: + type: string + format: date-time + nullable: true + example: null + required: + - concessionId + - percentage + - validFrom + ConcessionMetadataPostResponseBody: + type: object + properties: + concessionMetadataId: + type: string + format: uuid + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + required: + - concessionMetadataId + ConcessionMetadataPatchRequestBody: + type: object + properties: + concessionId: + type: integer + example: 1 + percentage: + type: number + example: 84.021 + validFrom: + type: string + format: date-time + example: 2024-01-01T00:00:00.000 + validUntil: + type: string + format: date-time + nullable: true + example: null + ConcessionMetadataPatchResponseBody: + type: object + properties: + concessionMetadataId: + type: string + format: uuid + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + required: + - concessionMetadataId + ConcessionsGetResponseBody: + type: object + properties: + concessions: + type: array + items: + $ref: '#/components/schemas/Concession' + href: + type: string + nullable: true + description: URI for pagination. + example: null + FailureReasonsGetResponseBody: + type: object + properties: + failureReasons: + type: array + items: + $ref: '#/components/schemas/FailureReason' + href: + type: string + nullable: true + description: URI for pagination. + example: null + ContraAccountMetadata: + type: object + properties: + contraAccountMetadataId: + type: string + format: uuid + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + contraAccountCode: + type: string + example: 123456 + contraAccountNumber: + type: string + example: 220.10419 + validFrom: + type: string + format: date-time + example: 2024-03-22T09:00:00 + validUntil: + type: string + format: date-time + nullable: true + example: null + required: + - contraAccountMetadataId + - contraAccountCode + - contraAccountNumber + - validFrom + Concession: + type: object + properties: + concessionId: + type: integer + example: 1 + name: + type: string + example: bus + required: + - concessionId + SourceMetadata: + type: object + properties: + sourceMetadataId: + type: string + format: uuid + example: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0 + incomingName: + type: string + example: VerkoopEngine + incomingEntity: + type: string + example: OrderLine + outgoingName: + type: string + example: Website Verkopen + businessOwner: + type: string + example: Corneel Verstoep + rejectionProcessing: + type: string + example: system + rejectionInfo: + type: string + example: api.htm.nl/v2/account/12345/msgs/abc + validFrom: + type: string + format: date-time + example: 2024-01-01T00:00:00.000 + validUntil: + type: string + format: date-time + nullable: true + example: null + required: + - sourceMetadataId + - incomingName + - incomingEntity + - outgoingName + - businessOwner + - rejectionProcessing + - rejectionInfo + - validFrom + FailureReason: + type: object + properties: + failureReasonId: + type: integer + example: 2 + reasonCode: + type: string + example: "002" + reasonDesc: + type: string + example: Contra account does not exist + required: + - failureReasonId + - reasonCode + - reasonDesc rfc9457: type: object properties: @@ -2416,10 +2939,3 @@ components: example: - "/account/12345" - "/account/67890" - postMetadataAuditTrailResponse: - type: object - properties: - metadataAuditTrailId: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf -- 2.45.2 From 42dce39642fc42875304aac1c7f1f76a4bd42b99 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 6 Jan 2025 12:41:45 +0100 Subject: [PATCH 049/372] first fixes --- src/openapi/customers/customers-crud-v2.yaml | 389 ++++--------------- 1 file changed, 69 insertions(+), 320 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 1f93378..f907126 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -4,15 +4,15 @@ info: version: "1.0" description: CRUD APIs for ABT Customer database. These are NOT the functional APIs from Service Engine. servers: - - url: https://api.integratielaag.nl/v2 + - url: https://api.integratielaag.nl paths: - /customers/list: + /customers: get: tags: - ABTCustomers summary: Search customer profiles description: >- - Search for all customer profile list in the ABT database matching certain query parameters + Search for all customer profile list in the ABT database matching given query parameters parameters: - name: customerProfileId in: query @@ -32,13 +32,15 @@ paths: - name: debtorNumber in: query schema: - type: integer - example: 100001 + type: string + example: DB100001 - name: debtorStatusId in: query schema: - type: integer - example: 1 + type: array + items: + type: integer + description: Filter on possible debtor status. 1 = active, 2 = inactive - name: birthname in: query schema: @@ -80,7 +82,7 @@ paths: in: query schema: type: string - example: 1234 AB + example: 1234AB - name: addressCity in: query schema: @@ -90,7 +92,7 @@ paths: in: query schema: type: string - example: The Netherlands + example: NL - name: phoneNumber in: query schema: @@ -111,10 +113,10 @@ paths: schema: type: string example: My ovchipcard - - name: ovPayTokenNumber + - name: ovPasNumber in: query schema: - type: integer + type: string example: 0123456789 - name: ovPayTokenAlias in: query @@ -144,13 +146,17 @@ paths: customers: - customerProfileId: 1 customerNumber: 1000001 - debtorNumber: TEST001 + debtorNumber: DB100001 debtorStatus: debtorStatusId: 1 name: Inactive vascustomerNumber: CST005 customerPreference: - languageId: 1 + language: + languageId: 1 + name: Dutch + ietfCode: nl-NL + iso639Code: nl customerStatusInstances: - customerStatus: name: Active @@ -165,11 +171,11 @@ paths: person: birthname: Pieter surname: De valen - prefix: dhr - suffix: De + prefix: De + suffix: dhr dateOfBirth: "2002-10-29" - emailAddress: TEST@HTM.NL - address: + emailAddresses: TEST@HTM.NL + addresses: - addressId: 1 street: mystreet houseNumber: 1 @@ -192,22 +198,22 @@ paths: addressType: addressTypeId: 2 name: Office - phone: + phones: - phoneId: 1 number: "3112345678" - countryCode: NL + countryCode: "+31" phoneType: phoneTypeId: 1 name: Home isPreferred: true - phoneId: 2 number: "333225588" - countryCode: ES + countryCode: "+31" phoneType: phoneTypeId: 2 name: Work isPreferred: false - ovChipCard: + ovChipcards: - ovChipCardId: 1 chipCardNumber: 1234123412341234 validUntil: "2023-01-01" @@ -216,7 +222,7 @@ paths: chipCardNumber: 1234123412341235 validUntil: "2025-01-01" alias: alias - ovPayToken: + ovPayTokens: - ovPayTokenId: 126 tokenType: tokenTypeId: 1 @@ -260,7 +266,11 @@ paths: name: Inactive vascustomerNumber: CST005 customerPreference: - languageId: 1 + language: + languageId: 1 + name: Dutch + ietfCode: nl-NL + iso639Code: nl customerStatusInstances: - customerStatus: name: Active @@ -275,10 +285,10 @@ paths: person: birthname: Pieter surname: De valen - prefix: dhr - suffix: De + prefix: De + suffix: Dhr dateOfBirth: "2002-10-29" - emailAddress: TEST@HTM.NL + emailAddresses: TEST@HTM.NL address: - addressId: 1 street: mystreet @@ -302,22 +312,22 @@ paths: addressType: addressTypeId: 2 name: Office - phone: + phones: - phoneId: 1 number: "3112345678" - countryCode: NL + countryCode: "+31" phoneType: phoneTypeId: 1 name: Home isPreferred: true - phoneId: 2 number: "333225588" - countryCode: ES + countryCode: "+31" phoneType: phoneTypeId: 2 name: Work isPreferred: false - ovChipCard: + ovChipcards: - ovChipCardId: 1 chipCardNumber: 1234123412341234 validUntil: "2023-01-01" @@ -326,7 +336,7 @@ paths: chipCardNumber: 1234123412341235 validUntil: "2025-01-01" alias: alias - ovPayToken: + ovPayTokens: - ovPayTokenId: 126 tokenType: tokenTypeId: 2 @@ -390,279 +400,7 @@ paths: security: - default: [] x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /customers: - get: - tags: - - ABTCustomers - summary: Search for customer profile - description: "Search for a unique customer profile in the ABT database with query parameters " - parameters: - - name: customerProfileId - in: query - schema: - type: integer - example: 1 - - name: customerNumber - in: query - schema: - type: integer - example: 1000001 - - name: customerStatusId - in: query - schema: - type: integer - example: 1 - - name: debtorNumber - in: query - schema: - type: integer - example: 100001 - - name: debtorStatusId - in: query - schema: - type: integer - example: 1 - - name: birthname - in: query - schema: - type: string - example: John - - name: surname - in: query - schema: - type: string - example: Doe - - name: emailAddress - in: query - schema: - type: string - format: email - example: john.doe@mymailprovider.com - - name: dateOfBirth - in: query - schema: - type: string - format: date - example: "2000-01-01" - - name: addressStreet - in: query - schema: - type: string - example: Sesamestreet - - name: addressHouseNumber - in: query - schema: - type: integer - example: 1 - - name: addressHouseNumberSuffix - in: query - schema: - type: string - example: A - - name: addressPostalCode - in: query - schema: - type: string - example: 1234 AB - - name: addressCity - in: query - schema: - type: string - example: The Hague - - name: addressCountry - in: query - schema: - type: string - example: The Netherlands - - name: phoneNumber - in: query - schema: - type: string - example: "0123456789" - - name: phoneCountryCode - in: query - schema: - type: string - example: "+31" - - name: ovChipcardNumber - in: query - schema: - type: integer - example: 0123456789 - - name: ovChipcardAlias - in: query - schema: - type: string - example: My ovchipcard - - name: ovPayTokenNumber - in: query - schema: - type: integer - example: 0123456789 - - name: ovPayTokenAlias - in: query - schema: - type: string - example: My Ov Pay Token - - name: ovPayTokenXTat - in: query - schema: - type: string - example: 180d04e0-a721-447e-a1d9-b416937b43bc - - name: ovPayTokenXBot - in: query - schema: - type: string - example: e1307c73-676a-4d07-967b-6141276f7c7c - responses: - 200: - description: Successfully retrieved a customer profile - content: - application/json: - schema: - $ref: "#/components/schemas/getCustomerProfile" - examples: - fullCustomerProfile: - value: - customerProfileId: 1 - customerNumber: 1000001 - debtorNumber: TEST001 - debtorStatus: - debtorStatusId: 1 - name: Inactive - vascustomerNumber: CST005 - customerPreference: - languageId: 1 - customerStatusInstances: - - customerStatus: - name: Active - customerStatusId: 2 - fromInclusive: "2022-08-04 15:01:00.000" - toInclusive: "2022-08-05 15:01:00.000" - - customerStatus: - name: Blocked - customerStatusId: 3 - fromInclusive: "2022-08-05 15:01:00.000" - toInclusive: null - person: - birthname: Pieter - surname: De valen - prefix: dhr - suffix: De - dateOfBirth: "2002-10-29" - emailAddress: TEST@HTM.NL - address: - - addressId: 1 - street: mystreet - houseNumber: 1 - houseNumberSuffix: null - postalCode: 0000AA - city: Den Haag - country: NL - isPreferred: false - addressType: - addressTypeId: 2 - name: Office - - addressId: 2 - street: mystreet 33 - houseNumber: 1 - houseNumberSuffix: null - postalCode: 4455CA - city: Den BOSCH - country: NL - isPreferred: true - addressType: - addressTypeId: 2 - name: Office - phone: - - phoneId: 1 - number: "3112345678" - countryCode: NL - phoneType: - phoneTypeId: 1 - name: Home - isPreferred: true - - phoneId: 2 - number: "333225588" - countryCode: ES - phoneType: - phoneTypeId: 2 - name: Work - isPreferred: false - ovChipCard: - - ovChipCardId: 1 - chipCardNumber: 1234123412341234 - validUntil: "2023-01-01" - alias: alias - - ovChipCardId: 2 - chipCardNumber: 1234123412341235 - validUntil: "2025-01-01" - alias: alias - ovPayToken: - - ovPayTokenId: 126 - tokenType: - tokenTypeId: 1 - name: EMV - xTat: twioq73033 - xBot: hjihwqui27 - alias: alias - lastDigits: "5678" - ovpasNumber: null - tokenStatus: - tokenStatusId: 2 - name: Active - expirationDate: "2025-04-20T17:05:52.000+02:00" - replacedByTokenId: 1 - - ovPayTokenId: 127 - tokenType: - tokenTypeId: 2 - name: OV-pas physical - xTat: hhe2830283 - xBot: jdhd828033 - alias: alias - lastDigits: "5674" - ovpasNumber: OV34568 - tokenStatus: - tokenStatusId: 2 - name: Active - expirationDate: "2024-04-20T17:05:52.000+02:00" - replacedByTokenId: 2 - audit: - - auditTrailId: 1 - customerProfileId: 1 - action: insert - user: user - timestamp: "2023-10-20T17:05:52.000+02:00" - correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 - 400: - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/400Response" - 401: - description: Unauthorized - content: - application/json: - schema: - $ref: "#/components/schemas/401Response" - 404: - description: Not Found - content: - application/json: - schema: - $ref: "#/components/schemas/404Response" - 500: - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/500Response" - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited + x-throttling-tier: Unlimited post: tags: - ABTCustomers @@ -721,11 +459,11 @@ paths: addressTypeId: 2 phones: - number: "6123456789" - countryCode: "0031" + countryCode: "+31" phoneTypeId: 1 isPreferred: true - number: "7012345678" - countryCode: "0031" + countryCode: "+31" phoneTypeId: 2 isPreferred: false required: true @@ -1092,7 +830,7 @@ components: format: datetime correlationId: type: string - ovPayToken: + getOvPayTokens: type: object properties: ovPayTokenId: @@ -1115,7 +853,7 @@ components: type: string replacedByTokenId: type: integer - getOvChipCard: + getOvChipcards: type: object properties: ovChipCardId: @@ -1166,18 +904,18 @@ components: dateOfBirth: type: string format: date - emailAddress: + emailAddresses: type: string format: email - address: + addresses: type: array items: - $ref: "#/components/schemas/getAddress" - phone: + $ref: "#/components/schemas/getAddresses" + phones: type: array items: - $ref: "#/components/schemas/getPhone" - getAddress: + $ref: "#/components/schemas/getPhones" + getAddresses: type: object properties: addressId: @@ -1205,7 +943,7 @@ components: type: integer name: type: string - getPhone: + getPhones: type: object properties: phoneId: @@ -1226,11 +964,22 @@ components: name: type: string getCustomerPreference: + type: object + properties: + language: + $ref: "#/components/schemas/getCustomerLanguage" + getCustomerLanguage: type: object properties: languageId: type: integer - getCustomerProfileList: + name: + type: string + ietfCode: + type: string + iso639Code: + type: string + getCustomerProfiles: type: object properties: customers: @@ -1256,14 +1005,14 @@ components: $ref: "#/components/schemas/getCustomerStatusInstance" person: $ref: "#/components/schemas/getPerson" - ovChipCard: + ovChipcards: type: array items: - $ref: "#/components/schemas/getOvChipCard" - ovPayToken: + $ref: "#/components/schemas/getOvChipcards" + ovPayTokens: type: array items: - $ref: "#/components/schemas/ovPayToken" + $ref: "#/components/schemas/getOvPayTokens" audit: type: array items: -- 2.45.2 From fcc0740130fd0147fc6ee184eabcdd41cbe7fb92 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 6 Jan 2025 15:16:27 +0100 Subject: [PATCH 050/372] query params --- src/openapi/customers/customers-crud-v2.yaml | 50 +++++++++++++------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index f907126..8e3a05a 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -27,8 +27,10 @@ paths: - name: customerStatusId in: query schema: - type: integer - example: 1 + type: array + items: + type: integer + description: Filter on possible customer statuses. 1 = Inactive, 2 = Active, 3 = Blocked, 4 = Frozen, 5 = Cleaned - name: debtorNumber in: query schema: @@ -40,7 +42,7 @@ paths: type: array items: type: integer - description: Filter on possible debtor status. 1 = active, 2 = inactive + description: Filter on possible debtor statuses. 1 = Active, 2 = Inactive - name: birthname in: query schema: @@ -51,6 +53,22 @@ paths: schema: type: string example: Doe + - name: prefix + in: query + schema: + type: string + example: De + - name: suffix + in: query + schema: + type: string + example: dhr + - name: emailAddress + in: query + schema: + type: string + format: email + example: john.doe@mymailprovider.com - name: emailAddress in: query schema: @@ -227,8 +245,8 @@ paths: tokenType: tokenTypeId: 1 name: EMV - xTat: twioq73033 - xBot: hjihwqui27 + xTat: 0115b0df-db38-4702-8811-6f7de00db3ac + xBot: 71a88843-32b8-4d52-ac25-de2458c47775 alias: alias lastDigits: "5678" ovpasNumber: null @@ -241,8 +259,8 @@ paths: tokenType: tokenTypeId: 2 name: OV-pas physical - xTat: hhe2830283 - xBot: jdhd828033 + xTat: 0115b0df-db38-4702-8811-6f7de00db3ac + xBot: 71a88843-32b8-4d52-ac25-de2458c47775 alias: alias lastDigits: "5674" ovpasNumber: OV34568 @@ -251,7 +269,7 @@ paths: name: Active expirationDate: "2024-04-20T17:05:52.000+02:00" replacedByTokenId: 2 - audit: + auditTrails: - auditTrailId: 1 customerProfileId: 1 action: insert @@ -341,8 +359,8 @@ paths: tokenType: tokenTypeId: 2 name: OV-pas physical - xTat: twioq73033 - xBot: hjihwqui27 + xTat: 0115b0df-db38-4702-8811-6f7de00db3ac + xBot: 71a88843-32b8-4d52-ac25-de2458c47775 alias: alias lastDigits: "5678" ovpasNumber: OV34567 @@ -355,8 +373,8 @@ paths: tokenType: tokenTypeId: 2 name: OV-pas physical - xTat: hhe2830283 - xBot: jdhd828033 + xTat: 0115b0df-db38-4702-8811-6f7de00db3ac + xBot: 71a88843-32b8-4d52-ac25-de2458c47775 alias: alias lastDigits: "5674" ovpasNumber: OV34568 @@ -365,7 +383,7 @@ paths: name: active expirationDate: "2024-04-20T17:05:52.000+02:00" replacedByTokenId: 2 - audit: + auditTrails: - auditTrailId: 1 customerProfileId: 1 action: insert @@ -814,7 +832,7 @@ components: example: - /account/12345 - /account/67890 - audit: + getAuditTrails: type: object properties: auditTrailId: @@ -1013,10 +1031,10 @@ components: type: array items: $ref: "#/components/schemas/getOvPayTokens" - audit: + auditTrails: type: array items: - $ref: "#/components/schemas/audit" + $ref: "#/components/schemas/getAuditTrails" ovPayTokenEntity: type: object properties: -- 2.45.2 From 3994e0ea90048f1ea54151d908786c8a884bff0d Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 6 Jan 2025 15:19:00 +0100 Subject: [PATCH 051/372] semantic errors --- src/openapi/customers/customers-crud-v2.yaml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 8e3a05a..4ccb2d1 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -69,12 +69,6 @@ paths: type: string format: email example: john.doe@mymailprovider.com - - name: emailAddress - in: query - schema: - type: string - format: email - example: john.doe@mymailprovider.com - name: dateOfBirth in: query schema: @@ -157,7 +151,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/getCustomerProfileList" + $ref: "#/components/schemas/getCustomerProfiles" examples: fullCustomerProfile: value: -- 2.45.2 From 8a5aba4bf59846d7e68a7ceee6a14af7dcd3a3d0 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 6 Jan 2025 15:46:35 +0100 Subject: [PATCH 052/372] added additional query params --- src/openapi/customers/customers-crud-v2.yaml | 36 ++++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 4ccb2d1..17d78e6 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -62,7 +62,7 @@ paths: in: query schema: type: string - example: dhr + example: PhD - name: emailAddress in: query schema: @@ -145,6 +145,36 @@ paths: schema: type: string example: e1307c73-676a-4d07-967b-6141276f7c7c + - name: mandateReference + in: query + schema: + type: string + example: PAYT-1 + - name: iban + in: query + schema: + type: string + example: NL20INGB0001234567 + - name: bic + in: query + schema: + type: string + example: NL20INGB + - name: swift + in: query + schema: + type: string + example: NL20INGB + - name: ascription + in: query + schema: + type: string + example: j.jansen + - name: billingAlias + in: query + schema: + type: string + example: j.jansen responses: 200: description: Successfully retrieved customer profile(s) @@ -184,7 +214,7 @@ paths: birthname: Pieter surname: De valen prefix: De - suffix: dhr + suffix: PhD dateOfBirth: "2002-10-29" emailAddresses: TEST@HTM.NL addresses: @@ -298,7 +328,7 @@ paths: birthname: Pieter surname: De valen prefix: De - suffix: Dhr + suffix: PhD dateOfBirth: "2002-10-29" emailAddresses: TEST@HTM.NL address: -- 2.45.2 From f44cb89138788160e91138bb060089a9b141870f Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 6 Jan 2025 16:50:16 +0100 Subject: [PATCH 053/372] billing alias example updated --- src/openapi/customers/customers-crud-v2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 17d78e6..755d2c9 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -174,7 +174,7 @@ paths: in: query schema: type: string - example: j.jansen + example: Mijn ING bankrekening responses: 200: description: Successfully retrieved customer profile(s) -- 2.45.2 From 5fb74ece06a6ef78804f2eef6b3d4b0e40d6f06a Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 14 Jan 2025 17:07:01 +0100 Subject: [PATCH 054/372] Added refunds endpoint to ClaimsAPI. --- src/openapi/claims/claims-forms.yaml | 269 +++++++++++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 src/openapi/claims/claims-forms.yaml diff --git a/src/openapi/claims/claims-forms.yaml b/src/openapi/claims/claims-forms.yaml new file mode 100644 index 0000000..a9f43f2 --- /dev/null +++ b/src/openapi/claims/claims-forms.yaml @@ -0,0 +1,269 @@ +openapi: 3.0.1 +info: + title: ClaimsAPI + version: '1.0' +servers: + - url: https://services.acc.api.htm.nl/chipkaart/1.0 + - url: http://services.acc.api.htm.nl/chipkaart/1.0 +security: + - default: [] +tags: + - name: Claims +paths: + /claims: + post: + tags: + - Claims + summary: Create a claim + description: > + Create a claim by sending a JSON as specified in the schema. By + specifying the chipcardnumber under 'chipkaart', + + a claim for OV chipcard will be send to the OVC API. If no + chipcardnumber is specified under 'chipkaart', a claim for EMV is send + to mendix. + parameters: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/claimsEntity' + examples: + OVCK: + value: + aankomsthalte: '1' + instapdatum: '2024-03-06T15:20:44.549Z' + instaptijd: '2024-03-06T15:20:44.549Z' + ingecheckt: true + uitgecheckt: true + chipkaart: '1234123412341234' + afgeschrevenbedrag: 0 + vertrekhalte: string + korting: true + iban: '1234123412341234' + naam: string + emailadres: user@example.com + uitstaptijd: '2024-03-06T15:20:44.549Z' + verwachtbedrag: 0 + toelichting: string + lijn: '1' + vervoertype: '1' + serviceRefId: '1' + Totaalbedrag: 0 + EMV: + value: + aankomsthalte: '1' + instapdatum: '2024-03-06T15:20:44.549Z' + instaptijd: '2024-03-06T15:20:44.549Z' + ingecheckt: true + uitgecheckt: true + afgeschrevenbedrag: 0 + vertrekhalte: string + korting: true + iban: '1234123412341234' + naam: string + emailadres: user@example.com + uitstaptijd: '2024-03-06T15:20:44.549Z' + verwachtbedrag: 0 + toelichting: string + lijn: '1' + vervoertype: '1' + serviceRefId: '1' + Totaalbedrag: 0 + responses: + '200': + description: ok + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /refunds: + post: + tags: + - Claims + summary: Create a refund request + description: Create a refund request by sending a JSON as specified in the schema. Either a serviceReferenceId or ovPasNumber should be present in order to fulfill the refund request. + parameters: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/refundsEntity' + examples: + EMV: + value: + emailAddress: 'j.beek@htm.nl' + orderNumber: 'ORD1000046' + serviceReferenceId: '7703be98-57f4-4d02-887f-68348788f476' + amount: 2305 + iban: 'NL98INGB0003856625' + orderDate: '2025-01-13' + productName: 'HTM 20% korting' + OVpas: + value: + emailAddress: 'j.beek@htm.nl' + orderNumber: 'ORD1000046' + ovpasNumber: '63AW974' + iban: 'NL98INGB0003856625' + orderDate: '2025-01-13' + productName: 'HTM 20% korting' + responses: + '201': + description: Created + '401': + description: Unauthorized + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '500': + description: Internal Server Error + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited +components: + schemas: + claimsEntity: + required: + - Totaalbedrag + - aankomsthalte + - afgeschrevenbedrag + - emailadres + - instapdatum + - instaptijd + - korting + - lijn + - serviceRefId + - toelichting + - uitgecheckt + - vertrekhalte + - vervoertype + - verwachtbedrag + type: object + properties: + aankomsthalte: + type: string + instapdatum: + type: string + format: date-time + instaptijd: + type: string + format: date-time + ingecheckt: + type: boolean + uitgecheckt: + type: boolean + chipkaart: + type: string + afgeschrevenbedrag: + type: number + format: float + vertrekhalte: + type: string + korting: + type: boolean + iban: + type: string + description: String of length between 15 en 32 characters + example: '1234123412341234' + naam: + type: string + emailadres: + type: string + format: email + uitstaptijd: + type: string + format: date-time + verwachtbedrag: + type: number + format: float + toelichting: + type: string + lijn: + type: string + vervoertype: + type: string + serviceRefId: + type: string + Totaalbedrag: + type: number + format: float + refundsEntity: + required: + - emailAddress + - iban + type: object + properties: + emailAddress: + type: string + format: email + example: j.beek@htm.nl + orderNumber: + type: string + example: ORD1000046 + serviceReferenceId: + type: string + format: uuid + example: 7703be98-57f4-4d02-887f-68348788f476 + amount: + type: integer + example: 12305 + ovpasNumber: + type: string + example: 63AW974 + iban: + type: string + example: NL00RABO000001337 + orderDate: + type: string + format: date + example: 2025-01-13 + productName: + type: string + example: HTM 20% korting + 401Response: + type: object + properties: + code: + type: string + example: '900901' + type: + type: string + message: + type: string + example: Invalid Credentials + description: + type: string + example: >- + Invalid Credentials. Make sure you have provided the correct + security credentials + 500Response: + type: object + properties: + error: + type: string + example: error while connecting to backend + securitySchemes: + default: + type: oauth2 + flows: + implicit: + authorizationUrl: https://services.acc.api.htm.nl/authorize + scopes: {} -- 2.45.2 From b869b712a2dcdf40c461d8ec0b9cdcfe7611702a Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 16 Jan 2025 10:44:36 +0100 Subject: [PATCH 055/372] OVPAY-526 - Added external endpoints. --- src/openapi/fiko/fiko-crud.yaml | 57 ++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 94d7930..4a857e6 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -6,6 +6,44 @@ info: servers: - url: https://api.integratielaag.nl/v1 paths: + /fiko/transactionitems: + post: + summary: Add a finanicial transaction item. + description: Add a finanicial transaction item. + tags: + - External FIKO endpoints v2 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionItemsPostRequestBody" + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionItemsPostResponseBody" + /fiko/transactionitems/bulk: + post: + summary: Add one ore more finanicial transaction items in bulk. + description: Add one ore more finanicial transaction items in bulk. + tags: + - External FIKO endpoints v2 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionItemsBulkPostRequestBody" + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionItemsBulkPostResponseBody" /transactionitems: get: summary: Find transaction items. @@ -149,25 +187,6 @@ paths: application/json: schema: $ref: "#/components/schemas/TransactionItemsPostResponseBody" - /transactionitems/bulk: - post: - summary: Add one ore more finanicial transaction items in bulk. - description: Add one ore more finanicial transaction items in bulk. - tags: - - Transactions v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TransactionItemsBulkPostRequestBody" - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/TransactionItemsBulkPostResponseBody" /transactionitems/{transactionItemId}: parameters: - in: path -- 2.45.2 From 04d251a3e28a3824eb4ef151e5ae69a6982261eb Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 16 Jan 2025 11:25:01 +0100 Subject: [PATCH 056/372] Typo in serviceReferenceId example --- src/openapi/claims/claims-forms.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/openapi/claims/claims-forms.yaml b/src/openapi/claims/claims-forms.yaml index a9f43f2..f2017dc 100644 --- a/src/openapi/claims/claims-forms.yaml +++ b/src/openapi/claims/claims-forms.yaml @@ -106,7 +106,7 @@ paths: value: emailAddress: 'j.beek@htm.nl' orderNumber: 'ORD1000046' - serviceReferenceId: '7703be98-57f4-4d02-887f-68348788f476' + serviceReferenceId: 'NLOVA5BCD124H3Z21X' amount: 2305 iban: 'NL98INGB0003856625' orderDate: '2025-01-13' @@ -220,8 +220,7 @@ components: example: ORD1000046 serviceReferenceId: type: string - format: uuid - example: 7703be98-57f4-4d02-887f-68348788f476 + example: NLOVA5BCD124H3Z21X amount: type: integer example: 12305 -- 2.45.2 From 8f8edfacb01c7702256b0a17fc46b44da663f348 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 16 Jan 2025 13:08:06 +0100 Subject: [PATCH 057/372] OVPAY-526 - Add single transaction is deprecated. --- src/openapi/fiko/fiko-crud.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 4a857e6..46a74ce 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -8,8 +8,9 @@ servers: paths: /fiko/transactionitems: post: - summary: Add a finanicial transaction item. - description: Add a finanicial transaction item. + summary: DEPRECATED. Add a finanicial transaction item. + description: DEPRECATED. This API is deprecated. Use bulk-insert instead. + deprecated: true tags: - External FIKO endpoints v2 requestBody: -- 2.45.2 From 997d3e1d0ec1bd55c46af0381bf841fe4c88ff5d Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 20 Jan 2025 11:09:26 +0100 Subject: [PATCH 058/372] OVPAY-1352 - Added InvoiceAccountingStatus. --- src/openapi/contracts/contracts-crud.yaml | 192 +++++++++++++++++++++- 1 file changed, 190 insertions(+), 2 deletions(-) diff --git a/src/openapi/contracts/contracts-crud.yaml b/src/openapi/contracts/contracts-crud.yaml index 0c3e90e..b1e73b8 100644 --- a/src/openapi/contracts/contracts-crud.yaml +++ b/src/openapi/contracts/contracts-crud.yaml @@ -213,6 +213,19 @@ paths: "updated": "2024-06-02 15:01:00.000", "state": "invoice_created", "isCredit": false, + "invoiceAccountingStatuses": + [ + { + "invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f", + "accountingStatus": + { + "accountingStatusId": 1, + "name": "open", + }, + "createdOn": "2024-06-02 15:01:00.000", + "description": null, + }, + ], }, { "contractInvoiceId": "1c345237-4d84-47f0-93c2-7b94338e3355", @@ -222,6 +235,19 @@ paths: "updated": "2024-07-02 15:01:00.000", "state": "invoice_created", "isCredit": false, + "invoiceAccountingStatuses": + [ + { + "invoiceAccountingStatusId": "1e95b854-0094-42a4-9268-c16353fb72a8", + "accountingStatus": + { + "accountingStatusId": 1, + "name": "open", + }, + "createdOn": "2024-07-02 15:01:00.000", + "description": null, + }, + ], }, ], "contractVersions": @@ -271,6 +297,19 @@ paths: "updated": "2024-06-02 15:01:00.000", "state": "invoice_created", "isCredit": false, + "invoiceAccountingStatuses": + [ + { + "invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f", + "accountingStatus": + { + "accountingStatusId": 1, + "name": "open", + }, + "createdOn": "2024-06-02 15:01:00.000", + "description": null, + }, + ], }, { "contractInvoiceId": "1c345237-4d84-47f0-93c2-7b94338e3355", @@ -280,6 +319,19 @@ paths: "updated": "2024-07-02 15:01:00.000", "state": "invoice_created", "isCredit": false, + "invoiceAccountingStatuses": + [ + { + "invoiceAccountingStatusId": "1e95b854-0094-42a4-9268-c16353fb72a8", + "accountingStatus": + { + "accountingStatusId": 1, + "name": "open", + }, + "createdOn": "2024-07-02 15:01:00.000", + "description": null, + }, + ], }, ], "contractVersions": @@ -400,6 +452,16 @@ paths: "state": "invoice_created", "data": "{json}", "isCredit": false, + "invoiceAccountingStatuses": + [ + { + "invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f", + "accountingStatus": + { "accountingStatusId": 1, "name": "open" }, + "createdOn": "2024-06-02 15:01:00.000", + "description": null, + }, + ], }, ], }, @@ -459,7 +521,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/ContractVersion" + $ref: "#/components/schemas/InvoiceAccountingStatus" example: { "contractVersion": @@ -567,6 +629,16 @@ paths: "state": "invoice_sent", "data": "{json}", "isCredit": false, + "invoiceAccountingStatuses": + [ + { + "invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f", + "accountingStatus": + { "accountingStatusId": 1, "name": "open" }, + "createdOn": "2024-06-02 15:01:00.000", + "description": null, + }, + ], }, { "contractInvoiceId": "dadff658-4ff5-4eb8-b516-492f1f6c6245", @@ -577,6 +649,16 @@ paths: "state": "invoice_created", "data": "{json}", "isCredit": false, + "invoiceAccountingStatuses": + [ + { + "invoiceAccountingStatusId": "84af0f01-0416-4860-851a-a0d4b3cf674a", + "accountingStatus": + { "accountingStatusId": 1, "name": "open" }, + "createdOn": "2024-06-02 15:01:00.000", + "description": null, + }, + ], }, ], } @@ -601,6 +683,15 @@ paths: "state": "invoice_created", "data": "{json}", "isCredit": false, + "invoiceAccountingStatuses": + [ + { + "invoiceAccountingStatusId": 1, + "createdOn", + "2024-07-02 15:01:00.000", + "description": null, + }, + ], }, } responses: @@ -713,6 +804,16 @@ paths: "state": "invoice_created", "data": "{json}", "isCredit": false, + "invoiceAccountingStatuses": + [ + { + "invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f", + "accountingStatus": + { "accountingStatusId": 1, "name": "open" }, + "createdOn": "2024-06-02 15:01:00.000", + "description": null, + }, + ], }, { "contractId": "a7452e22-3894-40cc-87d6-869370a92277", @@ -724,6 +825,16 @@ paths: "state": "invoice_created", "data": "{json}", "isCredit": false, + "invoiceAccountingStatuses": + [ + { + "invoiceAccountingStatusId": "84af0f01-0416-4860-851a-a0d4b3cf674a", + "accountingStatus": + { "accountingStatusId": 1, "name": "open" }, + "createdOn": "2024-08-02 15:01:00.000", + "description": null, + }, + ], }, ], } @@ -770,6 +881,43 @@ paths: "contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f", }, } + /contractinvoices/{contractInvoiceId}/invoiceaccountingstatuses: + parameters: + - in: path + name: contractInvoiceId + schema: + type: string + format: uuid + example: d1dd439b-6072-4b97-89c9-724268865b93 + required: true + description: The id of the ContractInvoice, formatted as UUID. + post: + summary: Add a new invoice accounting status to a contract invoice. + description: Add a new invoice accounting status to a contract invoice. + tags: + - ContractInvoice + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ContractInvoice" + example: + { + "accountingStatusId": 1, + "createdOn": "2024-07-02 15:01:00.000", + "description": null, + } + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/ContractInvoice" + example: + { + "invoiceAccountingStatusId": "a6836364-4812-4960-9226-69deb2e2b903", + } /contracts/{contractId}/contractactions: parameters: - in: path @@ -1060,6 +1208,37 @@ components: isCredit: type: boolean example: false + InvoiceAccountingStatus: + type: object + properties: + invoiceAccountingStatusId: + type: string + format: uuid + example: 6b6f0f5e-5d3f-4a6d-8e7d-6a7d0f9e6c5b + contractInvoiceId: + type: string + format: uuid + example: 8699d72a-cf4d-4e6b-9e9c-549d837ca51f + accountingStatus: + type: object + $ref: "#/components/schemas/AccountingStatus" + createdOn: + type: string + format: date-time + example: 2024-07-02 15:01:00.000 + description: + type: string + example: Open + AccountingStatus: + type: object + properties: + accountingStatusId: + type: integer + example: 1 + name: + type: string + enum: [open, sent, received, rejected] + example: open ContractStatus: type: object properties: @@ -1068,7 +1247,16 @@ components: example: 2 name: type: string - enum: [new, active, suspended, cancelled, terminated, pending cancellation, pending termination] + enum: + [ + new, + active, + suspended, + cancelled, + terminated, + pending cancellation, + pending termination, + ] example: active ActionType: type: object -- 2.45.2 From 2c07cc192b879ac1715c8801f812159e68274e21 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Fri, 24 Jan 2025 13:39:50 +0100 Subject: [PATCH 059/372] SE Products List endpoint spec --- src/openapi/products/SE-products.yaml | 1676 +++++++++++++++++++++++++ 1 file changed, 1676 insertions(+) create mode 100644 src/openapi/products/SE-products.yaml diff --git a/src/openapi/products/SE-products.yaml b/src/openapi/products/SE-products.yaml new file mode 100644 index 0000000..c76fc51 --- /dev/null +++ b/src/openapi/products/SE-products.yaml @@ -0,0 +1,1676 @@ +openapi: 3.0.1 +info: + title: Service Engine APIs for Products + description: |- + Service Engine APIs for HTM products. These are NOT the CRUD APIs to access raw data in the database. + To be used by touchpoints to get information about HTM products they are allowed to see and/or sell. + version: '1.0' +servers: + - url: https://api.integratielaag.nl/abt/servcieengine/x.x +tags: + - name: ServiceEngine Products + description: |- + To be used by touchpoints to get information about HTM products they are allowed to see and/or sell. +paths: + /products: + get: + tags: + - ServiceEngine Products + summary: Get a list of all HTM products that a touchpoint is allowed to see and/or sell + description: |- + Get a list of all HTM products that refers to a given parentProductId (or without parent, if not specified), + and that the calling touchpoint is allowed to see and/or sell. \ + Only a few details are returned per product - use the `GET /products/{productId}` endpoint + to get more details. \ + In the examples, it can be seen that only products that have active sellingPeriods for touchpoints within the same + retailer as the calling touchpoint are returned. \ + Touchpoint 1 and 2 belong to retailer 1; touchpoint 3 and 4 belong to retailer 2. + parameters: + - name: parentProductId + in: query + required: false + description: |- + Only return products that refer to the given parentProductId. \ + Returns parent-products (i.e. products with parentProductId = null) if left empty. + schema: + type: integer + example: 1 + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ProductPayloadListResponse' + examples: + getListNoProducts: + summary: No products / Empty list + description: No products + value: + { + "Entries": [], + "href": null + } + getListOneProductTouchpointId3: + summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 3) + description: Only products that have active sellingPeriods for touchpoint 3 are returned + value: + { + "Entries": [ + { + "productId": 2, + "productCode": "312AB-WL", + "productName": "HTM dagkaart", + "productDescription": "Reis een dag met het openbaar vervoer bij HTM", + "productCategory": { + "productCategoryId": 6, + "isTravelProduct": false, + "name": "Barcode" + }, + "tokenTypes": null, + "sellableTouchPointIds": [ + 3, + 4 + ], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://services.acc.api.htm.nl/abt/serviceengine/x.x/products/2", + "method": "GET" + } + } + } + ] + } + getListMultipleProductsWithPaginationTuchpointId1: + summary: List containing multiple products with pagination (called by touchpointId 3) + description: Only products that have active SellingPeriods for touchpoint 3 are returned + value: + { + "Entries": [ + { + "productId": 2, + "productCode": "312AB-WL", + "productName": "HTM dagkaart", + "productDescription": "Reis een dag met het openbaar vervoer bij HTM", + "productCategory": { + "productCategoryId": 6, + "isTravelProduct": false, + "name": "Barcode" + }, + "tokenTypes": null, + "sellableTouchPointIds": [ + 3, + 4 + ], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://services.acc.api.htm.nl/abt/serviceengine/x.x/products/2", + "method": "GET" + } + } + }, + { + "productId": 4, + "productCode": "30002-ML", + "productName": "HTM 40% korting", + "productDescription": "Reis een maand lang met 40% korting!", + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "sellableTouchPointIds": [ + 3, + 4 + ], + "amountInclTax": 800, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://services.acc.api.htm.nl/abt/serviceengine/x.x/products/4", + "method": "GET" + } + } + } + ] + } + '400': + description: '400' + content: + application/json: + schema: + $ref: '#/components/schemas/400Response' + '401': + description: '401' + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '404': + description: '404' + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: '500' + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' + /products/{productId}: + get: + tags: + - ServiceEngine Products + summary: Get full details of a single HTM product (including all child products), specified by the productId + description: |- + Get full details of a single HTM product (including all child products), specified by the productId. \ + Touchpoints only receive information that is allowed to be seen by the touchpointId of the \ + consumer; i.e. only currently active selling periods and prices for the calling touchpoint are returned. + parameters: + - name: productId + in: path + required: true + style: simple + description: Id of the product to get details for + schema: + type: integer + example: 1 + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ProductPayloadResponse' + examples: + WIP touchpoint-filtered response: + summary: WIP touchpoint-filtered response + value: + { + "WIP": null + } +components: + schemas: + TaxMetadataResponse: + type: object + required: + - taxMetadataId + - taxCode + - taxPercentageAmount + properties: + taxMetadataId: + type: string + format: uuid + example: 501B17EF-36C4-4039-B92C-6517969B464E + taxCode: + type: string + example: V09 + taxPercentageAmount: + type: integer + example: 21 + description: + type: string + example: BTW VERKOOP LAAG 9% + ProductTranslationResponse: + type: object + required: + - language + properties: + language: + type: string + example: en + name: + type: string + example: HTM F&F 90% korting + description: + type: string + example: >- + Travel with 90% discount for a week during the first HTM F&F OVpay + pilot! + SellingPriceResponse: + type: object + required: + - sellingPriceId + - amountExclTax + - taxMetadata + - amountInclTax + - fromInclusive + - toInclusive + - internalPrice + properties: + sellingPriceId: + type: integer + example: 1 + amountExclTax: + type: integer + example: 750 + taxMetadata: + $ref: '#/components/schemas/TaxMetadataResponse' + amountInclTax: + type: integer + example: 908 + fromInclusive: + type: string + format: date-time-offset + example: '2022-03-01T00:00:00.000+00:00' + toInclusive: + type: string + format: date-time-offset + example: '2022-06-01T00:00:00.000+00:00' + internalPrice: + type: number + example: 908.1234 + PurchasePriceResponse: + type: object + required: + - purchasePriceId + - amountExclTax + - taxMetadata + - amountInclTax + - fromInclusive + - toInclusive + properties: + purchasePriceId: + type: integer + example: 1 + amountExclTax: + type: integer + example: 750 + taxMetadata: + $ref: '#/components/schemas/TaxMetadataResponse' + amountInclTax: + type: integer + example: 908 + fromInclusive: + type: string + format: date-time-offset + example: '2022-03-01T00:00:00.000+00:00' + toInclusive: + type: string + format: date-time-offset + example: '2022-06-01T00:00:00.000+00:00' + SalesTouchpointResponse: + type: object + required: + - salesTouchpointId + - name + - isActive + - retailer + properties: + salesTouchpointId: + type: integer + example: 1 + name: + type: string + example: HTM App + isActive: + type: boolean + example: true + retailer: + type: object + required: + - retailerId + - name + properties: + retailerId: + type: integer + example: 1001 + name: + type: string + example: HTM + street: + type: string + example: Kon. Julianaplein + number: + type: string + example: '10' + numberAddition: + type: string + example: a + postalCode: + type: string + example: 2595 AA + city: + type: string + example: Den Haag + country: + type: string + example: Nederland + emailAddress: + type: string + format: email + example: info@htm.nl + phoneNumber: + type: string + example: '09004864636' + taxId: + type: string + example: '09004864636' + imageReference: + type: string + example: https://htm.azure.net/abt/retailers/htm.svg + ProductPayloadListResponse: + type: object + required: + - Entries + properties: + Entries: + type: array + items: + type: object + required: + - productId + properties: + productId: + type: integer + example: 1 + productCode: + type: string + example: 30901-WL + productName: + type: string + example: HTM pilot 90% korting + productDescription: + type: string + example: Reis met 90% korting gedurende de eerste F&F pilot! + productCategory: + type: object + required: + - productCategoryId + - isTravelProduct + - name + properties: + productCategoryId: + type: integer + example: 1 + isTravelProduct: + type: boolean + example: true + name: + type: string + example: Kortingsabonnement + tokenTypes: + type: array + items: + type: object + required: + - tokenTypeId + - name + properties: + tokenTypeId: + type: integer + example: 1 + name: + type: string + example: EMV + sellableTouchPointIds: + type: array + items: + type: integer + example: 3 + amountInclTax: + type: number + example: 100 + imageReference: + type: string + example: https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg + productPageUrl: + type: string + format: uri + example: https://www.htm.nl/nog-onbekende-product-pagina + _links: + type: object + properties: + get_details: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/serviceengine/x.x/products/1 + method: + type: string + example: GET + + ProductPayloadResponse: + type: object + required: + - productId + - productOwner + - isRenewable + - isSellableAtHtm + - needsSolvencyCheckConsumer + - needsSolvencyCheckBusiness + properties: + productId: + type: integer + example: 1 + parentProductId: + type: integer + example: 1 + productCode: + type: string + example: 30901-WL + gboPackageTemplateId: + type: string + example: '30901' + tapConnectProductCode: + type: string + example: 1234AB + productGroupMetadata: + type: object + required: + - productGroupMetadataId + - productGroupCode + - department + - costCenter + - costType + - description + - documentCode + - user + - timestampUpdated + - validFrom + properties: + productGroupMetadataId: + type: string + format: uuid + example: 501B17EF-36C4-4039-B92C-6517969B464E + productGroupCode: + type: string + example: TBD + department: + type: string + example: TBD + costCenter: + type: string + example: TBD + costType: + type: string + example: TBD + description: + type: string + example: TBD + documentCode: + type: string + example: TBD + user: + type: string + example: TBD + timestampUpdated: + type: string + format: date-time-offset + example: '2024-09-03T10:01:34.000+00:00' + validFrom: + type: string + format: date-time-offset + example: '2024-09-03T10:01:34.000+00:00' + validUntil: + type: string + format: date-time-offset + example: '2024-09-03T10:01:34.000+00:00' + productName: + type: string + example: HTM pilot 90% korting + productDescription: + type: string + example: Reis met 90% korting gedurende de eerste F&F pilot! + validityPeriod: + type: object + required: + - validityPeriodId + - fromInclusive + - toInclusive + properties: + validityPeriodId: + type: integer + example: 1 + fromInclusive: + type: string + format: date-time-offset + example: '2024-09-03T10:01:34.000+00:00' + toInclusive: + type: string + format: date-time-offset + example: '2024-09-03T23:59:59.999+00:00' + productTranslations: + type: array + items: + $ref: '#/components/schemas/ProductTranslationResponse' + productOwner: + type: object + required: + - productOwnerId + - name + properties: + productOwnerId: + type: integer + example: 1 + name: + type: string + example: John Doe + organization: + type: string + example: HTM + marketSegmentse: + type: array + items: + type: object + required: + - marketSegmentId + - name + properties: + marketSegmentId: + type: integer + example: 1 + name: + type: string + example: B2C + customerSegments: + type: array + items: + type: object + required: + - customerSegmentId + - name + properties: + customerSegmentId: + type: integer + example: 1 + name: + type: string + example: Kind (4-11) + productCategory: + type: object + required: + - productCategoryId + - name + - isTravelProduct + properties: + productCategoryId: + type: integer + example: 1 + name: + type: string + example: Kortingsabonnement + isTravelProduct: + type: boolean + example: true + requiredCustomerLevel: + type: object + required: + - requiredCustomerLevelId + - name + properties: + requiredCustomerLevelId: + type: integer + example: 1 + name: + type: string + example: anonymous + requiredProducts: + type: array + items: + type: object + required: + - requiredProductId + - productName + properties: + requiredProductId: + type: integer + example: 2 + productName: + type: string + example: Product name + description: + type: string + description: Reason why the product is required + example: Description + incompatibleProducts: + type: array + items: + type: object + required: + - incompatibleProductId + - productName + properties: + incompatibleProductId: + type: integer + example: 4 + productName: + type: string + example: Product name + description: + type: string + description: >- + Reason why the product is incompatible with the selected + product + example: Description + mandatoryCustomerDataItems: + type: array + items: + type: object + required: + - mandatoryCustomerDataItemId + - customerDataItem + properties: + mandatoryCustomerDataItemId: + type: integer + example: 3 + customerDataItem: + type: string + example: dateOfBirth + requiredGboPersonalAttributes: + type: array + description: >- + List of required GBO personal attributes (PAD) - should not be + user-editable, but automatically populated by PMT backend, based on + the selected gboPackageTemplateId (if any) + items: + type: object + required: + - requiredGboPersonalAttributeId + - name + properties: + requiredGboPersonalAttributeId: + type: integer + example: 2 + name: + type: string + example: BIRTHDATE + tokenTypes: + type: array + items: + type: object + required: + - tokenTypeId + - name + properties: + tokenTypeId: + type: integer + example: 1 + name: + type: string + example: EMV + paymentMoment: + type: object + required: + - paymentMomentId + - name + properties: + paymentMomentId: + type: integer + example: 1 + name: + type: string + example: prepaid + serviceOptions: + type: array + items: + type: object + required: + - serviceOptionId + - action + properties: + serviceOptionId: + type: integer + example: 1 + action: + type: string + example: cancellableTermAhead + description: + type: string + example: Per termijn vooruit opzegbaar + validityDuration: + type: string + format: duration + example: P1M + maxStartInFutureDuration: + type: string + format: duration + example: P6W + isRenewable: + type: boolean + example: true + sendInvoice: + type: boolean + example: false + imageReference: + type: string + format: uri + example: https://htm.azure.net/abt/products/product_1.svg + productPageUrl: + type: string + format: uri + example: https://www.htm.nl/nog-onbekende-product-pagina + termsUrl: + type: string + format: uri + example: https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina + isSellableAtHtm: + type: boolean + example: true + needsSolvencyCheckConsumer: + type: boolean + example: false + needsSolvencyCheckBusiness: + type: boolean + example: false + sellingPeriods: + type: array + items: + type: object + required: + - sellingPeriodId + - fromInclusive + - toInclusive + - salesTouchpoint + properties: + sellingPeriodId: + type: integer + example: 1 + fromInclusive: + type: string + format: date-time-offset + example: '2022-03-01T00:00:00.000+00:00' + toInclusive: + type: string + format: date-time-offset + example: '2022-06-01T00:00:00.000+00:00' + salesTouchpoint: + $ref: '#/components/schemas/SalesTouchpointResponse' + forbiddenPaymentMethods: + type: array + items: + type: object + required: + - forbiddenPaymentMethodId + - name + properties: + forbiddenPaymentMethodId: + type: integer + example: 1 + name: + type: string + example: Credit Card + issuer: + type: string + example: American Express + sellingPrices: + type: array + items: + $ref: '#/components/schemas/SellingPriceResponse' + purchasePrices: + type: array + items: + $ref: '#/components/schemas/PurchasePriceResponse' + auditTrail: + type: array + items: + type: object + required: + - auditTrailId + - action + - user + - timestamp + properties: + auditTrailId: + type: integer + example: 1 + action: + type: string + example: insert + user: + type: string + example: username + timestamp: + type: string + format: date-time-offset + example: '2024-09-03T10:01:34.000+00:00' + CreateProductRequest: + required: + - productOwnerId + - isRenewable + - isSellableAtHtm + - needsSolvencyCheckConsumer + - needsSolvencyCheckBusiness + type: object + properties: + parentProductId: + type: integer + description: The ID of the parent product (if any) + example: 1 + productCode: + type: string + description: The HTM-internal product code + example: 30901-WL + gboPackageTemplateId: + type: string + description: >- + The ID of the GBO SalesPackage that should be instantiated after + buying this product + example: '30901' + tapConnectProductCode: + type: string + description: >- + The productCode of the TapConnect product that should be issued + after buying this product + example: 1234AB + productGroupMetadataId: + type: string + format: uuid + description: The ID of the productGroupMetadata for administration in U4F + example: 501B17EF-36C4-4039-B92C-6517969B464E + productName: + type: string + description: The name of the product + example: Test product name + productDescription: + type: string + description: The description of the product + example: Test product description + validityPeriod: + required: + - fromInclusive + - toInclusive + type: object + description: The validity period of the product + properties: + fromInclusive: + type: string + format: date-time + description: >- + LocalDateTime (without offset) - The start of the validity + period + example: '2022-03-01T00:00:00.000' + toInclusive: + type: string + format: date-time + description: LocalDateTime (without offset) - The end of the validity period + example: '2022-06-01T00:00:00.000' + productTranslations: + type: array + description: Translations of the product name and description + items: + type: object + required: + - language + - name + - description + properties: + language: + type: string + example: en + name: + type: string + example: HTM F&F 90% korting + description: + type: string + example: >- + Travel with 90% discount for a week during the first HTM F&F + OVpay pilot! + productOwnerId: + type: integer + description: The ID of the owner of the product + example: 1 + marketSegmentIds: + type: array + description: The IDs of the market segments that the product is targeted towards + items: + type: integer + example: 1 + customerSegmentIds: + type: array + description: >- + The IDs of the customer segments that the product is targeted + towards + items: + type: integer + example: 1 + productCategoryId: + type: integer + description: The ID of the category the product belongs to + example: 1 + requiredCustomerLevelId: + type: integer + description: >- + The ID of the required customer level to be allowed to purchase the + product + requiredProducts: + type: array + required: + - requiredProductId + description: >- + The IDs of products that should already be owned by the customer + (for travel products, the validity of the given productIds should + fully overlap on the customer's travel medium) + items: + type: object + properties: + requiredProductId: + type: integer + example: 1 + description: + type: string + description: Description of why the product is required + example: Benodigd basisproduct + incompatibleProducts: + type: array + required: + - incompatibleProductId + description: >- + The IDs of products that can not be active at the same time as this + product (for travel products, none of the listed productIds should + have overlapping validity with this product on the customer's travel + medium) + items: + type: object + properties: + incompatibleProductId: + type: integer + example: 1 + description: + type: string + description: Description of why the product is incompatible + example: Kan niet combineren met zichzelf + mandatoryCustomerDataItemIds: + type: array + description: >- + The IDs of the customer data items that should be filled in by the + customer + items: + type: integer + example: 1 + requiredGboPersonalAttributeIds: + type: array + description: >- + GBO specific; the IDs of the GBO Personal Attribute Data (PAD) + elements that should be present (or filled during the order flow) on + the customer's chosen travel medium. This attribute should not be + user-editable, but only be filled by PMT, based on the chosen + gboPackageTemplateId! + items: + type: integer + example: 1 + tokenTypeIds: + type: array + description: The IDs of the token types that the product can be instantiated on + items: + type: integer + example: 1 + paymentMomentId: + type: integer + description: The ID of the payment moment for the product + example: 1 + serviceOptionIds: + type: array + description: The IDs of the service options that are available for this product + items: + type: integer + example: 1 + validityDuration: + type: string + format: duration + description: >- + The validity duration of the product. Should only contain one single + unit of duration (D, W, M, Y) + example: P7D + maxStartInFutureDuration: + type: string + format: duration + description: >- + The maximum amount of time in the future allowed for the start of + the product validity. Should only contain one single unit of + duration (D, W, M, Y) + example: P6W + isRenewable: + type: boolean + description: Indicates if the product is renewable + example: false + sendInvoice: + type: boolean + description: >- + Indicates if an invoice should be sent to the customer after + ordering this product + example: false + imageReference: + type: string + format: uri + description: A reference/URL to the image of the product + example: https://www.htm.nl/nog-onbekende-productafbeelding + productPageUrl: + type: string + format: uri + description: >- + The URL of the product page, to be used by touchpoints which are not + allowed to sell the product, to redirect the customer. If the + product is sold via multiple touchpoints, this URL should point to + the preferred touchpoint for sales + example: https://www.htm.nl/nog-onbekende-productpagina + termsUrl: + type: string + format: uri + description: >- + The URL for the webpage or document containing terms for this + product + example: https://www.htm.nl/nog-onbekende-productvoorwaarden + isSellableAtHtm: + type: boolean + description: >- + Indicates if the product is sellable at HTM. If false, no + sellingPrices/Periods should be defined - this product may only be + used for tracking/reporting purposed, or internal use + needsSolvencyCheckConsumer: + type: boolean + description: >- + Indicates if a solvency check is required for consumers purchasing + the product + needsSolvencyCheckBusiness: + type: boolean + description: >- + Indicates if a solvency check is required for businesses purchasing + the product + sellingPeriods: + type: array + description: >- + The sellingPeriods of the product. Can contain multiple periods for + the same or different touchpoints, as long as there is no overlap + for the same touchpoint + items: + type: object + required: + - fromInclusive + - toInclusive + - salesTouchpointId + properties: + fromInclusive: + type: string + format: date-time + description: LocalDateTime (without offset) - The start date of the period + example: '2020-01-01T00:00:00.000' + toInclusive: + type: string + format: date-time + description: LocalDateTime (without offset) - The end date of the period + example: '2020-01-01T00:00:00.000' + salesTouchpointId: + type: integer + description: The ID of the touchpoint this period applies to + example: 1 + forbiddenPaymentMethodIds: + type: array + description: >- + The IDs of the payment methods that are not allowed to be used + for this touchpoint and period + items: + type: integer + example: 1 + sellingPrices: + type: array + description: >- + The sellingPrices of this product for the touchpoint defined + in this sellingPeriod. Can contain multiple prices, as long as + there is no overlap in validity + items: + type: object + required: + - amountExclTax + - taxMetadataId + - amountInclTax + - fromInclusive + - toInclusive + - internalPrice + properties: + amountExclTax: + type: integer + example: 750 + taxMetadataId: + type: string + format: uuid + example: 501B17EF-36C4-4039-B92C-6517969B464E + amountInclTax: + type: integer + example: 908 + fromInclusive: + type: string + format: date-time + description: >- + LocalDateTime (without offset) - The start date of the + price period + example: '2022-03-01T00:00:00.000' + toInclusive: + type: string + format: date-time + description: >- + LocalDateTime (without offset) - The end date of the + price period + example: '2022-06-01T00:00:00.000' + internalPrice: + type: number + example: 908.1234 + purchasePrices: + type: array + description: >- + The purchasePrices of the product. Can contain multiple prices, as + long as there is no overlap in validity + items: + type: object + required: + - amountExclTax + - taxMetadataId + - amountInclTax + - fromInclusive + - toInclusive + properties: + amountExclTax: + type: integer + example: 750 + taxMetadataId: + type: string + format: uuid + example: 501B17EF-36C4-4039-B92C-6517969B464E + amountInclTax: + type: integer + example: 908 + fromInclusive: + type: string + format: date-time + description: >- + LocalDateTime (without offset) - The start date of the price + period + example: '2022-03-01T00:00:00.000' + toInclusive: + type: string + format: date-time + description: >- + LocalDateTime (without offset) - The end date of the price + period + example: '2022-06-01T00:00:00.000' + UpdateProductRequest: + required: + - productOwnerId + - isRenewable + - isSellableAtHtm + - needsSolvencyCheckConsumer + - needsSolvencyCheckBusiness + type: object + properties: + parentProductId: + type: integer + description: The ID of the parent product (if any) + example: 1 + productCode: + type: string + description: The HTM-internal product code + example: 30901-WL + gboPackageTemplateId: + type: string + description: >- + The ID of the GBO SalesPackage that should be instantiated after + buying this product + example: '30901' + tapConnectProductCode: + type: string + description: >- + The productCode of the TapConnect product that should be issued + after buying this product + example: 1234AB + productGroupMetadataId: + type: string + format: uuid + description: The ID of the productGroupMetadata for administration in U4F + example: 501B17EF-36C4-4039-B92C-6517969B464E + productName: + type: string + description: The name of the product + example: Test product name + productDescription: + type: string + description: The description of the product + example: Test product description + validityPeriod: + required: + - fromInclusive + - toInclusive + type: object + description: The validity period of the product + properties: + validityPeriodId: + type: integer + description: >- + Including a validityPeriodId will update the existing + validityPeriod for this product - if omitted, a new + validityPeriod will be created + example: 1 + fromInclusive: + type: string + format: date-time + description: >- + LocalDateTime (without offset) - The start of the validity + period + example: '2022-03-01T00:00:00.000' + toInclusive: + type: string + format: date-time + description: LocalDateTime (without offset) - The end of the validity period + example: '2022-06-01T00:00:00.000' + productTranslations: + type: array + description: Translations of the product name and description + items: + type: object + required: + - language + - name + - description + properties: + language: + type: string + example: en + name: + type: string + example: HTM F&F 90% korting + description: + type: string + example: >- + Travel with 90% discount for a week during the first HTM F&F + OVpay pilot! + productOwnerId: + type: integer + description: The ID of the owner of the product + example: 1 + marketSegmentIds: + type: array + description: The IDs of the market segments that the product is targeted towards + items: + type: integer + example: 1 + customerSegmentIds: + type: array + description: >- + The IDs of the customer segments that the product is targeted + towards + items: + type: integer + example: 1 + productCategoryId: + type: integer + description: The ID of the category the product belongs to + example: 1 + requiredCustomerLevelId: + type: integer + description: >- + The ID of the required customer level to be allowed to purchase the + product + requiredProducts: + type: array + required: + - requiredProductId + description: >- + The IDs of products that should already be owned by the customer + (for travel products, the validity of the given productIds should + fully overlap on the customer's travel medium) + items: + type: object + properties: + requiredProductId: + type: integer + example: 1 + description: + type: string + description: Description of why the product is required + example: Benodigd basisproduct + incompatibleProducts: + type: array + required: + - incompatibleProductId + description: >- + The IDs of products that can not be active at the same time as this + product (for travel products, none of the listed productIds should + have overlapping validity with this product on the customer's travel + medium) + items: + type: object + properties: + incompatibleProductId: + type: integer + example: 1 + description: + type: string + description: Description of why the product is incompatible + example: Kan niet combineren met zichzelf + mandatoryCustomerDataItemIds: + type: array + description: >- + The IDs of the customer data items that should be filled in by the + customer + items: + type: integer + example: 1 + requiredGboPersonalAttributeIds: + type: array + description: >- + GBO specific; the IDs of the GBO Personal Attribute Data (PAD) + elements that should be present (or filled during the order flow) on + the customer's chosen travel medium. This attribute should not be + user-editable, but only be filled by PMT, based on the chosen + gboPackageTemplateId! + items: + type: integer + example: 1 + tokenTypeIds: + type: array + description: The IDs of the token types that the product can be instantiated on + items: + type: integer + example: 1 + paymentMomentId: + type: integer + description: The ID of the payment moment for the product + example: 1 + serviceOptionIds: + type: array + description: The IDs of the service options that are available for this product + items: + type: integer + example: 1 + validityDuration: + type: string + format: duration + description: >- + The validity duration of the product. Should only contain one single + unit of duration (D, W, M, Y) + example: P7D + maxStartInFutureDuration: + type: string + format: duration + description: >- + The maximum amount of time in the future allowed for the start of + the product validity. Should only contain one single unit of + duration (D, W, M, Y) + example: P6W + isRenewable: + type: boolean + description: Indicates if the product is renewable + example: false + sendInvoice: + type: boolean + description: >- + Indicates if an invoice should be sent to the customer after + ordering this product + example: false + imageReference: + type: string + format: uri + description: A reference/URL to the image of the product + example: https://www.htm.nl/nog-onbekende-productafbeelding + productPageUrl: + type: string + format: uri + description: >- + The URL of the product page, to be used by touchpoints which are not + allowed to sell the product, to redirect the customer. If the + product is sold via multiple touchpoints, this URL should point to + the preferred touchpoint for sales + example: https://www.htm.nl/nog-onbekende-productpagina + termsUrl: + type: string + format: uri + description: >- + The URL for the webpage or document containing terms for this + product + example: https://www.htm.nl/nog-onbekende-productvoorwaarden + isSellableAtHtm: + type: boolean + description: >- + Indicates if the product is sellable at HTM. If false, no + sellingPrices/Periods should be defined - this product may only be + used for tracking/reporting purposed, or internal use + needsSolvencyCheckConsumer: + type: boolean + description: >- + Indicates if a solvency check is required for consumers purchasing + the product + needsSolvencyCheckBusiness: + type: boolean + description: >- + Indicates if a solvency check is required for businesses purchasing + the product + sellingPeriods: + type: array + description: >- + The sellingPeriods of the product. Can contain multiple periods for + the same or different touchpoints, as long as there is no overlap + for the same touchpoint + items: + type: object + required: + - fromInclusive + - toInclusive + - salesTouchpointId + properties: + sellingPeriodId: + type: integer + description: >- + Including a sellingPeriodId will update an existing + sellingPeriod for this product - if omitted, a new + sellingPeriod will be created + example: 1 + fromInclusive: + type: string + format: date-time + description: LocalDateTime (without offset) - The start date of the period + example: '2020-01-01T00:00:00.000' + toInclusive: + type: string + format: date-time + description: LocalDateTime (without offset) - The end date of the period + example: '2020-01-01T00:00:00.000' + salesTouchpointId: + type: integer + description: The ID of the touchpoint this period applies to + example: 1 + forbiddenPaymentMethodIds: + type: array + description: >- + The IDs of the payment methods that are not allowed to be used + for this touchpoint and period + items: + type: integer + example: 1 + sellingPrices: + type: array + description: >- + The sellingPrices of this product for the touchpoint defined + in this sellingPeriod. Can contain multiple prices, as long as + there is no overlap in validity + items: + type: object + required: + - amountExclTax + - taxMetadataId + - amountInclTax + - fromInclusive + - toInclusive + - internalPrice + properties: + sellingPeriodId: + type: integer + description: >- + Including a sellingPriceId will update an existing + sellingPrice for this product - if omitted, a new + sellingPrice will be created + example: 1 + amountExclTax: + type: integer + example: 750 + taxMetadataId: + type: string + format: uuid + example: 501B17EF-36C4-4039-B92C-6517969B464E + amountInclTax: + type: integer + example: 908 + fromInclusive: + type: string + format: date-time + description: >- + LocalDateTime (without offset) - The start date of the + period + example: '2022-03-01T00:00:00.000' + toInclusive: + type: string + format: date-time + description: >- + LocalDateTime (without offset) - The end date of the + period + example: '2022-06-01T00:00:00.000' + internalPrice: + type: number + example: 908.1234 + purchasePrices: + type: array + description: >- + The purchasePrices of the product. Can contain multiple prices, as + long as there is no overlap in validity + items: + type: object + required: + - amountExclTax + - taxMetadataId + - amountInclTax + - fromInclusive + - toInclusive + properties: + purchasePriceId: + type: integer + description: >- + Including a purchasePriceId will update an existing + purchasePrice for this product - if omitted, a new + purchasePrice will be created + example: 1 + amountExclTax: + type: integer + example: 750 + taxMetadataId: + type: string + format: uuid + example: 501B17EF-36C4-4039-B92C-6517969B464E + amountInclTax: + type: integer + example: 908 + fromInclusive: + type: string + format: date-time + description: LocalDateTime (without offset) - The start date of the period + example: '2022-03-01T00:00:00.000' + toInclusive: + type: string + format: date-time + description: LocalDateTime (without offset) - The end date of the period + example: '2022-06-01T00:00:00.000' + CreateOrUpdateProductResponse: + type: object + properties: + productId: + type: integer + example: 22 + 400Response: + type: object + properties: + code: + type: string + example: '400' + type: + type: string + message: + type: string + example: Bad Request + description: + type: string + example: '''2023-02-01 00:00:00'' is not a valid Datetime' + apiErrorCode: + type: string + example: htm.api.err.40xxx + 401Response: + type: object + properties: + code: + type: string + example: '900901' + type: + type: string + message: + type: string + example: Invalid Credentials + description: + type: string + example: >- + Invalid Credentials. Make sure you have provided the correct + security credentials + apiErrorCode: + type: string + example: htm.api.err.40xxx + 403Response: + type: object + properties: + code: + type: string + example: '900901' + type: + type: string + message: + type: string + example: Retailer not authorized + description: + type: string + example: The retailer is not allowed to access resource for requested + apiErrorCode: + type: string + example: htm.api.err.40xxx touchpoint + 404Response: + type: object + properties: + code: + type: string + example: '404' + type: + type: string + example: Status report + message: + type: string + example: Not Found + description: + type: string + example: The requested resource is not available. + apiErrorCode: + type: string + example: htm.api.err.40xxx + 500Response: + type: object + properties: + code: + type: string + example: '500' + type: + type: string + message: + type: string + example: Internal Server Error + description: + type: string + apiErrorCode: + type: string + example: htm.api.err.40xxx -- 2.45.2 From 093b826f2bbb99bbd57d84301dc68d490a8739eb Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 28 Jan 2025 11:00:09 +0100 Subject: [PATCH 060/372] OVPAY-1433 - Added order fulfillment and order creation v2.2. --- src/openapi/orders/service_engine_orders.yaml | 451 +++++++++++++----- 1 file changed, 331 insertions(+), 120 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index dbee45f..6242cf5 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -469,6 +469,101 @@ paths: ], }, } + v2.2: + summary: Order fulfillment v2.2 + description: Order fulfillment v2.2 + value: + { + "orderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9", + "customerProfileId": 1337, + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "createdOn": "2024-03-22T09:00:00", + "orderStatusId": 4, + "orderLines": + [ + { + "orderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f", + "productId": 1, + "quantity": 1, + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatusId": 4, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + }, + ], + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "payPush": + { + "consumerIssuer": "ABN AMRO", + "transactionId": "0000000000000001", + "consumerName": "J. de Vries", + "consumerIBAN": "NL44RABO0123456789", + "consumerBIC": "RABONL2U", + }, + }, + ], + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + }, + ], + }, + } responses: "201": description: Created @@ -858,131 +953,247 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { - "externalOrderId": null, - "customerProfileId": 1337, - "totalAmount": 121, - "touchPoint": + examples: + v2: + summary: Order creation v2.1 + description: Order creation v2.1 + value: { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailerId": 1001, - }, - "languageId": 1, - "billingAddressId": 1, - "shippingAddressId": 1, - "createdOn": "2024-03-22T09:00:00", - "order_OrderStatus": - [ - { - "orderStatusId": 1, - "createdOn": "2024-03-22T09:00:00", - "description": "Concept order", - }, - ], - "orderLines": - [ - { - "externalOrderLineId": null, - "productId": 1, - "productName": "HTM Maandkorting 20%", - "productCode": "HTM-MND-20", - "productDescription": "HTM Maandkorting 20%", - "taxAmount": 21, - "taxMetadataId": "7275b910-37d9-40c1-aaac-80d8ceb62ff9", - "amountExclTax": 100, - "amountInclTax": 121, - "quantity": 1, - "orderLineTerms": - [{ "termsUrl": "generalTermsAndConditions.pdf" }], - "validFrom": "2024-03-22T09:00:00", - "validUntil": "2025-03-22T09:00:00", - "orderLineStatusId": 4, - "createdOn": "2024-03-22T09:00:00", - "customerTokens": - [ - { - "tokenTypeId": 1, - "ovPayTokenId": 1, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 34, - "ovpasNumber": "OV34567", - "verificationCode": "A7H6", - "personalAccountData": - { - "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", - "photoReference": "DSC_0502.JPG", - "fileType": "image/jpg", - "challengeTypeId": 1, - "oneTimePassword": "H5Iiz3JTaQeIV8p", - }, - }, - ], - "orderAccountingStatuses": - [ - { - "accountingStatusId": 1, - "createdOn": "2024-03-22T09:00:00", - "description": "Financiele transactie voor de FIKO.", - }, - ], - }, - ], - "payments": - [ - { - "createdOn": "2024-03-22T09:00:00", - "amountDebit": 121, - "paymentMethodId": 1, - "touchPointId": 1, - "isRefund": false, - "htmPaymentReference": "HTM-1234", - "pspPaymentReference": "Buckaroo-1234", - "paymentStatuses": - [ - { - "createdOn": "2024-03-22T09:00:00", - "statusCode": "190", - "statusDescription": "Success", - "statusSubCode": "S001", - "statusSubDescription": "PaymentSuccessFul", - }, - ], - "mandateInput": - { - "directDebitMandateTypeId": 1, - "createdOn": "2024-03-22T09:00:00", - "bic": "RABONL2U", - "iban": "NL44RABO0123456789", - "ascription": "J. de Vries", - "place": "Den Haag", - }, - }, - ], - "orderCustomer": - { - "birthname": "Jan", - "surname": "Vries", - "prefix": "de", - "emailAddress": "jandevries@outlook.com", - "dateOfBirth": "1970-01-01", - "orderCustomerAddresses": + "externalOrderId": null, + "customerProfileId": 1337, + "totalAmount": 121, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "createdOn": "2024-03-22T09:00:00", + "order_OrderStatus": [ { - "addressTypeId": 1, - "street": "Kon. Julianaplein", - "houseNumber": 10, - "houseNumberSuffix": "a", - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "NL", + "orderStatusId": 1, + "createdOn": "2024-03-22T09:00:00", + "description": "Concept order", }, ], - }, - } + "orderLines": + [ + { + "externalOrderLineId": null, + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxMetadataId": "7275b910-37d9-40c1-aaac-80d8ceb62ff9", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "orderLineTerms": + [{ "termsUrl": "generalTermsAndConditions.pdf" }], + "validFrom": "2024-03-22T09:00:00", + "validUntil": "2025-03-22T09:00:00", + "orderLineStatusId": 4, + "createdOn": "2024-03-22T09:00:00", + "customerTokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + "orderAccountingStatuses": + [ + { + "accountingStatusId": 1, + "createdOn": "2024-03-22T09:00:00", + "description": "Financiele transactie voor de FIKO.", + }, + ], + }, + ], + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "mandateInput": + { + "directDebitMandateTypeId": 1, + "createdOn": "2024-03-22T09:00:00", + "bic": "RABONL2U", + "iban": "NL44RABO0123456789", + "ascription": "J. de Vries", + "place": "Den Haag", + }, + }, + ], + "orderCustomer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "orderCustomerAddresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + }, + ], + }, + } + v2.2: + summary: Order creation v2.2 + description: Order creation v2.2 + value: + { + "externalOrderId": null, + "customerProfileId": 1337, + "touchPointId": 3, + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "createdOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "orderStatusId": 1, + "createdOn": "2024-03-22T09:00:00", + "description": "Concept order", + }, + ], + "orderLines": + [ + { + "externalOrderLineId": null, + "productId": 1, + "quantity": 1, + "validFrom": "2024-03-22T09:00:00", + "validUntil": "2025-03-22T09:00:00", + "orderLineStatusId": 4, + "createdOn": "2024-03-22T09:00:00", + "customerTokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + "orderAccountingStatuses": + [ + { + "accountingStatusId": 1, + "createdOn": "2024-03-22T09:00:00", + "description": "Financiele transactie voor de FIKO.", + }, + ], + }, + ], + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "mandateInput": + { + "directDebitMandateTypeId": 1, + "createdOn": "2024-03-22T09:00:00", + "bic": "RABONL2U", + "iban": "NL44RABO0123456789", + "ascription": "J. de Vries", + "place": "Den Haag", + }, + }, + ], + "orderCustomer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "orderCustomerAddresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + }, + ], + }, + } responses: "201": description: Created -- 2.45.2 From 1b0a6ba2089e81ef312a02d569ec1275a18a6990 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 28 Jan 2025 13:48:44 +0100 Subject: [PATCH 061/372] OVPAY-879 - Update FIKO bulk endpoint. --- src/openapi/fiko/fiko-crud.yaml | 88 +++++++++++++++++++++++++++------ 1 file changed, 73 insertions(+), 15 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 46a74ce..1c7b409 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -45,6 +45,12 @@ paths: application/json: schema: $ref: "#/components/schemas/TransactionItemsBulkPostResponseBody" + "400": + description: Bad request + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionItemsBulkBadRequestResponseBody" /transactionitems: get: summary: Find transaction items. @@ -1591,16 +1597,68 @@ components: - type - productCode TransactionItemsBulkPostResponseBody: - type: array - items: - type: object - properties: - transactionItemId: - type: string - format: uuid - example: afce35b2-1dff-4ace-98d0-4b9ac405c87d - required: - - transactionItemId + type: object + properties: + summary: + type: object + properties: + created: + type: integer + example: 15 + updated: + type: integer + example: 2 + total: + type: integer + example: 17 + required: + - created + - updated + - total + required: + - summary + TransactionItemsBulkBadRequestResponseBody: + type: object + properties: + type: + type: string + format: url + example: https://htm.nl/api/v1/probs/fiko/validationerror + title: + type: string + example: Transaction validation failed. + detail: + type: string + example: One ore more transactions in the request are invalid. + instance: + type: string + example: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b + errors: + type: array + items: + type: object + properties: + detail: + type: string + example: Transaction is a duplicate of a transaction already in the system. + pointer: + type: string + example: "#/transactionItems/0" + transactionId: + type: string + example: 1ad109d3-fd7d-4b6f-872b-220d492f385f + transactionLineId: + type: string + example: fee907dd-e59d-44f5-a63b-bbdec38f79b7 + required: + - detail + - pointer + - transactionId + required: + - type + - title + - detail + - instance TransactionItemsPatchRequestBody: type: object properties: @@ -2529,7 +2587,7 @@ components: taxCode: type: string example: V21 - taxPercentageAmount: + taxPercentageAmount: type: integer example: 21 description: @@ -2559,7 +2617,7 @@ components: sourceMetadata: type: array items: - $ref: '#/components/schemas/SourceMetadata' + $ref: "#/components/schemas/SourceMetadata" href: type: string nullable: true @@ -2731,7 +2789,7 @@ components: format: uuid example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb concession: - $ref: '#/components/schemas/Concession' + $ref: "#/components/schemas/Concession" percentage: type: number example: 84.021 @@ -2818,7 +2876,7 @@ components: concessions: type: array items: - $ref: '#/components/schemas/Concession' + $ref: "#/components/schemas/Concession" href: type: string nullable: true @@ -2830,7 +2888,7 @@ components: failureReasons: type: array items: - $ref: '#/components/schemas/FailureReason' + $ref: "#/components/schemas/FailureReason" href: type: string nullable: true -- 2.45.2 From 2a1641cd4abc73756c735d264b43c5f060c3fb38 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 3 Feb 2025 13:28:00 +0100 Subject: [PATCH 062/372] OVPAY-1433 - Removed customerProfileId from v2.2. --- src/openapi/orders/service_engine_orders.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 6242cf5..8cb39bd 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -475,7 +475,6 @@ paths: value: { "orderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9", - "customerProfileId": 1337, "languageId": 1, "billingAddressId": 1, "shippingAddressId": 1, @@ -1088,7 +1087,6 @@ paths: value: { "externalOrderId": null, - "customerProfileId": 1337, "touchPointId": 3, "languageId": 1, "billingAddressId": 1, -- 2.45.2 From c6a5a456dd2409771775babda0cdd8b8ed3e2d63 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 3 Feb 2025 13:46:43 +0100 Subject: [PATCH 063/372] OVPAY-1433 - Removed touchPointId from v2.2. --- src/openapi/orders/service_engine_orders.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 8cb39bd..12207f8 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -518,7 +518,6 @@ paths: "createdOn": "2024-03-22T09:00:00", "amountDebit": 121, "paymentMethodId": 1, - "touchPointId": 1, "isRefund": false, "htmPaymentReference": "HTM-1234", "pspPaymentReference": "Buckaroo-1234", @@ -1087,7 +1086,6 @@ paths: value: { "externalOrderId": null, - "touchPointId": 3, "languageId": 1, "billingAddressId": 1, "shippingAddressId": 1, @@ -1146,7 +1144,6 @@ paths: "createdOn": "2024-03-22T09:00:00", "amountDebit": 121, "paymentMethodId": 1, - "touchPointId": 1, "isRefund": false, "htmPaymentReference": "HTM-1234", "pspPaymentReference": "Buckaroo-1234", -- 2.45.2 From 3f4001ed4d5650e42a17f9d2a2ea9814128c553e Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 3 Feb 2025 14:56:01 +0100 Subject: [PATCH 064/372] OVPAY-1433 - Fulfillment now accepts externalOrderId and externalOrderLineId. --- src/openapi/orders/service_engine_orders.yaml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 12207f8..058a3dc 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -474,7 +474,7 @@ paths: description: Order fulfillment v2.2 value: { - "orderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9", + "externalOrderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9", "languageId": 1, "billingAddressId": 1, "shippingAddressId": 1, @@ -483,7 +483,7 @@ paths: "orderLines": [ { - "orderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f", + "externalOrderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f", "productId": 1, "quantity": 1, "createdOn": "2024-03-22T09:00:00", @@ -579,7 +579,8 @@ paths: description: Order fulfillment v2 value: { - "orderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9", + "orderId": "c73ff153-72e0-403f-a276-e86f544406f9", + "externalOrderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9", "orderNumber": "123456", "customerProfileId": 1337, "totalAmount": 121, @@ -591,7 +592,8 @@ paths: "orderLines": [ { - "orderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f", + "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468", + "externalOrderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f", "productId": 1, "productName": "HTM Maandkorting 20%", "productCode": "HTM-MND-20", -- 2.45.2 From 024e14f31c695c59ca3c93d18e931688a8d8bc26 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Wed, 5 Feb 2025 13:48:50 +0100 Subject: [PATCH 065/372] Remove some remaining pagination stuff, add Regio Vrij details example, add more explanation and example descriptions --- src/openapi/products/SE-products.yaml | 1970 +++++++++++------- src/openapi/products/products-crud-v2.2.yaml | 34 +- 2 files changed, 1213 insertions(+), 791 deletions(-) diff --git a/src/openapi/products/SE-products.yaml b/src/openapi/products/SE-products.yaml index c76fc51..c939ff6 100644 --- a/src/openapi/products/SE-products.yaml +++ b/src/openapi/products/SE-products.yaml @@ -20,11 +20,11 @@ paths: description: |- Get a list of all HTM products that refers to a given parentProductId (or without parent, if not specified), and that the calling touchpoint is allowed to see and/or sell. \ + Essentially, this means that only products that have active sellingPeriods for touchpoints within the same + retailer as the calling touchpoint are returned. \ Only a few details are returned per product - use the `GET /products/{productId}` endpoint to get more details. \ - In the examples, it can be seen that only products that have active sellingPeriods for touchpoints within the same - retailer as the calling touchpoint are returned. \ - Touchpoint 1 and 2 belong to retailer 1; touchpoint 3 and 4 belong to retailer 2. + Nb: touchpoint 1 and 2 belong to retailer 1; touchpoint 3 and 4 belong to retailer 2. parameters: - name: parentProductId in: query @@ -48,12 +48,44 @@ paths: description: No products value: { - "Entries": [], - "href": null + "Entries": [] + } + getListOneProductTouchpointId1: + summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 1) + description: Only two sellingPeriods for touchpoint 1 and/or 2 (part of same retailer) are returned - the price for touchpointId 1 is returned + value: + { + "Entries": [ + { + "productId": 2, + "productCode": "312AB-WL", + "productName": "HTM dagkaart", + "productDescription": "Reis een dag met het openbaar vervoer bij HTM", + "productCategory": { + "productCategoryId": 6, + "isTravelProduct": false, + "name": "Barcode" + }, + "tokenTypes": null, + "sellableTouchPointIds": [ + 1, + 2 + ], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://services.acc.api.htm.nl/abt/serviceengine/x.x/products/2", + "method": "GET" + } + } + } + ] } getListOneProductTouchpointId3: summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 3) - description: Only products that have active sellingPeriods for touchpoint 3 are returned + description: Only two sellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned - the price for touchpointId 3 is returned value: { "Entries": [ @@ -84,9 +116,41 @@ paths: } ] } - getListMultipleProductsWithPaginationTuchpointId1: - summary: List containing multiple products with pagination (called by touchpointId 3) - description: Only products that have active SellingPeriods for touchpoint 3 are returned + getListOneProductNoPriceTouchpointId3: + summary: List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4) + description: Product is still returned (because touchpointId 3 is part of same retailer) but no price, as touchpointId 4 is not allowed to sell this product. + value: + { + "Entries": [ + { + "productId": 49, + "productCode": null, + "productName": "HTM Regio Vrij", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "tokenTypes": null, + "sellableTouchpointIds": [ + 4 + ], + "amountInclTax": null, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://services.acc.api.htm.nl/abt/serviceengine/x.x/products/49", + "method": "GET" + } + } + } + ] + } + getListMultipleProductsTouchpointId3: + summary: List containing multiple products (called by touchpointId 3) + description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned value: { "Entries": [ @@ -175,11 +239,19 @@ paths: get: tags: - ServiceEngine Products - summary: Get full details of a single HTM product (including all child products), specified by the productId + summary: Get more details for a single HTM product (including all child products), specified by the productId description: |- - Get full details of a single HTM product (including all child products), specified by the productId. \ - Touchpoints only receive information that is allowed to be seen by the touchpointId of the \ - consumer; i.e. only currently active selling periods and prices for the calling touchpoint are returned. + Get more details for a single HTM product (including all child products/productVariants), specified by the productId. \ + Only information that is allowed to be seen by the calling touchpoint is returned; i.e. only currently + active selling periods and prices for the calling touchpoint are returned. Future/past prices and prices + for other touchpoints are thus filtered out. + + The response contains the full product tree, including all child products (`productVariants`) of the given productId. + + Touchpoints can only retrieve details for products that they are allowed to SELL at the time of the request (i.e. its touchpointId is included in the + `sellableTouchPointIds` array in the products list response). A touchpoint can determine its own touchpointId by checking the `X-HTM-TOUCHPOINT-ID-HEADER` HTTP header. + + When a touchpoint tries to retrieve details for a product that it is not allowed to sell, a 403 error is thrown. parameters: - name: productId in: path @@ -197,12 +269,1119 @@ paths: schema: $ref: '#/components/schemas/ProductPayloadResponse' examples: - WIP touchpoint-filtered response: - summary: WIP touchpoint-filtered response + getDetailsTreeRegioVrijTouchpointId3: + summary: Details of Regio Vrij product and (part of) its productVariants (called by touchpointId 3) + description: |- + All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product + and (part of) its productVariants; the full tree would be too huge to be useful as an example. + The full depth of the tree is included for the HL62 Reduced Fare Variant. value: { - "WIP": null + "productId": 49, + "parentProductId": null, + "productCode": null, + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", + "validityPeriod": { + "validityPeriodId": 161, + "fromInclusive": "2024-11-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area. in the Rotterdam The Hague region." + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + }, + { + "customerSegmentId": 4, + "name": "Volwassene (19-64)" + }, + { + "customerSegmentId": 5, + "name": "Oudere (65+)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 99, + "fromInclusive": "2024-11-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": null + } + ], + "purchasePrices": null, + "productVariants": [ + { + "productId": 109, + "parentProductId": 49, + "productCode": null, + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij - HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 219, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + }, + { + "customerSegmentId": 4, + "name": "Volwassene (19-64)" + }, + { + "customerSegmentId": 5, + "name": "Oudere (65+)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 143, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-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": null + } + ], + "purchasePrices": null, + "productVariants": [ + { + "productId": 114, + "parentProductId": 109, + "productCode": null, + "gboPackageTemplateId": "33629", + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij - Voltarief - HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 224, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - Full Fare - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + }, + { + "customerSegmentId": 4, + "name": "Volwassene (19-64)" + }, + { + "customerSegmentId": 5, + "name": "Oudere (65+)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "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/htm-regio-vrij", + "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 148, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-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": 139, + "amountExclTax": 5412, + "amountInclTax": 5900, + "fromInclusive": "2024-12-31T23:00:00.000+00:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + }, + { + "productId": 115, + "parentProductId": 109, + "productCode": null, + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij - Reductietarief - HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 225, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 149, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-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": 140, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": [ + { + "productId": 116, + "parentProductId": 115, + "productCode": "33630-ML", + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productGroupMetadata": { + "productGroupMetadataId": "WIP", + "productGroupCode": "WIP", + "department": "WIP", + "costCenter": "WIP", + "costType": "WIP", + "description": "Work in Progress - will follow later, when FIKO is implemented", + "user": "WIP", + "documentCode": "WIP", + "timestampUpdated": "2024-09-03T15:07:53.470+00:00", + "validFrom": "2024-08-01T00:00:00.000+00:00", + "validUntil": "2025-08-01T00:00:00.000+00:00" + }, + "productName": "HTM Regio Vrij - Reductietarief - Losse Maand- HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 226, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - 1 Month - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 150, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-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": 141, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + }, + { + "productId": 117, + "parentProductId": 115, + "productCode": "33630-MA", + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productGroupMetadata": { + "productGroupMetadataId": "WIP", + "productGroupCode": "WIP", + "department": "WIP", + "costCenter": "WIP", + "costType": "WIP", + "description": "Work in Progress - will follow later, when FIKO is implemented", + "user": "WIP", + "documentCode": "WIP", + "timestampUpdated": "2024-09-03T15:07:53.470+00:00", + "validFrom": "2024-08-01T00:00:00.000+00:00", + "validUntil": "2025-08-01T00:00:00.000+00:00" + }, + "productName": "HTM Regio Vrij - Reductietarief - Doorlopend abonnement- HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 227, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - Renewable subscription - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "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/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 151, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-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": 142, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + } + ] + } + ] + }, + { + "productId": 112, + "parentProductId": 49, + "productCode": null, + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij - HL65", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL65", + "validityPeriod": { + "validityPeriodId": 222, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - HL65", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL65" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + }, + { + "customerSegmentId": 4, + "name": "Volwassene (19-64)" + }, + { + "customerSegmentId": 5, + "name": "Oudere (65+)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "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/htm-regio-vrij", + "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 146, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-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": null + } + ], + "purchasePrices": null, + "productVariants": null + } + ] } + '401': + description: '401' + content: + application/json: + schema: + $ref: '#/components/schemas/401Response' + '403': + description: '403' + content: + application/json: + schema: + $ref: '#/components/schemas/403Response' + examples: + Not allowed to see product details: + summary: Not allowed to see product details + value: + { + "code": "403", + "type": "Forbidden", + "message": "Touchpoint not authorized to see product details", + "description": "The touchpoint is currently not allowed to sell this product and thus can not see its details" + } + '404': + description: '404' + content: + application/json: + schema: + $ref: '#/components/schemas/404Response' + '500': + description: '500' + content: + application/json: + schema: + $ref: '#/components/schemas/500Response' components: schemas: TaxMetadataResponse: @@ -839,754 +2018,6 @@ components: type: string format: date-time-offset example: '2024-09-03T10:01:34.000+00:00' - CreateProductRequest: - required: - - productOwnerId - - isRenewable - - isSellableAtHtm - - needsSolvencyCheckConsumer - - needsSolvencyCheckBusiness - type: object - properties: - parentProductId: - type: integer - description: The ID of the parent product (if any) - example: 1 - productCode: - type: string - description: The HTM-internal product code - example: 30901-WL - gboPackageTemplateId: - type: string - description: >- - The ID of the GBO SalesPackage that should be instantiated after - buying this product - example: '30901' - tapConnectProductCode: - type: string - description: >- - The productCode of the TapConnect product that should be issued - after buying this product - example: 1234AB - productGroupMetadataId: - type: string - format: uuid - description: The ID of the productGroupMetadata for administration in U4F - example: 501B17EF-36C4-4039-B92C-6517969B464E - productName: - type: string - description: The name of the product - example: Test product name - productDescription: - type: string - description: The description of the product - example: Test product description - validityPeriod: - required: - - fromInclusive - - toInclusive - type: object - description: The validity period of the product - properties: - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start of the validity - period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end of the validity period - example: '2022-06-01T00:00:00.000' - productTranslations: - type: array - description: Translations of the product name and description - items: - type: object - required: - - language - - name - - description - properties: - language: - type: string - example: en - name: - type: string - example: HTM F&F 90% korting - description: - type: string - example: >- - Travel with 90% discount for a week during the first HTM F&F - OVpay pilot! - productOwnerId: - type: integer - description: The ID of the owner of the product - example: 1 - marketSegmentIds: - type: array - description: The IDs of the market segments that the product is targeted towards - items: - type: integer - example: 1 - customerSegmentIds: - type: array - description: >- - The IDs of the customer segments that the product is targeted - towards - items: - type: integer - example: 1 - productCategoryId: - type: integer - description: The ID of the category the product belongs to - example: 1 - requiredCustomerLevelId: - type: integer - description: >- - The ID of the required customer level to be allowed to purchase the - product - requiredProducts: - type: array - required: - - requiredProductId - description: >- - The IDs of products that should already be owned by the customer - (for travel products, the validity of the given productIds should - fully overlap on the customer's travel medium) - items: - type: object - properties: - requiredProductId: - type: integer - example: 1 - description: - type: string - description: Description of why the product is required - example: Benodigd basisproduct - incompatibleProducts: - type: array - required: - - incompatibleProductId - description: >- - The IDs of products that can not be active at the same time as this - product (for travel products, none of the listed productIds should - have overlapping validity with this product on the customer's travel - medium) - items: - type: object - properties: - incompatibleProductId: - type: integer - example: 1 - description: - type: string - description: Description of why the product is incompatible - example: Kan niet combineren met zichzelf - mandatoryCustomerDataItemIds: - type: array - description: >- - The IDs of the customer data items that should be filled in by the - customer - items: - type: integer - example: 1 - requiredGboPersonalAttributeIds: - type: array - description: >- - GBO specific; the IDs of the GBO Personal Attribute Data (PAD) - elements that should be present (or filled during the order flow) on - the customer's chosen travel medium. This attribute should not be - user-editable, but only be filled by PMT, based on the chosen - gboPackageTemplateId! - items: - type: integer - example: 1 - tokenTypeIds: - type: array - description: The IDs of the token types that the product can be instantiated on - items: - type: integer - example: 1 - paymentMomentId: - type: integer - description: The ID of the payment moment for the product - example: 1 - serviceOptionIds: - type: array - description: The IDs of the service options that are available for this product - items: - type: integer - example: 1 - validityDuration: - type: string - format: duration - description: >- - The validity duration of the product. Should only contain one single - unit of duration (D, W, M, Y) - example: P7D - maxStartInFutureDuration: - type: string - format: duration - description: >- - The maximum amount of time in the future allowed for the start of - the product validity. Should only contain one single unit of - duration (D, W, M, Y) - example: P6W - isRenewable: - type: boolean - description: Indicates if the product is renewable - example: false - sendInvoice: - type: boolean - description: >- - Indicates if an invoice should be sent to the customer after - ordering this product - example: false - imageReference: - type: string - format: uri - description: A reference/URL to the image of the product - example: https://www.htm.nl/nog-onbekende-productafbeelding - productPageUrl: - type: string - format: uri - description: >- - The URL of the product page, to be used by touchpoints which are not - allowed to sell the product, to redirect the customer. If the - product is sold via multiple touchpoints, this URL should point to - the preferred touchpoint for sales - example: https://www.htm.nl/nog-onbekende-productpagina - termsUrl: - type: string - format: uri - description: >- - The URL for the webpage or document containing terms for this - product - example: https://www.htm.nl/nog-onbekende-productvoorwaarden - isSellableAtHtm: - type: boolean - description: >- - Indicates if the product is sellable at HTM. If false, no - sellingPrices/Periods should be defined - this product may only be - used for tracking/reporting purposed, or internal use - needsSolvencyCheckConsumer: - type: boolean - description: >- - Indicates if a solvency check is required for consumers purchasing - the product - needsSolvencyCheckBusiness: - type: boolean - description: >- - Indicates if a solvency check is required for businesses purchasing - the product - sellingPeriods: - type: array - description: >- - The sellingPeriods of the product. Can contain multiple periods for - the same or different touchpoints, as long as there is no overlap - for the same touchpoint - items: - type: object - required: - - fromInclusive - - toInclusive - - salesTouchpointId - properties: - fromInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The start date of the period - example: '2020-01-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end date of the period - example: '2020-01-01T00:00:00.000' - salesTouchpointId: - type: integer - description: The ID of the touchpoint this period applies to - example: 1 - forbiddenPaymentMethodIds: - type: array - description: >- - The IDs of the payment methods that are not allowed to be used - for this touchpoint and period - items: - type: integer - example: 1 - sellingPrices: - type: array - description: >- - The sellingPrices of this product for the touchpoint defined - in this sellingPeriod. Can contain multiple prices, as long as - there is no overlap in validity - items: - type: object - required: - - amountExclTax - - taxMetadataId - - amountInclTax - - fromInclusive - - toInclusive - - internalPrice - properties: - amountExclTax: - type: integer - example: 750 - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - amountInclTax: - type: integer - example: 908 - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start date of the - price period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The end date of the - price period - example: '2022-06-01T00:00:00.000' - internalPrice: - type: number - example: 908.1234 - purchasePrices: - type: array - description: >- - The purchasePrices of the product. Can contain multiple prices, as - long as there is no overlap in validity - items: - type: object - required: - - amountExclTax - - taxMetadataId - - amountInclTax - - fromInclusive - - toInclusive - properties: - amountExclTax: - type: integer - example: 750 - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - amountInclTax: - type: integer - example: 908 - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start date of the price - period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The end date of the price - period - example: '2022-06-01T00:00:00.000' - UpdateProductRequest: - required: - - productOwnerId - - isRenewable - - isSellableAtHtm - - needsSolvencyCheckConsumer - - needsSolvencyCheckBusiness - type: object - properties: - parentProductId: - type: integer - description: The ID of the parent product (if any) - example: 1 - productCode: - type: string - description: The HTM-internal product code - example: 30901-WL - gboPackageTemplateId: - type: string - description: >- - The ID of the GBO SalesPackage that should be instantiated after - buying this product - example: '30901' - tapConnectProductCode: - type: string - description: >- - The productCode of the TapConnect product that should be issued - after buying this product - example: 1234AB - productGroupMetadataId: - type: string - format: uuid - description: The ID of the productGroupMetadata for administration in U4F - example: 501B17EF-36C4-4039-B92C-6517969B464E - productName: - type: string - description: The name of the product - example: Test product name - productDescription: - type: string - description: The description of the product - example: Test product description - validityPeriod: - required: - - fromInclusive - - toInclusive - type: object - description: The validity period of the product - properties: - validityPeriodId: - type: integer - description: >- - Including a validityPeriodId will update the existing - validityPeriod for this product - if omitted, a new - validityPeriod will be created - example: 1 - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start of the validity - period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end of the validity period - example: '2022-06-01T00:00:00.000' - productTranslations: - type: array - description: Translations of the product name and description - items: - type: object - required: - - language - - name - - description - properties: - language: - type: string - example: en - name: - type: string - example: HTM F&F 90% korting - description: - type: string - example: >- - Travel with 90% discount for a week during the first HTM F&F - OVpay pilot! - productOwnerId: - type: integer - description: The ID of the owner of the product - example: 1 - marketSegmentIds: - type: array - description: The IDs of the market segments that the product is targeted towards - items: - type: integer - example: 1 - customerSegmentIds: - type: array - description: >- - The IDs of the customer segments that the product is targeted - towards - items: - type: integer - example: 1 - productCategoryId: - type: integer - description: The ID of the category the product belongs to - example: 1 - requiredCustomerLevelId: - type: integer - description: >- - The ID of the required customer level to be allowed to purchase the - product - requiredProducts: - type: array - required: - - requiredProductId - description: >- - The IDs of products that should already be owned by the customer - (for travel products, the validity of the given productIds should - fully overlap on the customer's travel medium) - items: - type: object - properties: - requiredProductId: - type: integer - example: 1 - description: - type: string - description: Description of why the product is required - example: Benodigd basisproduct - incompatibleProducts: - type: array - required: - - incompatibleProductId - description: >- - The IDs of products that can not be active at the same time as this - product (for travel products, none of the listed productIds should - have overlapping validity with this product on the customer's travel - medium) - items: - type: object - properties: - incompatibleProductId: - type: integer - example: 1 - description: - type: string - description: Description of why the product is incompatible - example: Kan niet combineren met zichzelf - mandatoryCustomerDataItemIds: - type: array - description: >- - The IDs of the customer data items that should be filled in by the - customer - items: - type: integer - example: 1 - requiredGboPersonalAttributeIds: - type: array - description: >- - GBO specific; the IDs of the GBO Personal Attribute Data (PAD) - elements that should be present (or filled during the order flow) on - the customer's chosen travel medium. This attribute should not be - user-editable, but only be filled by PMT, based on the chosen - gboPackageTemplateId! - items: - type: integer - example: 1 - tokenTypeIds: - type: array - description: The IDs of the token types that the product can be instantiated on - items: - type: integer - example: 1 - paymentMomentId: - type: integer - description: The ID of the payment moment for the product - example: 1 - serviceOptionIds: - type: array - description: The IDs of the service options that are available for this product - items: - type: integer - example: 1 - validityDuration: - type: string - format: duration - description: >- - The validity duration of the product. Should only contain one single - unit of duration (D, W, M, Y) - example: P7D - maxStartInFutureDuration: - type: string - format: duration - description: >- - The maximum amount of time in the future allowed for the start of - the product validity. Should only contain one single unit of - duration (D, W, M, Y) - example: P6W - isRenewable: - type: boolean - description: Indicates if the product is renewable - example: false - sendInvoice: - type: boolean - description: >- - Indicates if an invoice should be sent to the customer after - ordering this product - example: false - imageReference: - type: string - format: uri - description: A reference/URL to the image of the product - example: https://www.htm.nl/nog-onbekende-productafbeelding - productPageUrl: - type: string - format: uri - description: >- - The URL of the product page, to be used by touchpoints which are not - allowed to sell the product, to redirect the customer. If the - product is sold via multiple touchpoints, this URL should point to - the preferred touchpoint for sales - example: https://www.htm.nl/nog-onbekende-productpagina - termsUrl: - type: string - format: uri - description: >- - The URL for the webpage or document containing terms for this - product - example: https://www.htm.nl/nog-onbekende-productvoorwaarden - isSellableAtHtm: - type: boolean - description: >- - Indicates if the product is sellable at HTM. If false, no - sellingPrices/Periods should be defined - this product may only be - used for tracking/reporting purposed, or internal use - needsSolvencyCheckConsumer: - type: boolean - description: >- - Indicates if a solvency check is required for consumers purchasing - the product - needsSolvencyCheckBusiness: - type: boolean - description: >- - Indicates if a solvency check is required for businesses purchasing - the product - sellingPeriods: - type: array - description: >- - The sellingPeriods of the product. Can contain multiple periods for - the same or different touchpoints, as long as there is no overlap - for the same touchpoint - items: - type: object - required: - - fromInclusive - - toInclusive - - salesTouchpointId - properties: - sellingPeriodId: - type: integer - description: >- - Including a sellingPeriodId will update an existing - sellingPeriod for this product - if omitted, a new - sellingPeriod will be created - example: 1 - fromInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The start date of the period - example: '2020-01-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end date of the period - example: '2020-01-01T00:00:00.000' - salesTouchpointId: - type: integer - description: The ID of the touchpoint this period applies to - example: 1 - forbiddenPaymentMethodIds: - type: array - description: >- - The IDs of the payment methods that are not allowed to be used - for this touchpoint and period - items: - type: integer - example: 1 - sellingPrices: - type: array - description: >- - The sellingPrices of this product for the touchpoint defined - in this sellingPeriod. Can contain multiple prices, as long as - there is no overlap in validity - items: - type: object - required: - - amountExclTax - - taxMetadataId - - amountInclTax - - fromInclusive - - toInclusive - - internalPrice - properties: - sellingPeriodId: - type: integer - description: >- - Including a sellingPriceId will update an existing - sellingPrice for this product - if omitted, a new - sellingPrice will be created - example: 1 - amountExclTax: - type: integer - example: 750 - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - amountInclTax: - type: integer - example: 908 - fromInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The start date of the - period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: >- - LocalDateTime (without offset) - The end date of the - period - example: '2022-06-01T00:00:00.000' - internalPrice: - type: number - example: 908.1234 - purchasePrices: - type: array - description: >- - The purchasePrices of the product. Can contain multiple prices, as - long as there is no overlap in validity - items: - type: object - required: - - amountExclTax - - taxMetadataId - - amountInclTax - - fromInclusive - - toInclusive - properties: - purchasePriceId: - type: integer - description: >- - Including a purchasePriceId will update an existing - purchasePrice for this product - if omitted, a new - purchasePrice will be created - example: 1 - amountExclTax: - type: integer - example: 750 - taxMetadataId: - type: string - format: uuid - example: 501B17EF-36C4-4039-B92C-6517969B464E - amountInclTax: - type: integer - example: 908 - fromInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The start date of the period - example: '2022-03-01T00:00:00.000' - toInclusive: - type: string - format: date-time - description: LocalDateTime (without offset) - The end date of the period - example: '2022-06-01T00:00:00.000' - CreateOrUpdateProductResponse: - type: object - properties: - productId: - type: integer - example: 22 400Response: type: object properties: @@ -1609,7 +2040,7 @@ components: properties: code: type: string - example: '900901' + example: '401' type: type: string message: @@ -1628,18 +2059,19 @@ components: properties: code: type: string - example: '900901' + example: '403' type: type: string + example: "Forbidden" message: type: string - example: Retailer not authorized + example: Retailer not authorized to access product details description: type: string - example: The retailer is not allowed to access resource for requested + example: The touchpoint is not part of a retailer that isallowed to access product details for this productId apiErrorCode: type: string - example: htm.api.err.40xxx touchpoint + example: htm.api.err.40xxx 404Response: type: object properties: diff --git a/src/openapi/products/products-crud-v2.2.yaml b/src/openapi/products/products-crud-v2.2.yaml index 3daa4ec..bea0651 100644 --- a/src/openapi/products/products-crud-v2.2.yaml +++ b/src/openapi/products/products-crud-v2.2.yaml @@ -50,8 +50,7 @@ paths: description: No products value: { - "Entries": [], - "href": null + "Entries": [] } getListOneProductNoSellingPeriodsNoTouchpointId: summary: List containing one product without any SellingPeriods (no touchpointId in HTTP-headers) @@ -80,8 +79,7 @@ paths: "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina" } - ], - "href": null + ] } getListOneProductNoTouchpointId: summary: List containing one product with 4 currently active SellingPeriods (no touchpointId in HTTP-headers) @@ -110,12 +108,11 @@ paths: "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina" } - ], - "href": null + ] } getListOneProductTouchpointId3: summary: List containing one product with 4 currently active SellingPeriods (touchpointId 3 in HTTP-headers) - description: Only products that have active sellingPeriods for touchpoint 3 are returned + description: Only products that have active sellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned value: { "Entries": [ @@ -138,11 +135,10 @@ paths: "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina" } - ], - "href": null + ] } - getListMultipleProductsWithPaginationNoTouchpointId: - summary: List containing multiple products with pagination (no touchpointId in HTTP-headers) + getListMultipleProductsNoTouchpointId: + summary: List containing multiple products (no touchpointId in HTTP-headers) description: All products are returned, even if they have no active SellingPeriods value: { @@ -237,12 +233,11 @@ paths: "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina" } - ], - "href": "https://api.htm.nl/products?pageNumber=2" + ] } - getListMultipleProductsWithPaginationTuchpointId1: - summary: List containing multiple products with pagination (touchpointId 3 in HTTP-headers) - description: Only products that have active SellingPeriods for touchpoint 3 are returned + getListMultipleProductsTuchpointId1: + summary: List containing multiple products (touchpointId 3 in HTTP-headers) + description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned value: { "Entries": [ @@ -289,8 +284,7 @@ paths: "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina" } - ], - "href": "https://api.htm.nl/products?pageNumber=2" + ] } '400': description: '400' @@ -2147,10 +2141,6 @@ components: type: string format: uri example: https://www.htm.nl/nog-onbekende-product-pagina - href: - type: string - format: uri - example: https://api.htm.nl/products?page=2 ProductPayloadResponse: type: object required: -- 2.45.2 From 30bf97ba7a621c3d1efac7c1b43698db361ed80a Mon Sep 17 00:00:00 2001 From: Max Martens Date: Wed, 5 Feb 2025 14:17:03 +0100 Subject: [PATCH 066/372] Add examples for productdetails tree with one and two-layer depth --- src/openapi/products/SE-products.yaml | 536 +++++++++++++++++++++++++- 1 file changed, 521 insertions(+), 15 deletions(-) diff --git a/src/openapi/products/SE-products.yaml b/src/openapi/products/SE-products.yaml index c939ff6..b5eb4f7 100644 --- a/src/openapi/products/SE-products.yaml +++ b/src/openapi/products/SE-products.yaml @@ -269,12 +269,518 @@ paths: schema: $ref: '#/components/schemas/ProductPayloadResponse' examples: + getDetails90DiscountPilotProductTouchpointId3: + summary: 90% Discount F&F pilot product (called by touchpointId 3) + description: |- + All details (that the calling touchpoint is allowed to see) for the 90% Discount F&F pilot product.\ + Even though this product has sellingPeriods for multiple touchpoints, only the currently active sellingPeriod and price for touchpointId 3 are returned. + + This product has no child products, so its `productVariants` tree only has one layer of depth. + value: + { + "productId": 24, + "parentProductId": null, + "productCode": "HTM-30901-WL", + "gboPackageTemplateId": "30901", + "tapConnectProductCode": null, + "productGroupMetadata": { + "productGroupMetadataId": "WIP", + "productGroupCode": "WIP", + "department": "WIP", + "costCenter": "WIP", + "costType": "WIP", + "description": "Work in Progress - will follow later, when FIKO is implemented", + "user": "WIP", + "documentCode": "WIP", + "timestampUpdated": "2024-09-03T15:07:53.470+00:00", + "validFrom": "2024-08-01T00:00:00.000+00:00", + "validUntil": "2025-08-01T00:00:00.000+00:00" + }, + "productName": "HTM 90% Korting", + "productDescription": "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis een week lang met korting!", + "validityPeriod": { + "validityPeriodId": 144, + "fromInclusive": "2023-12-31T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM 90% Discount", + "description": "Are you a regular traveler? Activate HTM 90% discount on your EMV card!" + } + ], + "productOwner": { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM" + }, + "marketSegments": [ + { + "marketSegmentId": 1, + "name": "B2C" + } + ], + "customerSegments": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": null, + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P7D", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-90-korting", + "termsUrl": "https://web.acc.cloud.htm.nl/media/hkfak1dj/pv-pilotproduct.pdf", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 78, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23: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": 78, + "amountExclTax": 92, + "amountInclTax": 100, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + } + getDetails20DiscountPilotProductTouchpointId3: + summary: 20% Discount product (called by touchpointId 4) + description: |- + 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. + value: + { + "productId": 126, + "parentProductId": null, + "productCode": "HTM-30001", + "gboPackageTemplateId": "30001", + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM 20% Korting", + "productDescription": "Reis met 20% korting op je betaalpas bij HTM.", + "validityPeriod": { + "validityPeriodId": 236, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM 20% Discount", + "description": "Travel with 20% discount using your bank card with HTM." + } + ], + "productOwner": { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM" + }, + "marketSegments": [ + { + "marketSegmentId": 1, + "name": "B2C" + } + ], + "customerSegments": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": null, + "sendInvoice": null, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 172, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 4, + "name": "App (Infoplaza)", + "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": null + } + ], + "purchasePrices": null, + "productVariants": [ + { + "productId": 119, + "parentProductId": null, + "productCode": "HTM-30001-ML", + "gboPackageTemplateId": "30001", + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM 20% Korting (losse maand)", + "productDescription": "Reis een maand lang met 20% korting op je betaalpas bij HTM.", + "validityPeriod": { + "validityPeriodId": 229, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM 20% Discount (single month)", + "description": "Travel with 20% discount for a month using your bank card with HTM." + } + ], + "productOwner": { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM" + }, + "marketSegments": [ + { + "marketSegmentId": 1, + "name": "B2C" + } + ], + "customerSegments": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 160, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 4, + "name": "App (Infoplaza)", + "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": 149, + "amountExclTax": 276, + "amountInclTax": 300, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + }, + { + "productId": 120, + "parentProductId": null, + "productCode": "HTM-30001-MA", + "gboPackageTemplateId": "30001", + "tapConnectProductCode": null, + "productGroupMetadata": { + "productGroupMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", + "productGroupCode": "PG001", + "department": "Electronics", + "costCenter": "CC101", + "costType": "TypeA", + "description": "Group for electronic products", + "user": "2024-09-03T15:07:53.470+00:00", + "documentCode": "DOC001", + "timestampUpdated": "2024-09-03T15:07:53.470+00:00", + "validFrom": "2024-08-01T00:00:00.000+00:00", + "validUntil": "2025-08-01T00:00:00.000+00:00" + }, + "productName": "HTM 20% Korting (doorlopend abonnement)", + "productDescription": "Reis gedurende je abonnement met 20% korting op je betaalpas bij HTM.", + "validityPeriod": { + "validityPeriodId": 230, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM 20% Discount (subscription)", + "description": "Travel with 20% discount for the duration of your subscription using your bank card with HTM." + } + ], + "productOwner": { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM" + }, + "marketSegments": [ + { + "marketSegmentId": 1, + "name": "B2C" + } + ], + "customerSegments": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "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/webshop/htm-20-korting", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 159, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 4, + "name": "App (Infoplaza)", + "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": 148, + "amountExclTax": 276, + "amountInclTax": 300, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + } + ] + } getDetailsTreeRegioVrijTouchpointId3: - summary: Details of Regio Vrij product and (part of) its productVariants (called by touchpointId 3) + summary: Regio Vrij product and (part of) its productVariants (called by touchpointId 3) description: |- All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product - and (part of) its productVariants; the full tree would be too huge to be useful as an example. - The full depth of the tree is included for the HL62 Reduced Fare Variant. + 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. value: { "productId": 49, @@ -382,8 +888,8 @@ paths: "serviceOptions": null, "validityDuration": "P1M", "maxStartInFutureDuration": "P6W", - "isRenewable": false, - "sendInvoice": false, + "isRenewable": null, + "sendInvoice": null, "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", @@ -525,8 +1031,8 @@ paths: "serviceOptions": null, "validityDuration": "P1M", "maxStartInFutureDuration": "P6W", - "isRenewable": false, - "sendInvoice": false, + "isRenewable": null, + "sendInvoice": null, "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", @@ -668,8 +1174,8 @@ paths: "serviceOptions": null, "validityDuration": "P1M", "maxStartInFutureDuration": "P6W", - "isRenewable": false, - "sendInvoice": false, + "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/htm-regio-vrij", "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", @@ -819,8 +1325,8 @@ paths: "serviceOptions": null, "validityDuration": "P1M", "maxStartInFutureDuration": "P6W", - "isRenewable": false, - "sendInvoice": false, + "isRenewable": null, + "sendInvoice": null, "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", @@ -1307,8 +1813,8 @@ paths: "serviceOptions": null, "validityDuration": "P1M", "maxStartInFutureDuration": "P6W", - "isRenewable": false, - "sendInvoice": false, + "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/htm-regio-vrij", "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", @@ -2065,10 +2571,10 @@ components: example: "Forbidden" message: type: string - example: Retailer not authorized to access product details + example: Touchpoint not authorized to see product details description: type: string - example: The touchpoint is not part of a retailer that isallowed to access product details for this productId + example: The touchpoint is currently not allowed to sell this product and thus can not see its details apiErrorCode: type: string example: htm.api.err.40xxx -- 2.45.2 From 0d61d06198052cc90c59936ad5fbaa715a87627d Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 6 Feb 2025 10:49:44 +0100 Subject: [PATCH 067/372] OVPAY-1518 - Update TransactionItems data mode. --- src/openapi/fiko/fiko-crud.yaml | 126 ++++++++++++++++++++++++++------ 1 file changed, 104 insertions(+), 22 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 1c7b409..6c0fd0a 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -45,12 +45,6 @@ paths: application/json: schema: $ref: "#/components/schemas/TransactionItemsBulkPostResponseBody" - "400": - description: Bad request - content: - application/json: - schema: - $ref: "#/components/schemas/TransactionItemsBulkBadRequestResponseBody" /transactionitems: get: summary: Find transaction items. @@ -65,6 +59,15 @@ paths: format: uuid example: 75174a9d-fff4-4682-b66b-ebd93cbe7ea3 description: The id of the transaction item. + - in: query + name: transactionType + schema: + type: array + items: + type: string + example: [sales] + explode: false + description: Possible types of the transaction ('sales'). - in: query name: sourceName schema: @@ -148,6 +151,15 @@ paths: type: string example: HTM-MND-20 description: The product code of the transaction. + - in: query + name: status + schema: + type: array + items: + type: string + example: [created, succeeded, failed, returned to trx-db, returned to src, re-entered] + explode: false + description: Possible statuses of the transaction ('created', 'succeeded', 'failed', 'returned to trx-db', 'returned to src', 're-entered'). - in: query name: aggregationReference schema: @@ -160,15 +172,6 @@ paths: type: string example: U4F-123456 description: The accounting system reference of the transaction. %00 is searching for NULL-values. - - in: query - name: highestProcessingFailureStatus - schema: - type: array - items: - type: string - example: [open] - explode: false - description: Find the highest processing failure status of the transaction. %00 is searching for NULL-values. responses: "200": description: OK @@ -1403,6 +1406,11 @@ components: transactionItemId: type: string example: afce35b2-1dff-4ace-98d0-4b9ac405c87d + transactionType: + type: string + enum: + - sales + example: sales sourceName: type: string example: Verkoopengine @@ -1444,6 +1452,16 @@ components: productCode: type: string example: HTM-MND-20 + status: + type: string + enum: + - created + - succeeded + - failed + - returned to trx-db + - returned to src + - re-entered + example: created aggregationReference: type: string nullable: true @@ -1454,6 +1472,7 @@ components: example: U4F-123456 required: - transactionItemId + - transactionType - sourceName - transactionId - name @@ -1464,7 +1483,7 @@ components: - amountTax - occurredOn - type - - productCode + - status href: type: string nullable: true @@ -1473,6 +1492,11 @@ components: TransactionItemsPostRequestBody: type: object properties: + transactionType: + type: string + enum: + - sales + example: sales sourceName: type: string example: Verkoopengine @@ -1514,7 +1538,18 @@ components: productCode: type: string example: HTM-MND-20 + status: + type: string + enum: + - created + - succeeded + - failed + - returned to trx-db + - returned to src + - re-entered + example: created required: + - transactionType - sourceName - transactionId - name @@ -1525,7 +1560,7 @@ components: - amountTax - occurredOn - type - - productCode + - status TransactionItemsPostResponseBody: type: object properties: @@ -1543,6 +1578,11 @@ components: items: type: object properties: + transactionType: + type: string + enum: + - sales + example: sales sourceName: type: string example: Verkoopengine @@ -1586,6 +1626,7 @@ components: example: HTM-MND-20 required: - sourceName + - transactionType - transactionId - name - quantity @@ -1662,6 +1703,47 @@ components: TransactionItemsPatchRequestBody: type: object properties: + name: + type: string + example: HTM Maandkorting 20% + quantity: + type: integer + example: 1 + taxCode: + type: string + example: V21 + amountExclTax: + type: integer + example: 100 + amountInclTax: + type: integer + example: 121 + amountTax: + type: integer + example: 21 + occurredOn: + type: string + format: date-time + example: 2024-10-04T00:00:00Z + type: + type: string + enum: + - debit + - credit + example: debit + productCode: + type: string + example: HTM-MND-20 + status: + type: string + enum: + - created + - succeeded + - failed + - returned to trx-db + - returned to src + - re-entered + example: created aggregationReference: type: string nullable: true @@ -2587,7 +2669,7 @@ components: taxCode: type: string example: V21 - taxPercentageAmount: + taxPercentageAmount: type: integer example: 21 description: @@ -2617,7 +2699,7 @@ components: sourceMetadata: type: array items: - $ref: "#/components/schemas/SourceMetadata" + $ref: '#/components/schemas/SourceMetadata' href: type: string nullable: true @@ -2789,7 +2871,7 @@ components: format: uuid example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb concession: - $ref: "#/components/schemas/Concession" + $ref: '#/components/schemas/Concession' percentage: type: number example: 84.021 @@ -2876,7 +2958,7 @@ components: concessions: type: array items: - $ref: "#/components/schemas/Concession" + $ref: '#/components/schemas/Concession' href: type: string nullable: true @@ -2888,7 +2970,7 @@ components: failureReasons: type: array items: - $ref: "#/components/schemas/FailureReason" + $ref: '#/components/schemas/FailureReason' href: type: string nullable: true -- 2.45.2 From 7a5a6685b518a7260d775ca3496be76eb0b0d586 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 6 Feb 2025 12:11:14 +0100 Subject: [PATCH 068/372] OVPAY-1518 - Update ProcessingFailures. --- src/openapi/fiko/fiko-crud.yaml | 442 ++++++++------------------------ 1 file changed, 103 insertions(+), 339 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 6c0fd0a..8f7633c 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -18,14 +18,14 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/TransactionItemsPostRequestBody" + $ref: "#/components/schemas/unavailable" responses: "201": description: Created content: application/json: schema: - $ref: "#/components/schemas/TransactionItemsPostResponseBody" + $ref: "#/components/schemas/unavailable" /fiko/transactionitems/bulk: post: summary: Add one ore more finanicial transaction items in bulk. @@ -180,8 +180,9 @@ paths: schema: $ref: "#/components/schemas/TransactionItemsGetResponseBody" post: - summary: Add a finanicial transaction item. - description: Add a finanicial transaction item. + summary: DEPRECATED. Add a finanicial transaction item. + description: DEPRECATED. This API is deprecated. Use bulk-insert instead. + deprecated: true tags: - Transactions v2 requestBody: @@ -370,75 +371,53 @@ paths: example: 9834b346-d68c-438d-9bd5-6716422c2657 description: The id of the transaction item. - in: query - name: department + name: timestampBefore schema: type: string - example: 900 - description: The department (element 1) of the processing failure. + example: 2022-01-01 00:00:00 + description: The timestamp before the event occured. - in: query - name: costCenter + name: timestampAfter + schema: + type: string + example: 2022-01-01 00:00:00 + description: The timestamp after the event occured. + - in: query + name: element + schema: + type: string + example: contraAccount + description: The element on which the validation failed. + - in: query + name: value schema: type: string example: 84955 - description: The cost center (element 3) of the processing failure. + description: The value of th element on which the validation failed. - in: query - name: costType + name: reasonCode schema: type: string - example: 619031 - description: The cost type (element 2) of the processing failure. + example: "002" + description: The code of the validation failure reason. - in: query - name: documentDate + name: reasonDescription schema: type: string - format: date - example: 2024-10-04 - description: The document date of the processing failure. + example: Contra account does not exist. + description: The description of the validation failure reason. - in: query - name: documentCode + name: resolved + schema: + type: boolean + example: true + description: Whether the failure is resolved. + - in: query + name: change schema: type: string - example: VERK_FACTUUR - description: The document code of the processing failure. - - in: query - name: accountingPeriod - schema: - type: string - example: 2024/10 - description: The accounting period of the processing failure. - - in: query - name: transactionDescription - schema: - type: string - example: Dagkaart - description: The transaction description of the processing failure. - - in: query - name: contraAccount - schema: - type: string - example: 220.10419 - description: The contra account of the processing failure. - - in: query - name: status - schema: - type: array - items: - type: string - example: [open, rejected] - explode: false - description: The status of the processing failure. - - in: query - name: minOccurences - schema: - type: integer - example: 1 - description: Minimum number of occurences. - - in: query - name: maxOccurences - schema: - type: integer - example: 3 - description: Maximum number of occurences. + example: Adapt config + description: Description of what was changed to resolve the failure. responses: "200": description: OK @@ -473,60 +452,6 @@ paths: application/json: schema: $ref: "#/components/schemas/ProcessingFailuresPatchResponseBody" - /processingfailures/{processingFailureId}/processingfailureinstances: - parameters: - - in: path - name: processingFailureId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: true - description: The id of the processing failure. - post: - summary: Add a processing failure instance to a processing failure. - description: Add a processing failure instance to a processing failure. - tags: - - Failures v2 - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ProcessingFailureInstancesPostRequestBody" - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/ProcessingFailureInstancesPostResponseBody" - /processingfailureinstances/{processingFailureInstanceId}: - parameters: - - in: path - name: processingFailureInstanceId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: true - description: The id of the processing failure instance. - patch: - summary: Update processing failure instance. - description: Update processing failure instance. - tags: - - Failures v2 - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ProcessingFailureInstancesPatchRequestBody" - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ProcessingFailureInstancesPatchResponseBody" /productmetadata: get: summary: Find product metadata. @@ -1373,19 +1298,6 @@ paths: application/json: schema: $ref: "#/components/schemas/ConcessionsGetResponseBody" - /failurereasons: - get: - summary: Get all failure reasons. - description: Get all failure reasons. - tags: - - References v2 - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/FailureReasonsGetResponseBody" components: securitySchemes: bearerToken: @@ -1451,6 +1363,7 @@ components: example: debit productCode: type: string + nullable: true example: HTM-MND-20 status: type: string @@ -1537,6 +1450,7 @@ components: example: debit productCode: type: string + nullable: true example: HTM-MND-20 status: type: string @@ -1623,6 +1537,7 @@ components: example: debit productCode: type: string + nullable: true example: HTM-MND-20 required: - sourceName @@ -1705,34 +1620,43 @@ components: properties: name: type: string + nullable: true example: HTM Maandkorting 20% quantity: type: integer + nullable: true example: 1 taxCode: type: string + nullable: true example: V21 amountExclTax: type: integer + nullable: true example: 100 amountInclTax: type: integer + nullable: true example: 121 amountTax: type: integer + nullable: true example: 21 occurredOn: type: string + nullable: true format: date-time example: 2024-10-04T00:00:00Z type: type: string + nullable: true enum: - debit - credit example: debit productCode: type: string + nullable: true example: HTM-MND-20 status: type: string @@ -1764,57 +1688,36 @@ components: ProcessingFailuresPostRequestBody: type: object properties: - department: + timestamp: type: string - nullable: true - example: 900 - costCenter: + format: date-time + example: 2022-01-01 00:00:00 + element: + type: string + example: costCenter + value: type: string - nullable: true example: 84955 - costType: + reasonCode: + type: string + example: "002" + reasonDescription: + type: string + example: Contra account does not exist. + resolved: + type: boolean + example: false + change: type: string nullable: true - example: 619031 - documentDate: - type: string - format: date - nullable: true - example: 2022-01-01 - documentCode: - type: string - nullable: true - example: VERK_FACTUUR - accountingPeriod: - type: string - nullable: true - example: 2024/10 - transactionDescription: - type: string - nullable: true - example: Dagkaart - contraAccountNumber: - type: string - nullable: true - example: 220.10419 - status: - type: string - enum: - - open - - returned to trx-db - - returned to src - example: open - occurence: - type: integer - example: 1 - processingFailureInstances: - type: array - items: - $ref: "#/components/schemas/ProcessingFailureInstancesPostRequestBody" + example: Adapt config required: - - status - - occurence - - processingFailureInstances + - timestamp + - element + - value + - reasonCode + - reasonDescription + - resolved ProcessingFailuresPostResponseBody: type: object properties: @@ -1840,86 +1743,38 @@ components: type: string format: uuid example: 2d77d978-7141-499a-84ad-93fad8ee03ce - department: + timestamp: type: string - nullable: true - example: 900 - costCenter: + format: date-time + example: 2022-01-01 00:00:00 + element: + type: string + example: costCenter + value: type: string - nullable: true example: 84955 - costType: + reasonCode: + type: string + example: "002" + reasonDescription: + type: string + example: Contra account does not exist. + resolved: + type: boolean + example: false + change: type: string nullable: true - example: 619031 - documentDate: - type: string - format: date - nullable: true - example: 2022-01-01 - documentCode: - type: string - nullable: true - example: VERK_FACTUUR - accountingPeriod: - type: string - nullable: true - example: 2024/10 - transactionDescription: - type: string - nullable: true - example: Dagkaart - contraAccountNumber: - type: string - nullable: true - example: 220.10419 - status: - type: string - enum: - - open - - returned to trx-db - - returned to src - example: open - occurence: - type: integer - example: 1 - processingFailureInstances: - type: array - items: - type: object - properties: - processingFailureInstanceId: - type: string - format: uuid - example: 9afa9a6b-5b6a-4b0a-9c9e-4b0a5b6a4b0a - timestamp: - type: string - format: date-time - example: 2022-01-01 00:00:00 - failureReason: - $ref: "#/components/schemas/FailureReason" - element: - type: string - example: costCenter - occurence: - type: integer - example: 1 - change: - type: string - nullable: true - example: Adapt config - required: - - processingFailureInstanceId - - timestamp - - failureReason - - element - - occurence + example: Adapt config required: - processingFailureId - transactionItemId - - status - - occurence - - processingFailureInstances + - timestamp + - element + - value + - reasonCode + - reasonDescription + - resolved href: type: string nullable: true @@ -1928,18 +1783,14 @@ components: ProcessingFailuresPatchRequestBody: type: object properties: - status: + resolved: + type: boolean + nullable: true + example: true + change: type: string - enum: - - open - - returned to trx-db - - returned to src nullable: true - example: returned to trx-db - occurence: - type: integer - nullable: true - example: 2 + example: Adapt config ProcessingFailuresPatchResponseBody: type: object properties: @@ -1949,65 +1800,6 @@ components: example: 37a8095b-19db-498f-9349-5f37d21c5bdf required: - processingFailureId - ProcessingFailureInstancesPostRequestBody: - type: object - properties: - timestamp: - type: string - format: date-time - example: 2022-01-01 00:00:00 - failureReasonId: - type: integer - example: 1 - element: - type: string - example: costCenter - occurence: - type: integer - example: 1 - change: - type: string - nullable: true - example: Adapt config - required: - - timestamp - - failureReason - - element - - occurence - ProcessingFailureInstancesPostResponseBody: - type: object - properties: - processingFailureInstanceId: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: - - processingFailureInstanceId - ProcessingFailureInstancesPatchRequestBody: - type: object - properties: - timestamp: - type: string - format: date-time - nullable: true - example: 2022-01-01 00:00:00 - occurence: - type: integer - nullable: true - example: 1 - change: - type: string - nullable: true - example: Adapt config - ProcessingFailureInstancesPatchResponseBody: - type: object - properties: - processingFailureInstanceId: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: - - processingFailureInstanceId TransactionAuditTrailsPostRequestBody: type: object properties: @@ -2964,18 +2756,6 @@ components: nullable: true description: URI for pagination. example: null - FailureReasonsGetResponseBody: - type: object - properties: - failureReasons: - type: array - items: - $ref: '#/components/schemas/FailureReason' - href: - type: string - nullable: true - description: URI for pagination. - example: null ContraAccountMetadata: type: object properties: @@ -3057,22 +2837,6 @@ components: - rejectionProcessing - rejectionInfo - validFrom - FailureReason: - type: object - properties: - failureReasonId: - type: integer - example: 2 - reasonCode: - type: string - example: "002" - reasonDesc: - type: string - example: Contra account does not exist - required: - - failureReasonId - - reasonCode - - reasonDesc rfc9457: type: object properties: -- 2.45.2 From 90e493fb0726bc8b99f9566ed61231f48e41a5f1 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 6 Feb 2025 12:48:13 +0100 Subject: [PATCH 069/372] OVPAY-1518 - Update TransactionAuditTrails. --- src/openapi/fiko/fiko-crud.yaml | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 8f7633c..3be6d63 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -327,9 +327,18 @@ paths: type: array items: type: string - example: [created, succeeded, failed] + example: [create, update] explode: false description: The action of the event. + - in: query + name: status + schema: + type: array + items: + type: string + example: [created, succeeded, failed, returned to trx-db, returned to src, re-entered] + explode: false + description: The status of the transaction item. - in: query name: description schema: @@ -1811,6 +1820,12 @@ components: format: date-time example: 2022-01-01 00:00:00 action: + type: string + enum: + - create + - update + example: create + status: type: string enum: - created @@ -1818,6 +1833,7 @@ components: - failed - returned to trx-db - returned to src + - re-entered example: created description: type: string @@ -1832,6 +1848,7 @@ components: - user - timestamp - action + - status TransactionAuditTrailsPostResponseBody: type: object properties: @@ -1865,6 +1882,12 @@ components: format: date-time example: 2022-01-01 00:00:00 action: + type: string + enum: + - create + - update + example: create + status: type: string enum: - created @@ -1872,6 +1895,7 @@ components: - failed - returned to trx-db - returned to src + - re-entered example: created description: type: string @@ -1888,6 +1912,7 @@ components: - user - timestamp - action + - status href: type: string nullable: true -- 2.45.2 From 5fab4e8dcc2b5efac2154709c90a8e06ff892a6b Mon Sep 17 00:00:00 2001 From: Max Martens Date: Mon, 10 Feb 2025 17:05:40 +0100 Subject: [PATCH 070/372] Process feedback Remove 403 error description, add 404 example in correct RFC9457 format, refactor example labels, remove non-occurring errors --- src/openapi/products/SE-products.yaml | 196 +++++++------------------- 1 file changed, 50 insertions(+), 146 deletions(-) diff --git a/src/openapi/products/SE-products.yaml b/src/openapi/products/SE-products.yaml index b5eb4f7..0353d89 100644 --- a/src/openapi/products/SE-products.yaml +++ b/src/openapi/products/SE-products.yaml @@ -50,7 +50,7 @@ paths: { "Entries": [] } - getListOneProductTouchpointId1: + List containing one product with 4 currently active SellingPeriods (called by touchpointId 1): summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 1) description: Only two sellingPeriods for touchpoint 1 and/or 2 (part of same retailer) are returned - the price for touchpointId 1 is returned value: @@ -83,7 +83,7 @@ paths: } ] } - getListOneProductTouchpointId3: + List containing one product with 4 currently active SellingPeriods (called by touchpointId 3): summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 3) description: Only two sellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned - the price for touchpointId 3 is returned value: @@ -116,7 +116,7 @@ paths: } ] } - getListOneProductNoPriceTouchpointId3: + List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4): summary: List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4) description: Product is still returned (because touchpointId 3 is part of same retailer) but no price, as touchpointId 4 is not allowed to sell this product. value: @@ -148,7 +148,7 @@ paths: } ] } - getListMultipleProductsTouchpointId3: + List containing multiple products (called by touchpointId 3): summary: List containing multiple products (called by touchpointId 3) description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned value: @@ -211,30 +211,6 @@ paths: } ] } - '400': - description: '400' - content: - application/json: - schema: - $ref: '#/components/schemas/400Response' - '401': - description: '401' - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '404': - description: '404' - content: - application/json: - schema: - $ref: '#/components/schemas/404Response' - '500': - description: '500' - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' /products/{productId}: get: tags: @@ -242,16 +218,18 @@ paths: summary: Get more details for a single HTM product (including all child products), specified by the productId description: |- Get more details for a single HTM product (including all child products/productVariants), specified by the productId. \ - Only information that is allowed to be seen by the calling touchpoint is returned; i.e. only currently + Only information that is allowed to be seen by the calling touchpoint is returned - i.e. only currently active selling periods and prices for the calling touchpoint are returned. Future/past prices and prices for other touchpoints are thus filtered out. - The response contains the full product tree, including all child products (`productVariants`) of the given productId. + The response contains a product tree, including all child products (`productVariants`) of the given + productId that the touchpoint is allowed to see and/or sell. - Touchpoints can only retrieve details for products that they are allowed to SELL at the time of the request (i.e. its touchpointId is included in the - `sellableTouchPointIds` array in the products list response). A touchpoint can determine its own touchpointId by checking the `X-HTM-TOUCHPOINT-ID-HEADER` HTTP header. - - When a touchpoint tries to retrieve details for a product that it is not allowed to sell, a 403 error is thrown. + Touchpoints can only retrieve details for products that they are allowed to see and/or sell at the time of the request + (i.e. the product is returned in the products list response). + Thus, productVariants that are not available to the calling touchpoint are not returned in the response. + + When no product exists for the given productId, a 404 Error response is returned. parameters: - name: productId in: path @@ -269,7 +247,7 @@ paths: schema: $ref: '#/components/schemas/ProductPayloadResponse' examples: - getDetails90DiscountPilotProductTouchpointId3: + 90% Discount F&F pilot product (called by touchpointId 3): summary: 90% Discount F&F pilot product (called by touchpointId 3) description: |- All details (that the calling touchpoint is allowed to see) for the 90% Discount F&F pilot product.\ @@ -402,7 +380,7 @@ paths: "purchasePrices": null, "productVariants": null } - getDetails20DiscountPilotProductTouchpointId3: + 20% Discount product (called by touchpointId 4): summary: 20% Discount product (called by touchpointId 4) description: |- All details (that the calling touchpoint is allowed to see) for the 20% Discount product.\ @@ -774,7 +752,7 @@ paths: } ] } - getDetailsTreeRegioVrijTouchpointId3: + Regio Vrij product and (part of) its productVariants (called by touchpointId 3): summary: Regio Vrij product and (part of) its productVariants (called by touchpointId 3) description: |- All details (that the calling touchpoint is allowed to see) for the parent Regio Vrij product @@ -1854,40 +1832,23 @@ paths: } ] } - '401': - description: '401' - content: - application/json: - schema: - $ref: '#/components/schemas/401Response' - '403': - description: '403' - content: - application/json: - schema: - $ref: '#/components/schemas/403Response' - examples: - Not allowed to see product details: - summary: Not allowed to see product details - value: - { - "code": "403", - "type": "Forbidden", - "message": "Touchpoint not authorized to see product details", - "description": "The touchpoint is currently not allowed to sell this product and thus can not see its details" - } '404': description: '404' content: application/json: schema: - $ref: '#/components/schemas/404Response' - '500': - description: '500' - content: - application/json: - schema: - $ref: '#/components/schemas/500Response' + $ref: '#/components/schemas/rfc9457Response' + examples: + Non-existing productId: + summary: Non-existing productId + value: + { + "type": "https://www.htm.nl/api/v1/404Error", + "title": "Product not found.", + "detail": "No product found for productId: 1000.", + "instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c", + "apiErrorCode": "htm.api.err.404.2" + } components: schemas: TaxMetadataResponse: @@ -2524,91 +2485,34 @@ components: type: string format: date-time-offset example: '2024-09-03T10:01:34.000+00:00' - 400Response: + rfc9457Response: type: object properties: - code: - type: string - example: '400' type: type: string - message: + format: url + example: "https://www.htm.nl/api/v1/rfc9457Error" + title: type: string - example: Bad Request - description: + description: "Short summary of the error." + example: "The request is not valid." + detail: type: string - example: '''2023-02-01 00:00:00'' is not a valid Datetime' - apiErrorCode: + description: "More detailed descriptionof the error." + example: "Some required parameters are missing." + instance: type: string - example: htm.api.err.40xxx - 401Response: - type: object - properties: - code: + description: "Unique identifier to correlate this specific error with logging in other applications." + example: "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c" + additionalProperty1: type: string - example: '401' - type: - type: string - message: - type: string - example: Invalid Credentials - description: - type: string - example: >- - Invalid Credentials. Make sure you have provided the correct - security credentials - apiErrorCode: - type: string - example: htm.api.err.40xxx - 403Response: - type: object - properties: - code: - type: string - example: '403' - type: - type: string - example: "Forbidden" - message: - type: string - example: Touchpoint not authorized to see product details - description: - type: string - example: The touchpoint is currently not allowed to sell this product and thus can not see its details - apiErrorCode: - type: string - example: htm.api.err.40xxx - 404Response: - type: object - properties: - code: - type: string - example: '404' - type: - type: string - example: Status report - message: - type: string - example: Not Found - description: - type: string - example: The requested resource is not available. - apiErrorCode: - type: string - example: htm.api.err.40xxx - 500Response: - type: object - properties: - code: - type: string - example: '500' - type: - type: string - message: - type: string - example: Internal Server Error - description: - type: string - apiErrorCode: - type: string - example: htm.api.err.40xxx + description: "Example of an additional property value to be used for error reporting." + example: "additionalValue1" + additionalProperty2: + type: array + description: "Example of an additional property array to be used for error reporting." + items: + type: string + example: + - "additionalValue2-1" + - "additionalValue2-2" \ No newline at end of file -- 2.45.2 From d87b3bb3814e2c86454a8026aac0bc6460f40e56 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Mon, 10 Feb 2025 17:12:54 +0100 Subject: [PATCH 071/372] Fix productGroupMetadata in examples --- src/openapi/products/SE-products.yaml | 32 ++++++++++++++++++--------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/openapi/products/SE-products.yaml b/src/openapi/products/SE-products.yaml index 0353d89..1e26d89 100644 --- a/src/openapi/products/SE-products.yaml +++ b/src/openapi/products/SE-products.yaml @@ -253,7 +253,7 @@ paths: All details (that the calling touchpoint is allowed to see) for the 90% Discount F&F pilot product.\ Even though this product has sellingPeriods for multiple touchpoints, only the currently active sellingPeriod and price for touchpointId 3 are returned. - This product has no child products, so its `productVariants` tree only has one layer of depth. + This product has no child products, so its `productVariants` array is empty. value: { "productId": 24, @@ -500,7 +500,19 @@ paths: "productCode": "HTM-30001-ML", "gboPackageTemplateId": "30001", "tapConnectProductCode": null, - "productGroupMetadata": null, + "productGroupMetadata": { + "productGroupMetadataId": "WIP", + "productGroupCode": "WIP", + "department": "WIP", + "costCenter": "WIP", + "costType": "WIP", + "description": "Work in Progress - will follow later, when FIKO is implemented", + "user": "WIP", + "documentCode": "WIP", + "timestampUpdated": "2024-09-03T15:07:53.470+00:00", + "validFrom": "2024-08-01T00:00:00.000+00:00", + "validUntil": "2025-08-01T00:00:00.000+00:00" + }, "productName": "HTM 20% Korting (losse maand)", "productDescription": "Reis een maand lang met 20% korting op je betaalpas bij HTM.", "validityPeriod": { @@ -623,14 +635,14 @@ paths: "gboPackageTemplateId": "30001", "tapConnectProductCode": null, "productGroupMetadata": { - "productGroupMetadataId": "501B17EF-36C4-4039-B92C-6517969B464E", - "productGroupCode": "PG001", - "department": "Electronics", - "costCenter": "CC101", - "costType": "TypeA", - "description": "Group for electronic products", - "user": "2024-09-03T15:07:53.470+00:00", - "documentCode": "DOC001", + "productGroupMetadataId": "WIP", + "productGroupCode": "WIP", + "department": "WIP", + "costCenter": "WIP", + "costType": "WIP", + "description": "Work in Progress - will follow later, when FIKO is implemented", + "user": "WIP", + "documentCode": "WIP", "timestampUpdated": "2024-09-03T15:07:53.470+00:00", "validFrom": "2024-08-01T00:00:00.000+00:00", "validUntil": "2025-08-01T00:00:00.000+00:00" -- 2.45.2 From 5ebc012ceb1637bcc5d6b335108cfef2bca28270 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 10 Feb 2025 17:46:17 +0100 Subject: [PATCH 072/372] updated existing CRUD with valid examples for stub --- src/openapi/customers/customers-crud-v2.yaml | 699 +++++++++++++------ 1 file changed, 472 insertions(+), 227 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 755d2c9..d94b1ca 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1,15 +1,116 @@ openapi: "3.0.3" info: title: ABT Customers CRUD APIs v2 - version: "1.0" + version: "2.0" description: CRUD APIs for ABT Customer database. These are NOT the functional APIs from Service Engine. servers: - - url: https://api.integratielaag.nl + - url: https://api.integratielaag.nl/abt/abtcustomers/2.0 paths: /customers: + post: + tags: + - Customer + summary: Create a customer profile + description: >- + Create a customer profile in the ABT database with status ACTIVE and + debtorStatus Inactive with a start date based on the timestamp of this + post call. + + - Requested format for postal code: + - 0000AA + parameters: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/postCustomerProfile" + examples: + minimumProfile: + value: {} + basicCustomerProfile: + value: + debtorStatusId: 2 + person: + birthname: Jan + surname: Jansen + emailAddress: j.jansen@hatseflats.nl + fullCustomerProfile: + value: + customerPreference: + languageId: 1 + debtorStatusId: 2 + person: + birthname: Jan + surname: Jansen + prefix: dhr + suffix: jr + dateOfBirth: "1970-01-01" + emailAddress: j.jansen@hatseflats.nl + addresses: + - street: Laan van Meerdervoort + houseNumber: 5 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: true + addressTypeId: 1 + - street: Beeklaan + houseNumber: 30 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: false + addressTypeId: 2 + phones: + - number: "6123456789" + countryCode: "+31" + phoneTypeId: 1 + isPreferred: true + - number: "7012345678" + countryCode: "+31" + phoneTypeId: 2 + isPreferred: false + required: true + responses: + "201": + description: Successful created a customer profile + content: + application/json: + schema: + $ref: "#/components/schemas/postCustomerProfileResponse" + examples: + customerProfileCreated: + summary: customerProfileCreated + description: >- + Successfully created a customer profile + value: + customerProfileId: 1 + customerNumber: 1000001 + "400": + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + invalidDataTypeError: + summary: invalidDataTypeError + description: >- + The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). + value: + type: https://htm.nl/api/v1/probs/bad-request + title: Your request contains an invalid datatype + detail: '''2023-02-01 00:00:00'' is not a valid Datetime' + instance: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited get: tags: - - ABTCustomers + - Customer summary: Search customer profiles description: >- Search for all customer profile list in the ABT database matching given query parameters @@ -177,13 +278,16 @@ paths: example: Mijn ING bankrekening responses: 200: - description: Successfully retrieved customer profile(s) + description: Ok content: application/json: schema: $ref: "#/components/schemas/getCustomerProfiles" examples: - fullCustomerProfile: + getCustomersMultiple: + summary: getCustomersMultiple + description: >- + Found multiple customer profiles matching the search parameters, does not return the financial details value: customers: - customerProfileId: 1 @@ -205,11 +309,6 @@ paths: customerStatusId: 2 fromInclusive: "2022-08-04 15:01:00.000" toInclusive: "2022-08-05 15:01:00.000" - - customerStatus: - name: Blocked - customerStatusId: 3 - fromInclusive: "2022-08-05 15:01:00.000" - toInclusive: null person: birthname: Pieter surname: De valen @@ -323,6 +422,11 @@ paths: name: Blocked customerStatusId: 3 fromInclusive: "2022-08-05 15:01:00.000" + toInclusive: "2023-08-05 15:01:00.000" + - customerStatus: + name: Active + customerStatusId: 2 + fromInclusive: "2023-08-05 15:01:00.000" toInclusive: null person: birthname: Pieter @@ -415,163 +519,366 @@ paths: timestamp: "2023-10-20T17:05:52.000+02:00" correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 href: null + getCustomerActive: + summary: getCustomerActive + description: >- + Found a single customerProfile with an active status + value: + customers: + - customerProfileId: 1 + customerNumber: 1000001 + debtorNumber: DB100001 + debtorStatus: + debtorStatusId: 1 + name: Inactive + vascustomerNumber: CST005 + customerPreference: + language: + languageId: 1 + name: Dutch + ietfCode: nl-NL + iso639Code: nl + customerStatusInstances: + - customerStatus: + name: Active + customerStatusId: 2 + fromInclusive: "2022-08-04 15:01:00.000" + toInclusive: null + person: + birthname: Pieter + surname: De valen + prefix: De + suffix: PhD + dateOfBirth: "2002-10-29" + emailAddresses: TEST@HTM.NL + addresses: + - addressId: 1 + street: mystreet + houseNumber: 1 + houseNumberSuffix: null + postalCode: 0000AA + city: Den Haag + country: NL + isPreferred: false + addressType: + addressTypeId: 2 + name: Office + - addressId: 2 + street: mystreet 33 + houseNumber: 1 + houseNumberSuffix: null + postalCode: 4455CA + city: Den BOSCH + country: NL + isPreferred: true + addressType: + addressTypeId: 2 + name: Office + phones: + - phoneId: 1 + number: "3112345678" + countryCode: "+31" + phoneType: + phoneTypeId: 1 + name: Home + isPreferred: true + - phoneId: 2 + number: "333225588" + countryCode: "+31" + phoneType: + phoneTypeId: 2 + name: Work + isPreferred: false + ovChipcards: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: "2023-01-01" + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: "2025-01-01" + alias: alias + ovPayTokens: + - ovPayTokenId: 126 + tokenType: + tokenTypeId: 1 + name: EMV + xTat: 0115b0df-db38-4702-8811-6f7de00db3ac + xBot: 71a88843-32b8-4d52-ac25-de2458c47775 + alias: alias + lastDigits: "5678" + ovpasNumber: null + tokenStatus: + tokenStatusId: 2 + name: Active + expirationDate: "2025-04-20T17:05:52.000+02:00" + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenType: + tokenTypeId: 2 + name: OV-pas physical + xTat: 0115b0df-db38-4702-8811-6f7de00db3ac + xBot: 71a88843-32b8-4d52-ac25-de2458c47775 + alias: alias + lastDigits: "5674" + ovpasNumber: OV34568 + tokenStatus: + tokenStatusId: 2 + name: Active + expirationDate: "2024-04-20T17:05:52.000+02:00" + replacedByTokenId: 2 + auditTrails: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: "2023-10-20T17:05:52.000+02:00" + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + href: null + getCustomerBlocked: + summary: getCustomerBlocked + description: >- + Found a single customerProfile with a blocked status + value: + customers: + - customerProfileId: 1 + customerNumber: 1000001 + debtorNumber: DB100001 + debtorStatus: + debtorStatusId: 2 + name: Active + vascustomerNumber: CST005 + customerPreference: + language: + languageId: 1 + name: Dutch + ietfCode: nl-NL + iso639Code: nl + customerStatusInstances: + - customerStatus: + name: Active + customerStatusId: 2 + fromInclusive: "2022-08-04 15:01:00.000" + toInclusive: "2022-08-05 15:01:00.000" + - customerStatus: + name: Blocked + customerStatusId: 3 + fromInclusive: "2022-08-05 15:01:00.000" + toInclusive: null + person: + birthname: Pieter + surname: De valen + prefix: De + suffix: PhD + dateOfBirth: "2002-10-29" + emailAddresses: TEST@HTM.NL + addresses: + - addressId: 1 + street: mystreet + houseNumber: 1 + houseNumberSuffix: null + postalCode: 0000AA + city: Den Haag + country: NL + isPreferred: false + addressType: + addressTypeId: 2 + name: Office + - addressId: 2 + street: mystreet 33 + houseNumber: 1 + houseNumberSuffix: null + postalCode: 4455CA + city: Den BOSCH + country: NL + isPreferred: true + addressType: + addressTypeId: 2 + name: Office + phones: + - phoneId: 1 + number: "3112345678" + countryCode: "+31" + phoneType: + phoneTypeId: 1 + name: Home + isPreferred: true + - phoneId: 2 + number: "333225588" + countryCode: "+31" + phoneType: + phoneTypeId: 2 + name: Work + isPreferred: false + ovChipcards: + - ovChipCardId: 1 + chipCardNumber: 1234123412341234 + validUntil: "2023-01-01" + alias: alias + - ovChipCardId: 2 + chipCardNumber: 1234123412341235 + validUntil: "2025-01-01" + alias: alias + ovPayTokens: + - ovPayTokenId: 126 + tokenType: + tokenTypeId: 1 + name: EMV + xTat: 0115b0df-db38-4702-8811-6f7de00db3ac + xBot: 71a88843-32b8-4d52-ac25-de2458c47775 + alias: alias + lastDigits: "5678" + ovpasNumber: null + tokenStatus: + tokenStatusId: 2 + name: Active + expirationDate: "2025-04-20T17:05:52.000+02:00" + replacedByTokenId: 1 + - ovPayTokenId: 127 + tokenType: + tokenTypeId: 2 + name: OV-pas physical + xTat: 0115b0df-db38-4702-8811-6f7de00db3ac + xBot: 71a88843-32b8-4d52-ac25-de2458c47775 + alias: alias + lastDigits: "5674" + ovpasNumber: OV34568 + tokenStatus: + tokenStatusId: 2 + name: Active + expirationDate: "2024-04-20T17:05:52.000+02:00" + replacedByTokenId: 2 + auditTrails: + - auditTrailId: 1 + customerProfileId: 1 + action: insert + user: user + timestamp: "2023-10-20T17:05:52.000+02:00" + correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 + href: null 400: description: Bad Request content: application/json: schema: - $ref: "#/components/schemas/400Response" - 401: - description: Unauthorized - content: - application/json: - schema: - $ref: "#/components/schemas/401Response" - 404: - description: Not Found - content: - application/json: - schema: - $ref: "#/components/schemas/404Response" - 500: - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/500Response" + $ref: "#/components/schemas/ErrorResponse" + examples: + invalidDataTypeError: + summary: invalidDataTypeError + description: >- + The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). + value: + type: https://htm.nl/api/v1/probs/bad-request + title: Your request contains an invalid datatype + detail: '''2023-02-01 00:00:00'' is not a valid Datetime' + instance: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b security: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited - post: + /customers/{customerProfileId}: + patch: tags: - - ABTCustomers - summary: Create a customer profile + - Customer + summary: Modify a customer element description: >- - Create a customer profile in the ABT database with status ACTIVE and - debtorStatus Inactive with a start date based on the timestamp of this - post call. - - Requested format for postal code: - - 0000AA - parameters: [] + parameters: + - name: customerProfileId + in: path + required: true + schema: + type: integer + example: 1 requestBody: content: application/json: schema: - $ref: "#/components/schemas/postCustomerProfile" + $ref: "#/components/schemas/customersEntity" examples: - minimumProfile: - value: {} - basicCustomerProfile: + customers: value: debtorStatusId: 2 - person: - birthname: Jan - surname: Jansen - emailAddress: j.jansen@hatseflats.nl - fullCustomerProfile: - value: - customerPreference: - languageId: 1 - debtorStatusId: 2 - person: - birthname: Jan - surname: Jansen - prefix: dhr - suffix: jr - dateOfBirth: "1970-01-01" - emailAddress: j.jansen@hatseflats.nl - addresses: - - street: Laan van Meerdervoort - houseNumber: 5 - houseNumberSuffix: B - postalCode: 2500AA - city: Den Haag - country: NL - isPreferred: true - addressTypeId: 1 - - street: Beeklaan - houseNumber: 30 - houseNumberSuffix: B - postalCode: 2500AA - city: Den Haag - country: NL - isPreferred: false - addressTypeId: 2 - phones: - - number: "6123456789" - countryCode: "+31" - phoneTypeId: 1 - isPreferred: true - - number: "7012345678" - countryCode: "+31" - phoneTypeId: 2 - isPreferred: false required: true responses: "201": - description: Successful created a customer profile + description: Successfully modified a customer content: application/json: schema: - $ref: "#/components/schemas/postCustomerProfileCustomerNumberResponse" - "400": - description: Bad Request + $ref: "#/components/schemas/patchCustomerProfileResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerProfileId}/customerPreferences: + post: + tags: + - CustomerPreferences + summary: Create a customer preference element + description: >- + + parameters: + - name: customerProfileId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/customerPreferencesEntity" + examples: + customerPreference: + value: + customerPreference: + languageId: 1 + required: true + responses: + "201": + description: Successfully created a customer preference content: application/json: schema: - $ref: "#/components/schemas/400Response" - examples: - InvalidPostalCodeFormatForAddressCountryNLError: - value: - code: "400" - type: Bad Request - Input parameters - message: Invalid input parameter for country validation (NL). - description: >- - ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match - input string \"2500 AA\ - MissingRequiredParameterError: - value: - code: "400" - type: Bad Request - Input parameters - message: Invalid input parameter. - description: >- - object has missing required properties - ([\"addressTypeId\"]) - InvalidDataTypeError: - value: - code: "400" - type: Bad Request - Input parameters - message: Invalid input parameter. - description: >- - Bad Request - please verify the value for the following - field \"id\ - "401": - description: Unauthorized + $ref: "#/components/schemas/postCustomerPreferencesResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customerPreferences/{customerPreferenceId}: + patch: + tags: + - CustomerPreferences + summary: Modify a customer preference element + description: >- + + parameters: + - name: customerPreferenceId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/customerPreferencesEntity" + examples: + customerPreference: + value: + customerPreference: + languageId: 1 + required: true + responses: + "200": + description: Successfully modified a customer preference content: application/json: schema: - $ref: "#/components/schemas/401Response" - "409": - description: Conflict - content: - application/json: - schema: - $ref: "#/components/schemas/409Response" - examples: - emailAddressAlreadyPresent: - value: - code: "409" - type: Conflict - message: emailAddress already exists. - description: "" - "500": - description: Internal Server Error - content: - application/json: - schema: - $ref: "#/components/schemas/500Response" + $ref: "#/components/schemas/patchCustomerPreferencesResponse" security: - default: [] x-auth-type: Application & Application User @@ -1179,13 +1486,21 @@ components: type: object properties: languageId: - type: string - postCustomerProfileCustomerNumberResponse: + type: integer + customersEntity: + type: object + properties: + debtorStatusId: + type: integer + postCustomerProfileResponse: type: object properties: customerNumber: type: integer - example: 10000001 + example: 10000001 + customerProfileId: + type: integer + example: 1 postCustomerProfileAddressResponse: type: object properties: @@ -1234,15 +1549,24 @@ components: patchCustomerProfileResponse: type: object properties: - customerNumber: + customerProfileId: type: integer - example: 10000001 + example: 1 + postCustomerPreferencesResponse: + type: object + properties: + customerPreferenceId: + type: integer + example: 1 patchCustomerPreferencesResponse: type: object properties: - customerNumber: + customerPreferenceId: type: integer - example: 10000001 + example: 1 + customerLanguageId: + type: integer + example: 1 ovPayTokenGetEntity: type: object properties: @@ -1289,93 +1613,14 @@ components: ovPayTokenId: type: integer example: 1 - 400Response: + ErrorResponse: type: object properties: - code: - type: string - example: "400" type: type: string - message: + title: type: string - example: Bad Request - description: - type: string - example: >- - 'Bad Request: Input parameters missing! Please fill in at least 1 - valid input parameter. - 401Response: - type: object - properties: - code: - type: string - example: "900901" - type: - type: string - message: - type: string - example: Invalid Credentials - description: - type: string - example: >- - Invalid Credentials. Make sure you have provided the correct - security credentials - 404Response: - type: object - properties: - code: - type: string - example: "404" - type: - type: string - example: Status report - message: - type: string - example: Not Found - description: - type: string - example: The requested resource is not available. - 409Response: - type: object - properties: - code: - type: string - example: "409" - type: - type: string - example: Conflict - message: - type: string - example: Entry already exists - description: - type: string - 422Response: - type: object - properties: - code: - type: string - example: "422" - type: - type: string - example: Unprocessable entity - message: - type: string - example: >- - Forbidden state transition requested! From Active to Cleared not - allowed. - description: - type: string - 500Response: - type: object - properties: - code: - type: string - example: "500" - type: - type: string - message: - type: string - example: Internal Server Error - description: + detail: type: string + instance: + type: string \ No newline at end of file -- 2.45.2 From bfb62d7822139b0c5f2009d6f2d6b8f32d7aaf83 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Wed, 12 Feb 2025 17:27:34 +0100 Subject: [PATCH 073/372] Fix parentProducId, remove customerSegments --- src/openapi/products/SE-products.yaml | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/openapi/products/SE-products.yaml b/src/openapi/products/SE-products.yaml index 1e26d89..2ee92fc 100644 --- a/src/openapi/products/SE-products.yaml +++ b/src/openapi/products/SE-products.yaml @@ -496,7 +496,7 @@ paths: "productVariants": [ { "productId": 119, - "parentProductId": null, + "parentProductId": 126, "productCode": "HTM-30001-ML", "gboPackageTemplateId": "30001", "tapConnectProductCode": null, @@ -630,7 +630,7 @@ paths: }, { "productId": 120, - "parentProductId": null, + "parentProductId": 126, "productCode": "HTM-30001-MA", "gboPackageTemplateId": "30001", "tapConnectProductCode": null, @@ -1087,14 +1087,6 @@ paths: }, "marketSegments": null, "customerSegments": [ - { - "customerSegmentId": 2, - "name": "Kind (4-11)" - }, - { - "customerSegmentId": 3, - "name": "Jongere (12-18)" - }, { "customerSegmentId": 4, "name": "Volwassene (19-64)" -- 2.45.2 From 96f77d8f2f038e512b5444d8f29f43354f640b3f Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 17 Feb 2025 11:16:55 +0100 Subject: [PATCH 074/372] customerStatus --- src/openapi/customers/customers-crud-v2.yaml | 58 ++++++++++++++++++-- 1 file changed, 53 insertions(+), 5 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index d94b1ca..1c3b420 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -18,7 +18,7 @@ paths: - Requested format for postal code: - 0000AA - parameters: [] + parameters: [] requestBody: content: application/json: @@ -794,9 +794,9 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/customersEntity" + $ref: "#/components/schemas/customerEntity" examples: - customers: + customer: value: debtorStatusId: 2 required: true @@ -811,10 +811,47 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited + /customers/{customerProfileId}/customerStatus: + post: + tags: + - Customer + summary: Create a new customerStatus + description: >- + + parameters: + - name: customerProfileId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/customerStatusEntity" + examples: + customerStatus: + value: + customerStatus: + customerStatusId: 2 + required: true + responses: + "201": + description: Successfully created a customer Status + content: + application/json: + schema: + $ref: "#/components/schemas/postCustomerPreferencesResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerProfileId}/customerPreferences: post: tags: - - CustomerPreferences + - Customer summary: Create a customer preference element description: >- @@ -850,7 +887,7 @@ paths: /customerPreferences/{customerPreferenceId}: patch: tags: - - CustomerPreferences + - Customer summary: Modify a customer preference element description: >- @@ -1487,6 +1524,11 @@ components: properties: languageId: type: integer + customerStatusEntity: + type: object + properties: + customerStatusId: + type: integer customersEntity: type: object properties: @@ -1552,6 +1594,12 @@ components: customerProfileId: type: integer example: 1 + postCustomerStatusResponse: + type: object + properties: + customerPreferenceId: + type: integer + example: 1 postCustomerPreferencesResponse: type: object properties: -- 2.45.2 From 0ea5d1532a5ff0bb35ed643fe74a35ffb387c55f Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 17 Feb 2025 11:55:32 +0100 Subject: [PATCH 075/372] address --- src/openapi/customers/customers-crud-v2.yaml | 169 +++++++++++++++++-- 1 file changed, 151 insertions(+), 18 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 1c3b420..5fea95b 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -794,7 +794,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/customerEntity" + $ref: "#/components/schemas/customersEntity" examples: customer: value: @@ -815,7 +815,7 @@ paths: post: tags: - Customer - summary: Create a new customerStatus + summary: Create a new customer status element description: >- parameters: @@ -846,8 +846,7 @@ paths: security: - default: [] x-auth-type: Application & Application User - x-throttling-tier: Unlimited - + x-throttling-tier: Unlimited /customers/{customerProfileId}/customerPreferences: post: tags: @@ -885,41 +884,156 @@ paths: x-auth-type: Application & Application User x-throttling-tier: Unlimited /customerPreferences/{customerPreferenceId}: + patch: + tags: + - Customer + summary: Modify a customer preference element + description: >- + + parameters: + - name: customerPreferenceId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/customerPreferencesEntity" + examples: + customerPreference: + value: + customerPreference: + languageId: 1 + required: true + responses: + "200": + description: Successfully modified a customer preference + content: + application/json: + schema: + $ref: "#/components/schemas/patchCustomerPreferencesResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerProfileId}/addresses: + post: + tags: + - Customer + summary: Add a customer address + description: >- + + parameters: + - name: customerProfileId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/postCustomerAddress" + examples: + customerAddress: + value: + customerAddress: + addressTypeId: 1 + street: Sesamstraat + houseNumber: 1 + houseNumberSuffix: A + postalCode: 1234 AB + city: Den Haag + country: NL + isPreferred: true + required: true + responses: + "201": + description: Successfully created a customer address + content: + application/json: + schema: + $ref: "#/components/schemas/postCustomerProfileAddressResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /addresses/{addressId}: patch: tags: - Customer - summary: Modify a customer preference element + summary: Edit a customer address description: >- - + parameters: - - name: customerPreferenceId + - name: addressId in: path required: true schema: type: integer - example: 1 + example: 2 requestBody: content: application/json: schema: - $ref: "#/components/schemas/customerPreferencesEntity" + $ref: "#/components/schemas/patchCustomerAddress" examples: - customerPreference: + updateAddressTypeId: value: - customerPreference: - languageId: 1 + address: + addressTypeId: 2 required: true responses: "200": - description: Successfully modified a customer preference + description: Successfully modified a customer Address content: application/json: schema: - $ref: "#/components/schemas/patchCustomerPreferencesResponse" + $ref: "#/components/schemas/patchCustomerProfileAddressResponse" security: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited + delete: + tags: + - Customer + summary: Delete a customer address + description: >- + + parameters: + - name: addressId + in: path + required: true + schema: + type: integer + example: 2 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/patchCustomerAddress" + examples: + updateAddressTypeId: + value: + address: + addressTypeId: 2 + required: true + responses: + "200": + description: Successfully modified a customer Address + content: + application/json: + schema: + $ref: "#/components/schemas/patchCustomerProfileAddressResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /ovpaytokens: get: tags: @@ -1519,6 +1633,25 @@ components: type: array items: $ref: '#/components/schemas/phonePostEntity' + postCustomerAddress: + type: object + properties: + street: + type: string + houseNumber: + type: integer + houseNumberSuffix: + type: string + postalCode: + type: string + city: + type: string + country: + type: string + isPreferred: + type: boolean + addressType: + type: integer customerPreferencesEntity: type: object properties: @@ -1546,12 +1679,12 @@ components: postCustomerProfileAddressResponse: type: object properties: - customerNumber: - type: integer - example: 10000001 - addressId: + customerProfileId: type: integer example: 1 + addressId: + type: integer + example: 3 postCustomerProfilePhoneResponse: type: object properties: -- 2.45.2 From dcb7d1b5640a1846a2103e0d183a57b47e6d35bb Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 17 Feb 2025 12:04:17 +0100 Subject: [PATCH 076/372] address --- src/openapi/customers/customers-crud-v2.yaml | 35 ++++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 5fea95b..b15cea2 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1011,24 +1011,12 @@ paths: schema: type: integer example: 2 - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/patchCustomerAddress" - examples: - updateAddressTypeId: - value: - address: - addressTypeId: 2 - required: true responses: "200": - description: Successfully modified a customer Address + description: Successfully deleted a customer Address content: application/json: - schema: - $ref: "#/components/schemas/patchCustomerProfileAddressResponse" + {} security: - default: [] x-auth-type: Application & Application User @@ -1652,6 +1640,25 @@ components: type: boolean addressType: type: integer + patchCustomerAddress: + type: object + properties: + street: + type: string + houseNumber: + type: integer + houseNumberSuffix: + type: string + postalCode: + type: string + city: + type: string + country: + type: string + isPreferred: + type: boolean + addressType: + type: integer customerPreferencesEntity: type: object properties: -- 2.45.2 From 6c229b48b38eaba9c91d73173c8247083bfc90db Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 17 Feb 2025 12:35:20 +0100 Subject: [PATCH 077/372] phone --- src/openapi/customers/customers-crud-v2.yaml | 126 +++++++++++++++++-- 1 file changed, 113 insertions(+), 13 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index b15cea2..1c684ed 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -993,7 +993,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/patchCustomerProfileAddressResponse" + $ref: "#/components/schemas/postCustomerProfileAddressResponse" security: - default: [] x-auth-type: Application & Application User @@ -1021,7 +1021,104 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited - + /customers/{customerProfileId}/phones: + post: + tags: + - Customer + summary: Add a customer phonenumber + description: >- + + parameters: + - name: customerProfileId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/postPhoneEntity" + examples: + customerPhone: + value: + customerPhone: + number: 0701112233 + countryCode: 0031 + phoneTypeId: 1 + isPreferred: true + required: true + responses: + "201": + description: Successfully created a customer phone + content: + application/json: + schema: + $ref: "#/components/schemas/postPhoneResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /phones/{phoneId}: + patch: + tags: + - Customer + summary: Edit a customer phone + description: >- + + parameters: + - name: phoneId + in: path + required: true + schema: + type: integer + example: 2 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/patchPhoneEntity" + examples: + updateAddressTypeId: + value: + address: + addressTypeId: 2 + required: true + responses: + "200": + description: Successfully modified a customer phonenumber + content: + application/json: + schema: + $ref: "#/components/schemas/postPhoneResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + delete: + tags: + - Customer + summary: Delete a customer phone + description: >- + + parameters: + - name: phoneId + in: path + required: true + schema: + type: integer + example: 2 + responses: + "200": + description: Successfully deleted a customer phonenumber + content: + application/json: + {} + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /ovpaytokens: get: tags: @@ -1536,11 +1633,6 @@ components: type: string replacedByTokenId: type: integer - postPhone: - type: object - properties: - phone: - $ref: "#/components/schemas/phonePostEntity" personEntity: type: object properties: @@ -1583,7 +1675,7 @@ components: type: boolean addressTypeId: type: integer - phonePostEntity: + postPhoneEntity: required: - countryCode - number @@ -1598,6 +1690,17 @@ components: type: integer isPreferred: type: boolean + patchPostEntity: + type: object + properties: + number: + type: string + countryCode: + type: string + phoneTypeId: + type: integer + isPreferred: + type: boolean defaultCustomerProfileResponse: type: object properties: @@ -1692,15 +1795,12 @@ components: addressId: type: integer example: 3 - postCustomerProfilePhoneResponse: + postPhoneResponse: type: object properties: - customerNumber: - type: integer - example: 10000001 phoneId: type: integer - example: 1 + example: 2 postCustomerProfileBillingInformationResponse: type: object properties: -- 2.45.2 From c6b53d46accdd69749ebc95221c4f67331273363 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 17 Feb 2025 12:37:13 +0100 Subject: [PATCH 078/372] phones --- src/openapi/customers/customers-crud-v2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 1c684ed..8937e5b 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1690,7 +1690,7 @@ components: type: integer isPreferred: type: boolean - patchPostEntity: + patchPhoneEntity: type: object properties: number: -- 2.45.2 From b3d8d0d053c916800fc7d28017686fdd310b59cd Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 17 Feb 2025 12:38:13 +0100 Subject: [PATCH 079/372] phones --- src/openapi/customers/customers-crud-v2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 8937e5b..7ac8913 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1723,7 +1723,7 @@ components: phones: type: array items: - $ref: '#/components/schemas/phonePostEntity' + $ref: '#/components/schemas/postPhoneEntity' postCustomerAddress: type: object properties: -- 2.45.2 From 8463961f606c72c90ae28845a20e3fd8006ebbbb Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 17 Feb 2025 12:43:19 +0100 Subject: [PATCH 080/372] phones --- src/openapi/customers/customers-crud-v2.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 7ac8913..6b353ad 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1043,7 +1043,7 @@ paths: examples: customerPhone: value: - customerPhone: + phone: number: 0701112233 countryCode: 0031 phoneTypeId: 1 @@ -1051,7 +1051,7 @@ paths: required: true responses: "201": - description: Successfully created a customer phone + description: Successfully created a customer phonenumber content: application/json: schema: @@ -1064,7 +1064,7 @@ paths: patch: tags: - Customer - summary: Edit a customer phone + summary: Edit a customer phonenumber description: >- parameters: @@ -1080,10 +1080,10 @@ paths: schema: $ref: "#/components/schemas/patchPhoneEntity" examples: - updateAddressTypeId: + updatePhoneTypeId: value: - address: - addressTypeId: 2 + phone: + phoneTypeId: 2 required: true responses: "200": -- 2.45.2 From 028f970130f0cc32f5b0d7e8a976203a8a526fda Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 17 Feb 2025 14:22:39 +0100 Subject: [PATCH 081/372] tokens --- src/openapi/customers/customers-crud-v2.yaml | 389 +++++++++++++++++-- 1 file changed, 365 insertions(+), 24 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 6b353ad..69bb821 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -74,7 +74,7 @@ paths: isPreferred: false required: true responses: - "201": + 201: description: Successful created a customer profile content: application/json: @@ -88,7 +88,7 @@ paths: value: customerProfileId: 1 customerNumber: 1000001 - "400": + 400: description: Bad Request content: application/json: @@ -801,7 +801,7 @@ paths: debtorStatusId: 2 required: true responses: - "201": + 201: description: Successfully modified a customer content: application/json: @@ -837,7 +837,7 @@ paths: customerStatusId: 2 required: true responses: - "201": + 201: description: Successfully created a customer Status content: application/json: @@ -873,7 +873,7 @@ paths: languageId: 1 required: true responses: - "201": + 201: description: Successfully created a customer preference content: application/json: @@ -909,7 +909,7 @@ paths: languageId: 1 required: true responses: - "200": + 200: description: Successfully modified a customer preference content: application/json: @@ -952,7 +952,7 @@ paths: isPreferred: true required: true responses: - "201": + 201: description: Successfully created a customer address content: application/json: @@ -988,7 +988,7 @@ paths: addressTypeId: 2 required: true responses: - "200": + 200: description: Successfully modified a customer Address content: application/json: @@ -1012,7 +1012,7 @@ paths: type: integer example: 2 responses: - "200": + 200: description: Successfully deleted a customer Address content: application/json: @@ -1039,7 +1039,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/postPhoneEntity" + $ref: "#/components/schemas/phoneEntity" examples: customerPhone: value: @@ -1050,7 +1050,7 @@ paths: isPreferred: true required: true responses: - "201": + 201: description: Successfully created a customer phonenumber content: application/json: @@ -1078,7 +1078,7 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/patchPhoneEntity" + $ref: "#/components/schemas/phoneEntity" examples: updatePhoneTypeId: value: @@ -1086,7 +1086,7 @@ paths: phoneTypeId: 2 required: true responses: - "200": + 200: description: Successfully modified a customer phonenumber content: application/json: @@ -1110,7 +1110,7 @@ paths: type: integer example: 2 responses: - "200": + 200: description: Successfully deleted a customer phonenumber content: application/json: @@ -1119,10 +1119,347 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited + /customers/{customerProfileId}/ovpaytokens: + post: + tags: + - Ovpay Token + summary: Create a new OVpay token + description: >- + + parameters: + - name: customerProfileId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ovPayTokenEntity" + examples: + EMV token: + value: + ovpaytoken: + tokenTypeId: 1 + xTat: 0115b0df-db38-4702-8811-6f7de00db3ac + xBot: 71a88843-32b8-4d52-ac25-de2458c47775 + alias: Mijn Rabo Pas + tokenStatusId: 2 + expirationDate: "2026-04-20T17:05:52.000+02:00" + OVpas token physical: + value: + ovpaytoken: + tokenTypeId: 2 + xTat: 0115b0df-db38-4702-8811-6f7de00db3ac + xBot: 71a88843-32b8-4d52-ac25-de2458c47775 + alias: Mijn OV Pas + ovpasNumber: 4048453105891361 + tokenStatusId: 2 + expirationDate: "2026-04-20T17:05:52.000+02:00" + required: true + responses: + 201: + description: Successfully created a customer ovpaytoken + content: + application/json: + schema: + $ref: "#/components/schemas/postOvPayTokenResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /ovpaytokens/{ovpaytokenId}: + patch: + tags: + - Ovpay Token + summary: Create a new OVpay token + description: >- + + parameters: + - name: ovpaytokenId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ovPayTokenEntity" + examples: + updateTokenAlias: + value: + ovpaytoken: + alias: "ING pas mobiel" + updateTokenStatus to removed: + value: + ovpaytoken: + tokenStatusId: 6 + replaceToken: + value: + ovpaytoken: + tokenStatusId: 3 + replacedByTokenId: 8 + required: true + responses: + 200: + description: Successfully updated a customer ovpaytoken + content: + application/json: + schema: + $ref: "#/components/schemas/postOvPayTokenResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + delete: + tags: + - Ovpay Token + summary: Delete an Ovpay token + description: >- + + parameters: + - name: ovpaytokenId + in: path + required: true + schema: + type: integer + example: 2 + responses: + 200: + description: Successfully deleted a customer ovpaytoken + content: + application/json: + {} + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /ovpaytokens: get: tags: - - Token + - Ovpay Token + summary: Find OVpay tokens. + description: Find OVpay tokens. + parameters: + - in: query + name: ovPayTokenId + schema: + type: integer + example: 71 + required: false + description: The id of the token. + - in: query + name: customerProfileId + schema: + type: integer + example: 12 + required: false + description: The id of the customer profile. + - in: query + name: tokenTypeId + schema: + type: array + items: + type: integer + example: [1, 2] + explode: false + required: false + description: Filter on possible token types. 1 = EMV, 2 = OV-pas physical, 3 = OV-pas digital. + - in: query + name: xTat + schema: + type: string + format: uuid + example: 700b0516-bf8b-4e6e-bf16-13bfeb078e23 + explode: false + required: false + description: The XTAT of the token. + - in: query + name: xBot + schema: + type: string + format: uuid + example: de1a9a7a-a777-4473-889c-44a3bb07daae + explode: false + required: false + description: The XBOT of the token. + - in: query + name: alias + schema: + type: string + example: Mijn OV-pas + required: false + description: The alias of the token. + - in: query + name: lastDigits + schema: + type: integer + example: 3301 + required: false + description: The last digits of the token. + - in: query + name: ovpasNumber + schema: + type: string + example: 63AW974 + required: false + description: Number of the OVpas. + - in: query + name: tokenStatusId + schema: + type: array + items: + type: integer + example: [1, 2] + explode: false + required: false + description: Filter on possible token statuses. 1 = expired, 2 = active, 3 = replaced, 4 = inactive, 5 = suspended, 6 = removed by customer. + - in: query + name: expirationDate + schema: + type: string + format: date-time + example: 2029-03-22T09:00:00 + required: false + description: The expiration date of the token. + - in: query + name: replacedByTokenId + schema: + type: integer + example: 12 + required: false + description: The id of the token that replaced this token. + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "ovPayTokens": + [ + { + "ovPayTokenId": 71, + "customerProfileId": 12, + "tokenType": + { "tokenTypeId": 2, "name": "OV-pas physical" }, + "xTat": "700b0516-bf8b-4e6e-bf16-13bfeb078e23", + "xBot": "de1a9a7a-a777-4473-889c-44a3bb07daae", + "alias": "Mijn OV-pas", + "lastDigits": 3301, + "ovpasNumber": "63AW974", + "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, + "expirationDate": "2029-03-22T09:00:00", + "replacedByTokenId": 12, + }, + ], + "href": null, + } + /customers/{customerProfileId}/ovchipcards: + post: + tags: + - Ovchipcard + summary: Create a new OVchipcard + description: >- + + parameters: + - name: customerProfileId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ovChipcardEntity" + examples: + ovChipcards: + value: + ovChipcard: + chipCardNumber: 1234123412341234 + validUntil: "2027-01-01" + alias: Mijn chipkaart + required: true + responses: + 201: + description: Successfully created a customer ovchipcard + content: + application/json: + schema: + $ref: "#/components/schemas/postOvChipCardResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /ovchipcards/{ovchipcardId}: + patch: + tags: + - Ovchipcard + summary: Update an ovchipcard + description: >- + + parameters: + - name: ovchipcardId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ovChipcardEntity" + examples: + updateOvChipCardAlias: + value: + ovChipCard: + alias: "Zoon 1 chipkaart" + required: true + responses: + 200: + description: Successfully updated a customer ovchipcard + content: + application/json: + schema: + $ref: "#/components/schemas/postOvChipCardResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + delete: + tags: + - Ovchipcard + summary: Delete an Ovpay token + description: >- + + parameters: + - name: ovpaytokenId + in: path + required: true + schema: + type: integer + example: 2 + responses: + 200: + description: Successfully deleted a customer ovpaytoken + content: + application/json: + {} + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + tags: + - Ovpay Token summary: Find OVpay tokens. description: Find OVpay tokens. parameters: @@ -1633,6 +1970,16 @@ components: type: string replacedByTokenId: type: integer + ovChipcardEntity: + type: object + properties: + chipCardNumber: + type: integer + validUntil: + type: string + format: date + alias: + type: string personEntity: type: object properties: @@ -1690,7 +2037,7 @@ components: type: integer isPreferred: type: boolean - patchPhoneEntity: + phoneEntity: type: object properties: number: @@ -1819,12 +2166,9 @@ components: directDebitMandateId: type: integer example: 1 - postCustomerProfileOvChipCardResponse: + postOvChipCardResponse: type: object properties: - customerNumber: - type: integer - example: 10000001 ovChipCardId: type: integer example: 1 @@ -1892,12 +2236,9 @@ components: type: array items: $ref: "#/components/schemas/ovPayTokenGetEntity" - postCustomerProfileOvPayTokenResponse: + postOvPayTokenResponse: type: object properties: - ovPaytoken: - type: object - example: 10000001 ovPayTokenId: type: integer example: 1 -- 2.45.2 From 8f8a044fdea27ef774a32d8daae1a181a220a52e Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 17 Feb 2025 14:26:37 +0100 Subject: [PATCH 082/372] tokens --- src/openapi/customers/customers-crud-v2.yaml | 139 ++----------------- 1 file changed, 9 insertions(+), 130 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 69bb821..969281a 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1123,7 +1123,7 @@ paths: post: tags: - Ovpay Token - summary: Create a new OVpay token + summary: Create a new ovpay token description: >- parameters: @@ -1174,7 +1174,7 @@ paths: patch: tags: - Ovpay Token - summary: Create a new OVpay token + summary: Update an ovpay token description: >- parameters: @@ -1218,7 +1218,7 @@ paths: delete: tags: - Ovpay Token - summary: Delete an Ovpay token + summary: Delete an ovpay token description: >- parameters: @@ -1242,8 +1242,8 @@ paths: get: tags: - Ovpay Token - summary: Find OVpay tokens. - description: Find OVpay tokens. + summary: Find ovpay tokens. + description: Find ovpay tokens. parameters: - in: query name: ovPayTokenId @@ -1365,7 +1365,7 @@ paths: post: tags: - Ovchipcard - summary: Create a new OVchipcard + summary: Create a new ovchipcard description: >- parameters: @@ -1438,11 +1438,11 @@ paths: delete: tags: - Ovchipcard - summary: Delete an Ovpay token + summary: Delete an ovchipcard description: >- parameters: - - name: ovpaytokenId + - name: ovchipcardId in: path required: true schema: @@ -1450,7 +1450,7 @@ paths: example: 2 responses: 200: - description: Successfully deleted a customer ovpaytoken + description: Successfully deleted a customer ovchipcard content: application/json: {} @@ -1458,127 +1458,6 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited - tags: - - Ovpay Token - summary: Find OVpay tokens. - description: Find OVpay tokens. - parameters: - - in: query - name: ovPayTokenId - schema: - type: integer - example: 71 - required: false - description: The id of the token. - - in: query - name: customerProfileId - schema: - type: integer - example: 12 - required: false - description: The id of the customer profile. - - in: query - name: tokenTypeId - schema: - type: array - items: - type: integer - example: [1, 2] - explode: false - required: false - description: Filter on possible token types. 1 = EMV, 2 = OV-pas physical, 3 = OV-pas digital. - - in: query - name: xTat - schema: - type: string - format: uuid - example: 700b0516-bf8b-4e6e-bf16-13bfeb078e23 - explode: false - required: false - description: The XTAT of the token. - - in: query - name: xBot - schema: - type: string - format: uuid - example: de1a9a7a-a777-4473-889c-44a3bb07daae - explode: false - required: false - description: The XBOT of the token. - - in: query - name: alias - schema: - type: string - example: Mijn OV-pas - required: false - description: The alias of the token. - - in: query - name: lastDigits - schema: - type: integer - example: 3301 - required: false - description: The last digits of the token. - - in: query - name: ovpasNumber - schema: - type: string - example: 63AW974 - required: false - description: Number of the OVpas. - - in: query - name: tokenStatusId - schema: - type: array - items: - type: integer - example: [1, 2] - explode: false - required: false - description: Filter on possible token statuses. 1 = expired, 2 = active, 3 = replaced, 4 = inactive, 5 = suspended, 6 = removed by customer. - - in: query - name: expirationDate - schema: - type: string - format: date-time - example: 2029-03-22T09:00:00 - required: false - description: The expiration date of the token. - - in: query - name: replacedByTokenId - schema: - type: integer - example: 12 - required: false - description: The id of the token that replaced this token. - responses: - 200: - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - example: - { - "ovPayTokens": - [ - { - "ovPayTokenId": 71, - "customerProfileId": 12, - "tokenType": - { "tokenTypeId": 2, "name": "OV-pas physical" }, - "xTat": "700b0516-bf8b-4e6e-bf16-13bfeb078e23", - "xBot": "de1a9a7a-a777-4473-889c-44a3bb07daae", - "alias": "Mijn OV-pas", - "lastDigits": 3301, - "ovpasNumber": "63AW974", - "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, - "expirationDate": "2029-03-22T09:00:00", - "replacedByTokenId": 12, - }, - ], - "href": null, - } /directdebitmandates: get: tags: -- 2.45.2 From 683b12f6ebd2c9e649ecc0d964243d3d75e8a94f Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 17 Feb 2025 17:44:50 +0100 Subject: [PATCH 083/372] started on mandates --- src/openapi/customers/customers-crud-v2.yaml | 103 +++++++++++-------- 1 file changed, 62 insertions(+), 41 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 969281a..b4327ae 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -922,7 +922,7 @@ paths: /customers/{customerProfileId}/addresses: post: tags: - - Customer + - Customer address summary: Add a customer address description: >- @@ -965,7 +965,7 @@ paths: /addresses/{addressId}: patch: tags: - - Customer + - Customer address summary: Edit a customer address description: >- @@ -1000,7 +1000,7 @@ paths: x-throttling-tier: Unlimited delete: tags: - - Customer + - Customer address summary: Delete a customer address description: >- @@ -1024,7 +1024,7 @@ paths: /customers/{customerProfileId}/phones: post: tags: - - Customer + - Customer phoneNumber summary: Add a customer phonenumber description: >- @@ -1063,7 +1063,7 @@ paths: /phones/{phoneId}: patch: tags: - - Customer + - Customer phoneNumber summary: Edit a customer phonenumber description: >- @@ -1098,7 +1098,7 @@ paths: x-throttling-tier: Unlimited delete: tags: - - Customer + - Customer phoneNumber summary: Delete a customer phone description: >- @@ -1578,6 +1578,45 @@ paths: "updateTimestamp": "2024-03-22T08:55:00", }, ] + /billingInformation/{billingInformationId}/directdebitmandates: + post: + tags: + - Mandates + summary: Add a customer direct debitmandate + description: >- + + parameters: + - name: billingInformationId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/mandateEntity" + examples: + customerDirectDebitMandatePrepared: + value: + directDebitMandate: + directDebitMandateTypeId: 1 + mandateAddressId: 1 + mandateReference: HTM-mandate-001 + mandateState: PREPARED + required: true + responses: + 201: + description: Successfully created a customer mandate + content: + application/json: + schema: + $ref: "#/components/schemas/postDirectDebitMandateResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited components: securitySchemes: default: @@ -1821,6 +1860,8 @@ components: ovPayTokenEntity: type: object properties: + ovPayTokenId: + type: integer tokenType: type: object properties: @@ -2036,12 +2077,9 @@ components: billingInformationId: type: integer example: 1 - postCustomerProfileDirectDebitMandateResponse: + postDirectDebitMandateResponse: type: object properties: - customerNumber: - type: integer - example: 10000001 directDebitMandateId: type: integer example: 1 @@ -2078,43 +2116,26 @@ components: customerLanguageId: type: integer example: 1 - ovPayTokenGetEntity: - type: object - properties: - ovPayTokenId: - type: integer - example: 1 - tokenTypeId: - type: integer - example: 1 - xTat: - type: string - example: 0044831b-8e80c-4f82-r989a-8d85ee1996 - xBot: - type: string - example: 0044831b-8e80c-4f82-r989a-8d85ee1996 - lastDigits: - type: string - example: "0001" - ovpasNumber: - type: integer - example: 1 - alias: - type: string - example: alias - tokenStatusId: - type: integer - expirationDate: - type: string - replacedByTokenId: - type: integer getCustomerProfileOvPayTokenResponse: type: object properties: ovPayToken: type: array items: - $ref: "#/components/schemas/ovPayTokenGetEntity" + $ref: "#/components/schemas/ovPayTokenEntity" + mandateEntity: + type: object + properties: + directDebitMandateId: + type: integer + directDebitMandateTypeId: + type: integer + mandateAddressId: + type: integer + mandateReference: + type: string + mandateState: + type: string postOvPayTokenResponse: type: object properties: -- 2.45.2 From b115c0aed8c832553b970e568e72f8d2472a315d Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 18 Feb 2025 10:55:21 +0100 Subject: [PATCH 084/372] OVPAY-1518 - Updated /transactionitems. --- src/openapi/fiko/fiko-crud.yaml | 190 ++++++-------------------------- 1 file changed, 36 insertions(+), 154 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 3be6d63..be73076 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -6,45 +6,6 @@ info: servers: - url: https://api.integratielaag.nl/v1 paths: - /fiko/transactionitems: - post: - summary: DEPRECATED. Add a finanicial transaction item. - description: DEPRECATED. This API is deprecated. Use bulk-insert instead. - deprecated: true - tags: - - External FIKO endpoints v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" - /fiko/transactionitems/bulk: - post: - summary: Add one ore more finanicial transaction items in bulk. - description: Add one ore more finanicial transaction items in bulk. - tags: - - External FIKO endpoints v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/TransactionItemsBulkPostRequestBody" - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/TransactionItemsBulkPostResponseBody" /transactionitems: get: summary: Find transaction items. @@ -146,11 +107,11 @@ paths: explode: false description: Possible types of the transaction ('debit' or 'credit'). - in: query - name: productCode + name: articleNumber schema: type: string - example: HTM-MND-20 - description: The product code of the transaction. + example: 4031 + description: The article number of the transaction. - in: query name: status schema: @@ -180,9 +141,8 @@ paths: schema: $ref: "#/components/schemas/TransactionItemsGetResponseBody" post: - summary: DEPRECATED. Add a finanicial transaction item. - description: DEPRECATED. This API is deprecated. Use bulk-insert instead. - deprecated: true + summary: Add one ore more finanicial transaction items in bulk. + description: Add one ore more finanicial transaction items in bulk. tags: - Transactions v2 requestBody: @@ -192,8 +152,8 @@ paths: schema: $ref: "#/components/schemas/TransactionItemsPostRequestBody" responses: - "201": - description: Created + "202": + description: Accepted content: application/json: schema: @@ -1370,10 +1330,10 @@ components: - debit - credit example: debit - productCode: + articleNumber: type: string nullable: true - example: HTM-MND-20 + example: 4031 status: type: string enum: @@ -1412,88 +1372,6 @@ components: description: URI for pagination. example: null TransactionItemsPostRequestBody: - type: object - properties: - transactionType: - type: string - enum: - - sales - example: sales - sourceName: - type: string - example: Verkoopengine - transactionId: - type: string - example: 1001236 - transactionLineId: - type: string - nullable: true - example: 1 - name: - type: string - example: HTM Maandkorting 20% - quantity: - type: integer - example: 1 - taxCode: - type: string - example: V21 - amountExclTax: - type: integer - example: 100 - amountInclTax: - type: integer - example: 121 - amountTax: - type: integer - example: 21 - occurredOn: - type: string - format: date-time - example: 2024-10-04T00:00:00Z - type: - type: string - enum: - - debit - - credit - example: debit - productCode: - type: string - nullable: true - example: HTM-MND-20 - status: - type: string - enum: - - created - - succeeded - - failed - - returned to trx-db - - returned to src - - re-entered - example: created - required: - - transactionType - - sourceName - - transactionId - - name - - quantity - - taxCode - - amountExclTax - - amountInclTax - - amountTax - - occurredOn - - type - - status - TransactionItemsPostResponseBody: - type: object - properties: - transactionItemId: - type: string - format: uuid - example: afce35b2-1dff-4ace-98d0-4b9ac405c87d - required: - - transactionItemId - TransactionItemsBulkPostRequestBody: type: object properties: transactionItems: @@ -1544,10 +1422,10 @@ components: - debit - credit example: debit - productCode: + articleNumber: type: string nullable: true - example: HTM-MND-20 + example: 4031 required: - sourceName - transactionType @@ -1560,28 +1438,32 @@ components: - amountTax - occurredOn - type - - productCode - TransactionItemsBulkPostResponseBody: + TransactionItemsPostResponseBody: type: object properties: - summary: - type: object - properties: - created: - type: integer - example: 15 - updated: - type: integer - example: 2 - total: - type: integer - example: 17 - required: - - created - - updated - - total + startTime: + type: string + format: date-time + example: 2025-02-14T05:32:47.0672237Z + status: + type: string + example: Running + clientTrackingId: + type: string + example: 08584620957189579629541919368CU00 + callbackurl: + type: string + format: uri + example: "https://services.api.htm.nl/transactionitems/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c2241509f6225d6d568526b/runs/08584620957189579629541919368CU00/operations/c9f35a54-f5de-4bc6-991b-2219164aa56f?api-version=2022-05-01&sp=%2Fruns%2F08584620957189579629541919368CU00%2Foperations%2Fc9f35a54-f5de-4bc6-991b-2219164aa56f%2Fread&sv=1.0&sig=X8dPLkbtOdndMqNfZDxTEL_3k2MhE42YyL_2ATnSYj0&code=e0W6heo7VrzW-mtYzJlavaP99VZve_9fH-9NhIJW-ceJAzFu_yZ71g%3D%3D" + retryAfter: + type: integer + example: 10 required: - - summary + - startTime + - status + - clientTrackingId + - callbackurl + - retryAfter TransactionItemsBulkBadRequestResponseBody: type: object properties: @@ -1663,10 +1545,10 @@ components: - debit - credit example: debit - productCode: + articleNumber: type: string nullable: true - example: HTM-MND-20 + example: 4031 status: type: string enum: -- 2.45.2 From 7a506554089d0d519b42fe61d3380571b870f9ab Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 18 Feb 2025 11:15:41 +0100 Subject: [PATCH 085/372] OVPAY-1518 - Removed legacy metadata. --- src/openapi/fiko/fiko-crud.yaml | 809 +------------------------------- 1 file changed, 23 insertions(+), 786 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index be73076..fb8986c 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -421,356 +421,6 @@ paths: application/json: schema: $ref: "#/components/schemas/ProcessingFailuresPatchResponseBody" - /productmetadata: - get: - summary: Find product metadata. - description: Find product metadata. - tags: - - Metadata v2 - parameters: - - in: query - name: productMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the product metadata. - - in: query - name: productCode - schema: - type: string - example: 4031 - description: The product code. - - in: query - name: department - schema: - type: string - example: 900 - description: The department. - - in: query - name: costType - schema: - type: string - example: 619031 - description: The cost type. - - in: query - name: description - schema: - type: string - example: O4031_Reisproduct HTM 1 dag Anoniem - description: The description. - - in: query - name: documentCode - schema: - type: string - example: VERK_FACTUUR - description: The document code. - - in: query - name: updatedBefore - schema: - type: string - example: 2022-01-01 00:00:00 - description: Timestamp that the metadata was updated before. - - in: query - name: updatedAfter - schema: - type: string - example: 2022-01-01 00:00:00 - description: Timestamp that the metadata was updated after. - - in: query - name: validAt - schema: - type: string - example: 2024-03-22T09:00:00 - description: Timestamp that the metadata is valid. - - in: query - name: contraAccountMetadataId - schema: - type: string - format: uuid - example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb - description: Find product metadata that is linked to this contra account. - - in: query - name: concessionId - schema: - type: array - items: - type: integer - example: [1, 2] - explode: false - description: Find product metadata that is linked to this concession. - - in: query - name: sourceMetadataId - schema: - type: string - format: uuid - example: 08d96f94-f468-467e-9068-c86c34f43097 - description: Find product metadata that is linked to this source metadata. - - in: query - name: costCenter - schema: - type: string - example: 84955 - description: Find product metadata that is linked to this cost center. - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ProductMetadataGetResponseBody" - - post: - summary: Add product metadata. - description: Add product metadata. - tags: - - Metadata v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ProductMetadataPostRequestBody" - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/ProductMetadataPostResponseBody" - /productmetadata/{productMetadataId}: - parameters: - - in: path - name: productMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: true - description: The id of the product metadata. - patch: - summary: Update product metadata. - description: Update product metadata. - tags: - - Metadata v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ProductMetadataPatchRequestBody" - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ProductMetadataPatchResponseBody" - /productmetadata/{productMetadataId}/productcontraaccounts: - parameters: - - in: path - name: productMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: true - description: The id of the product metadata. - post: - summary: Add product contra account. - description: Add product contra account. - tags: - - Metadata v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ProductContraAccountsPostRequestBody" - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/ProductContraAccountsPostResponseBody" - /productcontraaccounts: - get: - summary: Find product contra accounts. - description: Find product contra accounts. - tags: - - Metadata v2 - parameters: - - in: query - name: productContraAccountId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the product contra account. - - in: query - name: productMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the product metadata. - - in: query - name: contraAccountMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the contra account metadata. - - in: query - name: concessionId - schema: - type: array - items: - type: integer - example: [1, 2] - explode: false - description: Find product metadata that is linked to this concession. - - in: query - name: sourceMetadataId - schema: - type: string - format: uuid - example: 08d96f94-f468-467e-9068-c86c34f43097 - description: Find product metadata that is linked to this source metadata. - - in: query - name: costCenter - schema: - type: string - example: 84955 - description: Find product metadata that is linked to this cost center. - - in: query - name: validAt - schema: - type: string - example: 2024-03-22T09:00:00 - description: Timestamp that the metadata is valid. - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ProductContraAccountsGetResponseBody" - /productcontraaccounts/{productContraAccountId}: - parameters: - - in: path - name: productContraAccountId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: true - description: The id of the product contra account. - patch: - summary: Update product contra account. - description: Update product contra account. - tags: - - Metadata v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ProductContraAccountsPatchRequestBody" - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ProductContraAccountsPatchResponseBody" - /contraaccountmetadata: - get: - summary: Find contra account metadata. - description: Find contra account metadata. - tags: - - Metadata v2 - parameters: - - in: query - name: contraAccountMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the contra account metadata. - - in: query - name: contraAccountCode - schema: - type: string - example: 123456 - description: The code of the contra account. - - in: query - name: contraAccountNumber - schema: - type: string - example: 220.10419 - description: The number of the contra account. - - in: query - name: validAt - schema: - type: string - format: date-time - example: 2024-03-22T09:00:00 - description: Timestamp that the metadata is valid. - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ContraAccountMetadataGetResponseBody" - post: - summary: Add contra account metadata. - description: Add contra account metadata. - tags: - - Metadata v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ContraAccountMetadataPostRequestBody" - responses: - "201": - description: Created - content: - application/json: - schema: - $ref: "#/components/schemas/ContraAccountMetadataPostResponseBody" - /contraaccountmetadata/{contraAccountMetadataId}: - parameters: - - in: path - name: contraAccountMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: true - description: The id of the contra account metadata. - patch: - summary: Update contra account metadata. - description: Update contra account metadata. - tags: - - Metadata v2 - requestBody: - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ContraAccountMetadataPatchRequestBody" - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ContraAccountMetadataPatchResponseBody" /taxmetadata: get: summary: Find tax metadata. @@ -1069,14 +719,14 @@ paths: example: 37a8095b-19db-498f-9349-5f37d21c5bdf description: The id of the concession metadata. - in: query - name: concessionId + name: concession schema: type: array items: - type: integer - example: [1, 2] + type: string + example: [BUS, RAIL] explode: false - description: The id of the concession. + description: The concession. - in: query name: percentage schema: @@ -1254,19 +904,6 @@ paths: application/json: schema: $ref: "#/components/schemas/MetadataAuditTrailsPostResponseBody" - /concessions: - get: - summary: Get all concessions. - description: Get all concessions. - tags: - - References v2 - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/ConcessionsGetResponseBody" components: securitySchemes: bearerToken: @@ -1926,366 +1563,6 @@ components: example: b6161270-eb08-4242-90ec-967d5db62070 required: - metadataAuditTrailId - ProductMetadataGetResponseBody: - type: object - properties: - productMetadata: - type: array - items: - type: object - properties: - productMetadataId: - type: string - format: uuid - example: 39a87c2a-9011-4dfd-b35e-1245a98c2e61 - productCode: - type: string - example: 4031 - department: - type: string - example: 900 - costType: - type: string - example: 619031 - description: - type: string - example: O4031_Reisproduct HTM 1 dag Anoniem - documentCode: - type: string - example: VERK_FACTUUR - timestampUpdated: - type: string - format: date-time - example: 2022-01-01T00:00:00 - validFrom: - type: string - format: date-time - example: 2024-03-22T09:00:00 - validUntil: - type: string - format: date-time - nullable: true - example: null - productContraAccounts: - type: array - items: - type: object - properties: - contraAccountMetadata: - $ref: "#/components/schemas/ContraAccountMetadata" - concession: - $ref: "#/components/schemas/Concession" - sourceMetadata: - $ref: "#/components/schemas/SourceMetadata" - costCenter: - type: string - example: 84955 - validFrom: - type: string - format: date-time - example: 2024-03-22T09:00:00 - validUntil: - type: string - format: date-time - nullable: true - example: null - required: - - contraAccountMetadata - - concession - - sourceMetadata - - costCenter - - validFrom - required: - - productMetadataId - - productCode - - department - - costType - - description - - documentCode - - timestampUpdated - - validFrom - - productContraAccounts - href: - type: string - nullable: true - description: URI for pagination. - example: null - ProductMetadataPostRequestBody: - type: object - properties: - productCode: - type: string - example: 4031 - department: - type: string - example: 900 - costType: - type: string - example: 619031 - description: - type: string - example: O4031_Reisproduct HTM 1 dag Anoniem - documentCode: - type: string - example: VERK_FACTUUR - timestampUpdated: - type: string - format: date-time - example: 2022-01-01T00:00:00 - validFrom: - type: string - format: date-time - example: 2024-03-22T09:00:00 - validUntil: - type: string - format: date-time - nullable: true - example: null - required: - - productCode - - department - - costType - - description - - documentCode - - timestampUpdated - - validFrom - ProductMetadataPostResponseBody: - type: object - properties: - productMetadataId: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: - - productMetadataId - ProductMetadataPatchRequestBody: - type: object - properties: - productCode: - type: string - example: 4031 - department: - type: string - example: 900 - costType: - type: string - example: 619031 - description: - type: string - example: O4031_Reisproduct HTM 1 dag Anoniem - documentCode: - type: string - example: VERK_FACTUUR - timestampUpdated: - type: string - format: date-time - example: 2022-01-01T00:00:00 - validFrom: - type: string - format: date-time - example: 2024-03-22T09:00:00 - validUntil: - type: string - format: date-time - nullable: true - example: 2024-06-22T09:00:00 - ProductMetadataPatchResponseBody: - type: object - properties: - productMetadataId: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: - - productMetadataId - ProductContraAccountsPostRequestBody: - type: object - properties: - contraAccountMetadataId: - type: string - format: uuid - example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb - concessionId: - type: integer - example: 1 - sourceMetadataId: - type: string - format: uuid - example: 08d96f94-f468-467e-9068-c86c34f43097 - costCenter: - type: string - example: 84955 - validFrom: - type: string - format: date-time - example: 2024-03-22T09:00:00 - validUntil: - type: string - format: date-time - nullable: true - example: null - required: - - contraAccountMetadataId - - concessionId - - sourceMetadataId - - costCenter - - validFrom - ProductContraAccountsPostResponseBody: - type: object - properties: - productContraAccountId: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: - - productContraAccountId - ProductContraAccountsGetResponseBody: - type: object - properties: - productContraAccounts: - type: array - items: - type: object - properties: - productContraAccountId: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - contraAccountMetadata: - $ref: "#/components/schemas/ContraAccountMetadata" - concession: - $ref: "#/components/schemas/Concession" - sourceMetadata: - $ref: "#/components/schemas/SourceMetadata" - costCenter: - type: string - example: 84955 - validFrom: - type: string - format: date-time - example: 2024-03-22T09:00:00 - validUntil: - type: string - format: date-time - nullable: true - example: null - required: - - productContraAccountId - - contraAccountMetadataId - - concessionId - - sourceMetadataId - - costCenter - - validFrom - href: - type: string - nullable: true - description: URI for pagination. - example: null - ProductContraAccountsPatchRequestBody: - type: object - properties: - contraAccountMetadataId: - type: string - format: uuid - example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb - concessionId: - type: integer - example: 1 - sourceMetadataId: - type: string - format: uuid - example: 08d96f94-f468-467e-9068-c86c34f43097 - costCenter: - type: string - example: 84955 - validFrom: - type: string - format: date-time - example: 2024-03-22T09:00:00 - validUntil: - type: string - format: date-time - nullable: true - example: null - ProductContraAccountsPatchResponseBody: - type: object - properties: - productContraAccountId: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - required: - - productContraAccountId - ContraAccountMetadataGetResponseBody: - type: object - properties: - contraAccountMetadata: - type: array - items: - $ref: "#/components/schemas/ContraAccountMetadata" - href: - type: string - nullable: true - description: URI for pagination. - example: null - ContraAccountMetadataPostRequestBody: - type: object - properties: - contraAccountCode: - type: string - example: 123456 - contraAccountNumber: - type: string - example: 220.10419 - validFrom: - type: string - format: date-time - example: 2024-03-22T09:00:00 - validUntil: - type: string - format: date-time - nullable: true - example: null - required: - - contraAccountCode - - contraAccountNumber - - validFrom - ContraAccountMetadataPostResponseBody: - type: object - properties: - contraAccountMetadataId: - type: string - format: uuid - example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb - required: - - contraAccountMetadataId - ContraAccountMetadataPatchRequestBody: - type: object - properties: - contraAccountCode: - type: string - example: 123456 - contraAccountNumber: - type: string - example: 220.10419 - validFrom: - type: string - format: date-time - example: 2024-03-22T09:00:00 - validUntil: - type: string - format: date-time - nullable: true - example: null - ContraAccountMetadataPatchResponseBody: - type: object - properties: - contraAccountMetadataId: - type: string - format: uuid - example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb - required: - - contraAccountMetadataId TaxMetadataGetResponseBody: type: object properties: @@ -2567,10 +1844,14 @@ components: properties: concessionMetadataId: type: string - format: uuid + format: en example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb concession: - $ref: '#/components/schemas/Concession' + type: string + enum: + - RAIL + - BUS + example: RAIL percentage: type: number example: 84.021 @@ -2596,9 +1877,12 @@ components: ConcessionMetadataPostRequestBody: type: object properties: - concessionId: - type: integer - example: 1 + concession: + type: string + enum: + - RAIL + - BUS + example: RAIL percentage: type: number example: 84.021 @@ -2612,7 +1896,7 @@ components: nullable: true example: null required: - - concessionId + - concession - percentage - validFrom ConcessionMetadataPostResponseBody: @@ -2627,9 +1911,12 @@ components: ConcessionMetadataPatchRequestBody: type: object properties: - concessionId: - type: integer - example: 1 + concession: + type: string + enum: + - RAIL + - BUS + example: RAIL percentage: type: number example: 84.021 @@ -2651,56 +1938,6 @@ components: example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb required: - concessionMetadataId - ConcessionsGetResponseBody: - type: object - properties: - concessions: - type: array - items: - $ref: '#/components/schemas/Concession' - href: - type: string - nullable: true - description: URI for pagination. - example: null - ContraAccountMetadata: - type: object - properties: - contraAccountMetadataId: - type: string - format: uuid - example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb - contraAccountCode: - type: string - example: 123456 - contraAccountNumber: - type: string - example: 220.10419 - validFrom: - type: string - format: date-time - example: 2024-03-22T09:00:00 - validUntil: - type: string - format: date-time - nullable: true - example: null - required: - - contraAccountMetadataId - - contraAccountCode - - contraAccountNumber - - validFrom - Concession: - type: object - properties: - concessionId: - type: integer - example: 1 - name: - type: string - example: bus - required: - - concessionId SourceMetadata: type: object properties: -- 2.45.2 From fd2ae8fa65315a14a695707a42872727c1af9239 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 18 Feb 2025 11:27:19 +0100 Subject: [PATCH 086/372] OVPAY-1518 - Removed legacy metadata 2. --- src/openapi/fiko/fiko-crud.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index fb8986c..70e1cea 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -719,14 +719,14 @@ paths: example: 37a8095b-19db-498f-9349-5f37d21c5bdf description: The id of the concession metadata. - in: query - name: concession + name: name schema: type: array items: type: string example: [BUS, RAIL] explode: false - description: The concession. + description: The name of the concession. - in: query name: percentage schema: @@ -1846,7 +1846,7 @@ components: type: string format: en example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb - concession: + name: type: string enum: - RAIL @@ -1877,7 +1877,7 @@ components: ConcessionMetadataPostRequestBody: type: object properties: - concession: + name: type: string enum: - RAIL @@ -1896,7 +1896,7 @@ components: nullable: true example: null required: - - concession + - name - percentage - validFrom ConcessionMetadataPostResponseBody: @@ -1911,7 +1911,7 @@ components: ConcessionMetadataPatchRequestBody: type: object properties: - concession: + name: type: string enum: - RAIL -- 2.45.2 From aa813cdabe7b96daf75cfd29ea911a7fb3b07153 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 18 Feb 2025 11:28:50 +0100 Subject: [PATCH 087/372] OVPAY-1518 - Metadata audit trails are deprecated in favor of Elastik. --- src/openapi/fiko/fiko-crud.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 70e1cea..ae79167 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -796,6 +796,7 @@ paths: get: summary: Find metadata audit trails. description: Find metadata audit trails. + deprecated: true tags: - Audit Trail v2 parameters: @@ -889,6 +890,7 @@ paths: post: summary: Add metadata audit trail. description: Add metadata audit trail. + deprecated: true tags: - Audit Trail v2 requestBody: -- 2.45.2 From 3c25c250c20a4f8fe5350ae76ed75d843f0a0aae Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 18 Feb 2025 13:28:44 +0100 Subject: [PATCH 088/372] OVPAY-1518 - Added endpoints for booking processes. --- src/openapi/fiko/fiko-crud.yaml | 1071 ++++++++++++++++++++++++++++++- 1 file changed, 1066 insertions(+), 5 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index ae79167..d98d746 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -118,7 +118,15 @@ paths: type: array items: type: string - example: [created, succeeded, failed, returned to trx-db, returned to src, re-entered] + example: + [ + created, + succeeded, + failed, + returned to trx-db, + returned to src, + re-entered, + ] explode: false description: Possible statuses of the transaction ('created', 'succeeded', 'failed', 'returned to trx-db', 'returned to src', 're-entered'). - in: query @@ -296,7 +304,15 @@ paths: type: array items: type: string - example: [created, succeeded, failed, returned to trx-db, returned to src, re-entered] + example: + [ + created, + succeeded, + failed, + returned to trx-db, + returned to src, + re-entered, + ] explode: false description: The status of the transaction item. - in: query @@ -421,6 +437,497 @@ paths: application/json: schema: $ref: "#/components/schemas/ProcessingFailuresPatchResponseBody" + /bookingprocesses: + get: + summary: Find booking processes. + description: Find booking processes. + tags: + - Booking Processes v2 + parameters: + - in: query + name: bookingProcessId + schema: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + description: The id of the booking process. + - in: query + name: name + schema: + type: string + example: Verkooptransacties + description: The name of the booking process. + - in: query + name: transactionType + schema: + type: array + items: + type: string + example: [sales, purchase] + explode: false + description: The transaction type of the booking process. + - in: query + name: identifyingFieldName + schema: + type: string + example: articleNumber + description: The identifying field name of the booking process. + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/BookingProcessesGetResponseBody" + post: + summary: Add a booking process. + description: Add a booking process. + tags: + - Booking Processes v2 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/BookingProcessesPostRequestBody" + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/BookingProcessesPostResponseBody" + /bookingprocesses/{bookingProcessId}: + parameters: + - in: path + name: bookingProcessId + schema: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: true + description: The id of the booking process. + patch: + summary: Update a booking process. + description: Update a booking process. + tags: + - Booking Processes v2 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/BookingProcessesPatchRequestBody" + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/BookingProcessesPatchResponseBody" + /bookingprocesses/{bookingProcessId}/bookingmetadata: + parameters: + - in: path + name: bookingProcessId + schema: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: true + description: The id of the booking process. + post: + summary: Add booking metadata. + description: Add booking metadata. + tags: + - Booking Processes v2 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/BookingMetadataPostRequestBody" + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/BookingMetadataPostResponseBody" + /bookingmetadata: + get: + summary: Find booking metadata. + description: Find booking metadata. + tags: + - Booking Processes v2 + parameters: + - in: query + name: bookingMetadataId + schema: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + description: The id of the booking metadata. + - in: query + name: bookingProcessId + schema: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + description: The id of the parent booking process. + - in: query + name: description + schema: + type: string + example: Dagkaart + description: The description of the booking. + - in: query + name: element1 + schema: + type: string + example: 900 + description: The first element of the booking. + - in: query + name: element2 + schema: + type: string + example: 84956 + description: The second element of the booking. + - in: query + name: documentCode + schema: + type: string + example: FIKO-OPBR + description: The document code of the booking. + - in: query + name: hasSeparateTaxLine + schema: + type: boolean + example: true + description: Whether the booking has a separate tax line. + - in: query + name: hasLinePerIdentifyingField + schema: + type: boolean + example: true + description: Whether the booking has a line per identifying field. + - in: query + name: hasLinePerSource + schema: + type: boolean + example: true + description: Whether the booking has a line per source. + - in: query + name: hasLinePerSource + schema: + type: boolean + example: true + description: Whether the booking has a line per source. + - in: query + name: hasLinePerConcession + schema: + type: boolean + example: true + description: Whether the booking has a line per concession. + - in: query + name: validAt + schema: + type: string + example: 2024-01-01T00:00:00.000 + description: Timestamp that the booking metadata is valid. + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/BookingMetadataGetResponseBody" + /bookingmetadata/{bookingMetadataId}: + parameters: + - in: path + name: bookingMetadataId + schema: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + required: true + description: The id of the booking metadata. + patch: + summary: Update booking metadata. + description: Update booking metadata. + tags: + - Booking Processes v2 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/BookingMetadataPatchRequestBody" + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/BookingMetadataPatchResponseBody" + /bookingmetadata/{bookingMetadataId}/bookinggroupfields: + parameters: + - in: path + name: bookingMetadataId + schema: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + required: true + description: The id of the booking metadata. + post: + summary: Add booking group fields. + description: Add booking group fields. + tags: + - Booking Processes v2 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/BookingGroupFieldsPostRequestBody" + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/BookingGroupFieldsPostResponseBody" + /bookingmetadata/{bookingMetadataId}/bookinglinemetadata: + parameters: + - in: path + name: bookingMetadataId + schema: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + required: true + description: The id of the booking metadata. + post: + summary: Add booking line metadata. + description: Add booking line metadata. + tags: + - Booking Processes v2 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/BookingLineMetadataPostRequestBody" + responses: + "201": + description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/BookingLineMetadataPostResponseBody" + /bookinggroupfields: + get: + summary: Find booking group fields. + description: Find booking group fields. + tags: + - Booking Processes v2 + parameters: + - in: query + name: bookingGroupFieldId + schema: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + description: The id of the booking group field. + - in: query + name: bookingMetadataId + schema: + type: string + format: uuid + example: 63d4a7e2-62c3-428b-a4bb-e4ee45516f2a + description: The id of the parent booking metadata. + - in: query + name: identifyingFieldValue + schema: + type: string + example: 1737 + description: The identifying field value. + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/BookingGroupFieldsGetResponseBody" + /bookinggroupfields/{bookingGroupFieldId}: + parameters: + - in: path + name: bookingGroupFieldId + schema: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + required: true + description: The id of the booking group field. + delete: + summary: Delete booking group field. + description: Delete booking group field. + tags: + - Booking Processes v2 + responses: + "200": + description: OK + /bookinglinemetadata: + get: + summary: Find booking line metadata. + description: Find booking line metadata. + tags: + - Booking Processes v2 + parameters: + - in: query + name: bookingLineMetadataId + schema: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + description: The id of the booking line metadata. + - in: query + name: bookingMetadataId + schema: + type: string + format: uuid + example: 63d4a7e2-62c3-428b-a4bb-e4ee45516f2a + description: The id of the parent booking metadata. + - in: query + name: name + schema: + type: string + example: Dakaart - BUS + description: The name of the booking line metadata. + - in: query + name: incomingName + schema: + type: string + example: Webshop + description: The incoming name of the booking line metadata. + - in: query + name: identifyingFieldValue + schema: + type: string + example: 1737 + description: The identifying field value. + - in: query + name: concessionName + schema: + type: array + items: + type: string + example: [BUS, RAIL] + explode: false + description: The name of the concession. + - in: query + name: lineType + schema: + type: array + items: + type: string + example: [summary, analysis, tax] + explode: false + description: The type of the line. + - in: query + name: lineSense + schema: + type: array + items: + type: string + example: [debit, credit] + explode: false + description: The sense of the line. + - in: query + name: element3 + schema: + type: string + example: 603031 + description: The element 3 of the booking line metadata. + - in: query + name: element4 + schema: + type: string + example: Dagkaart + description: The element 4 of the booking line metadata. + - in: query + name: extRef1 + schema: + type: string + example: extRef1 + - in: query + name: extRef2 + schema: + type: string + example: extRef2 + - in: query + name: extRef3 + schema: + type: string + example: extRef3 + - in: query + name: extRef4 + schema: + type: string + example: extRef4 + - in: query + name: extRef5 + schema: + type: string + example: extRef5 + - in: query + name: extRef6 + schema: + type: string + example: extRef6 + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/BookingLineMetadataGetResponseBody" + /bookinglinemetadata/{bookingLineMetadataId}: + parameters: + - in: path + name: bookingLineMetadataId + schema: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + required: true + description: The id of the booking line metadata. + patch: + summary: Update booking line metadata. + description: Update booking line metadata. + tags: + - Booking Processes v2 + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/BookingLineMetadataPatchRequestBody" + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/BookingLineMetadataPatchResponseBody" + delete: + summary: Delete booking line metadata. + description: Delete booking line metadata. + tags: + - Booking Processes v2 + responses: + "200": + description: OK /taxmetadata: get: summary: Find tax metadata. @@ -1127,7 +1634,7 @@ components: detail: type: string example: Transaction is a duplicate of a transaction already in the system. - pointer: + pointer: type: string example: "#/transactionItems/0" transactionId: @@ -1440,6 +1947,560 @@ components: example: null required: - transactionAuditTrails + BookingProcessesGetResponseBody: + type: object + properties: + bookingProcesses: + type: array + items: + type: object + properties: + bookingProcessId: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + name: + type: string + example: Verkooptransacties + transactionType: + type: string + enum: + - sales + example: sales + identifyingFieldName: + type: string + nullable: true + example: articleNumber + required: + - bookingProcessId + - name + - transactionType + href: + type: string + nullable: true + description: URI for pagination. + example: null + required: + - bookingProcesses + BookingProcessesPostRequestBody: + type: object + properties: + name: + type: string + example: Verkooptransacties + transactionType: + type: string + enum: + - sales + example: sales + identifyingFieldName: + type: string + nullable: true + example: articleNumber + required: + - name + - transactionType + BookingProcessesPostResponseBody: + type: object + properties: + bookingProcessId: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: + - bookingProcessId + BookingProcessesPatchRequestBody: + type: object + properties: + name: + type: string + nullable: true + example: Verkooptransacties + transactionType: + type: string + nullable: true + enum: + - sales + example: sales + identifyingFieldName: + type: string + nullable: true + example: articleNumber + BookingProcessesPatchResponseBody: + type: object + properties: + bookingProcessId: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + required: + - bookingProcessId + BookingMetadataGetResponseBody: + type: object + properties: + bookingMetadata: + type: array + items: + type: object + properties: + bookingMetadataId: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + bookingProcessId: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + description: + type: string + example: Dagkaart + element1: + type: string + example: 900 + element2: + type: string + example: 84956 + documentCode: + type: string + example: FIKO-OPBR + hasSeparateTaxLine: + type: boolean + example: true + hasLinePerIdentifyingField: + type: boolean + example: true + hasLinePerSource: + type: boolean + example: true + hasLinePerConcession: + type: boolean + example: true + validFrom: + type: string + format: date-time + example: 2022-01-01 00:00:00 + validTo: + type: string + format: date-time + nullable: true + example: null + required: + - bookingMetadataId + - bookingProcessId + - description + - element1 + - element2 + - documentCode + - hasSeparateTaxLine + - hasLinePerIdentifyingField + - hasLinePerSource + - hasLinePerConcession + - validFrom + href: + type: string + nullable: true + example: null + required: + - bookingMetadata + BookingMetadataPostRequestBody: + type: object + properties: + description: + type: string + example: Dagkaart + element1: + type: string + example: 900 + element2: + type: string + example: 84956 + documentCode: + type: string + example: FIKO-OPBR + hasSeparateTaxLine: + type: boolean + example: true + hasLinePerIdentifyingField: + type: boolean + example: true + hasLinePerSource: + type: boolean + example: true + hasLinePerConcession: + type: boolean + example: true + validFrom: + type: string + format: date-time + example: 2022-01-01 00:00:00 + validTo: + type: string + format: date-time + nullable: true + example: null + required: + - description + - element1 + - element2 + - documentCode + - hasSeparateTaxLine + - hasLinePerIdentifyingField + - hasLinePerSource + - hasLinePerConcession + - validFrom + BookingMetadataPostResponseBody: + type: object + properties: + bookingMetadataId: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + required: + - bookingMetadataId + BookingMetadataPatchRequestBody: + type: object + properties: + description: + type: string + nullable: true + example: Dagkaart + element1: + type: string + nullable: true + example: 900 + element2: + type: string + nullable: true + example: 84956 + documentCode: + type: string + nullable: true + example: FIKO-OPBR + hasSeparateTaxLine: + type: boolean + nullable: true + example: true + hasLinePerIdentifyingField: + type: boolean + nullable: true + example: true + hasLinePerSource: + type: boolean + nullable: true + example: true + hasLinePerConcession: + type: boolean + nullable: true + example: true + validFrom: + type: string + format: date-time + nullable: true + example: 2022-01-01 00:00:00 + validTo: + type: string + format: date-time + nullable: true + example: null + BookingMetadataPatchResponseBody: + type: object + properties: + bookingMetadataId: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + required: + - bookingMetadataId + BookingGroupFieldsPostRequestBody: + type: object + properties: + identifyingFieldValue: + type: string + example: 1737 + required: + - identifyingFieldValue + BookingGroupFieldsPostResponseBody: + type: object + properties: + bookingGroupFieldId: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + required: + - bookingGroupFieldId + BookingGroupFieldsGetResponseBody: + type: object + properties: + bookingGroupFields: + type: array + items: + type: object + properties: + bookingGroupFieldId: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + bookingGroupMetadataId: + type: string + format: uuid + example: 12b4d128-0ab8-4a4a-944d-25b83de38b27 + identifyingFieldValue: + type: string + example: 1737 + required: + - bookingGroupFieldId + - bookingGroupMetadataId + - identifyingFieldValue + href: + type: string + nullable: true + example: null + required: + - bookingGroupFields + BookingLineMetadataPostRequestBody: + type: object + properties: + name: + type: string + example: Dagkaart - BUS + incomingName: + type: string + example: null + nullable: true + identifyingFieldValue: + type: string + example: null + nullable: true + concessionName: + type: string + example: RAIL + nullable: true + lineType: + type: string + enum: + - summary + - analysis + - tax + example: summary + lineSense: + type: string + enum: + - debit + - credit + example: credit + element3: + type: string + example: 603031 + nullable: true + element4: + type: string + example: dagkaart + nullable: true + extRef1: + type: string + example: null + nullable: true + extRef2: + type: string + example: null + nullable: true + extRef3: + type: string + example: 2025-02-17 + nullable: true + extRef4: + type: string + example: null + nullable: true + extRef5: + type: string + example: Webshop + nullable: true + extRef6: + type: string + example: null + nullable: true + required: + - name + - lineType + - lineSense + BookingLineMetadataPostResponseBody: + type: object + properties: + bookingLineMetadataId: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + required: + - bookingLineMetadataId + BookingLineMetadataGetResponseBody: + type: object + properties: + bookingLineMetadata: + type: array + items: + type: object + properties: + bookingLineMetadataId: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + bookingMetadataId: + type: string + format: uuid + example: 12b4d128-0ab8-4a4a-944d-25b83de38b27 + name: + type: string + example: Dagkaart - BUS + incomingName: + type: string + example: null + nullable: true + identifyingFieldValue: + type: string + example: null + nullable: true + concessionName: + type: string + enum: + - RAIL + - BUS + example: RAIL + lineType: + type: string + enum: + - summary + - analysis + - tax + example: summary + lineSense: + type: string + enum: + - debit + - credit + example: credit + element3: + type: string + example: 603031 + nullable: true + element4: + type: string + example: dagkaart + nullable: true + extRef1: + type: string + example: null + nullable: true + extRef2: + type: string + example: null + nullable: true + extRef3: + type: string + example: 2025-02-17 + nullable: true + extRef4: + type: string + example: null + nullable: true + extRef5: + type: string + example: Webshop + nullable: true + extRef6: + type: string + example: null + nullable: true + required: + - bookingLineMetadataId + - bookingMetadataId + - name + - lineType + - lineSense + href: + type: string + nullable: true + example: null + required: + - bookingLineMetadata + BookingLineMetadataPatchRequestBody: + type: object + properties: + name: + type: string + nullable: true + example: Dagkaart - BUS + incomingName: + type: string + nullable: true + example: null + identifyingFieldValue: + type: string + nullable: true + example: null + concessionName: + type: string + nullable: true + enum: + - RAIL + - BUS + example: RAIL + lineType: + type: string + nullable: true + enum: + - summary + - analysis + - tax + example: summary + lineSense: + type: string + nullable: true + enum: + - debit + - credit + example: credit + element3: + type: string + nullable: true + example: 603031 + element4: + type: string + nullable: true + example: dagkaart + extRef1: + type: string + nullable: true + example: null + extRef2: + type: string + nullable: true + example: null + extRef3: + type: string + nullable: true + example: 2025-02-17 + extRef4: + type: string + nullable: true + example: null + extRef5: + type: string + nullable: true + example: Webshop + extRef6: + type: string + nullable: true + example: null + BookingLineMetadataPatchResponseBody: + type: object + properties: + bookingLineMetadataId: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + required: + - bookingLineMetadataId MetadataAuditTrailsGetResponseBody: type: object properties: @@ -1647,7 +2708,7 @@ components: taxCode: type: string example: V21 - taxPercentageAmount: + taxPercentageAmount: type: integer example: 21 description: @@ -1677,7 +2738,7 @@ components: sourceMetadata: type: array items: - $ref: '#/components/schemas/SourceMetadata' + $ref: "#/components/schemas/SourceMetadata" href: type: string nullable: true -- 2.45.2 From 8b41cbd7c88f34e5d604a98a4fbaa1923726660b Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 18 Feb 2025 13:32:10 +0100 Subject: [PATCH 089/372] OVPAY-1518 - Bugfix. --- src/openapi/fiko/fiko-crud.yaml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index d98d746..3a01430 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -616,12 +616,6 @@ paths: type: boolean example: true description: Whether the booking has a line per source. - - in: query - name: hasLinePerSource - schema: - type: boolean - example: true - description: Whether the booking has a line per source. - in: query name: hasLinePerConcession schema: -- 2.45.2 From 36a2ccb03c02673f1aecc29529b2d1a6db79b4e7 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 18 Feb 2025 14:51:44 +0100 Subject: [PATCH 090/372] OVPAY-1518 - Processed review remarks from data architect. --- src/openapi/fiko/fiko-crud.yaml | 203 +++++++++++++++----------------- 1 file changed, 96 insertions(+), 107 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 3a01430..192c31c 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -581,17 +581,17 @@ paths: example: Dagkaart description: The description of the booking. - in: query - name: element1 + name: department schema: type: string example: 900 - description: The first element of the booking. + description: The department of the booking. - in: query - name: element2 + name: costType schema: type: string example: 84956 - description: The second element of the booking. + description: The cost type of the booking. - in: query name: documentCode schema: @@ -799,11 +799,11 @@ paths: example: Dakaart - BUS description: The name of the booking line metadata. - in: query - name: incomingName + name: sourceMetadataId schema: type: string - example: Webshop - description: The incoming name of the booking line metadata. + example: 9b371ab4-2c47-4aa5-bcf8-6642385278ac + description: The source of the booking line metadata. - in: query name: identifyingFieldValue schema: @@ -811,12 +811,12 @@ paths: example: 1737 description: The identifying field value. - in: query - name: concessionName + name: concessionId schema: type: array items: - type: string - example: [BUS, RAIL] + type: integer + example: [1, 2] explode: false description: The name of the concession. - in: query @@ -838,17 +838,17 @@ paths: explode: false description: The sense of the line. - in: query - name: element3 + name: costCenter schema: type: string example: 603031 - description: The element 3 of the booking line metadata. + description: The cost center of the booking line metadata. - in: query - name: element4 + name: artcleName schema: type: string example: Dagkaart - description: The element 4 of the booking line metadata. + description: The article name of the booking line metadata. - in: query name: extRef1 schema: @@ -1067,12 +1067,6 @@ paths: type: string example: api.htm.nl/v2/account/12345/msgs/abc description: The rejection info of the source. - - in: query - name: validAt - schema: - type: string - example: 2024-01-01T00:00:00.000 - description: Timestamp that the metadata is valid. responses: "200": description: OK @@ -1220,12 +1214,12 @@ paths: example: 37a8095b-19db-498f-9349-5f37d21c5bdf description: The id of the concession metadata. - in: query - name: name + name: concessionId schema: type: array items: - type: string - example: [BUS, RAIL] + type: integer + example: [1, 2] explode: false description: The name of the concession. - in: query @@ -1407,6 +1401,19 @@ paths: application/json: schema: $ref: "#/components/schemas/MetadataAuditTrailsPostResponseBody" + /concessions: + get: + summary: Get all concessions. + description: Get all concessions. + tags: + - References v2 + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/ConcessionsGetResponseBody" components: securitySchemes: bearerToken: @@ -2048,10 +2055,10 @@ components: description: type: string example: Dagkaart - element1: + department: type: string example: 900 - element2: + costType: type: string example: 84956 documentCode: @@ -2082,8 +2089,8 @@ components: - bookingMetadataId - bookingProcessId - description - - element1 - - element2 + - department + - costType - documentCode - hasSeparateTaxLine - hasLinePerIdentifyingField @@ -2102,10 +2109,10 @@ components: description: type: string example: Dagkaart - element1: + department: type: string example: 900 - element2: + costType: type: string example: 84956 documentCode: @@ -2134,8 +2141,8 @@ components: example: null required: - description - - element1 - - element2 + - department + - costType - documentCode - hasSeparateTaxLine - hasLinePerIdentifyingField @@ -2158,11 +2165,11 @@ components: type: string nullable: true example: Dagkaart - element1: + department: type: string nullable: true example: 900 - element2: + costType: type: string nullable: true example: 84956 @@ -2257,17 +2264,18 @@ components: name: type: string example: Dagkaart - BUS - incomingName: + sourceMetadataId: type: string + format: uuid example: null nullable: true identifyingFieldValue: type: string example: null nullable: true - concessionName: - type: string - example: RAIL + concessionId: + type: integer + example: 1 nullable: true lineType: type: string @@ -2282,11 +2290,11 @@ components: - debit - credit example: credit - element3: + costCenter: type: string example: 603031 nullable: true - element4: + articleName: type: string example: dagkaart nullable: true @@ -2346,20 +2354,16 @@ components: name: type: string example: Dagkaart - BUS - incomingName: - type: string - example: null - nullable: true + sourceMetadata: + type: object + $ref: '#/components/schemas/SourceMetadata' identifyingFieldValue: type: string example: null nullable: true - concessionName: - type: string - enum: - - RAIL - - BUS - example: RAIL + concession: + type: object + $ref: '#/components/schemas/Concession' lineType: type: string enum: @@ -2373,11 +2377,11 @@ components: - debit - credit example: credit - element3: + costCenter: type: string example: 603031 nullable: true - element4: + articleName: type: string example: dagkaart nullable: true @@ -2424,21 +2428,19 @@ components: type: string nullable: true example: Dagkaart - BUS - incomingName: + sourceMetadataId: type: string + format: uuid nullable: true example: null identifyingFieldValue: type: string nullable: true example: null - concessionName: - type: string + concessionId: + type: integer nullable: true - enum: - - RAIL - - BUS - example: RAIL + example: 1 lineType: type: string nullable: true @@ -2454,11 +2456,11 @@ components: - debit - credit example: credit - element3: + costCenter: type: string nullable: true example: 603031 - element4: + articleName: type: string nullable: true example: dagkaart @@ -2759,15 +2761,6 @@ components: rejectionInfo: type: string example: api.htm.nl/v2/account/12345/msgs/abc - validFrom: - type: string - format: date-time - example: 2024-01-01T00:00:00.000 - validUntil: - type: string - format: date-time - nullable: true - example: null required: - sourceMetadataId - incomingName @@ -2776,7 +2769,6 @@ components: - businessOwner - rejectionProcessing - rejectionInfo - - validFrom SourceMetadataPostResponseBody: type: object properties: @@ -2807,15 +2799,6 @@ components: rejectionInfo: type: string example: api.htm.nl/v2/account/12345/msgs/abc - validFrom: - type: string - format: date-time - example: 2024-01-01T00:00:00.000 - validUntil: - type: string - format: date-time - nullable: true - example: null SourceMetadataPatchResponseBody: type: object properties: @@ -2903,12 +2886,9 @@ components: type: string format: en example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb - name: - type: string - enum: - - RAIL - - BUS - example: RAIL + concession: + type: object + $ref: "#/components/schemas/Concession" percentage: type: number example: 84.021 @@ -2934,12 +2914,9 @@ components: ConcessionMetadataPostRequestBody: type: object properties: - name: - type: string - enum: - - RAIL - - BUS - example: RAIL + concessionId: + type: integer + example: 1 percentage: type: number example: 84.021 @@ -2953,7 +2930,7 @@ components: nullable: true example: null required: - - name + - concessionId - percentage - validFrom ConcessionMetadataPostResponseBody: @@ -2968,12 +2945,9 @@ components: ConcessionMetadataPatchRequestBody: type: object properties: - name: - type: string - enum: - - RAIL - - BUS - example: RAIL + concessionId: + type: integer + example: 1 percentage: type: number example: 84.021 @@ -2995,6 +2969,30 @@ components: example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb required: - concessionMetadataId + ConcessionsGetResponseBody: + type: object + properties: + concessions: + type: array + items: + $ref: '#/components/schemas/Concession' + href: + type: string + nullable: true + description: URI for pagination. + example: null + Concession: + type: object + properties: + concessionId: + type: integer + example: 1 + name: + type: string + example: BUS + required: + - concessionId + - name SourceMetadata: type: object properties: @@ -3020,15 +3018,6 @@ components: rejectionInfo: type: string example: api.htm.nl/v2/account/12345/msgs/abc - validFrom: - type: string - format: date-time - example: 2024-01-01T00:00:00.000 - validUntil: - type: string - format: date-time - nullable: true - example: null required: - sourceMetadataId - incomingName -- 2.45.2 From 19afac017ddda9f840294b52fa4ca9f01bb45565 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 18 Feb 2025 14:58:45 +0100 Subject: [PATCH 091/372] OVPAY-1518 - Swapped concessionId. --- src/openapi/fiko/fiko-crud.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 192c31c..ca35c86 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -2989,7 +2989,7 @@ components: example: 1 name: type: string - example: BUS + example: RAIL required: - concessionId - name -- 2.45.2 From 8e77c34615c7ea8e35a728300ced30706e5eba35 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 19 Feb 2025 11:18:03 +0100 Subject: [PATCH 092/372] OVPAY-1518 - Added examples for Transactions v2. --- src/openapi/fiko/fiko-crud.yaml | 206 +++++++++++++++++++++++++++++++- 1 file changed, 204 insertions(+), 2 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index ca35c86..421467e 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -4,7 +4,7 @@ info: version: "1.0" description: CRUD APIs for ABT FIKO database v2. servers: - - url: https://api.integratielaag.nl/v1 + - url: https://api.integratielaag.nl/fiko/1.0 paths: /transactionitems: get: @@ -148,6 +148,121 @@ paths: application/json: schema: $ref: "#/components/schemas/TransactionItemsGetResponseBody" + examples: + No transaction items: + summary: No transaction items were found + description: No transaction items that match the search criteria were found. + value: + transactionItems: [] + href: null + List containing multiple sales transaction items: + summary: List containing multiple sales transaction items + description: List containing multiple sales transaction items of transaction type 'sales' with different statuses. + value: + transactionItems: + - transactionItemId: afce35b2-1dff-4ace-98d0-4b9ac405c87d + transactionType: sales + sourceName: Verkoopengine + transactionId: 1001236 + transactionLineId: 1 + name: HTM Maandkorting 20% + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4031 + status: created + aggregationReference: null + accountingSystemReference: null + - transactionItemId: 1c1fc1c8-57f4-4336-9b43-a974eae5afbf + transactionType: sales + sourceName: Verkoopengine + transactionId: 1002001 + transactionLineId: 1 + name: Reisproduct HTM 3 dag Anoniem + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4051 + status: failed + aggregationReference: null + accountingSystemReference: null + - transactionItemId: 3f58441e-dc8f-4956-9bc5-c952312476db + transactionType: sales + sourceName: Verkoopengine + transactionId: 1001871 + transactionLineId: 1 + name: Reisproduct HTM 3 dag Anoniem + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4051 + status: returned to src + aggregationReference: FIKO-171f40609e + accountingSystemReference: null + - transactionItemId: 4418825f-3f9b-45bc-b662-dc3cd4ce6599 + transactionType: sales + sourceName: Verkoopengine + transactionId: 1001131 + transactionLineId: 1 + name: Reisproduct HTM 3 dag Anoniem + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4051 + status: returned to trx-db + aggregationReference: null + accountingSystemReference: null + - transactionItemId: 2ddc1831-cf7b-4a77-8aa1-11aaf8e98d9f + transactionType: sales + sourceName: Verkoopengine + transactionId: 1001885 + transactionLineId: 1 + name: Reisproduct HTM 3 dag Anoniem + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4051 + status: re-entered + aggregationReference: null + accountingSystemReference: null + - transactionItemId: 5ab2513d-f334-4cf8-8895-4e7269374a4b + transactionType: sales + sourceName: Verkoopengine + transactionId: 1001679 + transactionLineId: 1 + name: Reisproduct HTM 1 dag Anoniem + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 1737 + status: succeeded + aggregationReference: FIKO-6a4fca8cd6 + accountingSystemReference: U4F-123456 + href: null post: summary: Add one ore more finanicial transaction items in bulk. description: Add one ore more finanicial transaction items in bulk. @@ -159,6 +274,56 @@ paths: application/json: schema: $ref: "#/components/schemas/TransactionItemsPostRequestBody" + examples: + Add single transaction item: + summary: Add single transaction item + description: Add single transaction item of type sales. + value: + transactionItems: + - transactionType: sales + sourceName: Verkoopengine + transactionId: 1001236 + transactionLineId: 1 + name: HTM Maandkorting 20% + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4031 + Add multiple transaction items: + summary: Add multiple transaction items + description: Add multiple transaction items of type sales. + value: + transactionItems: + - transactionType: sales + sourceName: Verkoopengine + transactionId: 1001236 + transactionLineId: 1 + name: HTM Maandkorting 20% + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4031 + - transactionType: sales + sourceName: Verkoopengine + transactionId: 1001237 + transactionLineId: 1 + name: HTM Maandkorting 20% + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4031 responses: "202": description: Accepted @@ -166,6 +331,16 @@ paths: application/json: schema: $ref: "#/components/schemas/TransactionItemsPostResponseBody" + examples: + Array of transaction items accepted: + summary: Array of transaction items accepted + description: Array of transaction items accepted. + value: + startTime: 2025-02-14T05:32:47.0672237Z + status: Running + clientTrackingId: 08584620957189579629541919368CU00 + callbackurl: https://api.integratielaag.nl/transactionitems/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c + retryAfter: 10 /transactionitems/{transactionItemId}: parameters: - in: path @@ -187,6 +362,27 @@ paths: application/json: schema: $ref: "#/components/schemas/TransactionItemsPatchRequestBody" + examples: + Return transaction item to transaction database: + summary: Return transaction item to transaction database + description: | + FMT updates the transaction item so that it is returned to the transaction database. + This is done by changing the status to 'returned to trx-db' and emptying the + aggregationReference and accountingSystemReference. + value: + status: returned to trx-db + aggregationReference: null + accountingSystemReference: null + Return transaction item to source: + summary: Return transaction item to source + description: | + FMT updates the transaction item so that it is returned to the source. + This is done by changing the status to 'returned to src' and emptying the + aggregationReference and accountingSystemReference. + value: + status: returned to src + aggregationReference: null + accountingSystemReference: null responses: "200": description: OK @@ -194,6 +390,12 @@ paths: application/json: schema: $ref: "#/components/schemas/TransactionItemsPatchResponseBody" + examples: + Transaction item successfully updated: + summary: Transaction item successfully updated + description: The transaction item was successfully updated in the database. + value: + transactionItemId: 7c3a5b0f-b89e-4f02-8b09-d11c5a050a07 /transactionitems/{transactionItemId}/processingfailures: parameters: - in: path @@ -1601,7 +1803,7 @@ components: callbackurl: type: string format: uri - example: "https://services.api.htm.nl/transactionitems/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c2241509f6225d6d568526b/runs/08584620957189579629541919368CU00/operations/c9f35a54-f5de-4bc6-991b-2219164aa56f?api-version=2022-05-01&sp=%2Fruns%2F08584620957189579629541919368CU00%2Foperations%2Fc9f35a54-f5de-4bc6-991b-2219164aa56f%2Fread&sv=1.0&sig=X8dPLkbtOdndMqNfZDxTEL_3k2MhE42YyL_2ATnSYj0&code=e0W6heo7VrzW-mtYzJlavaP99VZve_9fH-9NhIJW-ceJAzFu_yZ71g%3D%3D" + example: https://services.api.htm.nl/transactionitems/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c retryAfter: type: integer example: 10 -- 2.45.2 From 71ab5176b594341b46b63634450c0b4f7cd393f7 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 19 Feb 2025 13:39:49 +0100 Subject: [PATCH 093/372] OVPAY-1518 - Added examples for GET Metadata v2. --- src/openapi/fiko/fiko-crud.yaml | 451 +++++++++++++++++++++----------- 1 file changed, 299 insertions(+), 152 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 421467e..385be12 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -160,108 +160,108 @@ paths: description: List containing multiple sales transaction items of transaction type 'sales' with different statuses. value: transactionItems: - - transactionItemId: afce35b2-1dff-4ace-98d0-4b9ac405c87d - transactionType: sales - sourceName: Verkoopengine - transactionId: 1001236 - transactionLineId: 1 - name: HTM Maandkorting 20% - quantity: 1 - taxCode: V21 - amountExclTax: 100 - amountInclTax: 121 - amountTax: 21 - occurredOn: 2024-10-04T00:00:00Z - type: debit - articleNumber: 4031 - status: created - aggregationReference: null - accountingSystemReference: null - - transactionItemId: 1c1fc1c8-57f4-4336-9b43-a974eae5afbf - transactionType: sales - sourceName: Verkoopengine - transactionId: 1002001 - transactionLineId: 1 - name: Reisproduct HTM 3 dag Anoniem - quantity: 1 - taxCode: V21 - amountExclTax: 100 - amountInclTax: 121 - amountTax: 21 - occurredOn: 2024-10-04T00:00:00Z - type: debit - articleNumber: 4051 - status: failed - aggregationReference: null - accountingSystemReference: null - - transactionItemId: 3f58441e-dc8f-4956-9bc5-c952312476db - transactionType: sales - sourceName: Verkoopengine - transactionId: 1001871 - transactionLineId: 1 - name: Reisproduct HTM 3 dag Anoniem - quantity: 1 - taxCode: V21 - amountExclTax: 100 - amountInclTax: 121 - amountTax: 21 - occurredOn: 2024-10-04T00:00:00Z - type: debit - articleNumber: 4051 - status: returned to src - aggregationReference: FIKO-171f40609e - accountingSystemReference: null - - transactionItemId: 4418825f-3f9b-45bc-b662-dc3cd4ce6599 - transactionType: sales - sourceName: Verkoopengine - transactionId: 1001131 - transactionLineId: 1 - name: Reisproduct HTM 3 dag Anoniem - quantity: 1 - taxCode: V21 - amountExclTax: 100 - amountInclTax: 121 - amountTax: 21 - occurredOn: 2024-10-04T00:00:00Z - type: debit - articleNumber: 4051 - status: returned to trx-db - aggregationReference: null - accountingSystemReference: null - - transactionItemId: 2ddc1831-cf7b-4a77-8aa1-11aaf8e98d9f - transactionType: sales - sourceName: Verkoopengine - transactionId: 1001885 - transactionLineId: 1 - name: Reisproduct HTM 3 dag Anoniem - quantity: 1 - taxCode: V21 - amountExclTax: 100 - amountInclTax: 121 - amountTax: 21 - occurredOn: 2024-10-04T00:00:00Z - type: debit - articleNumber: 4051 - status: re-entered - aggregationReference: null - accountingSystemReference: null - - transactionItemId: 5ab2513d-f334-4cf8-8895-4e7269374a4b - transactionType: sales - sourceName: Verkoopengine - transactionId: 1001679 - transactionLineId: 1 - name: Reisproduct HTM 1 dag Anoniem - quantity: 1 - taxCode: V21 - amountExclTax: 100 - amountInclTax: 121 - amountTax: 21 - occurredOn: 2024-10-04T00:00:00Z - type: debit - articleNumber: 1737 - status: succeeded - aggregationReference: FIKO-6a4fca8cd6 - accountingSystemReference: U4F-123456 + - transactionItemId: afce35b2-1dff-4ace-98d0-4b9ac405c87d + transactionType: sales + sourceName: Verkoopengine + transactionId: 1001236 + transactionLineId: 1 + name: HTM Maandkorting 20% + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4031 + status: created + aggregationReference: null + accountingSystemReference: null + - transactionItemId: 1c1fc1c8-57f4-4336-9b43-a974eae5afbf + transactionType: sales + sourceName: Verkoopengine + transactionId: 1002001 + transactionLineId: 1 + name: Reisproduct HTM 3 dag Anoniem + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4051 + status: failed + aggregationReference: null + accountingSystemReference: null + - transactionItemId: 3f58441e-dc8f-4956-9bc5-c952312476db + transactionType: sales + sourceName: Verkoopengine + transactionId: 1001871 + transactionLineId: 1 + name: Reisproduct HTM 3 dag Anoniem + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4051 + status: returned to src + aggregationReference: FIKO-171f40609e + accountingSystemReference: null + - transactionItemId: 4418825f-3f9b-45bc-b662-dc3cd4ce6599 + transactionType: sales + sourceName: Verkoopengine + transactionId: 1001131 + transactionLineId: 1 + name: Reisproduct HTM 3 dag Anoniem + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4051 + status: returned to trx-db + aggregationReference: null + accountingSystemReference: null + - transactionItemId: 2ddc1831-cf7b-4a77-8aa1-11aaf8e98d9f + transactionType: sales + sourceName: Verkoopengine + transactionId: 1001885 + transactionLineId: 1 + name: Reisproduct HTM 3 dag Anoniem + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4051 + status: re-entered + aggregationReference: null + accountingSystemReference: null + - transactionItemId: 5ab2513d-f334-4cf8-8895-4e7269374a4b + transactionType: sales + sourceName: Verkoopengine + transactionId: 1001679 + transactionLineId: 1 + name: Reisproduct HTM 1 dag Anoniem + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 1737 + status: succeeded + aggregationReference: FIKO-6a4fca8cd6 + accountingSystemReference: U4F-123456 href: null post: summary: Add one ore more finanicial transaction items in bulk. @@ -280,50 +280,50 @@ paths: description: Add single transaction item of type sales. value: transactionItems: - - transactionType: sales - sourceName: Verkoopengine - transactionId: 1001236 - transactionLineId: 1 - name: HTM Maandkorting 20% - quantity: 1 - taxCode: V21 - amountExclTax: 100 - amountInclTax: 121 - amountTax: 21 - occurredOn: 2024-10-04T00:00:00Z - type: debit - articleNumber: 4031 + - transactionType: sales + sourceName: Verkoopengine + transactionId: 1001236 + transactionLineId: 1 + name: HTM Maandkorting 20% + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4031 Add multiple transaction items: summary: Add multiple transaction items description: Add multiple transaction items of type sales. value: transactionItems: - - transactionType: sales - sourceName: Verkoopengine - transactionId: 1001236 - transactionLineId: 1 - name: HTM Maandkorting 20% - quantity: 1 - taxCode: V21 - amountExclTax: 100 - amountInclTax: 121 - amountTax: 21 - occurredOn: 2024-10-04T00:00:00Z - type: debit - articleNumber: 4031 - - transactionType: sales - sourceName: Verkoopengine - transactionId: 1001237 - transactionLineId: 1 - name: HTM Maandkorting 20% - quantity: 1 - taxCode: V21 - amountExclTax: 100 - amountInclTax: 121 - amountTax: 21 - occurredOn: 2024-10-04T00:00:00Z - type: debit - articleNumber: 4031 + - transactionType: sales + sourceName: Verkoopengine + transactionId: 1001236 + transactionLineId: 1 + name: HTM Maandkorting 20% + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4031 + - transactionType: sales + sourceName: Verkoopengine + transactionId: 1001237 + transactionLineId: 1 + name: HTM Maandkorting 20% + quantity: 1 + taxCode: V21 + amountExclTax: 100 + amountInclTax: 121 + amountTax: 21 + occurredOn: 2024-10-04T00:00:00Z + type: debit + articleNumber: 4031 responses: "202": description: Accepted @@ -903,7 +903,7 @@ paths: example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 required: true description: The id of the booking metadata. - post: + post: summary: Add booking line metadata. description: Add booking line metadata. tags: @@ -1050,7 +1050,7 @@ paths: schema: type: string example: Dagkaart - description: The article name of the booking line metadata. + description: The article name of the booking line metadata. - in: query name: extRef1 schema: @@ -1065,7 +1065,7 @@ paths: name: extRef3 schema: type: string - example: extRef3 + example: extRef3 - in: query name: extRef4 schema: @@ -1170,6 +1170,49 @@ paths: application/json: schema: $ref: "#/components/schemas/TaxMetadataGetResponseBody" + examples: + List containing all tax metadata: + summary: List containing all tax metadata + description: Returns a list containing all tax metadata (no filters applied). + value: + taxMetadata: + - taxMetadataId: 2d444740-4131-4169-bb47-2d125641dc87 + taxCode: V0 + texPercantageAmount: 0 + description: BTW VERKOOP NUL + validFrom: 2024-03-22T09:00:00 + validUntil: null + - taxMetadataId: b5f879d1-043d-4357-9655-2eeca8ebe9bf + taxCode: V09 + taxPercentageAmount: 9 + description: BTW VERKOOP LAAG 9% + validFrom: 2024-03-22T09:00:00 + validUntil: null + - taxMetadataId: 62e1abe7-d76f-4364-9207-591c0601ba55 + taxCode: V21 + taxPercentageAmount: 21 + description: BTW VERKOOP HOOG 21% + validFrom: 2024-03-22T09:00:00 + validUntil: null + - taxMetadataId: 9a253fc3-e562-4c4a-925c-d9caf0dcc549 + taxCode: ?0 + taxPercentageAmount: 0 + description: BTW DEBIT NUL + validFrom: 2024-03-22T09:00:00 + validUntil: null + - taxMetadataId: 6243b848-5ca3-44e0-9860-4fb3a817f148 + taxCode: ?09 + taxPercentageAmount: 9 + description: BTW DEBIT laag 9% + validFrom: 2024-03-22T09:00:00 + validUntil: null + - taxMetadataId: 0240d6e4-6037-4da0-ac10-1fde0229d439 + taxCode: ?21 + taxPercentageAmount: 21 + description: BTW DEBIT hoog 21% + validFrom: 2024-03-22T09:00:00 + validUntil: null + href: null post: summary: Add tax metadata. description: Add tax metadata. @@ -1276,6 +1319,34 @@ paths: application/json: schema: $ref: "#/components/schemas/SourceMetadataGetResponseBody" + examples: + List containing all source metadata: + summary: List containing all source metadata + description: Returns a list containing all source metadata (no filters applied). + value: + sourceMetadata: + - sourceMetadataId: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0 + incomingName: HTM-web + incomingEntity: OrderLine + outgoingName: webshop + businessOwner: Corneel Verstoep + rejectionProcessing: system + rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc + - sourceMetadataId: c3a9ef01-06c6-4c05-8fc7-df825f676dfc + incomingName: HTM-app + incomingEntity: OrderLine + outgoingName: ticketapp + businessOwner: Daan Zeven + rejectionProcessing: mail + rejectionInfo: sven@infoplaza.nl + - sourceMetadataId: 0b6e3e07-c4e0-42bf-86f2-9c9522b71209 + incomingName: SMP + incomingEntity: OrderLine + outgoingName: balieverkoop + businessOwner: Gijs Sip + rejectionProcessing: mail + rejectionInfo: ao@htm.nl + href: null post: summary: Add source metadata. description: Add source metadata. @@ -1340,7 +1411,7 @@ paths: name: accountingPeriod schema: type: string - example: 2024-01 + example: 2024/01 description: The accounting period. - in: query name: isOpen @@ -1355,6 +1426,22 @@ paths: application/json: schema: $ref: "#/components/schemas/AccountingPeriodMetadataGetResponseBody" + examples: + List containing all accounting period metadata: + summary: List containing all accounting period metadata + description: Returns a list containing all accounting period metadata (no filters applied). + value: + accountingPeriodMetadata: + - accountingPeriodMetadataId: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + accountingPeriod: 2025/01 + isOpen: true + - accountingPeriodMetadataId: 36a34bd8-2b84-4c89-87a4-22e809f6ed4a + accountingPeriod: 2024/12 + isOpen: false + - accountingPeriodMetadataId: 33b4889b-0036-4870-87df-be43f9316cdf + accountingPeriod: 2024/11 + isOpen: false + href: null post: summary: Add accounting period metadata. description: Add accounting period metadata. @@ -1443,6 +1530,55 @@ paths: application/json: schema: $ref: "#/components/schemas/ConcessionMetadataGetResponseBody" + examples: + List containing all concession metadata: + summary: List containing all concession metadata + description: Returns a list containing all concession metadata (no filters applied). + value: + concessionMetadata: + - concessionMetadataId: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + concession: + concessionId: 1 + name: RAIL + percentage: 84.021 + validFrom: 2025-01-01T00:00:00.000 + validUntil: null + - concessionMetadataId: 39720be0-af88-486a-b5e2-faea7eb5b352 + concession: + concessionId: 2 + name: BUS + percentage: 15.979 + validFrom: 2025-01-01T00:00:00.000 + validUntil: null + - concessionMetadataId: 274db383-96dd-410e-a07e-0b9e3040ac91 + concession: + concessionId: 1 + name: RAIL + percentage: 83.021 + validFrom: 2024-12-01T00:00:00.000 + validUntil: 2024-12-31T23:59:59.999 + - concessionMetadataId: 03959bc5-83f2-4ac7-9bf5-67e0f2a6eace + concession: + concessionId: 2 + name: BUS + percentage: 16.979 + validFrom: 2024-12-01T00:00:00.000 + validUntil: 2024-12-31T23:59:59.999 + - concessionMetadataId: d5b7d8f6-5cb8-482e-9d9a-68909dc7b5d3 + concession: + concessionId: 1 + name: RAIL + percentage: 85.021 + validFrom: 2024-11-01T00:00:00.000 + validUntil: 2024-11-30T23:59:59.999 + - concessionMetadataId: 5ee5f86f-ab00-4630-b130-4714fd060d1a + concession: + concessionId: 2 + name: BUS + percentage: 14.979 + validFrom: 2024-11-01T00:00:00.000 + validUntil: 2024-11-30T23:59:59.999 + href: null post: summary: Add concession metadata. description: Add concession metadata. @@ -1616,6 +1752,17 @@ paths: application/json: schema: $ref: "#/components/schemas/ConcessionsGetResponseBody" + examples: + List containing all concessions: + summary: List containing all concessions + description: Returns a list containing all concessions (no filters applied). + value: + concessions: + - concessionId: 1 + name: RAIL + - concessionId: 2 + name: BUS + href: null components: securitySchemes: bearerToken: @@ -2558,14 +2705,14 @@ components: example: Dagkaart - BUS sourceMetadata: type: object - $ref: '#/components/schemas/SourceMetadata' + $ref: "#/components/schemas/SourceMetadata" identifyingFieldValue: type: string example: null nullable: true concession: type: object - $ref: '#/components/schemas/Concession' + $ref: "#/components/schemas/Concession" lineType: type: string enum: @@ -2672,7 +2819,7 @@ components: example: null extRef2: type: string - nullable: true + nullable: true example: null extRef3: type: string @@ -3024,7 +3171,7 @@ components: example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb accountingPeriod: type: string - example: 2024-01 + example: 2024/01 isOpen: type: boolean example: true @@ -3042,7 +3189,7 @@ components: properties: accountingPeriod: type: string - example: 2024-01 + example: 2024/01 isOpen: type: boolean example: true @@ -3063,7 +3210,7 @@ components: properties: accountingPeriod: type: string - example: 2024-01 + example: 2024/01 isOpen: type: boolean example: true @@ -3177,7 +3324,7 @@ components: concessions: type: array items: - $ref: '#/components/schemas/Concession' + $ref: "#/components/schemas/Concession" href: type: string nullable: true -- 2.45.2 From 7b2cf2f579f2570f0bc1554f39d4106f3c6edfc3 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 19 Feb 2025 15:30:17 +0100 Subject: [PATCH 094/372] OVPAY-1518 - Added examples for Audit Trail v2. --- src/openapi/fiko/fiko-crud.yaml | 155 +++++++++++++++++++++++++++++++- 1 file changed, 154 insertions(+), 1 deletion(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 385be12..04f48d8 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -334,7 +334,10 @@ paths: examples: Array of transaction items accepted: summary: Array of transaction items accepted - description: Array of transaction items accepted. + description: | + The array of transaction items was accepted successfully. + The transaction items will be processed asynchronously. + In the response body the consumer will find information on how to retrieve the processing status. value: startTime: 2025-02-14T05:32:47.0672237Z status: Running @@ -445,6 +448,27 @@ paths: application/json: schema: $ref: "#/components/schemas/TransactionAuditTrailsPostRequestBody" + examples: + Add new transaction audit trail for created transaction item: + summary: Add new transaction audit trail for created transaction item + description: Add a new audit trail record for a newly created transaction item. + value: + user: fiko + timestamp: 2022-01-01 12:34:00 + action: create + status: created + description: Transaction item created. + correlationId: null + Add new transaction audit trail for updated transaction item: + summary: Add new transaction audit trail for updated transaction item + description: Add a new audit trail record for an updated transaction item. + value: + user: r.meeuws + timestamp: 2022-01-02 12:34:00 + action: update + status: return to src + description: Transaction item returned to source. + correlationId: 0dc216ea-58e7-4a5e-aa18-449f0304209c responses: "201": description: Created @@ -452,6 +476,14 @@ paths: application/json: schema: $ref: "#/components/schemas/TransactionAuditTrailsPostResponseBody" + examples: + Transaction audit trail record created: + summary: Transaction audit trail record created + description: | + A new audit trail record for this transaction item was successfully created. + The transactionAuditTrailId is returned as a reference for the consumer. + value: + transactionAuditTrailId: 37a8095b-19db-498f-9349-5f37d21c5bdf /transactionaudittrails: get: summary: Find audit trail entries. @@ -536,6 +568,127 @@ paths: application/json: schema: $ref: "#/components/schemas/TransactionAuditTrailsGetResponseBody" + examples: + No transaction items: + summary: No transaction audit trails were found + description: No transaction audit trails that match the search criteria were found. + value: + transactionAuditTrails: [] + href: null + List containing multiple transaction audit trails: + summary: List containing multiple transaction audit trails + description: List containing multiple transaction audit trails of different transaction items (no filters applied). + value: + transactionAuditTrails: + - transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d + transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 + user: fiko + timestamp: 2025-01-01 12:34:51 + action: create + status: created + description: Transaction created. + correlationId: null + - transactionAuditTrailId: 1d234fc1-eb16-41d3-b2e0-e400e17b017f + transactionItemId: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b + user: fiko + timestamp: 2025-01-01 12:34:50 + action: create + status: created + description: Transaction created. + correlationId: null + - transactionAuditTrailId: f4798a84-489d-4533-9dfe-42423c70f6b6 + transactionItemId: e8891be1-1b8a-4a0f-91e2-6b523b6497dd + user: r.meeuws + timestamp: 2025-01-01 12:34:48 + action: update + status: return to src + description: Transaction retunred to source. + correlationId: a3891560-3084-42cb-867c-f289e7cda47d + - transactionAuditTrailId: cc80d58d-6ee7-409a-8c14-b1f807e67c10 + transactionItemId: 34ba3d7c-3ca1-4fa4-aa42-23d4c4fc767b + user: fiko + timestamp: 2025-01-01 12:34:47 + action: update + status: failed + description: Validation XYZ failed. + correlationId: null + href: null + List containing multiple transaction audit trails of one transaction item: + summary: List containing multiple audit trails of one transaction item + description: List containing multiple audit trail records of one transaction item (with id d667d293-aa82-4c9e-9b10-77cffc9058a1). + value: + transactionAuditTrails: + - transactionAuditTrailId: d571ff7c-eaa5-428a-9bc3-5a0fa3e5ee2e + transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 + user: fiko + timestamp: 2025-01-07 12:34:59 + action: update + status: re-entered + description: Transaction re-entered. + correlationId: null + - transactionAuditTrailId: b2192e6c-ab79-4000-a04d-d8f4d574a82f + transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 + user: r.meeuws + timestamp: 2025-01-04 12:34:54 + action: update + status: return to src + description: Transaction retunred to source. + correlationId: a3891560-3084-42cb-867c-f289e7cda47d + - transactionAuditTrailId: 1d759985-7f1a-48bd-8dd1-efa30ce26423 + transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 + user: fiko + timestamp: 2025-01-02 00:34:50 + action: update + status: failed + description: Validation XYZ failed. + correlationId: null + - transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d + transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 + user: fiko + timestamp: 2025-01-01 12:34:47 + action: create + status: created + description: Transaction created. + correlationId: null + href: null + List containing multiple audit trails of failed transactions: + summary: List containing multiple audit trails of failed transactions + description: List containing multiple audit trails of just failed transactions (status = failed). + value: + transactionAuditTrails: + - transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d + transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 + user: fiko + timestamp: 2025-01-01 00:34:51 + action: update + status: failed + description: Validation XYZ failed. + correlationId: null + - transactionAuditTrailId: 1d234fc1-eb16-41d3-b2e0-e400e17b017f + transactionItemId: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b + user: fiko + timestamp: 2025-01-01 00:34:50 + action: update + status: failed + description: Validation XYZ failed. + correlationId: null + - transactionAuditTrailId: f4798a84-489d-4533-9dfe-42423c70f6b6 + transactionItemId: e8891be1-1b8a-4a0f-91e2-6b523b6497dd + user: fiko + timestamp: 2025-01-01 00:34:48 + action: update + status: failed + description: Validation XYZ failed. + correlationId: null + - transactionAuditTrailId: cc80d58d-6ee7-409a-8c14-b1f807e67c10 + transactionItemId: 34ba3d7c-3ca1-4fa4-aa42-23d4c4fc767b + user: fiko + timestamp: 2025-01-01 00:34:47 + action: update + status: failed + description: Validation XYZ failed. + correlationId: null + href: null /processingfailures: get: summary: Find processing failures. -- 2.45.2 From 972219271e74e58227f202f196bd2779869336dd Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 19 Feb 2025 18:04:11 +0100 Subject: [PATCH 095/372] OVPAY-1518 - Added examples for GET Booking Processes v2. --- src/openapi/fiko/fiko-crud.yaml | 463 ++++++++++++++++++++++++++------ 1 file changed, 377 insertions(+), 86 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 04f48d8..14c38bf 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -460,15 +460,15 @@ paths: description: Transaction item created. correlationId: null Add new transaction audit trail for updated transaction item: - summary: Add new transaction audit trail for updated transaction item - description: Add a new audit trail record for an updated transaction item. - value: - user: r.meeuws - timestamp: 2022-01-02 12:34:00 - action: update - status: return to src - description: Transaction item returned to source. - correlationId: 0dc216ea-58e7-4a5e-aa18-449f0304209c + summary: Add new transaction audit trail for updated transaction item + description: Add a new audit trail record for an updated transaction item. + value: + user: r.meeuws + timestamp: 2022-01-02 12:34:00 + action: update + status: return to src + description: Transaction item returned to source. + correlationId: 0dc216ea-58e7-4a5e-aa18-449f0304209c responses: "201": description: Created @@ -613,43 +613,43 @@ paths: description: Validation XYZ failed. correlationId: null href: null - List containing multiple transaction audit trails of one transaction item: - summary: List containing multiple audit trails of one transaction item + ? List containing multiple transaction audit trails of one transaction item + : summary: List containing multiple audit trails of one transaction item description: List containing multiple audit trail records of one transaction item (with id d667d293-aa82-4c9e-9b10-77cffc9058a1). value: transactionAuditTrails: - - transactionAuditTrailId: d571ff7c-eaa5-428a-9bc3-5a0fa3e5ee2e - transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 - user: fiko - timestamp: 2025-01-07 12:34:59 - action: update - status: re-entered - description: Transaction re-entered. - correlationId: null - - transactionAuditTrailId: b2192e6c-ab79-4000-a04d-d8f4d574a82f - transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 - user: r.meeuws - timestamp: 2025-01-04 12:34:54 - action: update - status: return to src - description: Transaction retunred to source. - correlationId: a3891560-3084-42cb-867c-f289e7cda47d - - transactionAuditTrailId: 1d759985-7f1a-48bd-8dd1-efa30ce26423 - transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 - user: fiko - timestamp: 2025-01-02 00:34:50 - action: update - status: failed - description: Validation XYZ failed. - correlationId: null - - transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d - transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 - user: fiko - timestamp: 2025-01-01 12:34:47 - action: create - status: created - description: Transaction created. - correlationId: null + - transactionAuditTrailId: d571ff7c-eaa5-428a-9bc3-5a0fa3e5ee2e + transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 + user: fiko + timestamp: 2025-01-07 12:34:59 + action: update + status: re-entered + description: Transaction re-entered. + correlationId: null + - transactionAuditTrailId: b2192e6c-ab79-4000-a04d-d8f4d574a82f + transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 + user: r.meeuws + timestamp: 2025-01-04 12:34:54 + action: update + status: return to src + description: Transaction retunred to source. + correlationId: a3891560-3084-42cb-867c-f289e7cda47d + - transactionAuditTrailId: 1d759985-7f1a-48bd-8dd1-efa30ce26423 + transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 + user: fiko + timestamp: 2025-01-02 00:34:50 + action: update + status: failed + description: Validation XYZ failed. + correlationId: null + - transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d + transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 + user: fiko + timestamp: 2025-01-01 12:34:47 + action: create + status: created + description: Transaction created. + correlationId: null href: null List containing multiple audit trails of failed transactions: summary: List containing multiple audit trails of failed transactions @@ -688,7 +688,7 @@ paths: status: failed description: Validation XYZ failed. correlationId: null - href: null + href: null /processingfailures: get: summary: Find processing failures. @@ -834,6 +834,21 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingProcessesGetResponseBody" + examples: + List containing all booking processes: + summary: List containing all booking processes + description: Returns a list containing all booking processes (no filters applied). + value: + bookingProcesses: + - bookingProcessId: 37a8095b-19db-498f-9349-5f37d21c5bdf + name: Verkooptransacties + transactionType: sales + identifyingFieldName: articleNumber + - bookingProcessId: 03105285-3c4c-477a-821c-0fae801d9d26 + name: Inkooptransacties + transactionType: purchase + identifyingFieldName: null + href: null post: summary: Add a booking process. description: Add a booking process. @@ -990,6 +1005,37 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingMetadataGetResponseBody" + examples: + List containing all booking metadata: + summary: List containing all booking metadata + description: Returns a list containing all booking metadata (no filters applied). + value: + bookingMetadata: + - bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + bookingProcessId: 37a8095b-19db-498f-9349-5f37d21c5bdf + description: Dagkaart + department: 900 + costType: 84956 + documentCode: FIKO-OPBR + hasSeparateTaxLine: true + hasLinePerIdentifyingField: true + hasLinePerSource: true + hasLinePerConcession: true + validFrom: 2022-01-01 00:00:00 + validTo: null + - bookingMetadataId: bd290c3f-4a27-4898-911e-1aadacc4a034 + bookingProcessId: 37a8095b-19db-498f-9349-5f37d21c5bdf + description: Saldoreizen + department: 900 + costType: 84955 + documentCode: FIKO-OPBR + hasSeparateTaxLine: true + hasLinePerIdentifyingField: true + hasLinePerSource: true + hasLinePerConcession: true + validFrom: 2022-01-01 00:00:00 + validTo: null + href: null /bookingmetadata/{bookingMetadataId}: parameters: - in: path @@ -1108,6 +1154,63 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingGroupFieldsGetResponseBody" + examples: + List containing all booking group fields: + summary: List containing all booking group fields + description: Returns a list containing all booking group fields for all booking metadata (no filters applied). + value: + bookingGroupFields: + - bookingGroupFieldId: b34d0fc2-96fc-409b-93b6-ae51fb8c694a + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + identifyingFieldValue: 1737 + - bookingGroupFieldId: 3b9005f4-42c4-4e2b-b472-ba7d0926fe77 + bookingMetadataId: bd290c3f-4a27-4898-911e-1aadacc4a034 + identifyingFieldValue: 1748 + - bookingGroupFieldId: ae773282-ac9b-4a0b-a487-b4061ea2a42f + bookingMetadataId: bd290c3f-4a27-4898-911e-1aadacc4a034 + identifyingFieldValue: 1750 + - bookingGroupFieldId: fe1aca8c-3ef5-4e15-962b-202d28d3d761 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + identifyingFieldValue: 1757 + href: null + List containing all booking group fields for a single booking: + summary: List containing all booking group fields for a single booking + description: | + Returns a list containing all booking group fields for a single booking booking metadata 'Dagkaart' + (identified by the same bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617). + value: + bookingGroupFields: + - bookingGroupFieldId: b34d0fc2-96fc-409b-93b6-ae51fb8c694a + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + identifyingFieldValue: 1737 + - bookingGroupFieldId: fe1aca8c-3ef5-4e15-962b-202d28d3d761 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + identifyingFieldValue: 1757 + - bookingGroupFieldId: fede01e0-86c5-47d0-9466-3093132148e5 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + identifyingFieldValue: 4031 + - bookingGroupFieldId: d7c25182-b64e-4e47-8998-19ddb65b8f2c + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + identifyingFieldValue: 4032 + - bookingGroupFieldId: ea02d3eb-29e6-42fd-b7eb-dfbfd2231090 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + identifyingFieldValue: 4033 + - bookingGroupFieldId: a73407a6-ff8c-4924-a7ac-5cd605e1793c + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + identifyingFieldValue: 4034 + - bookingGroupFieldId: d9af4bf1-4e85-4eb6-ae5d-d2020b18d63c + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + identifyingFieldValue: 4051 + - bookingGroupFieldId: c1ba494b-249a-475b-a542-19918aa36778 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + identifyingFieldValue: 4053 + - bookingGroupFieldId: 69be1be0-c600-492d-aec1-8490409371da + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + identifyingFieldValue: 4054 + - bookingGroupFieldId: d7d00ec1-6d53-44e9-bcd8-01f6a523f771 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + identifyingFieldValue: 4055 + href: null /bookinggroupfields/{bookingGroupFieldId}: parameters: - in: path @@ -1209,31 +1312,37 @@ paths: schema: type: string example: extRef1 + description: External reference 1. - in: query name: extRef2 schema: type: string example: extRef2 + description: External reference 2. - in: query name: extRef3 schema: type: string example: extRef3 + description: External reference 3. - in: query name: extRef4 schema: type: string example: extRef4 + description: External reference 4. - in: query name: extRef5 schema: type: string example: extRef5 + description: External reference 5. - in: query name: extRef6 schema: type: string example: extRef6 + description: External reference 6. responses: "200": description: OK @@ -1241,6 +1350,188 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingLineMetadataGetResponseBody" + examples: + List containing all booking line metadata: + summary: List containing all booking line metadata + description: Returns a list containing all booking line metadata for all bookings (no filters applied). + value: + bookingLineMetadata: + - bookingLineMetadataId: 98dccb4c-f24f-4acd-a036-f4b465124842 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + name: Webshop - Dagkaart - BUS + sourceMetadata: + sourceMetadataId: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0 + incomingName: HTM-website + incomingEntity: OrderLine + outgoingName: Webshop + businessOwner: Corneel Verstoep + rejectionProcessing: system + rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc + identifyingFieldValue: null + concession: + concessionId: 2 + name: BUS + lineType: summary + lineSense: credit + costCenter: 603031 + articleName: dagkaart + extRef1: null + extRef2: null + extRef3: 2025-02-17 + extRef4: null + extRef5: Webshop + extRef6: null + - bookingLineMetadataId: 1bca01db-40d3-4447-9f28-41475ec6877d + bookingMetadataId: bd290c3f-4a27-4898-911e-1aadacc4a034 + name: TLS - Saldoreizen - RAIL + sourceMetadata: + sourceMetadataId: 4b06a325-1078-4a2f-b63e-1d81eae8e5c3 + incomingName: Translink + incomingEntity: Trip + outgoingName: TLS + businessOwner: Corneel Verstoep + rejectionProcessing: mail + rejectionInfo: helpdesk@translink.nl + identifyingFieldValue: null + concession: + concessionId: 1 + name: RAIL + lineType: summary + lineSense: credit + costCenter: 603007 + articleName: Opbrengst TLS + extRef1: null + extRef2: null + extRef3: 2025-02-17 + extRef4: null + extRef5: TLS + extRef6: null + href: null + List containing booking line metadata of one booking: + summary: List containing booking line metadata of one booking + description: | + Returns a list containing all booking line metadata a single booking. + This example contains all the booking lines for a 'Dagkaart' booking + (bookingMetadataId: "6ce10520-9a73-4cb4-b8dd-39ee46ceb617"). + value: + bookingLineMetadata: + - bookingLineMetadataId: 98dccb4c-f24f-4acd-a036-f4b465124842 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + name: Webshop Dagkaart - BUS + sourceMetadata: + sourceMetadataId: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0 + incomingName: HTM-website + incomingEntity: OrderLine + outgoingName: Webshop + businessOwner: Corneel Verstoep + rejectionProcessing: system + rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc + identifyingFieldValue: null + concession: + concessionId: 2 + name: BUS + lineType: summary + lineSense: credit + costCenter: 619031 + articleName: dagkaart + extRef1: null + extRef2: null + extRef3: 2025-02-17 + extRef4: null + extRef5: Webshop + extRef6: null + - bookingLineMetadataId: a4464b5c-9a8e-4e48-a0a0-5500b1ca0885 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + name: Webshop Dagkaart - RAIL + sourceMetadata: + sourceMetadataId: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0 + incomingName: HTM-website + incomingEntity: OrderLine + outgoingName: Webshop + businessOwner: Corneel Verstoep + rejectionProcessing: system + rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc + identifyingFieldValue: null + concession: + concessionId: 1 + name: RAIL + lineType: summary + lineSense: credit + costCenter: 603031 + articleName: dagkaart + extRef1: null + extRef2: null + extRef3: 2025-02-17 + extRef4: null + extRef5: Webshop + extRef6: null + - bookingLineMetadataId: feaa7b33-ba49-40a2-90f3-5dd70d591f17 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + name: Ticketapp Dagkaart - BUS + sourceMetadata: + sourceMetadataId: c3a9ef01-06c6-4c05-8fc7-df825f676dfc + incomingName: HTM-app + incomingEntity: OrderLine + outgoingName: ticketapp + businessOwner: Daan Zeven + rejectionProcessing: mail + rejectionInfo: sven@infoplaza.nl + identifyingFieldValue: null + concession: + concessionId: 2 + name: BUS + lineType: summary + lineSense: credit + costCenter: 619031 + articleName: dagkaart + extRef1: null + extRef2: null + extRef3: 2025-02-17 + extRef4: null + extRef5: Webshop + extRef6: null + - bookingLineMetadataId: ea6ce4e7-4d52-4b89-bbea-ffe0ef6c48ff + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + name: Ticketapp Dagkaart - RAIL + sourceMetadata: + sourceMetadataId: c3a9ef01-06c6-4c05-8fc7-df825f676dfc + incomingName: HTM-app + incomingEntity: OrderLine + outgoingName: ticketapp + businessOwner: Daan Zeven + rejectionProcessing: mail + rejectionInfo: sven@infoplaza.nl + identifyingFieldValue: null + concession: + concessionId: 1 + name: RAIL + lineType: summary + lineSense: credit + costCenter: 603031 + articleName: dagkaart + extRef1: null + extRef2: null + extRef3: 2025-02-17 + extRef4: null + extRef5: Webshop + extRef6: null + - bookingLineMetadataId: 0a8dbb7d-73c8-451e-9028-e4613283c7bd + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + name: Dagkaart - BTW + sourceMetadata: null + identifyingFieldValue: null + concession: null + lineType: tax + lineSense: credit + costCenter: 1337 + articleName: dagkaart + extRef1: null + extRef2: null + extRef3: 2025-02-17 + extRef4: null + extRef5: null + extRef6: null + href: null /bookinglinemetadata/{bookingLineMetadataId}: parameters: - in: path @@ -1478,27 +1769,27 @@ paths: description: Returns a list containing all source metadata (no filters applied). value: sourceMetadata: - - sourceMetadataId: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0 - incomingName: HTM-web - incomingEntity: OrderLine - outgoingName: webshop - businessOwner: Corneel Verstoep - rejectionProcessing: system - rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc - - sourceMetadataId: c3a9ef01-06c6-4c05-8fc7-df825f676dfc - incomingName: HTM-app - incomingEntity: OrderLine - outgoingName: ticketapp - businessOwner: Daan Zeven - rejectionProcessing: mail - rejectionInfo: sven@infoplaza.nl - - sourceMetadataId: 0b6e3e07-c4e0-42bf-86f2-9c9522b71209 - incomingName: SMP - incomingEntity: OrderLine - outgoingName: balieverkoop - businessOwner: Gijs Sip - rejectionProcessing: mail - rejectionInfo: ao@htm.nl + - sourceMetadataId: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0 + incomingName: HTM-web + incomingEntity: OrderLine + outgoingName: webshop + businessOwner: Corneel Verstoep + rejectionProcessing: system + rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc + - sourceMetadataId: c3a9ef01-06c6-4c05-8fc7-df825f676dfc + incomingName: HTM-app + incomingEntity: OrderLine + outgoingName: ticketapp + businessOwner: Daan Zeven + rejectionProcessing: mail + rejectionInfo: sven@infoplaza.nl + - sourceMetadataId: 0b6e3e07-c4e0-42bf-86f2-9c9522b71209 + incomingName: SMP + incomingEntity: OrderLine + outgoingName: balieverkoop + businessOwner: Gijs Sip + rejectionProcessing: mail + rejectionInfo: ao@htm.nl href: null post: summary: Add source metadata. @@ -1585,15 +1876,15 @@ paths: description: Returns a list containing all accounting period metadata (no filters applied). value: accountingPeriodMetadata: - - accountingPeriodMetadataId: e0af8c8f-d421-4567-a14e-48e2a1bb86fb - accountingPeriod: 2025/01 - isOpen: true - - accountingPeriodMetadataId: 36a34bd8-2b84-4c89-87a4-22e809f6ed4a - accountingPeriod: 2024/12 - isOpen: false - - accountingPeriodMetadataId: 33b4889b-0036-4870-87df-be43f9316cdf - accountingPeriod: 2024/11 - isOpen: false + - accountingPeriodMetadataId: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + accountingPeriod: 2025/01 + isOpen: true + - accountingPeriodMetadataId: 36a34bd8-2b84-4c89-87a4-22e809f6ed4a + accountingPeriod: 2024/12 + isOpen: false + - accountingPeriodMetadataId: 33b4889b-0036-4870-87df-be43f9316cdf + accountingPeriod: 2024/11 + isOpen: false href: null post: summary: Add accounting period metadata. @@ -1690,42 +1981,42 @@ paths: value: concessionMetadata: - concessionMetadataId: e0af8c8f-d421-4567-a14e-48e2a1bb86fb - concession: + concession: concessionId: 1 name: RAIL percentage: 84.021 validFrom: 2025-01-01T00:00:00.000 validUntil: null - concessionMetadataId: 39720be0-af88-486a-b5e2-faea7eb5b352 - concession: + concession: concessionId: 2 name: BUS percentage: 15.979 validFrom: 2025-01-01T00:00:00.000 validUntil: null - concessionMetadataId: 274db383-96dd-410e-a07e-0b9e3040ac91 - concession: + concession: concessionId: 1 name: RAIL percentage: 83.021 validFrom: 2024-12-01T00:00:00.000 validUntil: 2024-12-31T23:59:59.999 - concessionMetadataId: 03959bc5-83f2-4ac7-9bf5-67e0f2a6eace - concession: + concession: concessionId: 2 name: BUS percentage: 16.979 validFrom: 2024-12-01T00:00:00.000 validUntil: 2024-12-31T23:59:59.999 - concessionMetadataId: d5b7d8f6-5cb8-482e-9d9a-68909dc7b5d3 - concession: + concession: concessionId: 1 name: RAIL percentage: 85.021 validFrom: 2024-11-01T00:00:00.000 validUntil: 2024-11-30T23:59:59.999 - concessionMetadataId: 5ee5f86f-ab00-4630-b130-4714fd060d1a - concession: + concession: concessionId: 2 name: BUS percentage: 14.979 @@ -1911,10 +2202,10 @@ paths: description: Returns a list containing all concessions (no filters applied). value: concessions: - - concessionId: 1 - name: RAIL - - concessionId: 2 - name: BUS + - concessionId: 1 + name: RAIL + - concessionId: 2 + name: BUS href: null components: securitySchemes: @@ -2743,7 +3034,7 @@ components: type: string format: uuid example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 - bookingGroupMetadataId: + bookingMetadataId: type: string format: uuid example: 12b4d128-0ab8-4a4a-944d-25b83de38b27 @@ -2752,7 +3043,7 @@ components: example: 1737 required: - bookingGroupFieldId - - bookingGroupMetadataId + - bookingMetadataId - identifyingFieldValue href: type: string -- 2.45.2 From 4a123f11ee26058e7480da2414de30424a7ad074 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 20 Feb 2025 10:05:40 +0100 Subject: [PATCH 096/372] OVPAY-1518 - Added GET /transactionitems/responsestatus/* --- src/openapi/fiko/fiko-crud.yaml | 308 ++++++++++++++++++++------------ 1 file changed, 192 insertions(+), 116 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 14c38bf..e55bb2c 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -399,6 +399,25 @@ paths: description: The transaction item was successfully updated in the database. value: transactionItemId: 7c3a5b0f-b89e-4f02-8b09-d11c5a050a07 + /transactionitems/responsestatus/*: + get: + tags: + - Transactions v2 + summary: Get the status of the transaction items POST. + description: Get the status of the asynchronous transaction items POST processing. + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionItemsResponseStatusGetResponseBody" + "409": + description: Conflict + content: + application/json: + schema: + $ref: "#/components/schemas/409Response" /transactionitems/{transactionItemId}/processingfailures: parameters: - in: path @@ -1415,122 +1434,122 @@ paths: (bookingMetadataId: "6ce10520-9a73-4cb4-b8dd-39ee46ceb617"). value: bookingLineMetadata: - - bookingLineMetadataId: 98dccb4c-f24f-4acd-a036-f4b465124842 - bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 - name: Webshop Dagkaart - BUS - sourceMetadata: - sourceMetadataId: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0 - incomingName: HTM-website - incomingEntity: OrderLine - outgoingName: Webshop - businessOwner: Corneel Verstoep - rejectionProcessing: system - rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc - identifyingFieldValue: null - concession: - concessionId: 2 - name: BUS - lineType: summary - lineSense: credit - costCenter: 619031 - articleName: dagkaart - extRef1: null - extRef2: null - extRef3: 2025-02-17 - extRef4: null - extRef5: Webshop - extRef6: null - - bookingLineMetadataId: a4464b5c-9a8e-4e48-a0a0-5500b1ca0885 - bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 - name: Webshop Dagkaart - RAIL - sourceMetadata: - sourceMetadataId: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0 - incomingName: HTM-website - incomingEntity: OrderLine - outgoingName: Webshop - businessOwner: Corneel Verstoep - rejectionProcessing: system - rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc - identifyingFieldValue: null - concession: - concessionId: 1 - name: RAIL - lineType: summary - lineSense: credit - costCenter: 603031 - articleName: dagkaart - extRef1: null - extRef2: null - extRef3: 2025-02-17 - extRef4: null - extRef5: Webshop - extRef6: null - - bookingLineMetadataId: feaa7b33-ba49-40a2-90f3-5dd70d591f17 - bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 - name: Ticketapp Dagkaart - BUS - sourceMetadata: - sourceMetadataId: c3a9ef01-06c6-4c05-8fc7-df825f676dfc - incomingName: HTM-app - incomingEntity: OrderLine - outgoingName: ticketapp - businessOwner: Daan Zeven - rejectionProcessing: mail - rejectionInfo: sven@infoplaza.nl - identifyingFieldValue: null - concession: - concessionId: 2 - name: BUS - lineType: summary - lineSense: credit - costCenter: 619031 - articleName: dagkaart - extRef1: null - extRef2: null - extRef3: 2025-02-17 - extRef4: null - extRef5: Webshop - extRef6: null - - bookingLineMetadataId: ea6ce4e7-4d52-4b89-bbea-ffe0ef6c48ff - bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 - name: Ticketapp Dagkaart - RAIL - sourceMetadata: - sourceMetadataId: c3a9ef01-06c6-4c05-8fc7-df825f676dfc - incomingName: HTM-app - incomingEntity: OrderLine - outgoingName: ticketapp - businessOwner: Daan Zeven - rejectionProcessing: mail - rejectionInfo: sven@infoplaza.nl - identifyingFieldValue: null - concession: - concessionId: 1 - name: RAIL - lineType: summary - lineSense: credit - costCenter: 603031 - articleName: dagkaart - extRef1: null - extRef2: null - extRef3: 2025-02-17 - extRef4: null - extRef5: Webshop - extRef6: null - - bookingLineMetadataId: 0a8dbb7d-73c8-451e-9028-e4613283c7bd - bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 - name: Dagkaart - BTW - sourceMetadata: null - identifyingFieldValue: null - concession: null - lineType: tax - lineSense: credit - costCenter: 1337 - articleName: dagkaart - extRef1: null - extRef2: null - extRef3: 2025-02-17 - extRef4: null - extRef5: null - extRef6: null + - bookingLineMetadataId: 98dccb4c-f24f-4acd-a036-f4b465124842 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + name: Webshop Dagkaart - BUS + sourceMetadata: + sourceMetadataId: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0 + incomingName: HTM-website + incomingEntity: OrderLine + outgoingName: Webshop + businessOwner: Corneel Verstoep + rejectionProcessing: system + rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc + identifyingFieldValue: null + concession: + concessionId: 2 + name: BUS + lineType: summary + lineSense: credit + costCenter: 619031 + articleName: dagkaart + extRef1: null + extRef2: null + extRef3: 2025-02-17 + extRef4: null + extRef5: Webshop + extRef6: null + - bookingLineMetadataId: a4464b5c-9a8e-4e48-a0a0-5500b1ca0885 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + name: Webshop Dagkaart - RAIL + sourceMetadata: + sourceMetadataId: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0 + incomingName: HTM-website + incomingEntity: OrderLine + outgoingName: Webshop + businessOwner: Corneel Verstoep + rejectionProcessing: system + rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc + identifyingFieldValue: null + concession: + concessionId: 1 + name: RAIL + lineType: summary + lineSense: credit + costCenter: 603031 + articleName: dagkaart + extRef1: null + extRef2: null + extRef3: 2025-02-17 + extRef4: null + extRef5: Webshop + extRef6: null + - bookingLineMetadataId: feaa7b33-ba49-40a2-90f3-5dd70d591f17 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + name: Ticketapp Dagkaart - BUS + sourceMetadata: + sourceMetadataId: c3a9ef01-06c6-4c05-8fc7-df825f676dfc + incomingName: HTM-app + incomingEntity: OrderLine + outgoingName: ticketapp + businessOwner: Daan Zeven + rejectionProcessing: mail + rejectionInfo: sven@infoplaza.nl + identifyingFieldValue: null + concession: + concessionId: 2 + name: BUS + lineType: summary + lineSense: credit + costCenter: 619031 + articleName: dagkaart + extRef1: null + extRef2: null + extRef3: 2025-02-17 + extRef4: null + extRef5: Webshop + extRef6: null + - bookingLineMetadataId: ea6ce4e7-4d52-4b89-bbea-ffe0ef6c48ff + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + name: Ticketapp Dagkaart - RAIL + sourceMetadata: + sourceMetadataId: c3a9ef01-06c6-4c05-8fc7-df825f676dfc + incomingName: HTM-app + incomingEntity: OrderLine + outgoingName: ticketapp + businessOwner: Daan Zeven + rejectionProcessing: mail + rejectionInfo: sven@infoplaza.nl + identifyingFieldValue: null + concession: + concessionId: 1 + name: RAIL + lineType: summary + lineSense: credit + costCenter: 603031 + articleName: dagkaart + extRef1: null + extRef2: null + extRef3: 2025-02-17 + extRef4: null + extRef5: Webshop + extRef6: null + - bookingLineMetadataId: 0a8dbb7d-73c8-451e-9028-e4613283c7bd + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + name: Dagkaart - BTW + sourceMetadata: null + identifyingFieldValue: null + concession: null + lineType: tax + lineSense: credit + costCenter: 1337 + articleName: dagkaart + extRef1: null + extRef2: null + extRef3: 2025-02-17 + extRef4: null + extRef5: null + extRef6: null href: null /bookinglinemetadata/{bookingLineMetadataId}: parameters: @@ -3820,6 +3839,63 @@ components: - rejectionProcessing - rejectionInfo - validFrom + TransactionItemsResponseStatusGetResponseBody: + type: object + properties: + summary: + type: object + properties: + created: + type: integer + example: 15 + updated: + type: integer + example: 2 + total: + type: integer + example: 17 + required: + - created + - total + - updated + required: + - summary + 409Response: + type: object + properties: + code: + type: string + example: "409" + type: + type: string + example: error + message: + type: string + example: conflict + description: + type: string + example: >- + A transaction with the same TransactionId and TransactionLineId + already exists. + errors: + type: array + items: + type: object + properties: + detail: + type: string + example: >- + Transaction is a duplicate of a transaction already in the + system. + pointer: + type: string + example: "#/transactionItems/0" + transactionId: + type: string + example: 1ad109d3-fd7d-4b6f-872b-220d492f385f + transactionLineId: + type: string + example: fee907dd-e59d-44f5-a63b-bbdec38f79b7 rfc9457: type: object properties: -- 2.45.2 From 5fc879d6850e767f41518f5cfe31e9617422e9af Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 20 Feb 2025 10:38:01 +0100 Subject: [PATCH 097/372] OVPAY-1518 - Added final GET examples. --- src/openapi/fiko/fiko-crud.yaml | 107 ++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index e55bb2c..5aa6908 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -412,12 +412,40 @@ paths: application/json: schema: $ref: "#/components/schemas/TransactionItemsResponseStatusGetResponseBody" + examples: + Batch successfully processed: + summary: Batch successfully processed + description: | + Body of a batch of transaction items that was successfully processed. + A number of transaction items were inserted and another number was updated. + value: + summary: + created: 15 + updated: 2 + total: 17 "409": description: Conflict content: application/json: schema: $ref: "#/components/schemas/409Response" + examples: + A transaction item already exists: + summary: A transaction item already exists + description: | + In this batch of transaction items, a transaction with same transactionId and + transactionLineId already exists. Therefore, the whole batch is rolled back and + rejected. + value: + code: '409' + type: error + message: conflict + description: A transaction with the same TransactionId and TransactionLineId already exists. + errors: + - detail: Transaction is a duplicate of a transaction already in the system. + pointer: '#/transactionItems/0' + transactionId: 1ad109d3-fd7d-4b6f-872b-220d492f385f + transactionLineId: fee907dd-e59d-44f5-a63b-bbdec38f79b7 /transactionitems/{transactionItemId}/processingfailures: parameters: - in: path @@ -784,6 +812,85 @@ paths: application/json: schema: $ref: "#/components/schemas/ProcessingFailuresGetResponseBody" + examples: + No processing failures: + summary: No processing failures + description: No processing failures were found (for example for a single transaction item). + value: + processingFailures: [] + href: null + Multiple processing failures for a single transaction item: + summary: Multiple processing failures for a single transaction item + description: | + In this example multiple processing failures were found for a single transaction item. + This example shows how a single transaction items has failed validation two times, in which the + the first failure has two validation errors, which have been resolved, and the second failure + hasn't been. Which makes three processing failures total. + value: + processingFailures: + - processingFailureId: 37a8095b-19db-498f-9349-5f37d21c5bdf + transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce + timestamp: 2022-01-01 00:00:00 + element: costType + value: 901 + reasonCode: 004 + reasonDescription: Cost type does not exist. + resolved: false + change: null + - processingFailureId: ccc06dc9-956d-47d8-bde7-9644ddde2193 + transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce + timestamp: 2025-01-01 00:43:01 + element: costCenter + value: 84955 + reasonCode: 002 + reasonDescription: Cost center does not exist. + resolved: true + change: Adapt config + - processingFailureId: 96bf8d44-0030-4509-b24e-2d62299779c5 + transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce + timestamp: 2025-01-01 00:43:01 + element: department + value: 1337 + reasonCode: 001 + reasonDescription: Department does not exist. + resolved: true + change: Adapt config + href: null + List of unfiltered processing failures: + summary: List of unfiltered processing failures + description: | + In this example there is a list of processing failures where no filters have been applied. + This results in a list of all processing failures, for different transaction items. + value: + processingFailures: + - processingFailureId: 1d0f237e-5fbe-4107-8bdf-a41f43307ac0 + transactionItemId: d0425652-07a3-4b95-bb37-8bb15ea1b9b5 + timestamp: 2022-01-01 00:00:00 + element: occuredOn + value: 2027-01-01 + reasonCode: 009 + reasonDescription: Transaction date is in the future + resolved: false + change: null + - processingFailureId: 76aa82e1-a10f-4664-a84f-1f30d60884b3 + transactionItemId: 3f0a8a74-c642-441e-a187-d32fedb77fdf + timestamp: 2025-01-01 00:43:01 + element: costCenter + value: 84955 + reasonCode: 002 + reasonDescription: Cost center does not exist. + resolved: false + change: null + - processingFailureId: 25d2dd6f-ae17-44a7-b7a5-43eaf6de78e1 + transactionItemId: 446ad396-41f6-4c1f-942c-a131e620075d + timestamp: 2025-01-01 00:43:01 + element: department + value: 1337 + reasonCode: 001 + reasonDescription: Department does not exist. + resolved: false + change: null + href: null /processingfailures/{processingFailureId}: parameters: - in: path -- 2.45.2 From d0f2335acb25a5aa3cef317c2f2e3ae272ac4700 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 20 Feb 2025 11:26:50 +0100 Subject: [PATCH 098/372] OVPAY-1518 - Added POST and PATCH exampels for Booking Processes v2. --- src/openapi/fiko/fiko-crud.yaml | 145 ++++++++++++++++++++++++++++++-- 1 file changed, 138 insertions(+), 7 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 5aa6908..7c4a958 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -986,6 +986,15 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingProcessesPostRequestBody" + examples: + Add a new booking process: + summary: Add a new booking process + description: | + This example shows how a new booking process for purchase orders can be added. + value: + name: Inkooptransacties + transactionType: purchase + identifyingFieldName: articleNumber responses: "201": description: Created @@ -993,6 +1002,12 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingProcessesPostResponseBody" + examples: + New booking process added successfully: + summary: New booking process added successfully + description: The new booking process was successfully added to the database. + value: + bookingProcessId: 03105285-3c4c-477a-821c-0fae801d9d26 /bookingprocesses/{bookingProcessId}: parameters: - in: path @@ -1014,6 +1029,13 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingProcessesPatchRequestBody" + examples: + Update a booking process: + summary: Update a booking process + description: | + This example shows how a booking process can be updated. + value: + identifyingFieldName: orderNumber responses: "200": description: OK @@ -1021,6 +1043,12 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingProcessesPatchResponseBody" + examples: + Booking process successfully updated: + summary: Booking process successfully updated + description: The booking process was successfully updated in the database. + value: + bookingProcessId: 37a8095b-19db-498f-9349-5f37d21c5bdf /bookingprocesses/{bookingProcessId}/bookingmetadata: parameters: - in: path @@ -1042,6 +1070,22 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingMetadataPostRequestBody" + examples: + Add a new booking metadata: + summary: Add a new booking metadata + description: | + This example shows how a new booking metadata for a booking process can be added. + value: + description: Saldoreizen + department: 900 + costType: 84955 + documentCode: OPBR-FIKO + hasSeparateTaxLine: true + hasLinePerIdentifyingField: false + hasLinePerSource: true + hasLinePerConcession: true + validFrom: 2024-03-22T09:00:00 + validUntil: null responses: "201": description: Created @@ -1049,6 +1093,12 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingMetadataPostResponseBody" + examples: + New booking metadata added successfully: + summary: New booking metadata added successfully + description: The new booking metadata was successfully added to the database. + value: + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /bookingmetadata: get: summary: Find booking metadata. @@ -1148,7 +1198,7 @@ paths: hasLinePerSource: true hasLinePerConcession: true validFrom: 2022-01-01 00:00:00 - validTo: null + validUntil: null - bookingMetadataId: bd290c3f-4a27-4898-911e-1aadacc4a034 bookingProcessId: 37a8095b-19db-498f-9349-5f37d21c5bdf description: Saldoreizen @@ -1160,7 +1210,7 @@ paths: hasLinePerSource: true hasLinePerConcession: true validFrom: 2022-01-01 00:00:00 - validTo: null + validUntil: null href: null /bookingmetadata/{bookingMetadataId}: parameters: @@ -1183,6 +1233,13 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingMetadataPatchRequestBody" + examples: + Update booking metadata: + summary: Update booking metadata + description: | + In this example the booking metadata is updated. The validUntil field is updated to 2024-03-22T09:00:00. + value: + validUntil: 2024-03-22T09:00:00 responses: "200": description: OK @@ -1190,6 +1247,12 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingMetadataPatchResponseBody" + examples: + Booking metadata updated successfully: + summary: Booking metadata updated successfully + description: The booking metadata was successfully updated in the database. + value: + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /bookingmetadata/{bookingMetadataId}/bookinggroupfields: parameters: - in: path @@ -1211,6 +1274,12 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingGroupFieldsPostRequestBody" + examples: + Add a new booking group field: + summary: Add a new booking group field + description: Add a new booking group field to an existing booking. + value: + identifyingFieldValue: 4135 responses: "201": description: Created @@ -1218,6 +1287,12 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingGroupFieldsPostResponseBody" + examples: + New booking group field added successfully: + summary: New booking group field added successfully + description: The new booking group field was successfully added to the database. + value: + bookingGroupFieldId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /bookingmetadata/{bookingMetadataId}/bookinglinemetadata: parameters: - in: path @@ -1239,6 +1314,43 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingLineMetadataPostRequestBody" + examples: + Add a new tax booking line metadata: + summary: Add a new tax booking line metadata + description: In this example a new tax booking line metadata is added to an existing booking. + value: + name: Saldoreizen - BTW + sourceMetadataId: null + identifyingFieldValue: null + concessionId: null + lineType: tax + lineSense: credit + costCenter: 603031 + articleName: null + extRef1: null + extRef2: null + extRef3: null + extRef4: null + extRef5: TLS + extRef6: null + Add a new yield booking line metadata: + summary: Add a new yield booking line metadata + description: In this example a new yield booking line metadata is added to an existing booking. + value: + name: Opbrengst Saldoreizen - RAIL + sourceMetadataId: null + identifyingFieldValue: null + concessionId: 1 + lineType: analysis + lineSense: credit + costCenter: 603031 + articleName: Saldoreizen + extRef1: null + extRef2: null + extRef3: 2025-02-17 + extRef4: null + extRef5: TLS + extRef6: null responses: "201": description: Created @@ -1246,6 +1358,12 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingLineMetadataPostResponseBody" + examples: + New booking line metadata added successfully: + summary: New booking line metadata added successfully + description: The new booking line metadata was successfully added to the database. + value: + bookingLineMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /bookinggroupfields: get: summary: Find booking group fields. @@ -1679,6 +1797,13 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingLineMetadataPatchRequestBody" + examples: + Update cost center of a booking line: + summary: Update cost center of a booking line + description: | + In this example the cost center of an existing booking line metadata is updated. + value: + costCenter: 84957 responses: "200": description: OK @@ -1686,6 +1811,12 @@ paths: application/json: schema: $ref: "#/components/schemas/BookingLineMetadataPatchResponseBody" + examples: + Booking line metadata updated successfully: + summary: Booking line metadata updated successfully + description: The booking line metadata was successfully updated in the database. + value: + bookingLineMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 delete: summary: Delete booking line metadata. description: Delete booking line metadata. @@ -2999,7 +3130,7 @@ components: type: string format: date-time example: 2022-01-01 00:00:00 - validTo: + validUntil: type: string format: date-time nullable: true @@ -3053,7 +3184,7 @@ components: type: string format: date-time example: 2022-01-01 00:00:00 - validTo: + validUntil: type: string format: date-time nullable: true @@ -3117,7 +3248,7 @@ components: format: date-time nullable: true example: 2022-01-01 00:00:00 - validTo: + validUntil: type: string format: date-time nullable: true @@ -3272,7 +3403,7 @@ components: example: 12b4d128-0ab8-4a4a-944d-25b83de38b27 name: type: string - example: Dagkaart - BUS + example: Dagkaart - RAIL sourceMetadata: type: object $ref: "#/components/schemas/SourceMetadata" @@ -3346,7 +3477,7 @@ components: name: type: string nullable: true - example: Dagkaart - BUS + example: Dagkaart - RAIL sourceMetadataId: type: string format: uuid -- 2.45.2 From d496370cbe6e12f14ef636ee448c64db45898ebe Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 20 Feb 2025 11:48:14 +0100 Subject: [PATCH 099/372] OVPAY-1518 - Added POST and PATCH examples for Metadata v2. --- src/openapi/fiko/fiko-crud.yaml | 173 ++++++++++++++++++++++++++------ 1 file changed, 143 insertions(+), 30 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 7c4a958..b341b01 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -437,13 +437,13 @@ paths: transactionLineId already exists. Therefore, the whole batch is rolled back and rejected. value: - code: '409' + code: "409" type: error message: conflict description: A transaction with the same TransactionId and TransactionLineId already exists. errors: - detail: Transaction is a duplicate of a transaction already in the system. - pointer: '#/transactionItems/0' + pointer: "#/transactionItems/0" transactionId: 1ad109d3-fd7d-4b6f-872b-220d492f385f transactionLineId: fee907dd-e59d-44f5-a63b-bbdec38f79b7 /transactionitems/{transactionItemId}/processingfailures: @@ -828,33 +828,33 @@ paths: hasn't been. Which makes three processing failures total. value: processingFailures: - - processingFailureId: 37a8095b-19db-498f-9349-5f37d21c5bdf - transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce - timestamp: 2022-01-01 00:00:00 - element: costType - value: 901 - reasonCode: 004 - reasonDescription: Cost type does not exist. - resolved: false - change: null - - processingFailureId: ccc06dc9-956d-47d8-bde7-9644ddde2193 - transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce - timestamp: 2025-01-01 00:43:01 - element: costCenter - value: 84955 - reasonCode: 002 - reasonDescription: Cost center does not exist. - resolved: true - change: Adapt config - - processingFailureId: 96bf8d44-0030-4509-b24e-2d62299779c5 - transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce - timestamp: 2025-01-01 00:43:01 - element: department - value: 1337 - reasonCode: 001 - reasonDescription: Department does not exist. - resolved: true - change: Adapt config + - processingFailureId: 37a8095b-19db-498f-9349-5f37d21c5bdf + transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce + timestamp: 2022-01-01 00:00:00 + element: costType + value: 901 + reasonCode: 004 + reasonDescription: Cost type does not exist. + resolved: false + change: null + - processingFailureId: ccc06dc9-956d-47d8-bde7-9644ddde2193 + transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce + timestamp: 2025-01-01 00:43:01 + element: costCenter + value: 84955 + reasonCode: 002 + reasonDescription: Cost center does not exist. + resolved: true + change: Adapt config + - processingFailureId: 96bf8d44-0030-4509-b24e-2d62299779c5 + transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce + timestamp: 2025-01-01 00:43:01 + element: department + value: 1337 + reasonCode: 001 + reasonDescription: Department does not exist. + resolved: true + change: Adapt config href: null List of unfiltered processing failures: summary: List of unfiltered processing failures @@ -1250,7 +1250,7 @@ paths: examples: Booking metadata updated successfully: summary: Booking metadata updated successfully - description: The booking metadata was successfully updated in the database. + description: The booking metadata was successfully updated in the database. value: bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /bookingmetadata/{bookingMetadataId}/bookinggroupfields: @@ -1925,6 +1925,16 @@ paths: application/json: schema: $ref: "#/components/schemas/TaxMetadataPostRequestBody" + examples: + Add new tax metadata: + summary: Add new tax metadata + description: This example adds a new tax metadata record to the database. + value: + taxCode: V21.4 + taxPercentageAmount: 21.4 + description: BTW VERKOOP HOOG 21.4% + validFrom: 2025-03-22T09:00:00 + validUntil: null responses: "201": description: Created @@ -1932,6 +1942,12 @@ paths: application/json: schema: $ref: "#/components/schemas/TaxMetadataPostResponseBody" + examples: + Tax metadata created successfully: + summary: Tax metadata created successfully + description: The tax metadata was successfully added to the database. + value: + taxMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /taxmetadata/{taxMetadataId}: parameters: - in: path @@ -1953,6 +1969,12 @@ paths: application/json: schema: $ref: "#/components/schemas/TaxMetadataPatchRequestBody" + examples: + Update tax metadata: + summary: Update tax metadata + description: In this example the tax metadata is updated. The validUntil field is updated to 2025-03-22T09:00:00. + value: + validUntil: 2025-03-22T09:00:00 responses: "200": description: OK @@ -1960,6 +1982,12 @@ paths: application/json: schema: $ref: "#/components/schemas/TaxMetadataPatchResponseBody" + examples: + Tax metadata updated successfully: + summary: Tax metadata updated successfully + description: The tax metadata was successfully updated in the database. + value: + taxMetadataId: 7c3a5b0f-b89e-4f02-8b09-d11c5a050a07 /sourcemetadata: get: summary: Find source metadata. @@ -2059,6 +2087,17 @@ paths: application/json: schema: $ref: "#/components/schemas/SourceMetadataPostRequestBody" + examples: + Add a new source to the metadata: + summary: Add a new source to the metadata + description: Add a new record to the source metadata in the database. + value: + incomingName: HTM-app + incomingEntity: OrderLine + outgoingName: ticketapp + businessOwner: Daan Zeven + rejectionProcessing: mail + rejectionInfo: sven@infoplaza.nl responses: "201": description: Created @@ -2066,6 +2105,12 @@ paths: application/json: schema: $ref: "#/components/schemas/SourceMetadataPostResponseBody" + examples: + Source metadata created successfully: + summary: Source metadata created successfully + description: The source metadata was successfully added to the database. + value: + sourceMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /sourcemetadata/{sourceMetadataId}: parameters: - in: path @@ -2087,6 +2132,12 @@ paths: application/json: schema: $ref: "#/components/schemas/SourceMetadataPatchRequestBody" + examples: + Update a source in the metadata: + summary: Update a source in the metadata + description: In this example we update the business owner of a single source meta data + value: + businessOwner: Eric Kok responses: "200": description: OK @@ -2094,6 +2145,12 @@ paths: application/json: schema: $ref: "#/components/schemas/SourceMetadataPatchResponseBody" + examples: + Source metadata updated successfully: + summary: Source metadata updated successfully + description: The source metadata was successfully updated in the database. + value: + sourceMetadataId: 37a8095b-19db-498f-9349-5f37d21c5bdf /accountingperiodmetadata: get: summary: Find accounting period metadata. @@ -2154,6 +2211,13 @@ paths: application/json: schema: $ref: "#/components/schemas/AccountingPeriodMetadataPostRequestBody" + examples: + Add a new accounting period metadata: + summary: Add a new accounting period metadata + description: In this example we add a new accounting period metadata. + value: + accountingPeriod: 2025/03 + isOpen: true responses: "201": description: Created @@ -2161,6 +2225,12 @@ paths: application/json: schema: $ref: "#/components/schemas/AccountingPeriodMetadataPostResponseBody" + examples: + Accounting period metadata created successfully: + summary: Accounting period metadata created successfully + description: The accounting period metadata was successfully added to the database. + value: + accountingPeriodMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /accountingperiodmetadata/{accountingPeriodMetadataId}: parameters: - in: path @@ -2182,6 +2252,12 @@ paths: application/json: schema: $ref: "#/components/schemas/AccountingPeriodMetadataPatchRequestBody" + examples: + Update an accounting period metadata: + summary: Update an accounting period metadata + description: In this example we close an existing accounting period in the metadata. + value: + isOpen: false responses: "200": description: OK @@ -2189,6 +2265,12 @@ paths: application/json: schema: $ref: "#/components/schemas/AccountingPeriodMetadataPatchResponseBody" + examples: + Accounting period metadata updated successfully: + summary: Accounting period metadata updated successfully + description: The accounting period metadata was successfully updated in the database. + value: + accountingPeriodMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /concessionmetadata: get: summary: Find concession metadata. @@ -2291,6 +2373,17 @@ paths: application/json: schema: $ref: "#/components/schemas/ConcessionMetadataPostRequestBody" + examples: + Add a new concession distribution: + summary: Add a new concession distribution + description: | + Every month, the administrator determines the concession distribution for the next month. + In this example, a new concession distribution for RAIL is added to the metadata. + value: + concessionId: 1 + percentage: 83.041 + validFrom: 2025-03-01T00:00:00.000 + validUntil: null responses: "201": description: Created @@ -2298,6 +2391,12 @@ paths: application/json: schema: $ref: "#/components/schemas/ConcessionMetadataPostResponseBody" + examples: + Concession metadata added succesfully: + summary: Concession metadata added succesfully + description: The new concession metadata was successfully added to the database. + value: + concessionMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /concessionmetadata/{concessionMetadataId}: parameters: - in: path @@ -2319,6 +2418,14 @@ paths: application/json: schema: $ref: "#/components/schemas/ConcessionMetadataPatchRequestBody" + examples: + Update a concession distribution: + summary: Update a concession distribution + description: | + Every month, the administrator determines the concession distribution for the next month. + In this example, the concession distribution for last month gets an end date. + value: + validUntil: 2025-02-28T23:59:59.999 responses: "200": description: OK @@ -2326,6 +2433,12 @@ paths: application/json: schema: $ref: "#/components/schemas/ConcessionMetadataPatchResponseBody" + examples: + Concession metadata updated successfully: + summary: Concession metadata updated successfully + description: The concession metadata was successfully updated in the database. + value: + concessionMetadataId: 37a8095b-19db-498f-9349-5f37d21c5bdf /metadataaudittrails: get: summary: Find metadata audit trails. -- 2.45.2 From 40795f380afcc6a4b0d99e17ef8ad17b689e3c4b Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 20 Feb 2025 13:11:36 +0100 Subject: [PATCH 100/372] OVPAY-1518 - Added POST and PATCH examples for Processing Failure v2. --- src/openapi/fiko/fiko-crud.yaml | 49 ++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index b341b01..fe409dd 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -467,6 +467,20 @@ paths: application/json: schema: $ref: "#/components/schemas/ProcessingFailuresPostRequestBody" + examples: + Add new processing failure for a transaction item: + summary: Add new processing failure for a transaction item + description: | + Add a new processing failure for a transaction item. This usually happens when + a transaction item has failed validation. In this specific example, the transaction + item has a timestamp in the future. + value: + timestamp: 2025-01-01 12:34:00 + element: occuredOn + value: 2027-01-01 12:34:00 + reasonCode: "012" + reasonDescription: Transaction date is in the future. + resolved: false responses: "201": description: Created @@ -474,6 +488,12 @@ paths: application/json: schema: $ref: "#/components/schemas/ProcessingFailuresPostResponseBody" + examples: + Processing failure successfully added: + summary: Processing failure successfully added + description: The processing failure was successfully added to the database. + value: + processingFailureId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /transactionitems/{transactionItemId}/transactionaudittrails: parameters: - in: path @@ -662,7 +682,7 @@ paths: href: null ? List containing multiple transaction audit trails of one transaction item : summary: List containing multiple audit trails of one transaction item - description: List containing multiple audit trail records of one transaction item (with id d667d293-aa82-4c9e-9b10-77cffc9058a1). + description: List containing multiple audit trail records of one transaction item (with id `d667d293-aa82-4c9e-9b10-77cffc9058a1`). value: transactionAuditTrails: - transactionAuditTrailId: d571ff7c-eaa5-428a-9bc3-5a0fa3e5ee2e @@ -833,7 +853,7 @@ paths: timestamp: 2022-01-01 00:00:00 element: costType value: 901 - reasonCode: 004 + reasonCode: "004" reasonDescription: Cost type does not exist. resolved: false change: null @@ -842,7 +862,7 @@ paths: timestamp: 2025-01-01 00:43:01 element: costCenter value: 84955 - reasonCode: 002 + reasonCode: "002" reasonDescription: Cost center does not exist. resolved: true change: Adapt config @@ -851,7 +871,7 @@ paths: timestamp: 2025-01-01 00:43:01 element: department value: 1337 - reasonCode: 001 + reasonCode: "001" reasonDescription: Department does not exist. resolved: true change: Adapt config @@ -868,7 +888,7 @@ paths: timestamp: 2022-01-01 00:00:00 element: occuredOn value: 2027-01-01 - reasonCode: 009 + reasonCode: "009" reasonDescription: Transaction date is in the future resolved: false change: null @@ -877,7 +897,7 @@ paths: timestamp: 2025-01-01 00:43:01 element: costCenter value: 84955 - reasonCode: 002 + reasonCode: "002" reasonDescription: Cost center does not exist. resolved: false change: null @@ -886,7 +906,7 @@ paths: timestamp: 2025-01-01 00:43:01 element: department value: 1337 - reasonCode: 001 + reasonCode: "001" reasonDescription: Department does not exist. resolved: false change: null @@ -911,6 +931,15 @@ paths: application/json: schema: $ref: "#/components/schemas/ProcessingFailuresPatchRequestBody" + examples: + Resolve an existing processing failure: + summary: Resolve an existing processing failure + description: | + In this example, the processing failure with the id `37a8095b-19db-498f-9349-5f37d21c5bdf` + has been resolved by chaning the config. + value: + resolved: true + change: Adapt config responses: "200": description: OK @@ -918,6 +947,12 @@ paths: application/json: schema: $ref: "#/components/schemas/ProcessingFailuresPatchResponseBody" + examples: + Processing failure updated successfully: + summary: Processing failure updated successfully + description: The processing failure has been updated successfully. + value: + processingFailureId: 37a8095b-19db-498f-9349-5f37d21c5bdf /bookingprocesses: get: summary: Find booking processes. -- 2.45.2 From 030f4a2087d94a280333e9cab7aeaaab1b4ac45c Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Thu, 20 Feb 2025 13:20:14 +0100 Subject: [PATCH 101/372] OVPAY-1518 - Minor documentation improvements. --- src/openapi/fiko/fiko-crud.yaml | 80 +++++++++++++++++---------------- 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index fe409dd..8bf9703 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -1,8 +1,10 @@ openapi: "3.0.3" info: - title: ABT FIKO CRUD APIs v2 + title: FIKO CRUD APIs v2.2 version: "1.0" - description: CRUD APIs for ABT FIKO database v2. + description: | + CRUD APIs for FIKO resource model v2.2. This version of the API corresponds with version 2.2 + of the data model in [Lucid Chart](https://lucid.app/lucidchart/50c0ff9d-48ba-4ea9-8182-10bede07d3b1/edit?page=LL7PJg1Y_GOA>). servers: - url: https://api.integratielaag.nl/fiko/1.0 paths: @@ -11,7 +13,7 @@ paths: summary: Find transaction items. description: Find transaction items. tags: - - Transactions v2 + - Transactions v2.2 parameters: - in: query name: transactionItemId @@ -267,7 +269,7 @@ paths: summary: Add one ore more finanicial transaction items in bulk. description: Add one ore more finanicial transaction items in bulk. tags: - - Transactions v2 + - Transactions v2.2 requestBody: required: true content: @@ -358,7 +360,7 @@ paths: summary: Update a transaction item. description: Update a transaction item. tags: - - Transactions v2 + - Transactions v2.2 requestBody: required: true content: @@ -402,7 +404,7 @@ paths: /transactionitems/responsestatus/*: get: tags: - - Transactions v2 + - Transactions v2.2 summary: Get the status of the transaction items POST. description: Get the status of the asynchronous transaction items POST processing. responses: @@ -460,7 +462,7 @@ paths: summary: Add a processing failure. description: Add a processing failure. tags: - - Failures v2 + - Failures v2.2 requestBody: required: true content: @@ -508,7 +510,7 @@ paths: summary: Add an audit trail entry. description: Add an audit trail entry. tags: - - Audit Trail v2 + - Audit Trail v2.2 requestBody: required: true content: @@ -556,7 +558,7 @@ paths: summary: Find audit trail entries. description: Find audit trail entries. tags: - - Audit Trail v2 + - Audit Trail v2.2 parameters: - in: query name: transactionAuditTrailId @@ -761,7 +763,7 @@ paths: summary: Find processing failures. description: Find processing failures. tags: - - Failures v2 + - Failures v2.2 parameters: - in: query name: processingFailureId @@ -925,7 +927,7 @@ paths: summary: Update processing failure. description: Update processing failure. tags: - - Failures v2 + - Failures v2.2 requestBody: content: application/json: @@ -958,7 +960,7 @@ paths: summary: Find booking processes. description: Find booking processes. tags: - - Booking Processes v2 + - Booking Processes v2.2 parameters: - in: query name: bookingProcessId @@ -1014,7 +1016,7 @@ paths: summary: Add a booking process. description: Add a booking process. tags: - - Booking Processes v2 + - Booking Processes v2.2 requestBody: required: true content: @@ -1057,7 +1059,7 @@ paths: summary: Update a booking process. description: Update a booking process. tags: - - Booking Processes v2 + - Booking Processes v2.2 requestBody: required: true content: @@ -1098,7 +1100,7 @@ paths: summary: Add booking metadata. description: Add booking metadata. tags: - - Booking Processes v2 + - Booking Processes v2.2 requestBody: required: true content: @@ -1139,7 +1141,7 @@ paths: summary: Find booking metadata. description: Find booking metadata. tags: - - Booking Processes v2 + - Booking Processes v2.2 parameters: - in: query name: bookingMetadataId @@ -1261,7 +1263,7 @@ paths: summary: Update booking metadata. description: Update booking metadata. tags: - - Booking Processes v2 + - Booking Processes v2.2 requestBody: required: true content: @@ -1302,7 +1304,7 @@ paths: summary: Add booking group fields. description: Add booking group fields. tags: - - Booking Processes v2 + - Booking Processes v2.2 requestBody: required: true content: @@ -1342,7 +1344,7 @@ paths: summary: Add booking line metadata. description: Add booking line metadata. tags: - - Booking Processes v2 + - Booking Processes v2.2 requestBody: required: true content: @@ -1404,7 +1406,7 @@ paths: summary: Find booking group fields. description: Find booking group fields. tags: - - Booking Processes v2 + - Booking Processes v2.2 parameters: - in: query name: bookingGroupFieldId @@ -1504,7 +1506,7 @@ paths: summary: Delete booking group field. description: Delete booking group field. tags: - - Booking Processes v2 + - Booking Processes v2.2 responses: "200": description: OK @@ -1513,7 +1515,7 @@ paths: summary: Find booking line metadata. description: Find booking line metadata. tags: - - Booking Processes v2 + - Booking Processes v2.2 parameters: - in: query name: bookingLineMetadataId @@ -1825,7 +1827,7 @@ paths: summary: Update booking line metadata. description: Update booking line metadata. tags: - - Booking Processes v2 + - Booking Processes v2.2 requestBody: required: true content: @@ -1856,7 +1858,7 @@ paths: summary: Delete booking line metadata. description: Delete booking line metadata. tags: - - Booking Processes v2 + - Booking Processes v2.2 responses: "200": description: OK @@ -1865,7 +1867,7 @@ paths: summary: Find tax metadata. description: Find tax metadata. tags: - - Metadata v2 + - Metadata v2.2 parameters: - in: query name: taxMetadataId @@ -1953,7 +1955,7 @@ paths: summary: Add tax metadata. description: Add tax metadata. tags: - - Metadata v2 + - Metadata v2.2 requestBody: required: true content: @@ -1997,7 +1999,7 @@ paths: summary: Update tax metadata. description: Update tax metadata. tags: - - Metadata v2 + - Metadata v2.2 requestBody: required: true content: @@ -2028,7 +2030,7 @@ paths: summary: Find source metadata. description: Find source metadata. tags: - - Metadata v2 + - Metadata v2.2 parameters: - in: query name: sourceMetadataId @@ -2115,7 +2117,7 @@ paths: summary: Add source metadata. description: Add source metadata. tags: - - Metadata v2 + - Metadata v2.2 requestBody: required: true content: @@ -2160,7 +2162,7 @@ paths: summary: Update source metadata. description: Update source metadata. tags: - - Metadata v2 + - Metadata v2.2 requestBody: required: true content: @@ -2191,7 +2193,7 @@ paths: summary: Find accounting period metadata. description: Find accounting period metadata. tags: - - Metadata v2 + - Metadata v2.2 parameters: - in: query name: accountingPeriodMetadataId @@ -2239,7 +2241,7 @@ paths: summary: Add accounting period metadata. description: Add accounting period metadata. tags: - - Metadata v2 + - Metadata v2.2 requestBody: required: true content: @@ -2280,7 +2282,7 @@ paths: summary: Update accounting period metadata. description: Update accounting period metadata. tags: - - Metadata v2 + - Metadata v2.2 requestBody: required: true content: @@ -2311,7 +2313,7 @@ paths: summary: Find concession metadata. description: Find concession metadata. tags: - - Metadata v2 + - Metadata v2.2 parameters: - in: query name: concessionMetadataId @@ -2401,7 +2403,7 @@ paths: summary: Add concession metadata. description: Add concession metadata. tags: - - Metadata v2 + - Metadata v2.2 requestBody: required: true content: @@ -2446,7 +2448,7 @@ paths: summary: Update concession metadata. description: Update concession metadata. tags: - - Metadata v2 + - Metadata v2.2 requestBody: required: true content: @@ -2480,7 +2482,7 @@ paths: description: Find metadata audit trails. deprecated: true tags: - - Audit Trail v2 + - Audit Trail v2.2 parameters: - in: query name: metadataAuditTrailId @@ -2574,7 +2576,7 @@ paths: description: Add metadata audit trail. deprecated: true tags: - - Audit Trail v2 + - Audit Trail v2.2 requestBody: required: true content: @@ -2593,7 +2595,7 @@ paths: summary: Get all concessions. description: Get all concessions. tags: - - References v2 + - References v2.2 responses: "200": description: OK -- 2.45.2 From 298f089d6c365c2d5c1abb9ce9613b5e1298f009 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Fri, 21 Feb 2025 11:33:54 +0100 Subject: [PATCH 102/372] added billing information CRUD en some tidying --- src/openapi/customers/customers-crud-v2.yaml | 681 +++++++++++++------ 1 file changed, 483 insertions(+), 198 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index b4327ae..27bf74d 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1119,125 +1119,6 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited - /customers/{customerProfileId}/ovpaytokens: - post: - tags: - - Ovpay Token - summary: Create a new ovpay token - description: >- - - parameters: - - name: customerProfileId - in: path - required: true - schema: - type: integer - example: 1 - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ovPayTokenEntity" - examples: - EMV token: - value: - ovpaytoken: - tokenTypeId: 1 - xTat: 0115b0df-db38-4702-8811-6f7de00db3ac - xBot: 71a88843-32b8-4d52-ac25-de2458c47775 - alias: Mijn Rabo Pas - tokenStatusId: 2 - expirationDate: "2026-04-20T17:05:52.000+02:00" - OVpas token physical: - value: - ovpaytoken: - tokenTypeId: 2 - xTat: 0115b0df-db38-4702-8811-6f7de00db3ac - xBot: 71a88843-32b8-4d52-ac25-de2458c47775 - alias: Mijn OV Pas - ovpasNumber: 4048453105891361 - tokenStatusId: 2 - expirationDate: "2026-04-20T17:05:52.000+02:00" - required: true - responses: - 201: - description: Successfully created a customer ovpaytoken - content: - application/json: - schema: - $ref: "#/components/schemas/postOvPayTokenResponse" - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - /ovpaytokens/{ovpaytokenId}: - patch: - tags: - - Ovpay Token - summary: Update an ovpay token - description: >- - - parameters: - - name: ovpaytokenId - in: path - required: true - schema: - type: integer - example: 1 - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/ovPayTokenEntity" - examples: - updateTokenAlias: - value: - ovpaytoken: - alias: "ING pas mobiel" - updateTokenStatus to removed: - value: - ovpaytoken: - tokenStatusId: 6 - replaceToken: - value: - ovpaytoken: - tokenStatusId: 3 - replacedByTokenId: 8 - required: true - responses: - 200: - description: Successfully updated a customer ovpaytoken - content: - application/json: - schema: - $ref: "#/components/schemas/postOvPayTokenResponse" - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited - delete: - tags: - - Ovpay Token - summary: Delete an ovpay token - description: >- - - parameters: - - name: ovpaytokenId - in: path - required: true - schema: - type: integer - example: 2 - responses: - 200: - description: Successfully deleted a customer ovpaytoken - content: - application/json: - {} - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited /ovpaytokens: get: tags: @@ -1361,6 +1242,125 @@ paths: ], "href": null, } + /customers/{customerProfileId}/ovpaytokens: + post: + tags: + - Ovpay Token + summary: Create a new ovpay token + description: >- + + parameters: + - name: customerProfileId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ovPayTokenEntity" + examples: + EMV token: + value: + ovpaytoken: + tokenTypeId: 1 + xTat: 0115b0df-db38-4702-8811-6f7de00db3ac + xBot: 71a88843-32b8-4d52-ac25-de2458c47775 + alias: Mijn Rabo Pas + tokenStatusId: 2 + expirationDate: "2026-04-20T17:05:52.000+02:00" + OVpas token physical: + value: + ovpaytoken: + tokenTypeId: 2 + xTat: 0115b0df-db38-4702-8811-6f7de00db3ac + xBot: 71a88843-32b8-4d52-ac25-de2458c47775 + alias: Mijn OV Pas + ovpasNumber: 4048453105891361 + tokenStatusId: 2 + expirationDate: "2026-04-20T17:05:52.000+02:00" + required: true + responses: + 201: + description: Successfully created a customer ovpaytoken + content: + application/json: + schema: + $ref: "#/components/schemas/postOvPayTokenResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /ovpaytokens/{ovpaytokenId}: + patch: + tags: + - Ovpay Token + summary: Update an ovpay token + description: >- + + parameters: + - name: ovpaytokenId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ovPayTokenEntity" + examples: + updateTokenAlias: + value: + ovpaytoken: + alias: "ING pas mobiel" + updateTokenStatus to removed: + value: + ovpaytoken: + tokenStatusId: 6 + replaceToken: + value: + ovpaytoken: + tokenStatusId: 3 + replacedByTokenId: 8 + required: true + responses: + 200: + description: Successfully updated a customer ovpaytoken + content: + application/json: + schema: + $ref: "#/components/schemas/postOvPayTokenResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + delete: + tags: + - Ovpay Token + summary: Delete an ovpay token + description: >- + + parameters: + - name: ovpaytokenId + in: path + required: true + schema: + type: integer + example: 2 + responses: + 200: + description: Successfully deleted a customer ovpaytoken + content: + application/json: + {} + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /customers/{customerProfileId}/ovchipcards: post: tags: @@ -1458,6 +1458,233 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited + /billingInformations: + get: + tags: + - Billing Information + summary: Find billing information + description: >- + + parameters: + - name: customerProfileId + in: query + schema: + type: integer + example: 1 + - name: issuerCountry + in: query + schema: + type: string + example: "NL" + - name: iban + in: query + schema: + type: string + example: "NL73RABO2677424363" + - name: swift + in: query + schema: + type: string + example: "GHJZIEJSKVM" + - name: ascription + in: query + schema: + type: string + example: "J. Doe" + - name: alias + in: query + schema: + type: string + example: "John's billing details" + - name: billingAddressID + in: query + schema: + type: integer + example: 1 + responses: + 200: + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + getBillingInformationMultipleSpecificCustomer: + summary: Get multiple billing information entities for a specific customers + description: >- + Found multiple billing informations matching the search parameters + value: + { + "billingInformations":[ + { + "billingInformationId": 1, + "customerProfileId": 1, + "issuerCountry": "NL", + "iban": "NL06RABO8902022560", + "ascription": "J. Doe", + "alias": null, + "billingAddressId": 3 + }, + { + "billingInformationId": 2, + "customerProfileId": 1, + "issuerCountry": "NL", + "iban": "NL27ABNA4458972219", + "swift": "GHJZIEJSKVM", + "ascription": "J. Doe", + "alias": "John's billing details", + "billingAddressId": 4 + } + ] + } + getBillingInformationSingleSpecificCustomer: + summary: Get singel billing information entity for a specific customers + description: >- + Found one billing information matching the search parameters + value: + { + "billingInformations":[ + { + "billingInformationId": 1, + "customerProfileId": 1, + "issuerCountry": "NL", + "iban": "NL06RABO8902022560", + "ascription": "J. Doe", + "alias": null, + "billingAddressId": 3 + } + ] + } + getBillingInformationIssuerCountry: + summary: Get multiple billing information entities for a specific issuer country + description: >- + Found multiple billing informations matching the search parameters + value: + { + "billingInformations":[ + { + "billingInformationId": 1, + "customerProfileId": 1, + "issuerCountry": "NL", + "iban": "NL06RABO8902022560", + "ascription": "J. Doe", + "alias": null, + "billingAddressId": 3 + }, + { + "billingInformationId": 2, + "customerProfileId": 5, + "issuerCountry": "NL", + "iban": "NL27ABNA4458972219", + "swift": "GHJZIEJSKVM", + "ascription": "J. Doe", + "alias": null, + "billingAddressId": 42 + }, + { + "billingInformationId": 11, + "customerProfileId": 9, + "issuerCountry": "NL", + "iban": "NL27ABNA4458972219", + "swift": "GHJZIEJSKVM", + "ascription": "J. Doe", + "alias": null, + "billingAddressId": 84 + } + ] + } + /customers/{customerProfileId}/billingInformations: + post: + tags: + - Billing Information + summary: Add billing information for a customer + description: >- + + parameters: + - name: customerProfileId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/billingInformationEntity" + examples: + customerBillinginformationMandatoryFields: + value: + billingInformation: + issuerCountry: "NL" + iban: "NL73RABO2677424363" + ascription: "J. Doe" + billingAddressId: 1 + customerBillinginformationMandatoryFull: + value: + billingInformation: + issuerCountry: "NL" + iban: "NL73RABO2677424363" + swift: "GHJZIEJSKVM" + ascription: "J. Doe" + alias: "John's billing details" + billingAddressId: 1 + required: true + responses: + 201: + description: Successfully created a customer billingInformation + content: + application/json: + schema: + $ref: "#/components/schemas/postBillingInformationResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /billingInformations/{billingInformationId}: + patch: + tags: + - Billing Information + summary: Update a billing information + description: >- + + parameters: + - name: billingInformationId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/billingInformationEntity" + examples: + updateBillingInformationAlias: + value: + billingInformation: + alias: "Mijn rekening details" + updateBillingInformationAdressId: + value: + billingInformation: + billingAddressId: 4 + updateBillingInformation: + value: + billingInformation: + alias: "Mijn rekening details" + billingAddressId: 4 + required: true + responses: + 200: + description: Successfully updated a customer billing information + content: + application/json: + {} + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /directdebitmandates: get: tags: @@ -1582,7 +1809,7 @@ paths: post: tags: - Mandates - summary: Add a customer direct debitmandate + summary: Add a customer direct debit mandate description: >- parameters: @@ -1617,6 +1844,42 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited + /directdebitmandates/{directdebitmandateId}: + patch: + tags: + - Mandates + summary: Update a customer direct debit mandate + description: >- + + parameters: + - name: directdebitmandateId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/mandateEntity" + examples: + customerDirectDebitMandatePrepared: + value: + directDebitMandate: + mandateState: CANCELLED + required: true + responses: + 200: + description: Successfully updated a customer mandate + content: + application/json: + {} + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + components: securitySchemes: default: @@ -1857,65 +2120,6 @@ components: type: array items: $ref: "#/components/schemas/getAuditTrails" - ovPayTokenEntity: - type: object - properties: - ovPayTokenId: - type: integer - tokenType: - type: object - properties: - tokenTypeId: - type: string - name: - type: string - xTat: - type: string - xBot: - type: string - alias: - type: string - lastDigits: - type: integer - ovpasNumber: - type: string - tokenStatus: - type: object - properties: - tokenStatusId: - type: integer - name: - type: string - expirationDate: - type: string - replacedByTokenId: - type: integer - ovChipcardEntity: - type: object - properties: - chipCardNumber: - type: integer - validUntil: - type: string - format: date - alias: - type: string - personEntity: - type: object - properties: - birthname: - type: string - surname: - type: string - prefix: - type: string - suffix: - type: string - dateOfBirth: - type: string - format: date - emailAddress: - type: string addressPostEntity: required: - addressTypeId @@ -2029,21 +2233,6 @@ components: type: boolean addressType: type: integer - customerPreferencesEntity: - type: object - properties: - languageId: - type: integer - customerStatusEntity: - type: object - properties: - customerStatusId: - type: integer - customersEntity: - type: object - properties: - debtorStatusId: - type: integer postCustomerProfileResponse: type: object properties: @@ -2068,12 +2257,9 @@ components: phoneId: type: integer example: 2 - postCustomerProfileBillingInformationResponse: + postBillingInformationResponse: type: object properties: - customerNumber: - type: integer - example: 10000001 billingInformationId: type: integer example: 1 @@ -2123,6 +2309,42 @@ components: type: array items: $ref: "#/components/schemas/ovPayTokenEntity" + customerPreferencesEntity: + type: object + properties: + customerPreferenceId: + type: integer + languageId: + type: integer + customerStatusEntity: + type: object + properties: + customerStatusId: + type: integer + customersEntity: + type: object + properties: + debtorStatusId: + type: integer + billingInformationEntity: + type: object + properties: + billingInformationId: + type: integer + issuerCountry: + type: string + iban: + type: string + bic: + type: string + swift: + type: string + ascription: + type: string + alias: + type: string + billingAddressId: + type: integer mandateEntity: type: object properties: @@ -2136,6 +2358,69 @@ components: type: string mandateState: type: string + ovPayTokenEntity: + type: object + properties: + ovPayTokenId: + type: integer + tokenType: + type: object + properties: + tokenTypeId: + type: string + name: + type: string + xTat: + type: string + xBot: + type: string + alias: + type: string + lastDigits: + type: integer + ovpasNumber: + type: string + tokenStatus: + type: object + properties: + tokenStatusId: + type: integer + name: + type: string + expirationDate: + type: string + replacedByTokenId: + type: integer + ovChipcardEntity: + type: object + properties: + ovChipCardId: + type: integer + chipCardNumber: + type: integer + validUntil: + type: string + format: date + alias: + type: string + personEntity: + type: object + properties: + personId: + type: integer + birthname: + type: string + surname: + type: string + prefix: + type: string + suffix: + type: string + dateOfBirth: + type: string + format: date + emailAddress: + type: string postOvPayTokenResponse: type: object properties: -- 2.45.2 From 67109e72175986b9b140b9a09635dde5d55502c5 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Fri, 21 Feb 2025 12:43:12 +0100 Subject: [PATCH 103/372] pagination examples --- src/openapi/customers/customers-crud-v2.yaml | 412 +++++++++++++------ 1 file changed, 283 insertions(+), 129 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 27bf74d..acd9d10 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -7,107 +7,6 @@ servers: - url: https://api.integratielaag.nl/abt/abtcustomers/2.0 paths: /customers: - post: - tags: - - Customer - summary: Create a customer profile - description: >- - Create a customer profile in the ABT database with status ACTIVE and - debtorStatus Inactive with a start date based on the timestamp of this - post call. - - - Requested format for postal code: - - 0000AA - parameters: [] - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/postCustomerProfile" - examples: - minimumProfile: - value: {} - basicCustomerProfile: - value: - debtorStatusId: 2 - person: - birthname: Jan - surname: Jansen - emailAddress: j.jansen@hatseflats.nl - fullCustomerProfile: - value: - customerPreference: - languageId: 1 - debtorStatusId: 2 - person: - birthname: Jan - surname: Jansen - prefix: dhr - suffix: jr - dateOfBirth: "1970-01-01" - emailAddress: j.jansen@hatseflats.nl - addresses: - - street: Laan van Meerdervoort - houseNumber: 5 - houseNumberSuffix: B - postalCode: 2500AA - city: Den Haag - country: NL - isPreferred: true - addressTypeId: 1 - - street: Beeklaan - houseNumber: 30 - houseNumberSuffix: B - postalCode: 2500AA - city: Den Haag - country: NL - isPreferred: false - addressTypeId: 2 - phones: - - number: "6123456789" - countryCode: "+31" - phoneTypeId: 1 - isPreferred: true - - number: "7012345678" - countryCode: "+31" - phoneTypeId: 2 - isPreferred: false - required: true - responses: - 201: - description: Successful created a customer profile - content: - application/json: - schema: - $ref: "#/components/schemas/postCustomerProfileResponse" - examples: - customerProfileCreated: - summary: customerProfileCreated - description: >- - Successfully created a customer profile - value: - customerProfileId: 1 - customerNumber: 1000001 - 400: - description: Bad Request - content: - application/json: - schema: - $ref: "#/components/schemas/ErrorResponse" - examples: - invalidDataTypeError: - summary: invalidDataTypeError - description: >- - The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). - value: - type: https://htm.nl/api/v1/probs/bad-request - title: Your request contains an invalid datatype - detail: '''2023-02-01 00:00:00'' is not a valid Datetime' - instance: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b - security: - - default: [] - x-auth-type: Application & Application User - x-throttling-tier: Unlimited get: tags: - Customer @@ -275,7 +174,16 @@ paths: in: query schema: type: string - example: Mijn ING bankrekening + example: Mijn ING bankrekening + - name: offset + in: query + schema: + type: integer + - name: limit + in: query + schema: + type: integer + example: 20 responses: 200: description: Ok @@ -399,9 +307,16 @@ paths: user: user timestamp: "2023-10-20T17:05:52.000+02:00" correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 - - customerProfileId: 2 + _links: + { + "self":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?customerProfileId=1", + "method": "GET" + } + } + - customerProfileId: 12 customerNumber: 1000002 - debtorNumber: TEST001 + debtorNumber: DB100121 debtorStatus: debtorStatusId: 1 name: Inactive @@ -518,7 +433,28 @@ paths: user: user timestamp: "2023-10-20T17:05:52.000+02:00" correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 - href: null + _links: + { + "self":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?customerProfileId=12", + "method": "GET" + } + } + _links: + { + "self":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?offset=20", + "method": "GET" + }, + "prev":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers", + "method": "GET" + }, + "next":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?offset=40", + "method": "GET" + } + } getCustomerActive: summary: getCustomerActive description: >- @@ -634,7 +570,20 @@ paths: user: user timestamp: "2023-10-20T17:05:52.000+02:00" correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 - href: null + _links: + { + "self":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?customerProfileId=1", + "method": "GET" + } + } + _links: + { + "self":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers", + "method": "GET" + } + } getCustomerBlocked: summary: getCustomerBlocked description: >- @@ -755,7 +704,20 @@ paths: user: user timestamp: "2023-10-20T17:05:52.000+02:00" correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 - href: null + _links: + { + "self":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?customerProfileId=1", + "method": "GET" + } + } + _links: + { + "self":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers", + "method": "GET" + } + } 400: description: Bad Request content: @@ -776,6 +738,107 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited + post: + tags: + - Customer + summary: Create a customer profile + description: >- + Create a customer profile in the ABT database with status ACTIVE and + debtorStatus Inactive with a start date based on the timestamp of this + post call. + + - Requested format for postal code: + - 0000AA + parameters: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/postCustomerProfile" + examples: + minimumProfile: + value: {} + basicCustomerProfile: + value: + debtorStatusId: 2 + person: + birthname: Jan + surname: Jansen + emailAddress: j.jansen@hatseflats.nl + fullCustomerProfile: + value: + customerPreference: + languageId: 1 + debtorStatusId: 2 + person: + birthname: Jan + surname: Jansen + prefix: dhr + suffix: jr + dateOfBirth: "1970-01-01" + emailAddress: j.jansen@hatseflats.nl + addresses: + - street: Laan van Meerdervoort + houseNumber: 5 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: true + addressTypeId: 1 + - street: Beeklaan + houseNumber: 30 + houseNumberSuffix: B + postalCode: 2500AA + city: Den Haag + country: NL + isPreferred: false + addressTypeId: 2 + phones: + - number: "6123456789" + countryCode: "+31" + phoneTypeId: 1 + isPreferred: true + - number: "7012345678" + countryCode: "+31" + phoneTypeId: 2 + isPreferred: false + required: true + responses: + 201: + description: Successful created a customer profile + content: + application/json: + schema: + $ref: "#/components/schemas/postCustomerProfileResponse" + examples: + customerProfileCreated: + summary: customerProfileCreated + description: >- + Successfully created a customer profile + value: + customerProfileId: 1 + customerNumber: 1000001 + 400: + description: Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/ErrorResponse" + examples: + invalidDataTypeError: + summary: invalidDataTypeError + description: >- + The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). + value: + type: https://htm.nl/api/v1/probs/bad-request + title: Your request contains an invalid datatype + detail: '''2023-02-01 00:00:00'' is not a valid Datetime' + instance: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /customers/{customerProfileId}: patch: tags: @@ -811,7 +874,7 @@ paths: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited - /customers/{customerProfileId}/customerStatus: + /customers/{customerProfileId}/customerStatusInstances: post: tags: - Customer @@ -1214,6 +1277,15 @@ paths: example: 12 required: false description: The id of the token that replaced this token. + - name: offset + in: query + schema: + type: integer + - name: limit + in: query + schema: + type: integer + example: 20 responses: 200: description: OK @@ -1239,8 +1311,22 @@ paths: "expirationDate": "2029-03-22T09:00:00", "replacedByTokenId": 12, }, - ], - "href": null, + ], + "_links": + { + "self":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/ovPayTokens?offset=20", + "method": "GET" + }, + "prev":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/ovPayTokens", + "method": "GET" + }, + "next":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/ovPayTokens?offset=40", + "method": "GET" + } + } } /customers/{customerProfileId}/ovpaytokens: post: @@ -1501,6 +1587,15 @@ paths: schema: type: integer example: 1 + - name: offset + in: query + schema: + type: integer + - name: limit + in: query + schema: + type: integer + example: 20 responses: 200: description: OK @@ -1779,6 +1874,15 @@ paths: example: 2020-01-01T00:00:00 required: false description: Filter on updated after. + - name: offset + in: query + schema: + type: integer + - name: limit + in: query + schema: + type: integer + example: 20 responses: 200: description: OK @@ -1786,25 +1890,75 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - [ - { - "directDebitMandateId": 71, - "customerProfileId": 12, - "billingInformationId": 51, - "directDebitMandateType": - { - "directDebitMandateTypeId": 1, - "name": "import", - "description": "import", - }, - "mandateAddressId": 21, - "created": "2024-03-22T08:55:00", - "mandateReference": "CORE01", - "mandateState": "SINGED", - "updateTimestamp": "2024-03-22T08:55:00", - }, - ] + examples: + getDirectDebitMandateWithNextPage: + value: + { + "directDebitMandates": [ + { + "directDebitMandateId": 71, + "customerProfileId": 12, + "billingInformationId": 51, + "directDebitMandateType": + { + "directDebitMandateTypeId": 1, + "name": "import", + "description": "import", + }, + "mandateAddressId": 21, + "created": "2024-03-22T08:55:00", + "mandateReference": "CORE01", + "mandateState": "SINGED", + "updateTimestamp": "2024-03-22T08:55:00", + } + ], + "_links": { + "self":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates", + "method": "GET" + }, + "next":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates?offset=20", + "method": "GET" + } + } + } + getDirectDebitMandateWithNextPageandPreviousPage: + value: + { + "directDebitMandates": [ + { + "directDebitMandateId": 71, + "customerProfileId": 12, + "billingInformationId": 51, + "directDebitMandateType": + { + "directDebitMandateTypeId": 1, + "name": "import", + "description": "import", + }, + "mandateAddressId": 21, + "created": "2024-03-22T08:55:00", + "mandateReference": "CORE01", + "mandateState": "SINGED", + "updateTimestamp": "2024-03-22T08:55:00", + } + ], + "_links": { + "self":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates?offset=20", + "method": "GET" + }, + "prev":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates", + "method": "GET" + }, + "next":{ + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/directdebitmandates?offset=40", + "method": "GET" + } + } + } /billingInformation/{billingInformationId}/directdebitmandates: post: tags: -- 2.45.2 From 12126253ac3a3aa3ca847a971546d64be578f450 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Fri, 21 Feb 2025 14:29:32 +0100 Subject: [PATCH 104/372] changed swift to bic inline with orders --- src/openapi/customers/customers-crud-v2.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index acd9d10..7499913 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -160,7 +160,7 @@ paths: schema: type: string example: NL20INGB - - name: swift + - name: bic in: query schema: type: string @@ -1567,7 +1567,7 @@ paths: schema: type: string example: "NL73RABO2677424363" - - name: swift + - name: bic in: query schema: type: string @@ -1625,7 +1625,7 @@ paths: "customerProfileId": 1, "issuerCountry": "NL", "iban": "NL27ABNA4458972219", - "swift": "GHJZIEJSKVM", + "bic": "GHJZIEJSKVM", "ascription": "J. Doe", "alias": "John's billing details", "billingAddressId": 4 @@ -1671,7 +1671,7 @@ paths: "customerProfileId": 5, "issuerCountry": "NL", "iban": "NL27ABNA4458972219", - "swift": "GHJZIEJSKVM", + "bic": "GHJZIEJSKVM", "ascription": "J. Doe", "alias": null, "billingAddressId": 42 @@ -1681,7 +1681,7 @@ paths: "customerProfileId": 9, "issuerCountry": "NL", "iban": "NL27ABNA4458972219", - "swift": "GHJZIEJSKVM", + "bic": "GHJZIEJSKVM", "ascription": "J. Doe", "alias": null, "billingAddressId": 84 @@ -1720,7 +1720,7 @@ paths: billingInformation: issuerCountry: "NL" iban: "NL73RABO2677424363" - swift: "GHJZIEJSKVM" + bic: "GHJZIEJSKVM" ascription: "J. Doe" alias: "John's billing details" billingAddressId: 1 @@ -2491,7 +2491,7 @@ components: type: string bic: type: string - swift: + bic: type: string ascription: type: string -- 2.45.2 From c9b445b54b58ed52a213e546824f07b554edb5bd Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Fri, 21 Feb 2025 14:57:42 +0100 Subject: [PATCH 105/372] removed duplicate bic --- src/openapi/customers/customers-crud-v2.yaml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 7499913..eaedd01 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -159,12 +159,7 @@ paths: in: query schema: type: string - example: NL20INGB - - name: bic - in: query - schema: - type: string - example: NL20INGB + example: NL20INGB - name: ascription in: query schema: -- 2.45.2 From db12ae5f62224272981ff18d052be9ea86a9dda2 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Fri, 21 Feb 2025 16:53:17 +0100 Subject: [PATCH 106/372] added sort query param --- src/openapi/customers/customers-crud-v2.yaml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index eaedd01..db38de9 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -170,6 +170,10 @@ paths: schema: type: string example: Mijn ING bankrekening + - name: sort + in: query + schema: + type: string - name: offset in: query schema: @@ -1272,6 +1276,10 @@ paths: example: 12 required: false description: The id of the token that replaced this token. + - name: sort + in: query + schema: + type: string - name: offset in: query schema: @@ -1582,6 +1590,10 @@ paths: schema: type: integer example: 1 + - name: sort + in: query + schema: + type: string - name: offset in: query schema: @@ -1869,6 +1881,10 @@ paths: example: 2020-01-01T00:00:00 required: false description: Filter on updated after. + - name: sort + in: query + schema: + type: string - name: offset in: query schema: @@ -2486,8 +2502,6 @@ components: type: string bic: type: string - bic: - type: string ascription: type: string alias: -- 2.45.2 From caf927cae5b33b4aed8fedf96789a4b5fc51277d Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 24 Feb 2025 12:16:41 +0100 Subject: [PATCH 107/372] creating orderv2.3 --- src/openapi/orders/service_engine_orders.yaml | 1375 +++++++++++++---- 1 file changed, 1048 insertions(+), 327 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 058a3dc..0c8ce0a 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -35,30 +35,6 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v1: - summary: Order validation v1 - description: Order validation v1 - value: - [ - { - "ovPayTokenId": 2, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 34, - "ovpasNumber": "OV34567", - "productId": 2, - "startDate": "2024-03-22T09:00:00z", - "quantity": 1, - }, - { - "ovPayTokenId": 3, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 89, - "ovpasNumber": "OV34567", - "productId": 4, - "startDate": "2024-03-22T09:00:00z", - "quantity": 4, - }, - ] v2: summary: Order validation v2 description: Order validation v2 @@ -125,6 +101,30 @@ paths: ], }, } + v1: + summary: Order validation v1 + description: Order validation v1 + value: + [ + { + "ovPayTokenId": 2, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "productId": 2, + "startDate": "2024-03-22T09:00:00z", + "quantity": 1, + }, + { + "ovPayTokenId": 3, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 89, + "ovpasNumber": "OV34567", + "productId": 4, + "startDate": "2024-03-22T09:00:00z", + "quantity": 4, + }, + ] responses: "200": description: OK @@ -322,44 +322,98 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v1: - summary: Order fulfillment v1 - description: Order fulfillment v1 + v2.2: + summary: Order fulfillment v2.2 + description: Order fulfillment v2.2 value: { - "customerProfileID": 123415, - "customerProfileData": { "dateOfBirth": "09-03-1989" }, - "personalAccountData": { "birthdate": "09-03-1989" }, - "directDebitMandate": - { - "consumerName": "J. de Tèster", - "consumerBic": "RABONL2U", - "consumerIban": "NL44RABO0123456789", - }, - "orderContents": + "externalOrderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9", + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "createdOn": "2024-03-22T09:00:00", + "orderStatusId": 4, + "orderLines": [ { - "ovPayTokenId": 123, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 450, - "ovpasNumber": "63AW974", - "productId": 2, - "startDate": "2024-03-22T09:00:00Z", + "externalOrderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f", + "productId": 1, "quantity": 1, - "orderlineId": "2d7fadc9-b64b-4516-9a7d-cf550f201372", - }, - { - "ovPayTokenId": 123, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 450, - "ovpasNumber": "63AW974", - "productId": 3, - "startDate": "2024-03-16T09:00:00Z", - "quantity": 1, - "orderlineId": "9d7fadc9-b64b-4516-9a7d-cf550f201378", + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatusId": 4, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], }, ], - "orderStatus": "succeededPayment", + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "payPush": + { + "consumerIssuer": "ABN AMRO", + "transactionId": "0000000000000001", + "consumerName": "J. de Vries", + "consumerIBAN": "NL44RABO0123456789", + "consumerBIC": "RABONL2U", + }, + }, + ], + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + }, + ], + }, } v2: summary: Order fulfillment v2 @@ -469,98 +523,44 @@ paths: ], }, } - v2.2: - summary: Order fulfillment v2.2 - description: Order fulfillment v2.2 + v1: + summary: Order fulfillment v1 + description: Order fulfillment v1 value: { - "externalOrderId": "a0ef57fa-395c-4a03-96e9-234c26dccea9", - "languageId": 1, - "billingAddressId": 1, - "shippingAddressId": 1, - "createdOn": "2024-03-22T09:00:00", - "orderStatusId": 4, - "orderLines": - [ - { - "externalOrderLineId": "2ba39cae-c401-446b-ae5c-2d6d85b3df1f", - "productId": 1, - "quantity": 1, - "createdOn": "2024-03-22T09:00:00", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - "orderLineStatusId": 4, - "tokens": - [ - { - "tokenTypeId": 1, - "ovPayTokenId": 1, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 34, - "ovpasNumber": "OV34567", - "verificationCode": "A7H6", - "personalAccountData": - { - "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", - "photoReference": "DSC_0502.JPG", - "fileType": "image/jpg", - "challengeTypeId": 1, - "oneTimePassword": "H5Iiz3JTaQeIV8p", - }, - }, - ], - }, - ], - "payments": - [ - { - "createdOn": "2024-03-22T09:00:00", - "amountDebit": 121, - "paymentMethodId": 1, - "isRefund": false, - "htmPaymentReference": "HTM-1234", - "pspPaymentReference": "Buckaroo-1234", - "paymentStatuses": - [ - { - "createdOn": "2024-03-22T09:00:00", - "statusCode": "190", - "statusDescription": "Success", - "statusSubCode": "S001", - "statusSubDescription": "PaymentSuccessFul", - }, - ], - "payPush": - { - "consumerIssuer": "ABN AMRO", - "transactionId": "0000000000000001", - "consumerName": "J. de Vries", - "consumerIBAN": "NL44RABO0123456789", - "consumerBIC": "RABONL2U", - }, - }, - ], - "customer": + "customerProfileID": 123415, + "customerProfileData": { "dateOfBirth": "09-03-1989" }, + "personalAccountData": { "birthdate": "09-03-1989" }, + "directDebitMandate": { - "birthname": "Jan", - "surname": "Vries", - "prefix": "de", - "emailAddress": "jandevries@outlook.com", - "dateOfBirth": "1970-01-01", - "addresses": - [ - { - "addressTypeId": 1, - "street": "Kon. Julianaplein", - "houseNumber": 10, - "houseNumberSuffix": "a", - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "NL", - }, - ], + "consumerName": "J. de Tèster", + "consumerBic": "RABONL2U", + "consumerIban": "NL44RABO0123456789", }, + "orderContents": + [ + { + "ovPayTokenId": 123, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 450, + "ovpasNumber": "63AW974", + "productId": 2, + "startDate": "2024-03-22T09:00:00Z", + "quantity": 1, + "orderlineId": "2d7fadc9-b64b-4516-9a7d-cf550f201372", + }, + { + "ovPayTokenId": 123, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 450, + "ovpasNumber": "63AW974", + "productId": 3, + "startDate": "2024-03-16T09:00:00Z", + "quantity": 1, + "orderlineId": "9d7fadc9-b64b-4516-9a7d-cf550f201378", + }, + ], + "orderStatus": "succeededPayment", } responses: "201": @@ -954,6 +954,209 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: + v2.3: + summary: Order creation v2.3 + description: Order creation v2.3 + value: + { + "externalOrderId": null, + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "createdOn": "2024-03-22T09:00:00", + "orderStatusId": 1, + "orderLines": + [ + { + "externalOrderLineId": null, + "productId": 1, + "quantity": 1, + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatusId": 1, + "createdOn": "2024-03-22T09:00:00", + "customerTokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + } + } + ] + } + ], + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "mandateInput": + { + "directDebitMandateTypeId": 1, + "createdOn": "2024-03-22T09:00:00", + "bic": "RABONL2U", + "iban": "NL44RABO0123456789", + "ascription": "J. de Vries", + "place": "Den Haag", + }, + }, + ], + "orderCustomer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "orderCustomerAddresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + ] + } + } + v2.2: + summary: Order creation v2.2 + description: Order creation v2.2 + value: + { + "externalOrderId": null, + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "createdOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "orderStatusId": 1, + "createdOn": "2024-03-22T09:00:00", + "description": "Concept order", + }, + ], + "orderLines": + [ + { + "externalOrderLineId": null, + "productId": 1, + "quantity": 1, + "validFrom": "2024-03-22T09:00:00", + "validUntil": "2025-03-22T09:00:00", + "orderLineStatusId": 4, + "createdOn": "2024-03-22T09:00:00", + "customerTokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + "orderAccountingStatuses": + [ + { + "accountingStatusId": 1, + "createdOn": "2024-03-22T09:00:00", + "description": "Financiele transactie voor de FIKO.", + }, + ], + }, + ], + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "mandateInput": + { + "directDebitMandateTypeId": 1, + "createdOn": "2024-03-22T09:00:00", + "bic": "RABONL2U", + "iban": "NL44RABO0123456789", + "ascription": "J. de Vries", + "place": "Den Haag", + }, + }, + ], + "orderCustomer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "orderCustomerAddresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + }, + ], + }, + } v2: summary: Order creation v2.1 description: Order creation v2.1 @@ -1082,126 +1285,166 @@ paths: ], }, } - v2.2: - summary: Order creation v2.2 - description: Order creation v2.2 - value: - { - "externalOrderId": null, - "languageId": 1, - "billingAddressId": 1, - "shippingAddressId": 1, - "createdOn": "2024-03-22T09:00:00", - "order_OrderStatus": - [ - { - "orderStatusId": 1, - "createdOn": "2024-03-22T09:00:00", - "description": "Concept order", - }, - ], - "orderLines": - [ - { - "externalOrderLineId": null, - "productId": 1, - "quantity": 1, - "validFrom": "2024-03-22T09:00:00", - "validUntil": "2025-03-22T09:00:00", - "orderLineStatusId": 4, - "createdOn": "2024-03-22T09:00:00", - "customerTokens": - [ - { - "tokenTypeId": 1, - "ovPayTokenId": 1, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 34, - "ovpasNumber": "OV34567", - "verificationCode": "A7H6", - "personalAccountData": - { - "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", - "photoReference": "DSC_0502.JPG", - "fileType": "image/jpg", - "challengeTypeId": 1, - "oneTimePassword": "H5Iiz3JTaQeIV8p", - }, - }, - ], - "orderAccountingStatuses": - [ - { - "accountingStatusId": 1, - "createdOn": "2024-03-22T09:00:00", - "description": "Financiele transactie voor de FIKO.", - }, - ], - }, - ], - "payments": - [ - { - "createdOn": "2024-03-22T09:00:00", - "amountDebit": 121, - "paymentMethodId": 1, - "isRefund": false, - "htmPaymentReference": "HTM-1234", - "pspPaymentReference": "Buckaroo-1234", - "paymentStatuses": - [ - { - "createdOn": "2024-03-22T09:00:00", - "statusCode": "190", - "statusDescription": "Success", - "statusSubCode": "S001", - "statusSubDescription": "PaymentSuccessFul", - }, - ], - "mandateInput": - { - "directDebitMandateTypeId": 1, - "createdOn": "2024-03-22T09:00:00", - "bic": "RABONL2U", - "iban": "NL44RABO0123456789", - "ascription": "J. de Vries", - "place": "Den Haag", - }, - }, - ], - "orderCustomer": - { - "birthname": "Jan", - "surname": "Vries", - "prefix": "de", - "emailAddress": "jandevries@outlook.com", - "dateOfBirth": "1970-01-01", - "orderCustomerAddresses": - [ - { - "addressTypeId": 1, - "street": "Kon. Julianaplein", - "houseNumber": 10, - "houseNumberSuffix": "a", - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "NL", - }, - ], - }, - } responses: "201": description: Created + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + v2.3: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "externalOrderId": null, + "orderNumber": "ORD-123456", + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "touchpointId": 3, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order is aangemaakt", + } + ], + "orderLines": + [ + { + "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468", + "externalOrderLineId": null, + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatus": + { "orderLineStatusId": 1, "name": "pending" }, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + }, + ], + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "payPush": + { + "consumerIssuer": "ABN AMRO", + "transactionId": "0000000000000001", + "consumerName": "J. de Vries", + "consumerIBAN": "NL44RABO0123456789", + "consumerBIC": "RABONL2U", + }, + }, + ], + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + ] + } + } + v2.2: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "orderNumber": "ORD-123456", + } + "400": + description: Bad request content: application/json: schema: $ref: "#/components/schemas/unavailable" example: - { - "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", - "orderNumber": "ORD-123456", + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", + "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": [ + { + "detail": "Startdate of this product should be at most 60 days in the future.", + "pointer": "#/0/startDate", + "ovPayTokenId": 123, + "productId": 2 + }, + { + "detail": "Combination of product and token type is not valid.", + "pointer": "#/1/ovPayTokenId", + "ovPayTokenId": 123, + "productId": 3 + } + ] } /orders/{orderId}: parameters: @@ -1249,6 +1492,7 @@ paths: }, "billingAddressId": 1, "shippingAddressId": 1, + "touchpointId": 3, "createdOn": "2024-03-22T09:00:00", "lastUpdatedOn": "2024-03-22T09:00:00", "order_OrderStatus": @@ -1413,15 +1657,27 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { - "customerProfileId": 1337, - "totalAmount": 121, - "languageId": 1, - "billingAddressId": 1, - "shippingAddressId": 1, - "lastUpdatedOn": "2024-03-22T09:00:00", - } + examples: + v2.3: + summary: Order update v2.3 + description: Order update v2.3 + value: { + "languageId": 1, + "billingAddressId": 2, + "shippingAddressId": 1, + "lastUpdatedOn": "2024-03-22T09:00:00", + } + v2.2: + summary: Order update v2.2 + description: Order update v2.2 + value: { + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "lastUpdatedOn": "2024-03-22T09:00:00", + } responses: "200": description: OK @@ -1429,11 +1685,133 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { - "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", - "orderNumber": "ORD-123456", - } + examples: + v2.3: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "externalOrderId": null, + "orderNumber": "ORD-123456", + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 2, + "shippingAddressId": 1, + "touchpointId": 3, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order is aangemaakt", + } + ], + "orderLines": + [ + { + "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468", + "externalOrderLineId": null, + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatus": + { "orderLineStatusId": 1, "name": "pending" }, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + }, + ], + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "payPush": + { + "consumerIssuer": "ABN AMRO", + "transactionId": "0000000000000001", + "consumerName": "J. de Vries", + "consumerIBAN": "NL44RABO0123456789", + "consumerBIC": "RABONL2U", + }, + }, + ], + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + ] + } + } + v2.2: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "orderNumber": "ORD-123456", + } delete: tags: - Order Creation v2.1 @@ -1469,53 +1847,82 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { - "externalOrderLineId": null, - "productId": 1, - "productName": "HTM Maandkorting 20%", - "productCode": "HTM-MND-20", - "productDescription": "HTM Maandkorting 20%", - "taxAmount": 21, - "taxMetadataId": "1d6f1725-1072-4f08-982c-3df51dd854a1", - "amountExclTax": 100, - "amountInclTax": 121, - "quantity": 1, - "orderLineTerms": - [{ "termsUrl": "generalTermsAndConditions.pdf" }], - "validFrom": "2024-03-22T09:00:00", - "validUntil": "2025-03-22T09:00:00", - "orderLineStatusId": 4, - "createdOn": "2024-03-22T09:00:00", - "customerTokens": - [ - { - "tokenTypeId": 1, - "ovPayTokenId": 1, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 34, - "ovpasNumber": "OV34567", - "verificationCode": "A7H6", - "personalAccountData": + examples: + v2.3: + summary: Create orderLine v2.3 + description: Create orderLine v2.3 + value: + { + "externalOrderLineId": null, + "productId": 2, + "quantity": 1, + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatusId": 1, + "createdOn": "2024-03-22T09:00:00", + "customerTokens": + [ { - "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", - "photoReference": "DSC_0502.JPG", - "fileType": "image/jpg", - "challengeTypeId": 1, - "oneTimePassword": "H5Iiz3JTaQeIV8p", + "tokenTypeId": 1, + "ovPayTokenId": 4, + "serviceReferenceId": null, + "amount": null , + "ovpasNumber": null , + "verificationCode": null , + "personalAccountData": null }, - }, - ], - "orderAccountingStatuses": - [ - { - "accountingStatusId": 1, - "createdOn": "2024-03-22T09:00:00", - "description": "Financiele transactie voor de FIKO.", - }, - ], - } + ] + } + v2.2: + summary: Create orderLine v2.2 + description: Create orderLine v2.2 + value: + { + "externalOrderLineId": null, + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxMetadataId": "1d6f1725-1072-4f08-982c-3df51dd854a1", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "orderLineTerms": + [{ "termsUrl": "generalTermsAndConditions.pdf" }], + "validFrom": "2024-03-22T09:00:00", + "validUntil": "2025-03-22T09:00:00", + "orderLineStatusId": 4, + "createdOn": "2024-03-22T09:00:00", + "customerTokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + "orderAccountingStatuses": + [ + { + "accountingStatusId": 1, + "createdOn": "2024-03-22T09:00:00", + "description": "Financiele transactie voor de FIKO.", + }, + ], + } responses: "200": description: OK @@ -1523,7 +1930,164 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" } + examples: + v2.3: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "externalOrderId": null, + "orderNumber": "ORD-123456", + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 2, + "shippingAddressId": 1, + "touchpointId": 3, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order is aangemaakt", + } + ], + "orderLines": + [ + { + "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468", + "externalOrderLineId": null, + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatus": + { "orderLineStatusId": 1, "name": "pending" }, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + }, + { + "orderLineId": "2cb04b38-e9a8-465a-a273-261c55a21b71", + "externalOrderLineId": null, + "productId": 2, + "productName": "HTM Maandkorting 40%", + "productCode": "HTM-MND-40", + "productDescription": "HTM Maandkorting 40%", + "taxAmount": 42, + "taxCode": "V21", + "amountExclTax": 200, + "amountInclTax": 242, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatus": + { "orderLineStatusId": 1, "name": "pending" }, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 4, + "serviceReferenceId": null, + "amount": null , + "ovpasNumber": null , + "verificationCode": null , + "personalAccountData": null + } + ] + } + ], + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "payPush": + { + "consumerIssuer": "ABN AMRO", + "transactionId": "0000000000000001", + "consumerName": "J. de Vries", + "consumerIBAN": "NL44RABO0123456789", + "consumerBIC": "RABONL2U", + }, + }, + ], + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + ] + } + } + v2.2: + value: { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" } /orderlines/{orderLineId}: parameters: - in: path @@ -1551,17 +2115,30 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { - "taxAmount": 21, - "taxMetadataId": "0574440e-7fa0-401f-b907-539c91633a5d", - "amountExclTax": 100, - "amountInclTax": 121, - "quantity": 1, - "validFrom": "2024-03-22T09:00:00", - "validUntil": "2025-03-22T09:00:00", - "orderLineStatusId": 4, - } + examples: + v2.3: + summary: Order creation v2.3 + description: Order creation v2.3 + value: + { + "quantity": 1, + "validFrom": "2024-03-25T09:00:00", + "validUntil": null + } + v2.2: + summary: Order creation v2.2 + description: Order creation v2.2 + value: + { + "taxAmount": 21, + "taxMetadataId": "0574440e-7fa0-401f-b907-539c91633a5d", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "validFrom": "2024-03-22T09:00:00", + "validUntil": "2025-03-22T09:00:00", + "orderLineStatusId": 4, + } responses: "200": description: OK @@ -1569,7 +2146,130 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" } + examples: + v2.3: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "externalOrderId": null, + "orderNumber": "ORD-123456", + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "touchpointId": 3, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order is aangemaakt", + } + ], + "orderLines": + [ + { + "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468", + "externalOrderLineId": null, + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-25T09:00:00", + "validUntil": null, + "orderLineStatus": + { "orderLineStatusId": 1, "name": "pending" }, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + } + } + ] + }, + ], + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "payPush": + { + "consumerIssuer": "ABN AMRO", + "transactionId": "0000000000000001", + "consumerName": "J. de Vries", + "consumerIBAN": "NL44RABO0123456789", + "consumerBIC": "RABONL2U", + }, + }, + ], + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + ] + } + } + v2.2: + value: + { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" } delete: tags: - Order Creation v2.1 @@ -1578,6 +2278,27 @@ paths: responses: "200": description: OK + "400": + description: Bad request + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", + "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": [ + { + "detail": "Product requires product with productId=2", + "pointer": "#/1/orderLine", + "orderLineId": "0574440e-7fa0-401f-b907-539c91633a5d", + "productId": 3 + } + ] + } /orders/{orderId}/payments: parameters: - in: path -- 2.45.2 From 76c5fd1804c613ea4df840de923ddbb9183e8c42 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 24 Feb 2025 13:59:28 +0100 Subject: [PATCH 108/372] v3.0 orders --- src/openapi/orders/service_engine_orders.yaml | 1205 +++++++++++++++-- 1 file changed, 1110 insertions(+), 95 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 0c8ce0a..fc587a2 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -685,6 +685,33 @@ paths: ], }, } + "400": + description: Bad request + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", + "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": [ + { + "detail": "Startdate of this product should be at most 60 days in the future.", + "pointer": "#/0/startDate", + "ovPayTokenId": 123, + "productId": 2 + }, + { + "detail": "Combination of product and token type is not valid.", + "pointer": "#/1/ovPayTokenId", + "ovPayTokenId": 123, + "productId": 3 + } + ] + } /customers/{customerProfileId}/orders: parameters: - in: path @@ -945,25 +972,24 @@ paths: } post: tags: - - Order Creation v2.1 - summary: Create a new order. - description: Create a new order. + - Order Creation v3.0 + summary: Create a new order v3.0. + description: Create a new order v3.0. requestBody: content: application/json: schema: $ref: "#/components/schemas/unavailable" examples: - v2.3: - summary: Order creation v2.3 - description: Order creation v2.3 + v3.0: + summary: Order creation v3.0 + description: Order creation v3.0 value: { "externalOrderId": null, "languageId": 1, "billingAddressId": 1, "shippingAddressId": 1, - "createdOn": "2024-03-22T09:00:00", "orderStatusId": 1, "orderLines": [ @@ -974,7 +1000,6 @@ paths: "validFrom": "2024-03-22T09:00:00", "validUntil": null, "orderLineStatusId": 1, - "createdOn": "2024-03-22T09:00:00", "customerTokens": [ { @@ -1293,7 +1318,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v2.3: + v3.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -1649,7 +1674,7 @@ paths: } patch: tags: - - Order Creation v2.1 + - Order Creation v3.0 summary: Update an existing order. description: Update an existing order. requestBody: @@ -1658,9 +1683,9 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v2.3: - summary: Order update v2.3 - description: Order update v2.3 + v3.0: + summary: Order update v3.0 + description: Order update v3.0 value: { "languageId": 1, "billingAddressId": 2, @@ -1686,7 +1711,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v2.3: + v3.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -1812,9 +1837,36 @@ paths: "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", "orderNumber": "ORD-123456", } + "400": + description: Bad request + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", + "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": [ + { + "detail": "Startdate of this product should be at most 60 days in the future.", + "pointer": "#/0/startDate", + "ovPayTokenId": 123, + "productId": 2 + }, + { + "detail": "Combination of product and token type is not valid.", + "pointer": "#/1/ovPayTokenId", + "ovPayTokenId": 123, + "productId": 3 + } + ] + } delete: tags: - - Order Creation v2.1 + - Order Creation v3.0 summary: Delete an existing order. description: Delete an existing order. responses: @@ -1839,7 +1891,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). post: tags: - - Order Creation v2.1 + - Order Creation v3.0 summary: Add a new order line to an existing order. description: Add a new order line to an existing order. requestBody: @@ -1848,9 +1900,9 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v2.3: - summary: Create orderLine v2.3 - description: Create orderLine v2.3 + v3.0: + summary: Create orderLine v3.0 + description: Create orderLine v3.0 value: { "externalOrderLineId": null, @@ -1931,7 +1983,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v2.3: + v3.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -2088,6 +2140,33 @@ paths: } v2.2: value: { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" } + "400": + description: Bad request + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", + "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": [ + { + "detail": "Startdate of this product should be at most 60 days in the future.", + "pointer": "#/0/startDate", + "ovPayTokenId": 123, + "productId": 2 + }, + { + "detail": "Combination of product and token type is not valid.", + "pointer": "#/1/ovPayTokenId", + "ovPayTokenId": 123, + "productId": 3 + } + ] + } /orderlines/{orderLineId}: parameters: - in: path @@ -2107,7 +2186,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). patch: tags: - - Order Creation v2.1 + - Order Creation v3.0 summary: Update an existing order line. description: Update an existing order line. requestBody: @@ -2116,9 +2195,9 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v2.3: - summary: Order creation v2.3 - description: Order creation v2.3 + v3.0: + summary: Order creation v3.0 + description: Order creation v3.0 value: { "quantity": 1, @@ -2147,7 +2226,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v2.3: + v3.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -2270,14 +2349,86 @@ paths: v2.2: value: { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" } + "400": + description: Bad request + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", + "detail": "The start date of the product is not allowed. See errors for more details.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": [ + { + "detail": "Startdate of this product should be at most 60 days in the future.", + "pointer": "#/0/startDate", + "ovPayTokenId": 123, + "productId": 2 + } + ] + } delete: tags: - - Order Creation v2.1 + - Order Creation v3.0 summary: Delete an existing order line. description: Delete an existing order line. responses: "200": description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + v3.0: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "externalOrderId": null, + "orderNumber": "ORD-123456", + "customerProfileId": 1337, + "totalAmount": 0, + "languageId": 1, + "billingAddressId": 2, + "shippingAddressId": 1, + "touchpointId": 3, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order is aangemaakt", + } + ], + "orderLines": null, + "payments": null, + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + ] + } + } "400": description: Bad request content: @@ -2318,7 +2469,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). post: tags: - - Order Creation v2.1 + - Order Creation v3.0 summary: Add a payment to an existing order. description: Add a payment to an existing order. requestBody: @@ -2326,35 +2477,70 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { - "createdOn": "2024-03-22T09:00:00", - "amountDebit": 121, - "paymentMethodId": 1, - "touchPointId": 1, - "isRefund": false, - "htmPaymentReference": "HTM-1234", - "pspPaymentReference": "Buckaroo-1234", - "paymentStatuses": - [ - { - "createdOn": "2024-03-22T09:00:00", - "statusCode": "190", - "statusDescription": "Success", - "statusSubCode": "S001", - "statusSubDescription": "PaymentSuccessFul", - }, - ], - "mandateInput": + examples: + v3.0: + summary: Order creation v3.0 + description: Order creation v3.0 + value: { - "directDebitMandateTypeId": 1, "createdOn": "2024-03-22T09:00:00", - "bic": "RABONL2U", - "iban": "NL44RABO0123456789", - "ascription": "J. de Vries", - "place": "Den Haag", - }, - } + "amountDebit": 121, + "paymentMethodId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "mandateInput": + { + "directDebitMandateTypeId": 1, + "createdOn": "2024-03-22T09:00:00", + "bic": "RABONL2U", + "iban": "NL44RABO0123456789", + "ascription": "J. de Vries", + "place": "Den Haag", + }, + } + v2.2: + summary: Order creation v2.2 + description: Order creation v2.2 + value: + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchpointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "mandateInput": + { + "directDebitMandateTypeId": 1, + "createdOn": "2024-03-22T09:00:00", + "bic": "RABONL2U", + "iban": "NL44RABO0123456789", + "ascription": "J. de Vries", + "place": "Den Haag", + }, + } responses: "201": description: Created @@ -2362,7 +2548,165 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" } + examples: + v3.0: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "externalOrderId": null, + "orderNumber": "ORD-123456", + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 2, + "shippingAddressId": 1, + "touchpointId": 3, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order is aangemaakt", + } + ], + "orderLines": + [ + { + "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468", + "externalOrderLineId": null, + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatus": + { "orderLineStatusId": 1, "name": "pending" }, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + }, + { + "orderLineId": "2cb04b38-e9a8-465a-a273-261c55a21b71", + "externalOrderLineId": null, + "productId": 2, + "productName": "HTM Maandkorting 40%", + "productCode": "HTM-MND-40", + "productDescription": "HTM Maandkorting 40%", + "taxAmount": 42, + "taxCode": "V21", + "amountExclTax": 200, + "amountInclTax": 242, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatus": + { "orderLineStatusId": 1, "name": "pending" }, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 4, + "serviceReferenceId": null, + "amount": null , + "ovpasNumber": null , + "verificationCode": null , + "personalAccountData": null + } + ] + } + ], + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "payPush": + { + "consumerIssuer": "ABN AMRO", + "transactionId": "0000000000000001", + "consumerName": "J. de Vries", + "consumerIBAN": "NL44RABO0123456789", + "consumerBIC": "RABONL2U", + }, + }, + ], + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + ] + } + } + v2.2: + value: + { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" } /payments/{paymentId}: parameters: - in: path @@ -2382,7 +2726,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). patch: tags: - - Order Creation v2.1 + - Order Creation v3.0 summary: Update a payment on an existing order. description: Update a payment on an existing order. requestBody: @@ -2390,11 +2734,42 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { - "htmPaymentReference": "HTM-1234", - "pspPaymentReference": "Buckaroo-1234", - } + examples: + v3.0: + summary: Order payment update v3.0 + description: Order payment update v3.0 + value: + { + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "mandateInput": + { + "directDebitMandateTypeId": 1, + "createdOn": "2024-03-22T09:00:00", + "bic": "RABONL2U", + "iban": "NL44RABO0123456789", + "ascription": "J. de Vries", + "place": "Den Haag", + } + } + v2.2: + summary: Order payment update v2.2 + description: Order payment update v2.2 + value: + { + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + } responses: "200": description: OK @@ -2402,7 +2777,137 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" } + examples: + v3.0: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "externalOrderId": null, + "orderNumber": "ORD-123456", + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 2, + "shippingAddressId": 1, + "touchpointId": 3, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order is aangemaakt", + } + ], + "orderLines": + [ + { + "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468", + "externalOrderLineId": null, + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatus": + { "orderLineStatusId": 1, "name": "pending" }, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + } + ], + "payments": + [ + { + "createdOn": "2024-03-22T09:00:00", + "amountDebit": 121, + "paymentMethodId": 1, + "touchPointId": 1, + "isRefund": false, + "htmPaymentReference": "HTM-1234", + "pspPaymentReference": "Buckaroo-1234", + "paymentStatuses": + [ + { + "createdOn": "2024-03-22T09:00:00", + "statusCode": "791", + "statusDescription": "Pending processing", + "statusSubCode": "S001", + "statusSubDescription": "PendingProcessing", + }, + { + "createdOn": "2024-03-22T09:01:00", + "statusCode": "190", + "statusDescription": "Success", + "statusSubCode": "S001", + "statusSubDescription": "PaymentSuccessFul", + }, + ], + "payPush": + { + "consumerIssuer": "ABN AMRO", + "transactionId": "0000000000000001", + "consumerName": "J. de Vries", + "consumerIBAN": "NL44RABO0123456789", + "consumerBIC": "RABONL2U", + }, + }, + ], + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + ] + } + } + v2.2: + value: + { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" } /orders/{orderId}/ordercustomers: parameters: - in: path @@ -2422,7 +2927,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). post: tags: - - Order Creation v2.1 + - Order Creation v3.0 summary: Add a customer to an existing order. description: Add a customer to an existing order. requestBody: @@ -2430,26 +2935,53 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { - "birthname": "Jan", - "surname": "Vries", - "prefix": "de", - "emailAddress": "jandevries@outlook.com", - "dateOfBirth": "1970-01-01", - "orderCustomerAddresses": - [ - { - "addressTypeId": 1, - "street": "Kon. Julianaplein", - "houseNumber": 10, - "houseNumberSuffix": "a", - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "NL", - }, - ], - } + examples: + v3.0: + summary: Order payment update v3.0 + description: Order payment update v3.0 + value: + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "orderCustomerAddresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + }, + ], + } + v2.2: + summary: Order payment update v2.2 + description: Order payment update v2.2 + value: + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "orderCustomerAddresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + }, + ], + } responses: "201": description: Created @@ -2457,8 +2989,101 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073" } + examples: + v3.0: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "externalOrderId": null, + "orderNumber": "ORD-123456", + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 2, + "shippingAddressId": 1, + "touchpointId": 3, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order is aangemaakt", + } + ], + "orderLines": + [ + { + "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468", + "externalOrderLineId": null, + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatus": + { "orderLineStatusId": 1, "name": "pending" }, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + } + ], + "payments": null, + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + ] + } + } + v2.2: + value: + { "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073" } /ordercustomers/{orderCustomerId}: patch: parameters: @@ -2478,7 +3103,7 @@ paths: example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c description: The JWT of the logged in customer (in case of a web shop). tags: - - Order Creation v2.1 + - Order Creation v3.0 summary: Update a customer on an existing order. description: Update a customer on an existing order. requestBody: @@ -2487,13 +3112,28 @@ paths: schema: $ref: "#/components/schemas/unavailable" example: - { - "birthname": "Jan", - "surname": "Vries", - "prefix": "de", - "emailAddress": "jandevries@outlook.com", - "dateOfBirth": "1970-01-01", - } + v3.0: + summary: Order customer update v2.2 + description: Order customer update v2.2 + value: + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + } + v2.2: + summary: Order customer update v2.2 + description: Order customer update v2.2 + value: + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + } responses: "200": description: OK @@ -2501,8 +3141,383 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073" } + examples: + v3.0: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "externalOrderId": null, + "orderNumber": "ORD-123456", + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 2, + "shippingAddressId": 1, + "touchpointId": 3, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order is aangemaakt", + } + ], + "orderLines": + [ + { + "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468", + "externalOrderLineId": null, + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatus": + { "orderLineStatusId": 1, "name": "pending" }, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + } + ], + "payments": null, + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + ] + } + } + v2.2: + value: + { "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073" } + /ordercustomers/{orderCustomerId}/orderCustomerAddress: + post: + parameters: + - in: path + name: orderCustomerId + required: true + style: simple + explode: false + schema: + type: string + format: uuid + example: a0ef57fa-395c-4a03-96e9-234c26dccea9 + - in: header + name: X-HM-JWT-AUTH-HEADER + schema: + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + description: The JWT of the logged in customer (in case of a web shop). + tags: + - Order Creation v3.0 + summary: Create a customer address for an existing order. + description: Create a customer address for an existing order. + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + v3.0: + summary: Order customer address create v2.2 + description: Order customer address create v2.2 + value: + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + v3.0: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "externalOrderId": null, + "orderNumber": "ORD-123456", + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 2, + "shippingAddressId": 1, + "touchpointId": 3, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order is aangemaakt", + } + ], + "orderLines": + [ + { + "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468", + "externalOrderLineId": null, + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatus": + { "orderLineStatusId": 1, "name": "pending" }, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + } + ], + "payments": null, + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 10, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + ] + } + } + /orderCustomerAddress/{orderCustomerAddressId}: + patch: + parameters: + - in: path + name: orderCustomerAddressId + required: true + style: simple + explode: false + schema: + type: string + format: uuid + example: a0ef57fa-395c-4a03-96e9-234c26dccea9 + - in: header + name: X-HM-JWT-AUTH-HEADER + schema: + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + description: The JWT of the logged in customer (in case of a web shop). + tags: + - Order Creation v3.0 + summary: Update a customer address for an existing order. + description: Update a customer address for an existing order. + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + v3.0: + summary: Order customer address create v2.2 + description: Order customer address create v2.2 + value: + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 101, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + v3.0: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "externalOrderId": null, + "orderNumber": "ORD-123456", + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 2, + "shippingAddressId": 1, + "touchpointId": 3, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order is aangemaakt", + } + ], + "orderLines": + [ + { + "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468", + "externalOrderLineId": null, + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatus": + { "orderLineStatusId": 1, "name": "pending" }, + "tokens": + [ + { + "tokenTypeId": 1, + "ovPayTokenId": 1, + "serviceReferenceId": "NLOV1234567ABCDEFG", + "amount": 34, + "ovpasNumber": "OV34567", + "verificationCode": "A7H6", + "personalAccountData": + { + "name": "Jan de Vries", + "dateOfBirth": "01-01-1970", + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + }, + }, + ], + } + ], + "payments": null, + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": + [ + { + "addressTypeId": 1, + "street": "Kon. Julianaplein", + "houseNumber": 101, + "houseNumberSuffix": "a", + "postalCode": "2595 AA", + "city": "Den Haag", + "country": "NL", + } + ] + } + } /orders/{orderId}/fulfill: parameters: - in: path -- 2.45.2 From f190a007b8ebc8384d4ee073a1ad64da3780644d Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 24 Feb 2025 14:23:16 +0100 Subject: [PATCH 109/372] mandate create in crud --- src/openapi/orders/orders-crud.yaml | 38 ++++ src/openapi/orders/service_engine_orders.yaml | 191 ++++++++++++++---- 2 files changed, 193 insertions(+), 36 deletions(-) diff --git a/src/openapi/orders/orders-crud.yaml b/src/openapi/orders/orders-crud.yaml index 8ae1a81..e9e47cc 100644 --- a/src/openapi/orders/orders-crud.yaml +++ b/src/openapi/orders/orders-crud.yaml @@ -1846,6 +1846,44 @@ paths: "place": "Den Haag", }, ] + /payments/{paymentId}/mandateinputs: + parameters: + - in: path + name: paymentId + schema: + type: string + format: uuid + example: fd09f3c5-35d9-4a1b-a98b-e46addb663f2 + required: true + description: The id of the payment to process. + post: + summary: P2. Create a mandateInput. + description: Create a mandateInput.. + tags: + - Payment + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "directDebitMandateTypeId": 1, + "createdOn": "2024-03-22T09:00:00", + "bic": "RABONL2U", + "iban": "NL44RABO0123456789", + "ascription": "J. de Vries", + "place": "Den Haag", + } + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: { "mandateInputId": "dbbc3913-414e-4528-9c95-6c11a11e04ac" } + /mandateinputs/{mandateInputId}: parameters: - in: path diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index fc587a2..5905fe8 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -882,7 +882,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" example: - { + { "orders": [ { @@ -1326,10 +1326,22 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "languageId": 1, + "language": + { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl", + }, "billingAddressId": 1, "shippingAddressId": 1, - "touchpointId": 3, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, "createdOn": "2024-03-22T09:00:00", "lastUpdatedOn": "2024-03-22T09:00:00", "order_OrderStatus": @@ -1507,7 +1519,15 @@ paths: "orderNumber": "123456", "customerProfileId": 42, "totalAmount": 121, - "touchPointId": 1, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, + "billingAddressId": 1, + "shippingAddressId": 1, "language": { "languageId": 1, @@ -1515,9 +1535,6 @@ paths: "iso639Code": "nl-NL", "ietfCode": "nl", }, - "billingAddressId": 1, - "shippingAddressId": 1, - "touchpointId": 3, "createdOn": "2024-03-22T09:00:00", "lastUpdatedOn": "2024-03-22T09:00:00", "order_OrderStatus": @@ -1719,10 +1736,21 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "languageId": 1, - "billingAddressId": 2, + "language": { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl" + }, + "billingAddressId": 1, "shippingAddressId": 1, - "touchpointId": 3, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, "createdOn": "2024-03-22T09:00:00", "lastUpdatedOn": "2024-03-22T09:00:00", "order_OrderStatus": @@ -1991,10 +2019,21 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "languageId": 1, - "billingAddressId": 2, + "language": { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl" + }, + "billingAddressId": 1, "shippingAddressId": 1, - "touchpointId": 3, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, "createdOn": "2024-03-22T09:00:00", "lastUpdatedOn": "2024-03-22T09:00:00", "order_OrderStatus": @@ -2234,10 +2273,21 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "languageId": 1, + "language": { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl" + }, "billingAddressId": 1, "shippingAddressId": 1, - "touchpointId": 3, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, "createdOn": "2024-03-22T09:00:00", "lastUpdatedOn": "2024-03-22T09:00:00", "order_OrderStatus": @@ -2391,10 +2441,21 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 0, - "languageId": 1, - "billingAddressId": 2, + "language": { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl" + }, + "billingAddressId": 1, "shippingAddressId": 1, - "touchpointId": 3, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, "createdOn": "2024-03-22T09:00:00", "lastUpdatedOn": "2024-03-22T09:00:00", "order_OrderStatus": @@ -2557,10 +2618,21 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "languageId": 1, - "billingAddressId": 2, + "language": { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl" + }, + "billingAddressId": 1, "shippingAddressId": 1, - "touchpointId": 3, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, "createdOn": "2024-03-22T09:00:00", "lastUpdatedOn": "2024-03-22T09:00:00", "order_OrderStatus": @@ -2786,8 +2858,13 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "languageId": 1, - "billingAddressId": 2, + "language": { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl" + }, + "billingAddressId": 1, "shippingAddressId": 1, "touchpointId": 3, "createdOn": "2024-03-22T09:00:00", @@ -2998,10 +3075,21 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "languageId": 1, - "billingAddressId": 2, + "language": { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl" + }, + "billingAddressId": 1, "shippingAddressId": 1, - "touchpointId": 3, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, "createdOn": "2024-03-22T09:00:00", "lastUpdatedOn": "2024-03-22T09:00:00", "order_OrderStatus": @@ -3150,10 +3238,21 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "languageId": 1, - "billingAddressId": 2, + "language": { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl" + }, + "billingAddressId": 1, "shippingAddressId": 1, - "touchpointId": 3, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, "createdOn": "2024-03-22T09:00:00", "lastUpdatedOn": "2024-03-22T09:00:00", "order_OrderStatus": @@ -3277,7 +3376,6 @@ paths: "city": "Den Haag", "country": "NL", } - responses: "200": description: OK @@ -3294,10 +3392,21 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "languageId": 1, + "language": { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl" + }, "billingAddressId": 2, "shippingAddressId": 1, - "touchpointId": 3, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, "createdOn": "2024-03-22T09:00:00", "lastUpdatedOn": "2024-03-22T09:00:00", "order_OrderStatus": @@ -3418,7 +3527,6 @@ paths: "city": "Den Haag", "country": "NL", } - responses: "200": description: OK @@ -3435,10 +3543,21 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "languageId": 1, - "billingAddressId": 2, + "language": { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl" + }, + "billingAddressId": 1, "shippingAddressId": 1, - "touchpointId": 3, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, "createdOn": "2024-03-22T09:00:00", "lastUpdatedOn": "2024-03-22T09:00:00", "order_OrderStatus": -- 2.45.2 From 8c470c790c1fadf9255ea6ff002127314a586d96 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Mon, 24 Feb 2025 15:54:37 +0100 Subject: [PATCH 110/372] small fix --- src/openapi/orders/service_engine_orders.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 5905fe8..3745780 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -3199,10 +3199,10 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: + examples: v3.0: - summary: Order customer update v2.2 - description: Order customer update v2.2 + summary: Order customer update v3.0 + description: Order customer update v3.0 value: { "birthname": "Jan", -- 2.45.2 From 9b00a42d5d6542ff0ae2485ee5ce937f1d327095 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Mon, 24 Feb 2025 16:49:14 +0100 Subject: [PATCH 111/372] Fix URI --- src/openapi/products/SE-products.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/openapi/products/SE-products.yaml b/src/openapi/products/SE-products.yaml index 2ee92fc..f95b410 100644 --- a/src/openapi/products/SE-products.yaml +++ b/src/openapi/products/SE-products.yaml @@ -6,7 +6,7 @@ info: To be used by touchpoints to get information about HTM products they are allowed to see and/or sell. version: '1.0' servers: - - url: https://api.integratielaag.nl/abt/servcieengine/x.x + - url: https://api.integratielaag.nl/abt/abtserviceengine/2.0 tags: - name: ServiceEngine Products description: |- @@ -76,7 +76,7 @@ paths: "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", "_links": { "get_details": { - "href": "https://services.acc.api.htm.nl/abt/serviceengine/x.x/products/2", + "href": "https://services.acc.api.htm.nl/abt/abtserviceengine/2.0/products/2", "method": "GET" } } @@ -109,7 +109,7 @@ paths: "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", "_links": { "get_details": { - "href": "https://services.acc.api.htm.nl/abt/serviceengine/x.x/products/2", + "href": "https://services.acc.api.htm.nl/abt/abtserviceengine/2.0/products/2", "method": "GET" } } @@ -141,7 +141,7 @@ paths: "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", "_links": { "get_details": { - "href": "https://services.acc.api.htm.nl/abt/serviceengine/x.x/products/49", + "href": "https://services.acc.api.htm.nl/abt/abtserviceengine/2.0/products/49", "method": "GET" } } @@ -174,7 +174,7 @@ paths: "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", "_links": { "get_details": { - "href": "https://services.acc.api.htm.nl/abt/serviceengine/x.x/products/2", + "href": "https://services.acc.api.htm.nl/abt/abtserviceengine/2.0/products/2", "method": "GET" } } @@ -204,7 +204,7 @@ paths: "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", "_links": { "get_details": { - "href": "https://services.acc.api.htm.nl/abt/serviceengine/x.x/products/4", + "href": "https://services.acc.api.htm.nl/abt/abtserviceengine/2.0/products/4", "method": "GET" } } @@ -2090,7 +2090,7 @@ components: properties: href: type: string - example: https://api.integratielaag.nl/abt/serviceengine/x.x/products/1 + example: https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/1 method: type: string example: GET -- 2.45.2 From c21f8f9e349cddcb75250f99d7d934f9718427e4 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Wed, 26 Feb 2025 09:41:47 +0100 Subject: [PATCH 112/372] Add example showing how to handle null attributes --- src/openapi/products/SE-products.yaml | 30 ++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/openapi/products/SE-products.yaml b/src/openapi/products/SE-products.yaml index f95b410..49b9536 100644 --- a/src/openapi/products/SE-products.yaml +++ b/src/openapi/products/SE-products.yaml @@ -43,13 +43,41 @@ paths: schema: $ref: '#/components/schemas/ProductPayloadListResponse' examples: - getListNoProducts: + No products / Empty list: summary: No products / Empty list description: No products value: { "Entries": [] } + List containing one product with many null attributes: + summary: List containing one product with many null attributes + description: |- + Most product attributes are optional on a database level and can thus be null; this example shows that all attributes as defined in the schema are always represented in the response, even if null. \ + **Empty lists/arrays show up as null, not as "[]"!** + value: + { + "Entries": [ + { + "productId": 99, + "productCode": null, + "productName": null, + "productDescription": null, + "productCategory": null, + "tokenTypes": null, + "sellableTouchPointIds": null, + "amountInclTax": null, + "imageReference": null, + "productPageUrl": null, + "_links": { + "get_details": { + "href": "https://services.acc.api.htm.nl/abt/abtserviceengine/2.0/products/99", + "method": "GET" + } + } + } + ] + } List containing one product with 4 currently active SellingPeriods (called by touchpointId 1): summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 1) description: Only two sellingPeriods for touchpoint 1 and/or 2 (part of same retailer) are returned - the price for touchpointId 1 is returned -- 2.45.2 From 2bf79f1fa093f43b19088c5155c7de90ab16d8a3 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 26 Feb 2025 15:53:12 +0100 Subject: [PATCH 113/372] versionering and additional remarks --- src/openapi/orders/service_engine_orders.yaml | 205 +++++++++++------- 1 file changed, 123 insertions(+), 82 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 3745780..8515281 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -4,12 +4,12 @@ info: version: "1.0" description: Order APIs available in the Service Engine for order validation and fulfillment. servers: - - url: https://api.integratielaag.nl/v2 + - url: https://api.integratielaag.nl/v1 paths: /orders/validation: post: tags: - - Order Validation v1 & v2 + - Order Validation v1 & v1 summary: Validate order. description: Validate order. parameters: @@ -133,9 +133,9 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v1: - summary: Order validation v1 - description: Order validation v1 + v2: + summary: Order validation v2 + description: Order validation v2 value: { "validContents": true, @@ -166,9 +166,9 @@ paths: }, ], } - v2: - summary: Order validation v2 - description: Order validation v2 + v1: + summary: Order validation v1 + description: Order validation v1 value: { "validContents": true, @@ -186,7 +186,7 @@ paths: "validFrom": "2024-03-22T09:00:00", "validUntil": null, "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "isRenewable": true, @@ -232,7 +232,7 @@ paths: "validFrom": "2024-03-22T09:00:00", "validUntil": null, "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "isRenewable": true, @@ -437,7 +437,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -599,7 +599,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -730,7 +730,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). get: tags: - - Order Retrieval v2.1 + - Order Retrieval v1.1 summary: Get all orders for a specific customer. description: Get all orders for a specific customer. responses: @@ -871,7 +871,7 @@ paths: example: 7208e73e-87a6-46d9-bb6d-867ffc460c9b description: xTat used in order fulfillment. Note that this is a joined parameter via PurchasedProduct. tags: - - Order Retrieval v2.1 + - Order Retrieval v1.1 summary: Find orders. description: Find orders. responses: @@ -1073,9 +1073,9 @@ paths: ] } } - v2.2: - summary: Order creation v2.2 - description: Order creation v2.2 + v1.2: + summary: Order creation v1.2 + description: Order creation v1.2 value: { "externalOrderId": null, @@ -1182,9 +1182,9 @@ paths: ], }, } - v2: - summary: Order creation v2.1 - description: Order creation v2.1 + v1: + summary: Order creation v1.1 + description: Order creation v1.1 value: { "externalOrderId": null, @@ -1363,7 +1363,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -1394,9 +1394,10 @@ paths: "fileType": "image/jpg", "challengeTypeId": 1, "oneTimePassword": "H5Iiz3JTaQeIV8p", - }, + } }, ], + "additionalRemarks" : [] }, ], "payments": @@ -1450,7 +1451,7 @@ paths: ] } } - v2.2: + v1.2: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -1502,7 +1503,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). get: tags: - - Order Retrieval v2.1 + - Order Retrieval v1.1 summary: Get a single order. description: Get a single order. responses: @@ -1566,7 +1567,7 @@ paths: "taxMetadata": { "taxMetadataId": "06270769-a263-4325-82d6-f49396f39d03", - "taxCode": "V21", + "taxCode": "V11", "taxPercentageAmount": 21, "description": "21% BTW", }, @@ -1709,9 +1710,9 @@ paths: "shippingAddressId": 1, "lastUpdatedOn": "2024-03-22T09:00:00", } - v2.2: - summary: Order update v2.2 - description: Order update v2.2 + v1.2: + summary: Order update v1.2 + description: Order update v1.2 value: { "customerProfileId": 1337, "totalAmount": 121, @@ -1772,7 +1773,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -1805,7 +1806,14 @@ paths: "oneTimePassword": "H5Iiz3JTaQeIV8p", }, }, - ], + ], + "additionalRemarks" : + [ + { + "code": "MANDATE_REQUIRED", + "parameter": "directDebitMandateId" + } + ] }, ], "payments": @@ -1859,7 +1867,7 @@ paths: ] } } - v2.2: + v1.2: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -1900,6 +1908,9 @@ paths: responses: "200": description: OK + "400": + description: "Bad request" + /orders/{orderId}/orderlines: parameters: - in: path @@ -1953,9 +1964,9 @@ paths: }, ] } - v2.2: - summary: Create orderLine v2.2 - description: Create orderLine v2.2 + v1.2: + summary: Create orderLine v1.2 + description: Create orderLine v1.2 value: { "externalOrderLineId": null, @@ -2055,7 +2066,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -2088,7 +2099,14 @@ paths: "oneTimePassword": "H5Iiz3JTaQeIV8p", }, }, - ], + ], + "additionalRemarks" : + [ + { + "code": "MANDATE_REQUIRED", + "parameter": "directDebitMandateId" + } + ] }, { "orderLineId": "2cb04b38-e9a8-465a-a273-261c55a21b71", @@ -2098,7 +2116,7 @@ paths: "productCode": "HTM-MND-40", "productDescription": "HTM Maandkorting 40%", "taxAmount": 42, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 200, "amountInclTax": 242, "quantity": 1, @@ -2123,9 +2141,10 @@ paths: "verificationCode": null , "personalAccountData": null } - ] + ], + "additionalRemarks" : [] } - ], + ], "payments": [ { @@ -2177,7 +2196,7 @@ paths: ] } } - v2.2: + v1.2: value: { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" } "400": description: Bad request @@ -2243,9 +2262,9 @@ paths: "validFrom": "2024-03-25T09:00:00", "validUntil": null } - v2.2: - summary: Order creation v2.2 - description: Order creation v2.2 + v1.2: + summary: Order creation v1.2 + description: Order creation v1.2 value: { "taxAmount": 21, @@ -2309,7 +2328,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -2342,7 +2361,14 @@ paths: "oneTimePassword": "H5Iiz3JTaQeIV8p", } } - ] + ], + "additionalRemarks" : + [ + { + "code": "MANDATE_REQUIRED", + "parameter": "directDebitMandateId" + } + ] }, ], "payments": @@ -2396,7 +2422,7 @@ paths: ] } } - v2.2: + v1.2: value: { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" } "400": @@ -2570,9 +2596,9 @@ paths: "place": "Den Haag", }, } - v2.2: - summary: Order creation v2.2 - description: Order creation v2.2 + v1.2: + summary: Order creation v1.2 + description: Order creation v1.2 value: { "createdOn": "2024-03-22T09:00:00", @@ -2654,7 +2680,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -2697,7 +2723,7 @@ paths: "productCode": "HTM-MND-40", "productDescription": "HTM Maandkorting 40%", "taxAmount": 42, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 200, "amountInclTax": 242, "quantity": 1, @@ -2776,7 +2802,7 @@ paths: ] } } - v2.2: + v1.2: value: { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" } /payments/{paymentId}: @@ -2834,9 +2860,9 @@ paths: "place": "Den Haag", } } - v2.2: - summary: Order payment update v2.2 - description: Order payment update v2.2 + v1.2: + summary: Order payment update v1.2 + description: Order payment update v1.2 value: { "htmPaymentReference": "HTM-1234", @@ -2888,7 +2914,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -2982,7 +3008,7 @@ paths: ] } } - v2.2: + v1.2: value: { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" } /orders/{orderId}/ordercustomers: @@ -3036,9 +3062,9 @@ paths: }, ], } - v2.2: - summary: Order payment update v2.2 - description: Order payment update v2.2 + v1.2: + summary: Order payment update v1.2 + description: Order payment update v1.2 value: { "birthname": "Jan", @@ -3111,7 +3137,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -3169,7 +3195,7 @@ paths: ] } } - v2.2: + v1.2: value: { "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073" } /ordercustomers/{orderCustomerId}: @@ -3211,9 +3237,9 @@ paths: "emailAddress": "jandevries@outlook.com", "dateOfBirth": "1970-01-01", } - v2.2: - summary: Order customer update v2.2 - description: Order customer update v2.2 + v1.2: + summary: Order customer update v1.2 + description: Order customer update v1.2 value: { "birthname": "Jan", @@ -3274,7 +3300,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -3307,9 +3333,10 @@ paths: "oneTimePassword": "H5Iiz3JTaQeIV8p", }, }, - ], + ], + "additionalRemarks" : [] } - ], + ], "payments": null, "customer": { @@ -3332,7 +3359,7 @@ paths: ] } } - v2.2: + v1.2: value: { "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073" } /ordercustomers/{orderCustomerId}/orderCustomerAddress: @@ -3364,8 +3391,8 @@ paths: $ref: "#/components/schemas/unavailable" example: v3.0: - summary: Order customer address create v2.2 - description: Order customer address create v2.2 + summary: Order customer address create v1.2 + description: Order customer address create v1.2 value: { "addressTypeId": 1, @@ -3428,7 +3455,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -3461,9 +3488,16 @@ paths: "oneTimePassword": "H5Iiz3JTaQeIV8p", }, }, - ], - } - ], + ], + "additionalRemarks" : + [ + { + "code": "MANDATE_REQUIRED", + "parameter": "directDebitMandateId" + } + ] + } + ], "payments": null, "customer": { @@ -3515,8 +3549,8 @@ paths: $ref: "#/components/schemas/unavailable" example: v3.0: - summary: Order customer address create v2.2 - description: Order customer address create v2.2 + summary: Order customer address create v1.2 + description: Order customer address create v1.2 value: { "addressTypeId": 1, @@ -3579,7 +3613,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V21", + "taxCode": "V11", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -3612,9 +3646,16 @@ paths: "oneTimePassword": "H5Iiz3JTaQeIV8p", }, }, - ], - } - ], + ], + "additionalRemarks" : + [ + { + "code": "MANDATE_REQUIRED", + "parameter": "directDebitMandateId" + } + ] + } + ], "payments": null, "customer": { @@ -3656,7 +3697,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). post: tags: - - Order Fulfillment v2.1 + - Order Fulfillment v1.1 summary: Fulfill an order without creating or updating the order as a resource. description: Fulfill an order without creating or updating the order as a resource. responses: -- 2.45.2 From 8461b117bd0f1d3510565b91613abbb3e02822ad Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 26 Feb 2025 16:11:39 +0100 Subject: [PATCH 114/372] added delete on order address --- src/openapi/orders/orders-crud.yaml | 36 +++ src/openapi/orders/service_engine_orders.yaml | 226 +++++++++++++----- 2 files changed, 206 insertions(+), 56 deletions(-) diff --git a/src/openapi/orders/orders-crud.yaml b/src/openapi/orders/orders-crud.yaml index e9e47cc..c3b3115 100644 --- a/src/openapi/orders/orders-crud.yaml +++ b/src/openapi/orders/orders-crud.yaml @@ -1395,6 +1395,42 @@ paths: $ref: "#/components/schemas/unavailable" example: { "customerTokenId": "0aedb483-2477-4720-aee6-7abcd016843b" } + /customertokens/{customerTokenId}/personalaccountdata: + parameters: + - in: path + name: customerTokenId + schema: + type: string + format: uuid + example: 510194ef-0038-45ef-94c7-262df93ef1d7 + required: true + description: The id of the customer token. + post: + summary: P3. Add personal account data to token. + description: Add personal account data to token. + tags: + - Order Line + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "photoReference": "DSC_0502.JPG", + "fileType": "image/jpg", + "challengeTypeId": 1, + "oneTimePassword": "H5Iiz3JTaQeIV8p", + } + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { "personalAccountDataId": "0aedb483-2477-4720-aee6-7abcd016843b" } /personalaccountdata: get: summary: P5. Find personal account data. diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 8515281..d0de7bd 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -9,7 +9,7 @@ paths: /orders/validation: post: tags: - - Order Validation v1 & v1 + - Order Validation v1 & v2 summary: Validate order. description: Validate order. parameters: @@ -972,18 +972,18 @@ paths: } post: tags: - - Order Creation v3.0 - summary: Create a new order v3.0. - description: Create a new order v3.0. + - Order Creation v2.0 + summary: Create a new order v2.0. + description: Create a new order v2.0. requestBody: content: application/json: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: - summary: Order creation v3.0 - description: Order creation v3.0 + v2.0: + summary: Order creation v2.0 + description: Order creation v2.0 value: { "externalOrderId": null, @@ -1318,7 +1318,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: + v2.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -1692,7 +1692,7 @@ paths: } patch: tags: - - Order Creation v3.0 + - Order Creation v2.0 summary: Update an existing order. description: Update an existing order. requestBody: @@ -1701,9 +1701,9 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: - summary: Order update v3.0 - description: Order update v3.0 + v2.0: + summary: Order update v2.0 + description: Order update v2.0 value: { "languageId": 1, "billingAddressId": 2, @@ -1729,7 +1729,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: + v2.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -1902,15 +1902,32 @@ paths: } delete: tags: - - Order Creation v3.0 + - Order Creation v2.0 summary: Delete an existing order. description: Delete an existing order. responses: "200": description: OK "400": - description: "Bad request" - + description: Bad request + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", + "detail": "The order can not be deleted.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": [ + { + "detail": "Order status is paid", + "pointer": "#/order_OrderStatus/1/orderStatus/orderStatusId", + "orderStatusId": 4 + } + ] + } /orders/{orderId}/orderlines: parameters: - in: path @@ -1930,7 +1947,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). post: tags: - - Order Creation v3.0 + - Order Creation v2.0 summary: Add a new order line to an existing order. description: Add a new order line to an existing order. requestBody: @@ -1939,9 +1956,9 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: - summary: Create orderLine v3.0 - description: Create orderLine v3.0 + v2.0: + summary: Create orderLine v2.0 + description: Create orderLine v2.0 value: { "externalOrderLineId": null, @@ -2022,7 +2039,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: + v2.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -2244,7 +2261,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). patch: tags: - - Order Creation v3.0 + - Order Creation v2.0 summary: Update an existing order line. description: Update an existing order line. requestBody: @@ -2253,9 +2270,9 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: - summary: Order creation v3.0 - description: Order creation v3.0 + v2.0: + summary: Orderline update v2.0 + description: Orderline update v2.0 value: { "quantity": 1, @@ -2263,8 +2280,8 @@ paths: "validUntil": null } v1.2: - summary: Order creation v1.2 - description: Order creation v1.2 + summary: Orderline updatev1.2 + description: Orderline update v1.2 value: { "taxAmount": 21, @@ -2284,7 +2301,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: + v2.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -2448,7 +2465,7 @@ paths: } delete: tags: - - Order Creation v3.0 + - Order Creation v2.0 summary: Delete an existing order line. description: Delete an existing order line. responses: @@ -2459,7 +2476,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" example: - v3.0: + v2.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -2556,7 +2573,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). post: tags: - - Order Creation v3.0 + - Order Creation v2.0 summary: Add a payment to an existing order. description: Add a payment to an existing order. requestBody: @@ -2565,9 +2582,9 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: - summary: Order creation v3.0 - description: Order creation v3.0 + v2.0: + summary: Order creation v2.0 + description: Order creation v2.0 value: { "createdOn": "2024-03-22T09:00:00", @@ -2636,7 +2653,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: + v2.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -2824,7 +2841,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). patch: tags: - - Order Creation v3.0 + - Order Creation v2.0 summary: Update a payment on an existing order. description: Update a payment on an existing order. requestBody: @@ -2833,9 +2850,9 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: - summary: Order payment update v3.0 - description: Order payment update v3.0 + v2.0: + summary: Order payment update v2.0 + description: Order payment update v2.0 value: { "htmPaymentReference": "HTM-1234", @@ -2876,7 +2893,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: + v2.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -3030,7 +3047,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). post: tags: - - Order Creation v3.0 + - Order Creation v2.0 summary: Add a customer to an existing order. description: Add a customer to an existing order. requestBody: @@ -3039,9 +3056,9 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: - summary: Order payment update v3.0 - description: Order payment update v3.0 + v2.0: + summary: Order payment update v2.0 + description: Order payment update v2.0 value: { "birthname": "Jan", @@ -3093,7 +3110,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: + v2.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -3217,7 +3234,7 @@ paths: example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c description: The JWT of the logged in customer (in case of a web shop). tags: - - Order Creation v3.0 + - Order Creation v2.0 summary: Update a customer on an existing order. description: Update a customer on an existing order. requestBody: @@ -3226,9 +3243,9 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: - summary: Order customer update v3.0 - description: Order customer update v3.0 + v2.0: + summary: Order customer update v2.0 + description: Order customer update v2.0 value: { "birthname": "Jan", @@ -3256,7 +3273,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: + v2.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -3381,7 +3398,7 @@ paths: example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c description: The JWT of the logged in customer (in case of a web shop). tags: - - Order Creation v3.0 + - Order Creation v2.0 summary: Create a customer address for an existing order. description: Create a customer address for an existing order. requestBody: @@ -3390,7 +3407,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" example: - v3.0: + v2.0: summary: Order customer address create v1.2 description: Order customer address create v1.2 value: @@ -3411,7 +3428,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: + v2.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -3539,7 +3556,7 @@ paths: example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c description: The JWT of the logged in customer (in case of a web shop). tags: - - Order Creation v3.0 + - Order Creation v2.0 summary: Update a customer address for an existing order. description: Update a customer address for an existing order. requestBody: @@ -3548,7 +3565,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" example: - v3.0: + v2.0: summary: Order customer address create v1.2 description: Order customer address create v1.2 value: @@ -3569,7 +3586,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v3.0: + v2.0: value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", @@ -3678,6 +3695,103 @@ paths: ] } } + delete: + tags: + - Order Creation v2.0 + summary: Delete an existing order address + description: Delete an existing order address + parameters: + - in: path + name: orderCustomerAddressId + required: true + style: simple + explode: false + schema: + type: string + format: uuid + example: a0ef57fa-395c-4a03-96e9-234c26dccea9 + - in: header + name: X-HM-JWT-AUTH-HEADER + schema: + type: string + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + description: The JWT of the logged in customer (in case of a web shop). + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + examples: + v2.0: + value: + { + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "externalOrderId": null, + "orderNumber": "ORD-123456", + "customerProfileId": 1337, + "totalAmount": 0, + "language": { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl" + }, + "billingAddressId": 1, + "shippingAddressId": 1, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": + [ + { + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order is aangemaakt", + } + ], + "orderLines": null, + "payments": null, + "customer": + { + "birthname": "Jan", + "surname": "Vries", + "prefix": "de", + "emailAddress": "jandevries@outlook.com", + "dateOfBirth": "1970-01-01", + "addresses": null + } + } + "400": + description: Bad request + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", + "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.", + "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", + "errors": [ + { + "detail": "Product requires product with productId=2", + "pointer": "#/1/orderLine", + "orderLineId": "0574440e-7fa0-401f-b907-539c91633a5d", + "productId": 3 + } + ] + } + /orders/{orderId}/fulfill: parameters: - in: path -- 2.45.2 From bd3f3e68a65de82466b6e58ea43a38229b23e061 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 26 Feb 2025 16:17:17 +0100 Subject: [PATCH 115/372] Addede delete address to CRUD --- src/openapi/orders/orders-crud.yaml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/openapi/orders/orders-crud.yaml b/src/openapi/orders/orders-crud.yaml index c3b3115..538c913 100644 --- a/src/openapi/orders/orders-crud.yaml +++ b/src/openapi/orders/orders-crud.yaml @@ -1919,7 +1919,6 @@ paths: schema: $ref: "#/components/schemas/unavailable" example: { "mandateInputId": "dbbc3913-414e-4528-9c95-6c11a11e04ac" } - /mandateinputs/{mandateInputId}: parameters: - in: path @@ -2245,6 +2244,27 @@ paths: { "orderCustomerAddressId": "d5005529-d4f2-4552-a5b8-477dab7836ec", } + delete: + summary: P3. Delete an address of a customer on an order. + description: Delete an address of a customer on an order. + tags: + - Customer + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: "#/components/schemas/unavailable" + example: { + + } + components: securitySchemes: bearerToken: -- 2.45.2 From cc7da9d69ee38d26717313ac0c4b68f690a518ed Mon Sep 17 00:00:00 2001 From: Max Martens Date: Thu, 27 Feb 2025 16:33:52 +0100 Subject: [PATCH 116/372] Split up Swagger in two separate files with SE and TP URI, to accommodate two separate stubs --- .../{SE-products.yaml => SE-products-SE.yaml} | 12 +- src/openapi/products/SE-products-TP.yaml | 2550 +++++++++++++++++ 2 files changed, 2556 insertions(+), 6 deletions(-) rename src/openapi/products/{SE-products.yaml => SE-products-SE.yaml} (99%) create mode 100644 src/openapi/products/SE-products-TP.yaml diff --git a/src/openapi/products/SE-products.yaml b/src/openapi/products/SE-products-SE.yaml similarity index 99% rename from src/openapi/products/SE-products.yaml rename to src/openapi/products/SE-products-SE.yaml index 49b9536..b2b6944 100644 --- a/src/openapi/products/SE-products.yaml +++ b/src/openapi/products/SE-products-SE.yaml @@ -71,7 +71,7 @@ paths: "productPageUrl": null, "_links": { "get_details": { - "href": "https://services.acc.api.htm.nl/abt/abtserviceengine/2.0/products/99", + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/99", "method": "GET" } } @@ -104,7 +104,7 @@ paths: "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", "_links": { "get_details": { - "href": "https://services.acc.api.htm.nl/abt/abtserviceengine/2.0/products/2", + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/2", "method": "GET" } } @@ -137,7 +137,7 @@ paths: "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", "_links": { "get_details": { - "href": "https://services.acc.api.htm.nl/abt/abtserviceengine/2.0/products/2", + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/2", "method": "GET" } } @@ -169,7 +169,7 @@ paths: "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", "_links": { "get_details": { - "href": "https://services.acc.api.htm.nl/abt/abtserviceengine/2.0/products/49", + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/49", "method": "GET" } } @@ -202,7 +202,7 @@ paths: "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", "_links": { "get_details": { - "href": "https://services.acc.api.htm.nl/abt/abtserviceengine/2.0/products/2", + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/2", "method": "GET" } } @@ -232,7 +232,7 @@ paths: "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", "_links": { "get_details": { - "href": "https://services.acc.api.htm.nl/abt/abtserviceengine/2.0/products/4", + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/4", "method": "GET" } } diff --git a/src/openapi/products/SE-products-TP.yaml b/src/openapi/products/SE-products-TP.yaml new file mode 100644 index 0000000..17305e4 --- /dev/null +++ b/src/openapi/products/SE-products-TP.yaml @@ -0,0 +1,2550 @@ +openapi: 3.0.1 +info: + title: Service Engine APIs for Products + description: |- + Service Engine APIs for HTM products. These are NOT the CRUD APIs to access raw data in the database. + To be used by touchpoints to get information about HTM products they are allowed to see and/or sell. + version: '1.0' +servers: + - url: https://api.integratielaag.nl/abt/touchpoint/2.0 +tags: + - name: ServiceEngine Products + description: |- + To be used by touchpoints to get information about HTM products they are allowed to see and/or sell. +paths: + /products: + get: + tags: + - ServiceEngine Products + summary: Get a list of all HTM products that a touchpoint is allowed to see and/or sell + description: |- + Get a list of all HTM products that refers to a given parentProductId (or without parent, if not specified), + and that the calling touchpoint is allowed to see and/or sell. \ + Essentially, this means that only products that have active sellingPeriods for touchpoints within the same + retailer as the calling touchpoint are returned. \ + Only a few details are returned per product - use the `GET /products/{productId}` endpoint + to get more details. \ + Nb: touchpoint 1 and 2 belong to retailer 1; touchpoint 3 and 4 belong to retailer 2. + parameters: + - name: parentProductId + in: query + required: false + description: |- + Only return products that refer to the given parentProductId. \ + Returns parent-products (i.e. products with parentProductId = null) if left empty. + schema: + type: integer + example: 1 + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ProductPayloadListResponse' + examples: + No products / Empty list: + summary: No products / Empty list + description: No products + value: + { + "Entries": [] + } + List containing one product with many null attributes: + summary: List containing one product with many null attributes + description: |- + Most product attributes are optional on a database level and can thus be null; this example shows that all attributes as defined in the schema are always represented in the response, even if null. \ + **Empty lists/arrays show up as null, not as "[]"!** + value: + { + "Entries": [ + { + "productId": 99, + "productCode": null, + "productName": null, + "productDescription": null, + "productCategory": null, + "tokenTypes": null, + "sellableTouchPointIds": null, + "amountInclTax": null, + "imageReference": null, + "productPageUrl": null, + "_links": { + "get_details": { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/99", + "method": "GET" + } + } + } + ] + } + List containing one product with 4 currently active SellingPeriods (called by touchpointId 1): + summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 1) + description: Only two sellingPeriods for touchpoint 1 and/or 2 (part of same retailer) are returned - the price for touchpointId 1 is returned + value: + { + "Entries": [ + { + "productId": 2, + "productCode": "312AB-WL", + "productName": "HTM dagkaart", + "productDescription": "Reis een dag met het openbaar vervoer bij HTM", + "productCategory": { + "productCategoryId": 6, + "isTravelProduct": false, + "name": "Barcode" + }, + "tokenTypes": null, + "sellableTouchPointIds": [ + 1, + 2 + ], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/2", + "method": "GET" + } + } + } + ] + } + List containing one product with 4 currently active SellingPeriods (called by touchpointId 3): + summary: List containing one product with 4 currently active SellingPeriods (called by touchpointId 3) + description: Only two sellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned - the price for touchpointId 3 is returned + value: + { + "Entries": [ + { + "productId": 2, + "productCode": "312AB-WL", + "productName": "HTM dagkaart", + "productDescription": "Reis een dag met het openbaar vervoer bij HTM", + "productCategory": { + "productCategoryId": 6, + "isTravelProduct": false, + "name": "Barcode" + }, + "tokenTypes": null, + "sellableTouchPointIds": [ + 3, + 4 + ], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/2", + "method": "GET" + } + } + } + ] + } + List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4): + summary: List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4) + description: Product is still returned (because touchpointId 3 is part of same retailer) but no price, as touchpointId 4 is not allowed to sell this product. + value: + { + "Entries": [ + { + "productId": 49, + "productCode": null, + "productName": "HTM Regio Vrij", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "tokenTypes": null, + "sellableTouchpointIds": [ + 4 + ], + "amountInclTax": null, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/49", + "method": "GET" + } + } + } + ] + } + List containing multiple products (called by touchpointId 3): + summary: List containing multiple products (called by touchpointId 3) + description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned + value: + { + "Entries": [ + { + "productId": 2, + "productCode": "312AB-WL", + "productName": "HTM dagkaart", + "productDescription": "Reis een dag met het openbaar vervoer bij HTM", + "productCategory": { + "productCategoryId": 6, + "isTravelProduct": false, + "name": "Barcode" + }, + "tokenTypes": null, + "sellableTouchPointIds": [ + 3, + 4 + ], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/2", + "method": "GET" + } + } + }, + { + "productId": 4, + "productCode": "30002-ML", + "productName": "HTM 40% korting", + "productDescription": "Reis een maand lang met 40% korting!", + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "sellableTouchPointIds": [ + 3, + 4 + ], + "amountInclTax": 800, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/4", + "method": "GET" + } + } + } + ] + } + /products/{productId}: + get: + tags: + - ServiceEngine Products + summary: Get more details for a single HTM product (including all child products), specified by the productId + description: |- + Get more details for a single HTM product (including all child products/productVariants), specified by the productId. \ + Only information that is allowed to be seen by the calling touchpoint is returned - i.e. only currently + active selling periods and prices for the calling touchpoint are returned. Future/past prices and prices + for other touchpoints are thus filtered out. + + The response contains a product tree, including all child products (`productVariants`) of the given + productId that the touchpoint is allowed to see and/or sell. + + Touchpoints can only retrieve details for products that they are allowed to see and/or sell at the time of the request + (i.e. the product is returned in the products list response). + Thus, productVariants that are not available to the calling touchpoint are not returned in the response. + + When no product exists for the given productId, a 404 Error response is returned. + parameters: + - name: productId + in: path + required: true + style: simple + description: Id of the product to get details for + schema: + type: integer + example: 1 + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ProductPayloadResponse' + examples: + 90% Discount F&F pilot product (called by touchpointId 3): + summary: 90% Discount F&F pilot product (called by touchpointId 3) + description: |- + All details (that the calling touchpoint is allowed to see) for the 90% Discount F&F pilot product.\ + Even though this product has sellingPeriods for multiple touchpoints, only the currently active sellingPeriod and price for touchpointId 3 are returned. + + This product has no child products, so its `productVariants` array is empty. + value: + { + "productId": 24, + "parentProductId": null, + "productCode": "HTM-30901-WL", + "gboPackageTemplateId": "30901", + "tapConnectProductCode": null, + "productGroupMetadata": { + "productGroupMetadataId": "WIP", + "productGroupCode": "WIP", + "department": "WIP", + "costCenter": "WIP", + "costType": "WIP", + "description": "Work in Progress - will follow later, when FIKO is implemented", + "user": "WIP", + "documentCode": "WIP", + "timestampUpdated": "2024-09-03T15:07:53.470+00:00", + "validFrom": "2024-08-01T00:00:00.000+00:00", + "validUntil": "2025-08-01T00:00:00.000+00:00" + }, + "productName": "HTM 90% Korting", + "productDescription": "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis een week lang met korting!", + "validityPeriod": { + "validityPeriodId": 144, + "fromInclusive": "2023-12-31T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM 90% Discount", + "description": "Are you a regular traveler? Activate HTM 90% discount on your EMV card!" + } + ], + "productOwner": { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM" + }, + "marketSegments": [ + { + "marketSegmentId": 1, + "name": "B2C" + } + ], + "customerSegments": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": null, + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P7D", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-90-korting", + "termsUrl": "https://web.acc.cloud.htm.nl/media/hkfak1dj/pv-pilotproduct.pdf", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 78, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23: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": 78, + "amountExclTax": 92, + "amountInclTax": 100, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + } + 20% Discount product (called by touchpointId 4): + summary: 20% Discount product (called by touchpointId 4) + description: |- + 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. + value: + { + "productId": 126, + "parentProductId": null, + "productCode": "HTM-30001", + "gboPackageTemplateId": "30001", + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM 20% Korting", + "productDescription": "Reis met 20% korting op je betaalpas bij HTM.", + "validityPeriod": { + "validityPeriodId": 236, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM 20% Discount", + "description": "Travel with 20% discount using your bank card with HTM." + } + ], + "productOwner": { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM" + }, + "marketSegments": [ + { + "marketSegmentId": 1, + "name": "B2C" + } + ], + "customerSegments": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": null, + "sendInvoice": null, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 172, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 4, + "name": "App (Infoplaza)", + "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": null + } + ], + "purchasePrices": null, + "productVariants": [ + { + "productId": 119, + "parentProductId": 126, + "productCode": "HTM-30001-ML", + "gboPackageTemplateId": "30001", + "tapConnectProductCode": null, + "productGroupMetadata": { + "productGroupMetadataId": "WIP", + "productGroupCode": "WIP", + "department": "WIP", + "costCenter": "WIP", + "costType": "WIP", + "description": "Work in Progress - will follow later, when FIKO is implemented", + "user": "WIP", + "documentCode": "WIP", + "timestampUpdated": "2024-09-03T15:07:53.470+00:00", + "validFrom": "2024-08-01T00:00:00.000+00:00", + "validUntil": "2025-08-01T00:00:00.000+00:00" + }, + "productName": "HTM 20% Korting (losse maand)", + "productDescription": "Reis een maand lang met 20% korting op je betaalpas bij HTM.", + "validityPeriod": { + "validityPeriodId": 229, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM 20% Discount (single month)", + "description": "Travel with 20% discount for a month using your bank card with HTM." + } + ], + "productOwner": { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM" + }, + "marketSegments": [ + { + "marketSegmentId": 1, + "name": "B2C" + } + ], + "customerSegments": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-20-korting", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 160, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 4, + "name": "App (Infoplaza)", + "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": 149, + "amountExclTax": 276, + "amountInclTax": 300, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + }, + { + "productId": 120, + "parentProductId": 126, + "productCode": "HTM-30001-MA", + "gboPackageTemplateId": "30001", + "tapConnectProductCode": null, + "productGroupMetadata": { + "productGroupMetadataId": "WIP", + "productGroupCode": "WIP", + "department": "WIP", + "costCenter": "WIP", + "costType": "WIP", + "description": "Work in Progress - will follow later, when FIKO is implemented", + "user": "WIP", + "documentCode": "WIP", + "timestampUpdated": "2024-09-03T15:07:53.470+00:00", + "validFrom": "2024-08-01T00:00:00.000+00:00", + "validUntil": "2025-08-01T00:00:00.000+00:00" + }, + "productName": "HTM 20% Korting (doorlopend abonnement)", + "productDescription": "Reis gedurende je abonnement met 20% korting op je betaalpas bij HTM.", + "validityPeriod": { + "validityPeriodId": 230, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-25T04:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM 20% Discount (subscription)", + "description": "Travel with 20% discount for the duration of your subscription using your bank card with HTM." + } + ], + "productOwner": { + "productOwnerId": 17, + "name": "Corneel Verstoep", + "organization": "HTM" + }, + "marketSegments": [ + { + "marketSegmentId": 1, + "name": "B2C" + } + ], + "customerSegments": null, + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 1, + "name": "guest" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "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/webshop/htm-20-korting", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-20-korting", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 159, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "salesTouchpoint": { + "salesTouchpointId": 4, + "name": "App (Infoplaza)", + "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": 148, + "amountExclTax": 276, + "amountInclTax": 300, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + } + ] + } + Regio Vrij product and (part of) its productVariants (called by touchpointId 3): + summary: Regio Vrij product and (part of) its productVariants (called by touchpointId 3) + description: |- + 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. + value: + { + "productId": 49, + "parentProductId": null, + "productCode": null, + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", + "validityPeriod": { + "validityPeriodId": 161, + "fromInclusive": "2024-11-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in the chosen area. in the Rotterdam The Hague region." + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + }, + { + "customerSegmentId": 4, + "name": "Volwassene (19-64)" + }, + { + "customerSegmentId": 5, + "name": "Oudere (65+)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": + [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": null, + "sendInvoice": null, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 99, + "fromInclusive": "2024-11-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": null + } + ], + "purchasePrices": null, + "productVariants": [ + { + "productId": 109, + "parentProductId": 49, + "productCode": null, + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij - HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 219, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + }, + { + "customerSegmentId": 4, + "name": "Volwassene (19-64)" + }, + { + "customerSegmentId": 5, + "name": "Oudere (65+)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": null, + "sendInvoice": null, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 143, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-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": null + } + ], + "purchasePrices": null, + "productVariants": [ + { + "productId": 114, + "parentProductId": 109, + "productCode": null, + "gboPackageTemplateId": "33629", + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij - Voltarief - HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 224, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - Full Fare - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 4, + "name": "Volwassene (19-64)" + }, + { + "customerSegmentId": 5, + "name": "Oudere (65+)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "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/htm-regio-vrij", + "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 148, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-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": 139, + "amountExclTax": 5412, + "amountInclTax": 5900, + "fromInclusive": "2024-12-31T23:00:00.000+00:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + }, + { + "productId": 115, + "parentProductId": 109, + "productCode": null, + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij - Reductietarief - HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 225, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": null, + "sendInvoice": null, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 149, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-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": 140, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": [ + { + "productId": 116, + "parentProductId": 115, + "productCode": "33630-ML", + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productGroupMetadata": { + "productGroupMetadataId": "WIP", + "productGroupCode": "WIP", + "department": "WIP", + "costCenter": "WIP", + "costType": "WIP", + "description": "Work in Progress - will follow later, when FIKO is implemented", + "user": "WIP", + "documentCode": "WIP", + "timestampUpdated": "2024-09-03T15:07:53.470+00:00", + "validFrom": "2024-08-01T00:00:00.000+00:00", + "validUntil": "2025-08-01T00:00:00.000+00:00" + }, + "productName": "HTM Regio Vrij - Reductietarief - Losse Maand- HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 226, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - 1 Month - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "isRenewable": false, + "sendInvoice": false, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 150, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-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": 141, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + }, + { + "productId": 117, + "parentProductId": 115, + "productCode": "33630-MA", + "gboPackageTemplateId": "33630", + "tapConnectProductCode": null, + "productGroupMetadata": { + "productGroupMetadataId": "WIP", + "productGroupCode": "WIP", + "department": "WIP", + "costCenter": "WIP", + "costType": "WIP", + "description": "Work in Progress - will follow later, when FIKO is implemented", + "user": "WIP", + "documentCode": "WIP", + "timestampUpdated": "2024-09-03T15:07:53.470+00:00", + "validFrom": "2024-08-01T00:00:00.000+00:00", + "validUntil": "2025-08-01T00:00:00.000+00:00" + }, + "productName": "HTM Regio Vrij - Reductietarief - Doorlopend abonnement- HL62", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62", + "validityPeriod": { + "validityPeriodId": 227, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - Reduced Fare - Renewable subscription - HL62", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "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/webshop/htm-regio-vrij", + "termsUrl": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 151, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-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": 142, + "amountExclTax": 8899, + "amountInclTax": 9700, + "fromInclusive": "2024-12-31T23:00:00.000+0:00", + "toInclusive": "2025-12-31T23:00:00.000+00:00", + "internalPrice": 0.0000, + "taxMetadata": { + "taxMetadataId": "47C8972E-A730-4032-9BDA-AF0A5BCB2C85", + "taxCode": "V09", + "taxPercentageAmount": 9, + "description": "BTW VERKOOP LAAG 9%" + } + } + ] + } + ], + "purchasePrices": null, + "productVariants": null + } + ] + } + ] + }, + { + "productId": 112, + "parentProductId": 49, + "productCode": null, + "gboPackageTemplateId": null, + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM Regio Vrij - HL65", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL65", + "validityPeriod": { + "validityPeriodId": 222, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2099-12-30T23:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Regio Free - HL65", + "description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL65" + } + ], + "productOwner": { + "productOwnerId": 19, + "name": "MRDH", + "organization": "MRDH" + }, + "marketSegments": null, + "customerSegments": [ + { + "customerSegmentId": 2, + "name": "Kind (4-11)" + }, + { + "customerSegmentId": 3, + "name": "Jongere (12-18)" + }, + { + "customerSegmentId": 4, + "name": "Volwassene (19-64)" + }, + { + "customerSegmentId": 5, + "name": "Oudere (65+)" + } + ], + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 3, + "customerDataItem": "dateOfBirth" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 7, + "customerDataItem": "ovPayToken" + } + ], + "requiredGboPersonalAttributes": [ + { + "requiredGboPersonalAttributeId": 1, + "name": "NAME" + }, + { + "requiredGboPersonalAttributeId": 2, + "name": "BIRTHDATE" + }, + { + "requiredGboPersonalAttributeId": 3, + "name": "PHOTO" + } + ], + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1M", + "maxStartInFutureDuration": "P6W", + "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/htm-regio-vrij", + "termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 146, + "fromInclusive": "2024-10-30T23:00:00.000+00:00", + "toInclusive": "2029-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": null + } + ], + "purchasePrices": null, + "productVariants": null + } + ] + } + '404': + description: '404' + content: + application/json: + schema: + $ref: '#/components/schemas/rfc9457Response' + examples: + Non-existing productId: + summary: Non-existing productId + value: + { + "type": "https://www.htm.nl/api/v1/404Error", + "title": "Product not found.", + "detail": "No product found for productId: 1000.", + "instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c", + "apiErrorCode": "htm.api.err.404.2" + } +components: + schemas: + TaxMetadataResponse: + type: object + required: + - taxMetadataId + - taxCode + - taxPercentageAmount + properties: + taxMetadataId: + type: string + format: uuid + example: 501B17EF-36C4-4039-B92C-6517969B464E + taxCode: + type: string + example: V09 + taxPercentageAmount: + type: integer + example: 21 + description: + type: string + example: BTW VERKOOP LAAG 9% + ProductTranslationResponse: + type: object + required: + - language + properties: + language: + type: string + example: en + name: + type: string + example: HTM F&F 90% korting + description: + type: string + example: >- + Travel with 90% discount for a week during the first HTM F&F OVpay + pilot! + SellingPriceResponse: + type: object + required: + - sellingPriceId + - amountExclTax + - taxMetadata + - amountInclTax + - fromInclusive + - toInclusive + - internalPrice + properties: + sellingPriceId: + type: integer + example: 1 + amountExclTax: + type: integer + example: 750 + taxMetadata: + $ref: '#/components/schemas/TaxMetadataResponse' + amountInclTax: + type: integer + example: 908 + fromInclusive: + type: string + format: date-time-offset + example: '2022-03-01T00:00:00.000+00:00' + toInclusive: + type: string + format: date-time-offset + example: '2022-06-01T00:00:00.000+00:00' + internalPrice: + type: number + example: 908.1234 + PurchasePriceResponse: + type: object + required: + - purchasePriceId + - amountExclTax + - taxMetadata + - amountInclTax + - fromInclusive + - toInclusive + properties: + purchasePriceId: + type: integer + example: 1 + amountExclTax: + type: integer + example: 750 + taxMetadata: + $ref: '#/components/schemas/TaxMetadataResponse' + amountInclTax: + type: integer + example: 908 + fromInclusive: + type: string + format: date-time-offset + example: '2022-03-01T00:00:00.000+00:00' + toInclusive: + type: string + format: date-time-offset + example: '2022-06-01T00:00:00.000+00:00' + SalesTouchpointResponse: + type: object + required: + - salesTouchpointId + - name + - isActive + - retailer + properties: + salesTouchpointId: + type: integer + example: 1 + name: + type: string + example: HTM App + isActive: + type: boolean + example: true + retailer: + type: object + required: + - retailerId + - name + properties: + retailerId: + type: integer + example: 1001 + name: + type: string + example: HTM + street: + type: string + example: Kon. Julianaplein + number: + type: string + example: '10' + numberAddition: + type: string + example: a + postalCode: + type: string + example: 2595 AA + city: + type: string + example: Den Haag + country: + type: string + example: Nederland + emailAddress: + type: string + format: email + example: info@htm.nl + phoneNumber: + type: string + example: '09004864636' + taxId: + type: string + example: '09004864636' + imageReference: + type: string + example: https://htm.azure.net/abt/retailers/htm.svg + ProductPayloadListResponse: + type: object + required: + - Entries + properties: + Entries: + type: array + items: + type: object + required: + - productId + properties: + productId: + type: integer + example: 1 + productCode: + type: string + example: 30901-WL + productName: + type: string + example: HTM pilot 90% korting + productDescription: + type: string + example: Reis met 90% korting gedurende de eerste F&F pilot! + productCategory: + type: object + required: + - productCategoryId + - isTravelProduct + - name + properties: + productCategoryId: + type: integer + example: 1 + isTravelProduct: + type: boolean + example: true + name: + type: string + example: Kortingsabonnement + tokenTypes: + type: array + items: + type: object + required: + - tokenTypeId + - name + properties: + tokenTypeId: + type: integer + example: 1 + name: + type: string + example: EMV + sellableTouchPointIds: + type: array + items: + type: integer + example: 3 + amountInclTax: + type: number + example: 100 + imageReference: + type: string + example: https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg + productPageUrl: + type: string + format: uri + example: https://www.htm.nl/nog-onbekende-product-pagina + _links: + type: object + properties: + get_details: + type: object + properties: + href: + type: string + example: https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/1 + method: + type: string + example: GET + + ProductPayloadResponse: + type: object + required: + - productId + - productOwner + - isRenewable + - isSellableAtHtm + - needsSolvencyCheckConsumer + - needsSolvencyCheckBusiness + properties: + productId: + type: integer + example: 1 + parentProductId: + type: integer + example: 1 + productCode: + type: string + example: 30901-WL + gboPackageTemplateId: + type: string + example: '30901' + tapConnectProductCode: + type: string + example: 1234AB + productGroupMetadata: + type: object + required: + - productGroupMetadataId + - productGroupCode + - department + - costCenter + - costType + - description + - documentCode + - user + - timestampUpdated + - validFrom + properties: + productGroupMetadataId: + type: string + format: uuid + example: 501B17EF-36C4-4039-B92C-6517969B464E + productGroupCode: + type: string + example: TBD + department: + type: string + example: TBD + costCenter: + type: string + example: TBD + costType: + type: string + example: TBD + description: + type: string + example: TBD + documentCode: + type: string + example: TBD + user: + type: string + example: TBD + timestampUpdated: + type: string + format: date-time-offset + example: '2024-09-03T10:01:34.000+00:00' + validFrom: + type: string + format: date-time-offset + example: '2024-09-03T10:01:34.000+00:00' + validUntil: + type: string + format: date-time-offset + example: '2024-09-03T10:01:34.000+00:00' + productName: + type: string + example: HTM pilot 90% korting + productDescription: + type: string + example: Reis met 90% korting gedurende de eerste F&F pilot! + validityPeriod: + type: object + required: + - validityPeriodId + - fromInclusive + - toInclusive + properties: + validityPeriodId: + type: integer + example: 1 + fromInclusive: + type: string + format: date-time-offset + example: '2024-09-03T10:01:34.000+00:00' + toInclusive: + type: string + format: date-time-offset + example: '2024-09-03T23:59:59.999+00:00' + productTranslations: + type: array + items: + $ref: '#/components/schemas/ProductTranslationResponse' + productOwner: + type: object + required: + - productOwnerId + - name + properties: + productOwnerId: + type: integer + example: 1 + name: + type: string + example: John Doe + organization: + type: string + example: HTM + marketSegmentse: + type: array + items: + type: object + required: + - marketSegmentId + - name + properties: + marketSegmentId: + type: integer + example: 1 + name: + type: string + example: B2C + customerSegments: + type: array + items: + type: object + required: + - customerSegmentId + - name + properties: + customerSegmentId: + type: integer + example: 1 + name: + type: string + example: Kind (4-11) + productCategory: + type: object + required: + - productCategoryId + - name + - isTravelProduct + properties: + productCategoryId: + type: integer + example: 1 + name: + type: string + example: Kortingsabonnement + isTravelProduct: + type: boolean + example: true + requiredCustomerLevel: + type: object + required: + - requiredCustomerLevelId + - name + properties: + requiredCustomerLevelId: + type: integer + example: 1 + name: + type: string + example: anonymous + requiredProducts: + type: array + items: + type: object + required: + - requiredProductId + - productName + properties: + requiredProductId: + type: integer + example: 2 + productName: + type: string + example: Product name + description: + type: string + description: Reason why the product is required + example: Description + incompatibleProducts: + type: array + items: + type: object + required: + - incompatibleProductId + - productName + properties: + incompatibleProductId: + type: integer + example: 4 + productName: + type: string + example: Product name + description: + type: string + description: >- + Reason why the product is incompatible with the selected + product + example: Description + mandatoryCustomerDataItems: + type: array + items: + type: object + required: + - mandatoryCustomerDataItemId + - customerDataItem + properties: + mandatoryCustomerDataItemId: + type: integer + example: 3 + customerDataItem: + type: string + example: dateOfBirth + requiredGboPersonalAttributes: + type: array + description: >- + List of required GBO personal attributes (PAD) - should not be + user-editable, but automatically populated by PMT backend, based on + the selected gboPackageTemplateId (if any) + items: + type: object + required: + - requiredGboPersonalAttributeId + - name + properties: + requiredGboPersonalAttributeId: + type: integer + example: 2 + name: + type: string + example: BIRTHDATE + tokenTypes: + type: array + items: + type: object + required: + - tokenTypeId + - name + properties: + tokenTypeId: + type: integer + example: 1 + name: + type: string + example: EMV + paymentMoment: + type: object + required: + - paymentMomentId + - name + properties: + paymentMomentId: + type: integer + example: 1 + name: + type: string + example: prepaid + serviceOptions: + type: array + items: + type: object + required: + - serviceOptionId + - action + properties: + serviceOptionId: + type: integer + example: 1 + action: + type: string + example: cancellableTermAhead + description: + type: string + example: Per termijn vooruit opzegbaar + validityDuration: + type: string + format: duration + example: P1M + maxStartInFutureDuration: + type: string + format: duration + example: P6W + isRenewable: + type: boolean + example: true + sendInvoice: + type: boolean + example: false + imageReference: + type: string + format: uri + example: https://htm.azure.net/abt/products/product_1.svg + productPageUrl: + type: string + format: uri + example: https://www.htm.nl/nog-onbekende-product-pagina + termsUrl: + type: string + format: uri + example: https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina + isSellableAtHtm: + type: boolean + example: true + needsSolvencyCheckConsumer: + type: boolean + example: false + needsSolvencyCheckBusiness: + type: boolean + example: false + sellingPeriods: + type: array + items: + type: object + required: + - sellingPeriodId + - fromInclusive + - toInclusive + - salesTouchpoint + properties: + sellingPeriodId: + type: integer + example: 1 + fromInclusive: + type: string + format: date-time-offset + example: '2022-03-01T00:00:00.000+00:00' + toInclusive: + type: string + format: date-time-offset + example: '2022-06-01T00:00:00.000+00:00' + salesTouchpoint: + $ref: '#/components/schemas/SalesTouchpointResponse' + forbiddenPaymentMethods: + type: array + items: + type: object + required: + - forbiddenPaymentMethodId + - name + properties: + forbiddenPaymentMethodId: + type: integer + example: 1 + name: + type: string + example: Credit Card + issuer: + type: string + example: American Express + sellingPrices: + type: array + items: + $ref: '#/components/schemas/SellingPriceResponse' + purchasePrices: + type: array + items: + $ref: '#/components/schemas/PurchasePriceResponse' + auditTrail: + type: array + items: + type: object + required: + - auditTrailId + - action + - user + - timestamp + properties: + auditTrailId: + type: integer + example: 1 + action: + type: string + example: insert + user: + type: string + example: username + timestamp: + type: string + format: date-time-offset + example: '2024-09-03T10:01:34.000+00:00' + rfc9457Response: + type: object + properties: + type: + type: string + format: url + example: "https://www.htm.nl/api/v1/rfc9457Error" + title: + type: string + description: "Short summary of the error." + example: "The request is not valid." + detail: + type: string + description: "More detailed descriptionof the error." + example: "Some required parameters are missing." + instance: + type: string + description: "Unique identifier to correlate this specific error with logging in other applications." + example: "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c" + additionalProperty1: + type: string + description: "Example of an additional property value to be used for error reporting." + example: "additionalValue1" + additionalProperty2: + type: array + description: "Example of an additional property array to be used for error reporting." + items: + type: string + example: + - "additionalValue2-1" + - "additionalValue2-2" \ No newline at end of file -- 2.45.2 From d39a4ba51d934813ddf8228c80719ceb8d8e5b63 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 3 Mar 2025 12:34:26 +0100 Subject: [PATCH 117/372] OVPAY-1518 - No more seagulls. --- src/openapi/fiko/fiko-crud.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 8bf9703..77403b5 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -532,7 +532,7 @@ paths: summary: Add new transaction audit trail for updated transaction item description: Add a new audit trail record for an updated transaction item. value: - user: r.meeuws + user: ad.ministrateur timestamp: 2022-01-02 12:34:00 action: update status: return to src @@ -667,7 +667,7 @@ paths: correlationId: null - transactionAuditTrailId: f4798a84-489d-4533-9dfe-42423c70f6b6 transactionItemId: e8891be1-1b8a-4a0f-91e2-6b523b6497dd - user: r.meeuws + user: ad.ministrateur timestamp: 2025-01-01 12:34:48 action: update status: return to src @@ -697,7 +697,7 @@ paths: correlationId: null - transactionAuditTrailId: b2192e6c-ab79-4000-a04d-d8f4d574a82f transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 - user: r.meeuws + user: ad.ministrateur timestamp: 2025-01-04 12:34:54 action: update status: return to src @@ -2542,7 +2542,7 @@ paths: name: user schema: type: string - example: r.meeuws + example: ad.ministrateur description: The id of the user who performed the metadata change. - in: query name: timestampBefore @@ -3737,7 +3737,7 @@ components: example: { "json": "data" } user: type: string - example: r.meeuws + example: ad.ministrateur timestamp: type: string format: date-time @@ -3794,7 +3794,7 @@ components: example: { "json": "data" } user: type: string - example: r.meeuws + example: ad.ministrateur timestamp: type: string format: date-time -- 2.45.2 From 2b754dfb754f42d5921d74fb4f7d0937e5177922 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 3 Mar 2025 14:10:28 +0100 Subject: [PATCH 118/372] OVPAY-1518 - TaxPercentageAmount is a number. --- src/openapi/fiko/fiko-crud.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 77403b5..4f8acee 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -1885,7 +1885,7 @@ paths: - in: query name: taxPercentageAmount schema: - type: string + type: number example: 21 description: The tax percentage amount. - in: query @@ -3838,7 +3838,7 @@ components: type: string example: V21 taxPercentageAmount: - type: integer + type: number example: 21 description: type: string -- 2.45.2 From cd828981c52ab557a502925af3e165d53b3433f2 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 3 Mar 2025 14:14:24 +0100 Subject: [PATCH 119/372] OVPAY-1518 - Fixed bug in SourceMetadataPostRequestBody. --- src/openapi/fiko/fiko-crud.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 4f8acee..176a739 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -3962,7 +3962,6 @@ components: type: string example: api.htm.nl/v2/account/12345/msgs/abc required: - - sourceMetadataId - incomingName - incomingEntity - outgoingName -- 2.45.2 From 18ffc699c78da69dc5a551aeb74fff7c8b67ad01 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 3 Mar 2025 14:23:23 +0100 Subject: [PATCH 120/372] OVPAY-1518 - Obfuscate names. --- src/openapi/fiko/fiko-crud.yaml | 50 ++++++++++++++++----------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 176a739..b91da43 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -532,7 +532,7 @@ paths: summary: Add new transaction audit trail for updated transaction item description: Add a new audit trail record for an updated transaction item. value: - user: ad.ministrateur + user: ad.vogelaar timestamp: 2022-01-02 12:34:00 action: update status: return to src @@ -667,7 +667,7 @@ paths: correlationId: null - transactionAuditTrailId: f4798a84-489d-4533-9dfe-42423c70f6b6 transactionItemId: e8891be1-1b8a-4a0f-91e2-6b523b6497dd - user: ad.ministrateur + user: ad.vogelaar timestamp: 2025-01-01 12:34:48 action: update status: return to src @@ -697,7 +697,7 @@ paths: correlationId: null - transactionAuditTrailId: b2192e6c-ab79-4000-a04d-d8f4d574a82f transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 - user: ad.ministrateur + user: ad.vogelaar timestamp: 2025-01-04 12:34:54 action: update status: return to src @@ -1645,7 +1645,7 @@ paths: incomingName: HTM-website incomingEntity: OrderLine outgoingName: Webshop - businessOwner: Corneel Verstoep + businessOwner: Koos Verweg rejectionProcessing: system rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc identifyingFieldValue: null @@ -1670,7 +1670,7 @@ paths: incomingName: Translink incomingEntity: Trip outgoingName: TLS - businessOwner: Corneel Verstoep + businessOwner: Koos Verweg rejectionProcessing: mail rejectionInfo: helpdesk@translink.nl identifyingFieldValue: null @@ -1704,7 +1704,7 @@ paths: incomingName: HTM-website incomingEntity: OrderLine outgoingName: Webshop - businessOwner: Corneel Verstoep + businessOwner: Koos Verweg rejectionProcessing: system rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc identifyingFieldValue: null @@ -1729,7 +1729,7 @@ paths: incomingName: HTM-website incomingEntity: OrderLine outgoingName: Webshop - businessOwner: Corneel Verstoep + businessOwner: Koos Verweg rejectionProcessing: system rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc identifyingFieldValue: null @@ -1754,9 +1754,9 @@ paths: incomingName: HTM-app incomingEntity: OrderLine outgoingName: ticketapp - businessOwner: Daan Zeven + businessOwner: Danny Negen rejectionProcessing: mail - rejectionInfo: sven@infoplaza.nl + rejectionInfo: d.negen@htm.nl identifyingFieldValue: null concession: concessionId: 2 @@ -1779,9 +1779,9 @@ paths: incomingName: HTM-app incomingEntity: OrderLine outgoingName: ticketapp - businessOwner: Daan Zeven + businessOwner: Danny Negen rejectionProcessing: mail - rejectionInfo: sven@infoplaza.nl + rejectionInfo: d.negen@htm.nl identifyingFieldValue: null concession: concessionId: 1 @@ -2061,7 +2061,7 @@ paths: name: businessOwner schema: type: string - example: Corneel Verstoep + example: Koos Verweg description: The business owner of the source. - in: query name: rejectionProcessing @@ -2095,21 +2095,21 @@ paths: incomingName: HTM-web incomingEntity: OrderLine outgoingName: webshop - businessOwner: Corneel Verstoep + businessOwner: Koos Verweg rejectionProcessing: system rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc - sourceMetadataId: c3a9ef01-06c6-4c05-8fc7-df825f676dfc incomingName: HTM-app incomingEntity: OrderLine outgoingName: ticketapp - businessOwner: Daan Zeven + businessOwner: Danny Negen rejectionProcessing: mail - rejectionInfo: sven@infoplaza.nl + rejectionInfo: d.negen@htm.nl - sourceMetadataId: 0b6e3e07-c4e0-42bf-86f2-9c9522b71209 incomingName: SMP incomingEntity: OrderLine outgoingName: balieverkoop - businessOwner: Gijs Sip + businessOwner: Guus Geluk rejectionProcessing: mail rejectionInfo: ao@htm.nl href: null @@ -2132,9 +2132,9 @@ paths: incomingName: HTM-app incomingEntity: OrderLine outgoingName: ticketapp - businessOwner: Daan Zeven + businessOwner: Danny Negen rejectionProcessing: mail - rejectionInfo: sven@infoplaza.nl + rejectionInfo: d.negen@htm.nl responses: "201": description: Created @@ -2174,7 +2174,7 @@ paths: summary: Update a source in the metadata description: In this example we update the business owner of a single source meta data value: - businessOwner: Eric Kok + businessOwner: Chef Erwin responses: "200": description: OK @@ -2542,7 +2542,7 @@ paths: name: user schema: type: string - example: ad.ministrateur + example: ad.vogelaar description: The id of the user who performed the metadata change. - in: query name: timestampBefore @@ -3737,7 +3737,7 @@ components: example: { "json": "data" } user: type: string - example: ad.ministrateur + example: ad.vogelaar timestamp: type: string format: date-time @@ -3794,7 +3794,7 @@ components: example: { "json": "data" } user: type: string - example: ad.ministrateur + example: ad.vogelaar timestamp: type: string format: date-time @@ -3954,7 +3954,7 @@ components: example: Website Verkopen businessOwner: type: string - example: Corneel Verstoep + example: Koos Verweg rejectionProcessing: type: string example: system @@ -3991,7 +3991,7 @@ components: example: Website Verkopen businessOwner: type: string - example: Corneel Verstoep + example: Koos Verweg rejectionProcessing: type: string example: system @@ -4210,7 +4210,7 @@ components: example: Website Verkopen businessOwner: type: string - example: Corneel Verstoep + example: Koos Verweg rejectionProcessing: type: string example: system -- 2.45.2 From 2350b40e9ba80ec4ed8deddfeeb1fb1789161e79 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Mon, 3 Mar 2025 16:20:40 +0100 Subject: [PATCH 121/372] OVPAY-1518 - Added sort, limit, offset query params to GET operations. --- src/openapi/fiko/fiko-crud.yaml | 198 ++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index b91da43..8e6d293 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -143,6 +143,24 @@ paths: type: string example: U4F-123456 description: The accounting system reference of the transaction. %00 is searching for NULL-values. + - in: query + name: sort + schema: + type: string + example: occurredOn + description: The field by which the transaction items in the result body are sorted. + - in: query + name: limit + schema: + type: integer + example: 15 + description: The limit of the transaction items in the result body. + - in: query + name: offset + schema: + type: integer + example: 15 + description: The offset of the transaction items in the result body. responses: "200": description: OK @@ -630,6 +648,24 @@ paths: type: string example: a3891560-3084-42cb-867c-f289e7cda47d description: The correlation id of the event. + - in: query + name: sort + schema: + type: string + example: timestamp + description: The field by which the transaction audit trails in the result body are sorted. + - in: query + name: limit + schema: + type: integer + example: 15 + description: The limit of the transaction audit trails in the result body. + - in: query + name: offset + schema: + type: integer + example: 15 + description: The offset of the transaction audit trails in the result body. responses: "200": description: OK @@ -827,6 +863,24 @@ paths: type: string example: Adapt config description: Description of what was changed to resolve the failure. + - in: query + name: sort + schema: + type: string + example: timestamp + description: The field by which the processing failures in the result body are sorted. + - in: query + name: limit + schema: + type: integer + example: 15 + description: The limit of the processing failures in the result body. + - in: query + name: offset + schema: + type: integer + example: 15 + description: The offset of the processing failures in the result body. responses: "200": description: OK @@ -990,6 +1044,24 @@ paths: type: string example: articleNumber description: The identifying field name of the booking process. + - in: query + name: sort + schema: + type: string + example: name + description: The field by which the booking processes in the result body are sorted. + - in: query + name: limit + schema: + type: integer + example: 15 + description: The limit of the booking processes in the result body. + - in: query + name: offset + schema: + type: integer + example: 15 + description: The offset of the booking processes in the result body. responses: "200": description: OK @@ -1211,6 +1283,24 @@ paths: type: string example: 2024-01-01T00:00:00.000 description: Timestamp that the booking metadata is valid. + - in: query + name: sort + schema: + type: string + example: validFrom + description: The field by which the booking metadata in the result body are sorted. + - in: query + name: limit + schema: + type: integer + example: 15 + description: The limit of the booking metadata in the result body. + - in: query + name: offset + schema: + type: integer + example: 15 + description: The offset of the booking metadata in the result body. responses: "200": description: OK @@ -1428,6 +1518,24 @@ paths: type: string example: 1737 description: The identifying field value. + - in: query + name: sort + schema: + type: string + example: bookingMetadataId + description: The field by which the booking group fields in the result body are sorted. + - in: query + name: limit + schema: + type: integer + example: 15 + description: The limit of the booking group fields in the result body. + - in: query + name: offset + schema: + type: integer + example: 15 + description: The offset of the booking group fields in the result body. responses: "200": description: OK @@ -1624,6 +1732,24 @@ paths: type: string example: extRef6 description: External reference 6. + - in: query + name: sort + schema: + type: string + example: lineType + description: The field by which the booking line metadata in the result body are sorted. + - in: query + name: limit + schema: + type: integer + example: 15 + description: The limit of the booking line metadata in the result body. + - in: query + name: offset + schema: + type: integer + example: 15 + description: The offset of the booking line metadata in the result body. responses: "200": description: OK @@ -1901,6 +2027,24 @@ paths: format: date-time example: 2024-03-22T09:00:00 description: Timestamp that the metadata is valid. + - in: query + name: sort + schema: + type: string + example: validFrom + description: The field by which the tax metadata in the result body are sorted. + - in: query + name: limit + schema: + type: integer + example: 15 + description: The limit of the tax metadata in the result body. + - in: query + name: offset + schema: + type: integer + example: 15 + description: The offset of the tax metadata in the result body. responses: "200": description: OK @@ -2078,6 +2222,24 @@ paths: type: string example: api.htm.nl/v2/account/12345/msgs/abc description: The rejection info of the source. + - in: query + name: sort + schema: + type: string + example: incomingName + description: The field by which the source metadata in the result body are sorted. + - in: query + name: limit + schema: + type: integer + example: 15 + description: The limit of the source metadata in the result body. + - in: query + name: offset + schema: + type: integer + example: 15 + description: The offset of the source metadata in the result body. responses: "200": description: OK @@ -2214,6 +2376,24 @@ paths: type: boolean example: true description: Whether the accounting period is open. + - in: query + name: sort + schema: + type: string + example: accountingPeriod + description: The field by which the accounting period metadata in the result body are sorted. + - in: query + name: limit + schema: + type: integer + example: 15 + description: The limit of the accounting period metadata in the result body. + - in: query + name: offset + schema: + type: integer + example: 15 + description: The offset of the accounting period metadata in the result body. responses: "200": description: OK @@ -2343,6 +2523,24 @@ paths: type: string example: 2024-01-01T00:00:00.000 description: Timestamp that the metadata is valid. + - in: query + name: sort + schema: + type: string + example: validFrom + description: The field by which the concession metadata in the result body are sorted. + - in: query + name: limit + schema: + type: integer + example: 15 + description: The limit of the concession metadata in the result body. + - in: query + name: offset + schema: + type: integer + example: 15 + description: The offset of the concession metadata in the result body. responses: "200": description: OK -- 2.45.2 From dc4674202a0e6d376f203e97a893215825eeeabd Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 4 Mar 2025 10:16:51 +0100 Subject: [PATCH 122/372] OVPAY-1562 - Added query param resourceNameId. --- src/openapi/products/purchased_products-crud.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/openapi/products/purchased_products-crud.yaml b/src/openapi/products/purchased_products-crud.yaml index 1a77eda..2305f96 100644 --- a/src/openapi/products/purchased_products-crud.yaml +++ b/src/openapi/products/purchased_products-crud.yaml @@ -52,6 +52,13 @@ paths: example: 2024-10-04T12:34:56.000 required: false description: The purchased product should be last updated after this timestamp. + - in: query + name: resourceNameId + schema: + type: integer + example: 2 + required: false + description: The id of the resource. - in: query name: resourceName schema: -- 2.45.2 From 976293e617de3b5ff56e5b7b4da710796852009f Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 4 Mar 2025 10:55:20 +0100 Subject: [PATCH 123/372] OVPAY-1563 - Added query param contractInvoiceId. --- src/openapi/contracts/contracts-crud.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/openapi/contracts/contracts-crud.yaml b/src/openapi/contracts/contracts-crud.yaml index 0c3e90e..963bf1e 100644 --- a/src/openapi/contracts/contracts-crud.yaml +++ b/src/openapi/contracts/contracts-crud.yaml @@ -624,6 +624,14 @@ paths: tags: - ContractInvoice parameters: + - in: query + name: contractInvoiceId + schema: + type: string + format: uuid + example: 8699d72a-cf4d-4e6b-9e9c-549d837ca51f + required: false + description: Id of the contract invoice to fetch. - in: query name: contractId schema: -- 2.45.2 From bed4dddf3bfedeb1841509495f237d6a2a5c0636 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Tue, 4 Mar 2025 12:42:01 +0100 Subject: [PATCH 124/372] OVPAY-1518 - Replaced asterisk by query param. --- src/openapi/fiko/fiko-crud.yaml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 8e6d293..38e96a4 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -419,12 +419,19 @@ paths: description: The transaction item was successfully updated in the database. value: transactionItemId: 7c3a5b0f-b89e-4f02-8b09-d11c5a050a07 - /transactionitems/responsestatus/*: + /transactionitems/responsestatus/{clientTrackingId}: get: tags: - Transactions v2.2 summary: Get the status of the transaction items POST. description: Get the status of the asynchronous transaction items POST processing. + parameters: + - in: path + name: clientTrackingId + schema: + type: string + required: true + description: The clientTrackingId of the transaction items POST. responses: "200": description: OK -- 2.45.2 From 151a23c39ae7add9c4eae8e10093cc41739e6324 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 5 Mar 2025 10:23:49 +0100 Subject: [PATCH 125/372] OVPAY-1518 - Added priority to endpoints. --- src/openapi/fiko/fiko-crud.yaml | 70 ++++++++++++++++----------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 38e96a4..9e956d0 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -10,7 +10,7 @@ servers: paths: /transactionitems: get: - summary: Find transaction items. + summary: P1. Find transaction items. description: Find transaction items. tags: - Transactions v2.2 @@ -284,7 +284,7 @@ paths: accountingSystemReference: U4F-123456 href: null post: - summary: Add one ore more finanicial transaction items in bulk. + summary: P1. Add one ore more finanicial transaction items in bulk. description: Add one ore more finanicial transaction items in bulk. tags: - Transactions v2.2 @@ -375,7 +375,7 @@ paths: required: true description: The id of the transaction item. patch: - summary: Update a transaction item. + summary: P1. Update a transaction item. description: Update a transaction item. tags: - Transactions v2.2 @@ -423,7 +423,7 @@ paths: get: tags: - Transactions v2.2 - summary: Get the status of the transaction items POST. + summary: P1. Get the status of the transaction items POST. description: Get the status of the asynchronous transaction items POST processing. parameters: - in: path @@ -484,7 +484,7 @@ paths: required: true description: The id of the transaction item to process. post: - summary: Add a processing failure. + summary: P1. Add a processing failure. description: Add a processing failure. tags: - Failures v2.2 @@ -532,7 +532,7 @@ paths: required: true description: The id of the transaction item to process. post: - summary: Add an audit trail entry. + summary: P1. Add an audit trail entry. description: Add an audit trail entry. tags: - Audit Trail v2.2 @@ -580,7 +580,7 @@ paths: transactionAuditTrailId: 37a8095b-19db-498f-9349-5f37d21c5bdf /transactionaudittrails: get: - summary: Find audit trail entries. + summary: P3. Find audit trail entries. description: Find audit trail entries. tags: - Audit Trail v2.2 @@ -803,7 +803,7 @@ paths: href: null /processingfailures: get: - summary: Find processing failures. + summary: P1.Find processing failures. description: Find processing failures. tags: - Failures v2.2 @@ -985,7 +985,7 @@ paths: required: true description: The id of the processing failure. patch: - summary: Update processing failure. + summary: P1. Update processing failure. description: Update processing failure. tags: - Failures v2.2 @@ -1018,7 +1018,7 @@ paths: processingFailureId: 37a8095b-19db-498f-9349-5f37d21c5bdf /bookingprocesses: get: - summary: Find booking processes. + summary: P1. Find booking processes. description: Find booking processes. tags: - Booking Processes v2.2 @@ -1092,7 +1092,7 @@ paths: identifyingFieldName: null href: null post: - summary: Add a booking process. + summary: P2. Add a booking process. description: Add a booking process. tags: - Booking Processes v2.2 @@ -1135,7 +1135,7 @@ paths: required: true description: The id of the booking process. patch: - summary: Update a booking process. + summary: P2. Update a booking process. description: Update a booking process. tags: - Booking Processes v2.2 @@ -1176,7 +1176,7 @@ paths: required: true description: The id of the booking process. post: - summary: Add booking metadata. + summary: P2. Add booking metadata. description: Add booking metadata. tags: - Booking Processes v2.2 @@ -1217,7 +1217,7 @@ paths: bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /bookingmetadata: get: - summary: Find booking metadata. + summary: P1. Find booking metadata. description: Find booking metadata. tags: - Booking Processes v2.2 @@ -1357,7 +1357,7 @@ paths: required: true description: The id of the booking metadata. patch: - summary: Update booking metadata. + summary: P2. Update booking metadata. description: Update booking metadata. tags: - Booking Processes v2.2 @@ -1398,7 +1398,7 @@ paths: required: true description: The id of the booking metadata. post: - summary: Add booking group fields. + summary: P2. Add booking group fields. description: Add booking group fields. tags: - Booking Processes v2.2 @@ -1438,7 +1438,7 @@ paths: required: true description: The id of the booking metadata. post: - summary: Add booking line metadata. + summary: P2. Add booking line metadata. description: Add booking line metadata. tags: - Booking Processes v2.2 @@ -1500,7 +1500,7 @@ paths: bookingLineMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /bookinggroupfields: get: - summary: Find booking group fields. + summary: P1. Find booking group fields. description: Find booking group fields. tags: - Booking Processes v2.2 @@ -1618,7 +1618,7 @@ paths: required: true description: The id of the booking group field. delete: - summary: Delete booking group field. + summary: P2. Delete booking group field. description: Delete booking group field. tags: - Booking Processes v2.2 @@ -1627,7 +1627,7 @@ paths: description: OK /bookinglinemetadata: get: - summary: Find booking line metadata. + summary: P1. Find booking line metadata. description: Find booking line metadata. tags: - Booking Processes v2.2 @@ -1957,7 +1957,7 @@ paths: required: true description: The id of the booking line metadata. patch: - summary: Update booking line metadata. + summary: P2. Update booking line metadata. description: Update booking line metadata. tags: - Booking Processes v2.2 @@ -1988,7 +1988,7 @@ paths: value: bookingLineMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 delete: - summary: Delete booking line metadata. + summary: P2. Delete booking line metadata. description: Delete booking line metadata. tags: - Booking Processes v2.2 @@ -1997,7 +1997,7 @@ paths: description: OK /taxmetadata: get: - summary: Find tax metadata. + summary: P1. Find tax metadata. description: Find tax metadata. tags: - Metadata v2.2 @@ -2103,7 +2103,7 @@ paths: validUntil: null href: null post: - summary: Add tax metadata. + summary: P3. Add tax metadata. description: Add tax metadata. tags: - Metadata v2.2 @@ -2147,7 +2147,7 @@ paths: required: true description: The id of the tax metadata. patch: - summary: Update tax metadata. + summary: P3. Update tax metadata. description: Update tax metadata. tags: - Metadata v2.2 @@ -2178,7 +2178,7 @@ paths: taxMetadataId: 7c3a5b0f-b89e-4f02-8b09-d11c5a050a07 /sourcemetadata: get: - summary: Find source metadata. + summary: P1. Find source metadata. description: Find source metadata. tags: - Metadata v2.2 @@ -2283,7 +2283,7 @@ paths: rejectionInfo: ao@htm.nl href: null post: - summary: Add source metadata. + summary: P3. Add source metadata. description: Add source metadata. tags: - Metadata v2.2 @@ -2328,7 +2328,7 @@ paths: required: true description: The id of the source metadata. patch: - summary: Update source metadata. + summary: P3. Update source metadata. description: Update source metadata. tags: - Metadata v2.2 @@ -2359,7 +2359,7 @@ paths: sourceMetadataId: 37a8095b-19db-498f-9349-5f37d21c5bdf /accountingperiodmetadata: get: - summary: Find accounting period metadata. + summary: P1. Find accounting period metadata. description: Find accounting period metadata. tags: - Metadata v2.2 @@ -2425,7 +2425,7 @@ paths: isOpen: false href: null post: - summary: Add accounting period metadata. + summary: P2. Add accounting period metadata. description: Add accounting period metadata. tags: - Metadata v2.2 @@ -2466,7 +2466,7 @@ paths: required: true description: The id of the accounting period metadata. patch: - summary: Update accounting period metadata. + summary: P2. Update accounting period metadata. description: Update accounting period metadata. tags: - Metadata v2.2 @@ -2497,7 +2497,7 @@ paths: accountingPeriodMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 /concessionmetadata: get: - summary: Find concession metadata. + summary: P1. Find concession metadata. description: Find concession metadata. tags: - Metadata v2.2 @@ -2605,7 +2605,7 @@ paths: validUntil: 2024-11-30T23:59:59.999 href: null post: - summary: Add concession metadata. + summary: P2. Add concession metadata. description: Add concession metadata. tags: - Metadata v2.2 @@ -2650,7 +2650,7 @@ paths: required: true description: The id of the concession metadata. patch: - summary: Update concession metadata. + summary: P2. Update concession metadata. description: Update concession metadata. tags: - Metadata v2.2 @@ -2797,7 +2797,7 @@ paths: $ref: "#/components/schemas/MetadataAuditTrailsPostResponseBody" /concessions: get: - summary: Get all concessions. + summary: P1. Get all concessions. description: Get all concessions. tags: - References v2.2 -- 2.45.2 From e2c768804a5c0be67c4249e49d2ce54ace1bd111 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 5 Mar 2025 10:48:09 +0100 Subject: [PATCH 126/372] fixed semantic error CRUD order --- src/openapi/orders/orders-crud.yaml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/openapi/orders/orders-crud.yaml b/src/openapi/orders/orders-crud.yaml index 538c913..1dd008e 100644 --- a/src/openapi/orders/orders-crud.yaml +++ b/src/openapi/orders/orders-crud.yaml @@ -2249,11 +2249,6 @@ paths: description: Delete an address of a customer on an order. tags: - Customer - requestBody: - content: - application/json: - schema: - $ref: "#/components/schemas/unavailable" responses: "200": description: OK @@ -2261,10 +2256,7 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: { - - } - + example: {} components: securitySchemes: bearerToken: -- 2.45.2 From 38674787182ec0286d480f7f7a249087244ef8fa Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 5 Mar 2025 11:42:50 +0100 Subject: [PATCH 127/372] fixed my search&replace errors --- src/openapi/orders/orders-crud.yaml | 4 +- src/openapi/orders/service_engine_orders.yaml | 43 +++++++++---------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/openapi/orders/orders-crud.yaml b/src/openapi/orders/orders-crud.yaml index 1dd008e..1f4c370 100644 --- a/src/openapi/orders/orders-crud.yaml +++ b/src/openapi/orders/orders-crud.yaml @@ -1423,7 +1423,7 @@ paths: "oneTimePassword": "H5Iiz3JTaQeIV8p", } responses: - "200": + "201": description: OK content: application/json: @@ -1912,7 +1912,7 @@ paths: "place": "Den Haag", } responses: - "200": + "201": description: OK content: application/json: diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index d0de7bd..1c36967 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -4,7 +4,7 @@ info: version: "1.0" description: Order APIs available in the Service Engine for order validation and fulfillment. servers: - - url: https://api.integratielaag.nl/v1 + - url: https://api.integratielaag.nl/v2 paths: /orders/validation: post: @@ -186,7 +186,7 @@ paths: "validFrom": "2024-03-22T09:00:00", "validUntil": null, "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "isRenewable": true, @@ -232,7 +232,7 @@ paths: "validFrom": "2024-03-22T09:00:00", "validUntil": null, "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "isRenewable": true, @@ -437,7 +437,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -599,7 +599,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -730,7 +730,7 @@ paths: description: The JWT of the logged in customer (in case of a web shop). get: tags: - - Order Retrieval v1.1 + - Order Retrieval v2.1 summary: Get all orders for a specific customer. description: Get all orders for a specific customer. responses: @@ -871,7 +871,7 @@ paths: example: 7208e73e-87a6-46d9-bb6d-867ffc460c9b description: xTat used in order fulfillment. Note that this is a joined parameter via PurchasedProduct. tags: - - Order Retrieval v1.1 + - Order Retrieval v2.1 summary: Find orders. description: Find orders. responses: @@ -1363,7 +1363,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -1567,7 +1567,7 @@ paths: "taxMetadata": { "taxMetadataId": "06270769-a263-4325-82d6-f49396f39d03", - "taxCode": "V11", + "taxCode": "V21", "taxPercentageAmount": 21, "description": "21% BTW", }, @@ -1773,7 +1773,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -2083,7 +2083,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -2133,7 +2133,7 @@ paths: "productCode": "HTM-MND-40", "productDescription": "HTM Maandkorting 40%", "taxAmount": 42, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 200, "amountInclTax": 242, "quantity": 1, @@ -2345,7 +2345,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -2697,7 +2697,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -2740,7 +2740,7 @@ paths: "productCode": "HTM-MND-40", "productDescription": "HTM Maandkorting 40%", "taxAmount": 42, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 200, "amountInclTax": 242, "quantity": 1, @@ -2931,7 +2931,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -3154,7 +3154,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -3317,7 +3317,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -3421,7 +3421,7 @@ paths: "country": "NL", } responses: - "200": + "201": description: OK content: application/json: @@ -3472,7 +3472,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -3630,7 +3630,7 @@ paths: "productCode": "HTM-MND-20", "productDescription": "HTM Maandkorting 20%", "taxAmount": 21, - "taxCode": "V11", + "taxCode": "V21", "amountExclTax": 100, "amountInclTax": 121, "quantity": 1, @@ -3791,7 +3791,6 @@ paths: } ] } - /orders/{orderId}/fulfill: parameters: - in: path -- 2.45.2 From c8368ab003f031a12446ddae103dbd2d8ffbcbdb Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 5 Mar 2025 14:08:57 +0100 Subject: [PATCH 128/372] OVPAY-1518 - Changed GET query params to OData. --- src/openapi/fiko/fiko-crud.yaml | 1307 +++++++++++++------------------ 1 file changed, 564 insertions(+), 743 deletions(-) diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 9e956d0..33fb229 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -15,152 +15,70 @@ paths: tags: - Transactions v2.2 parameters: - - in: query - name: transactionItemId - schema: - type: string - format: uuid - example: 75174a9d-fff4-4682-b66b-ebd93cbe7ea3 - description: The id of the transaction item. - - in: query - name: transactionType + - $ref: "#/components/parameters/top" + - $ref: "#/components/parameters/skip" + - $ref: "#/components/parameters/filter" + - $ref: "#/components/parameters/count" + - name: $orderby + in: query + description: Order items by property values + required: false + style: form + explode: false schema: + uniqueItems: true type: array items: type: string - example: [sales] + enum: + - transactionItemRowId + - transactionItemId + - transactionType + - sourceName + - transactionId + - transactionLineId + - name + - quantity + - taxCode + - amountExclTax + - amountInclTax + - amountTax + - occurredOn + - type + - articleNumber + - status + - aggregationReference + - accountingSystemReference + - name: $select + in: query + description: Select properties to be returned + required: false + style: form explode: false - description: Possible types of the transaction ('sales'). - - in: query - name: sourceName - schema: - type: string - example: Verkoopengine - description: Source name of the transaction. - - in: query - name: transactionId - schema: - type: string - example: 1001236 - description: The id of the transaction. - - in: query - name: transactionLineId - schema: - type: string - example: 1 - description: The line id of the transaction. - - in: query - name: name - schema: - type: string - example: HTM Maandkorting 20% - description: The name of the product on the transaction. - - in: query - name: quantity - schema: - type: integer - example: 1 - description: The quantity of the transaction. - - in: query - name: taxCode - schema: - type: string - example: V21 - description: The tax code of the transaction. - - in: query - name: amountExclTax - schema: - type: integer - example: 100 - description: The amount of the transaction excluding tax in cents. - - in: query - name: amountInclTax - schema: - type: integer - example: 121 - description: The amount of the transaction including tax in cents. - - in: query - name: amountTax - schema: - type: integer - example: 21 - description: The tax amount of the transaction in cents. - - in: query - name: occurredBefore - schema: - type: string - format: date-time - example: 2024-10-04T00:00:00Z - description: Timestamp before which the transaction occurred. - - in: query - name: occurredAfter - schema: - type: string - format: date-time - example: 2024-10-04T00:00:00Z - description: Timestamp after which the transaction occurred. - - in: query - name: type schema: + uniqueItems: true type: array items: type: string - example: [debit, credit] - explode: false - description: Possible types of the transaction ('debit' or 'credit'). - - in: query - name: articleNumber - schema: - type: string - example: 4031 - description: The article number of the transaction. - - in: query - name: status - schema: - type: array - items: - type: string - example: - [ - created, - succeeded, - failed, - returned to trx-db, - returned to src, - re-entered, - ] - explode: false - description: Possible statuses of the transaction ('created', 'succeeded', 'failed', 'returned to trx-db', 'returned to src', 're-entered'). - - in: query - name: aggregationReference - schema: - type: string - example: FIKO-123456 - description: The aggregation reference of the transaction. %00 is searching for NULL-values. - - in: query - name: accountingSystemReference - schema: - type: string - example: U4F-123456 - description: The accounting system reference of the transaction. %00 is searching for NULL-values. - - in: query - name: sort - schema: - type: string - example: occurredOn - description: The field by which the transaction items in the result body are sorted. - - in: query - name: limit - schema: - type: integer - example: 15 - description: The limit of the transaction items in the result body. - - in: query - name: offset - schema: - type: integer - example: 15 - description: The offset of the transaction items in the result body. + enum: + - transactionItemRowId + - transactionItemId + - transactionType + - sourceName + - transactionId + - transactionLineId + - name + - quantity + - taxCode + - amountExclTax + - amountInclTax + - amountTax + - occurredOn + - type + - articleNumber + - status + - aggregationReference + - accountingSystemReference responses: "200": description: OK @@ -585,94 +503,63 @@ paths: tags: - Audit Trail v2.2 parameters: - - in: query - name: transactionAuditTrailId - schema: - type: string - format: uuid - example: 498e11fd-86c7-4e26-8ca9-c5ed9049da9e - description: The id of the audit trail. - - in: query - name: transactionItemId - schema: - type: string - format: uuid - example: 9834b346-d68c-438d-9bd5-6716422c2657 - description: The id of the transaction item. - - in: query - name: user - schema: - type: string - example: fiko - description: The user who created the audit trail. - - in: query - name: timestampBefore - schema: - type: string - example: 2022-01-01 00:00:00 - description: The timestamp before the event occured. - - in: query - name: timestampAfter - schema: - type: string - example: 2022-01-01 00:00:00 - description: The timestamp after the event occured. - - in: query - name: action + - $ref: "#/components/parameters/top" + - $ref: "#/components/parameters/skip" + - $ref: "#/components/parameters/filter" + - $ref: "#/components/parameters/count" + - name: $orderby + in: query + description: Order items by property values + required: false + style: form + explode: false schema: + uniqueItems: true type: array items: type: string - example: [create, update] + enum: + - transactionAuditTrailRowId + - transactionAuditTrailId + - transactionItemId + - user + - timestamp + - action + - status + - correlationId + - name: $select + in: query + description: Select properties to be returned + required: false + style: form explode: false - description: The action of the event. - - in: query - name: status schema: + uniqueItems: true type: array items: type: string - example: - [ - created, - succeeded, - failed, - returned to trx-db, - returned to src, - re-entered, - ] + enum: + - transactionAuditTrailRowId + - transactionAuditTrailId + - transactionItemId + - user + - timestamp + - action + - status + - correlationId + - name: $expand + in: query + description: Expand related entities + required: false + style: form explode: false - description: The status of the transaction item. - - in: query - name: description schema: - type: string - example: Transaction created. - description: The description of the event. - - in: query - name: correlationId - schema: - type: string - example: a3891560-3084-42cb-867c-f289e7cda47d - description: The correlation id of the event. - - in: query - name: sort - schema: - type: string - example: timestamp - description: The field by which the transaction audit trails in the result body are sorted. - - in: query - name: limit - schema: - type: integer - example: 15 - description: The limit of the transaction audit trails in the result body. - - in: query - name: offset - schema: - type: integer - example: 15 - description: The offset of the transaction audit trails in the result body. + uniqueItems: true + type: array + items: + type: string + enum: + - TransactionItem responses: "200": description: OK @@ -808,86 +695,67 @@ paths: tags: - Failures v2.2 parameters: - - in: query - name: processingFailureId + - $ref: "#/components/parameters/top" + - $ref: "#/components/parameters/skip" + - $ref: "#/components/parameters/filter" + - $ref: "#/components/parameters/count" + - name: $orderby + in: query + description: Order items by property values + required: false + style: form + explode: false schema: - type: string - format: uuid - example: 9834b346-d68c-438d-9bd5-6716422c2657 - description: The id of the processing failure. - - in: query - name: transactionItemId + uniqueItems: true + type: array + items: + type: string + enum: + - processingFailureRowId + - processingFailureId + - transactionItemId + - timestamp + - element + - value + - reasonCode + - reasonDescription + - resolved + - change + - name: $select + in: query + description: Select properties to be returned + required: false + style: form + explode: false schema: - type: string - format: uuid - example: 9834b346-d68c-438d-9bd5-6716422c2657 - description: The id of the transaction item. - - in: query - name: timestampBefore + uniqueItems: true + type: array + items: + type: string + enum: + - processingFailureRowId + - processingFailureId + - transactionItemId + - timestamp + - element + - value + - reasonCode + - reasonDescription + - resolved + - change + - name: $expand + in: query + description: Expand related entities + required: false + style: form + explode: false schema: - type: string - example: 2022-01-01 00:00:00 - description: The timestamp before the event occured. - - in: query - name: timestampAfter - schema: - type: string - example: 2022-01-01 00:00:00 - description: The timestamp after the event occured. - - in: query - name: element - schema: - type: string - example: contraAccount - description: The element on which the validation failed. - - in: query - name: value - schema: - type: string - example: 84955 - description: The value of th element on which the validation failed. - - in: query - name: reasonCode - schema: - type: string - example: "002" - description: The code of the validation failure reason. - - in: query - name: reasonDescription - schema: - type: string - example: Contra account does not exist. - description: The description of the validation failure reason. - - in: query - name: resolved - schema: - type: boolean - example: true - description: Whether the failure is resolved. - - in: query - name: change - schema: - type: string - example: Adapt config - description: Description of what was changed to resolve the failure. - - in: query - name: sort - schema: - type: string - example: timestamp - description: The field by which the processing failures in the result body are sorted. - - in: query - name: limit - schema: - type: integer - example: 15 - description: The limit of the processing failures in the result body. - - in: query - name: offset - schema: - type: integer - example: 15 - description: The offset of the processing failures in the result body. + uniqueItems: true + type: array + items: + type: string + enum: + - TransactionItem responses: "200": description: OK @@ -1023,52 +891,44 @@ paths: tags: - Booking Processes v2.2 parameters: - - in: query - name: bookingProcessId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the booking process. - - in: query - name: name - schema: - type: string - example: Verkooptransacties - description: The name of the booking process. - - in: query - name: transactionType + - $ref: "#/components/parameters/top" + - $ref: "#/components/parameters/skip" + - $ref: "#/components/parameters/filter" + - $ref: "#/components/parameters/count" + - name: $orderby + in: query + description: Order items by property values + required: false + style: form + explode: false schema: + uniqueItems: true type: array items: type: string - example: [sales, purchase] + enum: + - bookingProcessRowId + - bookingProcessId + - name + - transactionType + - identifyingFieldName + - name: $select + in: query + description: Select properties to be returned + required: false + style: form explode: false - description: The transaction type of the booking process. - - in: query - name: identifyingFieldName schema: - type: string - example: articleNumber - description: The identifying field name of the booking process. - - in: query - name: sort - schema: - type: string - example: name - description: The field by which the booking processes in the result body are sorted. - - in: query - name: limit - schema: - type: integer - example: 15 - description: The limit of the booking processes in the result body. - - in: query - name: offset - schema: - type: integer - example: 15 - description: The offset of the booking processes in the result body. + uniqueItems: true + type: array + items: + type: string + enum: + - bookingProcessRowId + - bookingProcessId + - name + - transactionType + - identifyingFieldName responses: "200": description: OK @@ -1222,92 +1082,73 @@ paths: tags: - Booking Processes v2.2 parameters: - - in: query - name: bookingMetadataId + - $ref: "#/components/parameters/top" + - $ref: "#/components/parameters/skip" + - $ref: "#/components/parameters/filter" + - $ref: "#/components/parameters/count" + - name: $orderby + in: query + description: Order items by property values + required: false + style: form + explode: false schema: - type: string - format: uuid - example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 - description: The id of the booking metadata. - - in: query - name: bookingProcessId + uniqueItems: true + type: array + items: + type: string + enum: + - bookingMetadataRowId + - bookingMetadataId + - bookingProcessId + - description + - department + - costType + - documentCode + - hasSeparateTaxLine + - hasLinePerIdentifyingField + - hasLinePerSource + - hasLinePerConcession + - validFrom + - validUntil + - name: $select + in: query + description: Select properties to be returned + required: false + style: form + explode: false schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the parent booking process. - - in: query - name: description + uniqueItems: true + type: array + items: + type: string + enum: + - bookingMetadataRowId + - bookingMetadataId + - bookingProcessId + - description + - department + - costType + - documentCode + - hasSeparateTaxLine + - hasLinePerIdentifyingField + - hasLinePerSource + - hasLinePerConcession + - validFrom + - validUntil + - name: $expand + in: query + description: Expand related entities + required: false + style: form + explode: false schema: - type: string - example: Dagkaart - description: The description of the booking. - - in: query - name: department - schema: - type: string - example: 900 - description: The department of the booking. - - in: query - name: costType - schema: - type: string - example: 84956 - description: The cost type of the booking. - - in: query - name: documentCode - schema: - type: string - example: FIKO-OPBR - description: The document code of the booking. - - in: query - name: hasSeparateTaxLine - schema: - type: boolean - example: true - description: Whether the booking has a separate tax line. - - in: query - name: hasLinePerIdentifyingField - schema: - type: boolean - example: true - description: Whether the booking has a line per identifying field. - - in: query - name: hasLinePerSource - schema: - type: boolean - example: true - description: Whether the booking has a line per source. - - in: query - name: hasLinePerConcession - schema: - type: boolean - example: true - description: Whether the booking has a line per concession. - - in: query - name: validAt - schema: - type: string - example: 2024-01-01T00:00:00.000 - description: Timestamp that the booking metadata is valid. - - in: query - name: sort - schema: - type: string - example: validFrom - description: The field by which the booking metadata in the result body are sorted. - - in: query - name: limit - schema: - type: integer - example: 15 - description: The limit of the booking metadata in the result body. - - in: query - name: offset - schema: - type: integer - example: 15 - description: The offset of the booking metadata in the result body. + uniqueItems: true + type: array + items: + type: string + enum: + - BookingProcess responses: "200": description: OK @@ -1505,44 +1346,55 @@ paths: tags: - Booking Processes v2.2 parameters: - - in: query - name: bookingGroupFieldId + - $ref: "#/components/parameters/top" + - $ref: "#/components/parameters/skip" + - $ref: "#/components/parameters/filter" + - $ref: "#/components/parameters/count" + - name: $orderby + in: query + description: Order items by property values + required: false + style: form + explode: false schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the booking group field. - - in: query - name: bookingMetadataId + uniqueItems: true + type: array + items: + type: string + enum: + - bookingGroupFieldRowId + - bookingGroupFieldId + - bookingMetadataId + - identifyingFieldValue + - name: $select + in: query + description: Select properties to be returned + required: false + style: form + explode: false schema: - type: string - format: uuid - example: 63d4a7e2-62c3-428b-a4bb-e4ee45516f2a - description: The id of the parent booking metadata. - - in: query - name: identifyingFieldValue + uniqueItems: true + type: array + items: + type: string + enum: + - bookingGroupFieldRowId + - bookingGroupFieldId + - bookingMetadataId + - identifyingFieldValue + - name: $expand + in: query + description: Expand related entities + required: false + style: form + explode: false schema: - type: string - example: 1737 - description: The identifying field value. - - in: query - name: sort - schema: - type: string - example: bookingMetadataId - description: The field by which the booking group fields in the result body are sorted. - - in: query - name: limit - schema: - type: integer - example: 15 - description: The limit of the booking group fields in the result body. - - in: query - name: offset - schema: - type: integer - example: 15 - description: The offset of the booking group fields in the result body. + uniqueItems: true + type: array + items: + type: string + enum: + - BookingMetadata responses: "200": description: OK @@ -1632,131 +1484,83 @@ paths: tags: - Booking Processes v2.2 parameters: - - in: query - name: bookingLineMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the booking line metadata. - - in: query - name: bookingMetadataId - schema: - type: string - format: uuid - example: 63d4a7e2-62c3-428b-a4bb-e4ee45516f2a - description: The id of the parent booking metadata. - - in: query - name: name - schema: - type: string - example: Dakaart - BUS - description: The name of the booking line metadata. - - in: query - name: sourceMetadataId - schema: - type: string - example: 9b371ab4-2c47-4aa5-bcf8-6642385278ac - description: The source of the booking line metadata. - - in: query - name: identifyingFieldValue - schema: - type: string - example: 1737 - description: The identifying field value. - - in: query - name: concessionId - schema: - type: array - items: - type: integer - example: [1, 2] + - $ref: "#/components/parameters/top" + - $ref: "#/components/parameters/skip" + - $ref: "#/components/parameters/filter" + - $ref: "#/components/parameters/count" + - name: $orderby + in: query + description: Order items by property values + required: false + style: form explode: false - description: The name of the concession. - - in: query - name: lineType schema: + uniqueItems: true type: array items: type: string - example: [summary, analysis, tax] + enum: + - bookingLineMetadataRowId + - bookingLineMetadataId + - bookingMetadataId + - name + - sourceMetadataId + - identifyingFieldValue + - concessionId + - lineType + - lineSense + - costCenter + - articleName + - extRef1 + - extRef2 + - extRef3 + - extRef4 + - extRef5 + - extRef6 + - name: $select + in: query + description: Select properties to be returned + required: false + style: form explode: false - description: The type of the line. - - in: query - name: lineSense schema: + uniqueItems: true type: array items: type: string - example: [debit, credit] + enum: + - bookingLineMetadataRowId + - bookingLineMetadataId + - bookingMetadataId + - name + - sourceMetadataId + - identifyingFieldValue + - concessionId + - lineType + - lineSense + - costCenter + - articleName + - extRef1 + - extRef2 + - extRef3 + - extRef4 + - extRef5 + - extRef6 + - name: $expand + in: query + description: Expand related entities + required: false + style: form explode: false - description: The sense of the line. - - in: query - name: costCenter schema: - type: string - example: 603031 - description: The cost center of the booking line metadata. - - in: query - name: artcleName - schema: - type: string - example: Dagkaart - description: The article name of the booking line metadata. - - in: query - name: extRef1 - schema: - type: string - example: extRef1 - description: External reference 1. - - in: query - name: extRef2 - schema: - type: string - example: extRef2 - description: External reference 2. - - in: query - name: extRef3 - schema: - type: string - example: extRef3 - description: External reference 3. - - in: query - name: extRef4 - schema: - type: string - example: extRef4 - description: External reference 4. - - in: query - name: extRef5 - schema: - type: string - example: extRef5 - description: External reference 5. - - in: query - name: extRef6 - schema: - type: string - example: extRef6 - description: External reference 6. - - in: query - name: sort - schema: - type: string - example: lineType - description: The field by which the booking line metadata in the result body are sorted. - - in: query - name: limit - schema: - type: integer - example: 15 - description: The limit of the booking line metadata in the result body. - - in: query - name: offset - schema: - type: integer - example: 15 - description: The offset of the booking line metadata in the result body. + uniqueItems: true + type: array + items: + type: string + enum: + - BookingMetadata + - SourceMetadata + - Concession responses: "200": description: OK @@ -2002,56 +1806,48 @@ paths: tags: - Metadata v2.2 parameters: - - in: query - name: taxMetadataId + - $ref: "#/components/parameters/top" + - $ref: "#/components/parameters/skip" + - $ref: "#/components/parameters/filter" + - $ref: "#/components/parameters/count" + - name: $orderby + in: query + description: Order items by property values + required: false + style: form + explode: false schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the tax metadata. - - in: query - name: taxCode + uniqueItems: true + type: array + items: + type: string + enum: + - taxMetadataRowId + - taxMetadataId + - taxCode + - taxPercentageAmount + - description + - validFrom + - validUntil + - name: $select + in: query + description: Select properties to be returned + required: false + style: form + explode: false schema: - type: string - example: V21 - description: The tax code. - - in: query - name: taxPercentageAmount - schema: - type: number - example: 21 - description: The tax percentage amount. - - in: query - name: description - schema: - type: string - example: BTW VERKOOP HOOG 21% - description: The description of the tax metadata. - - in: query - name: validAt - schema: - type: string - format: date-time - example: 2024-03-22T09:00:00 - description: Timestamp that the metadata is valid. - - in: query - name: sort - schema: - type: string - example: validFrom - description: The field by which the tax metadata in the result body are sorted. - - in: query - name: limit - schema: - type: integer - example: 15 - description: The limit of the tax metadata in the result body. - - in: query - name: offset - schema: - type: integer - example: 15 - description: The offset of the tax metadata in the result body. + uniqueItems: true + type: array + items: + type: string + enum: + - taxMetadataRowId + - taxMetadataId + - taxCode + - taxPercentageAmount + - description + - validFrom + - validUntil responses: "200": description: OK @@ -2183,70 +1979,50 @@ paths: tags: - Metadata v2.2 parameters: - - in: query - name: sourceMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the source metadata. - - in: query - name: incomingName - schema: - type: string - example: VerkoopEngine - description: The name of the source. - - in: query - name: incomingEntity - schema: - type: string - example: OrderLine - description: The entity of the source. - - in: query - name: outgoingName - schema: - type: string - example: Website Verkopen - description: The name of the destination. - - in: query - name: businessOwner - schema: - type: string - example: Koos Verweg - description: The business owner of the source. - - in: query - name: rejectionProcessing + - $ref: "#/components/parameters/top" + - $ref: "#/components/parameters/skip" + - $ref: "#/components/parameters/filter" + - $ref: "#/components/parameters/count" + - name: $orderby + in: query + description: Order items by property values + required: false + style: form + explode: false schema: + uniqueItems: true type: array items: type: string - example: [mail, system] + enum: + - sourceMetadataRowId + - sourceMetadataId + - incomingName + - incomingEntity + - outgoingName + - businessOwner + - rejectionProcessing + - rejectionInfo + - name: $select + in: query + description: Select properties to be returned + required: false + style: form explode: false - description: The rejection processing of the source. - - in: query - name: rejectionInfo schema: - type: string - example: api.htm.nl/v2/account/12345/msgs/abc - description: The rejection info of the source. - - in: query - name: sort - schema: - type: string - example: incomingName - description: The field by which the source metadata in the result body are sorted. - - in: query - name: limit - schema: - type: integer - example: 15 - description: The limit of the source metadata in the result body. - - in: query - name: offset - schema: - type: integer - example: 15 - description: The offset of the source metadata in the result body. + uniqueItems: true + type: array + items: + type: string + enum: + - sourceMetadataRowId + - sourceMetadataId + - incomingName + - incomingEntity + - outgoingName + - businessOwner + - rejectionProcessing + - rejectionInfo responses: "200": description: OK @@ -2364,43 +2140,42 @@ paths: tags: - Metadata v2.2 parameters: - - in: query - name: accountingPeriodMetadataId + - $ref: "#/components/parameters/top" + - $ref: "#/components/parameters/skip" + - $ref: "#/components/parameters/filter" + - $ref: "#/components/parameters/count" + - name: $orderby + in: query + description: Order items by property values + required: false + style: form + explode: false schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the accounting period metadata. - - in: query - name: accountingPeriod + uniqueItems: true + type: array + items: + type: string + enum: + - accountingPeriodMetadataRowId + - accountingPeriodMetadataId + - accountingPeriod + - isOpen + - name: $select + in: query + description: Select properties to be returned + required: false + style: form + explode: false schema: - type: string - example: 2024/01 - description: The accounting period. - - in: query - name: isOpen - schema: - type: boolean - example: true - description: Whether the accounting period is open. - - in: query - name: sort - schema: - type: string - example: accountingPeriod - description: The field by which the accounting period metadata in the result body are sorted. - - in: query - name: limit - schema: - type: integer - example: 15 - description: The limit of the accounting period metadata in the result body. - - in: query - name: offset - schema: - type: integer - example: 15 - description: The offset of the accounting period metadata in the result body. + uniqueItems: true + type: array + items: + type: string + enum: + - accountingPeriodMetadataRowId + - accountingPeriodMetadataId + - accountingPeriod + - isOpen responses: "200": description: OK @@ -2502,52 +2277,59 @@ paths: tags: - Metadata v2.2 parameters: - - in: query - name: concessionMetadataId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the concession metadata. - - in: query - name: concessionId + - $ref: "#/components/parameters/top" + - $ref: "#/components/parameters/skip" + - $ref: "#/components/parameters/filter" + - $ref: "#/components/parameters/count" + - name: $orderby + in: query + description: Order items by property values + required: false + style: form + explode: false schema: + uniqueItems: true type: array items: - type: integer - example: [1, 2] + type: string + enum: + - concessionMetadataRowId + - concessionMetadataId + - concessionId + - percentage + - validFrom + - validUntil + - name: $select + in: query + description: Select properties to be returned + required: false + style: form explode: false - description: The name of the concession. - - in: query - name: percentage schema: - type: number - example: 84.021 - description: The percentage of the concession. - - in: query - name: validAt + uniqueItems: true + type: array + items: + type: string + enum: + - concessionMetadataRowId + - concessionMetadataId + - concessionId + - percentage + - validFrom + - validUntil + - name: $expand + in: query + description: Expand related entities + required: false + style: form + explode: false schema: - type: string - example: 2024-01-01T00:00:00.000 - description: Timestamp that the metadata is valid. - - in: query - name: sort - schema: - type: string - example: validFrom - description: The field by which the concession metadata in the result body are sorted. - - in: query - name: limit - schema: - type: integer - example: 15 - description: The limit of the concession metadata in the result body. - - in: query - name: offset - schema: - type: integer - example: 15 - description: The offset of the concession metadata in the result body. + uniqueItems: true + type: array + items: + type: string + enum: + - Concession responses: "200": description: OK @@ -4514,3 +4296,42 @@ components: example: - "/account/12345" - "/account/67890" + parameters: + top: + name: $top + in: query + description: Show only the first n items + required: false + style: form + explode: true + schema: + minimum: 0 + type: integer + skip: + name: $skip + in: query + description: Skip the first n items + required: false + style: form + explode: true + schema: + minimum: 0 + type: integer + count: + name: $count + in: query + description: Include count of items + required: false + style: form + explode: true + schema: + type: boolean + filter: + name: $filter + in: query + description: Filter items by property values + required: false + style: form + explode: true + schema: + type: string -- 2.45.2 From c712184e9f89e8c1cfb5959170ad1be982db1592 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 5 Mar 2025 14:23:01 +0100 Subject: [PATCH 129/372] created correct example in the product list for touchpoint 4 (infoplaza) --- src/openapi/products/SE-products-TP.yaml | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/openapi/products/SE-products-TP.yaml b/src/openapi/products/SE-products-TP.yaml index 17305e4..75f8670 100644 --- a/src/openapi/products/SE-products-TP.yaml +++ b/src/openapi/products/SE-products-TP.yaml @@ -144,32 +144,37 @@ paths: } ] } - List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4): + List containing one product which can only be sold by touchpointId 4 (called by touchpointId 4): summary: List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4) description: Product is still returned (because touchpointId 3 is part of same retailer) but no price, as touchpointId 4 is not allowed to sell this product. value: { "Entries": [ { - "productId": 49, + "productId": 126, "productCode": null, - "productName": "HTM Regio Vrij", - "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", + "productName": "HTM-30001", + "productDescription": "Reis met 20% korting op je betaalpas bij HTM.", "productCategory": { - "productCategoryId": 3, + "productCategoryId": 1, "isTravelProduct": true, - "name": "Afgekocht reisrecht" + "name": "Kortingsabonnement" }, - "tokenTypes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], "sellableTouchpointIds": [ 4 ], - "amountInclTax": null, + "amountInclTax": 300, "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", "_links": { "get_details": { - "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/49", + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/126", "method": "GET" } } -- 2.45.2 From 5864d43b0fd87d34bfe29e8992bef08cabf3b9b3 Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 5 Mar 2025 14:31:39 +0100 Subject: [PATCH 130/372] added extra scenario --- src/openapi/products/SE-products-TP.yaml | 35 +++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/openapi/products/SE-products-TP.yaml b/src/openapi/products/SE-products-TP.yaml index 75f8670..90d3f76 100644 --- a/src/openapi/products/SE-products-TP.yaml +++ b/src/openapi/products/SE-products-TP.yaml @@ -144,9 +144,41 @@ paths: } ] } - List containing one product which can only be sold by touchpointId 4 (called by touchpointId 4): + List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4): summary: List containing one product which can only be sold by touchpointId 3 (called by touchpointId 4) description: Product is still returned (because touchpointId 3 is part of same retailer) but no price, as touchpointId 4 is not allowed to sell this product. + value: + { + "Entries": [ + { + "productId": 49, + "productCode": null, + "productName": "HTM Regio Vrij", + "productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in het gekozen gebied in de regio Rotterdam Den Haag.", + "productCategory": { + "productCategoryId": 3, + "isTravelProduct": true, + "name": "Afgekocht reisrecht" + }, + "tokenTypes": null, + "sellableTouchpointIds": [ + 3 + ], + "amountInclTax": null, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://api.integratielaag.nl/abt/touchpoint/2.0/products/49", + "method": "GET" + } + } + } + ] + } + List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4): + summary: List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4) + description: Product is returned value: { "Entries": [ @@ -167,6 +199,7 @@ paths: } ], "sellableTouchpointIds": [ + 3, 4 ], "amountInclTax": 300, -- 2.45.2 From 43ace0543c92ba6807ff603c2dd92abce319f9cb Mon Sep 17 00:00:00 2001 From: Mirjam Herald Date: Wed, 5 Mar 2025 14:35:40 +0100 Subject: [PATCH 131/372] small fix for consistency --- src/openapi/products/SE-products-TP.yaml | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/openapi/products/SE-products-TP.yaml b/src/openapi/products/SE-products-TP.yaml index 90d3f76..4605c22 100644 --- a/src/openapi/products/SE-products-TP.yaml +++ b/src/openapi/products/SE-products-TP.yaml @@ -556,6 +556,32 @@ paths: }, "forbiddenPaymentMethods": null, "sellingPrices": null + }, + { + "sellingPeriodId": 173, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23: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": null } ], "purchasePrices": null, -- 2.45.2 From 712564001cad2d012cba0f692bd42438eb7a3319 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Thu, 6 Mar 2025 08:05:09 +0100 Subject: [PATCH 132/372] Tweak examples to return empty arrays as [] instead of null --- src/openapi/products/SE-products-SE.yaml | 14 +++++++------- src/openapi/products/SE-products-TP.yaml | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/openapi/products/SE-products-SE.yaml b/src/openapi/products/SE-products-SE.yaml index b2b6944..c8cd23d 100644 --- a/src/openapi/products/SE-products-SE.yaml +++ b/src/openapi/products/SE-products-SE.yaml @@ -54,7 +54,7 @@ paths: summary: List containing one product with many null attributes description: |- Most product attributes are optional on a database level and can thus be null; this example shows that all attributes as defined in the schema are always represented in the response, even if null. \ - **Empty lists/arrays show up as null, not as "[]"!** + **Empty lists/arrays show up as "[]", not as null!** value: { "Entries": [ @@ -64,8 +64,8 @@ paths: "productName": null, "productDescription": null, "productCategory": null, - "tokenTypes": null, - "sellableTouchPointIds": null, + "tokenTypes": [], + "sellableTouchPointIds": [], "amountInclTax": null, "imageReference": null, "productPageUrl": null, @@ -94,7 +94,7 @@ paths: "isTravelProduct": false, "name": "Barcode" }, - "tokenTypes": null, + "tokenTypes": [], "sellableTouchPointIds": [ 1, 2 @@ -127,7 +127,7 @@ paths: "isTravelProduct": false, "name": "Barcode" }, - "tokenTypes": null, + "tokenTypes": [], "sellableTouchPointIds": [ 3, 4 @@ -160,7 +160,7 @@ paths: "isTravelProduct": true, "name": "Afgekocht reisrecht" }, - "tokenTypes": null, + "tokenTypes": [], "sellableTouchpointIds": [ 4 ], @@ -192,7 +192,7 @@ paths: "isTravelProduct": false, "name": "Barcode" }, - "tokenTypes": null, + "tokenTypes": [], "sellableTouchPointIds": [ 3, 4 diff --git a/src/openapi/products/SE-products-TP.yaml b/src/openapi/products/SE-products-TP.yaml index 17305e4..aa34da5 100644 --- a/src/openapi/products/SE-products-TP.yaml +++ b/src/openapi/products/SE-products-TP.yaml @@ -54,7 +54,7 @@ paths: summary: List containing one product with many null attributes description: |- Most product attributes are optional on a database level and can thus be null; this example shows that all attributes as defined in the schema are always represented in the response, even if null. \ - **Empty lists/arrays show up as null, not as "[]"!** + **Empty lists/arrays show up as "[]", not as null!** value: { "Entries": [ @@ -64,8 +64,8 @@ paths: "productName": null, "productDescription": null, "productCategory": null, - "tokenTypes": null, - "sellableTouchPointIds": null, + "tokenTypes": [], + "sellableTouchPointIds": [], "amountInclTax": null, "imageReference": null, "productPageUrl": null, @@ -94,7 +94,7 @@ paths: "isTravelProduct": false, "name": "Barcode" }, - "tokenTypes": null, + "tokenTypes": [], "sellableTouchPointIds": [ 1, 2 @@ -127,7 +127,7 @@ paths: "isTravelProduct": false, "name": "Barcode" }, - "tokenTypes": null, + "tokenTypes": [], "sellableTouchPointIds": [ 3, 4 @@ -160,7 +160,7 @@ paths: "isTravelProduct": true, "name": "Afgekocht reisrecht" }, - "tokenTypes": null, + "tokenTypes": [], "sellableTouchpointIds": [ 4 ], @@ -192,7 +192,7 @@ paths: "isTravelProduct": false, "name": "Barcode" }, - "tokenTypes": null, + "tokenTypes": [], "sellableTouchPointIds": [ 3, 4 -- 2.45.2 From 0860a7926735bc080f336eb7a4819eed21df9424 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Thu, 6 Mar 2025 09:58:30 +0100 Subject: [PATCH 133/372] Also persist changes in SE products yaml --- src/openapi/products/SE-products-SE.yaml | 66 +++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/src/openapi/products/SE-products-SE.yaml b/src/openapi/products/SE-products-SE.yaml index c8cd23d..5fcf625 100644 --- a/src/openapi/products/SE-products-SE.yaml +++ b/src/openapi/products/SE-products-SE.yaml @@ -162,7 +162,7 @@ paths: }, "tokenTypes": [], "sellableTouchpointIds": [ - 4 + 3 ], "amountInclTax": null, "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", @@ -176,6 +176,44 @@ paths: } ] } + List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4): + summary: List containing one product which can be sold by touchpointId 3 and 4 (called by touchpointId 4) + description: Product is returned + value: + { + "Entries": [ + { + "productId": 126, + "productCode": null, + "productName": "HTM-30001", + "productDescription": "Reis met 20% korting op je betaalpas bij HTM.", + "productCategory": { + "productCategoryId": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "sellableTouchpointIds": [ + 3, + 4 + ], + "amountInclTax": 300, + "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", + "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina", + "_links": { + "get_details": { + "href": "https://api.integratielaag.nl/abt/abtserviceengine/2.0/products/126", + "method": "GET" + } + } + } + ] + } List containing multiple products (called by touchpointId 3): summary: List containing multiple products (called by touchpointId 3) description: Only products that have active SellingPeriods for touchpoint 3 and/or 4 (part of same retailer) are returned @@ -518,6 +556,32 @@ paths: }, "forbiddenPaymentMethods": null, "sellingPrices": null + }, + { + "sellingPeriodId": 173, + "fromInclusive": "2025-01-19T23:00:00.000+00:00", + "toInclusive": "2028-11-17T23: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": null } ], "purchasePrices": null, -- 2.45.2 From dcfdbeec348ba9ae5c0921ea6eb89e88d5838843 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Thu, 6 Mar 2025 15:29:20 +0100 Subject: [PATCH 134/372] Remove TP3 sellingPeriod that is not allowed to be seen by TP4 from examples --- src/openapi/products/SE-products-SE.yaml | 26 ------------------------ src/openapi/products/SE-products-TP.yaml | 26 ------------------------ 2 files changed, 52 deletions(-) diff --git a/src/openapi/products/SE-products-SE.yaml b/src/openapi/products/SE-products-SE.yaml index 5fcf625..ec853ef 100644 --- a/src/openapi/products/SE-products-SE.yaml +++ b/src/openapi/products/SE-products-SE.yaml @@ -556,32 +556,6 @@ paths: }, "forbiddenPaymentMethods": null, "sellingPrices": null - }, - { - "sellingPeriodId": 173, - "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-17T23: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": null } ], "purchasePrices": null, diff --git a/src/openapi/products/SE-products-TP.yaml b/src/openapi/products/SE-products-TP.yaml index 91e2931..d4005a1 100644 --- a/src/openapi/products/SE-products-TP.yaml +++ b/src/openapi/products/SE-products-TP.yaml @@ -556,32 +556,6 @@ paths: }, "forbiddenPaymentMethods": null, "sellingPrices": null - }, - { - "sellingPeriodId": 173, - "fromInclusive": "2025-01-19T23:00:00.000+00:00", - "toInclusive": "2028-11-17T23: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": null } ], "purchasePrices": null, -- 2.45.2 From dc0435bb50ea6bc3299711a2b366ab8f59f5e628 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Tue, 11 Mar 2025 13:10:35 +0100 Subject: [PATCH 135/372] Change sellableTouchpointIds to lowercase P --- src/openapi/products/SE-products-SE.yaml | 12 ++++++------ src/openapi/products/SE-products-TP.yaml | 12 ++++++------ src/openapi/products/products-crud-v2.2.yaml | 20 ++++++++++---------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/openapi/products/SE-products-SE.yaml b/src/openapi/products/SE-products-SE.yaml index ec853ef..55f1f3f 100644 --- a/src/openapi/products/SE-products-SE.yaml +++ b/src/openapi/products/SE-products-SE.yaml @@ -65,7 +65,7 @@ paths: "productDescription": null, "productCategory": null, "tokenTypes": [], - "sellableTouchPointIds": [], + "sellableTouchpointIds": [], "amountInclTax": null, "imageReference": null, "productPageUrl": null, @@ -95,7 +95,7 @@ paths: "name": "Barcode" }, "tokenTypes": [], - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 1, 2 ], @@ -128,7 +128,7 @@ paths: "name": "Barcode" }, "tokenTypes": [], - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 3, 4 ], @@ -231,7 +231,7 @@ paths: "name": "Barcode" }, "tokenTypes": [], - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 3, 4 ], @@ -261,7 +261,7 @@ paths: "name": "EMV" } ], - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 3, 4 ], @@ -2133,7 +2133,7 @@ components: name: type: string example: EMV - sellableTouchPointIds: + sellableTouchpointIds: type: array items: type: integer diff --git a/src/openapi/products/SE-products-TP.yaml b/src/openapi/products/SE-products-TP.yaml index d4005a1..fe42ee4 100644 --- a/src/openapi/products/SE-products-TP.yaml +++ b/src/openapi/products/SE-products-TP.yaml @@ -65,7 +65,7 @@ paths: "productDescription": null, "productCategory": null, "tokenTypes": [], - "sellableTouchPointIds": [], + "sellableTouchpointIds": [], "amountInclTax": null, "imageReference": null, "productPageUrl": null, @@ -95,7 +95,7 @@ paths: "name": "Barcode" }, "tokenTypes": [], - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 1, 2 ], @@ -128,7 +128,7 @@ paths: "name": "Barcode" }, "tokenTypes": [], - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 3, 4 ], @@ -231,7 +231,7 @@ paths: "name": "Barcode" }, "tokenTypes": [], - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 3, 4 ], @@ -261,7 +261,7 @@ paths: "name": "EMV" } ], - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 3, 4 ], @@ -2133,7 +2133,7 @@ components: name: type: string example: EMV - sellableTouchPointIds: + sellableTouchpointIds: type: array items: type: integer diff --git a/src/openapi/products/products-crud-v2.2.yaml b/src/openapi/products/products-crud-v2.2.yaml index bea0651..dfdd8f1 100644 --- a/src/openapi/products/products-crud-v2.2.yaml +++ b/src/openapi/products/products-crud-v2.2.yaml @@ -74,7 +74,7 @@ paths: "name": "EMV" } ], - "sellableTouchPointIds": null, + "sellableTouchpointIds": null, "amountInclTax": null, "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina" @@ -98,7 +98,7 @@ paths: "name": "Barcode" }, "tokenTypes": null, - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 1, 2, 3, @@ -127,7 +127,7 @@ paths: "name": "Barcode" }, "tokenTypes": null, - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 3, 4 ], @@ -159,7 +159,7 @@ paths: "name": "EMV" } ], - "sellableTouchPointIds": null, + "sellableTouchpointIds": null, "amountInclTax": null, "imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg", "productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina" @@ -175,7 +175,7 @@ paths: "name": "Barcode" }, "tokenTypes": null, - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 1, 2, 3, @@ -201,7 +201,7 @@ paths: "name": "EMV" } ], - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 1, 2 ], @@ -225,7 +225,7 @@ paths: "name": "EMV" } ], - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 3, 4 ], @@ -252,7 +252,7 @@ paths: "name": "Barcode" }, "tokenTypes": null, - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 3, 4 ], @@ -276,7 +276,7 @@ paths: "name": "EMV" } ], - "sellableTouchPointIds": [ + "sellableTouchpointIds": [ 3, 4 ], @@ -2126,7 +2126,7 @@ components: name: type: string example: EMV - sellableTouchPointIds: + sellableTouchpointIds: type: array items: type: integer -- 2.45.2 From df4500b6437b52d012b9a435e8328fc9c818b4fc Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 12 Mar 2025 11:41:29 +0100 Subject: [PATCH 136/372] OVPAY-1637 - Add "ovPayTokenId" to GET response bodies. --- src/openapi/contracts/contracts-se.yaml | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/openapi/contracts/contracts-se.yaml b/src/openapi/contracts/contracts-se.yaml index 79454b4..8761d12 100644 --- a/src/openapi/contracts/contracts-se.yaml +++ b/src/openapi/contracts/contracts-se.yaml @@ -44,6 +44,7 @@ paths: "billingDay": 15, "highestInvoiceTerm": 1, "created": "2024-08-01 15:01:00.000", + "ovPayTokenId": 1337, }, { "contractId": "f07253e6-c364-474c-a342-a10a4a7cf305", @@ -59,6 +60,7 @@ paths: "billingDay": 15, "highestInvoiceTerm": 1, "created": "2024-08-01 15:01:00.000", + "ovPayTokenId": 1338, }, ] /customers/contracts/{contractId}: @@ -126,6 +128,7 @@ paths: "termDuration": "P0Y1M0D", "billingDay": 15, "highestInvoiceTerm": 1, + "ovPayTokenId": 1337, "contractVersions": [ { @@ -266,11 +269,11 @@ paths: $ref: "#/components/schemas/unavailable" example: { - "cancellationMoment": "termBound", + "cancellationMoment": "termBound", "termDuration": "P1M", "billingDay": 18, "cancellationFrom": "2024-08-10T00:00:00", - "cancellationUntil": "2026-08-10T00:00:00" + "cancellationUntil": "2026-08-10T00:00:00", } /contracts/{contractId}/cancellationvalidation: parameters: @@ -300,10 +303,7 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: - { - "end": "2024-08-10T00:00:00" - } + example: { "end": "2024-08-10T00:00:00" } responses: "200": description: OK @@ -317,7 +317,7 @@ paths: "validationMessage": "", "end": "2024-08-10T03:59:59", "refundAmount": "2489", - "refundMethods": [ "creditInvoice", "iDeal" ] + "refundMethods": ["creditInvoice", "iDeal"], } /contracts/{contractId}/cancellation: parameters: @@ -343,15 +343,12 @@ paths: - SE Contract Cancellation v2 requestBody: required: true - content: + content: application/json: schema: $ref: "#/components/schemas/unavailable" example: - { - "end": "2024-08-10T00:00:00", - "refundMethod": "creditInvoice" - } + { "end": "2024-08-10T00:00:00", "refundMethod": "creditInvoice" } responses: "200": description: OK @@ -363,7 +360,7 @@ paths: { "end": "2024-08-10T03:59:59", "refundAmount": "2489", - "refundMethod": "creditInvoice" + "refundMethod": "creditInvoice", } components: securitySchemes: -- 2.45.2 From bd67e51713bd4ff214b4f71b96bd32a0652b74de Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 12 Mar 2025 16:29:46 +0100 Subject: [PATCH 137/372] OVPAY-1637 - Moved "ovPayTokenId" to HATEOAS links. --- src/openapi/contracts/contracts-se.yaml | 29 +++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/openapi/contracts/contracts-se.yaml b/src/openapi/contracts/contracts-se.yaml index 8761d12..1e6b668 100644 --- a/src/openapi/contracts/contracts-se.yaml +++ b/src/openapi/contracts/contracts-se.yaml @@ -4,7 +4,7 @@ info: version: "1.0" description: Service Engine APIs for ABT Contracts v2. These are NOT the CRUD APIs to the data hub. servers: - - url: https://api.integratielaag.nl/v1 + - url: https://api.integratielaag.nl/abt/touchpoint/1.0 paths: /customers/contracts: parameters: @@ -44,7 +44,14 @@ paths: "billingDay": 15, "highestInvoiceTerm": 1, "created": "2024-08-01 15:01:00.000", - "ovPayTokenId": 1337, + "_links": + { + "get_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1337", + "method": "GET", + }, + }, }, { "contractId": "f07253e6-c364-474c-a342-a10a4a7cf305", @@ -60,7 +67,14 @@ paths: "billingDay": 15, "highestInvoiceTerm": 1, "created": "2024-08-01 15:01:00.000", - "ovPayTokenId": 1338, + "_links": + { + "get_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1338", + "method": "GET", + }, + }, }, ] /customers/contracts/{contractId}: @@ -128,7 +142,6 @@ paths: "termDuration": "P0Y1M0D", "billingDay": 15, "highestInvoiceTerm": 1, - "ovPayTokenId": 1337, "contractVersions": [ { @@ -183,6 +196,14 @@ paths: "isCredit": false, }, ], + "_links": + { + "get_token": + { + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1337", + "method": "GET", + }, + }, } /customers/contracts/{contractId}/invoices: parameters: -- 2.45.2 From d9bfbe4c3dc0f7a66aca8d1668e8b1b5a3e16a42 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Wed, 12 Mar 2025 16:39:51 +0100 Subject: [PATCH 138/372] OVPAY-1637 - "ovPayTokenId" is a query param, not a path param. --- src/openapi/contracts/contracts-se.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/openapi/contracts/contracts-se.yaml b/src/openapi/contracts/contracts-se.yaml index 1e6b668..9eada74 100644 --- a/src/openapi/contracts/contracts-se.yaml +++ b/src/openapi/contracts/contracts-se.yaml @@ -48,7 +48,7 @@ paths: { "get_token": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1337", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/tokens?ovPayTokenId=1337", "method": "GET", }, }, @@ -71,7 +71,7 @@ paths: { "get_token": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1338", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/tokens?ovPayTokenId=1338", "method": "GET", }, }, @@ -200,7 +200,7 @@ paths: { "get_token": { - "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens/1337", + "href": "https://api.integratielaag.nl/abt/touchpoint/1.0/tokens?ovPayTokenId=1337", "method": "GET", }, }, -- 2.45.2 From 387bf909ad1b3aa9c61e780b1e7d4d921f3e3552 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Fri, 14 Mar 2025 09:30:01 +0100 Subject: [PATCH 139/372] OVPAY-1564 - Typo in examples. --- src/openapi/orders/service_engine_orders.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 1c36967..214836a 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -3406,7 +3406,7 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: + examples: v2.0: summary: Order customer address create v1.2 description: Order customer address create v1.2 @@ -3564,7 +3564,7 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - example: + examples: v2.0: summary: Order customer address create v1.2 description: Order customer address create v1.2 -- 2.45.2 From 383ea04bcc16073c36a2179515a33921e60a7cf1 Mon Sep 17 00:00:00 2001 From: "b.boterman@htm.nl" Date: Fri, 14 Mar 2025 18:01:05 +0100 Subject: [PATCH 140/372] OVPAY-1564 - Changes in POST /orders. --- src/openapi/orders/service_engine_orders.yaml | 951 ++++++++---------- 1 file changed, 428 insertions(+), 523 deletions(-) diff --git a/src/openapi/orders/service_engine_orders.yaml b/src/openapi/orders/service_engine_orders.yaml index 214836a..4565ca9 100644 --- a/src/openapi/orders/service_engine_orders.yaml +++ b/src/openapi/orders/service_engine_orders.yaml @@ -124,7 +124,7 @@ paths: "startDate": "2024-03-22T09:00:00z", "quantity": 4, }, - ] + ] responses: "200": description: OK @@ -685,32 +685,33 @@ paths: ], }, } - "400": + "400": description: Bad request content: application/json: schema: $ref: "#/components/schemas/unavailable" example: - { - "type": "https://htm.nl/api/v1/probs/validationerror", - "title": "Your request is not valid.", + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.", "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", - "errors": [ - { - "detail": "Startdate of this product should be at most 60 days in the future.", - "pointer": "#/0/startDate", - "ovPayTokenId": 123, - "productId": 2 - }, - { - "detail": "Combination of product and token type is not valid.", - "pointer": "#/1/ovPayTokenId", - "ovPayTokenId": 123, - "productId": 3 - } - ] + "errors": + [ + { + "detail": "Startdate of this product should be at most 60 days in the future.", + "pointer": "#/0/startDate", + "ovPayTokenId": 123, + "productId": 2, + }, + { + "detail": "Combination of product and token type is not valid.", + "pointer": "#/1/ovPayTokenId", + "ovPayTokenId": 123, + "productId": 3, + }, + ], } /customers/{customerProfileId}/orders: parameters: @@ -882,7 +883,7 @@ paths: schema: $ref: "#/components/schemas/unavailable" example: - { + { "orders": [ { @@ -973,7 +974,7 @@ paths: post: tags: - Order Creation v2.0 - summary: Create a new order v2.0. + summary: Create a new order v2.0. description: Create a new order v2.0. requestBody: content: @@ -990,7 +991,6 @@ paths: "languageId": 1, "billingAddressId": 1, "shippingAddressId": 1, - "orderStatusId": 1, "orderLines": [ { @@ -1000,78 +1000,8 @@ paths: "validFrom": "2024-03-22T09:00:00", "validUntil": null, "orderLineStatusId": 1, - "customerTokens": - [ - { - "tokenTypeId": 1, - "ovPayTokenId": 1, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 34, - "ovpasNumber": "OV34567", - "verificationCode": "A7H6", - "personalAccountData": - { - "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", - "photoReference": "DSC_0502.JPG", - "fileType": "image/jpg", - "challengeTypeId": 1, - "oneTimePassword": "H5Iiz3JTaQeIV8p", - } - } - ] - } - ], - "payments": - [ - { - "createdOn": "2024-03-22T09:00:00", - "amountDebit": 121, - "paymentMethodId": 1, - "isRefund": false, - "htmPaymentReference": "HTM-1234", - "pspPaymentReference": "Buckaroo-1234", - "paymentStatuses": - [ - { - "createdOn": "2024-03-22T09:00:00", - "statusCode": "190", - "statusDescription": "Success", - "statusSubCode": "S001", - "statusSubDescription": "PaymentSuccessFul", - }, - ], - "mandateInput": - { - "directDebitMandateTypeId": 1, - "createdOn": "2024-03-22T09:00:00", - "bic": "RABONL2U", - "iban": "NL44RABO0123456789", - "ascription": "J. de Vries", - "place": "Den Haag", - }, }, ], - "orderCustomer": - { - "birthname": "Jan", - "surname": "Vries", - "prefix": "de", - "emailAddress": "jandevries@outlook.com", - "dateOfBirth": "1970-01-01", - "orderCustomerAddresses": - [ - { - "addressTypeId": 1, - "street": "Kon. Julianaplein", - "houseNumber": 10, - "houseNumberSuffix": "a", - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "NL", - } - ] - } } v1.2: summary: Order creation v1.2 @@ -1319,137 +1249,78 @@ paths: $ref: "#/components/schemas/unavailable" examples: v2.0: - value: + value: { - "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", - "externalOrderId": null, - "orderNumber": "ORD-123456", - "customerProfileId": 1337, - "totalAmount": 121, - "language": - { - "languageId": 1, - "name": "Nederlands", - "iso639Code": "nl-NL", - "ietfCode": "nl", - }, - "billingAddressId": 1, - "shippingAddressId": 1, - "touchPoint": - { - "salesTouchpointId": 3, - "name": "Website (Perplex)", - "isActive": true, - "retailerId": 1001, - }, - "createdOn": "2024-03-22T09:00:00", - "lastUpdatedOn": "2024-03-22T09:00:00", - "order_OrderStatus": - [ - { - "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", - "orderStatus": { "orderStatusId": 1, "name": "concept" }, - "createdOn": "2024-03-22T09:00:00", - "description": "Order is aangemaakt", - } - ], - "orderLines": - [ - { - "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468", - "externalOrderLineId": null, - "productId": 1, - "productName": "HTM Maandkorting 20%", - "productCode": "HTM-MND-20", - "productDescription": "HTM Maandkorting 20%", - "taxAmount": 21, - "taxCode": "V21", - "amountExclTax": 100, - "amountInclTax": 121, - "quantity": 1, - "terms": - [ - "generalTermsAndConditions.pdf", - "productTermsAndConditions.pdf", - ], - "createdOn": "2024-03-22T09:00:00", - "validFrom": "2024-03-22T09:00:00", - "validUntil": null, - "orderLineStatus": - { "orderLineStatusId": 1, "name": "pending" }, - "tokens": - [ - { - "tokenTypeId": 1, - "ovPayTokenId": 1, - "serviceReferenceId": "NLOV1234567ABCDEFG", - "amount": 34, - "ovpasNumber": "OV34567", - "verificationCode": "A7H6", - "personalAccountData": - { - "name": "Jan de Vries", - "dateOfBirth": "01-01-1970", - "photoReference": "DSC_0502.JPG", - "fileType": "image/jpg", - "challengeTypeId": 1, - "oneTimePassword": "H5Iiz3JTaQeIV8p", - } - }, - ], - "additionalRemarks" : [] - }, - ], - "payments": - [ - { - "createdOn": "2024-03-22T09:00:00", - "amountDebit": 121, - "paymentMethodId": 1, - "touchPointId": 1, - "isRefund": false, - "htmPaymentReference": "HTM-1234", - "pspPaymentReference": "Buckaroo-1234", - "paymentStatuses": - [ - { - "createdOn": "2024-03-22T09:00:00", - "statusCode": "190", - "statusDescription": "Success", - "statusSubCode": "S001", - "statusSubDescription": "PaymentSuccessFul", - }, - ], - "payPush": - { - "consumerIssuer": "ABN AMRO", - "transactionId": "0000000000000001", - "consumerName": "J. de Vries", - "consumerIBAN": "NL44RABO0123456789", - "consumerBIC": "RABONL2U", - }, - }, - ], - "customer": + "order": { - "birthname": "Jan", - "surname": "Vries", - "prefix": "de", - "emailAddress": "jandevries@outlook.com", - "dateOfBirth": "1970-01-01", - "addresses": + "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", + "externalOrderId": null, + "orderNumber": "ORD-123456", + "customerProfileId": 1337, + "totalAmount": 121, + "language": + { + "languageId": 1, + "name": "Nederlands", + "iso639Code": "nl-NL", + "ietfCode": "nl", + }, + "billingAddressId": 1, + "shippingAddressId": 1, + "touchPoint": + { + "salesTouchpointId": 3, + "name": "Website (Perplex)", + "isActive": true, + "retailerId": 1001, + }, + "createdOn": "2024-03-22T09:00:00", + "lastUpdatedOn": "2024-03-22T09:00:00", + "order_OrderStatus": [ { - "addressTypeId": 1, - "street": "Kon. Julianaplein", - "houseNumber": 10, - "houseNumberSuffix": "a", - "postalCode": "2595 AA", - "city": "Den Haag", - "country": "NL", - } - ] - } + "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", + "orderStatus": + { "orderStatusId": 1, "name": "concept" }, + "createdOn": "2024-03-22T09:00:00", + "description": "Order is aangemaakt", + }, + ], + "orderLines": + [ + { + "orderLineId": "cccada2c-d5ea-48ab-b4be-f590e16b5468", + "externalOrderLineId": null, + "productId": 1, + "productName": "HTM Maandkorting 20%", + "productCode": "HTM-MND-20", + "productDescription": "HTM Maandkorting 20%", + "taxAmount": 21, + "taxCode": "V21", + "amountExclTax": 100, + "amountInclTax": 121, + "quantity": 1, + "terms": + [ + "generalTermsAndConditions.pdf", + "productTermsAndConditions.pdf", + ], + "createdOn": "2024-03-22T09:00:00", + "validFrom": "2024-03-22T09:00:00", + "validUntil": null, + "orderLineStatus": + { "orderLineStatusId": 1, "name": "pending" }, + }, + ], + }, + "orderValidation": + { + "validationResult": true, + "additionalRemarks": + [{ "code": "string", "parameter": "string" }], + "validationErrors": + [{ "detail": "string", "pointer": "string" }], + }, } v1.2: value: @@ -1457,32 +1328,33 @@ paths: "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", "orderNumber": "ORD-123456", } - "400": + "400": description: Bad request content: application/json: schema: $ref: "#/components/schemas/unavailable" example: - { - "type": "https://htm.nl/api/v1/probs/validationerror", - "title": "Your request is not valid.", + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.", "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", - "errors": [ - { - "detail": "Startdate of this product should be at most 60 days in the future.", - "pointer": "#/0/startDate", - "ovPayTokenId": 123, - "productId": 2 - }, - { - "detail": "Combination of product and token type is not valid.", - "pointer": "#/1/ovPayTokenId", - "ovPayTokenId": 123, - "productId": 3 - } - ] + "errors": + [ + { + "detail": "Startdate of this product should be at most 60 days in the future.", + "pointer": "#/0/startDate", + "ovPayTokenId": 123, + "productId": 2, + }, + { + "detail": "Combination of product and token type is not valid.", + "pointer": "#/1/ovPayTokenId", + "ovPayTokenId": 123, + "productId": 3, + }, + ], } /orders/{orderId}: parameters: @@ -1704,23 +1576,25 @@ paths: v2.0: summary: Order update v2.0 description: Order update v2.0 - value: { - "languageId": 1, - "billingAddressId": 2, - "shippingAddressId": 1, - "lastUpdatedOn": "2024-03-22T09:00:00", - } + value: + { + "languageId": 1, + "billingAddressId": 2, + "shippingAddressId": 1, + "lastUpdatedOn": "2024-03-22T09:00:00", + } v1.2: summary: Order update v1.2 description: Order update v1.2 - value: { - "customerProfileId": 1337, - "totalAmount": 121, - "languageId": 1, - "billingAddressId": 1, - "shippingAddressId": 1, - "lastUpdatedOn": "2024-03-22T09:00:00", - } + value: + { + "customerProfileId": 1337, + "totalAmount": 121, + "languageId": 1, + "billingAddressId": 1, + "shippingAddressId": 1, + "lastUpdatedOn": "2024-03-22T09:00:00", + } responses: "200": description: OK @@ -1730,19 +1604,20 @@ paths: $ref: "#/components/schemas/unavailable" examples: v2.0: - value: + value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", "externalOrderId": null, "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "language": { + "language": + { "languageId": 1, "name": "Nederlands", "iso639Code": "nl-NL", - "ietfCode": "nl" - }, + "ietfCode": "nl", + }, "billingAddressId": 1, "shippingAddressId": 1, "touchPoint": @@ -1758,10 +1633,11 @@ paths: [ { "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", - "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "orderStatus": + { "orderStatusId": 1, "name": "concept" }, "createdOn": "2024-03-22T09:00:00", "description": "Order is aangemaakt", - } + }, ], "orderLines": [ @@ -1806,14 +1682,14 @@ paths: "oneTimePassword": "H5Iiz3JTaQeIV8p", }, }, - ], - "additionalRemarks" : + ], + "additionalRemarks": [ - { + { "code": "MANDATE_REQUIRED", - "parameter": "directDebitMandateId" - } - ] + "parameter": "directDebitMandateId", + }, + ], }, ], "payments": @@ -1863,9 +1739,9 @@ paths: "postalCode": "2595 AA", "city": "Den Haag", "country": "NL", - } - ] - } + }, + ], + }, } v1.2: value: @@ -1873,32 +1749,33 @@ paths: "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", "orderNumber": "ORD-123456", } - "400": + "400": description: Bad request content: application/json: schema: $ref: "#/components/schemas/unavailable" example: - { - "type": "https://htm.nl/api/v1/probs/validationerror", - "title": "Your request is not valid.", + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.", "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", - "errors": [ - { - "detail": "Startdate of this product should be at most 60 days in the future.", - "pointer": "#/0/startDate", - "ovPayTokenId": 123, - "productId": 2 - }, - { - "detail": "Combination of product and token type is not valid.", - "pointer": "#/1/ovPayTokenId", - "ovPayTokenId": 123, - "productId": 3 - } - ] + "errors": + [ + { + "detail": "Startdate of this product should be at most 60 days in the future.", + "pointer": "#/0/startDate", + "ovPayTokenId": 123, + "productId": 2, + }, + { + "detail": "Combination of product and token type is not valid.", + "pointer": "#/1/ovPayTokenId", + "ovPayTokenId": 123, + "productId": 3, + }, + ], } delete: tags: @@ -1908,25 +1785,26 @@ paths: responses: "200": description: OK - "400": + "400": description: Bad request content: application/json: schema: $ref: "#/components/schemas/unavailable" example: - { - "type": "https://htm.nl/api/v1/probs/validationerror", - "title": "Your request is not valid.", + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", "detail": "The order can not be deleted.", "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", - "errors": [ - { - "detail": "Order status is paid", - "pointer": "#/order_OrderStatus/1/orderStatus/orderStatusId", - "orderStatusId": 4 - } - ] + "errors": + [ + { + "detail": "Order status is paid", + "pointer": "#/order_OrderStatus/1/orderStatus/orderStatusId", + "orderStatusId": 4, + }, + ], } /orders/{orderId}/orderlines: parameters: @@ -1958,11 +1836,11 @@ paths: examples: v2.0: summary: Create orderLine v2.0 - description: Create orderLine v2.0 + description: Create orderLine v2.0 value: { "externalOrderLineId": null, - "productId": 2, + "productId": 2, "quantity": 1, "validFrom": "2024-03-22T09:00:00", "validUntil": null, @@ -1974,16 +1852,16 @@ paths: "tokenTypeId": 1, "ovPayTokenId": 4, "serviceReferenceId": null, - "amount": null , - "ovpasNumber": null , - "verificationCode": null , - "personalAccountData": null + "amount": null, + "ovpasNumber": null, + "verificationCode": null, + "personalAccountData": null, }, - ] + ], } v1.2: summary: Create orderLine v1.2 - description: Create orderLine v1.2 + description: Create orderLine v1.2 value: { "externalOrderLineId": null, @@ -2040,19 +1918,20 @@ paths: $ref: "#/components/schemas/unavailable" examples: v2.0: - value: + value: { "orderId": "1e441d7d-50d6-4006-aca7-5e87e2f218df", "externalOrderId": null, "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "language": { + "language": + { "languageId": 1, "name": "Nederlands", "iso639Code": "nl-NL", - "ietfCode": "nl" - }, + "ietfCode": "nl", + }, "billingAddressId": 1, "shippingAddressId": 1, "touchPoint": @@ -2068,10 +1947,11 @@ paths: [ { "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", - "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "orderStatus": + { "orderStatusId": 1, "name": "concept" }, "createdOn": "2024-03-22T09:00:00", "description": "Order is aangemaakt", - } + }, ], "orderLines": [ @@ -2116,15 +1996,15 @@ paths: "oneTimePassword": "H5Iiz3JTaQeIV8p", }, }, - ], - "additionalRemarks" : + ], + "additionalRemarks": [ - { + { "code": "MANDATE_REQUIRED", - "parameter": "directDebitMandateId" - } - ] - }, + "parameter": "directDebitMandateId", + }, + ], + }, { "orderLineId": "2cb04b38-e9a8-465a-a273-261c55a21b71", "externalOrderLineId": null, @@ -2153,14 +2033,14 @@ paths: "tokenTypeId": 1, "ovPayTokenId": 4, "serviceReferenceId": null, - "amount": null , - "ovpasNumber": null , - "verificationCode": null , - "personalAccountData": null - } - ], - "additionalRemarks" : [] - } + "amount": null, + "ovpasNumber": null, + "verificationCode": null, + "personalAccountData": null, + }, + ], + "additionalRemarks": [], + }, ], "payments": [ @@ -2209,38 +2089,40 @@ paths: "postalCode": "2595 AA", "city": "Den Haag", "country": "NL", - } - ] - } + }, + ], + }, } v1.2: - value: { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" } - "400": + value: + { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" } + "400": description: Bad request content: application/json: schema: $ref: "#/components/schemas/unavailable" example: - { - "type": "https://htm.nl/api/v1/probs/validationerror", - "title": "Your request is not valid.", + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.", "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", - "errors": [ - { - "detail": "Startdate of this product should be at most 60 days in the future.", - "pointer": "#/0/startDate", - "ovPayTokenId": 123, - "productId": 2 - }, - { - "detail": "Combination of product and token type is not valid.", - "pointer": "#/1/ovPayTokenId", - "ovPayTokenId": 123, - "productId": 3 - } - ] + "errors": + [ + { + "detail": "Startdate of this product should be at most 60 days in the future.", + "pointer": "#/0/startDate", + "ovPayTokenId": 123, + "productId": 2, + }, + { + "detail": "Combination of product and token type is not valid.", + "pointer": "#/1/ovPayTokenId", + "ovPayTokenId": 123, + "productId": 3, + }, + ], } /orderlines/{orderLineId}: parameters: @@ -2272,16 +2154,16 @@ paths: examples: v2.0: summary: Orderline update v2.0 - description: Orderline update v2.0 + description: Orderline update v2.0 value: - { + { "quantity": 1, "validFrom": "2024-03-25T09:00:00", - "validUntil": null + "validUntil": null, } v1.2: - summary: Orderline updatev1.2 - description: Orderline update v1.2 + summary: Orderline updatev1.2 + description: Orderline update v1.2 value: { "taxAmount": 21, @@ -2300,7 +2182,7 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" - examples: + examples: v2.0: value: { @@ -2309,12 +2191,13 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "language": { + "language": + { "languageId": 1, "name": "Nederlands", "iso639Code": "nl-NL", - "ietfCode": "nl" - }, + "ietfCode": "nl", + }, "billingAddressId": 1, "shippingAddressId": 1, "touchPoint": @@ -2330,10 +2213,11 @@ paths: [ { "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", - "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "orderStatus": + { "orderStatusId": 1, "name": "concept" }, "createdOn": "2024-03-22T09:00:00", "description": "Order is aangemaakt", - } + }, ], "orderLines": [ @@ -2376,16 +2260,16 @@ paths: "fileType": "image/jpg", "challengeTypeId": 1, "oneTimePassword": "H5Iiz3JTaQeIV8p", - } - } - ], - "additionalRemarks" : + }, + }, + ], + "additionalRemarks": [ - { + { "code": "MANDATE_REQUIRED", - "parameter": "directDebitMandateId" - } - ] + "parameter": "directDebitMandateId", + }, + ], }, ], "payments": @@ -2435,33 +2319,34 @@ paths: "postalCode": "2595 AA", "city": "Den Haag", "country": "NL", - } - ] - } + }, + ], + }, } v1.2: value: { "orderLineId": "e78b78d9-4fb0-4a9c-8dc0-6d100c9f1b3f" } - "400": + "400": description: Bad request content: application/json: schema: $ref: "#/components/schemas/unavailable" example: - { - "type": "https://htm.nl/api/v1/probs/validationerror", - "title": "Your request is not valid.", + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", "detail": "The start date of the product is not allowed. See errors for more details.", "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", - "errors": [ - { - "detail": "Startdate of this product should be at most 60 days in the future.", - "pointer": "#/0/startDate", - "ovPayTokenId": 123, - "productId": 2 - } - ] + "errors": + [ + { + "detail": "Startdate of this product should be at most 60 days in the future.", + "pointer": "#/0/startDate", + "ovPayTokenId": 123, + "productId": 2, + }, + ], } delete: tags: @@ -2484,12 +2369,13 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 0, - "language": { + "language": + { "languageId": 1, "name": "Nederlands", "iso639Code": "nl-NL", - "ietfCode": "nl" - }, + "ietfCode": "nl", + }, "billingAddressId": 1, "shippingAddressId": 1, "touchPoint": @@ -2505,10 +2391,11 @@ paths: [ { "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", - "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "orderStatus": + { "orderStatusId": 1, "name": "concept" }, "createdOn": "2024-03-22T09:00:00", "description": "Order is aangemaakt", - } + }, ], "orderLines": null, "payments": null, @@ -2529,30 +2416,31 @@ paths: "postalCode": "2595 AA", "city": "Den Haag", "country": "NL", - } - ] - } + }, + ], + }, } - "400": + "400": description: Bad request content: application/json: schema: $ref: "#/components/schemas/unavailable" example: - { - "type": "https://htm.nl/api/v1/probs/validationerror", - "title": "Your request is not valid.", + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.", "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", - "errors": [ - { - "detail": "Product requires product with productId=2", - "pointer": "#/1/orderLine", - "orderLineId": "0574440e-7fa0-401f-b907-539c91633a5d", - "productId": 3 - } - ] + "errors": + [ + { + "detail": "Product requires product with productId=2", + "pointer": "#/1/orderLine", + "orderLineId": "0574440e-7fa0-401f-b907-539c91633a5d", + "productId": 3, + }, + ], } /orders/{orderId}/payments: parameters: @@ -2582,9 +2470,9 @@ paths: schema: $ref: "#/components/schemas/unavailable" examples: - v2.0: + v2.0: summary: Order creation v2.0 - description: Order creation v2.0 + description: Order creation v2.0 value: { "createdOn": "2024-03-22T09:00:00", @@ -2613,9 +2501,9 @@ paths: "place": "Den Haag", }, } - v1.2: + v1.2: summary: Order creation v1.2 - description: Order creation v1.2 + description: Order creation v1.2 value: { "createdOn": "2024-03-22T09:00:00", @@ -2661,12 +2549,13 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "language": { + "language": + { "languageId": 1, "name": "Nederlands", "iso639Code": "nl-NL", - "ietfCode": "nl" - }, + "ietfCode": "nl", + }, "billingAddressId": 1, "shippingAddressId": 1, "touchPoint": @@ -2682,10 +2571,11 @@ paths: [ { "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", - "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "orderStatus": + { "orderStatusId": 1, "name": "concept" }, "createdOn": "2024-03-22T09:00:00", "description": "Order is aangemaakt", - } + }, ], "orderLines": [ @@ -2731,7 +2621,7 @@ paths: }, }, ], - }, + }, { "orderLineId": "2cb04b38-e9a8-465a-a273-261c55a21b71", "externalOrderLineId": null, @@ -2760,14 +2650,14 @@ paths: "tokenTypeId": 1, "ovPayTokenId": 4, "serviceReferenceId": null, - "amount": null , - "ovpasNumber": null , - "verificationCode": null , - "personalAccountData": null - } - ] - } - ], + "amount": null, + "ovpasNumber": null, + "verificationCode": null, + "personalAccountData": null, + }, + ], + }, + ], "payments": [ { @@ -2815,13 +2705,12 @@ paths: "postalCode": "2595 AA", "city": "Den Haag", "country": "NL", - } - ] - } + }, + ], + }, } v1.2: - value: - { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" } + value: { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" } /payments/{paymentId}: parameters: - in: path @@ -2852,7 +2741,7 @@ paths: examples: v2.0: summary: Order payment update v2.0 - description: Order payment update v2.0 + description: Order payment update v2.0 value: { "htmPaymentReference": "HTM-1234", @@ -2875,11 +2764,11 @@ paths: "iban": "NL44RABO0123456789", "ascription": "J. de Vries", "place": "Den Haag", - } + }, } v1.2: summary: Order payment update v1.2 - description: Order payment update v1.2 + description: Order payment update v1.2 value: { "htmPaymentReference": "HTM-1234", @@ -2901,12 +2790,13 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "language": { + "language": + { "languageId": 1, "name": "Nederlands", "iso639Code": "nl-NL", - "ietfCode": "nl" - }, + "ietfCode": "nl", + }, "billingAddressId": 1, "shippingAddressId": 1, "touchpointId": 3, @@ -2916,10 +2806,11 @@ paths: [ { "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", - "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "orderStatus": + { "orderStatusId": 1, "name": "concept" }, "createdOn": "2024-03-22T09:00:00", "description": "Order is aangemaakt", - } + }, ], "orderLines": [ @@ -2965,8 +2856,8 @@ paths: }, }, ], - } - ], + }, + ], "payments": [ { @@ -3021,13 +2912,12 @@ paths: "postalCode": "2595 AA", "city": "Den Haag", "country": "NL", - } - ] - } + }, + ], + }, } v1.2: - value: - { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" } + value: { "paymentId": "94270188-4cf6-447e-bd49-e8186bcec073" } /orders/{orderId}/ordercustomers: parameters: - in: path @@ -3058,7 +2948,7 @@ paths: examples: v2.0: summary: Order payment update v2.0 - description: Order payment update v2.0 + description: Order payment update v2.0 value: { "birthname": "Jan", @@ -3081,7 +2971,7 @@ paths: } v1.2: summary: Order payment update v1.2 - description: Order payment update v1.2 + description: Order payment update v1.2 value: { "birthname": "Jan", @@ -3118,12 +3008,13 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "language": { + "language": + { "languageId": 1, "name": "Nederlands", "iso639Code": "nl-NL", - "ietfCode": "nl" - }, + "ietfCode": "nl", + }, "billingAddressId": 1, "shippingAddressId": 1, "touchPoint": @@ -3139,10 +3030,11 @@ paths: [ { "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", - "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "orderStatus": + { "orderStatusId": 1, "name": "concept" }, "createdOn": "2024-03-22T09:00:00", "description": "Order is aangemaakt", - } + }, ], "orderLines": [ @@ -3188,8 +3080,8 @@ paths: }, }, ], - } - ], + }, + ], "payments": null, "customer": { @@ -3208,13 +3100,15 @@ paths: "postalCode": "2595 AA", "city": "Den Haag", "country": "NL", - } - ] - } + }, + ], + }, } v1.2: value: - { "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073" } + { + "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073", + } /ordercustomers/{orderCustomerId}: patch: parameters: @@ -3245,8 +3139,8 @@ paths: examples: v2.0: summary: Order customer update v2.0 - description: Order customer update v2.0 - value: + description: Order customer update v2.0 + value: { "birthname": "Jan", "surname": "Vries", @@ -3256,8 +3150,8 @@ paths: } v1.2: summary: Order customer update v1.2 - description: Order customer update v1.2 - value: + description: Order customer update v1.2 + value: { "birthname": "Jan", "surname": "Vries", @@ -3281,12 +3175,13 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "language": { + "language": + { "languageId": 1, "name": "Nederlands", "iso639Code": "nl-NL", - "ietfCode": "nl" - }, + "ietfCode": "nl", + }, "billingAddressId": 1, "shippingAddressId": 1, "touchPoint": @@ -3302,10 +3197,11 @@ paths: [ { "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", - "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "orderStatus": + { "orderStatusId": 1, "name": "concept" }, "createdOn": "2024-03-22T09:00:00", "description": "Order is aangemaakt", - } + }, ], "orderLines": [ @@ -3350,9 +3246,9 @@ paths: "oneTimePassword": "H5Iiz3JTaQeIV8p", }, }, - ], - "additionalRemarks" : [] - } + ], + "additionalRemarks": [], + }, ], "payments": null, "customer": @@ -3372,13 +3268,15 @@ paths: "postalCode": "2595 AA", "city": "Den Haag", "country": "NL", - } - ] - } + }, + ], + }, } v1.2: - value: - { "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073" } + value: + { + "orderCustomerId": "94270188-4cf6-447e-bd49-e8186bcec073", + } /ordercustomers/{orderCustomerId}/orderCustomerAddress: post: parameters: @@ -3409,8 +3307,8 @@ paths: examples: v2.0: summary: Order customer address create v1.2 - description: Order customer address create v1.2 - value: + description: Order customer address create v1.2 + value: { "addressTypeId": 1, "street": "Kon. Julianaplein", @@ -3436,12 +3334,13 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "language": { + "language": + { "languageId": 1, "name": "Nederlands", "iso639Code": "nl-NL", - "ietfCode": "nl" - }, + "ietfCode": "nl", + }, "billingAddressId": 2, "shippingAddressId": 1, "touchPoint": @@ -3457,10 +3356,11 @@ paths: [ { "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", - "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "orderStatus": + { "orderStatusId": 1, "name": "concept" }, "createdOn": "2024-03-22T09:00:00", "description": "Order is aangemaakt", - } + }, ], "orderLines": [ @@ -3505,15 +3405,15 @@ paths: "oneTimePassword": "H5Iiz3JTaQeIV8p", }, }, - ], - "additionalRemarks" : + ], + "additionalRemarks": [ - { + { "code": "MANDATE_REQUIRED", - "parameter": "directDebitMandateId" - } - ] - } + "parameter": "directDebitMandateId", + }, + ], + }, ], "payments": null, "customer": @@ -3533,10 +3433,10 @@ paths: "postalCode": "2595 AA", "city": "Den Haag", "country": "NL", - } - ] - } - } + }, + ], + }, + } /orderCustomerAddress/{orderCustomerAddressId}: patch: parameters: @@ -3567,8 +3467,8 @@ paths: examples: v2.0: summary: Order customer address create v1.2 - description: Order customer address create v1.2 - value: + description: Order customer address create v1.2 + value: { "addressTypeId": 1, "street": "Kon. Julianaplein", @@ -3594,12 +3494,13 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 121, - "language": { + "language": + { "languageId": 1, "name": "Nederlands", "iso639Code": "nl-NL", - "ietfCode": "nl" - }, + "ietfCode": "nl", + }, "billingAddressId": 1, "shippingAddressId": 1, "touchPoint": @@ -3615,10 +3516,11 @@ paths: [ { "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", - "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "orderStatus": + { "orderStatusId": 1, "name": "concept" }, "createdOn": "2024-03-22T09:00:00", "description": "Order is aangemaakt", - } + }, ], "orderLines": [ @@ -3663,15 +3565,15 @@ paths: "oneTimePassword": "H5Iiz3JTaQeIV8p", }, }, - ], - "additionalRemarks" : + ], + "additionalRemarks": [ - { + { "code": "MANDATE_REQUIRED", - "parameter": "directDebitMandateId" - } - ] - } + "parameter": "directDebitMandateId", + }, + ], + }, ], "payments": null, "customer": @@ -3691,10 +3593,10 @@ paths: "postalCode": "2595 AA", "city": "Den Haag", "country": "NL", - } - ] - } - } + }, + ], + }, + } delete: tags: - Order Creation v2.0 @@ -3732,12 +3634,13 @@ paths: "orderNumber": "ORD-123456", "customerProfileId": 1337, "totalAmount": 0, - "language": { + "language": + { "languageId": 1, "name": "Nederlands", "iso639Code": "nl-NL", - "ietfCode": "nl" - }, + "ietfCode": "nl", + }, "billingAddressId": 1, "shippingAddressId": 1, "touchPoint": @@ -3753,10 +3656,11 @@ paths: [ { "order_orderStatusId": "f1d0e1a7-a3cf-4876-b8f2-073add10667f", - "orderStatus": { "orderStatusId": 1, "name": "concept" }, + "orderStatus": + { "orderStatusId": 1, "name": "concept" }, "createdOn": "2024-03-22T09:00:00", "description": "Order is aangemaakt", - } + }, ], "orderLines": null, "payments": null, @@ -3767,29 +3671,30 @@ paths: "prefix": "de", "emailAddress": "jandevries@outlook.com", "dateOfBirth": "1970-01-01", - "addresses": null - } + "addresses": null, + }, } - "400": + "400": description: Bad request content: application/json: schema: $ref: "#/components/schemas/unavailable" example: - { - "type": "https://htm.nl/api/v1/probs/validationerror", - "title": "Your request is not valid.", + { + "type": "https://htm.nl/api/v1/probs/validationerror", + "title": "Your request is not valid.", "detail": "The combination of tokens and/or products chosen is not valid. See errors for more details.", "instance": "urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b", - "errors": [ - { - "detail": "Product requires product with productId=2", - "pointer": "#/1/orderLine", - "orderLineId": "0574440e-7fa0-401f-b907-539c91633a5d", - "productId": 3 - } - ] + "errors": + [ + { + "detail": "Product requires product with productId=2", + "pointer": "#/1/orderLine", + "orderLineId": "0574440e-7fa0-401f-b907-539c91633a5d", + "productId": 3, + }, + ], } /orders/{orderId}/fulfill: parameters: -- 2.45.2 From 35f9cccc05a50a675dacf4bd5e0ac97889cfceb5 Mon Sep 17 00:00:00 2001 From: Max Martens Date: Mon, 17 Mar 2025 08:52:38 +0100 Subject: [PATCH 141/372] Add project files, ready to use standalone jar, readme, example input+output --- src/java/ABTProductsPUTGenerator/.gitignore | 38 +++ .../ABTProductsPUTGenerator/.idea/.gitignore | 8 + .../.idea/encodings.xml | 7 + .../ABTProductsPUTGenerator/.idea/misc.xml | 14 + .../ABTProductsPUTGenerator/.idea/vcs.xml | 6 + .../bin/ABTProductsPUTGenerator.jar | Bin 0 -> 4551107 bytes .../ABTProductsPUTGenerator/bin/README.md | 10 + .../ABTProductsPUTGenerator/bin/input.json | 154 ++++++++++ .../ABTProductsPUTGenerator/bin/output.json | 58 ++++ src/java/ABTProductsPUTGenerator/output.json | 58 ++++ src/java/ABTProductsPUTGenerator/pom.xml | 67 +++++ .../ovpay/abt/ABTProductsPUTGenerator.java | 270 ++++++++++++++++++ .../src/main/resources/input.json | 154 ++++++++++ .../src/main/resources/log4j2.xml | 17 ++ 14 files changed, 861 insertions(+) create mode 100644 src/java/ABTProductsPUTGenerator/.gitignore create mode 100644 src/java/ABTProductsPUTGenerator/.idea/.gitignore create mode 100644 src/java/ABTProductsPUTGenerator/.idea/encodings.xml create mode 100644 src/java/ABTProductsPUTGenerator/.idea/misc.xml create mode 100644 src/java/ABTProductsPUTGenerator/.idea/vcs.xml create mode 100644 src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar create mode 100644 src/java/ABTProductsPUTGenerator/bin/README.md create mode 100644 src/java/ABTProductsPUTGenerator/bin/input.json create mode 100644 src/java/ABTProductsPUTGenerator/bin/output.json create mode 100644 src/java/ABTProductsPUTGenerator/output.json create mode 100644 src/java/ABTProductsPUTGenerator/pom.xml create mode 100644 src/java/ABTProductsPUTGenerator/src/main/java/nl/htm/ovpay/abt/ABTProductsPUTGenerator.java create mode 100644 src/java/ABTProductsPUTGenerator/src/main/resources/input.json create mode 100644 src/java/ABTProductsPUTGenerator/src/main/resources/log4j2.xml diff --git a/src/java/ABTProductsPUTGenerator/.gitignore b/src/java/ABTProductsPUTGenerator/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/src/java/ABTProductsPUTGenerator/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/src/java/ABTProductsPUTGenerator/.idea/.gitignore b/src/java/ABTProductsPUTGenerator/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/src/java/ABTProductsPUTGenerator/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/src/java/ABTProductsPUTGenerator/.idea/encodings.xml b/src/java/ABTProductsPUTGenerator/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/src/java/ABTProductsPUTGenerator/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/java/ABTProductsPUTGenerator/.idea/misc.xml b/src/java/ABTProductsPUTGenerator/.idea/misc.xml new file mode 100644 index 0000000..7ace097 --- /dev/null +++ b/src/java/ABTProductsPUTGenerator/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/java/ABTProductsPUTGenerator/.idea/vcs.xml b/src/java/ABTProductsPUTGenerator/.idea/vcs.xml new file mode 100644 index 0000000..c2365ab --- /dev/null +++ b/src/java/ABTProductsPUTGenerator/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar b/src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar new file mode 100644 index 0000000000000000000000000000000000000000..ab8352dbee88063e2fbaeac5ce44637cb73e33c2 GIT binary patch literal 4551107 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⩔rq1y3_OdEAU_Hr z=~giCjGrf5a*h^Fa4gz*$n{Ad;{YR858^I^WQ;FqQU$)KzpJ+En4J`j!QMkl2o`eq z?rmtcHV-xUMFRRqQ0ACM;C6-$+sy`+ofoicUM&bGZ7XR(#_&D%*mOj2CHO( zM#+?Q{bNkY*-9SLOyzLz<~@*Ke;WVff@W7mlpqP<_K(SvCaK&jRV*{Ia5tu=OFhJx zm$@rk%rK%k9QoBHB}GBP3;w=0r_`>kBXg*rdfr&kODR<&^D^DErKw5@R(7~kvA%I~ zYIc^OFh4mywMyK%u)0W++bB6nYg86+n{*^;^x9a|hp8KShm%(2tS5$C+^8g(W3?w9 z^+t7`bQwOW4{C@AKy`x%TDYeW4`rdoq&?}0-H|O-DW2@PQ;2SYY(s zHFDs3f6Shz4g(TnOgbT=VO9^bbpeSBtFXz|7>g@4Ab@oKn%QKuaMERP-y8!wQ%Pv@ zS218FMT*m$gk6SX#lmp1piK}tRN@YFfxv#u74JLgg3KX#{Ah)^ccof5!;huHr*s^< zcrz-4J*^S7NEW2B;x<#s;>CnGYevOY#7lGTBqdQ=yq}PX(z}T5N@^MNwhFUO{ZQl! zHCfWd!iVUF%mie5g7Ftn_^3ymfT&yL@BK-LDt#OidZftC!`lSJQQF=a@i#>7h8d#S z5f`S3wa9=`Q&D))SyD&(%KP!-n|*FfbfJ4;Eh45s%h#K(k!@N7>ZZ{Z5c^isq}9=u z2x`V9Lb3{YLra7u_u6{{Z1Qfv1gWQwByQ!QEZ53_0>ux=JG|~pS8>CJ{k;ttbnq)M zs0KxDvOLGPo9BlesMdxW+$?A#N2NtKGo_^lscwa$0uA2z)-)D8<&Haxp7|hs8ev+Z zhWz)$+Z;H;T%h%$y5pY~>(hi3&jq+BLTl5oj}CNyC~-xs3!E@?L_nyCp9qBUdYEkC zx7x3TfAwyBr@(?h-S+=8EOt)^+|HuiC`8=! zt%;Q2c38}`momfSdl=C+q3yi1wk7BCy4iu2PrOK;M0&=g&5sgntrQ1)dUAvgsO?JA z10D%31hV1JVZkYDUB8yv)>T%{36>B}7H{u~&0 zq$qJ~@yUe8h9jYckzLN`_PUn&q7B-6a;m5NgehHI&JtSA5;MCs$S(0-4)Viimj=EAv&wU76uaaJE=!`Bc8uQdv)OI~A}f$J$)t~VG1W+O z{4^rK)G;I#{Bh-RxhT7)tOxYF%yIrQzz8U1!Lzd>uWNwyT}KCRrIznD}uFERHI&v(8^HHgYskv>Eg zjIo8cuxGR7y(d{iXz9`j=LV5hW>IQ3AUQ-!Grw26Pdx(LM1`w`NRqrT^6S_E)%rl^ zqjj!K-j1(C5iAI%yL5w?Rua$ol>G1|4QzX*kj(>9J@~jRyqUoaAyexfVn$YTj~}m# z`d)&AVDnVdQQyVPszKc0VpbWujXX&@vaK=%08;7^7~U{no@eRB$7*&!4m<%+vz_u(_+ zHHP1RycX(HgtUX427Rud@SL7R8HYUnxoPs9Mx{oHwg{t5fnK^wv$mkUpajydq8u|* z9V{N&)eUyUkW$3Jovg_^wJa-Djb%cLruri4Vpt*SbATD~jZ9g)u?WoddoU|lh`2#8 zNt&v1W;JS^nRS<*S)`0#c~D=2v~k&EmnVgWhq+Eq57;Sp)nQ9&^ki*ES%M>4sy^oL z@0{T<%@QV{SQU-zN@uZrK~0K4U;t_w;z&Wl0bmmDkFFHMeA(A4{2BqydpLNwFu_0z- zLlSywgDKz1#X^rlSq d{HBz6-&hGgY*cY$rF@Igwis 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≫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

s1 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
Jo2K=U;!6?ol$V&{wFV$-0#A* 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
-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%0D97b}2f$(3#DIXQ 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
+ECQ%S{YN;t0~0gyqd|E)o^}MRLl|$w z;qoOSoQaHJ6#ozz4>|r&*f}PzBYq+I-uY9WFGzDZ*-IV|)Bi3dVPvUDjgNG4#I;C= zk1;I@bJ*ps$O?rqQsb`a94!D{|L}%{SuOMM^APtl-k#AbCUFg{O=#Gl)7xjfKyU{gXYS=&w=fqaj_P)i&Pa zo56_R9b?Mr2h3-EkqT@L~-iG%pCx(PFO;E_(#5hWXXC!0hx z-%wWy-H|Awk3Rn;*Y$2 z{qoD9FAgz%^7l$Z2TKEnOgm2Vru?c^hevNSy}^5!Uw^^=yB|f_H}8`CPsdr{{P>~% zpXxX{?wMv#ZDr{*(5yMCtUlbBC7@uO= zz)vF1-njm4hg0!OtK~_VP`sMN#@@biQ3Y(|mTJE0k$7>l%F1@cGTNs~GX5Elke=Ws zH zuBHRvjDby8=f<#Wc4uc;IAMx2E$a4Y$X2s6l)&&zF5mXyNcbJ{pPiAJ9llSh7lF~4 zvEEnkKL@*%y{~8jGYRz+~tna z%$;21zY^@r$niMe4K|gvUC7VjnOlVIL*FNnvl=sU648o;422>@Hx{a~BW$ih$oS1uHc+iEfU#Pk$`aqnu+2@ z-iyXf_s!`JrO-`ipxAuW0=n_8aT9nHB$z|gQ_w6{6l(z22Po*c!~7Q9icH2ZtK<5& z3QOtk!|QDzKE!kqE1o=+jm>xIafT2D{{emobKu1LRZR4>`Lx=U0i#`=)OC}%4|95?K(u898X&;Tay&3 zU^VObi|QuZ9*&5F1B(YT+93VE4waC(zWO_2vJa0C^GgZb?p~at($0&LFph*~33gU7 ziJzhCXddGg|1b(OzYrE|eD!P#b@$O4d5=@%jyt(bF=P)LwXdDolv{EFQG$A(Upn)o<+|Y1YHPU=a2T zf+?M)gi(WG5RM{(%WqqPZwkUt2IqUJUl~AQ`ofFRtYGp6X&~lY9za^gy%Yu?Ui*Sg zf6~5!#L;?zFw(pd8>rl}_=^Qq?vKHJqvj;ssX_<>X<-aT=Focpq%8i0`(*yqN18DH zv3pdn^!{T$y$ntxfh2=cVz#QJAkFj(mDm~q-{=`4t5h1%-Qz2d>6H*c{Otd^FJS4OSEB`9dD5SH20Tj?Bi z+A6C0O1sK9=A}+-x=QR=mjD(qG~TLR_L@g^1B)%#dmxPZ^a-+_#io2O&!u|uj^Mj# z-&OfCoJF*94DgqbtIM#zx)WGB3q!3{U>aKy0QUGH$8aS+#rlPEbky?d#Z-TKZ~oZ% zMPKu`sVdbuLbuu$#t{KG2{tg5KoRxNVf`z@%W6ec(v&lUxNhR$kR!I9P*d4VRiyS! zY~-uXaj3x6nm1!ScpMmm?j7Q<5j@^sZ8Dhq zxG}FMAZ!G#?Qv+JmZ9)t1Uw_TQudnh(zuvWE=L?4u%9V&%2u%!(7RnLy9d zCt9_T8Wejv1up|AAav{D@E_>ZOl^sU6`m}6dIteZ6+ zK^vA+a_B+&MwMwA`kF^YUNXUc&Z+S*H9D?>{Ald#YOQKeI5@gAw%HgfYOTu**Ghy7J{-*z^#hmJeJCabRVG|lA}9D*vgr{r2C+)PNLyteizS?u@)nMK ziP~{80-`m|HmD*#Pr;I3SnXR9K8URbMInz&E+zO{LPsXyI5(}09qmXUBFDQVbQG5| zm$ZMTMbwn*H&>5;Ef+U!rTS7HFrh?0J(8H>j;246BoDv5K8x%E@C>!R8Jm7X|1p1g z{5J;!2f7Vi|40Q>qMt#>A4gl7NA~6S_5Rj?#<{uqsuW^Q_KW+8KLO@m+4cqe@?6pp zqR!$4DfldhjaMiOpKJyp(IQ;Bx!i8X58?7>mUBHwY-p;?SmfvG={Z#`8Fyx2hHRF% zCr`e1`$M_Ldu;h0hNoZs$1&lJJ@%J_bXGOl_uUksaCiK3Azv)sF7h=?JEr#oUoyXM zLO+L zSgfM#o^6W!Ci+N+Q-8fC_@$rUDmq;?n5veGnetcScm8^_HZxNVoUG0Jlg{DHy_l>S zup-BiQ^RU{2LziIa^%SZAz_QI6-jwxC>K~7Qe%w@J|J0-BybnxZqkfL9v9$$(hLSQ zF4VUvdjTJ%$?N33alMPUTtvA;#24~-so$YTi}}tX@30Co0VC8Gj$W$oyt_%eL)I6B zL!@7-$I^c>R7=~%8{IZNVp`FX)JtSpHB`Fe9(@Eg7787&^S7euYRdNSZxdg*k)HIR zit>(xx}DOeoY9mq!}Ke`y&X*pbKG&#MMkp%hz(~a{Gqs6R!{pvq}fspTMR~dnD-st zK>TMsMNK&PH~3k9nSVH`$K%i1b;_kN*tdHgg!+|L>l4oU3>CIJTr$Vy=gFlWY=u`# z22VH{MR-Gq)S;{)5lJdxbYkLrPDp)fi!Se9(+RJOXC0jqY* zE7*T`CMZNXP*F(4Zb6iV|4RefD2pVL+nG5_n{Ys%m}g8QOeAbrN9Jib!~KQ_gWo4_{#r2?tL$*USGV-$R)vRH-Qv#Ti$Gsy}a(+xZliV z|NV8r{$uT52_se@vKYAsWFvUU2~#4>kVsax95;@WZ30eqHr*We_OTZi*%1c?*6CoK z%kROnO@=T@L${Af)W3cztNvmbNpz-K(7)!Lg1M9 zA7z6b#-jl^K8hn}jC*k4HgG0+`Y$v#)D-krxz{aP@f#awe&U^W&}EGSZq-KdmNu!q z``9W>#1m*Ly*2GsMcPtv7I!b&Zaz{*YGZ850hXxGH2J(+mM!~IRkOy67{mosxTYtp!ULe_XL$sWJ8}O_2E0UG8N94u^WR;BOPF*=(mUcFxD2;5v)aht*NI zX@4rORX*ghDkIC;S)ybvt$r&)=75B>sT5@{&t{bbY19zA9!8bR6nGT%=w~Wt!YZOS zyP&+#95O0meWhI<+nIDaES|#Lp=~>gyKIMowy)-oQvajQfLE1kg_~k~defdqamx5G zBry1rgcPw5aKtR2n)0gj+Ip@4{Gby{=)fVa1Egz6_M>cGEd13+xFs`lK6%KCnFa<- zd|oX}cXsa%)Hr*suiv`r#iiBJ#0wq?ii=&fiBS=wQQI9#^w{~yciu9ppeyyf3u>bq zC#Pux^5qY}OstMx$MQPv8J0dGrfjs96FJr*YafoSLLRa;l#aH(!i=IE(~JXXJMg`4 z!O@9zjy@_T(^89fXnmEr1Kxhqmgkl&+}`7SEjN~%`bjzZJ|_!E)QgoAFW0?XZI2ML=?yM1S*J6AGCcBLGU6fAhe2-9Yg9gN$kFlq>~IeV>LvhQeDbJZwP zxHaSgv1Z&kkoJHT1&Z16!M1py<(p@omh0@EWyD;+uAE9s0#MDfu>nLpq;M*zll2G_ zxOYS#gwKvU@$ERycTSv@3RN1GrlU`#scKWpnsf4PdMer1IMTZ@U_&^-SyoxNU}y6I z&Fzd6Z8lR0mM28m`4hc7TiR=Vfmv3Tj!HVNwz#D6x4A;)vDX*d7_;m1|Zc~dks zK+;zG=icw?eWjY}mu0{m4IrE8t<-Wh(1u*TcWW`6)eMjS!cw=X;+~m!iOnL&7ma%& zT8mQ)6+Cdy$G}X{i|noJ-zxQ2h9#?y+7WZW*al8R!fA8l=?~`e^NADTzDCQE7ai%tv9h(VcyzvRe9O#l9MF zqSV-V+VbMAX*`49V@m7`<{EAlm(7E3SvTkz|JtywWf|87MnV|G)W+^NMC&ux;9hd7Zo{ykwwKFm6+-XwA7fg%W!H-(k9V@@MfS) zB|Kq~bFO5pdL7-Loxl~cL|^0@;!BK6+V5$2E!p0R=#o?)w~yziU3nKRlxp~xf=416 z97!dKOT_RvVS$KACDWy!79FVDw1Rwq$}}cX86qn8LW#>kK5Npt1dfvf*w_PDV!#ta z7LtQVPK#rK{|^;;_RZ})Azq7z=y6erCK+YOh-zrXTko5E1I0VRzH?3Ce&5eK|G!g$ z5+g2-bJ@DGpXl~;#zbQ0scXs;9|gTLc)}}D13d%EYJ#xlc8Qc0Z>a2i%rMu-FDi(;yzLp@#GxL}G4cmSpc(^* z4Mk+rh0@`)7Ks34sJ^9ef6|+{h`7B(aE6u^nGmFXo#nbv8D%^V&@T*f zQvLvS7X^Cg`2#&mpzaVah(A?*u>K|y4Ein>lMr2FsxO+F^gVV|B&nxWdraHQ<6Y{kN>*T9Bj7e`k8Bv*k<|=L%rlmK!Z-+9RWk( z^5q+6)yd?&r!uwa(X=OXdRdii`_yX#7GnG5&;G(MF)bOxeV^lS!@a z<-1@(ahoDXVoiG~)Uqw!T1$yoyS+KSp=RoW-NGa&XNhPs5ihF!0hZ z)u!QyMfrV%C5G@b9Q(-~X?WeCeZN3X0{*)Zr=HoI$MBCAE=2slzzhHXCW%%wu3XT> z(Y}3}Cd@dKc}b`eB0!qDgAU@FkYkC@0YVxm!GTf98x~8(9u_$lv4a5`Z*!FU_zf`g zFlicZKLnBl=@jSWII_)>otQN`)wkNY&v*^enw~#_DWj{<-I2kxjeMau|uxLc_s8=@9XVBWC}TD&6cW)4|8V zZ#%==vdDR|af}lUx5%e0Hvu8MW!;ExlSPWw{&q5dV-&E z`Fx%DOp@E=xt(+$9qdM#fQbOa4FtR@mt7|vHbV~y1kVL)l3BgBKT72EaMR2$a@5NP zsswn3PV(bm7#yHt_wTISWejVI$jHj`8ri5*h3iDzV=RWgF8F($u&Kx@MnZ|Fpo2?| zZ?8;NCjS0$d+mAVxrT5!y?XB14EqNrI_)GUeSj-)BNuL^#A({yX87gqFNr}U7*_CK zriV*|cI-__d&ZPOT?=7xj%FW52-A>9DxK3r!aW z!0kWlNGVJq%Q5szq@MyfZGfIQ8<0<1o!TlZs z0fTZ5Jov)^87pJaVttS~a^b^l&ea?u?_O02_c2tr>WdFyARA!L6p5z=O z4z@GzHRfPh0m`J91z+r!bZY;_hg&luX11om!ZH4R6M)0=>J&Y-R??utN@+5}$z+3) z-XQKs*3GgPDu-`f*u6c2@1uxBsl=^YGvIOINp3E*&$my6q;qi-%C_AWgZZKcH_r4K z=#c&tTWCvgw6G>k=>weJWsu)T>z(+xNZbi-Z-8xukD<7(ZbNY40V{VoA5 zzXxf}5wEcb(&h4IX+%ojFX9`QR*t;LyKEtapaYYuLyNHF$CNhOjhu!9fAEvIYC#!~ z^uibicVZH$iEUC`?w$>2(Ag$+2l+BJCd~)$mwMaga#UK}@8O?1CgGJR=}g}Ql@X#G z{lUwmZc1x1HTlQ>!ds+nr}w0^^TlDGQidNei;9=o8?xD9tI+yaBJHaoy*iALt>1uH z^DEq`Lo)7E@!};e(b2g@E{NK0sIwwup!d5fh(g4dlx^i2u}5G8KA8!am|a2yeq6+f z$-I3;<-$jYl$Jczb4=wHNugJg5BXl&l%VA4gwI@aKMvns+Pdz@TcFeVkaUqH#e(e& zzvP$)Q!O(bwc&sybmUTG{^kVYn5L0k`CeZTU~?8ahFq%LYKq3j=Xh)OI`9#)fFp?~ zJ|5Z+FFhF_okV6};O4yR3vS1m71#K9CE%|8HPgg6GkBNT~S$1 zN>1f3$Jd8dE379K_ls)Q?x5J@E7X7gp{`<`QjQ<%TkLdM? zCm2XLdE}a`1aocVO2WUrcINFr=ljPn;O{qOprTQ`5f0*^)hMPj*_}C__jJU8F)T_( z>=F~DslhaCu#qyHVdOO__7wf_i)vnXUX!hP8W;JS8K5x6E(37X>w7zKxA01vWwb><2Iiamf8E+LT z@o~;{>WE_|72>eCt_>!{xf(~U=L{NI_|ef}Ia@g1m#pGKnK>5OYd%4xlV#`;dE^mm z?yhyYfy3D&Ex!lnjH`0th@}H7iD2%eQXiS%(5;tSxKebA^6R-qh#*Y*fx3_?*01l% za;eqd7y%f|DMtSH>bq{v>CEs@Rf6$NjJKRS@#Sc#o5vG8mNMisk;)~Y>-cppIL6ZJ zl_$O@wi5PASMQ~nC67gqDDbVxTH&1MrAK^*vJ(SnMe_?oX@gVl2@7}Q=sO;{I^&LB z)K!7ASfp62XuGS)YaJP5o6=aB;0EHk8~yLa;nk{~-vmQ9Pk>Q`(91Hik17+ho}XHq zU-7Ue++0CPMg!dzVvZ2IfJfS@PMA(E^iA5QNZ)bBarq6JUpza6ppfb<$g24{3=Edq zKx1J+gggXf8`fr=ZM_k0S@2dz@jk;S8r(ry3<_{NU{erX>l`ymUwJ-c3TAiA98i9S z^{@J1Kn1Ar0Gm2#+TjjaHf~y_J=PGVu9vyQBDk%lTy1Iex|}reAs({XVl@Znl4nyu z)k45c3#-7Q`aHo~6hdd0FjJYy6FXP&@XJRxW%ICxA9=+4I@SjqJ@P>QhG%#L*4SwR zZ0ebV@`ZZ2J@i!Bu%xK`McA+Q9-%-%;kwy&2Du3Q;BX<Rjf|I z&-F${^08FcKtE^nXYYK{JI~y|M zJV$~z1jqV4ZV4D$4;tFj&QJ=6aInRY? zl*WZnGKh{jlT`5ldUHXdi6B%vXti{XR56IcKitVF!^$pkbPgHTP0I2a**8cd3rG5@ zH^^||5i~MrdSBpppNKWXZdY>3U?js~eoCziRvSmOJ4LkJ4Y7Ceiw3xe4qQ}X#-mE4 zIP;g=Z@0n^S>6?{w{0wPbRG*m?@crTvdIp`1Wkh+`ch7J8JKIRhPqIlsV0eD^SZ?1 zbe1{q|EMjGw1yi&dO&JQL?JZ;Fo_|27UYaFXj(6bsTGeeRR1LyCFO7Wxp$}eSIFcE zeRF8r>MsQTA<@Qku>9E+k$_|;ON4@T#57FtH#SA^o2#6JjNF1>R5kp51tx;*7>z*tHF_<*i>BnyG*{<(wr=_5$%W-E&I7kf=2)xG+`*HOG!gR<4 z$snk5P+~Z6Cu{~pB(`y1O|^X)y%FE~lam!bJ)l>&mm}vQ3Mef_|b7nrD{ z**PR&7i}Q>4g;_|35>^_W)NYut&FMiZZ&fd zRaqC<=;C2J>oF}{UMbMD)G__j0*)6y=6cyb74nU0+af+AN_ zTyJPJfp$V#Cmr6I$0{#9!7Pz7h@h;U%f^qvZ2+pa!f zMau&XdLAsBn1lo^4EW@T`a<#CF8;A0C~S?Uj7 zZ063qYbqvjD76P-k0+~lmE{4PDbdTZI7iL(AH+7+=Iw*L9EkGSc0UhWjkn7W0^{Zm3jiPP zehA@ic%x_TejtX+x8(SSqhLIJ!3y~QtV1?G{V`4_u`$lOf;h*6EuOxRo6A>%zWO8L zPoXhH>?g_B#<=|bavpy`I5nC3C*GFZCuscnE4gU@5Gh&>kN=D&f7F=UCuDqVasxf5 z(BzdDUjND+@8~N(V!-|Z^r!MzzLOL%-~AIJVC9Z1&dN(>Z12`H?V1qhyYk5JwLPx< zE+)>>S>|#?ynWs>Ot+^8IGrjh`E z0=vB>+f+qO!hvn9P8F#})vCrbet7~ebk}V(3qEF%Dry$Pq<0-sMDKK1K7Y4@BrgM! z*27|vcMgg}FB;cTM>KjW(a7i|1hA3WqPhw^hNWG!~bo1VH>r(Tqtg2>QF|6W2!4qr->-&Ub1Zz$lWMw?H&5zGB<_?J;*{&!k>E5?c&WJP z2)lE@&}yOH&9j28mv3op2XKaxM8;`Z7LlUBx{t*7bNc8>=fG6YJGk1C%GUcATCii| zwngmGh{aa8U~YxiELc#~()D|#aAU+|klJ$f4r0(=<3CK17w$sRa7YdjwS*)a}Q!kKNC*ED?a#W7U76 z%<@wSN%0#^4TD(-k{f-36*W++%kMLk(Gr41-)#Ou=nTNnFBZBXAcW38X%Z$6n_3S{ zbUvx9qb(#MR}vqhv71I8@<414>wTuq2g;(!xZyRp_UC7u?U0vUXHjv0j9|q`=z?T29Ew99iVkaggzEu+XcfqeI13 zhe_qKBCWmN{zk1d&WOe>R<+B{Z{hdPk#4l^^D=n)VSCdG*4jVR&f zcllX>5d~$|%el7ovNWlW3PwwsQ3rtrk+XSCr~1jThVYOotD+QFsYZTBE`%$Pt**HT*O4nX9lz^Ijx&6u%o(H~K||3uwa( z0+hxAsR)ZgqKG%);Y?2rrprqGStqTtPVnjNtvWDMff@40D^XUnN~U1)t`~m0N}@+i z#?yw^x>7XiJ8>`ql>~?CvF$v@5lk3jxK?@{p5Q^6(Na+~IbJ{N)uuEn&9BGr&06*N zn)uuq58V!|!5Oe6@TK)`WP0o_{Mq14FF@E3=y?Op&t5O=xN~=6P;EcexxUJDne&5K z9lIccaQ?zWHJDV42K=DK{`%d^RXzTkQ$!qPrwPyOR~M|=%;h=IzqvQAq0LdRO)yj) z-e?h#^N^xNRVSLPMW(a7O~at%s`Xg?rqUQ~DRuG~f(DmBX&j~(<9b4El~!IT$}kA2 z9j~wvVei77#1diPP0{2+4tcWCAyYTh>cZ}ja%LRQN7z1zY@tleh!TB_p-kHz1=%UjHg#R3Za^}` zLd`LmvQ8s!JW0@~S|*-$DqBkKF(u&KJ6$1kT~ffC?iN`bJvxXiwOmAyJum-Up!779 zQ8?2PA(~nc-54hFF7Zx(x%j8>x^`VcxIb43SE*Sf`>6VPhK4sP5U_?P-U=A5@lH)m zb(d5=^TqfkPo>9UKxR^_ns-g=BU5oG+J`*6I5NXcrixb2>Wp+b94{|=<8xt@KXc{j z%Bw8FzNcB9+|eSbSKs95z>|C=9$yM4(j)}PJtAFukgvpSHZk9)lJe_FV$j+doqqk) z_aoH#BYY*0IyR!ils@jG{;Q!ub>`Q&SGji9T2&Qkh0!k@{EAn?|1KVnYQ%6C|GA)? z|6EYx|MU>8HMjn&zV|PFQbH1)3Y7^XOl2?95P2!4 zE^HBVU>Q7g(vL-*C30<}3ky_FMXK6#?0mo5nJc$PX~{9pL~6C%#`@V;NpAl$GwDDh z>rHB4&e!b5&1c`9C->gQ=fh1tB1p~{r9cbmYN%)j382~};)5wDG$BboW0+SUsVpl& zL(CH1lTYDk{_mY(vl@qWenNW4Vt6|Qx%q?1dC6i zKjWGw(y4WP49?zRhmZnPnEzmpB)D z>+${yzY(_hFd1Ce<1F(1TG(OifH3I7w(|2-hrIW{Sv27wrO!mA2Alifl`&OPBcc&GL-p}XXXReV~5?*5*!L|y{ zi`h!i3OwjgyWAd{As>YrOXQWRs0W)gVW#z>e`fF1XPxe#nW+a%tF>#XM2{gxyj~+O zCNP%dX5;K_SMGmoBMnU-2Bx^)cmo zj)dB*y{(+?Xn|x&&S&rK^Jec2C@ANA^8MKm5 z9>v%qEJx`<$0g{%%_$z&VM`@SSFP6UG@%q779&1$1SNm|x@WRk7H;aphtkG>%u|~F z^+{5-Vw(o2==#1hc0t;iE8xbz%$F|-g=J8n4Ti8p)2f=ZB`#U|q|mu5{xDF-{iKPc*Ghy!}&~XaPyA{*&oOjPN}&ECDjYG9+cFj9YB(ezrL^ z_beyZ_^`ipPu#~me^yqJVV;WbErt#jJfOl8f4A=&ic6{VIvLPkeD;!Lv60a)vSe6z zk$#L*;wG_(w_O;}RuoWIw5Ps+$!6$$4jYB(EDgvxP`{&vNM{x+F3>G0Uk_k&BaD67 z*Oy$viLC1nJJ;0>4~X6EBL6_ZUMAchi8ni;Y&o#h`4IOhN>RpBg!HWWSqDTZ9lQ~x zH30s+LtPc5q#Nw4xBCJQliLt`;K#dwZ{>Oil1;W+cq`ccibmL403oCVHXP05 zloJ$99CR(&Ylc*WW~dA%-tO6Hln5OAn)E96RW3ow8`JAA z@AqQCkM@A~_JCh`0;R2c+^n#$HFm+$FW#rq+nM4b4j&lOV-c|k`*t@1Gbh5h{6W9IoOAt^&I z&%_`2AsCs|xVJgjTm!e_5}Te!J(wF908zQrQ_k#D`18|nhyx$Y0CwvwDV#dyS<@up zGqLFSGCNPqe-x8s=S;yUUGx^O{ETx4aDJ_}JSow5#<`O}k&QH*{nxa#c4FwMjVK^B zf^7IQ;)sHTKl2!=-L;e(H=WALvVzaV_JXbb%sIskEA7C+avklDKuxSIvTCyg35uvM zf-sD&Bc2h}Zl=t9*Q5jRFmKb}ew<9k-BX6L*s3IMRG@JkpWTX9yi58ziyX&l6o(UY z)~gEZ5@Rx3&eGgLkFLyg;_|wskIo@RD=WLvdLmbrBi&Jc_bZL^RDS$c=#@36sN9a= zqR1fM0yV&wcyESR!j(FL%1uu|80P^ixD*?Q;lCIrPf9(2JuSG9F`j4Sivj(0Ht#xj z;X}*5Gg=N=2wYhhL!<&%2CVx^XNUe)gG8t!du~}9nn)31vZBiNs>ycS<<%48B!bVKVBP?8fZ;Ox_vEIwle{uxX7P>(nWhGeKT)d z*IjZ-4!}{FPiCH}sB;~=Skg(!8yTqUWmJ52rBz#;f(jajNx1 zwyX8TdaAh{IG|hJnxYF1cGLJrai9wV=ct*~KSB9v{3Cy<31Hf*jI?Cn4hTS4s^1dO5<78K%2*5h)m zmBS9DJKax(k()cHsMBSx_VAhIM2vX;5?R_XfY4M1a|OXBSjvlpu7q!{9ZIgLrimV`1vSK0BNY;Ho4sMvd%Wifwt7mcbr&`dVFv zCJ|yd;;!E#bG|5M-QhDK_Oj>i# z{@DvuqXgdhjb$aC4LO(Eq@}f#qA4$O=xdmlPMUD#qFU>Wpc*73K)!XmXMAkg}hU(jd^5K$C4$YHz`lwuCnhACsj~+<(&2krHJ7>b1l_w3YPtfr&gBS zg{f$%{Yj{MwYha2GEo>&^4jQhPlS3DODiF=;n zi!)Hc%S^Bmf&TB^xwMuHcSgC+nd|ALu%z0e!Cx8?47jo3XC8sML`9YNmlyX#i}yOj zrEnkQzCa1KAOsDZS`paGk?Y|1r^8@j$FS4$MPXOZd8?lwI$$*pHUdzqDsITt3#C(O^r_UKEjt0?v~F z(}xA6I3kw``-vo6RI)*|0iwh`oYtL@IhobLt73#Y{Vy)ddx@#yr)yE6(rP37Sz8s8 z4bRiH7`6)#x`*&lj=ZraL`Q<(!s*bZ#J}AEip|+yhk=>r1-chpDW zVG$`?0ffLy-^lSzhmY^G$6tqy2-zI| z0sb)$@4N25-p8FO4o8!l?^jLdAeX~D@)toELtUd5roJ_K5Qf;;U|GHDaOa>~F%H=2 zV0eRWa5$iNLtttlqYdGpR2?Wg>j&4Su5## zj>=7Atw6z^I`A_xdxnl>xedJ zm%o1ZjgvH6JP)1aP?w%NWm(oe{)JXi#(gjbdw>v!o%!=tRGj1Bdk}h_1bYnwKkL=U zkT%7@CD?MlUJOLVAxGVuyHe+xXqis;+NPSp#G}Ip^v#dVBX{kKO;0A2JVn|qhsL}l z;NIx{?ji4fymJYa?xIGT1MK0vz@pDw+3U)G}pNZPurTLZWy{9Qpr_%wV35+*PB@ zV0JSZaizJ6WriJpNOki1xXBPRPwGH}Yhp|>QKm%S0&F~5`tT2y_I`}kxDU7a!4zcP zjMpQXN^b}m4UN?U)nbOS6HJ!hmWs5ptdQr70Xd4?CXv(59)*)Mr!F|SG_a~0Y0bw9 zf5g>jWQc4sDQoT*(0HpE6roeXGyP5H@$Tl2z7LM>X5n_{@hqmoYg<@VCaeLPKO@&P zozw;rgN>mpzdPyo(nGP3Y)V}fhaNDkcdIb*`}JUZhHX+4gT^N5`!KyDR3l&;B*kGB zp_3Ufji@4=(<`inG*=ORe_^jo5dS?^sZZ5mAdV-aS+}755*>?spgT(=cB-ujeT~Z3 zhq*z9*fH?}ea!^M3}Q6%)O}PhvR^&Gz3cR4MfB@$m@L;KxUSV@o<4`nluXI**yDl0 z6+JBQnXF;0(KN$k9Ai31oVr!Fw2)bGYJQ-r8_=bRrdeV+cO_$fbE1Z?DZY0wW{4G@ zC$u&(uJA>tA<$3;bje(@^pm~iFJ6PEQ_bKP(Sq&n=)uP1K$CK$TKt;&7es}0DVOcF z)rN16Oa1rrFekEmp`(L{X}z3jP7sDvnHVTUMt+!eMm?8_~hUUA0cfaQPWuNnVmMAX3m^gXSoVx3f#g8DxuhbxBj@~Y9!`t z$Pu+}rdS6;+`mJ{$lEXT?c|0&oWu1+7}@ofnirJZk+ALP2!n4s1BlI5aJsb;EyEfX z-OmV}DNw2g2?HkUPM!goydw1c%jnr#c=hipnKZPELCP5Qx8qKkqas9-g?l2O&DSd1 zq~@gLx6us+P4i=4U${pHholy-K`9AKRfiv>WZjy*WK?PUN0Qo2abtQU$g41dLJ7EC zYuS6sX#An(2KdKRvWh5wD{8gp+2Ib&XAhCa(*@T8#ifF3oWSh*YeriU(rnexdy_+ApOBj%##NBw9|Fje$rN3nvM zeG6>{FHJJl^j!~KAIXz8cnf4^3cxGFx{#74sqXQC?l`%#W>;*rz;@ZuGa?o`SWUCX zP`Vhl-vq<+m<{!qjeM(31DJ_I1Z)E&F;E(FZb9G+aQHX_z4L!;&aCqHsy!KCj@W{G zUEBS{utS!ecMm)DOdj)$F7wPb^YrV|HOj7L6xg4fnwXpholg}8Um3kduXn{kw~jx> zTYbi{f9BD8|5flzar=xh4X&=EI7%Aq%J4JMZ)_4_Mp;mA;?_Ly3$ApfprJ>3{oST| zoOaQ^wGI0XL8Kw@-wEs^qvunn|7&}Z&EB?B({`$q=zY}KBC?kvvvPsWpJJshqO|g* z6*5I9wpVlsWt-y4r4|MASN8GJ?QGulAEcaRj#Y|0>?W$ZUX%nX;`J`S0J&b^Y+nXus&V6 zHBne7bczpjfg{X0sb}Y3)>v7_B|X|?rho5CO9liHxiGhBbbbhe{5@o;-Y;4ydQhW( z+d!iQ`S;1xz@um*LGg_|60H~x?zDf75arw<(_+3{r0AKk+G9h({{9}B`(MTDqV`Ju z*zYZXL>>?jvH#BRS=PYZ*w9hP-d_LzWomp$6G~6%Fzf3hA<=lt7jd@NHuuhb;64WaJBoK1Q1$Fko8!A6 zT-xO0ywCR@k?x_(_uVu>8SB||IlHmJ_w?PV2=Z~+7r4&BfB*4Sr1Pa&^%(>46@jp{ zDbK;*&-C!D_Tz&TWdsZ#37{C`c!?51F7t4DyK6nSNGZa%2}+8eA14LJA9E6a7-u;q zZ_#E>7xO(il)!{foBXo{bzH3_GU3L2N;1+ud7aVk_t@`;)IxOfiZ&|zH0p)LO~;2+ zU~-y$vqsio@|r>-(U5ujZ$617NA=)D52I)$Q)bl!H~-C2B&cV9X)#i4$Po6$8pP2c z|H^e+O67n80e;i85e(GGG9qSDr%nam8q`Sj$eV1Z_(IM(i%!iNKALUrXbIm@FA zWQC#KhQN$9OGn4ycIh_gVJ&vlj$S8gLex+?lugaVc${n%wd80urGmftt$^K9xR&_O zOl7~=x!I*TgWt<<8vdDMx@eCJ*`AwIE*|qp76`N4<_bVdWmD?>Iu%XyrMS=3=)i9B+~^(yQUtbGmK(p+LRDMjifF9=At3&CtIv%9P%%zfZex6ECZ zA0Xi+op!b`zE0-4N>;WDQ1!Z~^eHc4u2^vet8scAYIOn)F0HGD17!o#SnlxQUjY>o z5X@kNs5!Eitn@ejlW(tJ4ubzDjt!ZFFTrZ3?l0uFo=K6w|=bsXDNN0=f;6t<^ zzzoazLsdAZ$T5hjIGhgrT{Dh!J}4E-_cvBP=%(?yoF=G>B_FuUuFQbTmoUzq)$GD; zbaR8HvYUhbl`Yt~d~DM)Z{RM^WHB^<+vgx>WCOeC(zW27vRAwfQup-Ut!DjOi!KtiF#C-b81=CQi>zeSRl ze6dk9Z?4E{v|^G*x39Mj**Q_-%ulC9zW7)`%|iP*V$Ezo-rd&{sIMl2Y@8`@t4PsG zg&JSWt-PT6_94dFzKlWA8>^>p4y#=!SZmPB)IV_+@OKA^9=l2M+9Cp*DJfXE zuJ%;5lec}Jp)ntntuiu@$6W0nLpiGDM&3Aq!@ zT(Su-?X)T8cqzLL_mzEnb9FzYx#Ymrtssz*(wSI!w{v7XiIu%FD6rZ9G&-m0&aP88Xvktel# z%FwSILYplgNN9V`_Y;;z5OAEjVj-N(Q-lA?r?)x~Vh8Yu6wv?Rt(-7%qW!+|pj95M^tx%G$`Ltf!`D8u{f-TRsI-Xv-din6q zKB|9`Z)M!6-BYN#gahuLS=%~Rn>NX@4N29)K4I_4MB6$})2U5b{#o=TKDuYnp?$OZ z`K5j{ZzAg!tv!U^g^Jx~n67=3ZYh1UV8Z&Poc?LtEB#{5m?3($X3At&X`-hXT{=gn za^mCGmmXnUq}@}xn?7|>*uHtN<=MZlY-8gW6UqAN9nMgCY`FLVj(@tMi&)>h;x(_y zn!a-bC>jZE7pSCIMjhn=kqh?lh(2QN`pOz0ZNy5__OaIfhh&dD*{{CMxMW=av;nH5 zS5Gp;>Qdc=UfIiCM21!GSNC|5iz}lijOXOIMEHW=S2kBBx6j-=&TkQ+Ork@8?(oo* zW#?*IT56ef-yRFlsTLIXh0|nNm4-9E$A1b}zurQV(=`uxY=%x~NS4i7>|8l&&9h8``y4?qMr=?oGbTi|gUJsd6vtHCBH$MNVK|snZ za|o!Et*ox9((LGNtLp~7D?3d|FIBKFvZ->gtJY|$cExqO|16gck4`*piX*dNkA4Ya zvG>C_SS{GgY<(NH)w!cBOfYG^9M#AyW>#wr9oagfrHxg?JC}#5&R@UkoYc+w$4CDFYWDdltjkz&g!$$UDPo#5i z{S|VzNIrQ(J#|H{$)mO0Pf3+P%aL*sbYvY<5v8E0;*&tako%-fCpend+kg=XOgJ2s zD&zxJ@fJ|-eFbA@byjXZM#(z#Fj*LAHB0Pqa5pbj$|8-5I3=ZTP!K?;@kHe~{3pAn z$EoPh!x;~z3S@cBZ{VUZ~Sn)Y^JcWgLLRXLZ@3QyYySPECc8J$mS zgNO7+?|6F#C(o<5VJhk90z)Q^++gcu-ij9FR6orkx*TK7JS=%{9$NU z#%P|uR18MVW}68Hd^7Tu$0M9hOem3;ylKxSv zpi?ea&s=5?D*TdTbdT=z1I?`EWd}09_mOQCn0Iy4?LW$=ik+xzRR!u>*1~(yLS-(A z&S;&&r+z!g>G=4P-AR{!AxE4b;;%%eWX2(}@(SLN)($zxh|D>pkPxu^B_sheFnK^? zBYm_^wI~HNKsrX_I&3)3t)RQ4xbFDTcOr?T%`;%feM2_h8aD4r|ea*hv0YRjuTr*%wW%75V|31{n*aX5RM&6PWZdKcli`p_&mv|N+5pS)aQ+m zf5$TE#7`Z)gd$&_xa1x!zc#FvRlVa?Jv=^4huPm72qvmOF+VGLz%*b?9+f)^+GZ$)tUJ9X~iEnoN>{?+IZ8^ei5u&U)(D!v{NAN2L zb=+S*V8sv=AP~|zD;rLtEXuPOyNzyFqBm}g?XQfk+XCJepq>mg6-5JGC_Z)osSDCu z?X4mlY~@1_rdgfQ-^f6ixKAkb44Dr!cb8$NgM}_Yxq;B1>Y{xQ&h4n0b#e`Tnt?J< zZZ(`3GSdMw2fZI{DGpC@`$X7TteC?n0JioNg?dQN5F0c0A87#y0#^9=7FMAVvt|*s zIV|!!b?P7s*1MS*G&M<&2Ddt{rOP@}T%#k4;AbuxNhDrz3rao1cncgVZSIVQ1R7oM znQa6pZH|xlt?;-$s$Ax4E{rsA%2*JL0~L5e*~ke$IW?sZHEeXMFhrHHf@Es;Uqa%v zt7%JCfA2e?a=UO1Wz4zmK41Q#EFHf#am6dlZ=7{I)KBaZ1X;&FNUn(LqEr>Uo5V;m za%U=`7Fjb2N-0Oe{sxOT4L)`tl3%|tPXW<_LwklXJI9}2e@PAQ*dL!SUc{KD3Yd6$ zp)9#(lpRq_#tIaTy+lSq`gX!K+Nocd`5P3@!ny|a*j$PbOSUp1LX`vvZF^{O4bf|2ZAeccU4Z-Mxe+B zq-=bufg9M_vy3qNwQy(gHhZ!yFbT-1B?pf?QMe&@|2;~c%npF zB1fF|hTxcgxQzYYq)DiiEzT7$24bZ}UyZ?b693(IBH!RB#IzZ=?4%QQl^wtFo9r85 zR&`8cc&YDY^;Jz1qey5UV6~x$C;~jgZ}kR|u?iU9Vw3b7dgHgN@05o8t(-&ul)sD@ zTA5+Pn-f{6$DJ#f%%5rGte1`;*=Xc+50;y!g3FRA!>#)vE_Lk4+|gy!UKjzkxlo*8 z?uu~8-mJoF#$CdF+FVCyN=_R?SN^?zXq>?hhB>eVbnG16BSNAlB@+`fab4M*k1on824}8RwoUTj@r6YPfzEEEH z&SB6rSV&!A+}v01&C{vwjr%FB^3}LKbZKy~ilm69AF}s!Qd03A17SFm($k&EBF>1~ zvp}#XT=haGVOoLFDwe6LgsRn8ee#dM6T#BA{cGoIsittbuF|!D@%nh3#oL{5{KW@@ zqVjEb+fV*T3hWw5x&z(W2zQ=x{9Z1dV|}ewh&yEX?45{+cs#8opV@MIlztSm@s{ny zcxX9zn#GgoRb2%a$OqF!o zY|BB3Hdu=ytZz6s|2NvOF<)}sw#u?U3c2@RJr)80@vZ3Bj0AAEas>#e)V};6`Cm0ZD<;-K z)bD%|+;_f6^}nO}{omo#|A*}7K>9z=efh@A^y@9{Yw7857(w>+!+%Ro9(Y&!x-P%VCbqPghh9R9sjf|A{@893!Sbfd~;M zX7cPGNI+z;UOzMts_-D>Sn|7%j3G{s)fSnA=+=pflA35lad7Kj=qleQX)l1)|8(sI z)rH%Sa4i8@Vyj`06*o~~?e#?lHNl$Wdia$A2p`kNFl7Lq_(})$_l2vNJ{7nVSAJX|&Agt4=84Xu4 z1?V*0yl6zjU-eCCGRgKRAw>sf_9@PesYyKJmT5n#SrOoC3N~gy>T7)Yhc3&8Wv_kazi8(jQDO|kkN1@l6G+b zp}cW+!8-Y#yF`7;j>1n(j56M+7#@_wPKz)TNXic^lCf5*=e%BM27{?J9>1fYXA@i! zEIY%)xr4K19>w2;{E1BBpy7ox;gL}5n8rKj&Z8GpbcfEg-(eo`w{k(sqY*}^=|N-7$q8{?~X zUOhw`>qk7h0<=j;kS@kjBbZAbQH_0}>}kb^t>AY>W@>+!=tA(gVn3Guk>(ea9pIyB zUMFjL(_Y`#3(&^j3_x$I+@NGC-oSsOEmeoyI!kuF&(s!lwj=!Sp=^umUS-ywx zEY(M#EM+J*WbLUb3d`C9(M65j8`?-8^78ZTb0r=L0sUK6WmcmVYqugE>R&>+2x#6nKXQw@!`EC5x7;|dm3qqP zHIy`G$>f1>I_}8_s3^nmkKHBsLbZP2pg<|fy>H%|X@|eRAV^~Ia9Xi6&>w&p&g;#D zDeKZ0Y+Go}FVC&7EG{iM21?holy#Lt<~f7=Fwn zhq4giC3K*3w(1G{B)Ax9?_k>r1T@r@5h$OSQ`uRd8EVWG#F}pyMqM4?tS!JqC8Uo z-l6nrF_Xxz+Y`?~q?wIAB>g9Yi(}s)18GcqO_YZT%a-PeXUAGo(BZ%FR62}gEk^4i zas)U=NiHPOEx%Gvm4r*cIKJ_^1+sQN^djo5zF&o@69YbwVg2nuR;hBt#53aUgBK0> zBN2JqKcvQZ8gnkgV(R;!S@TF8wKxs<%pL|!hyYV+fk?QztQ_oWSEWpUXm z!_Ov}e-O_ABplPxZPDn47auts5t;rzv?4grS&zbV&=WQ0Moc1oQbCw-u(}JT_S>)O7lJ4 zPP(J5s&z9^hTOts+flC|x zpX0r(%bVzwF(p6q6~d&woZO);u>FC0tFlSUD&W~2eoj7jke6}T9RRyD2YIqBN^Qo; zLBCYJcXD|m9YM9u(6=GURbriC_#0^KL8=RslAA)#0Qehf_aO^TdYzG2&IqI%aD_eT z$gmb$h0Z7ze}@dtkh?u?E!1N>bx+@lJw7dzD?>3Y+bvK3=udd#tHbhLJ$Q-Z+yp5g ztx|{`>z-ZkDYl9MK{_N8Y}@RPFpI`!?UpdjI%YNFap%V*8G)Nt|Bu@g^>?E68`Qgs zfK=MZaE3aKJ|Zw-PrnCf?g{qb?%ZF?A2{X>{v{K0hbI1l94o8;cnKSFGdzqxXFkL| z*J=lk$QOn>N$DocG?Et@Cl^?CK|>@Mq-PW)&Gw7eGoqY0&Oe%-R9>+LY(;XXG2pLl zf1MAw1=S@#BdYGAsG9YnlDNX*42oC7N2$wj;jsf5r4i}xwS`3&?S4hivhcsU<3%Ii z7WiZ1@2?2D(M%j;$<~Cb^82NmS*BXtHn=^YjE0lg!H)3tSe1a}YVuuws{Eb;amB8 z;C-pysIVVuYz9#1?EwP+tNCcWlp$#d0|LT^``-*Y|8EbG{~Vb6zpfBbwdNFWkqvS6))(KK)DU)OjD)gy5DfweI{C&!*UhcQ<-D_3`G z2=!qvAzaT$)&~XxM=>8-d*nzE&(A0b*28q3$p<^|_Me*H4*N!H(1z$HP>AgEewXp` zb{F#UNK4=_#^ZTk=kqx&^bPZNKfHQ8j$JgSLf%R;H`~ujZ?r1H+)iXUlASAFPOH`% zGr*&&yi5!(puo}$C!m2ITLsgEwLE=3@dTdQy#hB9v8a{_o4ARYs>CJZgtdK3|P zM(zx)ev%N3ReJ86*q*m~wqz~K7EVgWtdfAwmaEY@}=D2^C^W%eu>AGX4tUA*ZD92HY_&hH>o+roM2zATB+ zT!w1=Zq33>ON=6>Ldgcq0YHKl&yax8JvMBK3=_0bbYY5=Q8in;B(OWIFA$q3Gpse| zF@gfJM^ul~kQf0u82cuzx8ArC*0AS#H?SRfogSKC2TSN5+0M_zR883VM)~M8s-*D5 zP>A2}T7v<^(F&(Ts-I^iD^>q z$m~NyjKU>U)H`~%Z1zZLu%TMiHB*YHI{uZh7x~~Xopb{lX67N=ICENJmJiy zMP{q8Cvzvq3n>jUV6jWdo|!(~Z34~0$nRt8We&sKKRMqg+E`$>j{;3fw~nxBLiG%h zfGR=t1W2VO*}}$1JoA0_)|%teQg#t#hoH7~sK*UZX|YtMLSj9Vk_n6d?kBjR5T>YU zQ?3x@B?sE^5&;1+Qv_XC$e)otf1YWKpnL|vkhA+2khA-Okh6yzh(GCp1g<*$Fz*`z zH=%(TT<4PSH_SS5*9`m~Xy?D*HT!+8(*sv-bfIi^TLU?m1j)EXmJ_bgx6zp>=h}>r zQ5XrCAjX&}9Kt5)nBt59v>9$jXqqB>6%LVc2SQqo!4JPa>n z{y>x9*V9$&;DxV}-y^lI3TD2*M5@Cd!J-L(qkWQVZS#%U%QAUgJw@y$17782N$jV} z`%EMDeiK#Km;1)5g{{ihZ9@_f@u?c~dYP`daVl0J1#Ihc8K)l1))PTCZ#Yq^+Tv0BT$oeqb^Y{jyzK$`ObzTA@Lzk;Tw$l;^==`W`)}@qqKO29-I~rAeD*lju>(L_G4#x)E~XTgO8W^!m8i?0)kS z15c%n6v+?dDv1VvK@7qu=UI3WXAwm&aVrOhf9x6^XzRsvs2fMof+(WO^&fRl$^K$` zcd$2X?6>sRC-&-WO^$k4fH0tcj9D%5B$1~K z3!=!3ksSJQ_E3B7NtoO;A4;xB0KjnoU$lOjAHhOt-?*=mkwv_4mS~Qc#=jTr)gll=-_`0y+Hzg&_(D(jcWvxd-5(V)RdnXtuL*GmAM&yKLn$pRF|s4FqsqV0^4Y>en4zbD|%vA|1r(ekC*}vq4j)6Ag8LVwM`|XWzssDt$~OnuT{IVdByRfB z&wKRq|M{J+O7>`o)|GNO(0`j@x93H)AXfk7n;qe3Nk$Czq1JK}+`LR~jj?4pYrFLa*CVF4&k=$DU7ia%=Kc6Kc z0-_87GAJ&J)_1LHA53UaQkZ=kkrxxuo{92+k^E1k;3x}{E!C}DIGAZ(!Ct>*qCU(z zBvMprK-DwjRCP&`<$yD{j<{ljp_=IwCK*_~DFwE^G2{j-4-Ns7ol1C2egNa4fllVH zG}g=*3#35dbcSKHRX>^f4hWAqu%z0ygh5&HZNi{=Dua~J&`@h6?9|Yc`5%+0NIcQ+ z?=AAAds=bTX=G&CKkSXB?f!Tpx&PQBFT{d%Cl3aZKFTV@hqM=T&`Sdu2ZEHJj<|oy zfKWGpuyVi&;_?}@%Sn?W@t)qzla2#g_aLcXnEn{3N8LqNT1C56y_c$I^n~w%Tq1F`%~^5DR?EWw&a0eZp=6)I?6;1`C`ps5c3ia`2NAlaP7M^6;M zt5<{;VnL0d%0+X8#&rrpTjQ+E-AV7>hQ@EBQB89M4~=FEnS>Z*Oo^CW@cTLqro4`| zD3f8xt?_Cy(<{>CCzrN=49ZX3gJVlie-jy0!jxIz=h2#yNLRmqDKpdN)wiT7kunw> zMMZ2W#?gT&t+Uh1G-JL4v=qEZmAJB=rJ05KBH`{gfQ<-6E78P8NX(@BjKT7o#l!XO zMTPjOi>a}Mhhb?gaDGu8b+rA3)=^x6fSL9BoPxS!ZpdSxWz{_TvBUsQ-_(#s3q}{-4sKo1@Zq1z>CPHhv67T@O;9N(4tQUMkg} zY!;MC9XvC(DvcB~Us~5hCmtfeW9Q@2rRT%@DrhB}A7&T*U0b*TLH`0cU<&`Z zXH9U~r}=!X!rvK%@bp@X@ML%L4|y9XLVtN2;bQ;lVt4WbzKaLK;yPQ4H}vTh(w!3L zYNBtzwFiNq7lO=_5@TrfN`wmDXnz11{`DHkGtmZrZ&aLfBj!eE)-%(AchXIO8ps3{ z^L7p8IUgbmTzF5X@Z|I_cu$|X1~zy;;}Y;Q0AY~3N9AG_q@@AQWhN3V_tU1oepwie zR&d-W7M-Z1#7kA+ulhvxbpRIFELZ|))Ru>Kt2vOVMZ6P=E9g%1_?Ir^UgHC)%$fHF zRfvunonx&nC}SChs0QQ;|q;mYw_pau56|57!~FTrDXa<-8^}j-SwAjzw}`SVDx>PQx=5< zuZ37-U|HwZxVEw+n}~x+XmZwt?PWi>EEosMTyb&@bU6?*Ty#x>%e<^WC8~9PBjxhy z7??n&BIe^G(L|Y6kXQ~-rbsL+o(BlG{V~YSMQILGCl`gKN<=Hc)nYXZf$);*qNzHw zOS&p~#gr({tdz6>@PJ_5=sM9^@kDM>BMj0OT-kGJyg8TIMKoZUsPRb_#Lew5Q*Lzt zxu?XJ=uMEU8klL%P?xNsbdeA52?H3Iu~kF3yd?Tlu#&%DR>WoNROoYqZY;DH!If!iNRa3*pS9~l1yR*j z)R3hz%ivizK7GeRkD{*f3rc;g8UZ={~8!~Y?* z3&h@tyoc%o?*Y{NWYec3oI|x;I+Uonp}6wWG`XPIhE;SwG-G||2y#bpYQcZep!|?- zfnAS5De*OjV52~^2--;J4x;Iz15z-1hv$qvb9oc(r#vTpuQnQE^#H+N=vEG0W*K-) zb*C(pvI2J|T73onJQqX?0B4v#`453H5G!ZAA&X676t&XCpA0dx zU5*Qg4+O+#`@@W)-Y=|&jNEY4<4*K*3UPD#8Wm9P%2JYQYjeTYJ7XT8La7A_pwr(^ zwWemH@q#oIGqaN_E1Q~s#UsOW`{OHy?|e^d@TRAh=6kXWY9Z=QUe@Fx^FjNj)Ql^z z9bZRFRF_56MGsep7?y04H=ITNURzI&QAJy>d8lzhGAAe25pt7K0E*y;6(@{`XekQyGNT=S+I|$Hjk{?0F6zL8_vtQA<^gMPvj0 zh*Z|H)ask3$W1x&XZ&_7UY8*+BRuFRoykW|jpP02v69#BN^`A#j22KMrpe~?oGZ76DHCD>(;RwN(RWkGo2kB>Ewq+s*X(-| z|AI)Ku+zDsHk{TS$aH5&v$o)Mhdq!q^DD*wP=v_=!}o3f?s5g{iGpvVV;53$M6D^~ z_Z&BttZSaSq_}E(&j1b*U1R2=uMqKlz}vRKG-U*jAa2_$wnmt)pf**78{Qy|gpX7` zqVuCkprdme->FdfLxlN*Wb!Csc%nbwJl!Y*UPNIy^#LcG?~dj`E>u+y$)c{T6}XQgCUEv(JhKKnfmjWi*`0JM=mML0ncNPDh| zl81NKwT4ME{&>RHhg^)WH^yaMw1?uRZMTT;6m{W@G^gU0s&`R{VYrQ8D959b^!i5u zYJj7OkQg-L9JIcfBSWY=Lom%yL>jTwq}*`2KJ;eTDN8PHbr6?Yw3ELa2BBMl@+#pT ztJD{U6*nL>13y%v2WSIHDv`fe1kC+u?1Hx08SA@4z&L2 zLbY{4ZijUPN>aw=YV|Wic}Y4j^f3^1zZ2h5_R;J61rBz)VbnpEhpGpAV?zuRCo9>8 z(Nd)jlO>S&ycI@LW6qTNGvz_n2c>($u${@s@ck)wH~Ve?UL4J;j|UoiKV?zKtNeqK zKbi9{=_|C<{By5oWm~sFROgIZj~OHs606@ZWu_I3QyU>Q4ceHIOB-(o6@P$;ariwW z8<+qcN1?S(WtywCg4fnBQ|&R%(pn$7o0AZ~WvDA20-?uQta+X)lm9bCXh>>g|mbGxBzvX7rZmb%u}?rGr;IU4xo$K~j-R)2#FNQcTAm>JIeuKVfUa>s&m- zcjWR-X|9~+wI}~&iTlET`d|HbDHQp;6sq$7mjnGjEjj+@mH4KLdW_}GZ<69?9Ga`Q zX}V}gX1_p3F8^y8RZSs*wOHC5MLJ_uay{Yk zUT^(q^>dNnmEd0Xl#2_HW8z0sL+?A7yh`%ggNV}cJP2KYoB9a8&i z-#)bBPavW%Qa>p9p*b}u%CT^&7;_+{!fk*uJdPQcXGdR5nVm}fWNB*BofhOB zCxhw^4De?*6i{6&QE4Y-fQ*ZmB4mQP8dAv^c4RSOAUJ`^%7PLd4RPydQdV=4ozn!~ za)LTZ=w=QgC7-!Qv4@mknGGg7q~ki2h@N7M8CKWYVkZ(SqR8zPF&Qev z@v)Y1kr|=)JSO9gQ&n68s+!Yo_`7%-P(`1tKB-t2~Ds^#Lg!JXY``2V*Yyhi8yW%gg zVVP-6C_fyF``Pu2HAEW}qnBJRvs3HkJS>~{FCyM`*GNK+s3GHe&b8K!B#Dl@&WYDx zd2$6&gD^F{_q*#6tC3Jghwl*`3#dvm$o7d$nL+J53H3vT1t z>_(iB%uDE;q}*KjhOoWQS<<;Zn2NqDmC^bs80=>OHVzB|o`sjBn2t zah0h^GpsO9vZlH)j+xeFbfUF!l2kcZM5_d5{7k%{K>kW+{KCk9(}m4AndzM27hu4A zOd2BXH9BsLd`wkwN6r?-YyUX1^*-Xx7($MzNc>DSyPB7(zkDy`=N3+aNr8OY-#j6n z^TDVRDfLC?osdsoP!dG^QH|;}=HRKwF&wKF+KmTTlN2*;xYX>DXvgDjxb`qL>MYBJ zS_p=5V7cIzmiSDS-_!h=D%#vt z5#9#q8=hm<8kS?>igRW9?JQJ&irQ-obUX)z>wbrst}I#uHmJRefGf{Y;XCHfAUzA$ zobYCxVIksERcloO)s=v3=sX-kECLO1W(n`eqjc4rmjJj8z>v>471*^v&){~#4cW<1O(YhHa z;GTNu6Y|eg|Mk!q`l96?!mu1JGDKugKa}duiBhXqo24Z=5bjW;Pd#X>eYIh$ux{U0 zZ=a~W^$Na0(rkXG=Hyn?uHl$H;Gc|9C z=yQG6tit~_ial!3%$YS1;zR0q5? zM-)z&UnTdQ-Mel4=LTE;OnQVX(Gg)~mRzD5%B38{E9KUuB1GU0VF%wRe@1Q+`C#l3 z@kVB4y4b1uZWejO2zW0%o@2gSABth}^Hzkww@w3{)kBXf% z=VlV1IGmF z_EYH{%@4`EEn+uhLQo^ye~YWW(;r&4@>)f~5(@v}8Na~QS#AdeKxFoFeB{i&E$!$2 zuWl`(4J-Kc*5L*F>@7GP0_PDirMJwE9++O}=myS8oHc6V*twr#H3w%uLZ?bCCfbDx{@zR68aa+Ck3W+m%Oll7Z(j5&s7 zYpK>S$)U2As*Rh^E2_7BdfpAN1_tHii6~a|TtZ4Mgf4)g`lRgrVq+lTx&3%G!%P&6 z2Xn~SX^$d*BjD~CG>98E+r$;r0xt(!EOF zbO(9&2Ya?wCux1MN1i;!vl@=P!xWC1&$2D*fSfU|@%Jl=sh0!M)%8KvCJ`{-o+|bn zPQSu|WaiPr+L5-hhGC`J#b?9Y?X&y6VMD@`*pf$nb&YFtgKJ~haa$cia9oz<4$YNj zG|U6d#W0`@!C*5?-<3Zz4L5hZIiMgNxP7p!r<^#;v$r4qJd0zc)!TeXnnMGAr6+@v zCc77T)q+YX*Exr;joOX(W?(+z8R8F0|F?ks9Lm6-o-pI3=TFEb*;LP;a+i8k(FX4- zGYRp<=@sbb)h}zW;f!IsrQ<~owrgJ|S>wsdVOAlADBAy@JX{nTuhjHS3E+x4}~^#gYpPbo9Z0MF!rsEiOr7+eIoAvK}lgf4z<=+r|^AJ&C1%T-UPF81;Xet58d+m6xYWU&?o34R7Y*2(XAEW<{E{opyDpj@q=wh) zBm8sfq0@gcrtMPDDxXPs+&T7FZW1p~nToT*OAeadh9n0=v>p5IC%$VooF7nhad;SN zW|9IdQP)6pYPKDUG8EZUo2dEz0ID0ziVwOaU-NNWoIGi_4%w6Q)-Qa}P4A)ik?Puh zgBCsfeqhR0_Z(fEH!S8M6YOpX6^5iq+j=jJv#%5;BDuaL{ng0f+f2Lytj=mOwc4KI zd^%L|oMNwb^CJ@Ue2_>c+gSthGlMHy0v;Ey!SM!(S&C{{EZCd9KwOst>D$pf!9(Ol|1f- zk|E_(*MHGwqM+Q-W35J!xoYpMvba*|Ma)RaOHgmS)24))C`GF)xlV6ot2M{gJWaHm zSWvYA`jxW)wy=?YTN`RAWO``5P2q1({MJ3nRnd z#OF&=XO~_*Rj;%u>XirCKweu&M~h#Ll7)veD>Im1rPSwOH$*=}zd-?OaxJ?}Pbw87 zfo#ouJ^Gky0(QO`fu4sB=W5y;>rNposBy764|RHc7z#*Gb3>tUjTB{j?jPNK09SkY z!3a#9{wF0bUBI}TFaVCeY*+a`_I}}-D0A-G@Wl;AROwv^0Q0T{n7(cg&e$TfW129D;Flipo)n7Zb5N>)+TLvs#Th&<3i)zQn2F009|$|rZRCgtL?Y%T2er6BrFU5&B+A!cyAh(DRFD~H3p`fb=k<*D?%1DX#)pPKHN zitiLhHcttIp-`K^t-F!{wMp>Ul=5sDe+n``T2~{YEyEM%JWa||j}Kdp4fKU7(-LHC z7FdTW%%vSHD&;qtjm!zR9 zYA8cHLtr|Y3E}I4E?UTJY7eAJzUp6~6^Dul?g&Eug(Z;C=zz7`vh2rwfW;n*G>%37 zvP>qxCVyuJ@m5qjH2Q^Sn5?zb4zAsyQ39pIGC|A|7^;AFKd+|c&A%i1&n6n zeQm2NYh0m$6CHH9F)#(FlXG@MS--M~ubB=Sv~fOI0<+x|P}U?y4GS`}GMzSWD??{L6oI0UvxN+?xavsZElvX%hjOd@0WE~ki{ zi-MAXD^Ai;lfc71gjPxXZmIv(T719X?tn^1as1BC6ZPGm!onNCs!)UhFdL>2x#eu$ zg>bSP5<8SV2F)HY=c{L%38NKZ4mO>Q;?1udMDap3Mc?G4j{EUZ*sCsa8PfjYeXhii zD-ilLle@R!xuScEXQoXFO2u%1mzaAR+ld7N%_%t_kBO4!N|Yc$+e&mc?NRwh5XC+5 zAMfXw08*zr2(^bFc#$uQv@2)&RVFwKj{?q~__+lX8&w^>?pEKW+D}_odE7BYxkT}7 zfN(Yd`H@og4c#HGeAKX1KR)Y*VL>mm0nuP10zyPsKhu@z=wqNh3p{6U+0Gbll?P)d z9PAvHt=eGPBgGKp9`<;`{tlcL)ZQ}h=O7&nqfyNzL62r zw?XXsV*vzAZgsS3aQ1wYIvuxF&RtLt@8mTkz z3H9%O_Dih1dA@HyJN37pUGaZwoA6yn_iuvJzr5_DHl$Xhh(JG8afM?M<9m}s{6N#w z(Jq2x3n3tc%k}HI2n0!)&d#mG8kd?aiZnE-B;*T|DFNO^H2 z825n$L{jXVLk~V=T{F1j`IE+GJ$T*f^t3S!^~6e+ov7|N&jrTiN+=3f9$D~wG>+uo zY+k*!Q8fkLh@vi|%5fG^scCE$Ol?)Xr%`$AJN+@oY3PqGpusn(^?OX<@bcz+h`{tL zViL7An>7(p6Qf=`xYJ*#wv=mGz)iE_fyX45wocGdg+J)GYkTE^ZuT#S<&IR44a-B{Ix$dQgfn|L#3e)A>UbCzHM< z*AnMaDNjUU=aGGsmctuiU;)`yILvKxrZZH8Y5Ms^yrH_uPmuCRX4KxA7P!nAe>-$K zUQQ#r4^%X&Zsg}j7tgobDpDCGmvT8pR%;?W!(&3@xX3ir*~L44UAmB|E~VxMq?;3Q zOklbayNmx^$~Y}oWe7n;GCFQc;Wv4QoIOU?$>6Zn#m@q~;1_8=YfG7p6iUCHUT^9b z+-7FNJs4wA!JY~?|0wsGS%A)(C``v63*i@@2&SGKKnb5tl#w+U$ z>#(GqmW52H+f}7&@upu>en=t$8i0>-Kr#G0k8;b_mWSd_S@`^dvu-~mq|5r=!RlcK#HpA;gqxdoFTJ!!(djrnGG)ZbUAiBx8=fQ3C zS!`^rA`g^q z1AAEF~@QpgW}Ad8J&!K-?cY@-ZK9k{wzp=K2jEL%#{UlRu0J<ZqC&MacSWkl9iiJHQ3OB++w~#H_QkKqjkK#=Y(ykyS-k@MTzyv}FyhR;q6|Z2D7O+5<%xv1Z}8 zu2ZH8T2zpYR_|rWtdx;E424PS;3llLREdj>*V6`w>Tg8B;4J*1nmPtAYm~AtEba!y zU?FRUUGkk0i8a{+Zg1AY8+FzrqI-^@k~;`i;@wK2Rxj)!%K}wRfqGl$uQ3uQDkL|4 z_g}+_Z2IK3`fBcA=7-wc`C3C1pmR)P%AKWJ0Ci)?owR}Vu}0f@WN!yNcb|-k z@I359lL?bN4K*_%Bp!QQ$=OI$fkvmPj(M{|pKYf3XV`AZ7@-@=fTFBM)*Wcr{D7_1 z!1)v6F8cP+wx4mvIRfNR`U7U8J`VN_BtvX3~}J6Pa?0YCt^N9w*%}!A7)2 zRMk&B4#eb_z_Qpv#-lpvsmCESl93vz;hA$lhKKRtbBbdX2Ax^hFfD8sf-II)f=_DA zyjz>eF^}{yU4`!id`WKd-cf|dwoj^i=C$z*n{MHBgM+DyGNI4x0*~N%o%jfX7^{cm zw?QaXcEJJ#)I=cgc9!kjp^y&x_^Z`o@pu19cUO*Yx|Dxx4&p>ryJ<*&A~ zxj$2uODeu@s!;PCtbuJfz%9XC4Nu^o+lGM#)s1o7?*D?^8uQQ|?6d?3MmC)I{`_}d z;iJJ1R{7=?p8qu8`+wSN{J(O>|5|HUIw7m#d~K#}O4X+&1`^NEz)>JWi0d87_wtvy z=V1wiLO>{30gPPZp{-1s8yX1A7hg*?H1U)*22?aEP`#9bnu8mK?-Pa#auy17-}lIP z{({9!8^)l#Z?2A-U^Np*opKyyZoKulem;HqT*%gRdx7-2XwBN;`)e`~qDca7zy-eH z1+oCKp2#jXdPk=fVIVFJuanV;fixxImYp^)jFE6#HTv!5=gWD3!%M8!&7WYn@ed*d zFJ!!gnE(VY?3~b@1UE4QZwXqs@k4|*FAdt9xCP#dT}PlKjQOTWrJhq0>fy_X7Kl(- zzi^e|DYxK@2duJ643SG&@I;MI?|x+RGpF-i)&yYS`&R1=8_Tf~qlrjRWk zX{TXP#kzfwJ)xmGLva8TC=C~eU=PH`?9I{o5bJy`_C&fj-W)2JD7-y@uJ7H!8qKlOVp{rLx^8!jq{c*uj*FCX`ZsNV%O=Oz zP0C_Q=n;5}7p+Hd3PLg1eV6EQ3_k=aCDf3e6#gOuxph#_!XE3!&Jf=u3r;?#5Y8fVu~+HZg-d}$Kj+hj zZwQlPYK#(ka1lFu4dRzX6r3fM*4Ahtn^sVK@$izCoQzR8N-u`4)YEurHarWvjaMW? zxtilBUS^#Q-77cN*mBTZCFQ<6VWjA#s@PK33k3!ilL29l^i&0#X&~jgsO{_dAsttO zDI>qk6Q(5Bz=cXSAMG-t6mid~&Zd9aV5F_-`0IUAf!5DVcImNFzF~Vz&B><0nk&18 zi%Vc$%OAu2Tut;+vnC}nrdaX2U~z|`jhl9+snuFoVKaZXF`8~KGMY}GAArP}J&?kZ zxp;$|y>x@JQLvBUmE>2xZ)vu4<=9b|jv2D?3bqwOU-45DSk zMjn66nLP}Jsk3n7E%moGFaopKsWUKzr89q@(I?lC?eXMfSO+KMh8M?Gtn_CTCu^=w zt~Em?zTNOw;vP`TWXaxl&WnS=O@KQVIP=Dd{iWO=ZN*gl&-?wBn_*PbDYf%cgO5&1 zaHOHJ#+Z_{VUu{{*$1ytpbGofcFCP$EtGQytFMgS3#f8VY`zfbE9YwBvUZNQ+XsZ+ z`r1QjzIDKoMQi?OpR5JeS4p}G7G)#cD6!aZ9!VgD+?^M%Tse+0j38w z*T*I}rw1G}^DB%{SDd{Q)KFX}q}QMmNj{P2VzOim`PjK7wHKkiu3zBIPNuIj-MZ z1yVl*^Cgx1UJY2O9Z~%6CvJ2RUnro=YA=$9RR+j&asem!-L_ciH;1 zD|9Jof47|w*&b;S)+FivH^t=si(;y5%{H7M{!YAsyOQ_#7r(ES$mal{%*4#72zCY6 zYqbrK+HtsY5go}~ZbTeHi6*de-%$diW5-DX=_U|w*?0q3I2ySF9C9kJ3B*I{u`SYv#gobXJ|)fj0N(?8niEfS zwod=1nBv%WBB{b#B59IoL0?prM9)Evlg>`_5*OU{gTZ)5HPtUdO5aGzHkR%{N|2Cg z-8XTbQyQ8Cw?p2TzgZgA?3nGh(B*8xf=#>P3sR18!(ae|v?cG)wSr^$c_l=euwe4x z`nBsi3hFQY>m3sc(kAs7ChRH;bFQ){e4FB}o`QKF*)3mwr5B!0?`++OO?+s!?7Mc%9_2vTU(>VuN|L5N?e8NT?FMFd*wb1mPj&X6w^ic zY(+`0jN;P-*SO=XNI4iHcXB}L>0EZ-ml*&+lb;EQpSr}A4lML@AazGz7=NaJk0mQ9p`4q$JPkQq~H3;mw076LR;_8q{)fpy}8Ql z8fKD#zX5%JnN#U9&fYyxl!_$X)}hoKXKP@Y4t!)-98k#o3VSlpA-iE6w@1E;I+GsS zqutSlyH5D;d;Xnc!hg1LE_~}Vq5qru%zyWl{1?c)XkweAQP zO0bGbB8t^%&5{6vLlN^+Wo_c0ZuUyJOd-?Q#&3vbbPp%h(xUT6HOh0n=Hj0q9xZr{!&%&8K|3FR`+}GaN`ZE z*{MMM3)1E#O}l(>n;%{S^-l+fBGEq`9PDc(_#VKNT-H?kf0McLOX@}7+xQ6NJeC@z zTBLIet9^vvu9E8BrrT*7})k_M@jv~ShhnoQH;aju_rOqj4QnSYdu2~{(-TY=!x+9-b1OOIxXBS`_}$F^TC!F zPfE(PiV7&aF~xvZu7|urdxE44%44lU(Wq(<>mS05yX3bpqqs9`z9~^0spa5Y5~&Vw z2{1yR=z{|t2fOs?$jP@DQjPp{noDqjO6q6gh;r{SZ1|fjM znb0g}vWQGXipMl-CSQ0!HUJtc$x^dJqVEs72RDqIShFk^?S5>>k4yV~(%4YMTP1|s zT7FM!6}z73syE&+e7%z2dzS0(-N3FW`uw%wd*JT3Ji}eI%hL9ajDW&7f9=>=y^Gdb zwEOLt4c6UfJ@bvLT)GBLR(cl!*xqo#^bA|0_|9C5c9!kQVqWghz)Z3i>BE~c56~Cx zGEad!SqF^)S$}DwLSb)+scXt_HWJN#cK!v5f)kk1hRn5ubnL}a==AxxU6Ml9S$;esa?1+i(YynNu=lZ24BR6i9|9B8Fu9=Bw;l1Pt-)3DLaTtxp}ED5!}LOqIQvd zQcokg>2AQDHx!p|Zi?6Fly1C#0<_?64%xSXU7PefTA>bU;7;tTi*D690s!2W9PkTy zai09FYIxqEEkB;>gNKTVT;=P-@%CVgP|6*a3T9&i?#xH#5wZhaIm1H(k517+Cz(bYZEdbNh*?I_DW=r^&cG$;7jzS5-DgF^X#P2|-}hCKEHowtO9Fn@SCzr=KEYaiT@sxqD!5bX4#S-1mKCOd zw?(sfo)$ors=OkofY$1^g$j<*%aEtce-eSoY0zE#B)m(-M~XvJ7U1t3$(Inq(KB?rLY(?zh?%F?S-hL?XwlNp`n- zuZ{6+LLSXO07D0Q9bg*FXtVLv{gTpUmr?eol48GnnxwKe^e2OEbtv9@U$AlD za=BMM{%Zh-ix6(%8FG(9qT7)i&-Ym({(aI|TnjA3;B_S3AVm)RU5NbJz?bp44?M^A zPvwh=!M!=|c6oCN2xo+8g>o(XXKd2W4~`RFn~e(XUYG8%c#W8l*(l^Gf_L42$B0cl zOC$-HA3v@sfBca6Uy^VB#SR(}TG)puUwmrlE*Ri}L^Utm-E!I~pMB9(c=}nyO3+h? zjaO|dUxHq`+3virJg>gGp1PlS*gyXg#Q>>^uX~&Id+RXoDem2v-=N>@`9yluVZgcF zz?QZIXAvem;^;fsw6JQCE<~ zC<`GNqyrUcMS%2g5=40-U|mT$Rp`5nKwpGT>vmSXgc`(p4HiK5$rFmNjRmWxBSsO!}uca9fwXe~Qs(>FLxNAvi4)d#{pj7xd!JVP*BT zj+!qO2&vtVT0ur{SXa|A;i*6rT1r5F_E8Vwi+y;gsln>+BME#RYBMe96O{ua_3;jgFaWii$Y!IS ziVVf>!j$P7`YOn|zYo>^R!b=K!VVIAybVmp5FhWRs_b50p>x?0`azLijCB-W%p?4l z{<4)z4-RF z`wzoPk;wgyPTu(>ghq?+LXxafyS!-%cW7DLgXaiXT3DcFPG zkDPlIHEns`Dtb`3O6v$|1KhSaGx7m<4I|CakT7flh>#07=mB*dYUT0!3|)wdgnbEe zOgS2M%y%Ca#P8Ggqg(_P=^C2_aA3>*;xI##%$zJ<(t@int*Dlv2`Q3WyUR7S^}V}Q zx=QW#Ct|KWr+F79<8(iGvdfJ$1w2TEWKwd5ocbZ);=uL;5QAT?zr|W#jRaHFI;Ryv zejxuGb?~X8b?@f`^eE~ye_;aNB6s!41vsd0KX6A0KGQuS)<*LqFrGc(?g)|dIKR4tt zC85E7sUtBZ!g&g2-C~eNxnjk##0JYWRQ(*Gl2Ip4n&dJmcu6A-i9ZB9uw7;b~#m?-q`3=Szvd1GQ0xgke zc3nbPMi#wEjF$sRh%93ZLRiLH;p4;>$z?&T;!f2QyEY9{nggM%1eYplYh{8%DBN+J zVJ|MD3(`DZVN!!jcInwxl>`f4aQ39i#fJ-H;F^m4^eWclIf>r(Q%PFcfjKV12w`8c#^UTrc^(JDtm8~RHYnM25u&dxhNQ>BVzOaG{mxgbl@=MvVO zHB+e7Ocq%#3J#%OoLV>m#VB=x8cy>uUK{+csqKCEY%3p@)c>AXDy*j}c}q$Jl+~C92~a6gPMXD__}IMnpjwkArL0VLv^2UP zPKl3P0SV^ivNVXZ0sIjntQ3r7|8)KFl%C(lD={Pkwlp`hj<}QHQail){s*6!qmYI zPU}g;aFpBCQl`ZScBZ|lxq-1Fudm81eev*E{cXb(68Xv7dnfCCC%x53C_yhX7UxFS zC+0@S`gX#y{yC?%QwS)WKt$CnL9Yu-h%-S}=;||JwF@}L>ZV6DI!(2Vav1agB-jP} zXHAHR5(n<{a(nvL0Eq#ea)Y)0&_OM9S^F9& zbiYwI4F*8&Y32&kN0P+(`x7YPWcu@g1_&uB=-R72MN3(@Y?lj0!A0?$}xq0ZY*Cxe#R5vso&m{w=it zQFyTJd+|#GK4yW^- zV=G*^1)^VPJAl>Hpoi8!+sK-C*CJZrsakd`iZ}$2xehTCI(!uwCXb-#p-w4!AklgT z@3};3KXlHAa3$%}0i7TvSd^l1_V9D$jH0bnX`9ru54b{)2+uCq0?qiw2^0E^s<91H zj4`8Lzo%G7fk>f1)Q#c?rKS)Lv=XTG9kxagGVAxjj~spb&Vvlun;f8v4Aq>#OK^S9MvjkF#LPrlukNi>>QY_Zeo|=2AIgKqRL z2p#uBzInk&b7j=pb|ZtphUN2yfNDL(^0T3D&Rq%|jiDB(lEexx?VVRcU0HkdjXivR zxVAOxFZa6vw6QY=2}XfhzXtBm9OpET8tKVxKxrv&@E#?DF*J%{DR(60jk}BU1E7>N zGVh3fs`PH*IMj%f0(*+D5cxSn{gD`Irizm z;@bwg%t^F8bno1{mA5_Bg>?<<16i}yTLmA&X0RH%FOqiD5!33jX;`s=^&~>h??z_R z*k*miI=R>EMcCr0HQT%YfjA`gIRqH1?gogB{z|6AC)U!Yv^vijmF?j ztu5(-vLs&HbTPULPT$yhLZniypEn8&|1-1tPm~n3vW2vZ5_!EfegI&(3j14x8Aoe# z;efh_ge2ZLTGQ&kaI2w7?)MrDSBSa}Tts@{{tIao-_RQPs}=B0n`Tg$*7dae;ewxV zVVjK3ph>V12B*dwX4;BkqHWT?gXxlQI6{3BSu0wloh6@WA0n>2lvsO~g#s`oXaK=A z?7}@Zj<)ahjep>Yc6SR0jL*~hQaBFK{ND!v!)S6kYWRV-mmSh}unVyAN$yc|OW~+f zi|iT4@I{MRmJ*)V>7y2TLOGZrE_o(bbZzKRgT!lz+frf)Z)aG*`!lWNy%`#cYt`Xe zAa@^4(Bpw@8l(U5Qw-aR`}7PgGKR-=AW~P^aD^Tr-jv`op8;=LA0qo$?hZ(0Uzis` z*WqG^6f9mEmN>&oESc#C*sAUZSL>*;*y_kgPD;056@_Pgu`1I8gV#oL8E!G~P@A&R zuncS_j3`;^(m3t%gfsAX(*-A~&?PaGM2qSNFt2&@)2$y-|DTkuqPXeZw$6ko>UXW^ z;wZC27p4}?*2&%GD9szPbj>!Jqvou2L>sPF9vMgTt>E~tAOAkFSrw(vy?jSJ1QGuD zA@-k4YzoFE#tz0dhQ>n%7`>2O-l@X7eS7^ ziH1InUIBOTTI?5uH9jzLOf&hO@ewJslu2+}2EWF4rb82N{*ow7vxN7bC5>OndgfKO zrPegx5`RielU8@K<%_KE(y;4PR~u6r^pp{1xnzI))5hJ(+xqsFX^!`|56b=1{Dezn5o#K*{jU1NBuz;0X(A7B5m!ubw7 zc9RSDkZZ<;+<|(|$7Uzs!~6E^k51D`{?xtMuVBa6*-t!wOULFR(A0g}NAM#0BYGqK z@=~jGpBijyj=pH8kxOb=Y$(#XEM;miDkSS!@n?mW-qDgVt}Zfg(Q*Jx8t>c}_vhDV zcb{9QC%Z9ZEJ5-fehM`UOIiPxZTHam;ezi8Y}Gcy82hhL}-&fld+0TB#FV2iJ#=SBx$#n|2Ucb zm{HXU%C(KO$f%ODD7C%|EG#zt{N|7!yQc+LJc39`-|D*yXV+4nnn-RF^FE^rbLa3m z)4T~GBZZFGS)>)eXRv`&77MRvFIv;~9clj#Fqp&}v);>__fnnVTyfUy8*_zO)x+EJ~?H1_*TJq^>)1DZ(U#595jsdM6fW=S)s z2cS!{#5InR&i5GOHh@OCQFM=3sNQA`3j5hIL=9XzF&YOcnXwn_u17{U8zL|ji7j2bQT)8s-JP1kcK#?{96eY@ z3`vteiwe?!n_DuY&J#OZo| zpNSyb8J)WLm^EZ5?Alp5*WMfLK;$rZP%flrxH=aaongjpgl*R_x4*=WvrLmy*@Pea z5=2Ugvlu|(&!C;H=7O54nV%jsPI2duUdU3NUOF&v>2Gi_mEkl|??TgkN2`l)w$FH> zQJmLWnR(kunSCBpH&C}+P1~(9=ppKYU_3DfU92$Lm~<*1n1W{EUH1u*Xe~~XqW6F(!eEz@6GWi&S*^u%dsVHDzP@Cq~6#|(8X*S6%(1l&zQu2?*=6< z91#`n9x^yR_&c2$m{4_%8s)-OSD%LDQp}gLqizt@j|0SCbknt`U>Cx#n<`S{(oJ|e zGgGW12rRd&0k>02YWI!P z=MP?e_xugfyP7DS&FnQ24w{|(u=UFLo~$Tzh!eJm7J!M*^n@5p1bx9vEm*%I=c@|6+$+r+rY7jOU=F5LtvY$ z1KsycF7KANWv|7qzqxUtLzA=#qCN{^aHf7-Hi+!H*f!l8rw?UV;l?Yfiz!l9E_C~K z`NdLEGhg>y+scaFXOL!9EzZs7R@-BRic8Aw+V0A{5h8EPOgtDiS1JwD=#fm4&lsDU zS$l5YH*;Nf?i2k^nv$ZbSWwn?;DB(J!wmt~@-Cod&7vdi7>#CitlF+*9=IEtFT#5A6+2i$bWSMQ+Ffc& z|A(!HYf!A|e%EvWirVn8fYPly4_c+jAHs4916onkJwV0MtzB+0FBm#)V zHGVnV#WgWCl=7yq-p-YYM{ZLqp7gAw3_GG>s~H-|TT~y(5z*4Y@fN-ne1WKAxik=T zIRjRG&>#u^-=6tU-{a6N6*}%>JUyj@-m^Bk4@d!!=3)v=F^aX9s=^p+H;7IDWae+Z zep&1IKi+-AyBE-`ftbU&&a65EnV^qKk@_NL(4SL^shczC4jx1BCr0zj2USlx{K{P^ zisk8@Q3?a%6Xj21eF@hfqNfOB^P*+F6_MIul)Rc{4p=6LLsmfQ;TKL%GX1B8WgR1{ zxK1}EA$;m^7mg6CAuiSM(|6W>WDsJI&TLHSITBjsnyeoa6xN-NyP1pvn`wV1Z5J{K2|R8F6}Q{--n%=MDj>Sx!@rYk4Pe% zJWEop?GUzkfK&%>NU|MVU-9X{jPoGTj87QT1E8B6T6RmCH>+1Ty;M6rPZ^XtQ9C%x zb5&TPP5SsWtOO@s0& zPS}MD+JU4ptCXkJt1o}Ejo|r$IJ`_ZRgT-MV1J28*=bfAz+{(aFqb3U1{;z6>J+$P zd|{T9)sjQ!-dJyv(Me^ZWP21=qT=paC1AZ($lSzpH0QQ-pKFn7_uZv#K-DEwbt+nB3`aA5&J`$vh zi7q*aj`5u1PbDUv!FCz4k&m~0XYZ0Qw+eQaUUQ5-^$ml0N6D@XGhCg>#Ix-B z=@;xkZLtA+U~X2yM(y<+Fu){vk|F`OimWy1@Q!y2_BU+V6~3ZT*LvNhy#~AE9GZf( za0DqKvEzc^cyb}$F57_)dt*?tlM~qQxWoRQ*S{Y=XL|lW{zw-Ujz_@H?_`Ky|6zid zqLaR%rILfbp|P-)v9B$5R98^`>!m|QeUm{{F1A#YTv;Sr&D|HKGrae=y2wsQbP53U z+7VoAR1pzxy1Q>nLPsDOQeC2JASsWvDQbwjS_m;q6dl^BL=_q9h3K#tJPtdX+e8*t zCCx&o9m!;kFBANH=_!GnPE@(%0Q65?hUT@|0)x1K`Of3s*<+B>gV2dCWVY-Z&u3Bo zWppQa20P{&fo)1=Wu_B%<06+zl68~bD=D8S>HIznp8|39s%#tysw|qcBr~Hb#L?6l zQ7x)0bfN1ibSvYP?7)DUnVTbGY6#+%>;4?_Ex>)rGHne$gC3a?NzdEQJJZLYf_Q}n zL|Dh^zicb^V8|N(u5q!KWQ}Z&Fx&3vG}Z{|3@-Lg z(1l-vs$b3IBH49(!BlQrdJPKnn)FI~`w!9;vek;L2qx4LGAG^<9oDr%^xVe&YO!N` zt_JH2;j;G!h7;F*gZcNF#DYQ5hW6Wx@{dvrssCgq`5*sj{-qJD((W8SsoM}Rw?}+Iz5!i4 z*x!9b+}vXTLvHRV01`L%C_r)I#tHo=cfpSOPm(-K;o(}41>SMS^UF*XN(>Ue?_ea> zrj1(tlnH;9g=Hdq7l;K{w95Db^{LuqDy&7jufX10gh}DQ3|caGIwG5yW2m<`f*N7n zQU{JV_B5V_O0|3KM`i`ZMZ>PM7Oavb{N#qw>gkHjFn%;ix2}WD2tv{+=4n%`e&t8W z`hI$@zsYJzDCQaG4&O`l;VcR`*389F>I(}+HX0vU1E%y7sB0a&3!HgbbsX;9hVpC! znv+@LIf!i4rZ_NzJR|e1jaY_fKrq3^k`0fd^c#%k+#$v(+0z9@ikVc4hnfmBxJ%Rx zZoibWo-@^E*;vFIr*1CM}&E$8=LDu|ADLAV$ zV?1i@25LD`xMjmq5gYx{fC+uX;5r<#)GE*Dn#+#v=3FCComi`_H4LHFPBp=2y%uYAnXheH~K zQAw0$?fM-aYhU^XD@>d=MmX&>bdZrsi0dA~W6>@uf-}y)r8#~EGX>RWv3N*N4N0SQ z;%A^s4w7!**B$}2O5MhXqicY8&`oU`jkNN=?rk}N&{epB)Reoy)KIwz4raJT)F+0w z#HrlC!d>n0fLv9G?a`uOK$k!NFbBaae+I{^cm~cXe}=YY_+1meKj8qBQ}GO>TmB5G zTY)~LgVJ(W8x!);DmeHv8|OejFa-M22&M;N<#GC*#_j@W3_od`aPwEsJ*1VI7!aBo zX_pP^p0}q7LyJ!6s`f;_&K5Tnsqq^XSLPY2vpxB*7vn%I8o%nh-syEr_+O6m&SsoK zSmt;=6W-X$B@NbIdY`;Dp!N(r%R?YVm=;y_#_Pp1kD2ou@2(+PiXmZ4OsVMT*sBeO zs`Z|+4*a&djEhY1GUqZ1MYS-}PZACmede~+lgGr&er`d{xsMYl%nbCgE2{R9_n2ET z>5GD=UBALU zhecxCp$%EvBNam!KgH7Urq4h4M5^Kk;9Y(!1MU=mYgO`VoKAV1vNy?%FRx{fvRrf{ zWCCY`GPrRr3)t>zB0hrKbL6_NkS&T0>OhS#o94lb+$xe9GvXcUp<(VpS!Y_~VrvL- zGE7J7VApH2wkl2%Gp6GKoBAAx3V3-2A;2gnk3wg89Lf^Q$OcddH($)8nk5J_EjdD) z_JOBG+5Fs(JpMg-c~wauRbL?k!E$mmhNH-J)I5HV%?Y701-sUj zWSz#IhElDaL?aOiYWDw!v~!H@E$Y^Nce!iZ=D+r?ZQHi(?%K9(+qUg?*S6iBp1ipq z?zx{%ZZflywUU*rWR01b@ymFg2Zyk&p`L+#Nrb(^>^oi;A@$DMm;20oQ;5iVn6duR z;?4;A)s|Y__0P|*O2#Fcz$4j+jzhgGw2o6U+PDZ5uvZS!G(#ha*06PnjeVfleb)8o_IKCy`#-k# zhjVxy7`?oMJG~Zo@||b}w_8jfuVj2zhYjtI)&0KXPWFY64*QrGkKxYMoq?_wF4gXx zArbg1YC*88XMG&x%@?4Qr{rD!i~V_Y_Xokv+gkXT9eI2buA_nd7bI7%K3v_W9dY>V zyF5JI+r5eppL9{LD9M?Z8=CGbLEP+p$nBjGw%1#Lk5>l%wm#wZ;r#Q#eVYO)58%aIg_b}rc_}OecoOK6NHDPH*-4A7=VPFC{{o*SoI6UgL*j6GbS_MJ&6tQQ_!?q zG%6=<4;rrq$*mA<{Tc)|9Hlz~P{pb<#JzUa%at79MuCOk48$=R`np`%>8RP6y`>dz z1ZDg1L!;YNIg&uobhRek%2e8*zx#`+W$+0f~jQfiJC1_?!VClWgF5I z)`}8N%uUyTX~Ysx6rkX;aI8a>sGzxCF&~y7C5tW;>qEE;FBucN8C(iPTayS!mn~!G z&M}aWn1`BQLfqmy4R{Ns-90c5&o#1n6_bmy*X$3-iFNe1Px_4n5-%atAAJg(X|b-L z99A7}iPHIY()ginRjC5`FEy4ZuZo}uuaiQ5CC@y^{UbSOUK(jHfgjewekrzAB8>cw z9Y6+McEO!S3&H>??S59|oTOnm+~lV?O%vzTcehi5+5; zUXtD%WWh-YNslu!oIC)5+HQz(iM^moxVsl%?UM}4F+~L{>MRW^aaR>$G&nL4VnuQw zo*yxJvtx>M#bE>>4CKgLvEHl{5=3mGmdH0OjEvrEs+040reJy(Jj$=KXqG&UqzD5& z)?ceKxQ;Xv)NlWro*-+M?EuZ%`&>wV`-&msMAbKC61`)gQ|rh0N~qj&Nb5d2W$%=w z^g^>xYBB#0cd1#O9QxSU$(xsE$bYn+7%@LJQ&drd{51Vw17u?*BT^_3y1gVT=itt5 zq_GGy!nwJ(nFK=#IZQcRMj=1(O=hZC-*cE5i7j9du$Cw{BudNKRjU7LCxwstc&4j_T+OeRZNeOLd$*pgO@G+a}4L+hw%Xuj0>ZT|@=j z9+^5-e-#p%G~4w3qtX>d2@`otfnm|BdB2ELZZAj(oYnw~K45mqG-2URL_Ju&E-HH~ z)7j*Hs>%86-Q`RW9-g;ow#Gi%*2CJ}JHx=qvP@_NZT+-Apny67vMVP1mflxRH_=++ z>1t&k##Hb-Y=QHUggF&bu16xnRxB*0m{=e(@kVbKUlyvp?dZD1{D9vJ`2GM@LT+WR z;I+iOS^V;~o$Yf1^q5_HPECQ$aiF23kY3W1u!nvLUO{l(aX2lrZI*V%mj&mchDzF< zC=WD4O{>6)NyQ(OZb`_#*f4EY98-oyoa7~im(xXMuxWP_djOnxtoTu(AD^Xw@XpFH z8Z2pvBpT+cb{LbWXpn~269@L@EM0w?y<1V5^ut*(FX;IR$79B0pJZG?J`0)&^AHge zCE6dIJoh)W{4X}RkuY{hBpL8hYeW;rFTO{(0w1U)%B0*ot7)>zry^$Ad}0U8q!h&o z6%X{ej$vI&>D{AfzMjKwWYQA>%xMD9tx^$q8MZeV$i)rg zk9AGK&&a|*1vMjQn&x?@EVU1iG%NEP($^Ng=b#c&6jd-q0Ek4Ehl>z+kkqgyqXSNm z@NE=5{xUSV*2eG?3Py>FFocv}HGcn&UhphGC=EU==68|!-o^qTfAe?v@eB##=y( zCB-;5bd*mYRg-yuwt3uES{j?BbFC(U_n1I!^4K}IMO2fDI>+-Xeil_kH5Ig6lCY{W zxb}Hj)ScunYvLyCK_=$3+}F=Rxe5015rzRsT9F;vS_Z@C!?nS@u}B&(BVdN4Y)R|H z8K|NZM0_q^JnAfQ2~D+A8APXJOVpRGo5_nsbJR(Gc*jPCPwc4 z(hKYT^~=;lS^H(y=yHZ{4Arr)hUffrmHN4j<@sgKXsoN2*cs8Xx@PXyXdD-AurIhq zIfKpM42or&;;a+2`XiH{$(@5n3!LCkM0?QD`YO%U;UayZu{)PLgptyTJAV$xC>ADT zcg*mof+3Jg7Nl5{-UrFZaVKs>DJ_0mllFBZ<_Ep{sWomu=DN3Mtt9TCrnWEvrvW>R z76ly~+>T;4E@H`rog|W8bLdDjs7S}D8;3NCH~v{St=E4ynns|&75zqv^<3XfPNrIkv{EZm{+ zPT?Gcf;l&uX|tjnPH~jx|5Pn!bNyLTSzB&~5dKHYgRh7YE_AB+(sHB{p#_q{N zPAp&`psF7(&G)}Uj6bc6qp`#PA<+!~!HQW4nzG3JC?nqs8_mvf;mQcM6cvp+t2;p$ zq-4_O$Of8t5;uM&r&oL>GOnW+&EfbX=s8P+7=|xEJTGyPrdWxi5phPxzDF&8j^mk3 zd%izBe(xZD5FOc-{RKXPZtSqS4G*Y5t5$EbG4AVwg@}N$)Or4C34AiHJ^k=JI=Ey4 z-IWa5inNQKaamJME>pXM1p0jFXz^y0>OC*C$sLCu~J> z`U4o&TAK|cSDNY~NxPIyecub<-=(l$*Q_sjfT5U#Szh^+mi`?Zp*VWyp?$SMn4Xs#mRwXMc*XPj8jg4ScqZAwL8SQ|u94AfI=)Qx`*7=jv%O2YmTO8?1y1-rP> zyhT>PzfAawlrp*JW~3uaC7#495KR3u%$3K~2R|y;&1e!=q-zjIMjk=R)oWN^QL3M1 zg+)4^l411e=U7Oo!PH1g^gZ9_-uR7nMB(hR{P*etK?mz3NPRW~3~P;|r97rF{6O87l{j6#f?rZwwk# z0C=o`lB&6>MS1b0+M8cnLMW=V!a&_q(|KuYNqeRJ>$2L|7_r;&YLm@Y2NDv|o|jqi zYP0Qm)6u77ll6KH1fB~9DBzKYr#bcdv0nH?o|DVuX2kmg@=FxoH=g%!U-sVA>qGr3 z6F!Ig`jGAh{j^U~=Zo<>A*QEa_wjD!C8z7c=&K!m;a{$o?ffpC(+f53mq?QB%X@`?r3|{B;KK>2-=}jDb_VIT<1it6%_pL0&eF@ojqykUL0D9tG z(O6G@r0xRs_tTy2OAGjSw9ZSm*$2GwhhO$(!GJGpcaDNjVFrj3duWZBp4sFgdvbw! zYAK}RLY>`|p#^xBwBr4qWqJ%8q*LulY$&LuxRcmZKRqA_4)=t=9KMFRU7}!R;gmJN zhUv7KSlgJ;S%VdqQ@$yS5)cA6GMfjD+n%mLdw4B^*`A>RuXt{5(Ir*ImgGufJXRox zuQ>56&|BU9ca)O3kqE!|p(xQOaeli5b{71tk$+uJ5Zk~)@N|q`5&J5L<%Q@7L*I

=;8f1d^vSOKgS=bKMBvsvn!CDOI63b=`j5LZQKE}}mevUk*W~@?$?Zp0DZ%w`ah$@KwrG;6=~bt7*k%iO z+}l47@Ss0VB%v-vH(G&wYKMgA$jH*1S)H7kzFh%WqB`l47)L-bwITzqnJYhWNnp(28d!LwrHDb(V{sYL$jX8zIU&hvaP?Smm-QCVbkdI0~wUp0HwPs zCr|9M>1!{yrlrN^xv9%y7YNF}ti<1hYYT_*$S_(dQJ?@01D^<|%7(>1fZ%HvNO{!gZt&N)xP zPh>@(L2$m(vtPws#%8wfYVeoWiFfeh!p)Mz8%15```As-UhD7c5ImQHm&6jp4MpA; zOJB0@fuJvx+TJ3;Pu%(UjyX?3PoznAsM_Ars^7)H-M8l37Td3l*QaODm%I<_@WIV9 zBO(Q1LIV%Fo%7lBO`l5dF~KfC6N_*jV82BmWRyF@SfHj5`bUbPaKT8qQZ;i4J%v+? zZ-}6SVib_1^a*o>@+sq;7M1&XPXblS+CISIBJubOXY&FG6=35`LY)MSFo+WTlod3w zOLLU=ZOwi&(~Ft^UQ~UzJc2mGEnK9*V6-!r{kGpyTDsr!;84}&zmf`}S#0*TS@An2KH<@k}KTnxbk*EYd8(XAA_kP(!G;Rzsu4!J#Kv_Lj)UtuVNvjLv7j1i9-CrQS6GyA0i*N`a{fwVS${>d2*y8yU$fl)su-_*()oU~F((-O$6Tgeii?LlwYrTnN?fce@Su^;h+gY4k&xO*v>% z@m4X$g7~Y@upYx{X0^(YFduj~pXK4TXtd;TwQTm?JtY&B7MCE57EIpHZ@c6#g;XtT zs(L#J6y{?_!>sBgc})S@h@}Lj^-D0(*2F_6iUIOL&3*q`q!8Mx_h3=|mgXg~h_Lx} zuJ%q7-`bUt&(1%wF&DolrJ^RVW-O>0;y1OqhVz0>wy=~P&sD%J7#fahdM^Sr3aay= z0H)fx-N51*a{Qo3n3k3+EAR4BFo+d-#7siuf=b6JgHI zEWdm&FW%0Sm-^0}{RA<>T$&kz0~i<>sS4>%{P)%ir1(b}-h6GCYD4?qfxv_{q;t`v z=MdX)mwYO#N+Rmx)6;tyeWwE7j4f5cECQm@@r}&{ z=|7sv0Gc|g_+04+3bwf43YTY+7BLowq%bCpnxBTKU=fDrMBb%aU?sB!!}6F`MtYb* z`aPxN6jWajN@P-FW1?~x_SABm90k=bYjcBZjl>ZR=FC0^%z=GrJtWbgf%2mG6LSO# zMl@gU2!#@=A`TMLS>L7WWt3(=)(;h=qUU(_iHVV%^(Xz|Skc+^+D$GrHEMXJYLpvF z&75-lAbl=4Yt%YwNFlJ8&0b_HRoWVkN?Ei~in7s-AFPO?YOD#qh--RP$r%lR!LZaR z#g1go#9;PdaCF0antZ7+OZlK!+6gmkf^Nx>@0q2A6vY+PvC& z^l25^mURVZFx~1Fl(E!Q6f})>XR0k@SMVgBQ`Woc!^9RP0`-~-WOw_rd8zTp}Aq6^jsLTFMt zvNb~(Trf;pa6kVxasyVMA_glj^O!e|SQy=Hv>Rnyqhkdh77Q;+EYyge+>1ZCp88Bh zHG}I6BSHqs2 zERDQ_YKMcxjQ8!gVtyjlg*49Gs}U)AUPr`Bw!XIW2@Me){dOmua;e&EmJ7uFen^#D>it3s6G*_k$XZ``F$0DTVs3R*a< z;JX-WG}^5a*atuPQ;KXvovAQ##E&FZJ8JGnhoPT{mJ}gm8CpFU_11gV{zgEllp7zK z0=hpz-juQ_Jclw=qHFtmJUW&CGIk=@i*<{2NHSXK5iqGh2u2Boon!&r;g2RY1iS4$ zI@*LPWK1eD&rjZ=BENvZa)VfuNTbWBTG4`uf~#W8YshDxsKLvr@;p4gn|=nq z$cWtn<2K{~z9se~#v{NAmz z_L{GZnM*mBtFdGz$B_WSTwhP6*U+#8uCxMvevYM5!2DLWG~hR$_KW41{CAbv4G4BQ zwirSj62gNGwg>vI@))U%v4i|n=YXXh4$x3QB4Imbeuq}k)&K%G>|8`&#CL+8xuPrQ zm&Y*kJVN7L#Ydm|Xx7`=I9~u^^w6lVGms{ZA6GrV=A1ovyYH`6thBqVIQ377MGP=E z%_0pXI2o_od=YeUb2t~w?3b&aVo%&w3LhU z#VPo}&?sAy9WkM$6(^Qd#*V4WWR$6$klhs6R>fTqf!okPenxNFHu=W=|#{Sj^- zGt=_{+)D$mH#_FmzG*W`4lz}^=BZ)KK2YJCYB7|S^_Hmu8;jo8-nz(&DGF%UdTLIM zD-gw{K8yl(XMzFLtO6@}t~Z@q05wFQqLcOKtj8;D3Gs=ZvXqpSr9FRI$X_hN4)}Ej zro6ORC5oS{Di9Mtj%`M1$G$~1@>TxlCu&yHS{tB@jrBKFt*$_&=P69Ozui(ErhwXF z(M1Ii^P-1WvWEfQ5}o~rQRe%hwn^!Vs0q5fdVpPA{BJUBleD|xQ^NxcqBx?U`quhe zcyFQw5eK&gwTW)|l7Zz*0Gj5Q1&xa6pB9CDY~#@AWD31w{h1AB3en1P(`M(@*1OsT`~_iztI>?6LAP4( zPHK@6RVK|>div($L`8sK@X}W}P_iSis03PgTCkc?*w6wd2Se7 zk_LGKbF!jJkp%s9$^Uf|YCTZK5zP596pPb(QXBR6PZ;wg?DAndYu|xNUJy)^T5w{U z`^b|8J6eVuK!qMC0{yldZ9Cc@k@~h5&rnt)KX|YiYAx?kZ$={@4RHW^Er*6D5WYz$ zOU*irg(NtOLLyPEYp8)^yz5sRk-w8#1X%5H?EM8P*9|i#%>DpoWJN{QTIxoY#%7o9 zbK4oSsgC{gX8YUbRsC)%BdJq1eE|&q5(L#*@{)lk6`)S0vSkq5Pegmx(XS8P#Za!T|3jHPIb*PnO)F|bucZN zT{6=;)RD%%`UN%Ms>;@euOrNcXGPYaw0cropxGu2fE;ms}5u`0D!_$KuM@Fc-@VJ%e+D zoG*hro|ikE-);eE=O&FnB(({5QN71<(KWnyd%-_}5U&TcWiA`t%bmsTh9|qju7i=kQ|?hkcu(>OKQzkq z!Kk|E@a=38RY%7*X|3pmSq?6ty+?Z6)Y-1KI6c}*YDv1($Y)xIoew_F5tQaXE6oMJ zM3MSX+YosA6bvz)bSeIT^cj*W>5`3%Apl~06ZsO2eMRe#!FJs>V7g62^}A`+=ZVG-IZQbDIUUcl$A87eG%kV#dtNr#Nu$GhDggL>97VV2(`T^~X z0$RrE@hRxVm6fHKN#RL#gOXL_P%_C)QWs6GIC4?DMUzm{E3{|59uo%6Nl)Ph!mEZs zJo_F}JU-3I4q{+8c+LkB8ZHVE^*#6lccH2-&W6&$=5T+E`Y2)2B1QUe$PzO~e(J{* ztUW?WE*d;SziZ=Kr}(PNr$n8^hLe94d7k+3iZ#KTokgXr73C=a_#+k7wY9Q1OKcJ* zK?V-+1m&gCvquUO&vM+R6!ZjJZzV31un~@OrIC|lSuIU%;*Q}or1^tOm6f<(a!zV{ zkhh{ROK-8J!*?FH|B~J2T`E$aPT=Nfu{tsa;qJ4tj{LBr2wI}(gU1wyeB8;54lYz@e@lcw~HxT@u1t5(Cb2sCbN z#cP7QyRfuKvGXfPzXa-xl1ab9_eN5$i6UkQ(>|l%Z0B~Z{TLQ`2md6$l>9WIkc*&3 zfdL|z9Z!TCEq`JgFd$fgm7wmxzW4(EFT&Xw!5m>`7uRIK5a#gjkfI~s{YzWC+$U^P6PAOiQQLA z-pSdyn#tLrK_}wL*_9<29#q`o4G&H}91fLRf&$6e{6}_Xp@&8%AZ;!q1dF$1MvoR0 zlT}6R>M{z4GWlN4kIC6(u7fQbY|#d%>K@I6cYrSBp1%1%3xuMgAk59uhsre?+J-S- zQnl#v?1%L%9_W(S5+b%0*_NkUrHXcQfqJp)sIk9#KEpz^1Zo88VctKR+I-G(j*qHF zc-$lCvsK&mrUTawjY*3}rYLB0c=d-n4IZP)NxdD$-jpZcL}z1YCbfgE*w|WeBC0E3 zDIOO)3S7>)AF^SNsFpiA2;wr~hjiu>D`6H5yvRbZ91i6K1gjs41AV39jh-!PA9TF1 zhEYPKdy1ZmTbX;yX__OI88Cd@-gdKzuU%8Sye|Sq&QA^DPsm*!=O|iQP`M%K*_)#* z#fbW)SX7eGEab;%R9j4X^<(ZBPS(cRlQm2iS+yhYs|u^*mC? zUI3~+u_~Vo6kM4}cB=~(E4?@Y{y&l!o37-Sb9RlEP5>Q){?A6E=7afMMe}nERX;!* zav62kik#bEz4^zPY*>OoZ=#O&d-}FUl{5Y%a%xqBne$)$RCD#d1+`|`syn|%Wwyc= z{nT_oyRN?ssYOVknyZHfWeenT^DmEEYxV#cfadMMccO;dn14%q z-fHyxM%~T2Iym1pUEMSAgT=zj&xmP+MMb2VPQcpIX zY}3VQ=Rd`+e@sHIvW>Oe1ppddEq^~RZEs^|K$Ymq-AM+*0|PgvHidQizpt_^_6gh5 z1uq#bA>4?zAI=8LGLn`CX+;2nRI0SOw)8|t-W(NSokbLumZOd%D!s?DP^cZpdh4x` z6GngcrSfVt@W%gYE$?7vUCMOy8^8r=q6YTF;noNSXY*>UQ#3nq7TaHnLL+fi6 z3!2+k?n=-6&O8T^=I0a8F;X(+`eEF(~1Y3GZo@g4-GX>aw2#!2H`;fQ&Y%M+o zQ1YX3qRX>aT~MU()BW zSOmVRWY2k~Ue63&1{+ep zB)%$xT%?7jHH|el)aTD_@17?UowGB*!7^w`ZP9ee4nO>QgXH&=?js?Qj@Fti&$kVr z3GbOq$j3~7R|L(c&J5+OWzLMB+nMAWjqzW3uk&5x%UR?uv`HNDgg!s_ZM`M{bD012 zsFYTZ89uQ%`dV5TLV@__)@4Mk9bF?hzZ+t?A6;4LhT<4)04J{|m8~@%X}~XtCcIsQ zv?;H|q{;Er*_(;V#(P1Gk@S`~D+#4~i1rs{nhA8|m7wxsV9ml^@z859l03C3c0X*o zKWw=JY0=8!Qk7Mzd{=y+jy9%-Mm&hiA;W{x^rxy_VpHqw73QK6qtpn9pc31eLC z3rP7q^GqC9Ee`QUF@A1Xd#*a0sGK$ph;iSuCW2ktJ`Mbm5pr?W99|&qiEl(YD=onu z%^yKT&#KM}z3IR@90KZRm3fHjonL7!lY^Gu$uS( zOcDa<+HC7$Hwu)}rY&9T3`p>qRK2)gn`8Hh-Ccm`6K{gaM zAvEQXKa+Mphf+RB7@9sCP_2`Uo&qtMOaOL1N=07FDCotSMJx`~?H{;64&}&_(FL#T zKY@YAqht1+#kM{1lNBjta)M#p)J9SW!xQg8_{i_2rI-y8F^)-duL#K3Fd~Ee`qYtj zlVIxYV}4MLP>o3{uxyHQB2Nr@HH0$NWZ2@4&V){S)Pq%-R#mE9p@EG zlOpFmta~urL!`6`R3aU;9cQBt>W>yfE}gm|gvfqEqaDAgJVvl9qE)vVn;+2E!)vRj zRglWI@3X4drvE;J@w)3>jb3uih)g%J2Q0KpTH7PjJzfhoa2RUP9ml>$c?w;4A`)yTJ+87$_(f`ou7vM;kI##h8+Yw*o3W(w6`r3 z%`xU(2+IqJ8|67A*B#ovNYYCwt#cT-oN#&0wu9T_7uIXtYo|2zG_kFt{&k*WVag#_ zy#gc{r_tJ*tA2;K+%7&EO2mP8!G>d8zrz_XNSZ95$Ec_vlbC5BWOY>?k9V$7ah}n? zvoLpHToD?xJC0IBaX35Y&4nI@>=*a~gB2{A6{`QdD+H2@(V_Wk zV-Mn(7T7zeWkOX4Y#2IQ-B1F^o#Iu?%MIxZ0XyU`Yji;_v*+&C+DyAXH2~}vI65+O zVc?@cM$h_D7v$G@`REJg|-lm<(OD>aE3SN^2^#$sqW(DylU|-Vq)et-Y$HwS!-oO@f5x zoqi#5Eo|4;50R?dZ<%X4Zg^0)*9luO*trn>fpj_DCmM+ZWCt@a119aDSucH@OJRBXNO`aw+E%!v zcGV6;)lNC8zjmKbRUjvP4g!NmA0BYdz*t<5u zwwc4Fs0%VLHm$6@13RWVSn4h?O(*IO*n7Ppn!hXtgVz!C;?oos6X18w*Ne984~PCchT&fahRv2UfAePC(qS%DlkicR4Ee-7ELO zPC)4TVcal}dMj!%bV5jPz-dC*^6#Ed5*c!<b+f<#NbPOX4+efmSJ z`QL^NE3=FG)mlL=+S!Y{YuP3kbD`x*p{;mpiJVlKx$*+~%@hI*(K5Ki2yf6$R$Y~t z!@*!0k{Uyx;W{CpNBk{@29tY1*)+eP=1QXt#Oafq|E|%Xj;nJn)=t-^ANG2YM;8~)v}pM%WQ1G`0__IXy)c@4kyu~`A(=z*k72aEsB3`N2M3sV5$ zlDpFCg4kN)#@KQb^B|nvNdkt|Sz9k?h^|cA3fYm+!(GLLu>_sZ>b)9qeXN~IGL9u| zbX+osNW#PYn+@&>WcWLPd$mCHTSp-eZxe#j{_!XLh7eoB42w$vFe0>0fl(NVa;jF{ zUefcAP*6FL9aGc{tLJZ!J6!=HE8g9z(8)x2+{yx}@9=sOy9Lv*dM6XV^LJ_;7ddw`G41Mtc&b-D_aUH2hn^8ukWeb!+ zC}usDXws9vq`cw7ablMT%w-7+g)+2~d_o(quI#Vcv^;=lxA`^03wz@umEcS*A3~~+ zLW=J(8S}oevEF`r*X9IIVD<7g40HC#Ler)fnr`(sL#5Df4A1$eUN7$YtVso466^Z@ zDOe~r$QRY>E6c^SFOmIiBWG^(@1y-~$QK{`Q`XWoSVcLwj@?$1)O8rrjUgB7KfBiH z&0Vzwy2Y|1UI|GP)`7qqEGGGJb);?R!7Kxjmv<)fa)dKXOoJ{|DEG<1+35MM7*x=i zEDEu|GP_W{%BkA9@wh{paZ&SSDe;bAmYAIO$;2i{GU`Qoftj2Xw`QyhE1g*2tLT$A zVeVPf_2tiiH#lIt2%sJ)FKdTAddb}uNSWLq|3M*hGRL%hd z&_TsTx&Y;AWn#Cv7~7QcxtThXPaMl-+0#31Gto;nJpOj^3NVd+%nS1iwlg#Nt_#d3 z8n^yxg=92^2raQMx=6No%zL#q%6CFY*fbbu7mw$HFA{RmLF1XaW935kKg&{7tffF( zgZ&H~lzkb!DV#V%JO-XJ1#H=;lppf-+X8)3s|$|mFb$KoKfYuCFHq- zN_iNB9>qh7-)6)f&&3|G)#h|#&w7ZKY;ift7uF^&WT}Ww%_?}j_7y%kQ_kp=o_{%4 zE0*h4R-5i^<9ulHmGdHPFu^FJvY1*Vtb&lUnLG84R{dSH;N-rhP;SFPEi0=PGiUT5 zoL|ZlE*xT9%?5z*vWD-+P+@$6)FB-oCsM;`- zna5w^w6b_B$L8XOT}yku{U|RWDEio+++2W;3cR%^IWh;GOZV_fkI0zq@H2;zcLlOx zdX6aVP-TO*Z$N?C7px;O}wVGF|;l-BjIzj{C7YAwCkG1E1Y&$>&q^ znH6%2gRAAxqTPDzwdUBOT|b9ifb6h_Ii9f5`=QD*I4=aw1=~;U+d^z{o^PTY;6X#H zV*}gGu>@*C7e#86rlgdlEqR>`%^?}CE>HufDlS+K8Fb|F46~tGT|4xUm7Yz@@3){> zCz4iv7gZ_X?Q5OVCbJ3#84fwO{2H-Jdg{9rNnW=xI?LM>%f&3WVym|*t=@GHAqhIG!H(@=dLv$Tr&>J$q$b)3@ zVx~4Q($C2Q$9fZHhn53+d`D@A$qR?|sPDA|n% zY)WQzB{6TU{&PrOW?kmg`Adp{v3QHlTMW*qer0YpZY|^3E#EzwJiWy3n?|cp!W~(r zLDB>yFNBKp!uO~xQU}qA;QOBV34HAM14v*snu6sbbbbQn>B#3~w7oS`p40nDjPTPq z=%JoC{GnZt(7Vaoj<~BDR!nyR=8<(CJ3m(Em|$zVAXdlKDE1#@Tyzj>5jZZ%#uCEp z3adc!r<3->(6_dh{r92(=9~PKUZ7P z%xypRZ|*%W@;xuMJumdV&M?>=*M_(cJl2S9S2gx;O_XUSoXivsb~;Bpoui!(V2I-q zs!aIaZd2yziS>|sDHkcw>1_jB>dY8{Ol13i#DVurq|+<-P{-IOwG6<==Nq#Oz5A4` z)3VO{IJ(UPVbW7}=>fNom%XiA&(ILYrt%|cypg4w5v5)z@~`aqcaTDd_=riegj6{q zN<2SL@#J5L^6yB64yi-ORS}bXMU=XuOT9qkU(tmQb${*!mA*i-53c(yKfK){d_&{< zL@_YEU~+E017==IZdkryo^EF_Z|E?NbvY0PHDgtU4ZSAMbN_o)$UTurDcE*`3!;qo zuimxSE-4N}+SeXJ9W4|PJi1~lRH8_6XxLFXc*}%8v!(_BV?}`%&ax5&dG0)fy>6xN zMv7oa)l*4rUBnUd2N^>PpQU;3RMrQ1oUJ(}2OBPkap#DnOcO%7{_*{TR%_r{_IcD6 z?Y_pWFp42}6n}fC#SSSw$)!dxLry>}>mW5PCnmIe1w!{t=Ts;!`9=J20HKG`%?>%U zzyf~H3@bD1#4di{JC^>-lDUSdmlN0P0{;Tn$Q>@y5xw@(pnpDKG?E2(IM{H?&RHmMUn$ig8CJWkufhJ*#wTUR*YkDzLO&GrVv zd)=lYJk*arb6)HfSx!3a$+}SLKpNnYE1dl(0BDIu8G6xkn21K4(%JT2i7IN)CYxIE z^IykiT{}ns`0C|1z5*4X77Jm!lx2LpS@2%Nbv`#4Y?vAg!5x4#MrR3Z$V?;RO%^Ma z%m)v|oidD16LmcAPUy#9e6lS!PWYb|v;mSQ%LJ-!H=8fwcn zUITy4OK_%)yVBY{)Ypoa_bDk2B*_66-El!5O*8;Hx&zg$8Qq!;PD-Wya4y+T%A|wx z)|pd7kCCjwC+BaZt>x%}-u4sFO?lo8IJJ>Mai4RIOzkhm_e*fk_qne|(-DIrgaI%H@ai8))6Fju*k z5dg%p&d8jjTgY(MIig8f$SwuO3D-5_0?oor? zvCa#fis7iUTc+J))2!V-f3sif^nSlEA-@VICA|)bHRg?K+4mGY5y5J_TVm zF&4&dD0uTp=-%Q&JTVmN-MN`)BW%(xoRg4i{_T2nv>60ve%487`YhsBQ1r=!dAIGzZT`#<+p;86P zq7Px9(`e#XSUl6R~tEL3%)LRK$>*v4U*$5Tiq2Ho=+JhzU zGl!2k_+}!0dFYVL9*cr}GCj3907WRPmK8vs{L$vCQGCu=bSDoik)+ZxpGX2(CBf}g zo~k9i077yJma^@anRI!SF^@%dk=XE6#|3{!-QdQlvc52oeG>bcQM{CjhegenC=X!(K9^jkz=LKV{ z@4r}kryx&*r_Z--+dXaDwykN~)3$Bf-M_Z&Y1_7Ko731n=iQAH|2N`XZ0tr<)I~ja zPh@3fW>tQ^6h8}MZntFZLA7)EAGkP8H@mD?UaM7~K$w62?NVR$*f&0tZ06(p>#hr} z(y_X$zV2Ek05L$p>Y-EJDkQ)VMmfLgnDnL(6c|S#>_gtR ze~5(rMc8L~Zq_n=@>fnUEJN$D39f>YYs**M0OhzQm2glqJeRAF-EYs4l!b5(oQ@qH zjet;s3Z)E$n?vM|`iduk5Y}f}WkcthoXa+hJ%(#!gEVG4lGfp7om|oZMF)3*GBP6} zF((o*{{C&Y3vNv^RCo|&g4=<<^(ELTIk_+*6Lx4Ml{{3$6L$>$&Fbh~Yz$s)5ijdvs}q}-w@Krt2{-X^OSj=p zg=T^IQUgmS%y<{V@x)lc&IWrC+GVq-m@4U4isbC-8R)}Zh&FD%`niqQuA7{5Ycn!; zi7o8b);84kBG2hGThtD|h&K{!-5!OYUp-W4)DYwE&PwBtw^4blo-*j9OGEc*h! z>cc<#5y;C*j|#G~qI*6g-EM252jLroJS5ge^EL6n((55>zCALT#YMXFNkga92Vc zDgZ8tY*r*+?lY<BaWts4!4A-jz-3(YmJLmt28a3LWyD6eg4@Y zg4^(aKbP*O4W3(ge5c16UAE)rrbG3fTf`(``=_IOJkR=K_w=UwF#XGy0Nwe_EzLu6 zKIKvC-`ZW%15*4 z=F#K`{bVrjS3stE-$l~2ty34mtsZ>arg{|O87o5LoyWx@4+N{I4Yg}$_I{@r@Kp@> z1V!3uAwvl0dcGkT&sI%!J9#0W7{d{SyPWli(nG-M3<&*F?bm;#+eq^6v1qgjOihy# z6YD$zFaC_0;YMQ7akI8nU1FrAY*k$|sGZQ!({v0ywd!eV3Opr-8m^RuWmXUV3sWJi z5BQtrZ()MFI)_J25G;ZD)9cBL@pBGH^U-*r9_Q)|T7-b`Tj2(?o(yyE!P*A0T+GuN5wNZ(FwPx*3@A!7p4+qk^Hsy?J0_r~cT;}hgZkDB6i6C20CeSn)dK!dH#6nFH+4m#7p|CJ z0xKOB>8!ym%(=!1T1lKJl|?(#hg$x$lzaYafqUdKI5mwgnhE)O_r}U+2vvF?W0Yc$ zK))Ms_Mvj@0>QWdrd*-H%gO~4i&SUHOJaG|JhE?4(*69-N2#!wd9|{p-U7_Ew;N zIdZ`|8<$HNa6OP0u>mc`+@mfzNAC?1Ru}d_rywP+uc zBgGbFY063-C_`1%UEm{QK+nBf3OoU@=%9LaF?B0W;v5e4^~>0cE1)1^AW9tdPdx~k>cpyv0dI=voX`2{=iu1<9N6}upsr|Mg6 zAKcBN9cZ_6w?11|G{m!)Ucx7@J8K&T;`Ty9>ktp7%oKa3@743_&{pF$ZcV zbO~!L>-I|o$*KZgpYOgXUhXXdFFJ7EKp1tyV}FOEW}TPy87fjOh z!kT3r%aHG>Q62dV|E%1^eaSnwc$s@VY3bxO;NMBDys z#k%u5Fp1hDjGFWBbA4f&w=bOf#F>O>-Ia-&_J-{C2BS^i-@zLz%9bg5+@G<^vR!_# zOaGSh&wZ{ama?$JQtU>Ik8tVgnASF-mF0yJ8W%vl%GNwvD3h%oEPq$GKImNE+XGJKoGukV zy0E_j;ss?^P0VQ$hZM04Y(nJ0-^y=Jr@;tXZgNjcwsqsHC9XK{?HPG-iaeZ0pRnw! zMuLS17@}WD`&kuGl0B6T5=ud7pNjf$6dlu=WkIUlE`97uqZkf3>8~tB||jp3kk&dDzq~avKP5@fR%O)Gd<(w{|c#xzO1e zLIeO1zjp=>4%lV{nK9<|2xDq!l8Ei5=>Mgz&!xf#%jVH(-N1Kj3j)Doyx-i4+tS*x zunlo8N+~;$dKLO@6{=9cc!hm>{;!=0pO|fph;5C$IV7gttAL#_SnAw?GI2XfWd1Za zrwD)`b%7>T9$BRD(mU3%*T|_V=b)5wuJ}I(j)+=?h}t<(+4+zcO$EPrm9l|Kw8m#= zxNsN&8k}Sqf?%1a;sCnh*&Zg?JcBk+6$MURW8eK`fU^Sj`f@4Wfn|22OaNo!+iCCreQKilT#xX63ehY6DiS41)6_Gh)5?e4Iq zEEmUIYSiI=#qeQs?+@6y4zy|$#Vp?j6T@h6=f3BB5)b3`^4MoLKWEF^JmZ0$-mCE;uUy6yH`Xykmh&_EGP}(_4?`QuZtII2`am!7?q}ilV-PVMPGuEAOoh6Mk z73X#c$SFN1k>+bZux!QosUh6A2h2JVr2vStBHrOsuTbq?U*H~q?;w7FLjLLl_T;_y zb#yP8VJ~N3oM=Cf|FFcEuIW}zlb$@z{MAnk5LCS8s7@EgZ(rpZRCCD@NfZ$0+7z@| zqq~ANxwO^RFhLemKY>-qN)G<`*hE`k&%+W-h?2@X%obgO}x?g6yM8!TI@u=M5n1>STbUi$EV`%bxMr*XSsa<)dTm7dhZINC~+Z8 z&*&b+f6#^lQfBGuX(hHW~>B+f%0BKYzdPFH zl{s}LVL1|Q%r~e;oa^8*VYt0@LL*L1uz3e=tr~20p64qZ$A7pT9V7Lw4Tiv+%KdQG zUrrupq5+f>heON&ErqS|5?pCVojFywK?xfFZgUOlZ}5%x0&un+w_q%4^6{;Q5{nR* z4NfWGM(~ZDO>=7p*-dX^x@|FbC6d^?QSKWC?N<8KbWu>Ca5=vR^R=jy6yn8AYkmh= z-4Az|{{5eXzxo6zptSL;O2c&!!P;o-c%w zz=}vkJ+LPh?i{wY;3VMu5nq`omqC>VXDc@kip?qdT{_SonQ5JyTuWP`qp2BOrirqs zx=t(O-DFWVsmVUGI#M3>ursV4JIkKjJ*H6`m#k@tVwy4^2Dqy_+^Ak;jU4^SEf)7` zr1;)@a27n?Q0K5<{`0dDDJ93a>=IAPRGdZ?FbYr?T6Sbh%(k4F(0*R^hCNsrKC1c4 zwLnD6ViwKM;`qT0?&GS%Ex%7e!<}s>H`jo-%=O2AWOaSroO2eTs%50ZgG=AB%ubFg zA&u~=cYgLS#|1eB2e1XtSvC_FN3V06sNp3Ol^93hOL}r()-N)NO;M8Fd31NyOoHh) z@b>({d3{Lar{{K6k{-PCkq4>oA=I;74db zf8GN_N=5=P!dI+lMuM<|Xo@_r8*^-hzPn)-`B||(9{AEiej%9Jc-)CZ!-9`_e+ckd zZN8yn&Pi$&ebU){RfLX?y@TzhbnxT2aEjx(7h}Mu`%eJ>1$vCynFzUPAPJuu>aJbQNO1(YczURZ*Mkv^QN3>oP zm$&+gd4FMixI|&!a2Il*5=J6X@ydLt!({Ss1ci?3!5OGN!POXRkEh?KEEJT6>0lE+NgFmvn}a6lbk_E z25FrpHTc;xF4?KJm47(5_{+2|CLPK8)aWy!Lxo+3k96{cJ%Od-qpsy7+T(=EowQo~ z3AVTTH>C{jHrtS%#8ceGAYNJbZAAiW6RN^6oRoJEZkhxfrIa#VA9xF58?aW9D z*sO@8eUbZHHjla+bIeS6rp8;cjuM?*i?Wl5hcjySR;aoBqIe6{%)FwCB;&*qT*olZ zFDl5X7W@-Df#LBzia1~D66Dfd7JqYwHOy5&-BIFhL8&wh>9Mbi_hB*5Oj%#L%o0w> zi@TcZ$pewC!bUBEN@WfAWJPLf3Q!} z(9%r-FtC$yb@RON@=OY03%A~}9_%_M08sVJlYX{i5Bow7{!K$YFt@C+d7Xn z7V^}fGRx#?E3(LdI`dyB5)T)gbXqy!BCmF zlyS1oqFql|8bV*kFE5Y0y7ES!;MF+t?Su+`o}@s`Y)!i9#5#tHoFawI z5=EA8&5~b-pFbf+h}_GE1)P)vQBA#Bmp>G*l-YK^0iPa+opuQXsy-NF3Rxojzaw8k zMmX_vOZjJEu4`R2=*qEn{kX$DsWEfp%im6!A3_XVq5WOYcGK^o-v^}!R!QtTah1h= zNI1wnRfn=EYo|IAq3l{$>m+%KBdFF1lG9!LqdUi=SFO9F`DKEP`%XL5r$f}sW}Z(z zMXh4|aT=dJsOlj)_586tO}~`KrDS9=gFw?fQTL>)Q*)_Jht7NQGIM&orkw!gmiMLt zSF3F4Pd(;^T{UJ@U3=V(QZv1pqf8!Rw$;zgBR04aQ2+;gFb96;wyb&zw0sKmhwrnz zXbQAaA-usoFFT5EBjo z2-T{R)PTG(`>6C?I%Xz){}S?0RzZpU=zC$HVoD05GqAcmXmhn?-NYhpZS=Oa`SH z6NSKo67B9kN&tykj2J${;d5f_(Vx!f{@%z~b?#;7Di+rF&Bp2vlo#&}7d_cn<~pj- zcI1`2kfU%i8vR{EFu&-0GvhGA=tH_4^H&SA4Nv2rgkmg1npN^270-!A!LCCnuK7z? zV%$+e4DHNAHreTDS4MP)m919y?)I1M_GSw+PxnQ-ri_N=##p9G6V4H^m0z4!^15K8G(zd!qnT6*ImeL2dDp2Gl=YaQ))&?6C#6Zan zkUNC4?jtXPXsItGu`|F#5D7boOh@+;iELo{*gJllxQ>YSm?NNkp&sHAPbbEOJsj|DB8&v}x+@UY*S6 zz+;%3&EVigN$(}7t+j{a)+J?L`wJv_eBEcfqLRYnN&!Ik3ca5S123jk-SUA7h;W)p zb_>P{d!_V(yNkLhPYS|>JhS#A#URT`=!?=v*$cZ&dD2czntCv`_0n9*UZMV=p}ko) zO;kS`r&*6uF3dRUwmUks+EtaHdYSi~&{)*Y|P9vU-1M`5)qW?H?Vyxt<$1R|FLYo9|EG}J8<4?e8i z@*|l<@QTfwdU7Qs+Vlz@^R7t)viid5_n_gVtod%o2VZwf>7lGIq*Qbm0Sog-N! zK(H7|DzZ!402s)R@hT@*@?qzz5&Z+kQd*rz7+W@0EW0kw4K# z{olu||93|yX6s_}zg%FK`adV!A4$d1ES(9eNSn48 zS_(_tK`pJdtWlbJEiP9r7ziyrp9k4@23W zO<#-^`A~Pqm+Q8d?0-2o*dEqL{QqCn6Jb`g>V2Yfe#75D%s7TrNvfo8=0bE@fdN{+j}< z!nkn3&_-CG%6y?*Y76DB$1eZ?inO_^T3ZFRyce3zmpO|a6nbh|9G(SvbWNOk*8G_K z*rgqe+DMAdwzS$Zpr-i|exYT4Et;Sel&>VCg-u%l?)=%ETS(+-kR>~IHPtYd&Y&Wn z)r9=999)S+3aXVlG)N@@qby%`7S>X=p$)5;)RrLk^y!~yrX5(} zG(KAsXbs|1^WLR+%k$rM(i3Jb<3UydQm3++g3Iz?#I6PUxd`WPq|EXc%Qc-!_e#WT zYR3b#?Rfe6Y4@^+&^-X}d>3Er%40J${fZ$(D2?fZ> zY%F;rMLYjuRfX$MoP~?iK2v#vEoJU0N?joMTkhh}Y#%)NBSSt5Q(on=q^h^Bb&-0C znR#)ATk`;7T7_EP1wvO%Q@L6ZGW9JF<*XC#C?4l@OeHh%m<}D50Em+d zl2<3SBv*K>QHy+}{%WlSrUFdb@s(kA3$_qkUqBDP_s{id`0dn7(&9je+(d`;_jMOe z#y4L-F*||TUxdOC_e4fp=ThOD|9Y<0{C(6W)V)f3@?d_`X1-O5sd>vqD?0GGmrt_C zi%Y@>I@j&NALs+=RRB8RvG?vZ55kvoafKDt_0UN-4v?h9!^ip+!^FPW4_>Kz073ESm=rSRjW0ZZ&T(L#`WbJqSKNtmeg>!JcE`;QP zAq+1TvYX;V;2#*D#a(LCl#q^SMC%oZbXPa5y$2OlhreU(Um!6A^c@H5&3*?SWFg)_ z={rjHh!I5wf)VyRFy4KsOALj*-`97CbO-F4*B{GPLKMi*=F4J}WC)3%;G_%=Zd|!v z-ywqx39KDZLmRR}M<99lWxw(o!5&$G`9uU~P-dOL9)C3JVQ(Wa@fEk;L?ZJ(#1y|k zD7m}{O^c_ivRKksyadcmH{XCC?Jpk|Ti{ zv$%DqYG_u^dE(Bw7PEz7R@{)AqgL9>wSBSWHkCQT-dR*j^A=nXIw=3-ozgy0Sy@+F zIesE##ihKT)R8fV9j}?K&>B*eiNo9e(vTV76l+lX*#WCHtb#~t~cllm#m-?>OnS4(SVZo$0xHerU^Z{bJpEkLppD+D^ zd9`#0ucaL>a*L+s*{~Lmq8Rb;m>j!;o0}ceF{ePHesW?0S zD7uI^+d2NXz~jG?u4YxM|A&gqxA244q;2x=R24-oY8v1FCjzY>NxlRjpvpLm#Jq*z zVwgeJp+fgXEr*7R`U(6+d61(ERwRuYBbV9sa=7huZS30Z^ZkL|tGhX4gb+e2J82#- zJ|`+g!XdlKTHhOwD7Ncprwf*UG0}Vu1L`$7tAA%&_E+^{(<%yWpU_y+hIu0v^cIu+-9$hQyfAJs9A z2rhM}Vhx)ccG25t4qoBVKiwkm4u7IPL>SBU+K2{3b-`<_)xr-WR`rn`9!)k~e8F1&n!v#x|L&b&^wznW1HvMo+2k28kSRmobLXv)-cdE8&fe4no7a$l zS)y0n$>68jRxM=M$bXwg*K@u3$Ds}s_2``b2t;ZRd=d|QMRosfucwgvp>ue0reJCm zK5Zz>ZV(TC7#T4Syh=eDSscf>jcTGuO}UiUNy{9;4@XKHjl_;qI?ILJ#m$AXgn~KN zavGiRk#I`ZK<@CS=!i}=72$mc8hwaKs*hFt4y=4rpi!N%j2F=-c_EGGRg^MxvbAx}6G-^&n z#21iX@?8^KG+gOewD+$UUcM8q8INh3p6}Ot_+GwExm_G~6h#NVSS;JJ)yIU+$iPVA zfouw$ByG7p&l2OFGBxZ~)X=p^W3R-GhOz2^bfH&cxbiOcmEwa~08HBtHfQ3AUf?iu z=qmO&vW3jKJY;4Zu0E{9W?TZU@@-)OMlRH1hzU%j-FAI{EpG?q+G)E1Dx;Q%d+dNT zabMp+^*W1SKw6}|WNQrp{3={YEqEdQCU_#gYOTed2IGZSXs!05ePLyNGpQf{nXY=` z32?HS*+*uV(UOnt+k7k~VkLP1wlSQmHJ2ydp|Eg`Z@)s~WA}sirkU`&@Rc1UvkCl2 zGoqXbfiBtlon~EVn*hLiTb5-bvU281hI^S=jU~EsFN*>td{9lMwB-a<$J{8f`+@dPk~nU%wfHMfi#8%1HjY-*6;SW zgXp98?r@`@7*yNLLhIHf@2@KEW_1KaFrjf>VB$S~+rTUq4owq@TDqI#~UBK*cJVnkI5s6tU`_H_F$n{%R+=_QpE8 z=@3$`Q&HhD_Il%x?pMMFeHu@T;bfdG;~++7q=5xJw{mBVT5E96bgRyNQIuZB`~jH4 zLpw_eKWEWH>SIOh;r06-KbJNGFpD!_N6x_|_&KW2sm&u&Avqg=Ol_((zD7pcB^txZ z#>;oK%|ncxL#?wUv7oxryNCX5Ysu3#^4j&tIiMeFJNF0{^kF3-C(udkN>Z+DFn~Cr zRMJoa$_dF_#pZOK@(fVGmUgp#4m^VmneSHSTRYip^w-jWm+tD<=!deepZ{YhJ?6gDN$is zGW@S;hy)W63&R1`31kvd(g`fj?ED!lPlI2R3>jsx*hNeKuqt3Zgc{49n=>KeY{m=TdCagE! zkwb2R^ZJ5i^@voe3GM*)N4$Ju2r6hx2z)6f2EUXB#TW*};JYnZu1hQ!{AqZE0Uy5-^`(ajA2D@28lL6>+{&Jt(I=VDB!_pB$gV65k@<7sWfCXKwt| zB`eZpiSiz2--n;=Y1{s+6PEE z@t+r;bb2FfFlT0|FBI7$hr6CdeNQ(F z)TNx#AoaS9MJR#s+Ksm@Iw(Ih;E?p@T1b3WWw!YvO%;*7ZF2WJR6pza*o^z;urve2o%O8cbw!I?oE4d#}=HIho4^pH-sMzUsGZrsbsJ;G;sW9dA z*eT3Q2rWiP`C@_dBYaB;o!B-W)#eI8gA^H;5I)fc7GcTH8!-vHutHSfQyk zmQ}kc%Q0F4j80l}c`r`12&m%C1fJEMowW^q+Ci8SM{_E1;m=Q^D4nrGZ0tA+V?`e3 z8p4*A#B%0NeV)8#(xyX=D6v0cex&@Vi<8m$ENU}XJ)D2xX@^Ld*6d3ZIWsdYu$Sgb zZ1FNBn=V%h4$f2?$VxKS^(?IFU$y4Vs){Eh<48V1qJ-D)c@^kn53%AvTKl)t|HJfV2{#sM!p=g-BW|T`0}xiEK?F!37t$ni+q3E zX!yBwW^D?B3Ji~M;9ECwWg~e&(;TK%R@bz~kYHF?vSoV)$#z&WGbP3^NtARf@f{7e zX-s_o(GM#u;cUt;Wr0@ta0=K4fu1R@0ZfZ1`6vgEw?{_>e7!yQ5fvU2jdq^mYef#A zc#O`4G#cO~B z&O6Vr7&MZ(G!{$9^e&J;V$C1X!XhZ+r6fMkl5I(;+z))XSe_17Sp)2;xmpIjoxOR)wrZI62{bP}0 z;m=1LT5yo1OqMN?oq)JJNM*^W=Gvr7+whrP;A6_LP&-pNqi5YLm>;pwDHh0&t8}K> z3VrasF1nX&`MkwQtGrx@4)@g+R}eoEY~bE6PnEPCGH8*0xqk~+tYk1AMx_h-O*GdY z9zL>m>L_GAnm#*jX4#Va*V)yg1dqHi*p)7y!dR=jtVNYN-)f9k$tKLyMC~hEDI#Ln zamDjW2HT9Fm?mLGo`iM8(P1@Uh;_DR{gKYk^HrhmaiweV<;}R?$LyM z$M}}Anx}ZPC{8kdU{&3{oFG^g>aa^dGO~ubLzT)IlV`T2@wvZkG`TWl76`l3;{98% zp3m44E%}Pf?{rr3RYfRQa=kWRfRb~fHBsnso zWjJe#*kf-}gApYycSu#wKmeMBVsY)93JAPZqs-A(gVG6rtG43N#Z&9Zuv__v&pTyY z{eg`-?zS0ab`;yZ$75Q}gF(U}f0UGr71WH{z;qHQmNcX4$c}mhi-5i29_z-K+Z>?8 zIVZPuB-QNHD6UNo2$%A%N?c`4)FRHq6(3(k86_P_Di4y9$&KhI$#cwpkzuKE6z;SV zJ|g9-ag_f3C$V+__?YtmXR!aBr6|TD!{~+he)627#~q$t?-4|uwWMWewE4zWb_0`S z(1&V}%;4?;jY+NTAirbgh%e+xIRfDuaG@YU7rP;Yp-D#q92dxt%UVYnq~Nu4U!XN% z<^yg}%T9FiN6+I}HEPOS(L5K1*cu7REdS(pmxMxTGn1sP{fv=8ZUQ%@N4|@Y3ub4b zFtqs@KOMHrX-9VEMa7%UOUaUIYJ<5iRkOVdx`GVc>PzN1c*~h|vVX&5`Jn}#T7Stq zi|yt|x#8i4ej+`emlNWnTPU|UgqPdn^VK>2*(LrZHa1KMBo7Hm{;1@Q0q4i_4Upy< zED=e%?h<8Yy1cd$v7zT}-Gnf#P zQ?)A8Ry)-iTAOR1RL?3kcJ{=RVrAd45OB4v^tKsk8p`U(qhAPp&{5|dxa&vsI{>$Z zG5m#P{IZR$lxk{ivG1d61S&eZPhHyzwae!5Y@SV%j(w|?%7}~5$e|Vn>fcK3p7~bN zoITDV!Q*A#&MeGIPA$&5+5%}ae2gO$Oibsb*(@~4?>ec>e@;^aP5=M_?SU4+aYM+U z9&tHK*4%Qop5nGk6Uf|JN%0dbhgPofq28+V`mdN0xGu6dT$J-2YK9W*g~H|5(#(*m zjRgn<8%O0dM6oIJI)U1E%bbB8!ST$A8#a|TzCZ3s(7RyG0tqe@6fEfhZqM&J`|V_D z$GV}InOiCF_)U?jIONeq#ZB4HIN-eGgqD_sbcLU+*SpZWsPw$hyhr^M0s1HX@Vl0n zwjeWqZ$Wzz+iyjB5j$=#0(wS5zJYIF+HYTgd-_6lpgun7KR|m0PWuJGJ_hJN$anot z`|TjUBTutK+;mM@%4DmT6VQD#Ai&uP~x8s#8 z9r%^_uTGxjFbn2g=B6+a=BM-Z(P*{@%!Hx$B=*274p@6R-ee8Y8Nu_ zOS%pdxRd4d1@sZ9lkT(@qztH&>$Dbvl6f2Vks-xFxSRg87Fpx*RLHNoR|W_X^3w$* z4fq=RJq=n1ffMbKp(if&J#A(-5|C7cpq>ntRoBD#Nt>U0G)v?7n8MtGV$8=&#z#{p zWUerFgTEZRDe`3DRTk?yFC97S!72#PDoMxsqtlLQlfQMFYy$}h`6&Zx3cRO zT;NPMBqgGHEmkCkEX5=mhEPiwLJ?<3@!UspusZTN%Od|m0_X{L|6&&RMtAt&+<&ng zym1QOz(j6k5E-WlUr|Rc?Gefb1P-ns$L-_C4Ja%dA=>1w?h0!EY?uHD{8KGR9Jf4B zghyY<_jFKvhrB|B$9Pb_eZd(b@IGPZf!DZ!>lI`N_N!^@rZo~fH*pw~ zhaHgEf48)S=j{c``j(dEhe||#(!NU#IsdQ*w-gXpr>8=oWTEk^@37Yn4U899 za~3u}SUoaJW9KrrOLo)B%jSB z22=&);3Y&=T}|qcNJ5bRM2*Fb!kQd-;HDIQ0xkL>@o~(dn6yeC22z_;;=BsdHLPiw z)IZes;{x0DXEqt5_@rORS7lsYiVq&6M1SG=5GY$YaC--ITbPnfje+BQ91GE4TCj$E zQr0bxNdSzRj$DF9U>xr~RQw^v@nbQDVdHLL* zcOwow5COjc+Mh8o3yaRd$zkOl<2~C#T8_B(zP6x&ryF%Prb97qNp_}WU3Z!l;|-lO zBMtYd*q&~&_4ncpoObpOw$7Y(S^2Ofz3zr{x<%|5@(W@tO;n{$PJn6bbtB+v7Uz0! z>(4SF^=XdVu-Ad!o868#0vOXz-^|Q8UzChnmD^DTk`o^Y zt}FV(dM_k+31r|Ad-iQa$r--)Xm527{+cZ-&oA0fn9xyf4qcA5)_b`t^?cB2DX|c?(fh-YBzX zkn5&G;o=r!LXbb+0BB1TU30yw4H<>JtqeRlMoX|!X+u6>#iF$$HJ4Z*?K_sYv~1i{ zJ=v>^Y}+=3pdMF23esr9ifsekb8!Q@%qYy6YmY$i9~J^6&n8C@aj`#S4eM(N*WOns zn^(u5Th5H3q-G`x#^7gY&v|5xT`0VFqi(^&tybz=t4Gz}yQx*Z`@{X%>rcCQ5s@-R z^(6J~z!CZ*eU>tK6K3D*;&*rC-`B)EQzwZXg$0xA_$lKa&=@){OFGT56GF>0>vb&bNX zCm57Ic^|p&(14#mY$j^1ke)YG1cksYA5TC2HW(J&UAZ3_^LRHZ@GK21s1)|rl$XS} zn>d}9X0LMpEj!OwuYZNqdkdVwRlc8N@F6SkqIK|egI@K3hu#}=2i0lE%@EV~*Ka-= zU%k$8cY#?Gk~(JWW+*pwmPAIkQ6Dd^!v9gXks z_*Sh2w!(znvWjg{d-gC;>ija@g(a7I#W5bXckEW09~_;@4GZvP!_C@#H)RFtlcnj? zk4FYN+t}>o-n$QX@7YDEU z!A>S$9T|o&aqe&VZTy^922!8J*fgw`=m)2o336zp9+Ix-6s<>>{-6KXM)q8<$Q^LJ7_C%`y3^U?cK&(tRZaZ>K-({9^z~s zq;3f_&SN_A9?93PXue$&!s9sPFOq|q*QjV}`;zFMeY-zjv3|d%Cq3hm8KGl0qyBtF z6m2S1{|x&%tZLFLxo)n2|HT3^@_ILpx=C@c!#*7oImtym){4F|mMnyjk)14Mp8ZW@ zGKz1+7)=&SlujBYROptbql%XRj3J|qD+?<@C__fKs#teumHN?b0``4DI z+xHE!w79h}j?ZAi4+M!Lm1Otm0OaT+IiCXY&zZYUE3thr}w zR1Avg$s4=WQqE(*IgB9PIKnI_aa6`w^!d+zdpoGl&O!zP$*~vU=cv7sk^Z?`+dr?0 z5zCE^tH&WdKbGZU7R8F~wfHU#h*xD_ZV}tl$08|AHX zK0^uao%&?gK9W=;y*4uS*2zSA4YgLW4ZKCXy9zo8f)l_s#lnhE<{%T`ll@}s@3r#Y z>x!Vb`IiPj+JmOy9!m|EpDo4K@vd(q;;jO5%9w3wvY6g4-u%(1Fj;%l3!WE-UhhY0 zc%1}my*=dWiRRJB#3_^aHlnqa8^U*(!wge|EVNDx_h?;vD~gqwdtfQr2~62fkS9Tq zrvsKkK8r1>`v6#9A({E4Fd#)2<=y3I-KW z5{>Er(njrJF^7Y)Y4ruDfsLh5*M~zIS)n^VBaC2VJLIa}*QT(64I}VivqU^YrrJNB z)*^^Mmdr~;+AOW@WgBPPzm3F-NF6_$mW+B>sr&TVFgB?orgx*cDZMZShD!&uD|@j< z`!dvFhK(!xEq!w#ZncSx@oNN7{#74kK>8x{Idy&TBc_u~eP)@-PK&_(8%GD#oEx6; z?u0Shh)V0T@O8oyo;Ibw3No^T4GWRL)xO=s%^GN94HG?%M>&yC3KgmvE0`>-=LlEe z;(YDcZJIuALPB-|C(~MATwJ~iVoKR^Ov+gy8uZNCGIqWXpPcjH9%mHO;dV?XYPUhc zXn?-kv4W*_vAWotX8waMgEc`j-Z~!AJZ{+7m#Sbc>6A`PI5jrUYKY>8GEcYf7G@%U zeVl1#-n&dFuBfHuKQ$nq!5?=Nm0raqGt@eG}CZDD7;a`#TE8u>a z>ULSXp@rom{-yC@saarGZv(81?<*Iur%WpwJY+qfO(rq?-b+;Lg*pijHlM>iMrdF) z%q|aVU6jqkaPJCN5}P`p*ouH)36tlHu1C0G0Ne;0RJ{mHVupJ0nc@q-nZ`a>c1bHT zMz2{&977|^^&7ykC-Y!8j=43T>OH2Y{$54^xc+#Zni(CY+?l%I~p{@!m8 zUl$^{&L36YB7eQBcG6P1(7d-iL^JqM;f^q<^>f7<&NH@>b|%?$1&U~mb>z{ai7bz1 z&hYqq1V3kjv&Yn;G;x=aAiczDGToP4oQE>*cyL8VVk~lm*4eW;TD@Fze0eLfPMS9O z$K`{u8SpY`OmZ}Wu{9{P*mv5-sP%a#*Pf}}m4P+bvxu>dOoAiX49e7Xhgd5a8$?R= zvpk6%xZK$`A8Wd14pc^!SB6lW;9I_A4m&Td4`-`!8BTImh))AOU_(@g)f#UEx_EF! zmn2UFlNYK(38-TpOC*9JY6++&vMY zj(M9;d_yatR&&EzvGHTW8j+mXM{kbiXsV+sraDclI8Oh%HudcMD2TGQ(|BANIph0P zy7ETp&7@=O&TGcfae@hCpNZ?I-b@yEm@ptXy!-hYkN1`HNrtORXD`(|$bfzmEQQ%A z+<84RA6znI3cx)EdItvFN+j=>lR(q9xZyKm3p6=0={QX$gje!cDSEFqdXo$Sp z$b#Vsl@DT}s(D9BF%!AkKxSm^YTw{Rto)H3h5d+0a`d(ksSEAU_nvfKm!ZMHo#VD1kgM~F$vSb}J4o+K zz3IRDq&Yb;@SWZ}QA!t(I&;>9WaBk@=!x^#itBRU<@>*TtO^JT;gxTQ%{vkZh}eJF zW69bXn+O^>nHc|{M4tZ*BU9J;=I&tnlKlWXOGL$vP_9sw{~Z8m;-{9Vpd~;*l!9Jd zw%oczsKs>U=m0Nd+ji$3(ee|cf5aVf>b!Noio1WEHq}Ta$@b=VWaN67p8Vi`xcojJ z@BI6E$LVEvEetnMK$oglzZPUuB~p*sXQ~`C)Ioov$Y3j69aPfz&|c0Jx#bR|Cvxwz zU)pOfKxb>a!c1*r*o1OLWj3X) zDdP2A6?GY!sx5Up&@dHM2-0E#ay9Z*?IlwSthQEJRUGu4Lf1r3PSD+!gjkf6r>-U? z4brTLKH|My58)SnA!3P!S$P(}z1=)}xEd!Ba@(8<6L*`Zd%x+|^j>vpQY4nR&CQGB zq}Z2VVGS6L*kb~$1Wps}hmkx@bxtROZ`EB|b;*R3%br;=5@83#w<@vTrxl5d#BRoh zJdW-?)Mf_l`A^OY&)KWBdC*iPN+(_Si+cLS%EdS{E8a5CXXQC9ovdRvb^6DZ5+6QE zZxeG#n!=~>D%{2CO@V-wg*RaSl(?4sEwKWuf($N9sFzH8K7SU^{A+h32a>l$C-VgN zA?q7z6B}I9AyLB=UA|+7=q(z!9nYU3>;XC2k#cSQ6qW_8Mp~)Gh8ek22ItIAtrz&z zQU$a$n`>A%&2GU!$_Nh;z8FWy4{rUb`Zl^tpTy}kZ3ULhVA(LI2U#rNv7=Jp zrZ~1FQOa9O_nDQgXF_?;r)ixn-YRw;(_zW(u!qHYYH?LQ!HNkZMN}HBt`LDuEvH;E zbhm1LVLpFQwZD;6A5<$&UvnUoI|WV>tSRHj?PNmp%qUV-HR*msSbx@;N~rMYw)vOf&%U z_)}p3mpjT1VjbSnVifA{cjQtW<^gvd%38rO>7b;3wliuf$ahVC=oJSv9_5=7yP{v! zgfwmlO-Z&NF3t%d&FC82zbB~H1RpQOOaA@%h_SSBPZ}??!sF+HbO^HaDN%5Tv+K~) z!E=XV8yo3RRy)-=$H^~!J5TZ>A__-3r5&jQrr;?F@wSnXRr*NuiDQ$?Nexbuh;vLE6%gnPj zT7ZWN7r;nF!VF=W6Gj#^1pv~Dtt2oN2tA5fgx)vv7Q&hl$D|3~!QYEGd8o1UjF}*r z7!JB}|90PGZ}Cun{k^&I1L5v>g{5+=S5F>NM4ou1im0he9Hh#f5R}`4xTmZ%;0bwn z742(*g@sQ8pJ-`ouy_l&YQv$9g11iD6P$Je@6)Lp%K@_ZpT;r5Pp?9*ws9L*kfg!KgiNvofysBAKdpNE#+ueV!}8oxNJ7ha(-1$EBaX^3zUk z<2a!9Gl)lQ<7k*Z;KY&)qtmzpV5&)?1Q%S67Oe3b_nKZa!SO?FVus=I3I|?oorDp- z<-WTd*O5La(YaZDauTUeKHHg!;}@Q(o{Q2|nktM)%Y&ljNw0Xrk1*BH58jILe`F(CQ^UlpFx>@EbGtu`CC{cMXk zba6hwK!rpsKVST$!$Jlg4(!P^b?ON$Xv@TM~J57ZgaK@)@i~ zrF)PPn5SZ&jEYGmtxjbsZd<85klSVdha_jiyXv#ao{O*0%GuNzB~;!-)e+o~ zb@!^zNvt%6Gg(%BP&P}NkKGM}{}+~CPi(nCJ2{PKkXx%2=Q0?Zp1N-a!a&h=p6Fs! zPWvE*&nEC*360Gj6r;RbxQka?6dA@ts+>odI7|6OfhRrJ9qO69>D@u+*#ctJGJSk+ z6pYxN{__)W@FRHKzQN>L)#n;K^Mk?ogW|AV#%HXA&FN{VEi`r)duW7(j-`?7FmW`` z`M!`ZmfP{iJ)R}r(GZ@u=F2{l<<^k;RFnsh)N-Gmr5#daU%hE%hrd;($lU*FqLTP~k4)+zZ9W0pXuHA!6= zQbp2Pi#UMP3)q(n%jg3Cd#9Mcidy~xcCj4{t-)PYi9s8OgIn0qHue}>v+&@N^l#xZ zcfCQ^?SHFY5!~udTxcL5{yZQcLjPg)QZ=x4F_Ex!ayGDawlMfcRsZk5K1~>R+@*wS z?3l&-Ru?PhRY*7^YYk$JSCD8sjrzLin%@MgxYO>;i6habgOj6BVz|B92yE>7LSTea z@BySm0`);0D7^t&5MUaq#!0`RJF=`<*JM_;`71x4+Dl8#07IBqyANJlOEnjNRc`!L zo;)A#=g4!(3Nt=k5UUOp5z`#rC^RR~u+=1QXb-6n)tq9On~1Q8r_?QmC7c48$t9U| zGdV3}6HULbrI-{lm5MV+ri?AlOEUHa7JkRbWr|v47H3e&G%%M+GRb6~f!T+KncZ7p z=g}oHadSt_px#*{%^!S8GotnRavQ{GJl@nBCtK**xE4)xF#!^-dj4m0X~k z`h%D^HNn#vs5X8@rBJI`%}ZYIbZ8N_S$%i=t(J1?nEtW2M(5F61 zpo)0IJFL8j9W#jXC2p9*w}~-He!yo+wcRK~V&(b_xe<8xEzW;m^=0#Q zT+27VwV4neLbTD4T|UVw9Km3yELO&~FZVbUD4miqbHX|~5}zoO(?{p0 z$3BM*_l`1$xe$01U@qsB#+M5{?D`m-)$$IGF;tXrEbG_b!-0BcjUa+tXWq$%DbCy? zOf(nFhjgh;AZe{}75C<4ygo0p;jn>x5vwKHl?7&KRY~u!#eH@GBZ|z=^U|r^-~zeV zc^s<`_OiEIn9o@?RB|m(;=ONqB2C;nqzdI+p*-6#L`M)Kj<&}v z`uC)yUaSQIya3;C)l=SpJ6v?&wt$p29Vapv`5_~9>EvEVYc}8E6xk1q8PcOeaLcLQ zoXrF;se@%5hCYP`Q6!N1!;=-t$jbOBcytbgHITs5-VSyvg0|q5@z+egAopAZ&usa# zbVr?^pdnmpF>h^rLL5 zk@tuMk2}o%Ep;P2q?T0w`U+M%k;(*U|0)!-=aXy-vEcV;y%ujL?z$^>M*Nw@dW4}2 zjRF#C_4Bg=wU!WBhI$feh~#23kZ7!==1E#)_9_(sc-|A0AJqg&H_%xY!UVyhh=z&F z*n^N*;BZ@+qw_aNlYdI?{BiwBPG%#y#oNhXqZon*#a3Xnck+{~sjlSCWyV{1BbRxy zSh-FxvhjKEm1-dYr#Xusdf=cruMKBfEab>d!KQ}P19_jadZl8Chai;hu>2}kE zV(hrGt^26Kx7AvD`q$ts3=l!8lNG_;W*9$2A;U39Z-1i^iq`enWZEuRqX40qFSppR z!Pt?VEoZ!~sMg8!jf7N_)YN8dTSVno>8}mT%0Y2PJUui`e0%kz1~Gq9q|JnMqmxnt zLV$ibhYce74fGGMBU)}JC}b{%JuKpEL@`EXy43#GVF$u|VtP8gF5sY-Yk-hTL!I zZlDViJNQ|F&71g%ty}hZ3Okwu>P4i+28*n@HYF$-vFo?-j!A4%>U!{>KHLh?>pSvh z=2AnZ)1A`0X6E4y;urD$Y#YKqW=@beqmn;~UB$8v;9W(rm5jLtrFjKoSz}tPI*Au3 zRXyL6vlFxDkQ{YSOed9d!>Hhx*G2q#Tjl+9F))H^ztwriT%chSV>sC@I0Vy3m= zAcR7$0yq%En^B%u@5@vU8W&HbBRP87l+6I+%HOmn>6&AR;rB_fE_1KR9jhbIqqJl+ ztLDMN4bm4pA+QlVgpn?2-ZKjzJ-XD4A!P}+9+=>>$PYoOVkaNY#0uUJbN5fkXocN< zS-HI)suVG&#F0T&8)g5v>is)RTz=snBcP$$@02)HvD-_F#%% z2$4<=yb~7A!Us|;-O|J)h;m|$^ytuZFcQvXF7K@jD*S(@rXfb{d{hMRfVl!%UUGKs zv9cSljxjy?4|HFJvKX@=(3=^6i^d4vxQ5&H6tf!bCSQ}S%%2q)R^D~fYO~;+dJ<61 zu=1s{I*V0G^3~1q;-yuNE(xRkjvK@+NNq9WDmBa)QYcAebTWdOycYOHcIS^a7Tv^C z2lLz{Qv>tdL{mlck5W$Qxxq8e-H~p@;vC6IoG5rAiOX-6-J+!@XAoH4RkD2f1q9uiJBmpg~c+4OLZ*};rmnr)7o>o}S%u60*0y6olgcVT!5pM1EtOzRzdWE|tIKyd=TpU5W+gF1z_fTFn_ zOIevHk0WsbJC*DJWQO?-b0*nBi&eu)jij%srk>-a5eY(Ex%n)_Z2mb~km09zeRa7r z(6V=-Qj^H$Ml&MjY!WGKV{`NMRlB%5xzfmTyr6_02^J@+8C^{p0?AL#UIl|y(Pw!C zd!&XtB*NTrOVnr~`(Vdbu@~<)Y#@UmtTLF{G>UH?3juKDPAx}2lgp(w!cY=Cpq+FP z_tcn0pI*u+1LPaVh}NY0^;{7be2nPV%$`7!1~5!}Z36OMDW`IWjh@ssCM9`@1DlF7 z$T5^{pKM~$T&qZDcqRSOY({4a+_{?R3JX8igZ6MB)HUC-D--MbYwMOMvVjZeOh>M_ zkaxV8XFvAN8#EGSaG8!LG^o=z_o)N#T6?s7nQ^P9UGjIhooEV0tk|&;feCBiIcSD{ z$|0BVjUicZys1GWdYzs*pN-S6gUk3xo^MH|#jdSQU=>Rlgl4dux6By1kH80Yb6N5^ zO-(WBi}JwX*|tW|6`Y7skrRayW!={5WJx&3o4IP4<1u0Z2^NJM*Ax8 zj_#eP+C{1!E0Nm%ig@LhibAfanx%7!Xh(ztM=&{Sf|SlRpd!U`AZlf{=@c&imh+A4 z$Ep*LX5ERzLhe{7kD*u}=sY%*L<0_4px{C?cb3h?T&|QZ%^?Ym@p$uCs!bB@2H8Mj zyv3NIBcg%>>@)sCB6r7V?V;2}m{&bcl3fuFywob(5?$GL1}l#zd@E#LaH zQ3qkX8dPUS4K+q6v-h9R?IkN_4<6tqpDSPGQ`ZF3?#+jOE1WvJ>6EN}P5bhLK~#vZ zppU%U95pCw@LjWIRXd9wzns?JPtjdY+3phH{c9YYD8*k=ch;PS!WlVL@L1Q8f_6s`|Qj!P}(?;}79!+LwvD*UAarA=>EZS)FQMm`Vq$l}t z+r;q&n3Nx=kI0$XJFuZTQd-ANXoZKvdF!IG;*Ziw*Q|>kg3gOZyXl6Dhf+IivfuSg z!HLy$I`9u84~X>6Xu*ZAneA1t$5b(nC3XLrkK`0^#KgeQ% zl40oCHvo3(0I{e^cXr;}y+K%748z~w#_W4p(C8VGk@>}+BJ(6YhdhE~Al4LK%Ye#J zW!DhJOYAQBZNF6oy&?N|-O-X8Br%_qfio|Tv~EA=#S=W)9qP76p7XLAOLm`{lld1~ zF`uRHG*eo)ub2SLZ1kdp((dqKf!vPryx{IkeqD;~eDG34g<0JG zmx2oNtk_3`eHa90?n7DpUtI5l7|A=|obx*q^5+Mub(GC2EQOswE*P6Ql#IPup<4!$ z$V@Z^!CIkaH`>zu)Ogfcd{Jg1Jj*1b8R^)ad7t z8q6VA_e(PL{q#MYaFSc4Yghl>9{-j(V`GJaRnq{L<`KR8W_gS%^7)G{@-v>--#VC} zRFRZz;YY5i)`+#a8U=iH;W#rhJ>f2nxvM}a=2EyvRIEI0`#gpMyHuQ?$^O`|Z(GV= zE$dCi^|L@T(76oz4QtMTlQmh481zih35A$PxyKnmk^E9lJmiHQjrxX+Its)H(ksM6 zPZ_#veC9jTtVyp0L^f-$23TR!#;$bZe}#0|flSZ?Y?oz!+YCwi%;=rVJm{Emkj7Ea zqBU`v;ZAu!{1&b-GTM@K_g3F;AwkPcdBLOdkfRwxVGgjq#eZZu^6aMr{_vt} z&i;IXT?zW3>6K`E^TzZK*Ax@<4cY2r$^C=vTR)8UC&}!S96P(y%rD6l@TPmgtqI38H1L*wLgN0qV{ogH zY8{*SSNW>T|LEyEKsvko9^cFFs|q>K#GLt<{;HD_7%A@Okq=p1`(*j<)vk06>%IV< z+gA)~@_09O{Xnic{JXw>KfepDUhE9&`auhSEt9Wb@cnJ=`a{dG>b;AF2oUh*8SLeWE=<#Gyfydp&}dDA9EPEhFa zu{b?z?;%R%Q}Mv}4}a*8z?vmS4K#kdG1)iDgvAm&`fs@8gXYrVy;D=0mmWi!MSJ$L zGG%xrQx8FeT>wcL_6F6WaV6NJ@~k?xS(^`7^zSdY{4cbl!7$}Mzaj_kWZ6T)d(d^| z$3Q1CQ|>uOisR-@_ASQ)XZ1V3UiE_e(Hq7fb%hv32WV6|h<|((Y5<2@pKS4ZK37ze z#Rs~rJEIW-JUzN8@3zUiBR-C9ZmNePs*$vRm#_DylW8NIotJ=~S-m|Xk2i$|WbJ*e zxmTj*O{YeC0yI`$DY%ciznZGJnD0{tnysLBCUc=di<;Z4WwN1CvnhEY!*1cJg*e5o zs0$N{#!5)*OTrM<<;sVa07vaO2bogQ6?n~PUJbVP-Y3LUA(0`{<$k(8-uKz!LRk-j zvC``}NnU^11F!DCT-{k;qGB>uwu1Di8LJcy1?^+C0EtRaCN0%|Y=YUmp9`sGs9)6( zz3so$wftQ`YnwGRNFp3wsa{x2`sxbsz%-5a0`EEWj$6F8K=taP9bMv&HHF%(a;lE2 z>t~fU%z@VC@=h0rsXZQyrJeK6@^}F4fC0|-l#ep?R88*GokqbNP*oF7a`B;RTID@h zg(fTNrFKu66J>eO*vU|*a~gIR^lVNX+}3)`1d*@lVfYWVe#W9(Gi)SVZ_#IK@ApS6b2Dp3KmCj7If4+xMHLO0a1~z+0R6yEW%ckpC zaEdkiC1ovkalEFG(F`k2S7HW)uHy>Y_@Il+&rq@yuRPFf7;8Z!w)V zowS7?D`?DPE~G4N)c}iXEA!L~P0hph*wpswQnYHG#%&jHn*f^q_KVQ6R4%u2f?tC<9j)>0 zOSWqz+S#Smhsj5(bh)DIKV}qAp|IojPUl2Xi zEqv~h-OSl|56i7LsP4Djw}(Pj8W?+Yn#<));~S7w4E7eb+jRE^?$)IfsP`q1<+u1& zgSMM@+m6s#FvSM;O18atoCkMD>#cR-BUbtu6>xL@-~}PR|FQm|rt<}U^|uzpZchy2 zmC;wx-)~?8^b?hDVa`u2kx$LCXLg$&PCi7?T+uKDj&hp zvD^DwI>E@(QSkW(T@UmtRiR8S>l^N`I6_?^??4F&Y9tsDHjM~l68w$TM#~t zb;eYvQZ}$6UbOVtd>+M1_0?TXHbP1hnW}xs)R}I5Gorbo`$O>f;}}QxFnHEjqSCu;>4=tqZ=gGlema^&YmPZFC7Ey zG)T}TXfY1elx>mSvG?(c<>zrDG-$iFHY$a+%(LccY+}RCZhkfGcYMqxokzw`KcO8o zp9!Z-6=pWuOeJDg=8T%49&z}KAbL)f?%&L&5Yh=0U-IP{tmf`&u%~!Sk zl!`CGN*zjp4`kv=9`z1xtLJle5<>9DYxezxdYdp^1!cRr5t7+fYm)EL=@)g#;k1wqi5G)6VfQ&&%2ixk#Hn^?AWmGZxpHHg=*5Nzx{)7;rsIb=`Jr=~|9;mMH zzQ`nEC@i>g>Z~D81;UQ-lupdqrd!q_6gx%mC5Y#xs36UwXsjo z)3`;R(&!tWTwE+3c|3qo*Ff8nF3}Kpx2IuO1ZukZfDDW^8HdbK5(84NB1$1?@Ro)` zrsD9WRKg+U8lC~hpIu|hom%!660UOSH^wjOzTE45_4Dz_LSzb4@EUAliaOI|x2F=R ztSj|+-VJV8XlCNBqnUK%C807Xi!#{|HmH*3NWX3_r8R%J|3;P?+TzyRM2mD0u1a;E ztVVOOO;?&88=~86>uM&nCGBq%^jRHp;g8uvX6-LnHBH41)RJw!6H{l1QuvucBc6Sk zoj8^8WwKYMCAH0(``%?F9y%HLw+>x4DC>|x9kp@T3&p_7MVPufqbM5_ok~x@UdWCH z?W~zqBoWD$`l(Kx+vFk_7o1h-Y;Cjbk`cJFxP_u)X-K`kCSD%lqHb4+W<$nmm_(=~ zO_}6~@(nSJF9%2`DYeFAATRcv0Vd-!$d(J&k~JKuj7(d7(h;OHXq}`ps7o^(+b5Y0 z;gzUL#*-~I^d)0xm`hZr{}?AwnoV#7qV?R|MQV&D57iG2nmH6jc-hxbo{W1;0s-0d z80m`SQZgE37=OAl>v7q#9Fc5~m#xQP2W86BQUJ`*axqHvm$(4taZ9D;(IGOWXHr0A zifM@#C7TBd+b)ujrnE-s%o9MH3OGt6+BTjXZ_PwvEeZ7uL#CyPGVQRKqvWt|kwV7SEUVNkl}3rQMws3dqj)VX2P0DC zRDBj%Txl#vVeRlP%WWvB+%6L#p*_^8mW8wQke1boO3Qs9!%Xu-$}jGhekP7kLBAw0 zEVHERcNw0U$H0_t^byWa-u>2Iq5i>XvA~95EqdtVn388Ke=`!@jYhfwhKG@49S`vg zc~3Ou9t@uoQlZTH$mr~~Uq4Bcp6_l888w*tFO9R9IqY4S%$NB|*4mlo7mN<*%|v+C z&zkPXTmlIv6q_~o0nP|V+xo@J-f3v#t1VV zG3215$u>#`YVvh`^<>Epczb0IN7YbO7fCz^C`W82>h&FP&Dz(hpEgNM!7a+Jcr!na zP5d_{_->{hEXP%&L{FhfpW$Jz-(_we3BD|?y=CzkhF_nU9v@l9hZ8hTZ+%?2=kO$_ zv~1ekibdPaSceQ%`ym6j*{3V*%+0lTmbcdz>j7ribq z`m~~$rLj?+d$?lE00UD5#xemI$5CmX7&%_4h9$!2S#NU-qN%Eoan;=m|3Zc=97}CG zR3;eHdJV(eT!|e%3Pvuh#mdT-bm&T*;)<`g;ng_pzz&Q5rPu9++4MDPn)3&}BUKb* zf*|VJ#-1*YimE=Hy8}o1q&af5w&o5xjLdhD0Pm4A6ha^^p9jUlMknHx#Zx5%!dk{i za%Ou?)_ zc#-ZGgDMl<3(@u!dP0WTF%QYMOnjI#1@6tBy-I5EZ1Ry(5|C*+ledc?=7lYw zZ!5;c-AFoMp};ohH>qokwJOd9a9Bhtc z*#IS2Dg2l?!mJ|>-2{=Ziet!$N3yH7#v*&l z9Ja3J_#Tls#O(F&M#&e^l`M?t2H2_sv(VrRb=X#`J?j5ZU@~93(Wfq|Fr{eP~7YG5hR|VvN)>{fJ)yECiqdeJ2E*%(o zR&1uFC|*pWaN{`26)8_qN)ehmD(Q*AIs#D?K z7CCakp&v_F9@lnQP0UXmJYd^@IjrQ)nB_J!>%Xp3Up6V_+%C{jaKAZRtj zV>Jd_d*be5*8c(~8Rv8}>l>0_k~3G!>y54RMjb-Fi9Zi=BAyzOGG2b7Id zHmQaE_~hlJ;=^Iwha!InfpE1H-4iCnJIPo2rYOa%an_sZg8S{nlfy+dhyIi+TIDiV z)9gnKczPFN_h0j+>ujHN8L+Re&-?2O%T)-y!A)-Nuzk*HNh#4hwKc`ED%aNJ~!C zCS$f{bYjfuwfutOou=)pDlW7*di(Y(8_C-(VnxVpK}ryNyC%8+ zTO5#*_5I{f0?s_Yd!wRbXwdsY)$P)M@MoomT-YzNj)m!_97Exv`-4ZC{(#>BMuR__qP z{dX)s@^SW>uOK6e!@@q8=u6l>AE|^TWf2!Pq8}vrj+=I?8aMT0r{!Did z(Ozsw-|y_DKI)L2+%UQN@^kVPi}?x9d}6xokux7{JTAzMU0@tOGwmOq4EEEX4e2G^ z*VvG7_sSH7YvawN%oUx>;z>*RU7cV1i@4`@V_CilV)WrPS}=W`oZqlFX1GW!>o1!Tu!6iNIxrPaUtLR}yko$=`b}sK6=+=Kibdj- z{hQIb2p5}lc=pk}Q%xNcKC0uTNISzK6jwTaAaKAwXyCMnrFrhEhLQbxu;O_^BE@aj zx%s9)UqMP(p3Ebi3SSzdU(CC##3?O;07HUMH7Wv~QZy@BKT5ivl~O1zxkw8@M7dyJ zl^uvU;k-%3(+J;@ zsJeRMN^g|1N9PqvS48fA1;vnq?ct!I}acuQP5c!;tZ(nd{NP)zhC%j>4I%JU<-6oZW_d> z{Ode-+sUWdU99O#zwPf?d-mH^^zXP7-~9opj=|JmE$R{!1Io$kM_ z{1y4_UFykox1GK;Q_c2kyZ!LRp4`#dRc``vR(hIcg;X(Ta4vvpEmRl{H4g}X zYQFaLfHp^-eg*MrYN0OOpr%IbgfT?3B#)~&IC4EKK?2L>F&$YxT_16Ms{XpaTJcZ2 zQ8I5i)&rY0%b*j!%8*$Mro%4~zYLSQV`~Yj4n6_gSg-kbqZ)5rCMr0gQA~NB@{5`s9HWoIYIj`Cq z43OFvR(lV_%x$ao9#mTOR_sF7WDh$&a{%}J!1&na&5?Ik)c_Ipy_#wxdi`(MJD^w! z4%PR3C!7-mMCw1E?+DphTbmd;TiDtDzX0MTEf{aq6_0;@^VOmq*gufP-G>a~8Bc}v z5rTd|>iF|RM+ZZ%#&TcA&h}fXZR-%)&o56O?c>U3qa4+4tW&sLDFfW=B2bbVLpLL~ z205^~ByNapvKt*D!CiaoOkG_`t5#FkrKjT7UbZ`5x^7Q%k`TTu*7O*u z2xl8?8>%A;K;*Gj56<~~FPsl`b8TKYe=3+Vra+$r2vL-ynXl*8{}~4zq61}8EWx(& zcC$PXTvD|yZzt1&9&x@W)D@8VH}i#`1hw+cLcykn@3dlVvg?r4Wm2!hPftGTIm|`y zL3pLcVygyk(GpD4UQfo0`4aKEqN8Nmw0g*Rt42gw1;v`j@d>V`uf-;m&D84{QT)06N@M4V@WFfrV7lBC%apAZczLYXVprJE#t%d8Ajw&xtIB_ z&wzR~)U9)Ax6xF)jI&3J`wiWs*gKX0`p0jWNr;!_#tXVzXyent$0*YpQYDwh17}e~ z?$I*G`OSF`mp+Ua!UY$ggH`}-laBfBdH5{PaH3+Waaj2*5FpvSOfojvujdZH8LY|O z^hJR(nV!B^G^bqpI{Lj`_vgFN{`NkyAo@fBRQ!?XBY^&21;2bUB%bu2=fpJQ_IA^s z20Zfw;gTZk2wjoM^oqHHs8qi<|D{6nPM4p8tEFcwO5&`r$`14#K{JMGvEphO7;w6B z2|_s!j7yhLL`34@oxf^V$rI)QVaT^(&y+L`1x2Z49gB02#$x{_n3tv9mb46Jq9CXr zr0exrgaD|Sh5F!vomQf4=q4ZrgW7VG{yEk)z-TvF?u*+cs*eghDnQ6rR_0G&)TOaBNo~sju%Ol`1QY6>RK{5MF zfgP{L!vaASBb%>FAbUJ&5P@TwQU&56kHw-J+3&ILtpL7wburav`>^^!O) znRxU`Ebr&U0-ojlRx9joClvI*hNgc;nRo@7iSenCcX^ib?VmgZsk})-WPmEOc(D?U z#kgH5=t<;#k2G5gBbMbet9)cxF0*&L_MjIa%c$5D+g}Yn3VB zpqeVVK+7zh_og}$2hRU&Gs}jsICA!R9j>lo3d_YkFI;oQP;{6D6!A5X#&B@_la_Z zIwiLIcwXTq8#VKw+@ch-ULS>FCmEZQ)YP=JYLxt4R1gs>PjfoK99|i9;LoVEztY)e z58}=fc&94Tq7<*mnYG)ckk0A) zt2FfpvL-~8aE-p?WhR=7=O8kYbAoZ0BIkqAl3*8t$D`)hxFn7DTvI_!$jkJ*Nv795MNupOd?{vMrv?E$f|SjOJlz#CG(p%^nR2@AdeAAp4in^ zjm#>T+|Agh;Z2HL6(e0>dG9FU`$x%r6%sSiWqA60LtG^#Z%?!9QS6Gq5Gbi^y-q@> z9=t2kGbeL#9FP!j`k2zOFt&<7_f}IAkH$5;tDFQb3wAu4!aqt9@ zAzx@A;kfkJTltsk!s+qWbh`(7kXis$ zO831I6QN036CE*8I{RAA-fnjM6{^st9!0nMM?3Ewt+TiVl(U2#yh%a?-l*{c2Pdo5 z-KDv;$=1g9`n<}1Yi(0?XIu5JvG_l`>5>Bm&$+8rL@;0+=f&-}_R0gah(|L>&h7Ik zX@y*(4=26)970T6oCLbRAK!}yBi|)jhjA=tTU!1GDmL1Dj^7FIMjdZUBW=po4g6f2 zjF!!&PCX~d3`Xk0*!`(vc9~8vas2Z>5*1)uD}bebGpSaqWlBN4<%Bl)3`Mov^JiA= zhdak+3ejq^Oy%x>dvzq#NoH$pYgUt@)s^kll-Hwn3ym9YEiFz;myx))FKcQi41b)I znm#tK&Xb(h594oFwS9Qm08+|U3rLK7fhK7wt)r#3bSYEkwClpBQp=9w@*FG#`s~Vo z%1H}PdEUbZI%_j8S#gOe&#aWT-`RqNyO%?<3ynvnkD>7GE@!#t;-Vr1u8lk(L?!v& zL|7%6z@ue>THG&pWrRns=7`V>CKd`NK${dOuced{Ps!ouh?pO4OyZbx=7_F456?|l zhLy#Bh5RcW;1H*(VrZWwILx4Vo1}7nhumRTR`v=a+o@{-{dh0D;>}c;V15pV$y@F! zACvga!mM?VMz;rJ>B@Fomuk5z`%?+oD(!jH<)nj+LmfmbBd6uobe0KLHMhrxO;^rF z#lM=UoebE`F_!gw%?B(-U?&a*w{hIm_Gb z>!Pfx;+aEZZ=h?_Fg)GfrWFN7qb!6bGQ4Gz#6C*RJX}zWy5^BfINGL=)QBT-u#9;y zdQ2q5Yw3@NN{1CnFc(h z4Mj8LB18s}FzV7Ms_KB_J~YM_#iS!?l!JyTm~V3^>rTrn1M2vGwQ-TmiaV(K9wkWY z;?}{wC4U05WH4U;0+m2@h@sgQ5@yPB!ENQ9M&3wGaGoZiVVMv;BEN3=%rSdtGjf~? zp*D-|aHe1|o2xKYHD3SBQN=Tx5%n%}yrO^qARTMKwV87nS-x6{@Gq%&f-q0W)rBGt zC*!2lY8#5^XLKES0qju_#UPN`KH|nFLxm&z@;=^bw0lF+CzAC(pk=!ow%xsvZF`_` zC(L~hl5f->{0<1v7j_5A7ij3SIBST{y#ZW;ZFb9@A=RZC?zPQmCGe$*BRNx$N0~T> zZ2;f!IzxFZlx@OJJnoX%eJSORqXMpI#W_aYHZ72CbTFyYKA=Z=O{9>HZ~{i7cnc49 zQMYRG9q<7xh4z`>FSKo37OEkG5_hxz+^MOt@Yn7rw^sv6x>*fA4q6U@Q6B-P zA>ce4Y*-)66IxW81{fC>9g9NDi$OOQv%>z}4!LIBzl z9g;a`&_%FV%H9KP_8Q|PXUx8#F+*tkrk!z{%7}w6Fe+&m%B}k37ZlsFGHk*RLNSSA zU_mm$J;Jtw)PtYT;I?s)!3ce3(p15Rg7Q9-7~wYj=(f>T)qi!qPaKvJ(DZrv3te~> z(}X>Poq{sI;+^Ce=48#BLA7I^Ct}_(*D>hKR~hSI#y}9=4X*o58qkxFGwO*86Gvzc zc~R7Uidl2wYI=zxZ11NlWW2;oG1G6U5-ty=ixr*Uu$&-rnNR2@v0c#dj-`TfVR+}f zG%#sTseKJuK{Iq^*a@O)c^29_F(QA>-Uf9KHJcUxG`Yu33K%bXgrF#MAm33_ga3!T^a$qBlk(e zyC|c3QQ-VLWO>}4`s&UEL+$3y(8|ew!PUdT-x!*kvU$>IiRa-o*f8pC8TxG-^=krs z-m4aA3)$1Dw;}SaW-3yjIwKASHxF*2Yiy5IyiXV!pms|R{k0fwDju+s;0o~E^zr3c z_=nYszb9Y>-fY_yM<8B~?z$2k$zDYE)@1}!v{oCP`d4!hvY z+$~iu8*4mPD5f^U85LM@pn*LgD_%X=Gp~4vIT$#8pn*PcU#L?DsZUK}6Jg(hrA1wh znW}ps0~9mIx+0R+=;cAumQ2WFw*d2ym}TwEdwEzHYhzj9n0sw-JOa>N^1 z7jM_wXE{&A2x%RxlXJuEmy*9;(C|l%N>Zzi$>&?D0JlyFlTNjaXk!Yd1eC(ri1to) zkp!(3rYo>3{G&Qj4v0BtfG~=O5M_ZW#udhx!=)*1FDvw16=DAqgZ?LI+<{w_A(1*? znH9VY{AC__Q=EP8msV()B^aMPwPU2(foH{#bQ5^(tk!mU#>=`0SW`gBf>@?_R(W;{ z=J7Y8dXOT_6)cAwl7H;Tp+9|-_KPFZJH{tl+Wo;n_Uy$Khpa?z(6Wae z1cveY+Uu9#3eS$#YWalg_dV~Ffc81fm9C=NC|m84k)3KzT72}H ze+W3RMMuG78|Af3&>sIZ!!Zrs{c~qjlw4nQx&F;@V)4e?$GNV9V;oY&GLFVpKVj}#*#8kd?5z zES0Cx*=+i)$N6|N>JtXbQLN1!n&bb!lD7 zP7Ag*vP7M|XYVJZebr%X+b$LZ(_`1kT4S5*rLvZwUd*8{2BQU}IV; z*ncO}f^1+(zf|Z2kAH#?Og^f6xpl_mvk`wJ=U|(A2 zyycT`@Vx#QQmLxG+iOBc${tfeXLnEGtCCRD&^|W&>op_h&AE~9I{K}}7KM^LOA<*yCJO8iv0^D`LIdY7JFKKzwQrV0_9Cs5gJgUL5iCgDyr1Dve>m zg}>0w+Xeyij?kr8C3>`*Dt|jMD5vPR%`mUs&Xch- z{`!5~+xfFX0lXr%+Maeor`vCu ziLa(|nj_#}!I#i}BY|GZm*)M0UE=uSO>F12=wy+pFuakt9tSA>4ZNCP83oLDj-P6R zk?xde7BL3$MJKKp4?a{BIP$S<6eJX~a*8sSLJm=YCn{9g*NNIDf2p7lTS=P`=C_D5 zot`~DgMcw3(^>Xe&|=aCCg`hM)*gH?`~wSY2lVNXXEY^{q|fo5=5YKt9ulJ+)@e-{ z0Gf%IcNi$woCJBHOE%Fwe+7qktc#CDMYCP}#BR=+yPk>PbIU|l+1VvDZm7edB110u z2d6C95I+Auu0gLxm|VP{=c^F#U-nU`SUB0c8yeY|{_n3?x8{$WyoB}bpJih1?&gH3 zVSvO!Awj1h7~Q78LLwLhB?&bcDbBQpml!a0$;2HXVtEyyj-a?vQS`)D@FWx!MQ*h8 zXSuO?-KxH&Wofx$NvqN}z|Y>TaV@?$VlFRuvg_rz^Cp9*`Q|GJ=y<^d>z9oiG0w@j z52t+p8!}zIVmQpuUhB}F``~%!{yi@ihGA56lw-uI9@W9eYXHz&ew)s5{}FOcd_7t> z@Ui&*y)j0O%K?=R?E$t9HQfr-;)UtvZ=9iLGK_bV$&o20yFPi)(`qB{ETA^sVZ1hF zo1ex#S)ff)g=_RpKdMoimtDZ%&>B3(vNQwOgZI!8AI3EXBEqN#A_7!!4l)3}$ZbsH zw|KA(f6{GP8$a2eqmZBsvn%UnRR$xkQB_4X*({Tgo$6q?W`!YZABd4P=BysZ;5J53^it3Xaqi!ht7(E zs-}8pM~PQ_qH}`X>9UbfQ5zlR*<-DuajKb{d+0ywrQHsV!P_tuY1@UEc>bdL!!OcI zD-~-fyvIfs=RFAv-BiFcy*hVuN{Q9rvdE;I7?mZNiMpr|HsN16_NF7<9NWxxC0iJ4 zp-zc-xFRN)ZE}RhYIt5T4nr5E;i`Cl(=eCwmx!Tx$%BQuQOuVL!YDJGHg1|<@M7<*&Y^(KH zq?iQGe(`>-;ZBg`QQHR03cVOI4u`MZa^m}EzvtyUqV1GyOQM(8+Kasp4 zt0`rpK-V-9v{0pjT@)*zL?@m2V(YI4)-Qum%qq>ixqABx!ZnLr#Rt3;S|jBUf2GNw zLHR4)ns<%W7w^)3iuUQ>wFLg%!-Kk^@<8xczvbiGy+=~%G|CM0-?fe91;gLZgXZhc zg8mALL-Psrmwt^4{5GN|S0^WrU7w!)sM9Bej6B)BfJWjZ8CRmnN}vqOhL${38kJ?* zAf~ww!^5hOH%baajd02UIigIK_Y6K5)^SCp`r`##FK` zlg?QY$;$L^l9Q9f1U!*8KLl{M!d67}i;!(N!xBnf+Bi=MMw_iH6aZgo^FZ)1i$1$l zqp51hI=tlPXUp>xs3()fy1m|Fdx=Z)V!}MluP(K&|Lz? z`bvi?j7!O)pS7AzRVqXPMvPqHAt0S5{9D-#D3Dy%NoZ)5qj4;#9}{Y;GN}T28uMY6 ztBTPSmur*O7FVMH3|TC<0#pAt({`0&pi|tOamrZ51hbqYRI9gqm{oAU7R4`yfC0K7 zUf`iZ+&|2ob7{K@wHx`o$+xsa147_y{2&xEn*UV`2 z&M8E*XoBhSQ7%TKan^}SZR}K<%5p794kr>k8xls1`{+~>1*ZKUI9!7--X)XlR2?$$ zSumk1=~H5!y|^LMfh#TBdHxa|@G=;btwKMYNl71&eHR*peeS@my{wD^U&8p{T9oaQR;X!{~LlAko@=fa7mX zaGhZ@N=yodpdfp{C_2QDwBRtK{h+Bo1~$};Gzgr#pu3b)O0IX^f)UjVg{pX7942J< zh9dSQ+rOQZ8}$m_X|eTU_+;^(BP?{0B1lki*VE)neWV~)D@>=a`FNEdo) z#dAriSTMtp(i|@^ai_41!;IImEZM5VT*M7?n920iWJ2a@p}|wx)a{>C^U2SA-0d6( zmD&ILXgI1EeEDQygy;dcq}!Zzn97d8RLUP2 zUHXYF^e4Wm>t7Tc8Q^~_@5hw*Gy`b9ekIR0+~fV3ukzk)n+WAesP%kq%!p=&0iYg` zY@?CxDn^+;i(7+{7si%HsPd*VlQI4S4@G{AJLwF%QL@Ck5?Cg%T;roNpKr8nKtVB} zY(U1gZP0IVr+!@->m=*xtVga)+*fa40;YfYWs;{Q))_w_(^8zyVcQOD3F|Z$t!$In zE(so7yQ|_yHd-y0_>elhM>E-j#96!ndNkiavR1{?sM0_py-Gt~lJHV;__97sKt@?N z8nj?jE_YJM>|hqC|Lm5^kQSFE-70(@HYpcA&>Z7_?T2o}edtt=UYg5+dPl$>+f|*e zGL3xvU@xe-*H#s#fH~rErxI)2zdyL8oxod-q1?UJE&PWZUO<^33|J0YLKCf~p_7p^ zcC6b)OcS@~cNV40UHbtC3Bg0(qOy+@zZZ1rTl!_bBW_Cy)K(19@G7)9KH8hpd%{i9 z#JDe~gFb75QuWSURrzQboaXN93{;ev|7q8mdTG~1|qO_Z;l zvKg6b#^QXyID|QbK-^B$(DIE1-E0{i6~gJ=fjWu)thGJ)b@L^EF`)XEL12y2x2>#> zCxVrov@A>YDo9mNkApjw)A1DqkT=qDNjG`?y>IEfrzqL=OKM5R-;TfJ!^zD#Hd&rH ztD6IL9eUT(mxG4%5J=1JtoNYM7UcP=(~ANuuMz*N3c7VgmC$=j?~TiB@3G_Ls^5nY z|dQ))}8`EQjZ;C0~f^h2geRxUz{c}92fEXUNmttoH^;NXZr~^#^2_KD+!D=g5WH~ z5xDB0xTgEGbi!R%0~x&LA}W#k;20bcg!zDAxUt?9Z3Y)khn+ca=$V!QK4|v))~`TW z^#~^kFeeKnIs(cLj8na&E~s?Hg^pM`!4u^Gbp>KCOV*kq#F~QUwp3Uh@r$>fUn>jk zZ3%P&__~o+*MGR{V*rD?j|^_JNo{GlL%xr|fCBaU)a_n6FPOO5 z507jiB*dHED52w;6@TZ(90nsD0Asm6$aB!!lcsol9;S` z{%aKQnXL(`dO7Cje1YGIH^!-lm2NsnA4`Ni5v0~9Lp1JeJ0~(*k!Ot`iUi{dSSRcC zoprr6vZl#B5eFRga%f8ti2mTdVU}GJ?_DE|?|kqhVJ-AhD9Or0uCca^4eI?y@ZL{w z&r+$??COrSiDcw^S#D4NmcN1iQ$ac7q7QHW!JE23{Fk966?W5A)e}$ z-2VbngM@@A{rUxliun0kD4?0BAQkZ~zNiSvIG_KMeGBir*R5qOhjpp-R(26T{dEB1 zHb2_E6>d?C2EShR_+YyGB)8q!?D?ejh98J$m>GoG(S>j=Msso~q2C7=7RC`%gQ3o% z*W~miguGoDF_&JqId99z;Ac^0(>=1TaS7lKI2E`W!Q@gePV|b&=jGHk2)FHMF*u!& zB-H~uD!6_2m?NAJm~MtlMd6sb7*6*i_YIB7K1!VexwhU@orv`uttQ@4Etz7amom+2 zAy6x+wRN81MYba5;6U6?EmKUv4@omTb=*uWLiNU{3hqkIwgsygo14r555atC4yq@ z(^saJ1+(q+3WMMLO*@SLdr~r>I<`p*fR;9gEyC(}Xeerf=ix&C{TfhvyE{} zpjF2uGSrLr1n%}QF`yJ|^zi* zYd_J`f;`j4rd`w8^S3)q+r^u`7p|7~J>xNwP0Mntl- zAiT2;YuW+e=kdQsjSM$*VQ2T~wCPzU<7% z*qQZq6HSC9i1eZ*%t8$X7%1V04oQOo%6_35XKqezk_07XxEzC%wV>DS7cN)WE@@S1 z*jn4x6SWXN1*|W(tiOCb74mnet(@n5ooaoZH8k(EJ3E^v!irEzE^~f#J%2qPTsGQo zf89u%1KAAfn;iN;8qY&OwZ7dl`fP@=wrz#U@5Up9If}sEAWo5YXLl+qh!6F2g1WX^ zTqn%Yd2CXH=T-FjGVxsv{CkbY{9znC{P_c@=r#9!#pSyh81N9O^H8~b53~Rz-HGC> z?P`DlF#e^9JcxkBMtw=*_e7V1MwJeg*Fv6G7QAIz{>xzrtI3ukHA4mcc4%juMDonC#+Q?ka8-o<-{t+%Q@n1B-uH$B&5u)<4MPfhCWqU znm8Gcjr#GrS+nIt4!SDiOBL-WvRAI$k5)Q)?$8kAkC0LTKA`M*P;;@s`)*;u} zYK7|t1lTFrQdwhjHnPrk>+}B+PxP`PnP+a=3C}pZj?Lgy7Mk$9PyPct2;)Ke$ciR; z#>yPAI2w4KhjSC0A))1#&mg~?jR`=nu{2H!hv}R_8A&4Pf)X2t@HIF2v!_H)h zDX6zz994`iX+f3rw(*%&J*B&^jau^|h$}23T}cK94$UsvI5z z)A99Vu1teEzFDu1o=}QFIRg#;e52Td7}v5H(d1Fx9W2R0Inp)JwZ(5uNh8SQ(y*{b zaNaAxpCEJea=ULZguiQs%l>^gS2ka0S;mswNm5;j+uMT@QtaeREFw1_@^SsYJspN5 zogQ>vY>{3{*m)BouymmuNB%iKoNGA-D)N5(38cQGo#UZDC0=N>^}(R0JRM>K`>_{-dDp4;O%iuJ1oHnUZjvocr1VQCFx z&LBd^psj?GvECsLJ;~^7%;Lu0)u1lZRx*K}WGW9^L+g#;K)(kU!L61VAgY*8)VNSh zdY3`*c||`js?|nTFK5DsmkMjAX{W$d%_&(bABYguz?Cv*g3;M4W9=y4`hE%wXF>ag z<5RveZY$lg`4#MzzGeiQItv%s5+y|AU>P=;L0PXqC8x@fk~gP&=rf}*E*Rx44YDo` z#++;KZ0=OVAO-~H9bgo^krr-hP5f;AezXVd(0)-nl&f*tXrBOog?J$?%ttOT?Rwc^ ze6&v}|J1s(t~^yJ_3u1J^89foF(SN(XAb)CU^tlDtv;lkT*n4#E>&HhkM$%kwhgKZ zIQfNGyaM%;^&B#3>~bXM#R}NM}I~9*8b4JM3k9zP8Y9&~HkNxgOcW z$r6j-@-w1^T?&%KJ>E{)MwOYs4>r_$;}24{Dnv6MV#Em%C$4ps4cf=vbs|DJ>Zvk$s-lzT*K8BNF7#gN2r6u?@`{fq0RUaC^jM`RB*$AK=I*W0slmiNH|jS(xDC^h z666|fp!R{HcY{7PQKUSYr)?UWzDChA&KnFx53GlkdO4(Vh-tiwKw-a1hF_Xkl&SuE zFHff%Z}AW~Qfp0hI))|YRr*^h^L8+#?8F#_{M9_UweV5V7wB(l{l?}WO6ip+oVtw4 zHj~l{Fzx%7kmb3P>U8BJRb8{&dh@_mdydJR*#-GF}?X6Pocea?tIF& zrHR7MtC;TdD?Tv&J1d64>w+Z0W+UiGY(M0* zkVR3pcAg@&^~3%6j!B}pfi!+6V}?U5<`7Zw4Yi7O6K#efFHRjF6;*O=9#%jshV}t5 zZEgxHpj-43S~_W!i+@K5U*fWtw4&Ik8p~ ziXo^npVjp2psw&8r!4YMVE>$Xo1XP z1zY$^YBUu)dIDfk{goIHPUebHa~Na0+fWjjdc^n^__ zNbmH}DIvECAhjlq+>5&a)ZmdDH3Z%mvA^OjaHR?d?zJh-1us>+n>yF@{NQZl_Z!Kd z?*|$rbst;G8g4`s8X^Axg4{?hoWd%DIg>_OLmbA3g-r&b>NL_E5SXhFScplfP8;pi zfzV#Q5Gm--8H$ZN|8vxoORWCALaM5k-vd#`p#|u*eFdRQYVGHkLiyFLrg8`=_IJnZ z#X}B`Yatvs-<_$a=194C0i$>#eO%qbmU7zay^p)9Q_OEOnI1WerVFCsFCDZAe&$ zf~o7|jhC#6WhkZp`tt*3ksFQR%LwqhSKX7xw z()9D6A6)P-LcFZP|3+^uS&85oxI4wp0SLk&GO7Xn$nzl((yk(v(N2aGpOQQ0jVtIxZXN^NQmwLkznA+`Zkrymd(!CWH{6KoGb>{6?z_vhMx|dMj$G z19oh-DN1UEMBbS=r?$PL6di~kj%2SlTplZ@=`7Idb&9qVRc2^KnI$&5q*eN!D?}Q0 z-qF$5k;_fU`>@SF@3a<)_Ehk@KFcFjubOP<~@;(zP^pVM{T z_Rj1#A`p-!1rU(Je>Gj(xp+F5n#dbj{bVWr-(xn3nxUPgjg8^|v}SbwKdl*g-e$*g zWb6pYz_5_x+)%-{u!#mF@{qwK$C?V!!pDiQGG_aepue=YfbFy^t)rd-w5-pd`A)GF zf+WH@2>8QlF-ht|Q zocq5UGuC+>_S0i;JnNACvxM+xPCa6GcI5jWUOQ2{e*b;h<&e9bK~TCS(wo0)fB^R! zt*X79j8nR$^1JM__Tc@||KafLz2a?=x`z0_dnft#^70x^TQeT7UZ6Cz>%MHPP!pwYTihqwgf0rEmQ#m|f|Ge8k^}+g{F5J1B z@vlq&K5XB4IPv$q-FXFx`x*)Q9{T=CL>lJcd)yL!jq;bioyhaNAjM7Bl@<*n5>yKn zLCQ*Kp}~K-ocE_hLZ>F!A_-u02$(HKgZlKTF(bnT3)8Zu02?*`;1xMgW8Q@7)%5FD zT>9VTAxAAH<*TZD6bLXMp)gtVLP(10NKrSojo&ZW?bx`DQc6t44Z^T83}NVzBy15vgsrC}%n24H zL#r_yXc2;e>y?;D*lSgL6_K8^fU%kb;x$(`y62)D10}PVl~u% zN4p%>nCr>|bKBx)lxYIs9ZDp0uqejMdm9;1`iGSeEe08qk(; z(|UxQ1QaJEi{aJVlK7s1WmYc0hm=}rhpi1PDC&BEHlQF{!why*!E(M*60;+3n7u1e zjvkX7dpJ!p8=EIUq3X9m2W;iFe4M<-FVc#ScGaX%ODD2o!7FK^Zs|lWI@!}8(iGv% zSZhyS39n@uAyIK44KNUeQ;kE^t3Hb36ibiVC* zP@I~7k$=1OXHk;Cm-1p zL&#+vA7~fU^=w4P&|~erXlE6ToAa}FcqirBReq3@cOOtBOPdb|)WnSJ_aQ^KjCL`v z9m-1Y_%<{aQ zI#VKGK8kS>qu}EAl3~Oqg~G3DqP&5^sFU&$A(E0cq;PG1N<-~Je*?K*ZMSvWIaiX- ze|IaR6-hCd+25T2-^kTVKALREz3MqBvzTHgKY00vEGd@5-q@Z3{gh1`WDW>Vz%(B* zMRe(J^nU!yP&tgcwzY}9th;<2i61PLG6Y&GrbR!O73K7E(6MMq0QGEH6eDmYf4kpS zuNKQG(FEd}5lwS_=qS=bnH!E#SGoaYZMsBG79m-_w81CCQfzhSXfMdBN%+|5{1B?J z4h>!Yz5NfRAd|4<0VzJ`@Rq@WzsGbJ{WzP@4BIF*-8Nk3$Fa+kU?0xe#h{Lg`6>;V zLOFm{q&U7X3Lr$kpCodOAViNM1(&fYs2qu}ViiG((x#$2I!Y%@jW7~U4qpQ{PI>|f z)u5we7AbGrM5K0TBperMC!`W7CalnqXPv1=t#nZ|o^5uFA+#FO(p|h0?D$s1gEKqI2+IKd>i(7WK$%5kv4s&%ZCagim!OW?Id)z~0#g14NJ9FuH6mk#f zO?R&00A?0*ro@C)BGA!L#=lt#J1lIjE&s>y?I&(mR z{MG3Ryf-`l$^B`0MWszGy}qvM+@!xznc=LGM@?0Iz0Hd>GYc@H*J^g8>+*# z!jmYmuJ8<#rdzPrfpU=WxA5mBBbv`Hb6v~mtRrgOr($T6sW^3e;`uFFexlIvDJ478 z!RyYgLljw+MKy6MlcC)R3;9V7zYbLWT}d`|(F?$xfJ>!3r=*4}txQ!5$I-A+Of-Xq zJpU;7A&VRJ10iqqXsGY)GO;T?Z2NREnA62!C`xc0)n z+y3L@KeCWx`iJ}A5ezYIH8;A!w)T{?Y4%7}NoBR1x}+6IJryg!uHT(RY)0=~4JC5n z<603OFN*>pWC)|2Ush91e_(KGRcArSDTQ4TWT-!xDnGeYAn+mc`hV&|i5H zBcgu%(0!)9Cl|ncSPQ8PV==E*d3p|KyH}7E%+((3h{r}xSxEpv1d=)T-I5*gZ`c=&l0#@QLd630jUv8?ySEl66EJYivdv#xNtt3g>83 z&w#@dB?N>hKX}-37|WGIV1{wBfI(0Jnk9=T>$>gO!|9Yr?7-~D^!<}WAYzzpUN7tI zS{K}-*#`4{-fv@iCHMhfAb3WLB+}yyPEo&y?IwiO|xTT?VBW zX1`&s6QrW2qnV72xW}G==IDRv94`z^AB<-7j{~FU+@UrlxEmOG&lI`1QLea+u_t*@ zGJ97egTEprdAt)u*)o7xLjdmjI*q4US;a_0LqQt0gP{HAU@BJR3O`VIxb-NF((XX( zCj5a#Jz)iJJnd%oI$>{^&ZfM5wJTd6;Sa3qCAs}yS7{y!-Vkw?HwF6M2qR7U2cB2H zxGR29X-zu^a90Q((jN*#hK#mR*d_%ixP;l)b^NQ<=zikw6UWaJTQnvGBEjoX+BL$zlj_m&&Csa1P|?qN-^ zM}Y{$8SeC*e#}S1m-ojZ4dqL8r5$7N|!HR}oH=+xz17|uf zj8j@8Xs$7L)5oqr;n04WPhmaE6rNZ=dpibmol)?T~vhQpRTor@<>&xuWXUPR`Q zPy5g-st^CJ`Rq=Y>$vw^Py9)dunZj=HZb2{JgxyKZ?L{0>4-kfh0+@1>745|rUetS z!;Tu_jhOJ4oEVqKNi7nk>*eSMmKs2Rd147Qpsq}yt&&bSHdgiKG(aPaT3set-^N#o z=IKNY+(YB0#CWK+?4qqj=8dv-(blTnZ3sH*!^cUvL$oL+dr_XaL>m37DNKOrjJKU( z&CjK1LD}M3r{Q+s-TPL^e$nJo6a3-+`z2kLYRvO99d$}cbyR_^848ocnb2f zb9*-0rFxbzV5IsMU^17QfxpA_@E&f|=T|iEv8SvtC=!*|pV(*16a`Np!Jj=JOvr8+ zec2C+)yvY3)o99oJcbxjO>StNJe*GvBdlm8yf?_?1I50f9W>r=89jHml>JD!y_u-+ ziC2a1U3FQGBS8_3UpAKQ1on@jVDXwbvG{W5Vf4uLxXrCoL{K@lQlgdga#<9f zmgm8iy6>ajhQgA^RNowqldIB!nbfiULy;$KD9vLlC}J}bSEwuv*^@fo8INqtHh9`? zGI_-~_LB#FoZcX!>sRr;Sn>pYf!MW3^=61!I}XmFY@3*01oFp(iiO=U+Q<4*F}D*%pmKT>NsOO`OyJF8C)2fEVRX3z%I3u*8xy8}eA zJEvq@k{B21k;bNI;?~_@lgpND_VW5xQ;T2<>=V;BBTgE7SzQI6U?Kq4q3a=sJ9o$mD`pHk zj7J0hM3k;G3bBg{A$)X_yHR8pOyl9!Xwr*8LKjBb*hig`UsCU1 z{eTUL=@{Zhd*#kt*ytc_e27-Q+_p-zBINQim3XeQhBQiv_P;JD8m&pF;M6ed;u5U^ zoG}r>^N1FJ@X{CA!8D`1C}vfs*0nl^xoK)QuN?ASJPV9AGwNhIYvLErXGkd&GL*OS zVCSb2%W=II$7to0+>%Yb9MPA9`yLNP|2d%rsS~aWzjy@X%#XbUhTh*p;Cp_RnS|zPKaN zIVu#e9$p4+=fNnzV9pjDP3>QA1`1eE_)KATpwBPLdyXSIFr6Ne_7A3#34Enro?y~P zaSCMm#a+H|wD+


d!zj+5*A>CHp(Ic)bnomOY-w~&NK3dF-3zMP{5P%9+bnqa+uxR6Ov+ z%ZrO+4eSDz6mffH=<383hJO4hn`53jA}pIl40HJ$VhbGNhco4)xgsr}V05Xa;rr?o z$v236H^_W9lsZz9&UAROIt*(Q_Z&h;&~W);+3cCvzT#*yfGcH9)_B3x=uTU#=m1wy zM}ba{iYr#vG!Gs>{p=bN;Bp^&?!fbrJ+7k6mOh+WK4kNHz5w#2AC92n@6tufvOS9K zJT+7C6r=+G)WH7luq{U)(~y^${}fxqHU2`r{QSn`6$Jv4`2R(0`5%#GN(btvnskZ( z#MDgB>>gQypqC&DMhG&PA`6=#5en1)w=q}PYhgR zD*_cB$*s6y)$G>Xw6tEKYHj=Bs+fG^f9?IiBuPfLtMqo%?SA8XlI#8KeC_*i&>rW0 zMOLu(SrbOqplu!(_L;pWHWII0ve|IRCSx~nluFx*ix9V)z;!b2oIG8~%M;oiXi~Ka zKj)bp9lhci$U{DUr4Ya?V;AQA3YmL&OzhdOiZVHpP?Nvn}@GXqlkZl&OU$C^n&$xm}Sg zho)M&Xo;j+x!5&xS2zFR44_4`itgMPolQuam!<9$MQ}f%K@jBB#u?P`8@cj5I89B{ zI;Bg4mH-CKes*fmT*^9TQ-~;m4GTt^eSgo5Pg+Y6VT7Z`Ic(b6l~4P`Rp#AEp92&6 zEj_xzfdi2i=FO;HAllM{1`+OEXaZzTg8^AjO%>iJDxGP9XisAkBbNRpgbP@X>6m#K4BZ8whr5xgCwNJeapT|^UF z%e&E?fQznn*{zKJM5YFb&X2C+OC4nBzen_#SPB%=$=6188RaelB7+9Oh z$%z_0*9yG!r-t8lkWhN|HB7UAgh3=CB>B3afku8=uH>3Zaej7(pKMDBBRu z&DD5rX(mUfq?)Z3jcKNWa;dIUd!HhIbiqDDw3!9U%==OL*@Q8LWrb5NF zq=1MT2(E78E;3wB?&x3@e27nEj~Ov0&7kY5GV^b^lDyTuD$7Vw;_EaU zJVa$TN5po&CpoLyNl|Y_E43~TzA9Rt5tICHC3fhg@Pdo7#|d5d z(#|45^cYE*^HL;2TSY)dy;7yPeB#HR^3wREL3(cIEsA&%V`}*+7)x5U8#AEcEf`gz zC2p)i_S!&kRxe}p%YKRq7Z~2tNT<9Do2u~h>_YIsWh1C&H78t^v|GMNTlUHK45-H@kZ`d+P+1z&uon-JKpWF9YN7RkMe*DnV@ zeiMS=ec?o$*p;K|LN&ipC_^1l|KYC1T zf|n8|w$;QnLBl4py06o1HuYL6$zIQ-<-ThV*N{L{k=WsW>fh zc_Cb;l^D|>z!@oEVWdoA!h=${^)sC^lAb*6cTuiw$y%-wO+vwfMMCjbA0lCx3T69< zAa(@&?qRQ>4N48!OW7*ds&uCF{f;^G{m=behsiPD^8s<$?+h%Ip36KT6uy4aqg;}{ z{}*fT6r5T3?Fq+8r(@f8I<{?hY}6T{@+Lv%~nz>yeNVVg@xrcvIKAn@i5sWQLa2L=Aj^~|QP{4Umu!@Wl z2w$B1Q*iu=nQ>JG|G^tPU07R?cQGL_{9+Wm2=EGKAHBfiUdsDNWu+LlzBqni(~t21 z7R+&@;g!#1{HHICNzt6#d=9Izr*B*4=@o8c%B8{hxv4#r{@|JpY0vv^LA@wME$Zm|8KJ&w=Mt#Q@Y6U1$o z&)mM2n+uW#YuC^2zAVq5R+7OjxA@;eq8-P?!H;ty+*_8{x;`y^PuE>gA5ovSvjm-c zgx84hm-}yUo8pXEJ^}&;*KVGGAs)Eb-&#B&5zwA#)5pAYFz$e)pa%h2QWZ6wpw}fR zf&LC97p!-xu2?zsNa5eCujzepQIfgaluC~{-#Xd0*94dB&)9y8+egn5P+#fpxbLW5 z8{0=AvzSE>DwbVT)oG&Xh0s*7aG%&cHnZP`RiiLN4>RzekYCD!*R;W(LSL*@!WRu# zFrV-}M%VV9wS7ItQ`=j2gm8W-mmJS*$m@ir=dPbg)Bfzw@P5GUmS;xp9{L>j^jN;% z3g($l)azbl|5V=CfCUQnAxY=#JBPjXHSv(3eHHUD4D10^a`Gyw<|;xl z)tTvn`?~N0oO}I4N1z&y;ctMI4dGQhV%GA~Q!INa{0GZJ->f22a$SL}6Sh{}ra_fE z+i-GLni1~8VDiQlNXD3^rn0VnAXetB%L=?Z<3EJ-IQ(^0C~l)%U#2@jRCPwg##e6P zLuiOQ3qPj{nABSf-hc~x80{^W9bu5bU-ni#E3yZF`3o244Ri8dcVvEsSB+casA`Gy zbK8eUv~a)3gxC?|ou&c#_35;@3jl(gH4REB`o3`G+}pgG*mZsZEPk54Vs{0J2jo-a zuCC;ztQw1pY>XAP)yy5xpF_*SRq~m}=!VR&UqU_|@_9}vofs=* zz*Jv)I0AgK;t3wQ@XyeSbU4 zkOlZ^p$AP@l==Kjrn5G4KVxcm(mJH&`e{+74Yf7JHgMbEV4%xW2KQXeUEnpUS#^~v zKz1`Z^}BSjw1fCovOkgwb=-wm0OfCoBTZBJEhUFX*U z-4;Gh6C4=dGrUC6v-GWRQO00jL#+v>Jy}=bZi2+QDXFC zM3^}>WkjWdT=~qrctR-AEajSSB4_9dGig0(I!`N4F*j0hfpjGXdzwbF8a;J6J8~Md zR*gL(=h!3rvPHuEBUamwK zK=d|A9Mp=OBc_p%}@|^vtHz9@rJI$ z5Uo!l(4OMVwGLU%loona_Ks%@U3{RhCLjBLvNo3Sw>d|L&pMjqW$aR_S4jd}Rbik! z(8)4G>q-$dxGA@h0TQ=LD=ojc9G!7QMcoHoA+651I(+Et ztUDB=auI#@Pl=XBK}w01zQjbn)|TLeltzAzeTaN7jxhy@vOoxPp5-aGz5%bT$85V?>1hi_cS01wJr>f9y^;#xNLzEM$ zac&N4#b|lS@%c~{K-%NDgtGml;!NIUqvA};g^#a9MQUZ7)Wt&tgV&HO*#$*X+?qj9 zwb+cZ!S~|bkQu*;-Mos}~l1Z$_}>4~D)mt7Y=*>j)E z&)H)>Z4dcHSP)UVAGakG=6dM9dMbd2A%Bl`8AqzcD>eckpvkvOA99At6DUX$ni5~z z%d&aQw2@*5ARdQp8{*Ax{Xmpff%6(=b_4xpuS{Q3?!C=!ia%-B8*t|aNjR?qCBpnA zVYf4zeu=EFRcEkNWyIRLc<6t8QCrpwb02L90HF}1IpA~Q-6`;Z+B--8SlEt`jC=)H8r1Wj8#w-ztHWLIf zhYhB_OeovMTj7k0A7lL;T=Fvj5UzhCK3Ze6U;!+jSr|b7cyIwhoYk5k@zx#ZE2%;r$1{^x z6eT6s-CMKtW@#9*$nT~>EH+b*w&V}u6hwD;!b>MOces(iwDd8yxa%=zO3NMPeH3|U z9h(V7eI0KW*O&Y=Rywqfx}h?4cEhfeH6f5B)tX>1SQzOyCtUj@Xwkb5%wKXJOU0(&yY9PetcsQThpHwX8O-9h~O z_I1M=juiR>q%YhA16#X}KBNlUS>855ak9%0TB&k*rYjIy3IJfLTy%bdCZV#FTQe;W z?sWRaD8c3Er7;e|i;i`MIJQ^8co))~<64=;Pi#a$r%E=DMK^gI&fC=SU=~T(5-2jk z*0JkvK`{hes{;6gdu}!1X|mgOV@+bEEk5d792eZ-x_|74J}U< z?jtahrzZ<6ht_rrp)08fwx=F4>%)?X0=vLLI(N(z*|ZSpuFKqALvSnAU2mo2j{tF^ zpD{xeW+?WB*ggVNJJ83!he?*#=yr4FdlBc#JEOFoiCgbT(RMe`_9QIn1;jD0_gt_A zK$`?0n*`*R?g+}dvo5#IkL~n$IaHdUn)}XormNK%#ML z%qgRVGv@VsV2Eu+{T`@}B>8c4_{z9))&qe@F)tI)u6f{b6zd$5N!QPrl}S< z!Tq6As&63p@u4iS2$He)mcCe99eJu;S%70+Zpjiu#f1JwlwvvG>iVS($(K2nC_2y+ zWabB7-I<7nG_sP2Z7yS$jgK@Ec)4X@r!YoITKoHQ8zh<|g8v`JE4`PuEv5&evT)I! z&#WdxNmmR_vm%sN3Y)fNnB`59q~XdndP+w*`b*nPcsx z+*LuQJXYJ}vQU#qc6?_Ibij!oB1qJ)PHgWwbW8&{Qx87jL`Z#4X(g|xPxGXY6SGXP zu`YRrPZr^QT-L~~q95-Va)&KDDp$RKKc&UqIcN@hfWn^~YIpwI8ehc}p8=UlSnWA2EC;5zHa~?p)i7+!hv)rJ8{@aA|G(=t50r}Wr4;=Su%;v6btQ$z&fgn# zHxYNLnS~w9762}mOqfPZEe+om5KiY=R$JULLx|9@}#yx$5!>$wQSK^8gUM# zt6lYsuX7==9;%%O)9W|_KWNXF)~!fomH+m3^4{-e@2d6tn%VeR>5sIrrx_VUaR$W= zu^^kebVI~OG@L)LxNEsCEg>DdDm3w0EcToUglL~hO;{zi8cC`_2f|!HWR|5U=Bi7F zNG^|99Ky<*Yq111;UbTA7Ew3N-0F;%9QPeQ%YYbwd#~v!!~Dg zVFFY7qn|4U!@9K3LtQb+tsO-bAA_oD7UPIb^CRBcM<@~9j zGPP3qLd1qTHw4*eve#0O?mtrZ8tn2>=7r@F4?ybJ{OxZLx%rTcLfJHxGWHCtly zK!{aTwN1{NdO^57lR+%9cs^F0f?tt&D%*<536j{mfmvb=;pZjj840T^UHClFmQIVVvP6SDbW>CtPDL3apPs4hk4xf9E@)(5oJv$T|rJu9|c0Ksa3# zCWKpG`l6hEHpC&QnMTCE`BQiNwf6h7ITA51uj?U=MHMQWX$9L1DA%t0I4%H+j?>x| z;SII}7h(tSAVvRWoX#vu@q=o$C24t8DdKxsVJ4__q{G>wnp&sLVqH|aw7OBt0lLLm z8fh(R9v_N!ignT*WC-NBV;}#S5pEK#o1A5*W~B_OaX(%kX^&8bRjk0sTE@k@ z3DBoG^ht$LNf^W?g7KI}g?4Dak_YCO;MwqCklLhIDKxf?gk+_ykbH zI{-8(U3@P_Oi2QiIExYga(vtcX9Ozc^jE0~A-kR+4N+YZn!Iv8jV4(XSyWMjq_QSi zirDUWqSHa=B}X-Zr9*vuMaf&&+SP{hW!uw+-N$R;lOL1;v>#HxnGS3Ltfgy)N}4Rl z9q}e(rHs7ht(B@`VF8Y=Qkus6{Q^i$sA8N4FPN!QDde4^`-%zkg#%|HlN(PqFB$q5VGw=Qvn|ETP4&VS@aIH91FOwR&5R(yg=H7FO%$eB zlV9qW2CI`t)t$Ywvo3B7j(wAuRqK_`Cxc?nugd&cQe;y>p8P3N6p8AaD$r|T6|ABguh*H$AwljIpaxMh2~#K^gi=Vlk@s3BCh^4Ni^rESTQvv zf9f5@{g|>ERrkxI*_5++><{EKkASIj)I7E&BXXC!I=CMpD`@2C^QR$d#lN`9N9XAd znD^xjMHsT^ITc(?W5g+qE4AewV2%A5%=H$KNC9f%OiqoMk4Lshf!uubVmj6u&X(#N z>O?pbvb6pT?G5Yd8Tz&>Tt8M^ST*!nhn>|}^y#9rPDoB{$_33$FDkNM8K~{mG_rkn zQldPVj@=cFt-nlnQah{7TF-sqMrBh$v}r&S{q`UUy57%!w17ZnYGR=m!0^x_?oUqM zR~a|084V;tSDQuAY{C*)O}#5=JycNC3fM-;rYJisPm%#soq0tw`T24N^{RMe<%Ye) z!j2~@%-TxcbyO&H4eO-|2>c# zq7R2D!o`?IwOO9EB}duwX&^CZ_OCs!L*nKSu`E?plNTZ1i$m%cUMU>B8F# zxM4_#=-@nKblV!>NP&NF8X2ICz-RZS2VQM=KrsY#^n^h^_B(~3A6=yxro@81fz6C= zTUiXIYN-EmnbyMesOayjn#ZNdE-fJsi>0q!?R0HRAJ-&ZnUrMCQHOj8-}JG;Ks-S` zkI7E}lmoye5b=4r#2;oFf$`Q9CEu>J9Ro@sCkK=HW~QL`3PgFEwYUhGF_%)o$My7Bnn8#nY)ouk^~ybp5IMBy7{;TtB- zP!AuVnl`Qm07WI{9!N1%x`DbelE*3Z5hnDJCgdxL|8?}EVgtUSip$o--Fu|kT&UlgCfWN$A_!}a~DOa9Y6-f7e*i`MTI%E?Jr zlsKXMh70(yL5%Ps5m9hi()*GEjzxm&G8yhHEw1gg96|uDEMe%m!Mp_)X;EeWt;iw= zV0ux5b4{e;1~;Yc@sU$!PsYmq?pRn{kv0oJrCq09 zBh;Z271Mye(Ez`;55-Hm##aQbGY8JD<`+}%O#O;*LbMNV1Gf!1lzk;T5aQ%3>gHbs5=?uZ*5^=rw zRZYd3>cC&p=~!&XH>%>so^nfboRlJJW}7WJ*#SP?meC(w&|n*sl()cV*d%}_rX^}*{x1W z4NpV0t$-9i4~k2UTGK{paSv%-%TO34b|R#BLWcFht9FVeP$*D{HSXY*3#6>q&+Sus zL6IL#yYP6d*G?Wxjjmyh>>y2aFXSsO+^A96$qwOG4XY$Y+&2I9Ziq9Jni*|Tird|- zr%A%h8g;6?JqSS zg_H!8n!@EK_^I}@UX7=A+5NI=*B7grT^Y6>Q#aWs^v4NwO&-w@KXIqioG@2E5&tLL zWIoKd6B-2s1d~B&J z9*opvFj~_vv2)V@V)cmTtGB4h=(<)mbsJeP)u8KCT8rZLwy4)PwQF_wwzj8i*vaUw zwKs3H(~N)4xL>Wy8pQV^ZcJWndS54Nn|Q3!Tw@o3mJWELkri9Jbx21OpO7vUFG!abCRWDvsR<2f9_{ zGUHt~*|w&73li*TiX~{$;LxN=flv#%DcvbH>r?BswRDQ?rB-SW$2t;}=tp%{`*jl+ zO4^JD)G;I#5o7nNo&w5rNt_${kAz6MzRRhI-;E?_vQQkMh53>3fyJ~;%>|^H>)Zx^ zWT9L`sg<68ig%WypF6b|)E{$`ZsNv13b#6E=+F)T92#J0QzrFi_RC^I@_zdnb6T;& zKiaeIUi8HvH=?l(x94jionPCraVPp39$!##X&ib1Jv#=ZkL;ph^WH?MX64#}aQp^R=!3XDMpdd+Od0IkvE=(7C_4h{;f zElz%!(AGxv;mFZJU6tAozvy}RYj7}yW@gLC(|09M>Uc0XXchykehf2r-!5y&;%Fxt zqt%NfK&KzZIO`6Ix;x1vTD~|+2Ut{W&Dp|9Y76iESSGZ@IEJHqla1SYqSoHE0J87M zg(Qb35maZ`{*LE0!AkmiPBUmf1*(5B;r|MQ;^lj?NNgNo$88|QQ`$>>0Hey-X21Yl zckCgGKP8Y2B}HGpoNHNG=62K4{)JGL@X(PVFP)``8ztI{6q)x;Y@#rR^)j8sLJJn6 z$K&!nccMkayu41OVPc$WwF*5^OOXu6Q4lQ<-~CpmNWqvnOg}YIsUvLQWc;?o9X75n zS{a)65JqxomevVK7LJKhqOkBu98LlWJegx{`o(wi)ma-WmK9BWLJ&RzCF|`q7+W44 zV^9`@ePh>$-ibgF&6ci%9|w)BlY80cv5upeZI^g@yvPnAkMzcNL#<5_uY|9l>=qZ{ ziN`r;2v0Ao2`Cy)%1=mXVph&fi&a=&Ir&F}URY4`xgF5f-D|tC4RZcaI0IpSF6aNO zM>x~X>!U87)V?cj#1vG0kOB+SP=)T}2p&jR=kQZ8qX;9!rD7|q)q*L#Zt~_wnWLyD zBpa{o&ZY$u7Z&uHJHJX&tjeIm!Znxf2|I7c{vS?VSjAX_wGu~_j&|nkc(EgMtC?`1 zEFf`a)`Fzf+thuKW*}=gF4}fXk(+=(2-{xUhH2B5^$+=!+!q9^E)_7tr#cv5(z^AV zQ2tK>PGuqBw=$%v5nhw@EP-zQ@Of~2;Afy@vHTHoD<&Qd>FP=;5UO9Z=u(snGKc%b z8Ak!|V!{vE^lw__MRlJmr}V}p#{8H!$(;D)gg5Kxm^ba{#O3Ekh4YV@rIRbF3TJA@ z*|z8jS3ODhQ=Psj7d<+BnP=9VZqj*WezhZ@XU6n|XUMd9o&KJ5jz&S;WuE=nJY(VX zKFz*n&P;)fqYE~w3U_THWJR0!u-!si>X}PTS~CqS%akJ#C}s6}J-m9y%GB8S6SR3Zdpfs=v}ocp3EEIvUTGPOD+h;JY?iHcLd z6hU~lmUC0kT+4a40=lGs0Kt}eWuQJ%@SiUnHfrY~lzAp!Zb6#mbSn|TkAqgGT+6X~ zbI(7&rErYO;;>+&X<~06V$LlzGc0c$@p^LL7h-H5>O6;m&bi4Z;;iLx*f8Z+Xn~}# zX99!G~5P z&U2ImG-zwIs9uSK1a9FXlI$EABD2&~YuTP_nWf?JtZDNgnTBBL#g!;hk-z7&oO6qf zC=LOmZ(~Mo)J9)3osvDB!0OpW9QB!SBC+txIG~9_kQ+eAT;_*tDfZ|nSt@*3W%+ko zU`nJcp;1oY*#?b2I5`YEByVg^l$-{!c+PnOTe{1qUwI=l0YRX5qG|9mOjGn@igKp! z6--RwJG8&x2q}Yg0C~hVqQZ+2%A%Eaw$+;;hkZx}d7Mdf;Y;f!hmSR<4-0|AryQ~6Ssa!?8Xd91GqDzO-kOYQBjV@S9%JFR>`(5|y_iBY~F7$KVc2*Sbj+vvr9?tIP9s zn(uWkz|+5;9Ko7zY4sJr>kJL5g=*X59y4T+2snU-8U|HsTN zBc6<5dQosbm(-&Wt3=?L9OF%G#*l|cqtYq=Yec*A&niqgi2A%7ag;Ub;aFsdN~olN zayBj=lC1}2TPPqsXSf}#pRPbhE0Mx1-$>G=tUfzxnBcUDlW|Z5ipwpL-6yTY5iQtCj{!h_FDfadybDZ*t#0?Q6nbN^{hWIpfyh*lw?P5z<_d zzl~L#wwrTTy1cd<#}(gW7*89qqlp)Hvhb4?8H}ZO zaf+hkl7hOx1xWler7(X}qHMRl%&A>4Lu~ous$Nmb4US_0L9<(*;4CkD> zKO-#yo0Ij7LGMzouM z;GJ2_Hl#J?kaR^_NCUdX+~@G`5uZ0i+yP9!m=Yh}7Kk6Dd{R#U85e<%pw9@s!YkTZ zU(hv6a?hJiw8U`xZpk#ENTw8#$cehB+M*xo+PGlP_DIbLl1KqQ8oi%S%g%ox_Vs>5 zki$N%DAmox2Kl<7od?UO85Y}O{7U!fvAS!;NzN}&oXHw^Ayi5b_pb!7L0g21FA)&I zKRuNn`;L!&BQeC6d_hzR;fv^Ah)j0EVM_9kGL=9qltDq3&Wl@}2zt*F~I6_b>qbqrn6rKMx%hoCU{jl>2o zRboF)|U$BR4mF$T+=BK9f` zu0mY5n(Ev#z(t2(=(P^%IQZ&3!Z%ge2R7Ga1T^GtpLtW01U2PJUgfoKhYz>`GI@VM$|Pi1C5LbHPz2<0n%J@Y52qC!X69 zFZu$_yGHQM*@WExz-D^F6kOLo5%P*75HI5sCp5Ui%QHVAEeZ|3C$V|>rS6&X@5KDP zXlX^P$B3hANbePO@j2c(gDZ}Wp|=aE$0&D@@`k!~W}6xhtSO_^DY^89Na2W{H;M5` zvoq%C`hhpiejlYf=ID;Y6I7trv@;3wmQ<%N?#{?BH0|2CGg*Hd_(HBXU3(4tN&WW1 zRntDbf;hZ$=S%#HxG};V< z^_i4rqvV1+#U$$<%Ep><(;jT^GE&=(m-z6w(n3sjy^{{iJvo9Rc5U%cXDm%ygu3I; z1!r6~C+H>z%BDN0)!y&6)yGh4Y{8h+D=y}k&#mDC6l>iwMTcvj+Ie3p<#?O*0sr<2 zS>^+oH^dUX=#IlMOXJ(>wF+%zrZXop&org_VB9d8^QQ%v*MeO|st{X8xtnTr8;s~K zfs+&C$+|>HX9UHaS>_mW<_NRaD0pKukamvHayt9!1exj*x0 zQ<;gvH%Ai^6C6PAWmg~UgPVi>Jw{-;59HJ?ttF_w*u)F1>eSlySY>%|ZPQ(IQCV_( zPV@J9;#O+*l~N)^H5j%CUg9vE%cHg7uNJca6 zm)$^6z~;2PDP~PbvJ^}Ms-G7mKP($oZ61{LU3B;ga^t|-rh>2bFu2k3UGd2*z~;6> zxGy^@eZHXo=eX%$mCnZZd(4#h{qX$XjGG(`jjavMP3bM|%etv1|@K3 z9s!Hf9I*5U-GVxOd&n=s1`l@yiWwIYoCz%`JoHT7z4mGEM_!=%au%!NNU?M`Vjypp zvs40|hMjJsNwH*!GQDnhg!fAOGC6#4-K~!?ES@)av!3iiI!)DA&qga1ox(|G44zIr zJX0T>02&6C@8^HmLX=%F-|Kxl+cbPjPzwG3f0e0+F{6~ZoxPK(iK5f@?$F7_Q_REI z)ZxGEhX42MOnpNIR}Jk;w?RtsH&t=CczKPgG=JXBPjq46+^iNXB$=%l)?bFKEEmUr zSt}dAUkRW0lNh@>yI(3;U}IxryI(oDVvjaA6k$)Wish5WF2~xAa_@M0oG(WR{Xgz$ z1Kb@2Vhoe_jj1ClEy)xK2AjxgN|6Vga5xmDjL2iMT2sWOwMwoHQChIYeRnk1YkthM z=p22X!h&}UFzGnr3vA0P?zu?}BKu*97>zkq#Sjv zWTsa#TcEcvU`jCw*Svly;u@7tIGjr_Ovc;FnK%w>wf*7$bfE zwXV9rSouykul4^V*jVQf(+(lOT!mxtMHxV{evykfQdMU)>7Wp)v9G`q=LI0;X4kYD zar#H{e;d>UZf?_$dz9ht=vOD*h}x4J^rG7ES-E553Y_>+>r=e>C`ibRM02=5Nopnz zmsc#fc+B36ZXwR(=acR8dsmo4HOvs0{nZF7)ev1n-T$T_^82SUtVUQ*-4zO=9wgN|W zqSh&XS8RfWA}6K7ilZ?{-YN7{Z<$C*;tifgS}BvBUtiUqsUmsDN|N9w{tD6cz%VBQ zmp#Z8Oq@yUm@2YHn%youl1v7Gr;;j&qLwNEe!maJ`9!&Li0HN(zO! zCqUYiG&6VyEot7k(k22&Pw^|F{~YvQc30b}wA|$`nW;_?6r;ROrid2x+!~@nHlW6s zVB)@7u}vKfe+|McJ<)@fW+amaH~F4@Q)#dY(8NWzok=2u!b3QfPC7@S2AW2F%bS3M zF-ufAdv!2cTU5rQa=NL~2p9bs;em1`QROQLikaN_%<(@{@*(58%?daOhz%kLh{*q8 z^0IR?w6Qc1H8r!ev;42D^&jbLL0#7#RRWD~FHY8&k*sJoRT$L>)-jtC7wmu*iRecl zL}_F)t1=-?1n>B^|*|iv#;DQ@NGN{meE}&j&`Q80d#^IGo}!0lqHsXr{FM40yB^Flve8aZd~39 zn!ugJ3$;o3N(?IhN@eyd?Z;ZS8MdYBUM=T!SLZ%2i|W}qsldw)>v1P@wJ8iN`y&o~ zhKC%hZI2qa+E+cbmp;T#;^3~iHzs)3_C)9Z&P}KtS5lGP_)vdCs%BWS&=> zZQJdrHD1)Who;kss6(b#APBDXsSEM3dmvpEu5mubE}*0pHd2K{{sQ0bZ#+scE` zeUD@JpPUvR6ZFY$z)&xUGwnC%i0RobH&z~za@IRDOs@j%E4jk1+5#7`vG&$+k444; z0>PmW3PuDO5deV}24LopHN(=(#)!Aqok5-ZP^}24e*ECQkwI->b0ThnuGBS(y zI=UZ4U_h2AwC^E=ItW9xEa0xPfApALH2)bbBFH0>46&T@o;;BB9p4h??T2pwl04EP z(bSOz0o6S6HCs1mqbu4L3cvPD|V`cu_s&KS30m4dcgQe{!jg9mI{ooOAoz1Ruo` zJtO+t)=9E+8ZW7{0qQ%^>|wwdl7nV~Y1oL}b{xjp2bK`k_0ac90HUte=sffThf8xl zeJW++&@IZUk*Cy@K`7iE8j;LQDBRjJi8NE;5Bd2tHkbzZpenn{KcV>c^qoAB-fyHk z*-P?&{#sJ=qLTl9mwZML`sdIm;R`e2xnqCQza=RO>OU7C?klv68sxPfrkkClbfoX* z%C8VJcb*-|ZGV31qg2~|kMKV;M@e}juH1L#K!N=~Qr-SvZO?ya4sm-YTSJ%s$Qn&4 zXaA)`Kk@~%Ynv|y6GOZ9+iB2IN2;YKgCY+M!0Ds#BLQA0VytbLxknvq{OunM>lGC) zh(O#H!Jd(A!L&iejrU8>RUfp4U@g@+srgI^wq)xG44W_43Ig!b*Zm|&tHyxV58V~p{C z$|my~-U#kvwR4c%q~VNhDGWz* z$rYL`Y}cHl;Qr1uKdSg9>rZzgmiC_&0Etw%aG{1NweUl4;9Jf$jaE`idnL~VS>_ZZ z7;}#$w>x9e#P`|h(;!1fD8-XOhmTn;NqgHbl1iIMooMCDbrAdF`Cs7nwcYG0Z|2cT zu`D|Nc1^Z_>g#2n9!250Xt)6mF#DL=k)czH-MFFlMlpLtxl`6s$Lz#sg z8Ir2PWV$5v?Z&;ceyzja@B?}}XOjMKxI)Mkh(!}uLvGV?GfPNa z0{rwqr!{n}1IBO+P+H3K!V}4?RHabVtOez0R4=ejEl^LfEXhwtkk|}m<>4(Q!l@Uz zO@&RRfG!xb!9!5}qA^TD)j5i7sF7?1MKp#55lqM^>dSDM&txUSxwZw#z5xHcJ$hz2 z!u-2DabW&?8V*!><+`GBlY*CRycdw@!680n9axkVC{;O0|5YqE`5ZbL_^XU^Ls5!W z$jI;n&OK$}{6DNWwfPp1!oMRm=NtRT_kUI6J zB2fgr89woOZ$A0vKDkZX`@dhK258ciI%3l2bx%G_Ch11 zGqvvkXMCs}kQBn`oO2thLdVaW;;u@9bU&i$pY_U$OF4?y)J2Z@gK+;gf%O!F`6{N# zkt^1$_yJc_^VNk)Pqe(}K6&r?Dv6ucojOCCUKt-E1+6x3@Z`3G--#x~77h-5sM*>Q z64dc^%P+=!E!*bS>K9$MJ$O=7l+stwm@wX<+5}XbdDZMWT2$*8T68`$s$STWh<{AD zUX|v%=O}K!5@9XWS68$s^v8Iux!SwhEJTL0SPd-V(=)jb$3rGgIZzh3)42uar($Xt z*~kGm8f=Cd?L3HE9Kj^*Gpc2F$@njCXfMbH%qYmdR}Tfo#Tv!C+sDxWFUe5U`3#Sb}7-A`%V&p71P zr?-uL`Wws@A;UZ_qfcUfcgOeP&qL6B^^G*3vKKeIs}-I$t-j92^)9e9t*HdMz3Jq6 zME1kTJ}otW2x`hCtD6d%lrWwK=JGllJ;bHgU*1v5%_%MHq2l5T9)R{WHtlKstbrSV zmj)ZqZ}hFkp*8WO*XLP<{1AN2L8E3z`#Drd=kN0d+_QV*#{QY2mj-&*Oc1wu*~@a^ za_6VaqUI2orXJd&2&RHHz{%NnV-<8U9#N3}2f2yCU2p%i(gQx57R^79x;s?U2S&;3 zk7)ioU*gs<)X_7+5vI!*9mCwUYv-U^zI7yBACkMYj z2R3nutPYbSpr{byfMe7P$NrJiHyEv8t&!IfOM%ISQ8QbXFSP9uYv6&9*{N2MfnWGF zROuD_q)N#v9MGY;*GCMzV|tl3Mq`2FSGWh`Li?ds;6iQ2zXlopLXx^!kQ-jidx4@O zH^fY4$s^xEJ&ZHN1bf2+%lt$FFU@+~(EJ>O2Z!D*ax0X5A1+7p=}9g=<$~_@g0hcd zspv#I+y5V~DXt~*b6nVUbZ zJFeLG$(q6xc zV1+_79=&MsB*`Rf56W-Y6Akq3MWx>L+g_7c_e>Mbzi=8`(>q>;_nTBZr4Vt`S5|b# zhUJlHw0Yw_U-tg>*pFaq-rPBxq=3Dd<}Y$8T3?5Y)^*6d(8)FZ%av_!RywM0Jyyrc z%5UW7kR78%RO{GUw<4qj0@vUeWhNq~oaZq)oIe`6??_G9$okWI3H!F#7P79Cp2||y zgkolcJ`|}WHylgP`^{2cqPKKlP>#?SxNC(2nm ze>aH67N#arb`Gxp*(p}5TifG`q4A;e)OT$T`yx{*t|q2(yRDPk<_7@p6B=j7%cW6C zi1}5M9_Ck!uCzL=VFW-U1o{N1P~u_92F?A@b~jh1hU3zI*Y}*SxA8bnx5eeG_{luw7$UVAI`otYKGOdyEA1Zopms*#8?gXJ6)U_y2MB zj!}|!-Ii!o+BPaHZQGT$ZQFKcr6O(Hwr$&1r7CUv#<}0=?sMMJ_l~do#}gw)#NYMo zz1Ey_%^A{+!lB|t*^{8E)DCaeL>ZV%6}w@NQw_(>*Tui_<=fUMC}oY94Y<^YxO5CyqO>n+m zj?a}XwI`zW=QOk)T(K&*&lBPvwsarTZ&4IMZ{m=qC_S6Dmf`k?{{v&<13MTsL%Wx0 zbqm`;#Mzy*W96o)G|vkfxz24WTdn&PGfi7yMH#%_v#ylBTjVl9Ltqr^(j&Tx))M$M z?^$c!f})n}A9?J{wrb2%KB!h@$W2HusNJKup_ufPF|n6@MijiJ^Mj^$XKmWe(S#Hy zqTHCevxH4-va48If~R}9u%{o-_4_u@-WoYDgCKIP@Y2EV!6;TY6@88kx}pkZH61pWH4Ji(sp>?DLZE;U)paW4;%Vs2W3v#L;9`4 zU*u#TbF+QptOa$y8YnYK{L&r0(|OEB8)O@Rmf4CP3h(fBA!T~^{SEgl=3sv!g? zBVL0uaG0Y5aMjtMWQ^y8I_2*G3sVV;WR0rkNNk$;Zb{69G=?)f(eTRiPJ6a;(RUT%Z(dT zH9v3@4YN$5>=Aub>1Qr@+L?cLnxl$>v0&2;wClaZ31N2Wn_WnpDsgbJRS&A@Lv8RpR=kv&? zN%9lR4p-oUBDU;Ou`FrImcCHy|6L@6tXx;b@l9$*fTPE-ou8N$9yKgI+JH!5Wz0=T zi~Z{#=R~`1LN+tRw{QIj|2B;NKk#!w3tMAgM*Kf7F|{)#R5c)seoI0F@_jCM(Yy+P zBu=18n@cN-#==7d6;RYlf~zj>x^ON!x873KwB%a6!?keYTrB%BkH|s%d>qOAF}rRt z@-^U>mlgfEnE?(0ot(z?FtG*97JJIv@z_3i3URvxSq-NCVcoA!xoi|lPyWnwo@WxI zM6TmL0E#I(aZNV7$uY#vv=f;^2xx_bLCIv_9VYoIx0Sw0u;`X(k98Ds5^^J+!nX5> z_1_H`lV?m;K#?RXutbe3w8nx{nWKDZ#FHIg7gn#;#Fl(pf|g-xzz)tcJ@nAB=MPJa zDPs2297{FxIzS8axEp+xsm=*16v?aRNGqQjGnQe+jy@hML}6CZA#T&33vA{|>e^Qt zv_4F(z)UO;pR+x%jx*Z2ARk6>y%!tK$L9@!> zx4blaW01D@tl;1RX-(wsZ6tVyXKVkKGE{15gxF>;Y11ZEm8P3? zXUot(b3dWYk3{%IVbf@K^Hi9D$W>(XKqfhh63R$s?naP9?@J60xzSXlSxRCn!zZC^ zR$H`FR?|dE4c{I*bX3oM1HzAxGnyxae;?X0aaGt!7Z>cjnZ|%0r0jS?P02p@N&rE|>-d>q zN>&jTfJfRu$WL1Uk3yHX6+A=Y9X(;yFjs{`xfUrybwfv+#d>G0Tpfwd`#l(aH1{2m zSb;~{pYF4aQkB!$vh=8w$J!slGa$>6tIC|kEqj)lv zntPi{4PwRO^Yn=f%M}b}CITUB%71j9!G^4d!09|aG3tkZs5b%Oj)kRkYQjN88U2Bc zPhIK_bjp&Vr?yO}8XbT7l)nmur$e(3^~di`VSXn3(%mUYfSI{k0BvIlA4xl)Wsk^@ zo9-Gw(vHAgoACU-&+a#>>voNBNa!8$g|;@;DwbtCG{*hf5ztJV^RGVaYo=4JUWpQJ zx_K4p*}GXaEPVkUFj9v1+JHViY$I(UfFT
;XiVq$1NZ%svsy5_78&+LHZ6A9L{s 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

t_sv=It`iC+#-` z|F@j2@5q$aX6Mw@&DJZ#XCcJDU_aLbz1yDGb6kY(sDD!=I|mgnZ|8n2pVT{_G2A}8 zeF%3qn>a_u#J;Z49e$O2Ups4z$9$ zK(a^cFFnfFCpm`^TX}y6|Dt2~76f%OTUi#+b6dq1p)g-R-q@?aiw1u$&-4M2KDF`6 zV?T|85B-At9buP>)#B5wZ|CC0f&=+XXK@bwr1tVkq~PbS=BM|>rnmAeL7~2N74_Z> z8o0Goaav8fc%@e#Epb8v2MRK00vRrL=^0iAVM>f^Jts$eybTfb74FUTv~nJHCmOYJ?vH+{0+|p7=|DP8ft#RQ`lRz?z$%`u20y6T#(;evnE3FH56{IZ=TPuaI#P>fz9h$O zTU z5De#mM06_3vpD!iK}MRi5fXWRflqi|SO}Xx%HZp79JlLVI?b=|lw8_Of#%u=H{6 zcXSK@PNTeLhoemyKa|NUyv;J8#?p>xXbCH2J{ zas_SoC?GT&jY^xbFiuYeLo1lONR`?v0~q**E=Wxxv;yR00wk;t9g`TDrT}MVnhdpZ8=)q;H1(>6A6Ny?T8V3^K zerf`uBtX2}nFcFD()jYKQu>f)zP%>{T4Rn4!9QT_Vg65F@Ol1i2pi9+Dnzu)vH~L+fENvcxBAZXOuE6Q{Cu zoD@{+v3hpL<2ReDQMxu|uk3q-QtHe3yF6(GcMT829P{#^79B@!ReHeqm?N4-lZk*6 z+tuX_!q~7n0*pmHy}zn3t2Yhl=6eL1QyTzZO#xJ9%5wLu$f>#L9$L$x#Z)BkySb`! zb0gVPKp>jDwW2T%pkBo8u%OVCz)UJ@LJQzKKfBSDorHB;yZ^Ja9SZ08R75>q$K2c? zeRl=fG}6_`S8+*Y0(MreByen8VIm&vl#JK0JL8UuFK9a7(^yF6&sFaddlO^Hewi2jW5 z_|{G_%1XB{6oiWVM1Ii-ezrb1SzhypV}XZ}2sgUk^f~^}dyZu6A$2Rt*~xD?hZ)vF z*nZ@f72}`v;hc3^q;%lJ;IFTI+@j;;HA~Va;2wLDQ8C$V8-bJoNq8t?de`iI4y-jt zgGE4|_uqW$14@l093$b-L~LXg6Dem*>T%X~-L3X=Gy|LUNd-PeF5{pPPQ-O|DQzv4 zL0CJ>hb!d}VUDPDAx#=FB5e2AT08Ro%J@4*)R7(L)&)eBh~A!1Uau5{~&RgM-o%-=N4Vck?P;JDHtk1I-4FS6Rm$ORvSVjFr*q5SZ$}Dvv zbUVcct2a@$Rn;($%O4%UU)|l-X(_8p^Mms;7`Y!s^OyFqlI#IOg)iE`OM|h9$yw^=(Y}EA>Wx}%4r?Ik z^I>;ttag%t+FgQ5v&@@4fiWHMEfG{rQBxTBfKDev{|NWKj_KVC*CxaZadboV7+A|k zhgt%NysK2r5GU6roEH*RCIs=^ygr2{*KU-E6gvbZ`I`1R3UumpIOkThqF$?8T#F2g zLp7bHD6R?t)LAvz@ws7J>B=6idu~F0ykuDvxVt)ldN+-1dSOWFHHz%`v;b*)d5Fq^ zPc-lMR#g<4LpNQ<+gCKKk8s$?Z3EYG6uM4hoKe*K1DyBWbzGAV@+}^4y52n@qV;&xOu~+PJA=} zfU3P8t>E{Fm_tb{9L|dy;{sS~Tqc&zXJV@oira-@O{@3_8IRn^MV!Dk_4UHg*FH?U zyMXr(azMvhl4q11L7^@$Doo=7A)HfDJ{Gk2$15FUfGNgvNXpoF?oqy&9E^123bOUHim z@cK^IpM@mH18H=1j5Kbq#BPUFZ05=qaQsjS?=sj+az#7L6U)HXtO>r!(jeJh1(E@m zXt|J&9TbjeitQ$Mm@n>=|S>fB57f-BvRkNksfRl9Hsex0AjWuz>h=r@! zZL!(Kd074T%;T)aG`x$hiFbclQSeuKo$E~5g=-Jvx2hSDsuKY+6h^*TR=ZUazp;L9 zMrwYLmIRFfF(%Sh@w8VJT=2U$c>U*~5gtqSTl*VNnj9{3dg`8PGf7K-jV}kIt&WzF zxUiY=OmL` zTC5Il*Bw4!kVW3w+&^q_dda4$0(+ec3tQs*ZJ@6Tq3!U$!q6B+7ukv()iC0DN zEFOnxy|BBs4cE9MaHz!QumrB}dNph~2<;9xBxEg{nQ$elywNUGM=@TZGROY5nLAsk zFlTV4rDEVar zj3ctK6mM`l)0W>29WG7A!nlJ`RjN%PLk>>76kE_CQKD9OPQR@M1I&D~g=y2MEb3+7UtT2X znddQ^{^#$=^uxB{YFI($0O7I6CfI}rChNs(4XVBY&FkpUr>T)&_~O0))>Ri@dFlIF z^bN>i2@1*qj;5>O09E$|9efwwbw|$nGckjo$Ck?nlm<&j5h7&xB-&2R$kms+EBFR7 zGk1%~BSVt@n0khrxGnqDdV&$;Y!ZJ#IqHGOBD!fn$QKlzDu|RMz5iE?J@FMoG^^%0 zo(A}Np~;r7Ej0&Y-UlqJGqTi}J2Qtt#?500@en@X!=F+q_L66UC~Cv_BvgD?fpWs= z)@gz!w~1}=6H|5DJ=hOd12LMv z_Xn^HUZbB!t3uyfUv3v5>&Tu6gjccx?m4+V!p%LE*Gx_E4qHg0C=u_J%eU!j4z~ zqBfwl4ur{rSswUh9S5CmC%|5X7ErPW8IcO|HE$bOS{Y!rtFgZzs@x;G!}(VVy4L{~ zn$`UpLuP*WP2<)^ayK`b`xEA$EM~W`CX);viDKnl0xIp?*JCR|=n+@MuqpDOI86tQ zuC^gCEn@&WRURxAVD^`&UANUepNO8r%`s>c12}?UTHT8MSv`m|bK<1Z*fAwN)r#PP?sP-3KDB2@Colpa% z5OXJi=xCVJuIPL%VPM$PIcZG${pptUZ9Sm~7kj43jpyN z9jGhV`JaVj+=K*JYGS62psg!f+ZyYk=}P<-pRlc~Pm1lc6c@YjtF8<=CYCE5wrh^T zswLCqCkj?G*IF%mVgR3bXjcfV7d7TH8`C8o(`B~tDz66C@)$OaRQOIjBG#9Vs6YB8 znA#gq^F=>a>dF)FJTdKQiM_2O6`tp;WHx5@R&#ZG97{W{jQHgBmpXFz38-o@IX5MUT|SC-O1PEPt1gveRN;wji#YpQiTjt=Vgol*)`EDl{xKT-LmT zLlVt62247z=&%IOzo?upkQ*uim}EgPG9?T%#v%qd%H5uyGxr~rt~XbzG-l=7FB30g zR}iAxElHn?a~xjuvf@mXQ&PWd9QfBl^b?!+qZieo4teekwNj>-aSC|cBG55I$X6el zGtaT|j&dQt;@-c&daS-SkU&k5O9#xTZk;JHhP^FXt>7dvJD1UnDcvOIuS4v%x4C1F z_V3|^tJYKiE7wt_mSDpr)n8BQl(%3LAOj5vb#$#-8TPuL6)hKZbaOVzOcmo{xsY)} z!TSLjOX(;{$Vio}nD|=)BZ;rrEO%C)kaF*fBq=OMPfzl1FYm4+&-j`t%tDoes>8)S zmO%%@$VCERh!f$~O*aaMHA7A5XpYm{WKo>8O*fTYZCRZ0YNfU78ju&9i}j=!vcd~` zB0c=^ho4%UtkAHWunV|3AoOZ?n03&ER>KfiruWI7%+}v>6VmCHNIfXK7L9!%`824a z4yJm*mhwG>1;_4hO#sb7v39l8vU(Q3j-BSMrwFQ|=t`lmCIi0fg83@}r3sD5tmr*Q z+5UBjacVs<2THp|r`I3lNfk^v1n{jOaGe6NWi{R#RxoDl=uu!ssdo z&ukV^Hq17-wa4D?gBl~n_CS!Lo2W5+gZVcCntoh+_-m4bn}YZwWc85L42?(5xTrU# zBXyB82(wfk3$}DFTc$!|%$S8bihK;_fba}MDfsc3*wPBGQO zSaiR?w>4zOi;%@pRGb^AW@)#%P4ywWQR|JRAR1@1!po&w(y&jt$G^J~>I2bsnVLH) z$C`?;$TXQnM#a>uFy+8EPy zN#;LA=ErRFlUGHURBX5K^OHKW0d7hXn=oDOxuVQX#iqdjxhONrSXl>dhS#i$Nd%b> zB$;&^a(sV_idb2SB$Y&kmyIFK8HfaDHh3d|4OvkN-Vv025YC?uprU?IP&_Nidxr$> zSD+&P5n$%Cgo@;0rWj5WoU^nnT!Q_91qd>3K}JHE%Ht@(*HXrSR7#xuLP5sKvh_;3N0>%8wG=2;+ek30|4bvyZBOBm{1MD)_BIPz=_y$mt+Cq(8tOOEtx2=gFvM=+WO3TF!TaP!m2~5APV)Yep@iR8ez(JtReSGAOmlp${nL1%eo90w zBVFGwWLA%m9dRv8kMVNHUfq{SlcXBc9%;1UUWwZmmE2c z9-=VszwN=?A~OY)$X*q-pN=jWhybSH3Jh|neNv3z(|{rS0E&PZLmtpz0Qewicz8td z%1og{*iwbU^CHF4gdjfa686vf0Sj~~ppko<3`)u*gU1Ak3}D!p&*IW5)igveR_qF6 zq~`ToW>typ0ySkb74AdbCMw;8M3^dgBB0^~;BE8T;|1z+UXd)J8dCk^=gb$838OSD z{u`NLAjKrSFCH-obodka!yXnlIphI7#Mbn{6dU@ajn&eOH4&3Md~fc-w357w8ncUj zB3x%)ugr8HQ++VW=$W!3gMuf-D2vb=T;PXlKMkC9!}ebF0f6Lv{` zf|c#JAx!(nAHNnJzN^t>Oa~+x^lW)LHsPk*KHxd9lL%XN($8aOC0T{r=qwF#;dEzc z^zjULUlR6V!-benXh2yFU;mKQl#vIfaw@#MDMxSE<7C_i4W(O5!UvB^!vs;a&^j+c z9*?f4$7|CnRN)|9lnacE1Xz8uyq8OBa5z0_Ar_}h4b!qiN4!uG>qeXfmAlkHfCj4=^i|IJ2C?lTpdBoIk-7;9-AwTYsc*|K+ zBPeVp2IE}X=pB@3{vV|tvl&M{Pe*Rkpe2j!$9?CBT;2O1X2}}{0*yOeS=o}n!Iq&_ zTZfjw6J*3+44P7ixEVW_;u6!js)%1*P&Y<7#zMKv**S+C9h3}hpQP!3oF?EzLmVQ= zDIS9m`WLSCgj~ZLEe0m^U`gF0G$HA_wE3hg6qsAjlB*6A{Bp83Y0};`#k4h&gH3q6 z_+82V4ly`!$f9vanLL4ZK1_3Jsums%@~ty$MSHqTz*xs5E63SSoV*n$Q_$^|<~sL0 zlWzYBwvz~^V99jL?1+JuHY_SaIE_PuY4vS)_6X19`33N``FF(|}3 zN0MzOdV}YOw<75ZSKUO;Z7%%0Y%o?m07J6&RLqApwSdP1eYIjE~AuDct^4 zByP=6Is(ULE{7e6%Vz!p7v)NV?Du>&Aaa;By(xTo;`b3ljY9 zK;ep0%kYpf+36l{cuZ=VZCR8Bvd=N41n;4|4+qB{#6b5)DZ{`6tK-l`tN*kC;FB72 zx>FC>5)m#K@RE9@9f<7ao*txnmnM0iAbFR@4Bt)`d$iS>>qr!R$t>tFCLAkBh3_L} zE9l7xICZ0#^OBjCc@H2#L~+?}U@5+q)0YEKT0$MF7E@${0xNXAq~T?-I<9-v1dq^}r|#w>6q zpcKSjb1eTL2Y=a%1rmSmP%!soxZW~Qdn}-=44~d@i(l9EV6D`cyVnLlx;7y8=s=ZZ z{tclJ5^BxA_TaevA6cMwNuLMaSlPC_ID#0jRF1Y%;jvd&hSSwWYl!Dk6Wvx!cDHh6 zjWQ>!yFTiT=jid5*;dwmSrhqB8D|#5W}QT`{Hkem$)QI1b^oW7(3jwkQ~Vg((MRu* zcjLb3Hfm)YIqK7WyPFn}=YLeR<9Utv0iVcCOF#!=T;(uyoIoV+k7 zfuV4>BwoS^%|Fpk$y$qVO#8z#-g~ll%}9^0Oa|}mWK7@7c&~v{96ig2?V~~VTcfF< zc3s9MG1ZmEBg={WbXw=xqROJcyU>=Va!9OGSD{ArRr?T}og|l-vRS|h6BNd3kF;Sq z%ZAp?mPg?Rr{P8EI6+wGCX?yZhBj6LvW7P{lX>6{!*^K>EO$Z%41X7nvXUIWk2byT z`xb1fd>$fMIgiIMCd!qubf1f!F6u*ds#x%Hr&PwvhfQ>sx{MYb$+%1l$pn zb8<4<>*nUe_vM2Y2ztL8;nKJ2xjWe>JN-AY7U$c6`4OC5^ad8qLV2} z3JO^Wj3w?|Wj>yf9uGr01oJUMnrGmeJ_Tuxs}+}ez3A?9x;GLz`AkXBBK@^`4xP-bE+5Uk{66fQk0-;M8#@nosMzq>B08>5E^@OwyI zgJuwLxVcnNJ@imdX{JJpzXHj^myY*aZq|PjF$E0t1U0csc1NA4D8SxWnxK%S$yQXL zKs#%>hN?)Zl}yaMV91x9_)oCPBwO|{Kea`pi_5RtTmIsM0$%WJbxrFn| z0?JV9^WojZ0;VQ-D;cc!`V2ML|BtkH49+Ba+XrW2PHfw@ZQIThKe3&OZQHhOPn=Bb zWMbQ!|GvAm`@UOS`>WcjKK-FTboHq|)py_5xj+-U;Y3S0SA7@P$d!2F^-hIJg+!T2 z{s7+1&Y%28qbB)4xL*Dri_17WXQwEpR8M1Xj;zaVM!vg?lRgtA)SaWlRt=e3niw@> zacWeSqd369Qn&TQq(<_1gbjKoPbP>cA4)}3YJj;0)?N=c1yO`yyf7IC9Ek?mHqSs% z<`9urfplYtXOWQ_*7c{1J4Pb%*5DiRxA#6Ve}X+M0c@DSt~0IRnQ>!5oIUoz6veZu z;FW7q{C6A|G*wi@v#c<7E-YsQ+K);>a#}QzzxAqoInq4IFDphD6ZHor?>rrwX2KvW zZs53H8T`(MG}WPw3{IXlsJ$J|D-*f2YB= zG$f%XBy%gOIk5c#UPS@%o??u4E)f&BE)k!=Wdbz3D~sthFftl&51i-_vFdL05FS^@ z#Eeb+20eN*6*~Jj&uqeApL?`RLjo0NV+>c3JPNP%Kz8*)R@;Jh+xuA`f^PV^jL4jT z<1561`t6+#y9>XROZXi|+QAMlnm~-Jm%JJ3ShK^CtO{ zkK7VSh(gYV)un%3ze-vbH7qb1vv*sv=L~i|p{{`EhJ}#V^H+S_nxG=iI$=D=(6~fj zZ?iFlYGc{BFJa9Z7Nzh}G2HNa5_2fj6m zWZ6g#e?a)B14>WES%0ne8CUUNDym5e%S#I1hi*DGO=JDe+V$w_!*a~ZkL>>p)N9f8 zm7xE^207$A#I8oR5JL8HXo+Z=B)TA;$KawWZ%GYdm}>_P$Yj+Gn!#|(_OnUiq>oTh zqo5{_Q6jzU!ydaOnFhGL;tXX8zTdXnI8xHmol8?0M=<5)=j1K zsy=};Qlp*JK_6LvL|>xuX1vL4Mg zW;OXpD|l3|rKst&wwqn4m*SQn?0J-W9zV1xG~t<$0_flQkkluiRnpX=73)E{{{P*e*9=e2d@~wHr`K}KCX~wyVg`MO7J*ZYqM+FCf>D!Z) z5~NrM4pY6Po*yEpRiuf~lZ!2oE;&@2726$~iN>~2Rz<)d7PW(i}R^kkA!N$F!(1r2QT zMS(H>U4b}9>797Eb>)WY@M>q&s@jrq+#Q*T&el#!b(+_DM%TEEPD=hH!1k`7A{CG= zc__TZcmci^op`DTG0tS-5NMR-oSP*~0%J>uqZ2V5H;y~3$Sf8_goZU3wP5RqQaSJl0shZ<*R=NoBVE6T19Zu{z6^1})M0l23${rA{28GG!lB ztZnFlN@QD2)@zl}2;}A4tybU2!bMKc}tm>MiD2Y-$%HysM=4_iV)N$? zuNF5k2`bt8l%mNmjf>u)6>WmG72fH+ZH;Epa*AwWMQ!rn_c59{)&zTP@O;C5KUU4R zX@m6IAAPCSdNq+&Qr;p)>R2n?Lhg%+=YlrP4OQvKHYjWs(Ib3MVwH-GijM9aYD~7q zqCXYHL8aJq?6iuOO@aJC&SCpQQ9SB6Jmd(=Bt?0V{*WMPY;&dLya*SSffP+P=yl6u zM$+@58z?+hg^W4T2L&Q(Xua?BcoK>Wl@JzrLsgM!I(CpVRDQD7+H^}{xlT`-UgpN0 zI%WYbCpW&Sz+!&DTV@0q{oEBG!&hQlOKH97 ztbh-V)+e`cK~D4-K@yPb519Fi8bff7*kScSAqCAE#d>w^R34fK=j^mKE))`V+1z)~ zBhv$ke}|v*I?5q@^zlFaEt2dSJbRWlXdk261~%9f(Yg{F23h~XZ}W#GaMweZH%bny zK3(ygtn0uil-Gu|g+TDvOI$p}?IC%bBV|J^^g(6**e7{hVgA^p`>;ri=UB?QLKtr_ zYSaQ7K~HhOjA7s4BtAd=wa}s6OWzFyXJo%wABS+iNZVe3grs&C8Q6299mp{>0r#9B z0uQwwE03VxC-4U!S_FPRZ_x4QUgr-_c2qv;DMdRNjBICGzlapWS*I_{2=0DNeV*Th zSfpd2$hw1PyIKn1H!}HJexP=q&%D(IFY92ROhqfpVPaw+h5QL<+esGIvf=C%5e}Zc zmql#z+(ejmoFWp8+xcwNRrsijy?GCYk43m8Z>F=Lp)UnAD~9rWKSO?c@1W~Da#ZSN{L$3LzDT`u|sK7ap zGSN0TBY*FXb-j)va@~FOt_j?MYD=VNo@-h6!fcyXb!>JMKhjN7FD?dn)J7Wk7%7lmrW}@X-6{Myv*-hxk z+s7^s5B#IWy$(5_?dZnLj&~v{!9AbOTI2;*TCM^IEe=0*3I*(V`jmJ*tG#&haZ3n} zgAC3U*gWZZ^2ojNSU#!#>UyX4-+V3&V%*Y$7T6-$?RF>V^i&;sBYS-pB;yZ5P}^hj zPWwjLb@-|GO!T4rgGO&0TD*mY(fFx$RosP#N%iG)Q=kc+Mz-2iKwkVJhOQT39{SMv3Y3;GIxllV?oXtbR*@By@Ft**#rN{ zmSSZkZ6(P@H#Ms;!~+JU2U4*PzuADciLb1zwS;h#DBJHUg8||fw>GGhAdaCfTbk+{Hry>&?!UjhHkggP9LIW-6 znzH!bxxZ`928;u;8Ea*60yW=eJF4N|zsmJ3mO4N-IY7r$J(pxK<(?NYz0#7B1JWRf zp3D&Lux*njjzL;(+izo`0hkpfcD;!*T8bqmvdoFm0_FNOIFe#&?m^yF=Y$wxKi}a9 z7J&DzyGmB)3H!Z+>-Li9Fot5)FOoA-ySBpcWYP~c?&OIF&Ti9lO*33ImnBu3LEbi9 z&df9cHmjW0Az_u4+l3@MwL=Ir^WRX6yh(x_UpyL7a6QX$I}>{bpT9B+>24= z7$U1=dtz7&yA@#`Sj%yVH$F`h?pR5cPaC!Y z;cfK$knUn5l{Ty4%Vis;T`?SBHaa~3sAHf;nkErhydoXV!Gv{iRJ~%3i)6j9d~!&F z7Mm$fzEa{tZ`^{2a77Md0%|d6K14!i39EwXdtCOF#52?IlWJyI?wC6Yhv_>ih3LEN zh|Y6+6nj%+ypfp{DZF`^`Y0uZ8d7iEjm*3BNbL;{R`2kY=)3+1fhObUSkpVo`lmUT z<-6FB0pK0p590;_3xb(-AAF-b;rY5|Zt{+^Yd*(gK`NUStuDl`7^~jhAbzC4%%z0o zk#(jqF;d*)=0=q56z+4_>pGzk_$EDqrFNxg{S-bO-&Ki6ll>c&olXu{rGnp9VRlRh zu|&eizVzi6)*mdOU9zG_-Y-xh#xuf#tM4l*WP8QB zR{Y6D%bLYk8BkdFf3ZWKbi_nUyu!`1WH>clmUIp_jf&(dA7BSb-c$3Ywr}EV)2v)E z4y?*^Yh+W}D829Tj z-n-vDE5oiShn{fzra78#b`Z(Vwu&FUMAurbSgd$}0`iGv| zKA1qik#RfhgX!k@;GzMPmq5%8=VKPlpFxm9W6!Ubc!+fFVaD1(eo z$P0PPKNX_3ct@iJ@MoXKex6O4tMif7-^)`$ki5c`;Y)R8H9%w!WVc;hZ2O!>=((+> zAxi=T_{v(|TJb%Xi9C{E!k<jXTD8CcVwPOj%e#3?V{nf?zylSFHU1x3u!uh3{09MFGY?d~GweO-z_g}_L$s#pf~#?%=@FdENd z6e;Oi@LuOd1^mNrSe~`zqL@Muc0!r?&2`xmy9v$CzWjU@X6~}A{k~p2z;=G76t+cJ zBi-+K25FOk*h#ig8LEcS9;C!E5$y|;2ayJEq}WRg@Ii>t_pFXmC98j+T^79F%!S#CM}` zdl1PEQ3MV;igM0;;FXdaDgQmlj-Cw4hiJT)}$2}emN)>YjRiT#Gnx5#}=jXW1|zGK8Z9T zii2Q`zd@BC<)L4nK(5Ty9&>qpZ^L~L@Bzm}KfNcJkC&aN*oIAPFhc^yY6B0Gsq9nlx;Fho^ZmXC=df00W z3E_VN@-%3U)z80v{Aeco@q_>W$HM=wWnZib?TxG9@x^c1T&NfQYchpwxW1aRfux#V zLOp9J;o{i2=s1Fu<^~PWge_%V>zcf(MPNwR7olN_j!31-x`Ds;1gnd=pzMSW;u>CncqyXK1D+`0`JjY7k)&~w*J01zXxi4w!`@m4Z4A> zyvbno&F!E%Gbzi(l=XxF*@X zv2#4wJ{5mo{q*3;t z0ao(twc>tVk9gCkZo^L=QU`vQ&^EdxA`cKOZ>o z*|?6B-ZQGm`El|uvsRPIZgTQr0J&>|6-f8$OYAphGeeXqbkbqSjniDnqeV9i*V&h&T!crXEt-Q&2_aC|9 zsvs+o^fFHu|K+=|8jF*D+O{)$%twi4zMf~}>#-z;@K%Uwu^4SXNfeyCwk7N31;zAe5ACza) zKvx#-~}N^rThx?4HU8SpaoY3Ihk*fR{1Lnq;{N6@X2O5%UXh?gPUe7tSxzzr1(Ag zvRFH6_D5?nx4V2Z|HSfu?}u5lD7Sx>gY<5?hu-eRwUO1-VggW5t+Y%VZOe!VjREuu zOZ}N#w8|~i@`;V{7%N22$yl-c)GC^s|WQ^y+2_ZbXa3P96C*oHpeKiV%so0+q=$H+^s?ol40rOG?XW z3OSx#9WoQgeW`_Nxf948LWiHkSCXN^seBLfj_aptLXC9{50^wiD)y{7tOK43qV#DKvUE~~7A5mWFeW>3(k9M`!&xVfmDb}G5_=9# z<+-pW=)bi~=Q%eE?Yk%7H_9AQu2fI-xr=V6?!}T5oRtsFw!q<4ZS&nKy%s2_F zb#QJADAcjDiPW+4;3XxMvg*mBqIrS${uBEJAAAj68Y!X2TFD3tfydU3Kk@KSaT<_f zXDQ-+S7%qaOjPg=O{n>D*?8KyXoWjOBVo2nZ^5=}8_4$*=A}w*?|Irt!dpaB)AAtW z8mE`k0n$G-`d^H45`?7nfoPtA6=}ed*NQswZeca%e1;3P>?GdW`2i!o08W`QUb>j9 zU9Dsi5Wn?i*OMLJ;HXT|LyHE4UpsRF*bL2JwZE+a8a^zZS;epOJO{1;THK7uzb%O7 z;cKoPnm9GQNSHU10Gk6oUJn{Zq;sgeshm`x9B!%4~ZN!z0UKgsaE>BGa=LDIUC$?7^$2J7ESH~AucxM;* zfHfC6hMb)sU4|IF%nAtwu|LL?gqX1uo$ha)_8P-$2&j1f^hO`=mhuC zRrpfmsjAZK?aW}};dEc#ndO7p*c-op)XdiY`vXJPLubQy(V90+@#wnf1g*7(<^F}! z7(!=Z?wQJ(L153dgG?X9QhN@OuC$H=bWT;|ES5B6e{}ybax4c;)>B8&12(^MBd**d zu%k38j7q0y7|6mtMG)1=|C16?fzLv^4NMK41PyI$cZiS1X=EVXxd9r zVWaQd=}IG#p-&L`u`jW8$sB19 ztm4Ygj3Qn^B()$%gS;%o53&h(pA_#Uh6ysb%OlsYQ(1uk2Tq^0AQh)33Z%FVm;aGT)4!DP#OHNRXA|+9-#?Ii(xH ztSHVpj1@k80Y=>N6u5ihp(}3jNzQBh2-P#i(et?S#dH5k7k-)NMQfSwtz?!$;zkXo z7==v`dGFvRhj^z_A{wXZhU_@0GvYSV#)sZecDcdTJa_c=T{oZu4>kZ=90! zN2f3Lco{LzE}z+x1_&Og&Fimyd?ESU&C_(_EPhUcONWCFae8>=OtbYb8~4{H#8 zhB5T{LH=_w{Le>Bgo1K@rJOGw>q)IwFlvt=3_5^H?;O<^t}k}*lEB}V;FeS;dyqcX zweRuCKi@)Gv}d_YIp5%hDjQ~{krytYRX0&=EiDJ?h{fVI4o%h0dAe(S9==vaqO~V$nCDwB9iT*)+;>%i9}~c8(OK^&}2JqA{cQ)?jGLsiKBm4ts}Z8`0QxinZhSj z{G_wZr8iXO_N~p)uNw2Jz|CB|LY@IzKpXUgL$Ap5TVKn8w?B#>l?8{{d-%6@iRpWN2Ob)D;9g49 zBiE)1$6jngnJu?tPgC~M(S)D^ zj^sXEFv|b&Qel+4{#=M-t4_4+W&;XhvX_{yLRceX2&EV+w+BhLB~5tn0r!~KLcCld zHQY_%+L>)j5ega{E6S1tdvI%pGfXa&5E*5BsppVoO9^g zB)Rm9GIQlbDzrdP3Mog}=jkD-b_n@yWwBKQA*thjo>FnRmu6p=BbH&5w-dxSp5c1# zh*|aDr<7W*ij7Vs&2*Nf=~(bxJ#t!=YfMRS`(@?0;s$4YVOML|JGr+Dh|F|sIH}uj z1D$%&7S{RWN4n8A*86-I+OB%VFJbR>&6aKD-GIy3zuF~po#&sFMk9DGMp&9u>FxZH zTXTzlcVJk~5I57WEUBabBb(d;78VK+R=qIBd)HE~f6N=lwcIi)@7Y=%1lIIW%QGbZ z$<9g8A}sGjD}O_A#-#lsKMix+K(cG3({HESl3BEwobQr+%bAw*SUZh*VKn6e(TW-P zI~tesqkR4C$9>izDikn@FcvVh95H6r(Kg%w?mtQW|0n7{U zu?R?mAQTbPACg*L)t}92|wTamfswl@M!HAt54^lFCXK0dVWjnG%)az`eM{H z9s=F++Q|jhvc-deloyt2dd|$3;9_@FR{%KjWst|99l!kV?~M+hTl5lSVN7l!`|}ff zr>h6nK8^ceoyvtWa9(lkEJZ+;-SM%oju zH+Fwn!l0k!^3~wSf2T1lS=^Pre*;M&NdGyFLEXs41@M2d+?v&a8aQI8z7XFn2~56r z6N7YRb;u7r?YiQi0=fWfSt52S&8ij|W@uO=4s$n^{wv>`XV7;f-!g-OQH0MQeo3P| ziE??FMV(TyTojEgjd#3H?QZ|JR{cId&g_2Nal)B^8H75Z#}1AWQ)EyWw~=|S8+iwo z8n=;T*oocAvTld}dqd0#z5Y#PHryiwo4?fT<8Fs%YvG>ITE|s^NlL)r2(MYHI6{?~W?Rxu<73 zF&Cn>wb#InBw}P6Ob0niMr(BZ!-#e^GOwu4fR&-rOo`f>;usl_KUqJn8v`YrkzlL@w&yqEm)B-O5r&5+E)_ z&O?R#5oP8O*d_N^Aej;~wds@NrfalIF5tnx9n#3J;&R`R@fR3s<4z71s>KGQ5?z#VFryWb-UafQait;#D2iJ+!2=c@3iQ|}7 zZnfMGQiP76C)baQgL&JuSvD6SW*qC(qNP2)6Ra^a%G$L*< z_FBFPpS(x0L?xI&VNqeZafkO|yI;h0aaw2mZS6s zc}_0DT_z)^c7g3sVMk@CC<|Jam_9qR54C+(VMXZ=VyLh#v7{>Ev0q}^%9$;7ug8XL zlY^5iD)BZU1rOK@OE?w^VCqoQo-0WJ>9&EFcesF6D~Ws(mOyk#JDN}m-wRkCE}=C-V5AC>?Tz&*W*csmEz9yv7PXfa#j9$zQVVvWw-Vcab5(v z!sV&sSMWsj82yo1{4H_se^!Mz@46x2Q6qvlYk~3!Wgdy_Q5{rNycg$L-!(jLe{2a2 zELdNQ0TWd5Q>mGF{~xJI8KjR$p5MS^^!NBrv#RZlOstK}0d$tOW_JGtOv**@{2E|H z1mC`G6a|NG^_T0%vY_JZAK4ORkBLSO)MK?@aKceZ)o2a4=MQQ zj>H|x3C&uOieIA`rQ$i9Y?ZFm$<4443{s2Bv`<>Rt^Z{e*`HMR`Q^GVteJD$-0FF) z#L)-F@=i$0`1%g|-%A6Rq<4(#_e{dR2h;a3u>&%g896xv9NmF73|8OI?PO=mU~1%S zWNc|`%JBc32+xDvGCu?a1PX+!IK;)lyY5HR&|bn~LBs~`N7c~5`QAJ4N77KjP|=?* z)DMt6L1WJfTQhxaejZQ~l0ZRqW32*Td1L*K9zSJuD@SM^P!^Iv!Uk@>IAn2%nw|Ig zf&(9q5UD^jFsU@UAMMXHhJmEjO zck6L_bw2Ym@O~%w0s3r?x#?bjBEeXikz|#_YOnQhm)-Webl`hC#YlH_p~7RNuTf94 z&k3&%u4qYBJbf&LXo)h^8PYFlui(`luFb00bO!?@8E?b{WhiJP3lqJu%8+M!NPG6`5l!L%u{=IJ>~kzwAa zkiZ>%pffNlJv7$#Y+7tqOvwSFU0{#`$ud_xvkb~ZehViw+{GMf@KQ1U&3K$u?bmKd z5S#qQ3Fg7~aBxe8FN4J@le8gEWmy{U3AG*@$4?%<@567((;`57E#E}u+Y6pgce~8P zfQakVNNV?#bTKA_1~`hyP z(UfVAX@-NTRR{>ganqx!zVxmbJ|0nJbSw6bU}9W@y4&(M&$H>ncwRK9uVM9faxSmFc#e#Vx(K zn0wl7;Pfyyf~oKLbd8y1M!h0eJHR?XP~VZN#R;xiba4b+ejA)PU^YRmiZOp)c02qq zik50VO#|&`y5 zwuKVEe`sMB)J#}#|Ca14@IZ1BF+&!>mx(esWOu`Z@@?l1_deH`EBlV+$8?<$zI+oB z-n(a4rAxjw6xU~;*j;FKSG&DAq~o3$41i3kM}Kx)t<@ZUsQSSBGE}ntz(zc_&Oe9A z>OAY1bd!?_)-c@G7Q_zCfHa0wm$Vsoy*+CJQA%F8A@7h@@H_&1K%=Cm=cZ+5;^u0m zb@OtwakVfqv$Mxb)5*?6Ddgm4rO80wbMWZl$o^uFonv>&O^wydv0uziN8?<*7qr`G zc)~t&xzBLy4O}g|Q{CwYo*G`c9&Y5tbUdX~&TW-wP&_2t>s=)@mr08|ckd=$F);_S zF`9_UY?i*UOCC$PECVyv?1in(RI{DC#Uiglo#v`Db-&CAa1`ZRbcw=O6UmnEB&yHb z{*O)~tNOw-y94ogC=?Y`wg-B748Q`k2058{D@r(d~3G zO(`zcr?eTj@NwnfP=KYk=^k|(8sX5(T0em8=JyGK0Aa$8)d>WUqteh3JL;)d7}UZc6E5@cKWk;0A*@Ir-He|ts~qTo0#dGTTO z3&Pn@Sm@S`Ui#B;1$s{@?=BpR+%#Jv@zI1Rm|)V_^EWn>(Dnmchy0=7#ZRds(Q6UscYg zcsatwD_r>Q6rIm4_Ep+S^vDJ5inu1}&)M-q>RLkS3aoL9leH(hMv~=Ea0})adRp>N zs4{jtr6#LfQ5lX^CNQ=`d#kZ8{$M#*(^I%saUModJMSGf?j(@Bo zGAxD0w{YqWzW<dJIh~|=omKYl~Kr^Jyp3i#O651 zDZy4AO6j89Nb!p8&v3(07(0Bf@!yNPPMN8E-M3qNz&8=|KL~jIUv*K~$jQ<~<=bo7 z$i~tW;3#fn;%w*W@qe-iz5^beP`(2m`*QCkNrR!T-FBow1ORjIkJN`Mj?R?V!ZW6KBo50bld;2q&h6eu~Cr zW~u1RGXTy;86(V`&rbv*Ln$#cMR3MS-q5U--?8R|wIb!OaKMHNpDKWmrbWkRKH2D{ z#rYg3MZKfPvNILjvs8A}^}`ie|_DhzuG5p3wWdkKA{4{WO^)(uO`rk%Cp9fuTd z^l~_8icU4wFP0L2&(!q@=j6IIwOaoO8XC`hqABi|F1S_6vKWq1OMzsk#xe}T~^zifQ-3anaSBHHHC$h-8GbE3KLn3R>7;sEE%+O=miLM19abSqqSujY(IoR0 zMy==RZ()~89!9>#lw&=@**1K1x6Zj3BXkd55Kr$Df1In{nnxTWvKRx!b^zZc^^7jR z$GQvGT@D+>t!^K1O>EUBe7u8gi|8A`aD%qH{0zYX-8&lFCe{}06>_5px*f57jUD|k`@pTYa4b-(crPqLDFH^>(N&Hq_c&d8-IbUQ$bz&zZ`)yPZ#->Pm%e}NdbZr|HZDW)!TpIE z=7*JEprT`)e;$!!(FVsBEY{P@Mwh4}=|$*y!!bDADD$V-j?MwRkyURRNUyJi*3glAg|=Ebg)#Hz@C$&nIrrO=%@@XVM>8cqb?3 zPR=YmzsURkG^oCTr5Y7;ZclU6Ex6gXepkjwLQ-N_cs`_06CI~v^(}@iQNE>)Hn{kW zmDDvdUVCWG>Weq`&yzyth@)*~_#J`Xm!x-m+~(aZdb{98N6()4t1$5^eEZ+Pq-k_* zu~4nk&H4+Tb9>@ikIcT?!WAF(7fZBM{IR|?+rs|aaYK&nGTF`B3n;eVEcioLup=;U z6vq-Z^Y|7~kA30Li25F?7=P*61bbWfDR$uy+W0Xs$uolUj`eW0;s%KA7lO|(Q=41J zF|&|~!TL$e=NpdSdp@+=z4yEE1unW*y0@ZwnR4*V*+XRC4!Lp5@wWAa=l(#C!Y{U0 zp&X%X8iDOIenh~v-{qYF`)dfCWA>_)zAgSMUi&%9@l$O-7bU&NzJB?6oARMJvU{r6 z@uv5#mTFL-titZtm1WcS%+%n{uVW?k-5}|8dc5~Y0MW>|=o^~8d_Ne#;AnrI@$QWL z8gPpv{TLl~yVYa$-<1E;3Q2?LKMYm~TN)`?0#gp135$>7+GQA+HeaVO5Kx67FWp{d zimd0{LAoy}8UZ^kK^?AIDv5GJA5X;0HW!X>49{@Wy8|U^o_ajMp>kQ1aU8-i5Iu;r zNwp+`!l!o~!x=>1%{sRZeig}|!MO-dFmGoNdVKUdRt!D)_zD?x$Ve5y?qWsQAb6li z%^`Jg!z_2uxkJMQ6&gWjSn;D-12<-Z0iqBwoaES%R4-)qkdibF^K@^Oa{L|4p@}>s zUN~lUh>3n>T4E=fa&gFBZl^F_euYfDeW>2JDG{1U8byqLM6{lK#G*hHrI_9f#e|J% znrtMpfs`pAu2fXEXp&S;_U{m?ob1vNtDNle5FCW37O=Y2NVa+O>gg4W^GIWHNuAXl zR39Qe5#1}r69yZ!=k)gt{#U_x&g*Vk;YMrSUla?QK3pfABTOUSipNEIT1o`gXDf_f zxvEMUDvF0UkX`VT))lbmUeqbiXI8M(d_QME41j=sur8V>_GjLu9<;3xB(B1c*a6ps z>KxhIDhp%9L`|K13M*L>N1l1^=3M692^FL=YYS`@4V^=sF+F(#Mqw9G}R9__27kqq#ykn|kzrDswTWxe21&lbqYz3vx9 z2=te@Mu*j%Cw5d+ulJq^bvczQ8d+-6RLD9)WP>I7h9L=NNu6W(sA$sVvh#p9amHn4 z14E^{mcAY&y7>B0?3T<|MOCd6*ymF#zNLIx$yqUnPE@VR-u+E`k1Bdb&aUn$=3^|b zsPL_luz2VE<$Q|7Gio0-emhW5KVcEtM^7uA)XQfJJT`SmWR$g)i$YamZ+DQbSsn2mO;vVTLD*7P8e}8N$o<;~9NmmffWl}ZV&%)_^<&s$14h>HYID6#v>Q;1+ z6vxsmWt+&7_=KE4Ic%Y3boWX*04D{2)Xp*B1{ zBQ4k=f!xg6_!k6524_sa0RnM_0zE zGrYu2fPEVK*%x*V=88KIDkfyF*&ni+qaUyVh zmLU9j-lJiUUBWb|pRrUl^rELQHMu+u))?~~jQ@1(i}R=ttMIaINe>JE9&67?D-GXg za{vjvj}Z6Et0A9X9;zcGbpvSflq0=tR0WpAYL$-OZdG+$)iCago73!{SBP z2trZcjT!T7D$iW@MRj_fGQ=y#!8`j^s;OWZa7mG0)fZqW8#Ta*5N#D`j`a$Lw&c5q z5gbu%Yz|@ar0^VtIA1~Roqq$s_Dk$X=>^hbYA=vzj}X_fIhc45djCE~YBBheCBwHA zOGP1b7NdvVO@3u#_E6!x^A;)vn~`hI*+r|r>Vv)gN9v0 z?f%XoM=pZ6K?<;0S8dGH+HfryP|0Kk zgpOSoS>83w1|kYQ)Ib@f$jNS`KiR3z$Lk0<6!>)$(Mo_arTk!+(5L-hm~FG-@u0t{ zm4bLQlggU0%5K$6{xwL;zM}vA%jRD3k+Cv)D!Aw^iIsdqJa>sgC974NOD{NWTOT}MZ)hE>TFI^(V;bs3p}2O)woNAH){Kq$OY*YNHt z_015B-;b<6i`?@E&$!+*Wa|m8Z}dC6#YLI^Wkwp!b;8zb9ItVKMiTW68_-fF!|C%O z;zp2rj)JigRU*mMM2Fv|yBtP8JizN~7f4kwLfEdz<511n$kE!YLq}D|rC>`}2%$tO zzD;QWD~)i}(t8geU#5KJEvv|7wZqV?2SWK3W<|@|H|=@iUG3$DFMA)JW7f}5O)9*o z#WUdf_arFxh3>2Lg<;csGG0%A{|%CGZe&V%`3fgMF}0`}5>DY7$x%|~hNvZgBSa|> zsiZ74A>3hZ*~3mVrd?D*hp@w29Nb(t)yzV2Q}$O~oZSf*EZhJ!J5*DFbYk83nHRwm zfWziE67l7B()pE@R|BTN(xtWqVFwf&a^Cot6>ezBmC*K$C)Y)(lxB4*+ zhXu09(Pt2Ub}X=y6lHtWnK9;nZ)iZ>w;r@>A1V?W1F8aVwokQMx~t2`gtW?~`P$SWKU;UTpE8 z@K#{KdfxTNzxj5HgJh#iv?UP-HC*FRF_%x=+ex!aW?Prm>c+ZTJc=nz=7bQ@Bmdn_ z=$|sgqXkts1(n=Fda|*;F2sA=D7efla#^AY0;$MMTewLzie1M>L*Id9k`|`w0%ssrU>1JvBka7x_A~p)TjiRPil5z5@Yrm zhPmOx16X~2n!JVKMU!mGy!qj#1D=EPN0?5PM!w1!H5rCjS%9{j?FG036n$8i*KG z%Nx9#wvTAka=QAH+C0GUwD_ftWz23gsba>!gy|9p8~AQ{@Qar(_aDT6b{MFtGqR z)kztOzE3!Y#cUI{%QJ*Gt7s2mc3t%CFml#wqWJYL@8*Q^kbhBjer5EgON0I=S_*;2 zBZ88hxqj?D0fHB3WF1cG@J5*UK?9kSM|Armau|hH$Fd-f{-@N{lBZDKFfk8Uj%$P5 z)ygm-Y=>FWrK(zB8U^pYkb1WmlLZuw`hh(x$$C5eghD~PC zq&?V`rqd>$xQ5_|27t{&Ru5z%fb36@}lN zxx>0tdiX@oeRp0r{R~N}xzL4N8so<#Xa~Q%g_=zPr%Uod=ARy|X$>P>)n; zThWFXJ{vy`k80e4=Z_tQDU9pMLVpn zCP(;yKe1R?L3A%Y`F`L-#U?7JYSP+D_SnTq2Eriol!Aqu*Ekp*C-KZVj6R;(Su(Bw ze!1ld{wdUH?zr)abOc^~Q{F9#((>H7H7A*S2xE0wL+bYmImRd?bX68}6GV3-u9A_8 zNP~kh4%9MyC0AtJ?wum3ZWf-tZDiZPkHgB9BYu5CCZ)L{*baVFUlUKXx1sx*+I`Pu zhWiz$$c&1Ga7?)L+Yr&@jC-PBl54om8WSjixkGqlOtdEM2Ja+}jQ&K}5K8JPj6vP- zQ)a-{O}iIVI0bhy)-H4;%Q&h~njIwbJ@?vkB+Gqj#dH%A03Wm5>Pighpvlug3K_zj z>S760Va6dj)%#7Eec+K5XyW6}^niz|khgUbfwqxUDWjB4o3kc32_ppSOQXPOrS|aL zYFeb=y7Q4%Kcrl+Jks`Bwdyr3myCIT?UeJ@=>}0Yqe2wQhvk1?irmcTZ#V(g|)>3BaKIyOY zEt_G?Wht&HartW29!{PZnPS3aD{JoZ`8ukkFgKl)wJi80K)pjvT1C$A@+N0H4q7cP z9XI(rwosxQxh{tmuANad&C}f38L?8922DlpW!|Px;@RAlBn=}CX5YZAmyrwTeFsO3 zjS#L`1l9J~h`u7A|ImLHC3z3hAQ;lo?*@sM5D|I&3Ji)9Gx}gDfhTph{V8p98vmwF zfWLvkapQngr|}Hl^Ihp30UmXO3XL8cdEa3Af!K^!T2ouGm+|_#c~WU@9dffjFG}kD zd;EoE4oH;3&$52AXY5)V?fQw<9fS47`&h_y^8H^OJYE_%Fs1vXX1((?0v zb;;^V%%f=n`VCR9lQfX0>Awyr7d4{3IsQGl0v(B14@v|~4^{slEf3Aop96jmT}=t% zr%L-JIf3YvpaTg&shGioLDy>uj@AU5oHWgFHq4Qs+*K$TPFYqg(DHl7Zp)jF=FJO# znWO36DDOC|0oAzK@CB>!Mk#G1O;^pUDjI(s3bdpyU#zh$jy4ni9y^5dJIc3W$JJXz zy7d_Fme9c_B=rBH)cQ?+L4WnTTz7;Kz@J~zh59rN_=rH#N@b?%k_&x9Y*qbLiP&V5 zzO=$nE%A%Dvqs>_Ou0=qJz2+_F7}P2L@~RswJmwnQC|Ca(kBoui)(h^L0j{UzR5?k z!bel!*rPyB6Yu zNV0czgI@MD;{9_)8*d~T!_h=wXqm6WU+6M5^_*vf@3N&9 zL!9`PC!3L|MllJVI+Cw_j!(ChH)m5JDaJ(+2rz-qMb}Rov+7k_jOey(Dmll=1Y&X+c#&eefAH2ydfX6uQ$9qyO3r?xVdA!ui1HZV27#VC~RT@Y=Y6H zWp{sx1J&XkhRGUU}|)4K0vj{ClLjaiNaxSSKt z2S3~`-p9mZs#s9{9$@CYUyko);#srlLWFl3TW#Yw>c+ekPKk$a$P!%CU-p!=|E^N_=vyM=z(m@*s#+!VpXqWI(~WqCqTxE|ufY}OYE zGVIIz@Gge?nBG=7w!)$lKs*^zagxH?DIQ-~ziZJ&dJ)=%(L#TZL)m%pTf$v~r1c$Wt62}T4;PQ?Y@@@{Lc%fW2 zck-)7i+k(+F)oE!YFdiQ%v@aFaX#kbE`m)lrdL_?@(9(RC#ft|bXSnu=cG^`FolO^ zr1)FXF63rw1XN95*Nzs(&lvOjGBNJ2XPJi-8w+(bo&_{rbX;38otVxXg6!K=QKq@+ z$!rc^EpUPxs;GyhfD%uK#wQ4mh+;)O>lK=Bp0DcD1)yziuHwo8D{^G4B%5yD`ffnF zLR6l)U3VKosm>T_rRh;IZNF}3@8SxfZ+%5dsS>fl4?|uC)e6hxbP}@3PfET6w9Qtd zZGa!yt=&rVm=M#3lY<;t5EfSA&4gXd1r2Co^w{ON>cMjo?g}hnKJIwUK-CXU&0v5GeuJ+$6N0SQyelwlE)UXa zM0X_iTdA<}uEO6gY9mc@(9y6;rR0dU9JL12LSD_MZlkXJHLLy@r;k5A{BYr{xV~rx zEZ4@X>4Wlh)n4GURBdiax(2VK_BqZ;HIig}Q~OXhY!p&P$B+DBc0*`{$2+*}gHi-p zA=-4rl5Lx^1^rPNi@8y`k0q@GUL2d!16v&?I$diQgaKtsoUK}k&?>A`IC$MxWWPx% zovv)8sKa2x z9g=*QyD?N3bkiO)H(o-NenmUDBiozHlOg zn_bgDgPUE|U`@+HKHJ9RNIk}^fVU;0u;XTi9l30 zVFicfK;Wfgncq{qB8?1@9BN`dLLGJ~Q!SG=nm~a?)JY+hcI^KvivpBI>CkGA_&d@G z`x>{li+C=$=D+uz8 z0Cj2$s>WnT;#^~h>{&(0%4_i8%y5Q2l9ynSnjj6*#o#0M9nV^Kjn}xbb>tyJ?t!JU zO4;m$MtF`^X;Z;i1}N!9IT_0=?XYer^NO@(<0z}lq7F!AIGV-Ch*dDp(C4QFB`Yo~ zcnko{mbU=Dy&#T!z;Dc?ZKRZMGG?hJU3k>GU#fqTRn`TlmEa5bssnboQ~0kwjZT91 zYjjXAA%GmnGP<*hDrR`*iFO#a!X_-Kq+rgexYc8lG(zyi>sJ+!v05uo<65_>tqA!p zQg!Vm4H^lIGY)&$r8tbU~>EpDAtHD0q0a2-Yj|49XGM$VuW4h;GA*sNmGOi zlPX7e1ga|g;3fRVo{F1UrY_O*5Rgt_X(Ic!ov z0|>|~la#sWJ?dxglsY*TQ6{na-}n}dbo=CPnCkV_g>m}u7BK;&t!S_g;i}}z znc|Y%u(qEBd~z&SrNafOSHMA8qpJRpkW|XxtGSXj(!?nPHzXTb7_=BKDwA%>I!b&6 zp<(Jx#j_ClHCSJiKkgz-gS1y6H@Lbj1jE$0_trzF4UY<=<~S>7qF#T*o@4aDX`(_r z$I?}%ql{Z~wz@uN#u`l(+##mjN30IQ`Ui_nVh-lEGfraA9_@_`BxT@J&?d#Y)6PPbs z4mXzrcn$`mXtj!3;C85vBbQmd_dIGZa=)EG(B|KSNgZVu&OR0(I@p#NbDTg7$}{zp zd3RA88h=>{c12CANq|Nn=!O5D1{~_gLNKE4NAwwREARL&tL$_QDcG@?rm0$yNFaNa*4%NkUbo3 z895bp$>DdB`+#z+KJ6M33Qq0N18d3ku}DM6+v|*^!K+sWQOa0yF~0kAF777^nQ6u$ z;ZnVs++Y#|j65e4X7QWi72J{|c(dXlmbAkUJl=$TmePIctI41)1SNQNz{Q^PCQ&L^ z;7>C3I`9xOC-FiHIPQt;HlAYIMl+2d3T#eGdN}Me=6yQxHON-zs~i#B)462$u@kf~ zN4%I5T=_kujOpC^fX;$6s(!dUgws0=?)-8ZFO9;U7jZx@oYPd?(qd|a)fqix{<6+& z0vMM54_z!zj?R&iOPlDrYKBE;q|USuiAb2?_>pAF#n5y38U2LXBa>J=1e0YX;dXBJ zt2z!7{cy70yltbXk=in=KO#}@2}053M|3~P)6L9e3a3c?>mjSeFfK*kJRKY#1QVu^ zL)CYXJ08A_7Zyix&57i^-s^?x@lpeCC+tnQ4yikfq{I%GY8!BrD6_P#Kw8mNIo#x` zQH}D?KY#p$h&Rr5`y|K^>(M|Ajph#ewBX_~Zpki)D}L<4xj0QS%dvrhQZOo7)|0t#_Z9*4T^A(Fi+#G#5kuLiWhH? zTUP`f@c4D9N&JcF?k!>H*536f(Hf;8lNB*!{%hHeWa)il9;5D>{sW-y>F?xOf6HRl9$+Gkl zjx*74yy{Kk3c(MNFWYc(=6JOM{`Kh!%@4dYYu#_zzL=Gqg9x1aZ{@?Zg@EK?1W2If|&$>NV%&KVK^&+fH{4mH#dwRd4 zw&NXKV_Z9`8^^DBnt-g6BU(?O&%{CcG&L#|dN5u;>alzz3wPWmi`VQuF*X_EO*)TN zfXKM8&)uw)oH0NHBfOMD{uF_J&Z5p55uA%F$}DG<2yrW;KORNPhp-7|&t_nPY!6C9 zpCM2H->VQm!0f#~22L?kmkn2pD(It_$2MYS|DQko0HNahb8Gq7D-t8vY^}_ZAd!7q zdeC}wC@bL4`cDgbbrcmpzPmb>?yT^2va+VX3~_2wyfLaUB@Lod(*DYu^02d|DV0Ku z3twG6V1)|xxXV(Z@nP>>vMjT~B2Ox)bG*klyyGo-orH{fa`n;gjw*$8hbF3ME>vEJ zeht*`r9WX3;qZsVeXVxH z^(UA)a2T-p!qS`C4Xl3cbY$>Hw%@-U%>4xa9q$j3{W^Nb{f*)J_R}N(8`1Sm?ls9D zare%@kMRrq;whd!{W}}+P^e+wr*om-c7En4K=(WmekMr%nR>zlZ3~R5esqpUR`mN> z@;IKa5R_4UrzQG0>!&nEoHnXJSrD#7!(XgY6;1KkAXI@;X>TB{#D=NV4w9NqS>X<0 zX)|YuilkCjJ(c8#f<<+SlpEVOgj#V}U{AK_ROLv`A~DC{8j--8K8AChvO%_Ox$^}p zYg_U=q-9A_%f8dmCOY7|VjVpr#+1ZCY*H)uo%zUql0|u^8^w6>A?p~y>WYROtBIfa zP$ro}IMsm#P--I+amib@` zMrzJOG_GJi_Ou=kdGulgvETlaqyujpx&m+3)X3V!w4@#PU<-k3W_lZhO9E1zR3PR^ zu^L{HqFV&4HzKt+gr!Q9T}04?ce;Ug&nY2Gr*9B07w%M#BtdMA#g#u_m2#}m$-NUH zp}2i0n*$O`B*T0CdJ76sB;)6TKE(j~&UVn#KP@}QR-KS4$EGswO5k8^TVMVhU%kPO z*Cs({&w(`*Iwwna2JwgI4DBJb~-GhmpaEAQ$upgMP<3!^&~mTKn`zF2a8bY$>Ql_J0Ymvjw!ZiJ<-c@?;28 zzTDrzvg$$7dqWt$>pA(f;K8uF^lB`9scx^qG@3F)wMUVQ3d9lwQ7m$|Z$~9$Hc5BR z`r%Ozsk74Ok%h6XTu~dWf&&ds>-!Vu>7o#84Y-t0hlNZ;7`2k8 z2|ZVNdsQH)EzF5*jcfus;RR_H5t=}O)sNBukc^~IrnNE3xf_I-hXHLsP{f?vm!F5g zj>2?Ie=`tU*5kx<={2DuurCDZ-Ja-1>^I804hH zN~1P0BPqD#JMXViN91f_SIPW?D5FB5U{DHYf9l$^Rf=~T4q>E{h{nSgrtEA*8>!{2Jap$@9xkJuMheoWS8DJY zxAzDdq?Oc|l8{pR-;F{-Ry&HuoF**gyey>>S9wBJdO|fdrL^EXeSxP1G7lzFn_+q_ z3a_8UJ_y5!%>}bf*wBeCYBPTi#tAP5>r#2iKHS-f%VStzj`}9__&@}s9nrCK4dNv# zd=E4*1RZ&>>A=ZDi653Is(fFq0aFlrw$J@Q`&EX2G{YlP<~|EkbK5q`0ItgtP7lt< zrnHAmBHrRumEJ?XVUJ}PF5*8k2?mr6^$9H*M`pec6@~Spe&cV=yERNd&h3%;JG7uJ zrL)#pv4+2*?diw$+OYLV2EWB%9a)oM3M79i4hO_SaBILiVv^s6(L-9M(>n4?nhHrx zvYD8Pq;Qu@NJu9y_sRu-``N1vC;+$OuD(Mp0+#tNl{v;C=B(t$k5G5`*TIx9lZ54x zj>>5wA9f>Ebo%E!k`y3{YRU85Y0jt0J2d1#!uY`FObPywhKr7`aJB?kZ<(}P!dMq$ z(GQnL=o%Kre(`ObIFRUm!aoeVGpl`q{2b~n6#azIFyUj5_zq#v;?w~wS{ch1hqA;* zv51y_6=S(wDO*bRoGVvmn1=&1rrb!U1_z#N&9c=)PG>xJuJzz$F83j$zV+-+B|YY0-a3F` z=_e+U>9G|K;9U#%6}QWpD!T~k5(zj)>6v>exg=6ZljJX zaH?^!e!36Q*ehhvOhg4|Vm)%`{^dpx!ldv)P98vBvJ`Dxo$y9@QS14cowD9ZNVupI zPM6jFheY%)QzMjp#BTJ8%WJgA@JI?yy75HJq_Xk!Z-hL!=t-;TWvdn$9)y48#Vo0G zfLKHj%S$T+fkaH2XM(vFh4K)xFvqweW9l7RAi-a5tx!F$X{~n6%L+F!v!wxlr1xRY ztoP={cpXOtt%NJ~?UxP#Zqsu`8%dFgNsnU49X;^#6W;LL*ALC=7DVl!8ir7I9;}Wr zr#Z2>@GoaDjIl^&1x2v<954-M+SenOiZr$Ym9)Wi=hhaK6A@9IWSvENivwYXk=jN; zTa=u=TFgJdwS8(!T!SjjFGL0>vNpQ#mgveZ+@b?uopwxdz_^twSgTDJyrR?-#O6P& zLacR3WoLw|NRO-aFgdjJ`=wkNVQ-Kf<>4b!qKw1h1&WuR_&_HD1ALYfbf%M8xb;Zx zM9gK)97PyqZ7|*O966Z0T znY4Xz5Zki?r4@4WCMgqd|G`BZ&0&~l>y64 zM=m9EWx=6rI7mJkGIL_MvE@P$*NsX*(_Jv;YDQ{)yZtc0l`7aWD?wl}hU`a$m9Xlb z1q7(TLtEb{j=y!F(g`4&8=vP5Pq}0Y5#Ju~04gjnKlFMFe`923+8~jS>*wQ=Vp;D( z&vg6%L0Msl+=Ix{ESB_Whxb@`!LKcZ@Np^Q0w4T_cUbBaC6P!UT&(e0E3dYG*0-8t zZU)hD4tM1NxM%}9dav60vzCDkJapx}U*bNwV|3WL?0iwWvGCE6XdlMEH077fZ_eho5BDKJdD-=p^b}Ot7`w^ z>92F<5TcQv@_}OhmQ)Dy9*kmv$DaJVXFU1AW~GR7WL$$vKe_s5(WiH1+Hum`gm)~~ z;@o?i`{H;mjaQDgV!rnV`8%ek*KlNS8j~)K+fsL6yq#Cs3Tyz`bX?4JgqEzvf@puRX~+^$n(#i9RS7p@^4&N%&Wz zjqs_kJ2HUe&xDbO*Tg@dh?0!@Zzz5kQQhsD<|_^Om&~$AEwXM+vTiIw!Q)`<(0P!R z_r=S-#x`o7jDXU6Q)Nj1z#BfRiMKBSRS}ZdNe`>!2M59CcB}}>)6O%i18OQBE zDQnz|0_XNHUf9Tch%xZUdxbF^#6%on(g)www`>{veN-|NUW07OBI?0XT~D1~a8Jsg1yi9i_5hLuUF#@jb5$6M}*^-=mSMb+pW(jd}Luz=uJ$2&0&gSRkY5rJ9S zeCV5v&`LSNwvvLw|D8V0X|7>MdXwa5HPI^cC-9mHy6KJT(RG^zteRCEYBQMuP5gU9 zfu4=~wYWDhqxJJcl#M#3a2| z@O^8Gchh~#c$(+k>OIr`@Y6x)ivmQ8e&;eompKEO5dVm@#AGc}%%cxPqSFd+B(m(!3wFjcVUiE=1t-=R&o&|9Nx7B>3+%ZEQC-}T`1?lI;ZTb+N(i1hPb z7*sIA&`kIT?>&s*P$$vxfiWZD{s92n$$-TD-%5o_Fzny|3);VqkiWN*y!DQTEv50v z`oe!aRDO>`e@0xcBbVz5SICd-pWfui#)3vfz-0swYV3=!VGYCEjx|-|^l?&>%|a_`uLJ zJOB8wcfa>BWmWytldxxI+R*Wo$#c_?=YI8-i1up)_T#S2^Odh|cWiL?bl?AB|7&mP zdw}loF8)*GDck2k$WesIe`4_ahvZMYhO`d=JrnnQUH| zyScO*5_FXWgEL%gK7$Km^8yj+lE>&1+1gJ^?d5&trl+;;re`HCHrpFjmh0;I=7|%c zyHFodpU?fWXU#bzrzgQ(S&G{~n2CRF?lyMh&)8SL(V+b=2PJlVo4ZglFEQe+IkGln zz0wbFlSE-FY=-6cXNfK`F|QIe(TZ7+{@YkjcPP=Xu-HUqg*bw}^X9Jl*gTkW5tet zK4%JUEF{_z%Y)i2Giy3M%xy!#u&cuOF(Y*{v-S&|ybIK@ zF@4QThBH9CG^}q=c`j-6=mF^#rJvy<8VMOuB0?ZHL@;pZx`bb|+}%<+ePd)4HpHjj zxOaze19$FaerbV#QqMU@sz*+M?Gv26v9fLU3G zvxf_DdhsWTy96;tM6GyNiv=2Mr_M_l8idXK2M)w}A7A3TO!a2Sbw9a;ZxtGsu}^Ef z<&Z~%Ry}6_JpOYNzz!zl&x~=|f<+o5=dv*ojyKb_!mdR*87B%ctTrzyXj_wmE;&jv zTrrXgG7Gx#6JI(6T1^N8y@I7dOT&tO9Ic75QcPK*stoZFZ6%lniF#qhKw%WV#!=E}$$(guGOExsmw;@-%`eeZ0O|sz z&+hK)19p=Ga5{&9_q;Y$mTg=M9Ep_P1`lQmQp zk;!gqq8lMSrfboU zesLGi0iwjmV4?`+YRc_HkQN%kK&aYAuKj*O&uqlbRezzUq{b1d-G>#NsQ=1i?D0g( ztcD^~?m@ydjq$)k&4=XzDOLg+cm=^;Q4NS%4eg+H_EAx@6Dl~X(t0KuVWmZvH~=}^ z%u&IISz7EqbA9+as)F!R9{qg9T#DJ49e@~vy7txgMTrxWWSi;wmXXoPgMWd1m6YJ@ z+ZbE#L5m`tL)NjnTPro#-|Z6fkOg_}jCsMx+mf=Q}@x8lp*iyD}LmqT__g*5ELs?dXe+p@5Pr9!v zAt<^SRW>qGv-cxza2%u|K(>fEw}5B4mdd*D25IrSmzytkCIh1K>hV%+-->wU5N{5; z8`gkWFHHkM41+7vd0u83R)4~obkb%%p+QYJ-fiNQPVI*7(Cz3_oML9={i-NwE$@mR zwcZ!F6z{00kcG#e3q|eiQlwGLGPh$j^rLs?rvkn4{0M{T^eISF{)EHU!kxh-k?~&Myx7Q#+0a{)|7xPZ>Cvz z=9(Ak?HwK~A>(H)gtB7?l9HB=`KR5JQ?B6=y-cQn7{f|dHHP-n9B z9>g&#`Zpc3_ET&f@qFaPpjCIT9mApA2O^+e27IfOIaEk!IbOl=SN4A1c_JbW!0>da zMerPjmi3qKvsDqx=~I`X+p+SO+BkA;1=j;*3uEsybW_h6egs4Bi6HjC5H0UDIp#x2 z?U9gz$5a)`qBE*YvuE}T{BpJ}qqJbjB@B}qQzLkR7*m^B*gF(wVZl?Z9;l7vF{uml z`x;vuS~tm~Jc<6v{tEetwm(2aVGhV9BAHUms}uk%xvTi}S+?fDqE%YZu-U_5lAP%;v6Qa*QyVNMCa?{FG&^Xv9KSc zDAYbuDANk$(B;n6^vKh!i&W@Whu~bQ2MQyj6Q2!bAmQxwgQD3R;II>WdrZ6R7R8gb z6u5dQvxfOKnyrd7nkz}A&}|(nDOXrS+!_=I8GdU7$0ry?J(&cD{V4c>PEe$Vt}kuU zlE|(BB%P{HO?PFZ706nnZ?!U^!#ooSy)P_+inQDuDqTO0)n_1!vuEBKF7w@qsEafZ zY4r-HWJFK5)rz6W@`yiM9Ksx!99Bfs9V3MyI*-3&BW*4*yfQIBFk96<`N@8g9+ZcX zzszdxt0+e-Do)k_`@AZJ=AO-0;r+Kv_zmebs99h5YGsIUhm9Ia19d?hux%tq0HnOnIISXsk(CwBvqPIpfLJL85{sEGad1O&%AbD@j*`*yGaPr zjiVN;Oc@}Uya>_Ox*C~+#N%fSW>JZalNTQ4wqX36Y|b#*-%LRP5HvE{8=XLLYhP>w z2_BG|3Y`3}lP^_YM{2i#qNP~PDD*-a?=R|0ha!uz=@qTYEud@$h@3$}I^Vd&#roF5 z>UM{;H^V4~2j9=^`LTMY zk;X)%iz5StMr|2SPHW><<>)#-qBc*bAO6oHt4Bye*UJp`=-L%x3zmM#k2 zCZQ~uYp;>y$8NYhrl;T3)z)rrUo+JD;}+g{L9yd8 znhGxzVk>;f#Fdbv*dg8{-k#Px9krU#{9FR2YtK=iBD^ow0}mWHlRXSn!oo~h@rIDG zLc~+#GkgrJxQGaVyxA)eXeYQrVskNP3F+u~kdl5|U8LIgovys4nPf~#CvDf;665y8 zWLzj4css@A(hgbq?78QKWgDM3_>eE+(J4Qovmz~6U^;#2msmGAq!aHs_!rTUnmBiz z*$~yz3zQc=fQQqX<=!7TKtCl4>!WH!D=m$mfQm5JoTUlUVu=CfG*dicre+q`;t z5j!d>Lp5J(54SG6zu(XFir$Q3cySjhgG}t1bbB`1h_FkONK^W788Z#zDdw>(9@5zDy#xb%hG+Deu>eKM6}DzRW>gvk6D1vQDPt)SWaW#jO1g3vS&8JF_fTLRyz6 zZpm3#zvJv>piFXcbS#QW4WWPbfwzGSKo=rZ?Gx>bE%ji6K==Ukaw<#RczW~3-ratS zt^A8LHOLbi{qf-HyCcXPjo)gH*vtQbIuSLuVcthw-ur?<{=Fgo5j{fL4}W=HyK=rE zx#{=$L69fjqbUjh#TDBxm8=(LeiL7!V2P!;LFyKwQY5N=x`IS+TY=($7S~bXr4=IZ z(r0dNF9D}9oX{=Pf)!P^Tfot32mWZE_T>Z*6r_4y$fuMDS#Iw`#P_PTQI#8Jv}0Np8`%-y%Ajgq{3SJETBMO*WVIHG_83ixhgD{Mne`0MX*PINz7dt{5NfWEQZX;ivY5teU_ zu1UX7LVl@rE`)p_@Y@b>%lNnq{9M{W;wd+#z^J(Eg4R zyPfLWMnZ?Y}rSgu2j)l&Nvl1NGii~hJ zr7>jD+?d0h)*4z`EF{&)Zz3&piSDdK!*HtY9AAW!J1dsOlnc=^*5$>_3iTf> z`jvGS7RvfV2nAj{EE(x3z4ol$0f-5~a?()g1M+%MkM*b*j*yAZCR%}Xg^)k`p@2ct zYY2SxkZy;#5qmnn;Wqbm^q{#8y+vuuW&hk#QAQhZ$aHLxpGSx+bYO^5!lcX2_2QFop^|j=M+zuM=@#I&4d`u2HhR&} z4;WYtUDxBf_wjZiaPA*FLK=XApM{ca!G6p`|0pK17bOsk`Rhn^(}?OkM0yk!JaWJ_hZ9WYg&2#Q$`2C~8dV zDPbjmR$_W=xrr!s13H1cm@BuhO4}!Vebc?RK+272x3>_Q$X2}@h)w-ofudUtN~NqIfFObH@tChHoe(WIWFnThTy=7G@0Wq&p#H+#nwo>(-k#= zB%9$q=Qv5M)-cQXICnR=b{C;~E#PQW z!#AM!iYTE3qiVAPB)|f{~7H zKYx!=fe^FN6*5WF1xfNkR?@?2WvZxdsu(4Z&j1?vRBMV7m(QH_k1+9{O))`^zt4(3 z%@zK}i~OIPg`r)2drxI+2|0q@U&SM}n|PpTbD$$MxMRwg>}~~Is(+)hfZW3)Ssmg! zQUy9%iA#}@q~x-ES?5R38y$XkNogp?ew$j>4i9)2)e6Nr!VBx6wu5ybXBLyUCLZ{w zfR?dAiwCYd7o;vFF-}sqDoIht)h(|WX5LjHNtdYJtyk}@tj zsb5T`$_XT_r2KM+4GJ@EO(w1lT71Ad-QJbz^hPvzLpDlNR=kXO*8I;M;(iUSD2X~7 z>{F0cDG7d7LsBOjswfjRYTDgUo`r7LbYO zx$+yoOhU1(PFk!^Vk8tb9fdW~_6YqlFq54O?9_O1lcSMnnh|N5k!f5IXo!$|jHuwy zclMa-WHZNxWQ-F6p&>_*!e}BF)CeN&Y4)6WfUq_CG6r1w2~Pc`?spVs5QC?LgU9WV zri!b|kYy*ntdsz4!acV!dax7|FGfT@`dVH9mRr%k25`sAXe|J{6YGh>tUlqz!Z!Q; z83P!*vdKh=dsfyXjG1Y6D2)~;UX*tGGq=Mf#FU|#vKIqvn=^aYt6-$m$}BeAm;v9t+}5IGz8MO0z4*kpe_}Oh;FtJ_-#|bT7%CohngO zKj|&8V|ek7ygeK(`t&~?Pf+LZYJNpe*r#x0+e}wDYqaTpt37PnWLF>_YVCmjJrY+w zPjFnc?LgY_>t2ODqn9=|P}(q+orD*}56urjhLZG5g*l}Q0->R zzVj8+E$!-kdrboBp>tRID&kT5{`xy%hn~V48RIqbSTDvMZGPLxS^=h^Iwe@p!t>KI zH)u^o<=A4+E-2c`1@UrbO_Eao6~XUHX$VM=(xU-oOs&p!cz(G|qf2LEe`|qbAEDo0 z7IUxLBm0Y3;}!V{Y9i$IQS!#PBz7dxy}9hZz+bZ{3kt}H3#mbhNyLS>2qgg@Mhd87 zgGsW=q=EJ<(7FJc=5gb{d9;xs(wa=qeN=ge8pLTnq_dvsg7-`dh;GT`ziE^KHS%(~ zLZkl9BzPseA#)vI^+R046siWg|?0IV9kF}Zx9QSc*+!ewZxe>swe&lj9I$! z+4UQY0bDgx!DT4#cR>#|UDecdLl1-{h?|jsG$doWjBale28R{U@MP2o-8N80(b~p_ z!v61kWbG}XnpB~F*ukn%VWELg-6GPc*TQh!;n;{7Mm(Eb(!VmQKzk!hMe=d0zSBCm z!~YzRWUB}EMlc*!EklAPD~>oOZYvfM{T{+OGYan*54Q%v@fs=+qItx$z(%mG;1;=j zX2DQK+!Klyt8Hp%>h-qNO%e^pyBwNk91#JMLREni?x7Q4`*{OaiuGkL5QsJ=+#;2B zD`JiWcNJ!iGr`sL%ZVOwsHtElyu77A1erH#Nih$+ux}8OE{8mz?wR9qxjbN>aHbRN zAa2opH1g2!;g5XshSU2hV1v-?VR#gYT8NHG!zc+sV zg7=W-(HLAHMAGkK{q=$tS9Gma8+C{ju;bU2#Ja zne9qE&f{b9Vu#n2uG2qzmP-1qny@rOp*sFi2l!kI~}Iglu;0cN<54XaN(Gf;O4nrlRfalAJ$&}Ltw#O4Pv3?IW=+e zf&B$21)*N67J;!>itwiL0{(nUEn#sQLyOFWd#n-$6=DPBET>R%XK7jEZXuMu@#57I zJvOv!U$YNzvLa!al+uh;RDx5J$Yl~{-FJu zXMB_h7i&Opp@9whCpf;0TTIG5og!s4g27&mC?-kxCovPHj^E>$LXD6cSQEKUJeh_i zzDZ`qG6PR%((Ng8B>c3&ZWCjnN*48*0rO*@jh@7^^ZHzT^i?)yBkYuI66Z$RDrl04K^TzwI-PZq(yG7|0 z$Wz@76HdWP&<#{L5pS*F0x}+5nk|guDP6wk@03Q3^q`hgD~UA&EAZ0!y5%T%Tz|gp zeSb|LH32D(EnBuDE&gf^ryiLtywoa<4Y6lf?)|Hp*?W^MlmRd-PJ-356V^$QGpJPCatoU~W0QWJ-D72L%^=S*x}ge*um*ktlr zA0MF89}E#XyUQPM*xsL35Z%b8jfF-hqh@BS!fRaY9EA8$5SAFy=}r0RQw>=YV~@7q zn`ARHHYq`j_%}+1R9Vu4M^5XpOM!|E&eGAmHpP>w{4Njd{gMMwC*f~Du^Ug7q@ol9 zK?T;*6iPquBv@luqX7+X(kktaec~nshg6w$FvUSm>qVev!Sj&hHFgtphqadG(&`Ft znsLHw!*h0b3DV+o?X0TT8O)ZxBG%hOJlc|1h%3sCWT5;%RBRAjjdl&tKFnoXfw;T( zr8Anl(T>=HEJ?|P9oPyitOyg%&>Z(R>P57LRb|bbvKBQUA>CRuk}@^(0*29*mkoAI z7hzcG>;8~h2Ndht0&5yq#<2=vmtqm*42W@JkgQTMCD0V72t!MG zj$Rd^>jDwIgIs+6{P zqde9w?s$qiC4#;pAI)&AZ4pqbC=Gd+15uVlbtKoSH-G&_e%0ErpriSv1d4)P#MD~D zj23e7=8TcFsMxsqAS>BlFlokXvp5_FmT+--)!`Np=b4;#WtEc?Qfl`dg(eIr7=w1c zuS(3yK+cjfqvR5-R`$weSU6EL8kj!u!_x&G%LC-Lw^4uAyE}O7%$u`WGwSz!_cAIe zS}B&^(xS*B6WI@v7j8uZ%QTSxf+NFF*HS839h_(OoQ_ZwHjz$A#M+deEfxqtYiPUU zz5cNuF4vU;bF2fpGE;G`=0Mo!SeMyTSiG3IEYe7*FPCZtr3-Vt6l14e}v+Sl9*C>4922NknwaOY_2 zHss2n=t8B4nO}9j;ny@?ct!2IUJM-Bq~pLGnH+DD({-h0Hc}f1Ae&dCq$yR5o#z~D zHY3}&2+_r6jkd4PPWQIX+BvG}xmxGBVEO>^__I+?Jwf*APalHZtAX_u0tD;BpB>bE zYXUW9u7_z!hp|BLA=J;=Qn9P`q13cGvlrH*)!TV9<)wT)#(?KMkGWjA ztMk$v^u5!Gu(f;xB##xhA-SK>^Tm9OP)lwU;b`f&0gn%rWw2k5Og2PD3VLyUhn#?Yxa+@0YZL_<$fBM8 z7KuQ1tI%6H7kU9%Q@QTn=gxzkH8J2rox`HmnSPhg zy2S}&d_m<*3aMIK%GkD-= z;9>!>n`FR&ZlR`dR~6ytrPxE%l#l`C@&M(E`YWA<7vHRvPO@vK%+&rS_uH!DEI1e1 zIhWWi&8x;3)s_D-ND%@JxLOTVTQ5pr#%Xe1&hgPf zk9|6CKP#9^RjxNrg5*lgdbS2H2$WOv(nRc?afbU+2AOc&@g8@BADw&6I@h1|1+5|7 zG&}TY){a^Iz*^3@BT`y(NV)9+rN481UQc>7tkP5zA8Dii*NlY3&3Jm zwRAk=7P-yBc#6K#|TwP~cI0ovjU(1XO54dsLg#u^e8XfZ`F0lT9ucJjXZkJ0-ZHz$IYcz|-7Rs%x|L zgeXW(|DQ{`35A^q=3!%+m0`qNqAmtQ=8PFuh52>f2L)iM{+m zSn7l0RivrqZqnt-QsI4tMQr5sYdn-Vh2{n8d<^Kt`{^{|`% zk_3;`MZHIkCvLmqe{K7&<;`{3YiHek+|T&Zh5mD7@T7OZH$1k2(QgFsvUUt>ck@RavS5UX8p4DiM^?F<}UH1kWHes_2Q zGj&Kwfq-sg!5WowGgl45P?yEGuAoPp`Kzn)NwMr(Ggpx#Ugq=_O%|a7p*#&zB{MM- z=*pe*7n7Z4Fo_y{;B1P`s3cxW}usm#UwcwF`F`$eO_0Yb1KZ077~j?T_6HG zC@WxfcJr@wrmw365)(qrA|Anbzm^3MzA`1LhNSwpv&cf&|A$uXkofnN2FPu47D32V zue_-IQp~wV1T&;$f{&?0(3u>?)4dt|K7t@}r7F|vqo^T&sF}1;bi{Eb9_=crf@T{d zBy(D70CF&0HquyQGQEzlZ8WtOst74BWG7>e;?X25z4$%jPKP6t5-D_2#iHo)BXK&M zhG4m=y`+1JcbmVjL}(Li(po{kX&$L^E@7(ZBB8Ai8Q24dT`k2v^WG%X$Jo0zkSx;| zu!zgKiB;EjgZOF;ro#A&Br92hgE^|gS`OQ0geL$^G@zP-f+2?#`i}<#RrZ=TJGz_n z_Yb)`*QlWEAM7fqj)7 z@n-IP*-Ca4L?5s`gqGcx@%rk$)cRHd~+t|w} z(*3`QegZ~jf#>Y9gSBxpAp(R`;%vcxAzgBW`I)VgYjClNE%_4zIBV7Tsn3WP48jAz zHc0lAAglExd#p}f!3hzWD+JT_b`NUGu&KfQ$}<0Ta^K2H!H)|o7GV)42Oj*e@iKUz z&JK1B`(lDoiP(rm6uB*7MrZ%3MW3C^*T2utzZ?0em1I=Or1~M#)9iB5gtYwGb<*5} z{nG5Id+4wxlHOV&hEUy1ioj5(${X_(ifxqTH-0qp$Esw@i^WEwG4R7v5v8rm3pPDK ze<=)MCH{kfa9b4cQ=t=*l4uUv5O)mHE)##C*@VB~G;T&-@(m}q4^kt62@zN4s{kSm8^gA8#Ggu?ARBuii ze(mw=bB$n~)%+m}S?N3ryHbgXVEUe2pu2Z>y1LfT$Oz9CsN&Qf2(d?&q_fZ1n5p^Q z$M@O9bJ&C37Yf(s_sWWA6{Kopqw24oa8yquIU9Psr-h?iH=8C$;9od$3)8*A?%Re_ z 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 z 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

OE~?RvsNln(A0|@)fC*R#P&pX*8w%%R=Vg&0M92 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

-1{+UnFR;IFsg-N(LUbb>b^ej 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 mStV+1hvlnxx@UZ=E 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ϙ_$T_n4u&cHK?9HM@VFebtTf@BzluOQ`Jx_ltX*mD_E~j2NzZ5 zBW|($(Pl(fr4&OyV_F(1-6j^;F_&*yJcPTv2=uyQ==4f{Z4>9G1`4R7U&{|mP(fa( z?}4UW^-ju64&)yItjwWB{Y@3{ASELjqX;Ufh7a~+$m|C}o1$`~5S z%$_(e9%M8RwS+I$8wOpkMZJ={Zh81@45$~X7a0^IO&P{)i1^`>nDAa2qH*pR*bfcu zCWd!Xu84*)!gqoE8iBj zA;<{r6MCs4CY~`<;z>_q*`k!|@TIz!F>gkfF3Z)x@MS7Ssy(+=+&XKh%nUBQF4j?; zqXT8uIJPJ1Xx}3YMn7q7yj=Fx{yWQLrT%%@@wNDP_#%0w{&kY~zfNfXgJt?k9{;Kj z^J(gQFyq)l6sYviYf>8{$TOfH5}eUTz>*Xfk1#Tic5v&oyo4is`}H0sO7b83j;Sr& z0~!BcPsT1Lu34rgrY4U^)wX=!B6jSNAPbOVVh{xrV^Poenz6q#o0RrXBK$dzTL5H+qToO zZFg+j9ox2T+qP|falV+HzWMJ{r|Osi z>!^&q-qzye_R&|B$?pjAn*2MY(9t$koVz6E*oK7jc zOrBO9!{scW0mt9$YZOk*c4H{s?c{E?AybdLHE7(G%!-qp9Wv1`u^cKnqBZg5)3jnjz}%V=m-QcHMIDctpx9upoNBb@(B{m}H5a{JY0 z^a9X>+1Gb)ypJ7Cm#<+GZD;DG&9xjWuUd^ZK0RewOCtE0==Uff_%f5ma~zdU>9wU=voYI%IOhUrJ4&yuYn(U`YrkV)H{xSaU%1 zf;(i_?V1xyAigX_c=xUGhi81QQQpLTm1`~G#M;7VC^&_;_rp^`l_?# z?A@K{Z5OjknfJ7Z^_uhd{Wmse64aiz4b+bx9GL%CP6rJqLx*o!@c&x~Y0{f(ZnQ1t2npA-GfVgZ@>4|F(9Inql#VqkLkq;VSxv>d>duaR zRi=mRPT3Y`tHjo(N2BIt>)~~z?y1WE*V7%pxtZ2FxO*B6U-rW+H=xI0*4yK0kFggn zAK(9}09s0bZn+;+FYus?AWPT{U>?-xC_DJ&T`}xM z?MO&Ka2RvXAO;Z_hbYZ;J2dpF$WCxzL3o-K=M)-uHx~!&iFW3Gix{W;1nPrjYoy43cf?f4D@6o57Jl7re_81Mzl(D-9gGf*LxMVyQtU3H64S!p!Qle7Z}(+xAch#Y5~y zu&b<8#C{@B?0&l13fBF+!6cJ1E0|FwI(TBwNpwxEiLycy!`lH?*L~ZRfNm_6c zIt3m>GbxmEDUujB>P_pDDBbQBLc#U+mZWDMTBiorF}-p&O0Kh|oXAzPi<=5DW4qaf zm!oF#^_WFX79@#ZCefAk;hVNMrSn+o$b^o@ELHC2$dd(=V{ODFP}?z@@dk|2hQ(Kc znc-10np9zU#+X~^8lX!tx3N5@$UI6GFn98h^HCpEq4bKcVRu+fOJ*^*7#zVp+iCM6 zI0>`d^ym1zc1GLhhZX$uS4roZ@HW*QG{vT5qC1F;wm;Ni>5aJ^_kh_;x#Q=PbDC<8 z#KxZ6x5QrKdi3R!5lS>r?^@Dkxrz6U9n{oV@%a7Q#)E3#2J(t~1YuZ`O>C*=2PRYg z2&hn{+D}@1^gVGBBGMpq>~Bs_WB>&=qf`tp8f^X|-T8V{J?Re`VBJu)sj_Y- zr;xIAfA{)6rzBop3J*lkhAL*fP5e&r?65bPyT5(PJl{^~we{6y!P}h7Y3nQQ3b{E- zFN~{{_SvRiOBtZB@~~>uV5wmPjla4V7nm$4&1xi@{|>ACV^tZ{2vX-$|3>1s8xxImX>H%)&owmfSZ{9(=V zaE0r4dA!l17?y_9iLpU=+wM<&BuJF))-UPiW^NmW?Yc4ahM%mhabEDVm!{s2z zI*V(yu41CSsouCKpYnFK^AXRqZ7i|U=(&38*lJ`lwLXEASiolYi54(t-`c8$HJgK^DTafABOZlDI34-Gf- z*oI4QQPKhb3ml;^^!J5?C7&p*l*c({e3p*(mYc_?8tw17@Fe?!1qoK9U-U{gl;u<0 zQC&dwJ4AGB_ai2y!+HKQq%u>NLns>XM~*=t)Y-L5ZRGC@O}$xUo*@OPVNY=MH`y2D zs=tAj{oJjSs>10+6!~_K^Om9dj~ynI5zu4yHkN)EDQOX(=;Lb#+zZ={ft6LwD%9;B z;2{(P1q%b3C-dQcg;PL;fg)i6ngc3daffMBr+Bm2n+}NE6}18UMBBjPtE(`*4z zGA_G4oF3Nr`-Lse1y8W=tTw?2mSHsPJ>1y2eWB{%i%r0*NyTti>#xt95|mr&toE?J z2)sk|HpMHcV+aKqh!xC*Un(<-TeRgTN_hddH1x{|EqXyd*!W<34)9wH2ddW25S%C; z_^y=d^*y};L0J|R0j2NwY$o%XZzyhN^_MWhwjh*ehvQm!{s@%r*_u~3K(@Abe(dgw zqDbfLVuzkLl1^Z{BV{dx*Bzo@V^me%5UW6rkY+`S4 z8+rw(tXvUTh2ckZs@Y|4$kT@)r$8a)j6wzG}2!nQSRFN=-GPU$22;geg< zQEQJM|Ax6of%(8=>Piuozw*c@(t|doDIXrLh8x)j^WJ#3D90Y|h+jfZGf1Q0i6)U3 z(P3osQlnI!uk2Uk)Cwpm?O6e{xzgTzDSyj1pLjaS$+W*hj!?|Vr+Z?z$drjOIndKF z3*2#n3Ne`B_GLT(JzxL5*OVv$OH%IJ-=X(C+5BHnR{md8&3~W#Thz2vz9;`LinT;j z@MA?KK45?RkEn1;4=^xT(fl7RkL2uRBD%V6DqXmIe(~R?zlahwf%pBm#;c6#gdsEu zLxR(@+^^m`Z!Zo(f8W0dzmbf;S$q`8VtEiMvwwNuP0st#@j=@wmny6m-SmdwLx<~6 zGzauT(<&;uyNnnd1(9~M(6@9?-!ytJ)4>UVVpG)VQ_Zluslgq;hC~hJUu%14x(jv= z#lhUo_}j?3_pcRSR6^Iwb&%jOJAXv11l(RAn+AbPVRSa^6dO!j)Y~ z9Ks)i_xLq%N_I`_AagTPt*|U^mtulO!)|&eEl2;LX1BRbo%s-8&MhYG92SAY4n>;z z?}Xi{j-M9EU-5RO(t7tP80AS(k%7;l!q@#?C9aV~#Osy_?tMM0n`)xi7rqTU^53PE zyKbq#ZE8<9R@<@ldAZ}cFN+N56B8UF^cqWEx9mxNrTW=#eMXvLq=^YA>gkFo z#(cl>{;)j9j6W&7Lq-- z!v>72(QclxCHW!`_WqI`X)6;XPV`g&63)NEF94e3OgWGYNX=D|$d+aOLl#GBU=hG*nLmaEcvIvune zFJSl!8)E{=6O<#dJF^EfH7_&+I8`Y%_Ah>fAM^M5Ks|2wOCMibT@?F8Ge*Mu|4CiDk1 zCg`HL=!`FV{c6+_jlAAe_g=7Nipnv+7V+U@R{o(YH9k)T?c5{EM{*s(nSWL8e zi9&JWLQ$wE-4TzHJg!J+)?hCA18N$(~@yfE4K^;xQ0y&{?-VV^>A$ z_HM_#a0s==GZuvs1y2?PnDCC>Ad2RuHScP#jn%j`AzNr-YV#WVIYW@Vu^<+lXOUYe z8tV13Cd+0H8%u_-_+%tGf+jX6x1AI!ZCG?P`3kayc5@8K%5F3`hdnp0!ljsY|(iM%=N z`~m)Yf;lq>31|AoHq+7%K)5Z^H4(t&Ksk&`MH7_zbki>gZ;U-?bO%4@iosS6`=aj3 zcK$;weGWO~e}1<|f*^+Z6)kW78^2|Q)qiGWr1#!pK-a65nj}XZ z;F3ym;zCI}SA3qtcx47XbU7mHRGIA_6`BSXOP{EV3f!gb>)s6+Zp*c~K=1d*x8oaLaQTk(Q*%rK zsDiJ;Rds}Sv&bB%gbxww@(HKI)?Ij{b_{l-8}6BEFu6&o)_9dGfa@B&6+e+#1Yf#b zV7NZR1C0-G6dIay?G9aI{}di$ybFyrkiusOOo*1;+G@(pu`#D|)g7$Mph>|z`R#&f ziQLAA-#1{-{wY6})&8Bk=h;o{0??7goD8;U+0LB=#eVNHIA6s_bFWdceTVkPow0pK z)%`dIh8a<~jo7pczfEw8C2)@?db++P6W#RZPXzV!;*iA=x1u}Cwu+=@M6)DiMiL%R zZOv-NJY_IDo#TzX6Rf;^kcLFMD|Q?GVoGl~UfU6XuaD~Hh4m=eV(#M2W7Wh7ab&7y z8q_i{9V6Q`Ku)9ktxmlr>>K%a=ok=lTWVEaj37i%m6d{53j4#?VHF^{vOg^${w~|Q9!wq32j8`0l8C+ej2PGNt3h8~ z20K0SV>VTmoinvp#_z6cC-jJiqi-&jI*PIE?dWX{ zJ5c#>a#wBn?0W_g=#4Z+T{y&AWR7F_S5J)^v+l(mB~N(6p2<0Cmzr2#57_cM3*%-wX!sYVIMqwNmb=8w3Xb68E|q?BUekirJF4Q_%d2+Toi<0;z`z0(|=}WwRou=Z^KxuM} zBshhr6_|*^R#z$|7HI3O7o1urAG5g7q9IRTn^>nUc81k>*HhNl=Gb>oxFBq*?$Qui zCJEo027_3G`Sx+nw;5QDHZ(b_ZY$>(j&}+DCVXG+?)QV}P!!`{%hR~~q2q`Lr@AfV zaNd}Cit%3D_=c`}f|OBZQ#Po3Qa5e9x{m~r91-SdkpCP8daufw4?YM3zpnrLm#e;} zE0Jt#F?9%pDlOTr@K;Yaxr_`;-8C-%v+itOZUHVBHTr1tjR(jSMys`bF%P#+08 zD==H4t@&%L3NOtyw-YtW#VUwZr;4piw_6aPA-eD|Bxs3ug_1%Kv?A||hBQ>WM{-9q zSZgrreNbd{oXdR?QhZjfPmIMR$^}%rSi;nj!dr9)FQm5Dosg>-_d{bHbgnPn9T1+l ztIwf&f=ROtcq4w!*7f|sKzK)6k-YF!RXwH+@w@N7oDFO7BZ zeU+m+X1hVB0H+jG?GW}lc8k!c!st>mQzzS+lq}K^+ zNQUw)9;Frsq+7``=}@fD^`ym(W$@w75tXb{>9F)At4yglVAaGMopDS88{Qu@|9Vz` z@u~Y0R0;M=Q_Ji4ebsnFD#72-XMrTfA%6;W4hWXm3XxFP^>{K2C}18Z-2eK=;w34- z@1wgVgvWAw<&Zb`ChL%pI-wlHQ zxd8uHJFB6Kz0?0Pv5lzf{HMG4t5lCFgha6cX7?9T0S#?nWGWJpv@+ewdgR@RNhh7D z!+$CSpk(N2-<0ZJ=c(McyN@aNAE=VeB*6;Kau$$@EbW(^rV- zmNPj`={y0DshGB5(3-2Rt++K?Ixk~PdQ?y6uGNZOP$3hwkNV-Y5Xe-%oM2;8+*&l&i zD-{}HjlE?MRDN>ZP#^rap5rz&DB$8Zo9p?Ta`Zp;g34LiS=t)f{Qoa78rCYP8d!ev zD2-CO$fV0gRTd2>gXH?T%w`+{EE~SKjt$5MR zE@VG?`ifX{&K1tMZ1b8XemEg7E@lkY0~&8V_W-`TQv`l*4`X>hT=p-a2u9zaLLG?% z0S?T8G9CiKn1kW_BS;KWj-qz@O8H{(;uM294~8zpxB;Xh!l~Y1m zQ=m`!Vq{4^mEzG^Yr#pF>lQQJgU@~YA1?a(hA|d=4b~k)dcgvXf=5y+!NgTOU&Sfi z6(_Gg^?C3@-=odq)NyMw2Ik|<(2UFDQ{fIF9YXd}us{j8C5Jc|AKc3+&5+^p)Amk& zwQN8CZ&T8|EK>#4jR|_+zi>YM#e`!J38#w|ZUw6$tI0s_76z%?N0GFcgB zSMiQwSNV=(R|!}f`NC9l=b-g+Js$dqbH^otUT#i5#cnJ>`;UOyw?hwN)!T z75mj}Ul6Yxak+Vp$f3Tn_5xS*XrYo9YP4t)KiJODyIWwtt_nssLns}$B!v^v5AeMm z0SJQMeDGk**)2#au@cxG^zdvg#3=J96Y{|vnu7xp<#ubn&`h%;6lV`D3J9H6CsF+_ zyil$m$$rH^f8CToe!TkO`uHmmmH+Mw1cl*2<15%FN?AsoAkMw_BrquL&NF_}6J;1Z zzYSg0DsKZgK=OA%^6B!*Bog3wG?jg40}QSU?iOG-TEyOVkY{tBJp?B=SkI`Nwr7m?hC-g0*Mni?xpgiP(bVIKNxMYM@Qb>)+fi zyHS-YK@NhU%wYqrgkM0yZ~)d}JsP+dX)vS(psWPJc(M*2NSLbbpo6%JAe5jcu;VSzF)MAu%-$jWHQlpzI>LuzQ< z+?=UwX^CoR)vhY3sW}`ZQr7A0Xj!@Ow*E$fTZ?_of`D9J zzPoLaJdk?n8t8-XI~SDs{tZ#;K7r>|%2rmayh7q%hT( zUj`rAsE`j!bl4rWr_W}80g~AP>-}prp8zIF)La-496RJr5^C&7Y2zzBU`#~w59RR| zrr2hh$s01LK`Olhgd=(`OaZn*!nuYiYnzW8+q)OkUO%VlRNL{Lt)~xV@a>^Du@9jj z(mUbgk%S>1eU=~IAk0t}wSeWmxncF_oY*I$$)gPMYYLyAUg#dyYmLPluji*g z@b|jU@}3kRi2E8P9Aa#)qP~a0ds)nK{$O;8zN`gvQj^h~)U?<^ufCUm9rhtXjinbM z+ex`n9Pk-IyJVEwy)w)KME8ZGcn z)qZml-pn>cZE2^Eqf=hf<%9vZp3~e&DrEB+e^tK9ktyxMx>!46z-Cn*fTIID#7b|@ ztL2~rK$BYQbn#X1Z2QKGl`i&JQ`EM56(?q~W>rKDPAg68IbIuUL^|dSzc;lDwObpa z>p@R77+a3X^H%6uQGT;FVFFqzTxiR%Px+TT!v((TB%;OS*5NERX1<& zu5MeKvTAMwYE@g!QNVJ=UL9}f-<`HpVudeFHm~<(9p=+72+yper)_Ab+;xS zubZ15wSQw(n(jR2;#Qifv}SFI$E$OoTxp5Hsim{7;%uC0H(QdtB@`ZXSW4(914um%x{*jlhm}tiAh80ZV+9j3&`Ub>~Wq;NfV>jbP?Q|_Pi|F+yy^o z2-f^)KVu-N;`BiMIe~~Ff;~1`j>Tp@ zsy|q~uXV$6*6m7ESh;1cEcl|F7Z_4+Cg@_w zC-}0Z?Z(aCpWeQk`L4???5}o(9@gk+LuLQTyNjHNzJn;#WD3h&gH2yH?|sm zb;=Z4Lc{9LmnJ?SmX>P%pbYuzW&dj)aHZElqUOaDR+!+hAxn&P1djScuSm_lmY+rK z6zLzz6@13k#`$y!!=EJ4)vL|J_2YvSa;Q(+n=UJxq*hhNq*^v|S@FDwtfp4{wvj;R zsB7*;(7&${g^~5TZJ{%LF67wmLWbfRi#H7rA5OI=e3*+)R#%5a;_1VzK^wt6#N@V; z#hUP13@n<0a-X>Wm>mgnnUROID0t>AjZkNqfd;5^hxHKvV0Q!;2Q40Jp=Pve{n~}~ z#52P4Qk!iTN~=6?V<8NeomC7NVjnbrpo1daWhsqP3EgYyJ#}9N$mITr@h1D4sws^{ zWqdu<5e6#ZC_A5^tZAi_%FKRbW(5sa7&XLbQ@vn0N4<%m^8K`ir1gH=U=m8@$v&+ahp9R;dL z`-WnRarTwrwCa@VvZCv-7qVhjr9O746%z84>2kR|lOv@a@f$e%Z01OXi3r0Iks13M z7iNsoYK=uHk5UcOige4QB4vhE3(tmXS-A?jd{%0gt^*?P1>7_7v;#eDie>cWrL|R? zdl^;(sracn18L1vduQc5*NnKK=5G7ao}yfJ;1a)1Mr*ZBWBq`%q7X)53ZsW8rt0Di zR!fB1QK1y=KgkCcy_-eTHHF5Br+J92t~o|4OIzEm=8mcs^4(SR%jh=OQR6IQoz2eH z=H|RL3=K_z3=CteNp#+m<`VMy$Bl?29A38<7X3IG>nHGL4vM-))t^Ytp>bi%zY>~k zyG~p#nqqX?q}uW+jpLGpIlt?POa!8dvF!HPId|-!N_c7TvB-v0zW$vX6!+m+7C2=* zPnUp|$_FX4*-WGXT5je z$ByxEw6wXpwz@P^S9>t;SYp%PO*8G}8gZpj{MD+Iq>xib9JN=nz`qWt-XTR7QjwiP zhQ$sDOv!4@2%hmM_J+-`lW#yW&;H4>HX4h>d!(9fghbIghRov>Y+FsFaDTi!F{ON0 zbKK?QmD!$#Z5slnMZ{5Yg$#hJGNcT1zAeTq;cPjR>frCqs?AAK&%snLw1CwXIL#-I zb(O(MqZ6=_Rdec^xo3uDxaz^xqB@bJOlfh>25a|g-L{vmA#+qwt0uB>W_FU% z)B*cF55q2X>eA&jyW3tlR?<V3P*ptK0FSpSP`tzFQl=JI`ZZxpkMeMDj-7*`}*w z_oICA2g#YyewL4VH9L0y`~|Hau(3GeR3LdrW>C31an1_tRX2i2 z-4H^4kgi%BjMA7|en9=L4RX zgiXp*6&F?&TDb#)oO(+<&RTq8Ww|W-Qh~AhekT+t1lD#Vakc~-rs#=e7&}AJX9aUL zkR3z?a1mGewHos`ed9Q;6QY*mf^Z<_39_G}qk>M^?S}+4N21?DIB=xctCh!vT@UJE4pW*fxlvNI5(U=b+uVDT*hsm?!S40VDMKL z(AU4C!@%{Jc^KB5??=bO@u=C}G0D36nOlH`nNe4ip>b#>Kt7NvV%g;Ta-WAN4 zzs9mTQ~I$pg-(u%V{gw|F`_g;Wlda2Qy3OtGDFbAXoEVtE91*XyI${hJmSJao^o-1Djfvh{c3kj zp8q9e@ke^6xDV3BDOFKyH<>?HkD#*>yQ`5nd7=EmE%vV~q=ON3)j(iRh}UhV2V~N% zJWY=|+Epd&Vr2^)yG`i&v%vNtw6`=Y(|5~x#$YZX_S2~h203p-Rp{L{c5xVIjc^}p2-h-i4IB= z@rTvLa``pSyP8Dtuh$?=PJ!Q$;w4``3b=ohV!}Fc%L4=+$F20e^+xXb`Z zB_}M{41DRv;&@#0*K~rN5i*FmT$Ehef5VpwaZEdTqmUp2|Nfgtxqjo}Uh})R7>4e< zzxaQ=A-R}*pQl~E&(r_A#`u3-r)RXFf2*#!@+&m?%$!B(^z@?Ojlh34RZSsgX zDlM_xEVfJHvIPaN0`&d^ST~Cip^S}wdfxWE+;qLNVR2y$H@!L`84NfJ z`JfxH0)2>MA(?+t!gYUFDC;aECpTdw?Eio0Tu?NnOsZ>B^&x9 z?ICmT!5^Y%T@Ae)-}z>|M$&nzmG)A^t)1L~E}X+-|20J3O}-I4{L`$Tx*B)vD9Z6w zM)ZYEX$rad#0cS6%|wAJGgcG<-{3-#D_vXHBQ8{h@UOi^jN>J)7i9>m)4A=gGx+DEe2MVhr%$CzT$f~}6~BrVuT z@RZIoEq9Z<%2l*F$f$ztEv7=*$8hW$Ae z$nQ+}bZYjg^O}SPy7*S6ZN*jGstby0m{avJZDoNo?VYNqHPMUe&pBzkSE*bnb>B|$ zBiri;;HJ$iki9{crhz`Slwd8{pdM*qFG-5?P70G&_Nt1djK>PIZbsR|w^{E+N~9wIcCSi;Y(2@+ z{Ft85@VAo5Eq(@uwRVjXfkDJ@aQ|HufyaO1cT&}Pu0J~vH3YbyiO?YZ$Y|YYzCxCT zzj_?rSgoR<_Ig;KFu%NrL*cz;Y)O%k>T!8^fH9o3;X<=C>pR3gVM2pDGn#p6jIuMt zpeH9|BaCpONQ&R%sl`Tmo?k(lqaGeDnu8Y%t~6>d#4;rjis+xzs(29j;0AL(pDW*x zmr~yQ15-(n^jfFPlGDb?0iU9kNf`s7t$!nSw%XNIa-#NU7;S@DE{^AJTC{?USe*+^ zO3PEH9TY|Em1??w?`~_**$`+8UIYZG@@9WuL*nnAeBjYTERoW`7fex7vGZAXN)@gQ zf8Z-8@D{?a(&16>;muyzyg0Y}jI-D@Lv;#?&DCFxZ6iBA951Krk6zguF0Yu?9x<3-UF4q5){EyB=J<8~ z*_~eXFQmM=aNWhg(I2FKdjkJz2>J(FDq>w!Y)o};07($~H;hR$vUEdEs4MN6&Y`ae zB+i8}8V37gV8|-ghkZb2eg4@kGOfR`sMhtVoMNbb!&?-7A^%Qu7KZ=r`^$aelxb2t zibRzpM=ZSx60A_n?$asQqTcRT4^Ho9v^=_4vneInU0XzvH__TzMz%y9X&HZ~b=#6p zYWYm7RVI%&l_@Gy#FiQwO(aMXkXO7sIN--uOF?Ecr7J*0JY`SR1W^4$1}$45zDt0TsM+$!h`ex{X1Dlvm|a_rhM%qyDgv#Lj?zXNF& z*e7*LGpUA>fUN}-S(C~o-O@3@E;z=&+6^9&N+g7rhi#jLffR7!hO1ybb=Dmk$zxfA zDWp6Y=!1X^Y4lyrMcKM~i(z-H5Sh6iuXdlOmtt(lm+t5j79H(SVv_Sss4wzz#S?q5@|Zx|-64&wIwzSrSa z`2vtB&RlZ@l_Y0~k^WgeJ#*uL$$~zAXv8Ny;Y-@trY?9)#ikkTD{bZF;ZKYhO4hXz zo{4w$h@Oogv5nt9_bqStA79{E{^EgS-AzZfy1k`SsJ6&m;o8&|R>y8CJC(3;HwmoZ z*++~mJ{noxZo5>A>0-^sut-aOjLLH0+ZN{T-fwbq?vuQJ8{}}nsYXad*Y)A*+racI zK-Uc_KiH|vvQB>HtpVlI`}pSfVO>S8*HqMj=WC3V#^iaW{6E)>(EWRy_Iac7e$Nf< zoj0~0{(!jhy@sg&Vg&=DzeAdlT|7Pj%Sm(Yo-O z6l}v!+=^H(BQ(CF-2lV=xa4oUH6Z^j9Lg;zGY#v=r}!<}nUlakQd+{PfLGmEzo)HNn$;98r87d1v0BK3ZCY zAlG#@6-y;h-x<3G;bHSP1momEyXoXrix5U**}yhp<=@$l3rh`8k4Z!v1#&mO0w&0wZ*uodHj)5WEaQb23($aRo~*B`fxqmm^*Aq zi7#e2nzleyJ#2|ydLyn1jmrm8sW=ER?Qe8-P5r685X%p*T!38_J>yFjLt^X^4KhhO zns!L+c6>8lM*s}%emG2Mbw2tT`cossWLYOOsgdgU`9o#AB{d<-`CIHLc2wdt6F4zS zH&gyuG^}t6d47BM_)2D^Bz_+}lSs;UT)%j7Mg+lHID|3%qAm_AJ3!kK{E66$| z?}Umk=nle;bB^fuer!{^&Az-cn-dPWxnV-{RkjgC(}q`?*`<6|&4s))H1O}v;A$uy zat{Y`9i=-%D{IO8g8du*CS8202yT!Io0AJ&&HOc=pQ@I=T)~kraYC8YF|3-lfVr&7 z*j647GKFHLn6rC>E8<+bpdm_6+U+eR5h9T7oovScPsEu};<*ahQrY=x7}S8BTma&H zH9OpEv71|PnM4u9Zx{(%4^c0K%`QEQTQhBi1#W@uf}c+gFY?Ndq|3Bof!n1?emTx? z>x|uq<32U!Upz9Z~5c=df9lD0xRl+;lzN4@b@zQD|A_y*!u2 zaCzd{2#hvyNu~;@%lMHpGx@Le#b~$g_bD$q-6DZI#vo~(uHy~ed zVDL!F>7NXr{|hS(0+5Ys+^HxkMTGMww`e%R(vt)b8jqAbcSPkCCU?MD^|b2q0Z+ew z?VCt$4%eF>;Yj#XnmfVnLRp-Ie_V-|Gd=k?0Ak{hQZF*wh1zK`<}1nW@!x!eA8H-f zBh5ft`4T@~RxChj*ITL=$+bt$9KWGd&%BTaFy1>G@s{6|rZ|zhdMMpBm*OT^vU16E z_r#Qu!R^KWdp{}Duy`#9;%m9Tj1ACg(aH>)Jzzn}d3+KS*Y)&x}4+q^>pTL zhSH~M(dB_P_;2EumdH$Ng%U4tUpwC4K@Hy7?v0H#HmvgMx#VxtK-+mZ=7v`U+ZzJu zWmh}gp1IO9jPWyjDtX<~onU^KzImW`P=9wtT!=15`-I%rWws3w_^3SQehx!FFLYH7 zsG9{7IplWrz@rnO7-DJcZx&m+AH1QYh9)om{#6S7&E&^+%8Rq?pDc3E0-O*}PhvtA zDfqGnl_9B5bRq{HO&Tdot?2R&hK+gI7K9j(ZQi+Z?mv+9+ zAbgzNMgT)i4`V}v0(qCscn;$8WE@XTk4eZ}M#~QLegtraF9=GgY~sW% zKi3WMvhP?vZodfu2#LS{qB@bWKR0l@2DJ9@I^YEJ!v!#>#>Gt0Ad+4Ui2GtC6O5jK zKaTPAytaj0UkR+&7LOH__Scmvud*eVpHr!^D%P5jR5OgCxKgWEIaMn;BdHNzDWbQl zs2v)A_DHB55W8Xv6xGgawl3YEK*|I;ri(a)MeXD0LpqUf5nxX7Go*U!(!I26-Z&a* zYrDyQV4DQm+ske_wedPR|L5VRen!+eipLyOXj`0MROOfJT2b~FmH^;ahLM8kP2xq_ z1yije->lhv_S(#sM%nqz3iYpbatrAFZ4jI7wFe5roHg_Nl(!eU!w=8s6!ZtggUKD> z?WO0;edkLp16_VJYHAzjN+{XCDkyT@m<}uIN;P<^WfmKC+WA^_k|Om31huFftCmnR z^y~B~#SdD1kSs^$Ir|Ta)~OJ~H2EUww&4@-PI88{EKN#0`DUPIZtk0d>olKfOop0Vp0e{h>G^a+4(f`5Ay%C*a5>-Tcp2( zNRtr%7YqUw7nA?k>i+lLLfF;P#>CW#jQM{ZFltg}?3dNiM&c-w?xy$qfl87fwwBmL z2UGDVFmjor8C?5JtziwQzvz_5IEDurNViab2Xu;Aaq6jAy@*}cs)|{vHB_p$_^YmX zhk=nIWBerh$bM=>>C&=S{TsP~~cEDWCmi(aYm7CL1(pS9YF(YR>KVS7mWpf&W} zaJ(&bRCO<;n$4!mKc#E<`+H@raLZ9o3LMSO(jHa#0W5iJhbcVJM)=pJRC^JHE@l2G0qe+33oL&M9$VjW8y z&qv&hi`%$vmt^!K^0P}FiUv;Zm}xRJ=^8F*nlY0f(nu_mUjf1)WTEL(t?6trU`v0b zL{j!q<#sFaZ8)=-Gl%neW>6Isj1Np&QQ7m?zH|Rf#1Qjagvw!ivW&HQ^UjKz>dk_- z=nj%4vH5ASU)vMOfx|I0$u^dRa;~{tg zs+$Hr{o$^-N&}s?LZ_KU=c4ZVK7MLxTjoVz!5K}>j2tU`qq6aAqnz)S>6st*WLAv6 z)cMIrZCi@Ej4dP8b*q!}2l^QVb=xMzNd5U+PS)LYg;tBuL#IxUVU=yrWW0N!b*8EH z=t){_&aV3Irr~DVZqZDQ;w8ZTC(*4rWDf!alcZn#zRsf}?5jEcV3S}~Um-9!F1L&d zV`hv>|Jo>`o>L;BKG`@!ak@cRbGAWR)4SpY;S{j5M(pbR%zt1EP`TQimeM4>nsMYb zq#olBHj4Fz&I5dcqj;zY{L#k&BIA(?#v(^28szhvW$Kp54Un|mk?T4kR!L3}9wPTr z{Das#@V+MmlKPSS!|pT8`E>sb>6`F&2$xnD3xGKz9@6m0laT{Jy2$7M>kLOMuqPgc z&G6U5jPz^Ay(aaM)h}lLk#>ex{Qq!vPQjT*UzhJr@^)<7ww-ir+a23>$5zL-ZQHhO zCvWUz@~^p=`KG3(>YJ)v&&_kaPo1;&+P}s9Hljd1e{G6`91nW$i7Dpju;cq*Tb42t zbIlv|#}D#vORU8IhuZjmY1#kTu$w&Jj*P>`W0Lrd(Su-`*xyFj27fDrRT%|F;6Mp! zApiV^jh`TCWoEHTFiN#(qXmGB$Y_VC^MOW=@v0Z-Y>D}Oc z{Qh(_l{p$X5lG+#-}Tb`_GS7t&H2^I-|;?OoCWyn{@e=CM2IH;?VDcK}QZ- zLCV$sW|K{@`v)L%@T~)oIr@eJiX3=V1j_*q2$LL9=Qwn-heXRD^LAXIS-peOkasll zp)W{i>NyzDq%?as2G9vRG>}p>3?blh^$7LK(@A#Gfa5(L=&50V^z*4U&A}C>gnGE~ zyAxteCgrXHGhOX(PFZ%tR!lgp8W3ts57c@+>t3viL_17ZD{Y!%0|2_Sc16P<-m1D- zan*Et*a&@E*CDN%pV+i5aLZbDpjpPfWE*BfGHBn9YW<&C<0AC{_IzGQzCpC1l`&c| zB(B=Y$V(&_23n~2)}Y#qVcKK>_w1y!o0~*3U|Nj6e!o5kAC#vlF~V9~yJyga&c)82 z5FK5@tu`>3V1%uC{j}0y)tj#vUcf>XCu+St1HzsSyf33oRnAl*ee>AWgZ{)R(W-erk>cXaZ*!GEfL0i^aSKqPO-N8DV2~4Vf&&C;mGX<3$n2b~arFRia4g3=;dk^eO|HDWwx$@1%tt*w5YS^@QT&P+tWLA$L4)Rtg zPz-`RrkoZW|D;RzT5O>UN&E_Z6CV2>Dw*(r%FzuGHU-=3g1DmGk?^Q)fitvQo7y)B z5rj9=J zc&_Pld`+j}cUc;XT%FZ>Zyg)?d>EVA5vp?DK%>EeM7fpT(xqeVrp7%AA4*rzRur~l-{ zz>j;`eL^xT5RVRw`^Uva#)_H@0Y{7}SXPDJ)kI}REMhD@i-*@2a~pzt2#DJR`=}9p zJOzbcWYiT?-sdTS@+H-5!P)0A?02;-$jHUyVzrkmN&))ud9&dZZ=z^IaxAM7M9q(g z&cq`l6x~=lTpYv23!E%c#gSHaNbHhk!zHbs7Q7$a)V6j@OCLE0v zbU}b-8r%Jo(&6Il5XEN7&u9dEqC4?`EC^keJ|~9;GwZAH3fV~)gD2V-#Obh0S>I5U zp`$}Fjss&@Je3%i(uS^YNYU`2h;TyLGnSBCfs;o*bEya;4pcYBQq*^vOtSnxnHB>$ zyV%YHYa-A(1A(=nFxOMwrYmSvE^l|t+C~)b^?|U^RZ;!`Dr5j$; zp_^`6)GbuHq1Fm=q5K{dxLv70outRqpCX4(nBW(pR{AWG)7Q7-(n&HQXhy$L#>N)2 zx~_N+Wxx_nZH3Eo;h+p&K6!ZQpwviGEznG!VvJPpT|o7n_6wBE#B-;^Np<{e(d@G& ze2#G)!s1lY@umrh8X*`r9DN}UPQ=C2YPAK`e)s35-`IpFhB?79z?KF9q9 zt+7}a#HM6b5GWAI2hO`T8UwGA^h>U1{j5UeIfaGsc0fbA9cH;7mPz|p@^}qw(|8Ri zUD7T(FdQbir;te-dU@0iRhzaS)vgeRzJJ=dBlu{y(G6E{kz$5=H<3vf-gXoy_8cF{ z{=-_gW51S|M|I5#0U?u=ojp!s92Fpd%0h~+$5lK zimuzul8tXe<1D*8NzJpO!MXCdm3O@Y_x{eaq7si?WaoGJ_Sv1%eWNF?D%miWmz-r` zK#7VkHF;K&rf~=E^^QStTS4;N4&~4vkx10`qV3Q@EM#Wj=e*&d`j6iUKt7#Y#ChF; zuH$a-ThzPWOj|MA$v5E7LYVkF2JCzkyFyHSkuf9B#2du>`9L(mDT22OU=ui3rcHOR zF!SQ{=8~%4+}d748z>!mAJ|8sClVjwKHmntK7F5g?Jp|K zH{jn$xw^wHsOr&Ylo#HM;bKxR(IL~;JDd(bhE7T1fM)qPXEI;7k@0LwmsywM>=F_@ z$hAAS`atki%x;2RxfUOVzHA3?@xJ7iPfX5JjHc|p8V}Z|iYtD?8pZO!5MwXQ(U&j( z%rEMTg6h~C6%st%kZI#*-gki^y}o0luHLRU8L*HvEbtE55a&C2)5yss9=Y^zk2d=4 zGrKm_Vo|}r0JFm4fpX`aJF2G_=*u1?$)bMZn#li*6}$TPywQD0_dS70f!E{DmT1@D zMr=S-FUs8zCZ9n3@n^`-U`sB@Ueb7ui(9@$c@Y8lTEP|_y zV9)9wo(G|++}tMf`_qt)VzB@s8Vn5!5zOb>EPg~2QTH;zny58yjKCmb-XOvW{Mj4m zUghqxu3v-_+uswyj2ugW09gZUV(oJ*DqFm(aH+bzc|9_O_C?mk^D->!@-sttBSOFR zl#&!w_Vxx<|8AZoOC}+I(z$U5>?X?3rRc=RDs7Ooa?r`ezem4Pr*Rve_SjYtNMe?A zsU##oPXk)A8urr#SO;jCr#LqfAW_746yW37lY%Cfr_{vK zZ67@s2%#S06V#myoaObSQcs2)FozCnmY5^voqQ{N?Ns5Rkf>44$ioJ6}$2wJxaD{3oS2u zHIYjS(1b!CG|fyqchz}CYW5|~`uzZ`U1v36 z`gGwW>vL8|-Do|3C;w+Aw z@x2-?Z|X#ZiIgUI77HHG?~56^_BH$-WzN!_3OlH;QDLj7Iyc)je-%zqvHjtTv@{d> zZ-UBz8`bd?CRug+=KaKL;>jhLB%?(S2^oQmBID_Uoc}stG@8g6vRLyWNvNBlBzkwi zHDP)SQpFh+7B+#rvSD#uRds>Y@}r^hjKmaJ)*nFr(22S~`ETGX%|lCubucWvtxW~H z1@%D-Ik%UqeeaIbbzzNCkrk#b1n+}2Mc>b!Zk20?oP!sKZsJ@GES@vzjFMv8{JcSl z%Skk_f2W8-Kv7r3!}5XaW6G~!03)0-qq&6k(tEX_k=1f(b;-g#x3aC(W$_!~=bX4< zjlmZT_u@d=vPy1dYsOCT2`AT6O+GhpLrPpTloEfGzbQCE27vjtdPMHBA0sRyBMddq z?lVxUF*ml0`GSfX*acR1{J|>t4NdSY0D|nR56JNV*QPm>+EG-{`;{E=3e}>xpw_$C zaHO>m9bj4FORFt*sbqfP(c(9TUD_O)MYx#c&)4Js{DJV)lH!Y;Xh@JX#%zAbBA)lU zz7W5-3dC*E*lEG*Di>H2;6+|kauNpwy%BchnDM7TL4`wm66*7l{L0M+2~$=zpDBmb zf{hH)Oo5RC6oH_o1&3)hBWzP>HX|L|=Q(5F;L)G7WQwLllb4vZC1aedfZs?%Es_-l zp9$v$opW5aHsF(xEly+>e8dg}4nYe-hwA)Y#LBfKz+Dn#W09{$yw%5@2!^fsG37rv zLjuuUcH-QZ+=IIyIJ+i66&7%P>VFVtX(p^PN0*z{&f@1X2f@rKYgzzAAVG~KpvCrI zFcttwJhoV1jnB0rV{C$utXp{CBHiDyX$i^Mmbz5#@tqyufV_&|@xc=JzwU=;S!n#e zaohIkii-}o@%*?A_YpTg3t$8Uc8e|NiR9QJabLE1kK8|n1VWU2{J2nk@LwNsNnPj% z6u|noVijiQTt?{TZv}M8d2LNOLTrlv!#6Te87p;1VA4ixyouayT6x!0sNRt7pB2fyaW;#}6RHE$+!V;amWl79y%Oq-YmA*}^| zO#f_QB|76s+%P#))^lS#;r znsRtyH8^ORG6dS-qvSk-*bF7x#J@gF{5531$S0C>l38d3^mbb)_lL|S`F`hQ1r|5x zyra_Us~r$EO@`$7l}7^L|I%O;Uk59%X+pQoLz~{Clt#_z#LBbGP_6^adBo1?pfZ(P z(5Ehf21(fGCjQyr_2F$Y(vqQr+Jz3>K(&r9>vMJdEbdKb0N*N7zomoxQ2Ueb!Py~q z1hjO>!;fEo4P+ZDHp0rr)-IJoFZxd*lSK@`gsqO=x^V_%-S^L9JthC6adWoWm5QB% zKa{~l^_G9hz)L9b2U+k}6o|E8rTR!+`XskL>yG90f<@l3jRpO(&Y@5%rcjHKY!&pQ z61n+n2*x;VHo(!4lR(D+{?YQ&F*wxqE6+M4HqbscoD6ix3D>agXrL9UQ9{= z<|24baK5R4KK{bviH%sIH(yGeA`Fc`3=QL-v;xC4me5=YETJ?unqO18!P%A>nwxCtlQyXj(Lsr0T@8# zLNrzpQ#d5#eeU+P<0fQ77CYy5h0Y5jzo{x+Z7U4%gp>P-}A~G z@{!Pm2LCAm171f3fwRad>7s$M`?=XD+;C$&2b^Tw9Wt}V|*+|pfELI38b*#+Wa8(#EXDr9OH_@B<) zPQUjy#)PcG;JIgrT&G`$aerwE45_6>!C4Hrtpov@Kps0o@{8Z_+JU-4B^OJJt1??3 zIs*31cvS6_k{9R}*JuLsB%0T=Q&I?(Po;&yV>H&E0Vq=P>0cO=-D(%c^%+eBjEtP_ zJ&<0%9Upr`()=oN@Tz4A46UHna>}yGVO=tFkkfMzvA?fkSQe-^Vanige>u5&|5I(=2QWk&<(ye9&%FAQ zd`5N*_FO|8xP}?QjG^RoVAH+`S@b(n*6n&##=0*BTLnU~0@}@&M2U*k=xa~%dkcg} z#bEPzaZ6MJ4g>CR`~>)KgfA;Gz2VuhHc_YYU9!4eS#XEgbA-3P8l%cSh4GHWm4@f( znkC`BQoI_w?p78-Mh0|av(oVXqXft**uJ?u2bN<(pB5Yi(u;9&|EXAV#2eqD4$7=O zcdU1GW4W^{DZduq9wW%Eq@C)+6jcGnGg~a8pc}hVYUM*%>iIl7- zvvJb?TVG-As|W*588!A%e#*|mG(2n6b?%=aRubkWHM@!}IXu{O1+PS9?WJAF&tIDB zFxiQwU-j~_z+ZH@Q;N;@djfOf-KbpD*KqR|<>1>FT_`ehVp zJsJ~7+x^?8Hpxg!@Skzz`wz{9)zvtcgU!r`iHZgX!8t)ta}Zca5}vtO7W(2DG^+r2 z0G7BAvbYfTZD0eTbq=h=JPV6V`tOrgX3xUJ1`pEgF58Fg*5eFM-KPvs)2z42eYu}2 zf@0M2Va$gV!x}GlvG49JAjd#)0N$XX;|)hv?8%+6o8nF>)H`gKd~oq$zA0E2#jr0m zkd)I$b>|waiw56YWTzF1C#E`S_nNu}<@-O`w~_*c2l=7^I{Tpmx(Iw)NA4c#r9!2YjmSe1UzNkS+b#0b5AVQ9bMa1fgI-U_pRHh&197 zW%*PB!V+!ypqy5JD!?Q%i{1=~05l+zyhL*5#UBk)lg2D8r_i4cL7CPpH3u3%i|!Pc z69Ld6DiNK55=e&9q~C&M%;6HS1XLn7=+68SNXzjMzy??&EfAR1=g|5$ zL9LOQwdafjbO=jo{at3Jpy1{(`#P$wlDsR2J@R!nD>L69RW3nab9A#8=06@3rfcUu zxKm0-W!tl|9-~i2D^$Xck9)U{lFX!BZIwJpur4nnof?E8 zp+UklrX`oeWMT#r#VS7=u8eWf8XYb!rozUrO`-=oMfH3wnam&0M~e!s+A=-HoK~-s zs*`*D9~-b;%DUuSdFMw9|2=@V*>5z?KiF^18>({Y^7jziau_aYmBLgfMm+%k!q%nq zxwys6WvZ^-x*+#8I*UP&%D8MKoN1ZYGpC2A%EsVHrOk;n<&wvoM3WA`gplg?83YkE zI(OIOLH`QyOU)+U(B;mYF_~x8$S!bJe4^o=yt$poXg1_(VsmNIHqh+rEXq1!g&7_b zf8q85FXV){pd}s+&Q?R<;1{$K58FND>3iH(bU#(zemB?QGWcaGOjAv%zi$;~poQZd zntVA<79U7zxIb}wSF6jiwUlXT{BJ74qeCzx>t=M!ObyeXNu}WcW8~bayH7EW5wvx&o+Gov*8?ZcA>le_RV`=Yf~XoITJ)MP1KS@gUD8G+W_@## zBadhsH=U-$$H)rwFnG3RC>P?*0Yii&xU8v#lspEv4Z# z#5fw;-8YPn7f3g;Qdw{EIzsvwH@bDBixXa?X!azPI_+3+Kws^hS0^LE(D^~~o?CoG zTf@Uy$|g}N6%8q1v*12jE6urlaOtw6x`&*SUMQ@+8my8&(YA{uYr(H2H&S zdVLSaaN(4_SnbT|5{%2cQRo@g!EUrjq^&C*Xk&_ExZ|MF%R`3QkCl3J_OEOGf*Chn z>jDGw9NOz_l~Py4P|o;0`wSj!6hPNVIlpHb&UOGK6#${`UxdUF%zUUUx5{EXhox3}8Q z9DlRW>_g^71&5}2#|Yt3>@^*a*{9FsHcdxl5P>*Y*yqGbbzeCC($_@uGyuk+&FnP2|ufA}`%C zGOL!B5P4G`JQnJgoU&!qcU>FwpTI&42p}r)ac2Dk727ayf? z7D>053>$PG?z5yZSSVEjbudj|vZyxJYR%qKsC-KE%v1c$Y|{eHAI(krAlMo*76PQ@ z0OgjGCfQjszm@<>?wxDaZ*FY;9~K$0vzhBiJmz=zqpiy_dmxytVM%&4nI4MMhw8O~ z&KYuMYd^pA;`N$WE=D1sA{6x*nH;>C0$TA+Zr4|y6w|XJqOQ(^^JG-2Qk>uWBNbim zA@%Q^q+thJmSj#eB&drlk8mZ3&Gfo}87mT*k=EyTKN495gv7 zqaHn}zZ73Ot0dHn6McWoiaa6)F^sDQeK&k|JdStV!XJxwlbZG(K2kznD7kaA$`GY; zCamh(5$_}9JbVp|J6lv<>B5OrBMttlwyqD+2CCiTsP@ab?TfP#9+n&shmvV$-yQ+OiL)#S4^Tr zDlXAr(kn9D;3M5vF0!VcGc-xSE{|Y_CoZ2n}cY&hF}k2;-(bsC2=rVh6|;pp$m-vP==cLs{4SdCh{kap2j9 z<1kS$sFv&F&UpAn_GZV1{`XNsGWDoK?Ii5Rmbr-8Y+1R3Ikayo^%fmocpv3r{+HoX z!UQuFIWwxf_FHJAp-(y7%_^zydxna@gA$_+HYZ=vw0~`+2h}M9E+GxZ6PxeE+vN^1 z3j6XYpFqp4Z2Bm}%?PwFU+)C4AE0m3ed>HJB`+)+#9xmQRl zHwiJzmo6MAmAoSz$Qiw?>4P;vFyl^-uf1w{L+s^u8ji73c|No_sn)NO^XELnH5Gj@ zv3(Lx3tLvv?xlvstZ;5{-6epP4ZXUtN= zx6U|KP>&g&Y%Z$k%xNm=ywPA63sn-cd)vH#;H61s!jja#Z=p6Dyw=0lvj1>MacfyrHkf!zk3pPI&l z8Oi2s%1Zg~c#uh`28tRvzYi!J`5YBLHb9kPj*cH3fD4tQ_MeK-BZp~{}%iy z<@Xa1O&zODQ21N(romu+PEP*KeXdjl!;v?V5(GUFqU*xEA$R18$1gdpsLS z&v?9S_hWlV#SL)zjK~FabaF7|6ec}6TEjX_TN6s&VOX9tY=B%=Bwk)1yI15kaKiYd z6T){EB7%uitY1~nz5~{Y54Y(@;|(Kpuh9{J*Ta3Ppe-l2zj=?dyn}8}>>XnXEN@Bm z34fZUx2Hy5SQp%A6;x^Abt2?LYJ+hNX4}b{Ve?{X0DlUG+u6?*dKNyx@}e@@na?GW z4XSIQzo*;4Z^MKSwCNAXZMWyTm&kzJjH%BJ0m`39@Zfl$9ShR$#Lc(@-A=&WnC`i{ z5InwBv#kNiTg@(j`SO;~pAhwMP% z^Goh0zxe=0xsiH7`(S)B=)!JCEcX=yJ)Q;LIo>gRkbHjeL-WV5_igvk_tEcH#(mQC z(eM4d`UHCRpTxsI>%0hbcV~b8AFeP&`0#X<@3>!|@3`OpHl^o3mazXlDDu9ZOn>_NdiuKl z{&Y)p0~dz*0XxzP_`U8J6#X6@a%|TzJD|@wIGdE;0XffhcKv|gU|4)aroW8u6jnD# z(_=*J*n^2MhV&)eh5KhAjtqXY;m7=8y^7113%rq7^`(mRH1^d)dD@@H!VBGFezpqq z!b_N}W%7c{j@f~J&NF%=<@6BmPbTI-g&z;87H|6&7%ZRLyxxORUM3;Bf^4O3uSbsB z^}Xc!iEkgCSb4B|vEF}AeKGjQ1BofGhxK{ThW7Q}Ny4)wS1f_dt?!Vl@7n$JEbof_ z)nHV(^Rk$yvhyyAn3krN5r0>Ra?zuCRkEkjueibP zv?4#gX>KQVE@YN#SA>4Sr6*}J{cBhBGdE)y1|+MpV18rzu<3mywvCAF!@+hwNRO3~*%Kpc7IGSVfR*EB(_(Y&&kJ9=ODZ+C=oP9^1P>YnNO>@v-!UdnKBJ=Lc2BTpxDhKQ$Wh^)7OMV zhiUYdN|&`aUahY*vrVaDT1S=Q-*$#Y>j_$EbrVh6UwHFd`X!mwYiSZp+AwEhroK!k zkA){cu#2PE2BQ>Wp(mFn+;UR;^6e27YljFjPl^xsd6>9{>N6>6d0;7+q3FyT{u+{p z`Lgik^J02>ep0fMmek^yHazWnHPtOUB}%D}I?0-_!FD53nCCG*sE#vTMw$297g$eM zWJ<^CYhW(hNmTG`7%sLd=ikqZ+L! zwmjVp{Z{aBSoII9Ki_AfqJD)jh4IdDL9N$v50QeAR_=;emWiq*kOtg56u+5%&Q9w(-&>HHxVJotlOxEM;soCYay)^=Z|vzexuZ4=?P_B+w5!!fN<+i) zo)i@Dn~{TZ{APVz*5%kKWq(EQp8aoWTcw8{RjjT(t~Swv81@OJ&u91z?u z`D^-*ti_OjnxWd*rDcA~#}VAN@x>^Rl)0(Y$co)c3@@f$#Snz**Yj3I&zLz>QGHX2 z#=10Cl|&CK`Y{drqV4Ojx)R?$*W9&OP}E#(KkAn;Ejg8j@^?h5JSN2i@@j2jes^di zXJ%RXbWPj*k*sBQBIlo|i^R8Xm^uI3R2r**iunAIrb3($FVR>LE+$THa~s*w4n3s` z7Ij*}lam2_XRDzgF3lQ={%ogrOyAiX9IM4zSZfe!QK>DXA;}}FbP48KM*fZwyH~dX zaarHR+2~8ICUF<^Too~J7lz)`XKbtBoapX+yBG1lQmw>wF7L}44Y)z=T}$Wx9`pD4>91X7SN%wJ_>AZ-xgvC-#1F5K(B%QT9` zAhNzRig^)XVdq@p;s^%?Lc6gAu`s$Lc?AW^qq988iFx5hx}yj{n>vN;j7SuR0y6oj zL7aNUzG#Qe@LjJ_Qzb2Od80C&I%@oy;;_0LnW^(I+Dk(cRk zUFv=AXJqE36e%y(A?(>q70&fo8;1rBCiAt1E;?ha@~{+8Q76Mc-N~Nn6_E6bkddOF z&N$>W5vMpj(^=|$dg?GwL&UGMzw_WR}QcK3BmFcT7-*xtD!43HI6k@%8cwt$f1c!~Q zpoenVF#;eGw!%)*+e>neH?0VX2bCR!%Tg7*vgcoxLi&LbWY$#F_>W~iPdz3RmnT}q zrKw$!E5UfRb!A1U0@v)=1pJ!|?YYZ8Yfq{!o}2?2KY=%KY{+_{GrP^H(T4YmC;kbI z*#vF8wzMNU@v2U85he%qs~2>%k;63T=(@Wgt2nOS)^R5pCLL2Vvux>~&AmbC>6*bm>RGEZ&SGo1dgJ z^Y6g58+JrR(be<}GY*a-KQd-5vQ5g<1)lFH3=xGp0aLUNzh!cz@m4$Xo}znAQ7os| zj#pAi;@m~5DVsm}yNIU29!Xf2NJReFQGTzeLuAA-WrV`E{M{$}L24%2*r9K)OI2x)pHO6mKz@unZ)rj0OR z;5-B&lpROF4kGv2tEuqDGv~6Zq5>)eF5e0w&P~P)Vzvdt|5IVmnSC8~0L}m!Ne8o5 z1z{P4NK07xVZez?AyWt?*@=)bSkmz4Ny8Jp4>lu;r?PfUR6?g8ZYdXXqd9U_wTb_K9Yw&dQ`0X_;FY@F_O3|$?&<_R604|aMLDk z3RCg}*v7O+O=0u#=cX*I42gsDu+FfSLOw=#0o`m95>6zG1sTr-F!zf*@ITuT-nYx< z;`!UlJ2a0D)-1BX{t}F#j9#7u#RrRQqTgc?&yjyy13LfHXh7K z&lhQ7GsSRpT~@ByGqqk5v(`y}Bx{hgkJ!H{=Zn_Uw(f^k6lYa!pft-1b0hNEktSvhOkDz)w zZrv0Jh137=Ow`IFTo#h}lipwS)uJmIa}PBoAh{k^;rlg0dTjKGF(P*I!+U4Z;tSl4 z^G-Uf&k112_m|px8))L}C#N3}T+X6B*)5mHlfRobHWCjrV)?=+9=`ls^`W`f z0#|+41Uvj9`-#=5)b_|YQQi(s9ireF(Tr&zFFW70eirj*adN95V{P-%+~trYR4PEs z8ymh9fzsCPPYvS=@V5+5cZ@sgr8X03E%kgIHEENI#kpy_NT;jc=tgJl6Om>hzhMME zrP5ctoL_WoI90`0@SIm*EF0aZeyXFA%Ug?9|Fa9Py0`-o+MSu*&ZL{mUGQ$uUfJBO z-=1a(I5dg1#nQ`Wdo&-_5?0wDL;d!5%-i|FNnKQZ^ZCz*{pC z%s2yv54cY}=2$gvJsNjZ^{UbI=sDXmdXfHALA*7ny<+z7H^nn=adZCDQt;dPcN>Le z!yOHw)6~Nz@RB*#JfOCq0HsY-Kdg{JNpL5kv8W*p4gIm8=FG;d1^UI9J_=mIAJ{8% z6l|Ei`YkkUgZd&?tD3V9F=c(n6ksIwZ>ZPnRdvuWl#nPXPcXyZq86sn0Dxpb$`-0= zWw1@PHzsKhue3#!d?56I#IH>3^yFH;_xlV>V27iu^t@vQgLgZA*|GfE2o)+zc(_xG zeQJ6D6X2s7m#q6;xkhNO8j$hdxEkn>d+r<^}*T-~r_75Iml|gj3 z9HOYzpLKX+#l&N$w~gmbSKQ5mpVb=CrBb%u<=Ay23^iK&U9qk( zFZFxbcc64Slyt2|oT|V;!mM#yW)fAMc!Xf;B;uv?hcsZ5+hkF?(;#b0=OnLG)_QW- z4*R&NIv@2mU#8%cYNvk4!1z%SQ0MKp8?|t{+j|B#`zf@m7+TU<)A4Ps3Axb+%;4Q| zvRy6KAdH5|sN*>`?m?V(SDlcNM1r-}g?&2~@VAp0f*b#2 zVv%urUp!7)BW3?lSN5!YuN3S#1@+1d5K1F>bz(fbObe4zRsmf$_N9=!Mq5uQ9MMU) z-_nS5UnaQtOX(9vt!;tb;;k>od@>vTo&&Fc5nq)nduw>jL36f&!y+^#PV`w~p0x%Ta z^GU!QtkqD~0O~sWVd*82gx0#t)|ICt7}-qdGQuqTX15Db+jjsy06hpV?vy)s0Jo9P z8u3&54@4^h6LL@^VPPU+Fipc1!ZF6GE9FPGG@|0!ZVF6h1mTMM{mM_nXEHFu1djD! zbu)Bs^*=#Rq0M%sK?m)8Ev;D&;OllI9D6v>0@7tdw^KfWb$5uRnZz&!i)eJ{nlqXh zB-FgZQqcWkEw^g;uZnVqt8l9{w-kZb8q$gajM70eCMiYPTa-B%Xu_ct+0LaQ&K3P0 zWIUT+F#pxNp%vdc82ZgiHYfQ1?C1YCEjcwg)!h#Pf`O2LLOg{evciJE3?>(j1W{rD zWbm2k4(V5XDhIQEy=G<8(vqfDJ3`~4Cav|UzuB+YJSPRMb4AN1k+$ols|eIn-!0En zE1~$m**#BNoll$fU&kAcA;r3$2MRwT7Ln*5_v&>Qb{z30`i>880PYueI|3KU)$pVD z`mmk4Zm~;tJHc0fDmwRKoOj{;e0H-I|HKVv3;rA=elH?uDwAuhb1c;Wc)n7kgMa=uu`o?HJR}k|9T?k0ONl1NYezE!~d4w$P)l z2RAzIUegiR`{26o2>ky(_>+d^yxbH*qupx}%v0YNLb7*jg0tUhP`VLrx)Wxrjryw( zZ_>TqRr{}n$G6A#;cuVwgOgd_C2|?e$?`;pJ(%MnhYXX0RH;f9p#Y6H>P*H1isw<$ zHq7vk_=P!*f%~;hX6=3cuXY{GD<&jLCI(`rVs_<-T~wGc0AkTGv#24WUOO$%n%klfw1;if!p=rR0~{7 zF{BN<^9b=waKH6Prw_diEMy~X>!%FbV*mBrcoPlBoM8~8-DJNXN`M96(9wZ(Oc%6i z2{6lM=pk*y6=fQQ<(v&I7-7(3yfJ^wQz$3+N9-Lc>(V@Cp!g$wk;6nri)Yq|tR*!d z(L^zLKLj;fLWs4=@-D4HJ2~6GuCFqOaxgP8Gf|4C%w5vbE%mrInE!6$z`T5y9_zCV zIES5tTx_{?4vOEoDb1R)ODjr~cCi3--4i)WzzZKV%K;Pi?`XL&s*6;o$zmD^-?5ky z5v5o{%f=0lZKcQ3NDOt=B=7E9H3l{CmN-|%>bBBl(>}7UhYSzCo(483E2Sv0!Q5zQ z95ttjMiRhKXE6U;rgLZ_%hQ2Nxa-3ms?w3JE1$@mXu-%FNzzX-6A)BA6#;#hM~+x| z_}ZYk!pLN-N*K(sK!K4h`={m>s)%$sg(%QHhly}Y=_p1e6@)kLR}y5+mJcx`-wXD8 z{P$w{xU5{_=s-7^rwUIk8QQiDD2Jet4ApqF44yWmKSA}B4?4Wfw29XEMlv=k8R+!$ zQJ^_nszGm?6-%*a$}}z=74$gj_{xox7*aDj%21>51Y3SPv9Z>a5+RxC5FDIfpoCHf zHzJ#wNFgAVsl$H)9kL>m>(kHo%xtLJNjow&+Joh!1FgoN~z`*tuz_Ngke1skOT8 zVmNj#s$@BwOCqDav`7tuwgj1mRPl_JQ{$^8R6$_`DFjQa?FVkVsg#sMmWl8B&(jjrQv7gY)sUH8P>wrWRtZ~SmPtIbXiLj2Wp-j!nw(omZR3)f zT(U>r$~9#7U|}_ljllIfJ+op}Q!*ZKNBezlk>zkoML;xWtei{byb;sh;ys^nP?tI@ zZcL?1DXKCpVS`stp)={kst0g(j@Ha653-mo~qpHP}ck?ISStIJo!3N>u zHDqK%e6UahQ&9@l-_Q#7^#GRhnzb<{(YE54QYo=f5=|9TpK4^U{-j{oL6meH7c^9z zk}XF4@@+k_)*-p7%>ayOU8r38_>nKasHw@u+EL0{MoCAiq_(uGmU00{Q*XJhtLU?i zD=FfI*qkvmSGy#Cv@HcJiBF3muQs6c_=YJ%%S4BLT<~@*#^eWM>$Nxr7z*cf6UM0M zIS=uv=qWr#weouXV+|_BeggA0YhtH7*3U11mDg1P@$H~Du zL4TSRECrWt$JYf0VsDA&gM|AcG;4+S+~&Im`vC_>2hzI7bU=Wt>fXv3e>#abISiGU zi=_sGS#NNs-RLggb=*t*V1II01M$gG8I+l$zEZ zYev1m6~gyCT0Lk4fC_6YroBM9oDc?swUWWo~>yZkD&TF>>F zh;EJ-|Ax6)=ZJ4Cwxc~~HmTiRD+C_R5C=`KFijBtu>spufBIoJwpG!}->9XSeaD(n zMO9JTUK6O~SyW|?Wvs>>$ueU*o_UQ`;rN95a>n}d#CEHIz64x9^Yl1Jv zQQGx1e;_0jZ;ODam1&HDLE`YWgrQ=hn(iPkaMbe_@8GQyoUw3B%s%Lor<*;h)JG5N zb38(aS6!jvp@;hJA651?ZGgF$f@a~{13AO&^~1Tjw49+R{D!CO1{F3)-)T#MwVr0P&8Kitigis^MrxqMLTw#{zKktS510-VZ{5;)n` z#dntxu$JMQml^-C=0{4<6s9jK)dOCWc-at7T0`AkCd*S+&Y<3nd!jWnWZD8w5|bD~ zK_{3%LO;gsb^g|c`MaDjtb$?57F|b<2ycV3#KZqX-WWp8OBewH*QMPsIk4^J3+myP#$nqc=DWeBKiY!C&Qd1QK zEphcjWp`}mtDRxkJwX^06%LD5;ULFgpxtahflc&08?RIga!aJ94?>D3HY`mnrzAR; zSMHG#dE!T`<0RZZe=L=NIqx(N+YC3}glj;GPFH{n35GcdD)jPcsJcs;jYBZcDFm1W z+#!LbZQRgMECHmwqUBT5Oj;%(r?&^nh1wn79p4Wv+=+$JL&8w9Xd+5uNAz8^*rv)AVLs z4l#z|!LoF#ltjx(8}HcrXQ6Vpca8an?xJ#?_^f(G=L^Nq@gnZhpmhdjJ<(8NpXSjl zOR{t@XEwzk`R3&6(p9vynK?tii$$)2l-s{--OJ9$m}s!VdrHcN7!U3)0O%4m%zyc$ z`O9kT&W5#czbxSWPSzj?8lM9?sD)!7Pb3m0A$GViw|qeF$hszot{&dD>kslVd5w4} zUBCZtxnd!F<741Ixnk2l$DRK#=;A-q%l`{>q4K};#On3&D}U1)ly#OiLHtcEbpxi= z6P5?EK(g%IiMQ&Ts~xvOsrZDv{6105lIM65?B#$Gv_b5UE-0NQp$+Y`EZJ^_}0-x8uv4OFfjQ4tN=^+4NgM zvDr|%hH6rCOWU!lH=&EX#el^`dOG?2M(!Tq&@T!%>%+1aW3rTA9{#&uE-7d(p zUt7ATTc!9E68KU_4ok|3TzWXlq^U`sKF6cL>a$geOz);;awF2NK#=7R@m7azowYxA= z6GLI;7mp*;Bh;#J+U*)4>DFwe?sj3mB%EtQ7TPynFHE68nL<_q5k^!|C$6R2K<=Sx z8MmuBs~#UCJI2rCrj?dgxnZnn&4nm-W%Hn(H0nm1I|E6KNmYopF_%sHPvq%%Q=OXb6JA8)SK+F4Bv$CX-WeH#^kEFOsIt%(A~}BCVwh~v zh#YQSApIOi&{)EQeDW~LP?)uLYdvH%Xswa-*v!9F>GADOeOYMy<}V-qIM>4P)EcyN zOX|fyq+OzrnC64_$^4~{jeHIs@WMkf62{{p`{h&FDN0D!I^TsyxBZo1)$QuEq(%E9 ztzTm({cf(GU)#L5E)wA!(S_^$z()|&SRzt2S5MANm{BYL)FXF%{)1pYRW?xrmv(_U z!0?wfv|C|DmhDL%>$h2;6Z~BNJYY5!nBEK0J7CjWWW7KY52?Hq;tNnnE9whGh+rF* zDLEn{EnzT>vxAyBv;VqWMb9!D0s$mGL!5imipb3@iX8zE?jT+fQ7eu|+SGwc-k}cR zEe!ZA!?OD@Py8xI9U4v`$>(>XtTUf zr%_r$6*courS0;2G&5O})QKWO=0b@>A&J=3iRl;Y`mJ9F#{Q14MAd z)_k6zgbBLB^$(D3jIV&!$eTq}h&gUWjp7Z_belcS7HJ1(Ad?;9z9nWlVdhzR>@B0} zDn~Gi<)EPU@fB=EPy0wR6=o=esNrLFKAUU}q;o+H`cpu!j)~J1R0G@lvC;QuzCzy- z$LSY|d8RUG6F%x-t1WZ}v0u(6^%W~g>#38XCqstG2Z;4t*5KB@MylQQ>AJjMS-pdF zjahKMgjI~#=~grP1il0+7Mmrlj<&Oi!%jX?T;B{3I(#}o7x$f|x1UsGcTxZ`BhNtx z4$M=rgP~v(p`yFsS5r+G&8iqK!rcD0rE$8^bZjLH=n=l3fS|MkiVvT?#zM3LZ)nxz zujdna7jQtjdz@IUTsN@)3M(~YO$q$@kpdaRV|`O&YI7SC+kX;!q{BI3`sm<*x9=K+fT3Id zSevy1Py>^$u*n$h=O6^^SRi5j5yVHBrQ0++`gHFCxX1$o%>rVbL!I9YFeQDPD;a4* zDzmCwg;v2?t%Y87#HnvIu{2CT3axc;Kzu^b;wMfdgr`LD%^cu8`4{S+1V(>eZ);{FG9Ie=(D$kf`i#6=m3hVk1mL%{sRd4-v! z+A!UJap?j;pb6+JjyFN6zk6b?M07%tI}oc&pi({+9Ez4~L3hqp?p!Q@Z2M)RwgajkG@7FOuQgTo_s|#qERH}wp_?NA@0zS_ zjhwBFY5y6R#&7V$jng-D`mbJH{~Wg_RZB-i<)5_8_;?oR=EOM#By}`uYeX<0pm>eb zAPIcxmBgid|Mf}nmHO4Fc1)WsWc?vqpF_|Wbkj!XlgPJ8^zVe|>D5AW{HnUptf|x0 z=Z=me=1E#>X|vv&!o>)lTiFSx-)G!A>|zwdM)*pL<`LU9rN1h|5L%LQ}=YLR=v zeC?##iY+EZ=V{U2?gmnPnW!r~XDit?>tB^NNydm2yaKt08uGMBQtdn77ZX%xtdB~o ztW^u_o9#ShDRT=W>A;%Le-nL6 zh!hKwuiQ}&vYZC}iq?a|t?cy3xChAAL8R9oLVovoe>MQc$&(JdS)`u5_TKbE4&|RZ<<~< z?A@E-Z;qUC@t5*N-B+8}Yee<@?FloLlt{9w&CmqLc+v_moVo|*VC4|K0OuO82^xGH zs4pKj8chnmk}Q9aO0nLi8dINV{CnNseEGufvX!9RXwrYO{VDqqBeq#ww3|+B+*D+3 zrb0wv=trm-B`8xbv&wwXS|;JUeRSxiMvowh`{vGa{-%pn^CO`9W!WgLmP~cBRI5pb zT6CGyX+45h*wZVoZC_P4Xtvl~aj0EVif#ePyge(mouHxv+^|RH&$4M5-Owc&5m#@1 zSV(zu$Lkr<57_VyrW8fC4b&+v{mdl!EFN#-p`lk**F=WHOj>h@-9om>#$|USAH8RS z)nb>yT;N`8Ek>foSgAl9yDaYEK(& zYp1(2;cHC=G>p-@vQo|{HtD3Wx(Ecjc3AxwRaeh$?(E)_u~mCqrkP-|zX9)2+Aa20 zQyXKqUN}kUZbqo;oPV}d@t%wKN#048bnMZ&W5$;BmoKv|L1tP28rHZ!K` z5%tsSLOF~q2;hPX>l|yI!X_ACU9hC_S>{_eT z?Sy>*VnHxRkVaT4L8wYRrtZia+0YL-Gg7wl5b6_d0a)>=J!EgJKK(~EVF=Mue%<^e z4*jt!()ew|cZl>O&Sq-DH%o%Qfkz>1f|KG4Xlf4zoedBAh_5$y?SeFUiQc#NU$yuFDWrIOXi! zVM3|nztbZs)OZPtJug^{g{0mgxO@j^&&OqtT$>@pfZ55`lhy~KF3ULq7az0h?D!I( zUp*2vbRrpfckDGMJNtuy223EhC6EbfT@%k02rUP|WbRTa2r8&!R#!ngO5>Xcy&!5J z5q=ak$nSxHvQ6Dc&LSbiSQyt+gR!Td?9F&5>HjUtpTDpi^xyL{g}du4Xutsgntsw@{s#;9zpMlQm6YrF&jsL8}LD8b5P|B5QMyitX^d8wgLC!YI|p1)O$K@)X3DeUk8I`@P=z5oBf#k`rXs_*n2xIfzkJUx}pYf zC4x7_5Hb77kT82Ug*IjWkP@Lw1BSMXWcU0q_J*n3OR$fX(hhuDWk=Jk8fbgS_2sY~ z!GuyS=vw@R=ljzy@c3^u?%g<~*Ivw+d=&2elI+;6;)hhICCC(U4jKc z+2Et7M>IpNPB62!J-0boo4rCFJ4V{r^Iy2U$bVuJ*kv00s* znt1fQ7-oR49OgVSVUisBl(A&vv*?~;o;!wpnGjrKfqK|n9I8OP|( zX}Bo3g>rXs#jmn5cxL*-$br(5VqP4452SSIXO)s+wB?bO|N~Y#UHxSwAF344x1SSeu`exKLfv<1I3am^-Y+I^KzCScs z<^Yh9(;YwxntT)1CaX=*$sxl!_Sqep>y(Z*@lT6t(&-Fs~>^4Q0E?p4j;a*$y{c_W1? z1!?(R(m1AWO8H3joqR{9vPZQG;+QiKDSi;kwj+`HqUMT8dL$8Nx8>`}2Hjw?Q_GJbbV{ zlbka=KQ+%{?o=1h7jM)ku&!<~s8cYkX-lH=!qul~hq-lFhke@^Joz~gKf+{)M0NQH z=16R^HD2nP8>OUtDZ>>!S)a*qeAX$r*EcyQKb@9nSXHdfF4f61#63JBp-tfXMMVM) zc3b3eNw*Mmzf4GoyZDxI5}JKVN|XH;1CUw#txkvRkP8=C0U~~Ivcc3|Yj_G;d4o)m z@drk?eyNs0x-A9qhsqF^PVx;WdiO9TLiI>%xI6mt4XB6nsC_ljJ_m03m>L6m&E1t; z+{4HV08acZu$TN0kj;--9qSjy7twBU@zh69TK5@rrE$y_Ey&8tY#QIVh(W`jt zt0F1a;$B|w;0QD9bV}j{SvMRix;k;(UADZ; zhN(qMY#6HS%4-^)s?C3K0sM z^}YdAb`$L=JKURI&|Q8zly;p#V>>{F^UHEW@bc5q$?h+*%*%=0q4l}L4r_!x)_z1? zbax4BO@(fVPly4a=9N)UxCnRw#qgL1G#7;ABpRS%OTrDmh_+?yT-Igm%LJR1Kp(wh z*L+&HhDg9e&Z%OeW5r4)PrAi|VtitlbVY#+Fv#ckYY#b==qB=$Fp{8H<(X^uIhO8J z9{FLJE!`TPa#>e)%x|U&uI_xlyAF0m@@g~k57E-V5^}f$D^NpbNjugh#}NyGPYH6k zm^4Vd?&3dCum(fG;Ck!4dE=XZ4iJteE7_}t(-%!9>EpxRH9KA72yb7~+LGt1G5bVg zovfuH0gu4u^vjd0@CS%Y*(i3LQs9`eu)o~YBHwTHy@ceh`@x|g?s=eg;p@D3GLdYk zg;B2Ag}HH&mFVYe4LAfZV|L{s=K&twuu`?mQxh8j>k<=xh|FRzT7P1Z+DZq;xAMen z?%0&la2If&llYYao6y1T5~Nya zaI2-!!?Fg$L}0=`W5zjS#$MaVq-8NSX3Uz(3t234$yN**o`ISimLZF8AJHnlW^ZUT z7!}88qp-je;fPWUxj;xAaT?x(#6pZ!=kYI2hr6eilV9BrYiqV!%rhEza!F(N|I2QyQ(0RUkspbB9yU2y0S*p%!5^X#SUnN8S4D|W zNJzTUz>Q(vg)Cxy)5Nu6CnHSu3quMCK|GQt?WG{n)rC?|QXzJL$IA37^T#nIjgyhr z*ZUPh4+^#~RF5f;B$6Brwm(K57*YSXy`T$8e`=rfssyc=KI1TV{yiTeFu8VN>i>1#X{@Ri8x=G zgfd-lkWA*N4(Vk=n)KItnuSOes?&UlAZY>(Hy&TQp&Od3s^F<8f76?lD+E&I#a0Uq z8s`2o3}&d_jseCxhF*Ja3P`khcz98AH>7sXih$V-4eCaIKcF~Wkp`SR-p)#acn51mzjK7 zCAhL!))2WHzDXMIrE{^JfQv1PAT;3z`w=do2`cil$-ZWcWi8;yVmVO0g7?q(hGq(m z%u3qo|K?#Ll-Q+smBZf{jw9!^J8tc4d37~0I zM|03JQvh7zlzkJAKpgr00eE#OyV9B|zTP^p3%}#=Xr+Z$e5`oHXG}TiLE)k-JZ=qN zRS-&*UaGLZ$RO}YWg*b)CB5SK&GujMvgl(MKrBQ6fC3%>0JeW~a!UUPc=pc&(xfK% zkI_-wR|T^|j0m-QJoPF=h_RKGJCS=2%gPH}GBIwwmHh~s5sW(%hNPh+qk+jmz`GQf zC>{~uL=pg?Baz;(WO$fBt59(8Q4%XX_4;=GhSB&Qoz+dNdUb!r$2R7(G;{j&I9EjP z99>t{?&`M+9pz4s>!|Mc+X&iUYC^Q0Gm=R`WO-$CQVGQp>8Ep8q?5OEnRt_7a}%+} z8tG{`zfXv=Oir2B1H_e1ixUnxM0KVf^)MGl_PNYEaG2z)I!f>5xF=IMbC^opTG^G& zAP;QvWFojy`Abfn+CUl2>vlBviWv_M74noM8YZO258L{rp=~(kr71TT$hMUw8pfoh zZ7i0|n?NB08~-e|npb5koi6P48sJkGKXNpA)GF!O&X^Z~QkF_*PgCSKoMsYmq^uRK z7S6ldtX&k}JGb=&FyGx`oY~Ezuxgji3*$6GlqJ#75TI%kNS82a7TrqD6HD`@+nDX-}k8G6EB<~ll^(e@1@C6f?bgE+Mw4(tU^OT5(mpc0gBfYNm6p ztL6xnZq{yg&tGFkhP-+CiLue4MS=9&=kVg3!UB6moy{RcgL?YU8V7z%)pqlWk+F84 z-G_L3UEZ3JZS>P_W^qa*1+HQO#rbTr_)_6SUR_<^|5(kt3=rri!$H4MRelJYo7V6) zdpz^$lEH!al-20I!Sk8iNyO zZT1qGjMp11S$(IjN}p}OZ_L{qtCA!h8KFa~kD5up>f}AS4(`eO;&qu%^To1PkA)i+ zT<$vt)QN4&FuNsix`s10rbff>;iJ@2HW+lWNBv@~7Gt;@5_2`vBts+4Obcszn`ogp zfo0{SlZ(xIF~RDGufCMwdYt;2xspp&&at}xbpBGi7WoF~rnQ274E((9CG*@5f4~{H zuHIfaju}k$#7t(N#Ryb2wW_7GiPlewS`LAg}r(fo{{cIW9nNW zF3Ss%mX>+66iNC%0_s7apS9cL(4n<-_)=v(F?b)SY%kHAo;VjGmu6*zV>>>BJ*u6x z$<&Wmc}(g_6y188H7wL`2qtc|$Y3vrDNxtCr<`c?IJZC(c!Z=d)QYrmX&&5hx1u*C z-ge^NTW7!Mgm~r@B%^xfguHvn%WBH5GDLX+UQXUrltEWyk`2A1uDu=rXrBlq^bVE>PpOO!;>6gmhQNp z*(KEp(!`jC!rgO2hv zVBnY*R_Ce3V!F7Vach1f^gNk=;m@#i*=UB{exF(hq%hXg^Nhk@BSjxKhG*J2Ke^9Q zbR#BQjH=5?zUwr9MLb8W}ZJq*05Xq@Z% z$Z?iJ;O-)rP7Ko&N2pi7>fyi>)pQ~b!wN%r+VxzN&NKfm&<2ynlI-2&q7sp0!-}M! zi!VVjtxS?uX}Hu{fS}_=ixzdKPUv3iP$9b3nouzkkMV<_MIVS3$+JZ5J$ zT;)0>DsE+*!GyXnix^l3d4F5Lu~^RkcyFOg!9yJvRgNA>;xYdvU0;vdx?gZu3jx!rCGw!|%nlV>%)!K1GCVtwM@rEgTHxA9% za)yY4`G&(gnNIL1^UST#qtL7r=Tfzk8X?K11<|C)c^!TuVJ=B7UW#Z!>V2YX+1kfw zMI2=Rh`T|3~nk(owl#5!3UW^J(8ii3EG@gg!t83V3TAOnmwb=fv7tm28Yv~~6waJ5z zs*QQV+|{y)SH-*D>b3X>?xSHnq4UC~o&5%wZX>*vy> zke-aIG&nL3Vl<1dV*#~4iqJ|IhCXAN%GB-%0tTVywb+MB`+*QxqKX6 zQ_8Kqw}~roc(fbOv3Nar;f(L_<5%bLb~t4>fF0g%DU|k+0froQzKHWUQ%SE+;HX~o zH&1zBtf^nf(ioLH)%20l=8!>;7PVAVd}E1XG__vpAis7S z*Y&F?D&a9R`GqFifz^;iVg^zGtSB}5a;5j#8-VHIo{@Iu#V5RScp)jp;B2gdzN^j1 zudKRbNNIVz%2da^oRXGhF=;vDY)n$d`B1r}?XEB3aI^5hJ2=N3I^C@+DaW0C?3pob z=v>`~7c>^s-3#>M4hP8n6pzXLuFzgQfmYg&sg23T9HQt}Opz#R_Yo$qwc~(3(+w?w z117Jr!wT$h+TaeZ7%I;IEa|fwei~8k8NDTDkp=AME>VEFPeb^sw2Zb09 zd(sUmQ6lAZY-(`_S6Wy)a+hcI3l;SXuB|ovOu6%(Yn`tv9!y?Y{~XZghJw@&oZ1)f zjQ4}vCTD_v70Lj4Qo-H&;J)9D;hm^%RO5LoAxUmn6}LpsJ`&^#)&f#wa~9|#S3<j~yU@x{?m*qq&@JN1l=|d8!37^lp%!hU;y1XeLi| zb#&VbQ`MoU`8L+Ujp{welg00|96?W^3_>*@De0hh!>+gM{G(5*^IFyck(Oc#r9*qC zMA8AXe=gGjq2QjxP*YFu);TbrcjJM+ZMRoca+f~VQT+2F@#;kBG|e%IK5 z-CMmB--r5hpl_=T9g6}x=cTvN$M`pgm9hBMq3{mGAT?_QsWcelyFZ)kZR*lb_Gw%1 ze$jV(jl;Jr4`^HNxe)KVfDfX(^6tYhUV-i7=xxXkVZV3xezJV60lH>|wQmh%neJux zwjPgH4j}bjO7?p*?so;*Z;!Rw8g8^OUU4$)`GEQ+1ix<%wC5D=e`)%>y1sZqKI=fb zV(;?|4tSS`ac&QE{;{V`WKSgb_ndt-@443B@kD>=g!fazTT4V@MPRv_#RNd_5PUa`|=L%>8nf5 zLrybGVOTTP@?Ws2^!$r|?W7uX9vJdtY`CjY%e1YTq}#QzP<2A5;-qwlE6@)&#q|w> zddc|~EnR}h&giG3pVbxS@P=|UQ;{mWJ(T9vovtH!!W=^Sty>4fz+WS6){26=BS_gB zs$){~T&aV*lT$@c&ad-2JmdTUIeXn2&ZzvMTC~@#UiK)SOh8dRk-InHgj{il*!H== zsUefv_8IEznc)0RfBuAW{=|}erw)OI^wv_gf!& z64Oe&Ok$aR2WLp4Z>UY52|;vRt4m#&Yn!>r{XAi)WD6tPTXb6nGb4xbOPB8JSzfez zK;R8I{p43=9xUR^Ih}G;l-qXO?=R=bZ(eId!zYjFvq!)b!D1Vb^Cx%+r;nrOjbW^` z?<3dl!D}k$>lR>{26VOx>6^B)Ym6n=Dy0#D_#Smq*fPI+P?ZBin9PFG9k9|RrUgrP z!{1ZiL_o*ST9&JV+FR^_Z=zCff&>e=b;iXgh_@byb;Cj%KbWc*{4^3^2R${TdC^Q0 zL!#Lslq*Aj)gRRgEJ8-_%n>P3#XYU9&J?$29gWO{k7r4ONeG}E3iw=wqsG~@e7?{% zDNX!LTXE8{edor%IX5Kt#WE_2qkh;OOulzb*<5iC@2r5v! zAF6h}bR0^m{clTXLny*GSo{H6!FIcJH1)s=lVW(<8!DQ-k&;SMx6&nT=tE0f7o2ZP zClr>LCB$a;?tI>4^D=`>)_^i|DEiqh7$_DIbxNB4Cf4K{O~z23z%+9hwbGhlK2`AT zjU-w{%=;wP&`%bYx0y@+s7;S<%Iklw%`tEDmPFjw)Rl6x66~U3>7zC*JVja9saWx| z!bfVA4NYncu83*m0ShV@KJJr!0!Jxu&i}4|D(&rH%`0XZCImRP9-wW%u?>t0ZMb+` zTBf?7eMR5VEK7np9V|9=|G5$b^D%T<)h6I(=GD?bEobuFWZ~X@m@kVQOKLpjdKD4H zZilc*=c*qLT0LU~aY0+>aC=?9$0CWq!w8Bd#sX1PqEm{U066seaV$GTMcOksE9mp@ z;|2Ox#0?fOkpBV#0N|Aj0D$}7MBM(9x&4253F@9sNQcPZ-lJDC_2@eI;8eoeeA4yq ztnuxbr93(}q8%i_|)J=j&`SK6J2u#vk#2WAD45632M70FtECVe?K|N6F+?6o%TzHB(Gua#G# zL1;~FJs{ULC1y9|L0ulxL#?}9lO~C9>Id&F;#J3&yC{aHlEG&$eQ5!x>&YN;p~w*x zxRr%-vZz?mxWz_%m^DiFI>(mrTs>p@h{@DNhdbkEM1{Sa;SuTA+sfnLL$r3vjLzhY zQM_o-ujgUrX7QBDw`hiSFg{q%Cdo>>{C8C|J<3$T#Rw{)QH?6$@|8JAy*>&l!@)w) zkCB}ggVc9EQ*BQpf4Yn!dV-b<$1mJUFxpKaW^lEVffE!02brz2hpY%6-OO_mtr9VJ zoD?;-Cz9UoT&1dhzCD-E>8erfy!;3%gVKZbM82ZP8p>pOS}0TOB|$VPvP_TG_?(@v zAsXhu_$9R2q^_l|po;bFPS60)f%#BbtI#rRunk=rJz&mD(z>_lG@@8Bk`S&bE{c%! z?;iZf^^2Go5OF7sg`Xk>bZmrqL6>rFUG352WOznOPs6ZNTc$IQ_R`MZvczWQ0yyDK z`LGF-*(c__m%CHjovcd%jcKxRfeh(h<(!rfQ(zjovf)QSZv7|`3cDpC!-K2S^hR7; z2J2>2H5B%A{Rp@So>t_zgg9{O<}`=8CenTTH9CfnAhyGkTh6^3ZmGN9$=X|!#HtSh zRG)tsKd+MRFJ=!n%&jJ@xD0x~{mo7vxTT(ck8xb%+{i$I*?)bb`=X9}rc>E|0gY9j zMnvQE-?c2w<}z3GY&AG<%fU&01dWM4Pb^sRE-5B7IK(swE1uG%Urg@I6{KesEG0xI z4LVx%N`c#dzT*>L#|SsbRHsK*y0!xa1a-4xeirB72;5;J`1ue2W{L6!MH!vG^abw8 zGrVi7e6GMo6o`MfHmW5}lM#Nrhk7;nYcb(@E^;b1h|Z=cj3^^-pUy?qb4uZ1*Bm}f zPejMec?;wyDunH&a5lepT>Lh72l^UMEx%c9<%dov!L1Tbu9L{JM~}W6Ijh${`lv5% zq&CRImA5AjMee3FsJKE~%Zep=X2KTN*hilgR1m^yuR^s^Lu_ErO=8(r%(5{9ha;Au zqQ+Y3gCTY59c)C=k@ma`xOpZ!)Th#I5=3oHShc#vgzCVSDHQ}t2Ae?``#_zX9U4?I z>QV4xs6Xzp55I)TUNGBe5XG$`0#Tvth51fgwJmSY+=h%LcgvJ5U#mLUz*f4~?iL*b z0Bo!z%!xwzk{zy}miQ(Bp(x<4Gx%I|j=K{Zj=P5kX-mX=7Z4tfD_(?aC^k53Ula~m zr!gpdqsW69{R&XHXZrHDCk^pKCw~XnZ~jh-q(vItQAVpU?M^YuQGpWyoZA?*Gy@2k zMSzffZs5|ET(KS{p6^wR4BM$vU3|&#m6*MYHqlrq^`k>ELy)v*Ymh;ohH<%4@shg9 zQ0NLM_S*j4XHzqv2PO-2$$*Fpk!||`WH&N173CLf=CZ<@B03F6bF8Inx}YAMcfgcic^9~Fy?%^Qj#7w53n3A#?~KLBjPI|u1?(T)Z` z6jV~a;Vj;w42LJ8wG(mJv$E13A&MuB6<*WdIW4Z#qk{&ARvgmQp}sLRN4Y2ru!X)5 z_0Zht*M>c#!Am86CK(7Na>8>2Djx&`d&w2BU~XNu4n>xvS=h; zm~FzRi6AZ&ejgAWF-+3DL?6=mGp8+9#d41OS$~!6qRR$$$u$;tnmzW!ewRWUFrU-h z6&E^4K%Dh@EH5-h`{>KUG5Q0JI8|#bWGrqVK8dNvKJ5X@CoWX5&so?Ri4wo+H~qw= z6iV1U7hZ{_E78+6Z?NPPX#T^SLVT$sgbIL;tWyU3~}=&>^tM@acHw#?=JS; zbv6@HX=aqai70-%V0Zr$YbI#EPqPN3#a|o#X;zIZ06jmArnt5ZyZl1+*{6C#t`p(#RapK4_1;W_XQG`zIw49GqVC%r#BD>I_& z^8qI_QiXBHOo?xd78lD~*wKIz(l}EidE$F z!b}myjq|=-X9ysUGKg2a>rkx#*$_t(lOeWhQoTsM&>pYl>yO+VHQE*aU@Z#8Sqr~x zKuK-Y|JVw`x(BimnAM8@yobW|N3$-YUepdVyXTTEl=Fs5au@EZ53&`ryPw-FDBZWm z`-Kswk+Ca&v^9Ct0(x97&it0)3xvjC7vkLlc)Vq#tL=9RgCAgr4J{V#ZFgkMo?&G$ z#9E3oVy&f+O1z;f`z6QQc-gg?vm8OiAzNZsRFIYm#1eU{mCFG&(!I@823c0wgv+@o zVW{T#7{$$nt&-DfELj?RkNiHLwKP7 z?JEMB5bq;_MFnDvnHqSjzsdE?36| zN4B<~)&J^byst~Z5)y9bKN^CZ{5`QZElL7gcy`Eg(8c20pbS0xenz4X(=&-)rE399#3>0Xa9A~n%>^(0;LO%AXj74 z+tY*4W}68}`uQ)C1rfnej>jQI@1MmNcgeQ8v7NwVneCgD zXsU)-AZ#G!&xm!Ih}Zw7%UmpGoi*PbLV2{f${ki#aPcjl>&)Co?GUM3FZr5{Fe{t@ z>n4U8Rjn$$lpe;0fH`&Q!^K=o zK(vi*M_8FkhFP;x`-}Ungu9GVpTI_ZL*3ypyB0#>P0{a@iVHGe*+{)ick z#DO@NpaGXR5Y1eLqL?d^2LtA)_Y=*{AZ9wHtXZ$D>>5%3A*J{SEWGi+>|frm?zJDB zPMfKsd(4q37@c9+oq+(&aXI{VoPm=}4f)(F{#6eqjT~ZThcz;6LD$pW{Hj~|c>q>Yk~+W;%V2fhcPc!DQcko=2l)j>|d=8c%EE(|f` zZt+`bxV_{z5aHh-+_e=BOGy|}{;J_6@WZ%ca|Cds&7MH* zGB*1Dic|Ovy;cF{;yoA({?7CX)*`F85u?Zfkpv~PL*&u*>tCmD2iB$fKeT5tKmC8s zJNdsU&)T8;`2L}&;|v2sX#0}{#~h0w*ZXE;o%I*CemZmwjO8}c;^FqT>?RpY_y?^pj?+vJ5$?Z*%XM7T9X4JOgsjUa@Cr_f2!%Y zoK#|XPC!!if^h?ZMRI%r{QaZ0(fEqL{#-;P@_apQYL#7zk8c07R#HO zo0=EfXq$?hg)8_ADOOZ8HLKRjo0gg~Hm#egiYT~`yEtvPCOrE)pl-aseY+iwyAHD* zeU7s|udcV=_vUeV@6Z4yc1=BZxKLEob3oZRSz$Y<1e(lfBHYz@*URefxvWsvFMCOk zD=rWphDc8dE`qe4$Z6aEXp0RBQ>^d%>0it{y&HJ!B2e%M?$Ii*8avsuYkMURX!ED! zD6S?s-MYg@8tdkA>K5)%w0$5fRu}J$D|rQNy;Ce!-}aEXP$TOWjGuE|c(@4Cw96Z_ zy01)LptQMDBDcufbE@Aza=C!Mi{QMItV^aW%imJNzO%G5rfdq^Zb}Dl@9RI;zn3=0 zSUh{K{JP*&;u3qhC|DDGaQYMesl+8U2uOj0PY$a5q@Bcl=4X7dq4k9J$s;qEr{$9B zlXKIf@Wid~67z=;u&FKt9WZk;UgICBRP0o`og{G z84}JbcPmQqB{Y~*_5z9QTeN3O;i+ouYbpo#C<@fIqv1=00T!~<$V9I%QvcM{!~wyQcT(2 zUjAQ{y<>1LQJ5_p+qP}nwr$&XPHOZ@xckiy+ zUHx>gwVt)G{tP2zXs0PBlRK#eF6>_+66XnPW8a%b6XP@cm9MT-`hX^PO??G1`xy|m z#R{ut{y8aNTv1&{js_Fq&%`I5(d~5a?q{W7Kl$){7T1v2A_WKph8EQ<&}f+7GT*Vi ze~^4B7|!gE7I>)#Qem7w*Tai}TIu*xp~bzMWat;6$w320a-?ugI00}WVzqT0J?cDJ zBUkP#uKk}jrgFa~yc30H_Gy-a*HB>INn?c#*)AoQ37mIs$KUfx70b!6+l)jp_)q>I zyoN8lwuU%Xg^>p3dBFH7S_XoJ`^o9SK~wr(tp7Ox%@i0W3UT*XIR1 zHT5-?j7VE$4)5I+fqLEpM32^YpU9f$cdMf5*thu`L@}$a$-ykfhymOwxjUTUUVj1n z&c}jcH1q;LD>e>`I<>+#3#<@UyzSHRbUooqK7t(SQ98F)`{Kb4oOA~`pBrR&iMfJ- zGi=b%!L%4@lS;v3&r{>>`v}mSXQm3LI&j}!MUL^d+zmxp5BI+xV8cqAg4l4ZGlt>R zQiO$uyq!!e?3;0#%xooLHPS7ZcdHozi0M3=QG*P{+w}VKUw@v+goMy%*8ysnmXGxM zSZ3cS#k4D}8j4LaQZw%aM;a+EIqpw7X$WiRg_2CkaZb&Mzy^uhV+CuV)MO);cn6}EFVD#U7@L35^Q;(8f_g@Ru%sneQe zbY#z-O-x!Bu#Sk7_5P)Fsk@;^D66#(xs5|*HD?uIpSyR5KNldJpQ#5_0&9I){m-)MiV{msfLp!xi;<#HTrlpfz%mv65ywE*3 ziYC3#p)ys?k*rhj@^6bpcQs2@P9o?1fR-4TuAh<1Bs3pVQV{9SlR!Qk(QH|GbDL+2 z+~)L~$Fk^{em)Y#S$T6kTC!w?B)o0iz|E=7X5FD46IK}5*HN&g#}1F;?H6a2Qx=VH zY8=t(MP1x|4qT(ex{h$+CVfH^goz6@tnI9|^3zN6&?X_K?jyJ9^>c(HVWu|QkC2Gu zM=zpLx|q}QAwnA)Dn;_xS%W-7{}L4fU4PAKKgMFPp1Z>fz+)b{V`WX5jiP*_) zG#X#UBksE%2*x2HvheEA^X&go(-nuYG)(Ur$l0nQL!rdnZarr>kseKIg-3gu` zCs#=WUF`fxxe9aqU;<5y>jQIc+ClPrPu$o9h#Rb7MWaJnap7RJT3?0;JfqKs zQY`viC5|BcIGSMYx@}Jor%g{J<6vpkSoXV0msZ(51|E)(Q0geD%p zSW6DJGV{{P_2rmnH{UI+@etx;xUjMXGrbF)30po^oD`PIOd=m?Q{{3)=hw2I=&MCSv^e6G|;#-K2A9~ng;lq}OHHQ75hE>|Azh6eL%k!hpt?(_O{mzyN$Hb- zt4$8|Hs#B2=}$PS4OyrUZ-+md7=qtJ#Okk$ok?AC@C|pZ+Kr7_%kUPl9$z8hcAl#> zR_n)~g*f&ZCAP@S66eArG}A*5ElFIP zc`+>#P?MVh9^E^)6|8ZYzpoXNkEAY|_z!Op4$PcS?g{(LS3UJ0Jf1vZL0zq_OC;rL zhq0`a=|_w$4D<8*`m5V=hnJ8v?6^3%=Tr&L#)h0>68KVO7OA7ZIz(a$E?#(ZIYg_t zb^+&MT%yw6!I8zN)KZ~+!%&WhR|?Z#74mnC7n1ZO?->kF$9QF#=sqHc%})Bec;)3L z_8kUsU_3`GMI)Hxv0@r)#4lb=i7B{HqbD=YKBp;k#EcQmGD9gRWD@`c3z!NAlV)h? zS+Yq$fLRlnW4h5Gw6grTFP-V1fg@fYX4$D&V)IqdLgFjL1Wj4&P~Ymgm7~TJr|CxG z#VCkSG?L!4!B@Y;UFSrFS7h864OlSNM(iqEV-ha_pHTxWS4_~ZlfarF@Gs5$P?0Uw zp{wYTXMzZmf6GqHY3T>K8cqQHU&iREA3^GPV0{6C9RwgJ0r!6`8)n8efyP2`DTIJi zhDyEIRUE<62Tu;`Wy1z70WfINMS_&#`QTAj+8Idv9)cbAW{RSl%gPd&3Hnv-EM}N8 zKOhK-0HU7NJIGg38vYwcub|$#ih9N)Q$;wDW|ed1%8U>@JC#|P^sJNU|2^JFd}4;x zwbo;JeedFaAY$T%YQQwgDM^p$+(dN+-mf0uyKB~klZdhM48AnWis_L00nOjzbwReJ z6<3R7;DML~V7GsxAceOPMKuoUU4S02TQu;06~fhp+-p%AIYEWBsvizt0#oq;4RhCQ z`#!}^`9qwG5ZfY)aKTRj+$usKK)txTj%}%;^cs}5N`&ckoVd4KLY%O_p(LuDieWhM zgC@OREjqyWDS79`=~kLDh~lkkeNYB9;e{3jew38qMru{aw2SCB2SKdNzj);K7&&&7 z;o67nE65=I<>LTD5qd_1B0(_i!|S8Eo>JujAzuZN9BL&;OIU0=SZaPyJ(UplLd>{} z1@cx4+}hYB3lv3a-@1OXqx&Znt~2fj79Uc+(z)Fm|HxJ_x)Fyrt_o^4{GrA)4nv$* z#ixK`>Zhsayipp2Xshou8hwE%)YKN6mqL4&nN)zfl)pG?>?M6em=JuJ6NZ@}{~oB} zExkXyh1t9ggMvJ}ydfA76<+grK@|_tHz0s( z?nx@u4*i1ph%abH+oF;O?HqzWjvW8RM~(gfPW3HPb0gf$ATg0n)FO-gU=H;T6Z-j% zHj$ohG{Je9Ko}IlW0n>Te^GzIvB+h}_ebK=vL;SfnOcvj#{`ICof`cp3VAlg#GH`F z2t**u2R~*^a#=2(W?Ticyho9|Q?x5_}&ACcem(>WdTGVGAr?n$sSI0Z`$L z&lmT{y^zjE*#3FL(;vz}g9W%AanSh8AoFyGHu<_oCG9fRSLvwtJoRIN_O)1(K&+lG zRH_mDTCyHbtlkgvULeZA8?M&{DiKejo-gq*by~4OGw;{!B)}OfB$13Goha{N+epCt z5x7E2kL3>nmaekaMF3jWTDJ^A*k#=F6xUzuU)Wd2+XkPNgLYpA;?QxqTkesOH6S+- zZ^SnLkPicJq7KHnXurX3zp={OEsYsI(fpr4=zj9aYtTtXEC*hHpIF5QHE0(Y7rlVu z0r><>gMJau7)c_Lgir#gp)Hxemfr5qlNaT}DjB_#d}rAvz2V3S*q$X#l6-OCSIlRT z)`6x#nP}as{3N9o&-BD)jG=C^H``>|PGqXS`ZIJ~icgx)5u(>ND|Pl;SO4PiF>cQ# z+LQm~)_A(jCi8-WR>birmuk4*hipSJ7;rfDKuJI-DSBIw7!p6s%|GhJ1dvS=Nan2Y(Q`J;t>+&gzDaRF~ET!Qw8D zCwnS)U8hZ=PRR}e`sg1L_PC-ZE=p%+pvT`MvTALw=g}q`G(&$onZVQ)!BXXe`8dEy zeQ3~{t(hX_!>McVXtcmrnq(?W)f@8Ehb3x0v}%RgVP?{n4{So$5969Z zxeaCiP)x%(UaKwVee%aVCG`V&B@m!LPZ1ZLV_@O}^1jE$nZZ_OwFo zlYGZQa3+N^PatiKC)5w!-hJEsMfOu9bm$*%yB#1r9`J`WPl}D6aJFAvDojNm@xIh^ z-4%CmA$lP7+%XqRieRPh7>O0|#igA7{fg^=x)VV^qV0hUXB=$|#tT2zyj+;HI!sqH zZyJjQCO;;o8Tn1sdv<`vt;`ieaU~u$j4?3W=a~|zuWJ=^Njokw-bBIuBNS~WqL;#C<4~fE64JV zp(@tfh$+qLYa*tU`s1~=SL~>vi9*P=%Z92@lwdy1954rj_=R9j%VeO#Y_Mg7tP3rx z)$KH75^4|)eNPMsJ;r82=+zb}-x56FUtvO%KK-~;)`)`0zp6mk&Vv4ai6gA_W*ObG08$?LRUB`*Xu*ms0hTr zIi$FPjE&EamJ9RgMfr@Ptc-${_rm$(Qi6fH4m_=z{NSBZ#o4;fQ}j}Do$bP-!dhKl zM0C3SggP+khy&QQgN0ECREr@Y@WQ;0n@W*;jIS`Tu?I-7HS8Lk{b3FP_`9DJTi+U4`jcMk z7+GB!JUs*4+XmTT_TS*%yM~GDy;lkL%bXG_XMUX;cbAuI#HrFZ`-sTfl4al_oPEba z9=MpxB=UqJS8mwxsnEhha(Rdj0%$!w17@d4)HAW7|A?{ahBu*b84h6jm9INm zOm5LlqBo>MHm-0t#nHJ!`Bpl88{?J#YF7{e^coEgmgP;N;mR=@m8DAE%P~L=gWztd zBtXmMl{9L;hk$JGL*#fv)}A?ZY?rO@r^iZ{dG<=&gBMwwN6i#;=Sq}qSZc%H{8ZOZ zvGuPkO2>Tm$k!jyGyZXGNLe)*&NoL&t!E~%Yfo(vo5yl=4#+ZWWF*+Vh;&OoScyJZ zrSOrj!d5*EsU>6XbVxLSHcmo}{B6VB%(T!WcD9OgguiMzi0WiuP2#|uWy#k~R8c*L;_4^fMH$NSZZ{7AR}i9B^wtmaW-48pN*- z$!f|sEpiF6nYdFt1_Y>vkDufk`{@5;?TZ#;m3#&{oFpMO3m5$XiL3c#4=q)mb$VuN zdk&Nr8|nUsNTrcVP4&x_Zw!Thjv-@#_C@;dVOxIEemh+C$n6E{(<*H<62r$WIA38n zd*bkco&^Ad!opFDCF;eqJ@(4o?|n92K>W0{B{#3=RF{@TPNG#sC2kd%rFQZXJVX2B zR$|yrA_P1>^+vRUsB;~6l;5PdubT7aP=#*{uaCIf0?b<0V!<;9#EB(aL_}<^@DV*k zEGKTt{1#kY1@5u9V?4SW$?9$$GX-r=7`nkQOnm{JUW7jNr~%C=Mz*sL^x0S_3hRos zbzH=eOcVfe!r;0JvM1>_~N=D(Dc`yxE9R7+6 z?8<{#MKxT7L!%y9MQL!BRsje1FQ2~9En^|~@}Ms6!V$RES>P2K-HKI=iq%Oa&F!a4 zG+`q;rFj>m0d|zjteDK?h7OKqxcx?E~Hs%}l(Sp%Q2>TYrdVY>Y@9L18$AXwSc@?{OG+rF# zQ)J?uK16i2QS2P($^wEqUSa25aDsJy3VjL+%X6GqR2hF0#YxhXJo;1*=~D4Z8Bh)! zLWx*Nr6b{F3Djs-wo5+-=_Bq7?fE#hGk-zQtIg|}=W8kWSW5+rtIflhXDv9N3$sRo zb!M&j(OpL_3x0<2nsJb4MFbXWjhbSoe}pTV+b+$7=lKW~DZ2j9tM(nk;CN?H)9o&0BW|F|IKKDR01(k*T#z&&5b z^dW9wxiy9uSv9d+MUKA8%0Vm=e#wS-Ou5!wq@wSGwYzwps6OGVofzL4K$4E!UlHF$ zfp!svck6rNVnl&joJ1GUXbvKs$TEp^;*`-CG9%YqgpDo(#}z+twhcuL{n zm%=_roEfQQp@VScie^8I?nCzK+zdrtboxxy99rLDlncKpKt{etgm24EQJv@)U;AUO|pE)`IwLu(dRAb0rv>XQRqg z`4b@k(EmCrOC_#P%}#bD;XW@LVh%xd8ZoA1;}a98PYRwd_|}O9E`n+LK@}0Tk8Av% zB4rZhhFYB}hWh7>dd)MO#{=q-3(X-R2f$Jk=EogtlP0w_L+oC>0<0*?Ma$)0t(jx4 zEC(iwbJV3OOc&N3_nEfNG3)Hd)ONN$cOvLyf8&7(|LVm@w)D^&2H{|c;Bg(Kwd)pV zA9I|^ywu!4;2r+RZ4Fp7Xg`@xSo)z?dzT|W^dCs0iLTK5i92NB;34+IjGfLdM!)|D zr|o4#sgDB!1a$TzOZi`L+W(gU{tpLknIG5K{~&?MnExLQoSVG;BSS$7`<|VYcCyle z;di20VT1nNC5A>OR6#6X5_}|uH6>op@v_9l#nF_Tat45KhL(aNUV%I)L~7QM1%d`{ zz0Q31@H{2Fsp}8;@B=!axD=l;E&K(70gINK>ZLH~4UJjSNi~}kEDMu{&B1QFAA1uJ z-oJ8fRKb6yOgE${s)+0KA&&NzHEg=)>M!XlWd;$q&}EAJC)|OKM+~lV*FNl%f7{ic zvu{43Zp{OWW!B7P%E{k2E{q>p0KgwFVG%QMx`%+MKN%iEPD{aULt<=`UT6hgyntb^ zIj1OikjQ0YWIr&TBh&7;4NJ1Ve-+U|$OXd&PD@i&QOO0YKB`_*)e&|D7tJF6+RKnoY5G@7MXCfgjR9>#MM@?}c+H0-|+|04Wa3I6XapamE1vh6my;o_bO z1zFU)X#EC06rZ)`+ff@_&GU#+JCG-3$uS4l)sc+1TebEEXPm|-9bxr4i#}|7oS^`$ z@aXT3tOK-ucFp?=6CF-_7JTu2Mv>bv6Bf-km6AbGv_VPq{M6&ajCm-Z43~63)H(YS z8t{#x5u{-hVS*3i{*$B`%P!{xpA3^^Ms9&fMz&F&lJp%uO9^K*x7h`y&KS%)%;g4A zAS}FHqGGX}Pp8;3ec5E$d3NC~+`~Ltj>ws&D0cH?)p83+36tcDOHwikyU&!jN_X(o z>5%7tR~$45Zly`X0s+|*0ReIRFBJ#>^?CbG=MHUXKeScs@BV8C3syN16fjiUE|Y{= zU|b|cCV0;f?gaQjDOzj~%Iu)o86MssvFbG&`vG+qJz~ z{u^UN+mD~D@y%HRGt|I;>TfrAj(e})U;Focud~OQ>4bh@11=gANB&;@aM*+i$b*pP zeo*U>&LN?_EK|G_M5FUm>Q3z6;p%5pzun`}t zCEox{zzymk*ywqDyC?gXUepsQlZITU7Z7Fuua#m^e zq`<7qRas-HDLv@+gi_}i+ftj&hQE!A80^6NxRhUf>GqZdeX5!%&M-4zY%cfGfjvnr zR;1L6NMJ1TqW_h9&?55q*pr+ozB$6|zowR2dS)41CLs9Sxk3K(~kePuUwRgO^ymefoO8*qbkX(onn z4yM4C8s$KaT}=h!BQq#7!+;VCTS!Tn@2q~7u!w3hCabg*M~)hhf86tXyS2l zG@IZ=YM!%?B&|0HUDHJ89s}6YoMb_F+sTQLQw`1nk;%W&*5JRZl1{$RH3YB`{2fKB z45Gf-C{SK5+B#i?4M2g_R{sLe_@ z08z7{Hk&<1;mKyWCBuHNtx_X+tBo7Hgt|wW-?-u>LL7Bl^Cd4=u)J1`q_-DLGv8KD zF$ywxNE)o|cE-$UoXEX~r&WQreDMo?1G&0oF=cf)L^8@w$CiED^E?t^*uXJ!xcYfS zXK#Vd*&R-G7~2`**_fRh&=YB#w1fhZn#dW~h0(f*MOj@rTm;;%c9{I4l8$tWz9zLR zaN@Os*J!fklgqivz8U*~!axSl1~(jCN9)13f$57|Md>R%$bQ2Zj`Y)*z=OL7gM+7& zLkz8;hsU;%avS^5ILUdaDb*1+akckE6py%g_T*_Dv*<(u>HFZ)(O#JodQ<3r)jQwMptDm#^v}rdOYl$a zK|`n5(0-aXT!WN5Pw?-9yidw6adqD@cF`eOn6KD$^w021M4j@FICFLacs0eSW_;034Q1rIMf+lAHG1jSc(W&u6YB=IYFt?e87%V;jW8B#+)Vu z>E4;2R748MQfaw&Fi&A->cTa`ePNjAdO3#wC_RiYTyQ9{0Ayl6MJt9$0>#W6cG0>x zO627Vq}AM6B9Eu%-gQ97`SNVZRZH3uZ@}K!Q{N$G=;tjOn6HfWhd^)n;usF@;dUJ3 zj3GH$(@LW=g1-BGxL@FXSMW<1)oR#=QhJsR5k7og9E7IiFxdT1)SgaTt!NM7n7gPv zOUl*7pF}eKnYHDXJbRtltP`=1CzasoZ20Je4yZ;M=W4XClJzU1b;XP0Peyxi-#Hyf zPnUh|T;4>xqMP4%yv3)>svPY~qLPiNPft93#0gm&2{yGP>|aijM>swr8f9XvZY^0y zDRZ+~IP*05Ep&%l1w2W|>8gG_G*AsDMGmKKHgG{~H?|`e8@oNqr3yUD#1grbIRe;i zZc#+B8$K+DtF82IlHh{`O*8z;qN<*;_lSYH;50^nJ%h$sIAonAK#~0QP!deXH<=jG zBYt?mI6#fA{Lva{%8BRl+>c_eD6#p12BeP_IH)Yd=wmbm-Hi@2gt(@p_)uJk+)Urdl6BoOM&|>aP08<)=@tD9i)({e_`0MCoKBjolD>*TG&} zF~kyt?Q*Oq7tjh}3*DMyQ9JB2v@29B+>owB4sZ_$L$Eu}UvRD~?@hNzU+k=_Yg|wAbrU?uC%I;-bjEUk!}G{KLnA)yv(ym8R>N3S z2)ipHipbH4qd?C6XE#bz=`S@{YUllS4tg*QW)x`78AwZFNGFaq5F4S8I>XQ!9ZQp> z1jR8G7Izz_E|>-3U;P;jPRgl=CTmTMY?k<0aIX;Bcf8r7z?%paftfyFc=`CEzYt*A zaRokss`m12h_;jAu5BFbob5A&`cPDcPSK|o_B z?=ueK=|#PFz`?sA9KrZ}S>y!KQm<($lhu!9PVU~$81F3USMd3#z z=9zOrJ6j#^zz=EnagXVnU?klfbTGKtUr3rhorx{b~r$*A&ZBy2D zI0*jR|6NiI&={gEcePdZH@fFKy%F!Ie9@AAs}MNgt~AGUU;GksZRz)Gyj$@77Up*PG52GFj9pX&sN5&~xCr^Kfbx^kY zLFPuTI>g&>5h#1e^BWf3?q);{yy%<57-y@?!yE9Q?Ri2n_@@) z_?GzL)jTzkWBwOMNdy+Erh*h_gu5z%ML=h+GYIA&Osp=8ULc}no{MY zPejr)vCLXHwKk$^6G5RFzZ?d?#5`fSnSXH7v$V__C6#u5o^eyzW729FvQJ<(i*|ml zcazG$jS%H5b_$YdC+1kaU`~tpgAVX zOo8+br_-MZCzn9iX<;_JfuZ4KVJ#xsS{i;$H5GAf+F!Jld3xd~j>s;W%g?&y2@)e|BGA5525KB1V~rI&E~vq?kjQ)UEZUT9q#D0*IB*}ezChP=gwDGGp z?lXoJ?yhT#&TfagAGK&H1% z{{4OV`~5%Ke5*ebEf64pfGiOIfBXzuTS_~)nOmB>{C}F@T+ItjR86#Rc?=5ZBajjB zE@MOyA{#m_-RM#n3AivL=@J=TXQ?nIrkR5oFy-!zwLc#QtpWD^3*y^V<$24?0hiqW zifwMQv6HOv$Y8=bZ+Bk<`h9P^r{TUoKRyV7JODCa_8HK_@!AA3p?R*x6$?XND35Y} zG$8m8*_n1!jmANf3eCoe@Rl1+Y4B%WJ!rz9ryGYSOz`y$o7KoUahw}YLF3tj z+fS}}az-DH;MT#K(nCi#M9EG0M5sG$p|?&IgbL;qDw%pNOx#n(ralsSNT{ww+_~rJ z(bTIcQAvB#aW{e*+!!VWPf`{M^47z7Yw~mvGSWqp2HL5!0tmCrj(u~?2tmNLLYC{L z=IT=^rxfJ;lnOLt)^fJq%GjvxnYH-F1378%2;EEG_6*GAIAtY_bJUU8%!0O7Hbq2P zhb1)_C^U&(Z01(dYp$?(Ueg_k)Cd=;HC=)(25c@{H6<<)qZ&mMwp}S$MVanNLddHg z?=w9kNBlaLQ?>{qGV0|1Ldfu@Cj z1yIN0?n0`VWVAo&wo&@<>^%fHeTX4f#Z{Yucguy>BwztWh9Ta zlx5FhFXfiHC90bQ zP}^1w9{G21T&PK_QE79I=(TgOaFd?Q8hA(>&*rqrhRv*MrS3b&%w%E2T6Z&szMP_$ zM=L>1j!S9KUU**=%&;_Fe5-eaI73GiQx(A8;C0>hCSm*G#v_9HMZ|;o#VCT=iSx!Q zg8PNdgS!>z3&p_a+Hw6V`4xhN<^)9zYz+rHVHAooPTLIT7gY0$5&MBmjKC23E$iYV ztd8izWWQMl}qZkRO2-3t(V`l@ma42a+j5CV-2|q=}CmE zRdwmK@;=sfzCc#a1Rnk$#ki(+$nX~(Tr>Ybn}&y>i@tmatmjMYlt?jl#!D52?rGR4 z9@UAJ>#A}QLd7^0Gt*WLtjs{2bb0H}+bw7M%%;O*9(0*-$wII6I7{i$jC)bqm(g1G zUCg!xO-bAj3L#iokF3@PzVe4=9g?bM1aKX71dZ7cx-cLV&M-&Sv?I!|zM*4{Y^{T#p%khS!~x#99j|6 zGKaCo9~FvyfEkxAP>p6ohQa%or^LFuONKoncSDuECY-KJ#d~uWl5Iuo ztvM=hS63J1N+1kv3?mMi-?Rd(TWr-C2^k1XI4ZhEh9_Rl9w~NT!Cu*KBc77TxpdON zEGKMD=14FAL6X&$GVL|hYVKIPw7> z>OdCd^a*{+jM~H6_di@T3ZGe#0+-Wha)%Rh?7l3>Ca*55&$W;A_+F{SxK z%caJGr^<+ct1#J8%e$)$E)yRNs^6yW;y#VP7X2uJwWlZ~%(w38YGqc_+}(flGNJV? z#8G}=;<%SLi}sXc%N5-`I@6MuPra#OA>#S$yqq=5Xj>>7pfE5nYa^_MDZrC@9G5z$N;%!_3`& zlamqvjI)*X9Mak=#Nu!*JbiG5kM%?zGadL3AwRJlS5B!2Gkvs#sBK)vn3&Q^l+-v; zf=|BC(pO*^)y1BP?S{XcRig5H9P=lt;Sc4W*=3h8cHEyWg{$l$oSk3p4m>Zx+{RqB zMPXAV!7F>UR1tIUmoRlbzvaOjcTDy&TsPs!(T`O}yqM}SC+kfk>EE%i@;M$HY+X{Y z8+WOPCuJU}+YZic$IsVN46+`y@a4!R$E|ex&YSaaW7s&X=6Su3vZ$%_Tcr~zg317B zO*jfg5~Ceqd=zXsLao7N|L)}vR-z<(VHjXC)R;>LM_Qt=;l*dF8rU{6RPTjCLTaLt zATS?kFxdD;YQn_nD!oby;SFg!8ZbYSjQ_E`k+N`>F8iLnEIE|SJ4xQ=?r7E3v!>6UHkpFv@^{t| zgTwpUuOBm<@jNFjF43J8og`H|Bc#?SFPuf!^;Z@+zfRu4fX$M>_-M35q^7U(4-#{A z9c^sD-=tz#oDlMqO*b0S(R8%jB9sZ3p53T3QI4tw9C7XbS^!7q=l|>L{jF2NOz$Ww zUkW#7D-_mzHQ?6@g4>?4j{8`rJ>wRUM&+%E$5^SHbCOGV){7?wk8lLV)jCQaYg&PE z6!f6X%=)(W7F#=SiLbftMKRz>_Y5aP^N$szTICjB01*X#1zx#1xU0OA=TGh!b|iI4 z^JkINj1S?X?q8HcUTP-Wd?JH%gKvaXlz)(Tva7ujDl+S30U|_NuXuy%7adI6AyE15 zYJuUWipx9Nb(e_)+|~jo!0EG;{*NL)>6RcWJc`s25L4mEZ|OwD=(m+pRD4*LRMLlD zb$dtLh5ETZkqu2rI)Nb1)FQO~Bzz*bq_pPqaiX6W$p!z&{N;*KVk<&TkmZw{v)pU;Lh6TpoQk! z{ZLCk1!#IO5Bo#i{Lnk30i(nokOfD0!pR&e zs}o0DftL`HXL2!Lo@f4{!V|W4Bt3=ixI0d%@<7pyKTpv4I473G|A1SS^OCmbovpY# z^gKAk1AtiF+9E(R%=2}x9kTT@ifIvOl}$v>E(V8PfLi_9l7)-(x26kQlA-gLWRZo? zNo?L6)tYThrVJxoxNiKooIl8RI(A!q+GX*eMRt^4;s%7UPmAJ`oj5D?T)KrH+Jwk$Y0+L;^w zUmEH^NvO0dRa|wfvHaxgCg}|)TFk;$40~qiHfz{Dm?f9mK{OqPMU_;CBv86g{T+QI z{BPuc$CU5Ern-!|i`bHa+((2bZ+W|-8)XX+8ODs3`>&pPul)1ecejE4-_S-#+0bM^ zd0`SWk<&dLbR&%sB6x&HsLq{)!zyryC~s)_)^B{m$kR9kEG->7%&{^-ymi*P(Vfr` z9J2{{?ey!cboEARZJkjEltTq{GxQ29deiCGv)54opPkL!8ngA-r7&CF%_ac0_%e+p zefLbWX`4PEj9qkI6z+1xDj?4VH_a0)g+iw&-FTU$7a62HZ3(<9R+UNAb+6@Z=EWkB z7gnNCgw)=3&TvU5FPh7J+lhb*Gh<_o(lSE9{Ct9opj=A+|_0N69 zTh=MdBR2Hvk8zNMpR|2KH+HZF!gFtrRPn~+j0`_h(rPLrcV z%r#L68##7}bo6ck)`vF-sl)!G(|}y@U8MLKZU2BJDtYOx8?C{rd!0avM~KUyevCkh zrka`ib?*QLnwicqVP)#$}N(F5g)yBMdC%-jBqa{F7OM9}a_ z`{lmJ9mkOglB-pc>ODukDFFQ*N@nj!X$W`gDT0*q0D1LJBnItKa%f7mr@!Y?NA$vd zL4`EjA_<}{!4vm{wiBLlR!~AZw9;7nx$oF?f=wVQgABW}t127Qk(Q3paFU?GzT*XP`xi9!F{OGgNJ>Lc z{8jvb1xcy2FonQV$!l%4=6JvR4gBA~tdWB$q_rV|fDC`ARnGtAD^&C+`_laZ+BurQ}*~0*igxF}%(VFS57&dI_E@mNQWo5DZ z;KP3)6?*7sFhz&Yl;2c@^U_O8W!}W_e2DvG@^e2aao+nmu1$g8-QKW3X+wg>72%8` zNWU3>+zy!h;LD{Hl5>dP!;W>6Zl&gua!9!qU4o8DCdrd-r2~jM%bnY1z4 zr4!ntvKT6-(&9J}I^gl-tkltWkJ7N&2ANb-AHh4iWL> zE>qANd2=r@TMY^g#|&+FSHTpd2OoO=<)odMYLR#a zlEmw&ayz@)+bgjLPmr^uOAB7By2XEoNR`9^%T{EeLp(~u5aUGp!XuOw%{DO6jF<^a zkNLpKt0Z{|7RY{xxrQRFltd^Bpj;RMT>C6YV?)^!O&q9SR=dZ@Os!168#0(^0E#>6 zxRT=ba>;Ow(|SC8qJv&7Q^9r79UPq6zQmlb@>L}Vy=A_BbrYMv!QNmzx|R z5Nwxm(zRBr6}~94FxCuh8$KR`KCg|O|Hrt#2^4kRMa<1hP6#}qfQPF>wH_%&oZK4D z7)xTsc-5tbXhUP@8TlFr81~4hxq);cv~i~y@4CzON8n1v-L}c`0FWD{(sx==+7i;D zVrMRmi=uCe(Qg>XIkBS^{TmSYKpks9t6rEmKBZ-K+z5k-^B!SYypB-3Ffoqfb#n>>`LHo|ikoY& z+dXxQsodNiLw;^jcSL{j(Ws6J{`spUX1lnoHFSd^(=Z0Sj%~r<qXFO`NB!j zAFOuq!gD7f0JZ=;HWP!n8i5V`<-lx`A~;@5WU zQ0Wa)2|v#9B?n{+J&{=a3TbVK`;q{qM{3`+y_cF#Sx+zfdk7CZ95aEPKj25g6BjRqc)R_EKZ*dYu{w8 zB=Lfv$+?c}xlluwFQ1}VTgbjrfa8hOCy2~|*ojP4Fv+((hsg09lFV?@C};#aJ~**x zV*4QfGPCc9{rRdD7XPfa&JVad2WwA0-(vccc5}_ zNT>|V2kZ)O(QrsKT2wgdg4u^T7rY%fWK)-7D4| z<{iAzAmWx2GHxmmLACr_%_epRU?iXEUiqpKuWxH?c~drnczUK;)Jr3e)6CsL%FY%0 zG4lfNj?7e`{$R~LAF*v7?v0M}6BXjq-D?;=?q)&R3pJ1%Vnwo#y%T)9xcz4E@Wp75 zYAtzlE|KB{ecede8D7UP*|R4iJa7JfdK>Zfc&fj(LtWX`{A@3Bg6^B*UY`^3?ETpZ zuDu4r&7?rHvG!5&iJINx(A_O&5! zPtu`BJiwd(u5s435qB%f3WDVSaCS~nmUc^*uC#62wr$(CZQHhO+o-f{+cqmJJAd>T z=bWpr`+nc;wPLP#W5zSx22_yuDIMEsr2%Pgmfs!WXsVa)D7;N^`NGQldDq$h=)VK8 zR%iYFkAyL~iMQeEpIHkw{6BAagiVYrYz(abb~zBqMX^t#nZF^<0Gr>K$UaBH)p^>@ z&r&Fc-Fi<;;ba$M;LUixQ-9w-L}(d4xPZ>`d&|KMh8m0F#l?(yC^3|dIyEqGIFZ*` zH5jZXhbh~zm!1zwR_lzHA3D;Ce36Du+z4CJCrFNR9eSZ(BpN;ZD0bTPyn0n;OIxH3 z&1dB1AME5S36}?28ugzvND2afXEl z`B+m_(&y;x%QTpjxNC_xj>;2^HRK>U@pB9V@hMS1IA8t2A?nk`4+0S*@G!H(v9nOb z%fj3>iN1VO3O{GT`+XVAGDss(iUNzs`P8IGkC3HZZZ?}b>mw8+m4sknYSl*^4jon% zn$4=JObZ&u_CYH!@z6}V4O!UfG0m)68H&)16{O5@`DL@jWLuAc7n2w#F~!wJWb#vG zZ_SzXVC6)>G~9f5t-(rLx459uIm znM(l3V9L`aBVi|cZnZs5l*nf53(-aGvO2ral{1zn3YYZiLx_HI*o1c}0x-EX`%sxz z{3LG7ycu$&(n>22ydAKJX2JpZu1V^XwP)ULnthyZ zs(qerIs+O)UT^$;A#Y-W$nap$o$ABsQE^H3(X7X_w0QosU>)zZnB-unH{k)>tAx3* z=HRHc(?Jr5JV%5)iLnDG2rKq!%wP=5sMvbB>R_>Z5FrDK!x@{V(oX zg_A2_sVlq@J7EK(*>{aIyQ!FrS)6BiN91Xa$MO+b+a ziwt!*%@=ZE1#w!y&@oLr6ivw_zbmv*f^1{nN$EPy!V5AdqzURMa1&h>=FbM8+MI+g z26dWN>cUQs)vAlthAllAmGg7+R4!-^EeLuQJ~#FKRwL}fPw{*%``jfJx&lPG_6zkq zlZAajqlEneFCk;J*T~y3TBsT%@`q?Wr9y_4NW#U!V+_S08ir3cggG6A_te^7k@8N% z5G%ugQ;cl}j0AB)Yt~GWm>1IOJZcBDB4aq~akXGVNx6NwS__dk)loO2QL#4ljdXG+ zNycbki>v&tbHE(6G>o+XI?_zvHzLR4>~%tJIsc%+H-Z9SY6s6g!f@NpT)N)f*x%LG zdu+aMBGevFYiGP!69&p6q`1M)bEk#J27)iQ`oWm>z@B5LYV=e}l{a`UGq>w32topj zuUZmnMaptcI)p8;z*eBx*EvHqtb*|4Zs zd=64ege8d7Ju$cvd~8{q+YZ~5AH!w@D| z{A`#$wb*&J*k2^LE?PiDh*lepKvPjws!&byNS9~gqh>e>6)wfiJBb004iyx**&qG= z70lmz98jK}owNrV;cvPEj#u}f_5tQ0g75OrfQ8gaI8)SuW3`=ex(h3n6G&Xtqru8y zj3CarNe{fjZ8>obM8EHU2jEOU|7WxM*}j#B`y+qPu>X7vBy8tmXl?Q@>ZfYuw4{vg zJF~N(qhwKlzXT{!V6CNJ;NM30(nv#VO*a=6XgF@WxSedHm}pJ02htC<^J^Fbc(m@L zL{}_e9s_IyZsv{b$&EesEtfb8=6nT}b8&i{M(=2g0+AsKda*@ow{Gb4Bzcej~5m^J??u=^ZGTlVLU^>pCiLj!QHYk^r*sK zw32tpNWKAQDAL?}MZcdkfJo@rTC_6x1T?h-ofonS!z*L(!T5=Sr?b_eb2D{Kxuc&0 zCDG-eVktk@fZWIKAwS+iFnG{H9 znDwdX^`Di5_oRjBWO8v!S_7?qBK;$lZD-@LQUcqgi*<1ZVW{G&?xs9>q^*(%RXPi- zwm;;z3Oo^qj;a|4A%-@!v>Egy8SlbriBcP*#v_fr%7v!TlYdl%!Ml&Mdh<|DY{=>fSz{}#l@fd6oSLaFCP zVKq#8oSzf6W+txCI)Gi34W_O*qXWma?Tnan>gV9%Be9K#6!?3&-2kM(D!f!oETU!vddvkGH`!?h|RH0qE!=bS#VF7Ee{*w|Peh z;8fQ6!k)Y~xoV=r5AGEtAL9tZohjqahJih${eUBq-|dH4?}7Jm$?#nde7cUB=i6V9 zV}F{?enhpbE1K7(`5mj`ZSuRO-P0$xHmt_;5+5c_eo#m$q6|J@@#VVZB7VfKIhDF4gw74nymP_P4U>&`-(HPkB})YKkf%1@8z|5R0~nP)|rQPqBy12WIrGMl-+v zgLD}RL|=FHV>@X6(VKrtx)imxGjRS_xjA=2GC}{gskIqsEs@V(B2?>V20_*2uFo&A z3G8RCc#0RI*)-0w&bkTRmLU&w&v*CFLpJNXuk!78LPpPVcuHdOy_dWDw#Obl-QKnx zU~LIFH{QK`|H?h}scrN7^SMa(3-&-17$+TaFfPp_J9^HYGJ266Nff#6&Yk6sECPh_ zY5!hxkFGVnR1SENeUeuZm}#t0gBB2@DVku`Gz1)ZN`yX+kV{7&FC}b*fLSLY(j)^Y zEq~ZRL}luf9k?(emjW}i1skWO6j?Chv9`XY34j zqy@x5l~GzlPn$f_Nzrv@PMLu$VhX9h)nbf$B;f7xP`csu_2 zh7zJ;EgwBKBQg_j5qY^8j^nL}r)=EvG+FycV+>?!#(tJUNmMp0aM>jK%at9wyINHV zODa5Iv#i<Jb zZHYO8ql&9KowDVdrcN$UNoF#$RY|F;yoiqava?lC)l=28aHL47#Z3jU6(5LR7&7KL zi;id}b-dCbxJHSw3&kg+N?&CUOJ#XWAM*{1OPJSX8sv)$9TU!GMAf3U88QNCGBSDV zH7{c5<}ZvoRTUhKk*QE(4-l-hp?>%=eH>4GfwGW7-V9V}(jrPQxI>7EvneHnB^ROQ zF?x(lPL3>R;-dYvpJVN+D@~4q2Jfo}shhl^h7OqrG)_Wu3qJgO5>m0^IP{!k`MR!gU zPjMd5i@M`ZHrH%tHEoTMvev6stk~@6lvV_Z=!MVOqH!^+B#q!GV>Bf{&ws0FS>zp_ zk!E?9RZEaeN)e!%Ct z%=c1$jHuy0MRcA4V7ty07IBTu>3Q`fvFznT@d~==h&_w#y3dhaR+hfb)R<%8w9dWG zpSXNxfKhrz?2(JCV6}FsyP;k7yq$L%V2y}>)wg-wcXYnBXH^-&_AX8@o06&7)yRWC zQXvb1|8?afF~LG)7iFb?L9;M^$G$Nsc55iu;387}O`V`{N|woTexFfqs>k<9`0`tO|QU>-Q@70 zt%bW_^SBna+GX%q7{n!)gvqS8h#bj#rJ4Ps-@i}RaG+(HMt{U3;72?d{^4Zp#}xf9 z(xIl~grxG*sn{;aEY#4*OJ)@U5(Wcf0{`h#Ev5lc`Z2#ocw4NKZaPo8wpp{5;1AFf zeE@YI%=BY)2>g7YpP!$nGW*%50j5LVZR*;-Dvm0CGMvqI+Bx;fdv#jm`~Est`vqoC z69C(d7Z$FBC`)F}GstFk$Q}lFuoeJ^ls@tfj66jwFG>P{(gg8S%LR88q8k{OE@$3MC?RG$(JExd1WM6Wn%M(WLCR@M=Nj^NX?P1dARS1bL)>dcdtf*a2q z5|THPJp@?L6)VWjsj^Ztamv`l5|K%uS4StKDubb#>E66RIn2;2St_YoG9`6!-8(l9 zBUOHOWMN2*3#Fpe!a329FB=WzH`0_Ra~X4zYWE~|m@A>LY3CEO zT5Jm$>!>L-bQmf%)M#EySfwv_<|#l|&LNr>qg7qBU*2mGUur!_6gQSky4K4IZ7f7n zZVn}FhL~Mc7~ErW_XCJXn@xn3(Z$*8aKB!lMwWG3Wxl8{ak4>W5aP5K~RGM^GT}#@i!xL#?Ss z%8|(3O>E@{MwvBNHtL|Uvg0jGS=r9RvJJeb9)mI4n6vpfSasMr7#Lj*In~k)*XA$C z5pnK)W*H4vSQf5WP=(;~DywEB+PSK&Fg_Fy<*d(c>UUs*n5&DwM`0jqrTiLg=~gPX z3|oJ&dvvGTXXxTB8`jL-v>KT;wNo2uT9IU}3u#?Jz10X$2OQ3UjuKn|m*&5D>v#Q$ z=?pz@Ph|M5;IYcyg;BUCviFr1~LDyn@!H&fZm~z3g+t9G7 z94i0PWNI|v{d_&(mKM)YU;^Jo_Q-0pe_neu_v12w3S=AW{xHcSN zm~~9w%b3T_pG&RXXrSk(NQvO)U+W^x1_96@#F2#{b*UPam|n?~v&KY+ZC@LNjBS%1 zssEyQ8{4MA--Qslu>jz}jl?zwc()~Il)|u2_~bUG{^AK13uhU%VDyiBe^bN89=(0O zv%&uMXnHpMwS7|bx+tfFmh(KP5NivX2Dn!a=ZjMJUK$d5o~6fDAQzVDi(?mz@cooU z`qUx+B+!jv`q^ZcHMdxBCP2xF*0U=#igOYNZx`#yk&k~vWh)qmfHFLHxV_y8OUKw_#N>-^?a3{=D}__~?h40#=Pe#tN6 zl05X09f;ER9T0BTet}28R+_}cml{4tBKC-?Hn)mB%5cH3dW`)X%|GGp#uRn~42k<* zwF4||wxCCV*^%`Qq;PM0;uhXkPw|K)%s3U}*KnZL*Mxg8#WFXV#oZy=bj7LIj&R3( z{V1XIiv7wRLqI9wHLkYtdsXvm7rNpbT~=PHWABo96z1kC5iIF9|DV`y^b5HiQ979& zU*6D=zmLq}QF-*Pr}uiVK6r`1M{)_!ckjKi%60`VU@|W#e8!!-7gJsdrT58v1r%W4 z{H9lSh4_2LLLI^gdu&fifskgW`@R3!Qsg49U#?2gwhrmkJT z8(&cR=m>UMA|xT~O8Tz>?KB6XSOD_@=n)4bAx1>TP?Igwa9U+T+=S&x;R3Qg2!Ni)o(Gh280Thv(& zl{S6p4Bm<)N9gb<$eDZ{0VqwBW{4tufjFne(r5$_H~PvwT2YfNCHhbYj8_cYzj3Sj z=J#HjTe>Tzk5!@p$#x$(nJ2hC%I!m|7=#u&vuA{i*Fj#qt6;U0Y-d0bsM!xASBOHS zINqIN6S3zRpc0`8epo<3@P2skqT=CTg)$1@)6L?le!C~1^f?I|#$4nJV@wYS&p>Ob zaF@hb&q;O(#8pcGX9F4!(5G`kQ1d2gVpqalywX*bDnxmSZ48i7c#-adZ5yx?|H^iz>!2FO)XA);sOZEd~ z5cQ+hdWd{C&xB$gZW$uu+=F$H?;%vK-jQ5ZG{BG|wmr1-$7yk8sTkADS1;voZzP_< zJatQr@oIqqxd{LPa}fc%g@bKy8Hhsu#aH1d6#HXWqC))jOX2_j`lvbn_capzxj-h476#T9 zo+gg}3yDy(lGirF@SSO#3^=y85Eo~)ltiMhmuh6Nv4mu3ks%-<@aGR_Eht^5>$jcXcb*&HFMB9o9AR`(5={o$Y2oAw3jCFQb$AEqs`{Yv zU;-uxjb6PFA}WathZ2UW_jfbRHa> z)uh^e?7Ud9vZu9%VjGcBXEi*Qnuc#+za{I8h7#a*q74mj^Az!XT310`MrQ|VNn7+2i5Oo%^L zTIpdJkEt+eH%D_;fveNMZEJk8CXqyG{Dpy~__K&j7p5o3SKYcykeIP2K{qWm07R*d zi6_uNc)I<4Q61JE+O{+r5(3ZplPV9iQg;`&Y=`SvYW9{O4YXpfglRZDN*~d($v%tj;2mY)YwuYqm-hy?AzSTFvB8Y$rCq|eTo3Ll;8$)F49(o&b?Qq zn=MlL>nJZ#scCRaYw;HW3Vf+@HH6j zcjAdpwpzU(h@BM*9(j97F!G7=Q8L^3Vem7>qee^mEu^L-k8=kyni?O73C)g3!jmo> zcD$7f9DAu%d|+(WIN_xHLD)M5D)N0=b2s&=VJA1OAjXG`1 zk_6BCB@a@>J8s8$cmG9p!vUqP&X5OZ9{tuAD9wsHZzr&19WRZW@Z2~uzh(VfIPMUDgYHG2rT+|F|UF6jkTGkS$i8z zz{}kMFttSkWtJ|6M{1TZ#rEnn_OW%+DR$_a?3^Q`i~x_4wXPmP3Z5o#l*gO-q{ zH|#e>l0%60+xDdf{c83J1Ubh3)|<666eY50N5NhdYMlE7^!cn^gB0v3{rQcfH^qrn zoSUb|f^8v1RKG`jM!*y3xOK?^ZZ`A)yVMQDa>?)MwkM0JZGW6b#dvu^CL*l>mFblR@!GDA@sziF zf@}~=TI%G}qEzfT9rghv;amNcza=4H0*gfLkDx zCxSh4%_UR8J0WHTe3pO^(Ahm z+M^5y5Fl=9-a58qo+7`~eXg-~I1`SP`)8AlY4Mn&5>axJ?2U*@zXIuDo^R4RW$a!_ zzsktEa`wUl-5D=Gu?|62J8VS^t%NCt{9TO*8@q@e zGqllsp2oZ{m8@))h?*q|tc4r^IIOt203^#3CGT(w|u?{LP0Qf zXM+CPv+48caqIKaqx1d#8pj9V9V&#OYu(Ne7cM0&y&F;CG40vz4^LZkcA^EO4Io10U;X5C= z^T72E(l~vOS7%tXsuZKSVGMWRTBXiDwcTry+2)~Jx3<+vW+v06s@mqfJKVNM2YoUd z4g_!C2;_F(2gIOSik$on;1k-(CpN|4-Vc_^WpG8Vd4^EzL!loh_KDV(>J6d_lD97m z(N|S|hz|NS%s9!wtXuQ<<}KxZKn3(Or9Y_JLpK(yrJ9a&o!;it<#UMb;8ubOtMLB)<&`L#eHTs`RE>)OV>^xFLk;h9 zWbfr-)z82mG33;`83OzrlvQ<>s(x$CrNO}LdudP5%Ei5GH{>Pf*>*asHG2N?Y3BY4+%5J&=L35 zTv-#e9S%=|?GJb}n^iioS0mS;@E!|kmVLLR_J9VsF8_y=b<%!8O%kAUCh_Yv!7U_! zy*(WOIWXo>Q0pWKbyT}BJQt$L$w=9kc4w$7Mt%lWjp(_qjO-UrDQ^M=@ z3R2tL!9l2C2sGWu&^Sg^`Y^Y%(aS4V0bh~-34Db%6|5=Ye->#23A*0<3^Of8`inGMLys15q!T?e({fm&jHD8_?xlK-?xq2!IWnqpu)jvhrdrLh zsJ)yudrMx`Irx5p7t^UDOVforkS|Fr@FiL8aE4u}JWiv%bLmX2UDIKH-`-KCtl(+A zrf5mFv^N99Ywa*EGalYoE84ND=h0NG02_Pam++%p|cNC>_||8(fJ)N}f~} ziE0SrfchT6A@(huT}~UHmw=aq7BTNwJMcK0>Mr|@@Knk@<&mZO#2d(JsEuQ{zcULU z2r7gC=~$Q)yBLzm&j@xvB^QBA$Uq{Cn_FceLnaqB zCucbdNp@IJxN&H?H*sm!tt2+7J`6W?HGO_R&U!J~?JV}h<#izS!KzXkG1)>A_`6Lm zb&CynnRLV5o=$@qd&A=;Iv}!5zR~jz@V%8sYuzzm;Ej?QXAf9lJe9k61w8Oe@t zqZ)fdni+2e$W6XM-z48_c*~BQI;2I@?L{&62Gc#B*h1(fG{C;zo#;a7r8EG%inq&& z;`EMyeRA6M_Gj5WoM?5wv)c6zX5BuV`0jYevF)D5a3tZ0zZC@INxU%(UPNcEBoD=B z&X`ktJ*a~LT^gz{=PodX7GeoW8fwx6JjXFq-&*jn|Li`lFRpX3V_#mMakFDzUzT+R z%={G?82Q8R10wWn?`_>JgLNx^sHrI7JVWjfq>E=7&$U$1jHw3gl5Ak}-E3AUO zS~4!0GL*6Kya<7ZrBbxByeiGMkeDzfmn3peS7tT(3pyZl5DjL&BuAG?+1aXdgDVGH zVKE5u+@SnIc6gi{5+fp4#H=rUPF#OD+{^bbsI01!G!yAmt_aZFX_rMg;qgjrm1rE} zVupNDrR~s@f(vP;>XJe-DW~{GP9~?~BC>TPyh=;5 zaRrlbHkY57aRhlH#znM&NYa*$7{SV8CMGgA&7Zma&#iNC%1E7H`GuzSHJ2fyJIf}8 z?7ZJbcQ^&;tx@ELxNOd_67(#rsR|ON^aU4(Bfvu95@jd_)>)(BJDDNyMop`I2f!&K zDHJ5N7){2ROJl{DXtCxmv1ZChzolN=Po>eNAf4a?Mq`oZ{UsUFX{g6pLYd_@4Zz& z$u~9h?-4)ZKWTh?r2F^ue@F2dL}#bS82E14h*9@eF?O=`*SZVa#YOc=x*-;7^)!%; z+t;A>8hdMduf!G6N9_aIidlh(q6vsSitbI5*&yv|_okf&&P4RkKlx*Iu3@8&bep84 zL_nu3mAGtCaH$^5yfjtD3ZN5EP|0wwufjJFQ?!CCa{KIF+Zi0K3KR##Do!3PUv;}o zDT$1yYHfL@n@2SmJ(e$jCG3#W!E-VNyG$LF+C{6m;}&K1Eyy2tfFx*4Y4I_-J11$> z8#e*O-OrE2`$MW-3k8r5)(HZsj47L{&{BwTdnT?zu4|7UG9-i?VTQdbKBVMN7BA@pI59vmV@X zJi=U+&t^&C(NsYuZ1kEE5?V_3s(S(*OeJdcnZtaQIahl1gj~usk11u^?N93+-p~s& zSd7CJ$h+bTfwl0jto=b$;WJyDRzocF5`d*PoXZBJuB%fi`Qaq+POr{)CR3;{kn?NZ z&e~%$RGqA|3`b~7t#b;=-H$U$wwWN7l^xh!i=>K}4ac{N>wE<+ghIN_bBmZ~mggHb zvH0_C+ylrvXi@u{d^>c!j(I+~Z^Arl!%z9ZN$J}9=afCjeMRmh(Ie>1^NHP%8~(jH zPC^coB;aW@HBNBBQsAQuMj9?>2nDUPiQllwD{5N@hEkksfP%1tO>;E$Hh^7~_pEQW z!N}|p{&`7nIK*Nto&a9=5XYOel=6n605e=Js zy0fE4VP+~w-i}xyW=q8;F1C<#{Et{SFCS!`;nV1bQ#%`0kB1dSiR-TA}Pep$xu8ZjA~Glzln%*N%4;R-D zt4wm$XvTA9i+)3K&?L-SNVF|ppvfO1PDnyQE{Dt|(=4UQoq+@{Q8ZWP&sBH}=Kao| zTxr)Hp%wPG5e#2ObJpNoHBmnA&=KvHv)3{-1CWwd>N`!%uVjFmM%rfngq)i?XwT;` zz=QSG^f8Vqea1qqUy(7!8H`yWV@)6qf7^y42Yj3ALR-M$6R#VI0`54}*KrGv{iDhD z#Xr-Z8S|iaI2@?Y2V-sei&Ws6d!-8_7I_Rwmk@AK>b|kWkky_+&QXcNW4Jq8Ry0Z< z58;hEuv19p(Y-NCf1!ZH*a~7F#l58BShIVADn-}-f?gLU_is079f~rBC*(p)>CMI$ zR&57yJ*m9g*Ftf>W=qpu(_#D?M3|bD^$R9vy+{0$lC)RPxm1K=6q~$WpY}Mx8?F!v z6t;eqmIa6o88Gvrm8|lHxRg08*0w_Vj=_qe6+P0oXuvLIt8;w<>qE$7K@clv5Zkek z-9squK$cDOZnR|o$Oi}aFxAHgiIH9Api)oaZlm#4CkOX5)klrgNNtW#kJ{7bLjhKI z;chORPXe1WpDp|ucy)E%5OnRNzm&B-o$VBxb5U4<#dyykEedOfdVVz7$D?^C3R)g3 z+dJW~uH~-9Lht4GzrPtLr)nJTe+GZkKZC!2%CP>wy@axd{r?7M=O|gpVJg7$KtXj? zt0U~%iC76}t(xhnQ{ro0LBd3l7JoG!SgsB%+|j@2sYqKIEso5734EBrZlM@nKSmZu*(Vslh{U>C)t>NLwK$dM{LC zSoJBoz1DQ)vs`b%vx1)fPraK=E9S+j*M^W${fR- zk#j9fDHddHNR=|Bv?t?AC8a%k+Ag2D5o5(gq0_gp$))08os4NJ(wnc6Q#24!NNWI@ad4Jvu44!u!czQx5@G+eb|ccq+xFqKJ*LSz%)67 z!E_`eL!WeLikL|W9o7EU)6Kaisw7f|#WjpbjdS(}Cu7(%c{`bE$9TN_hg6qy`&>QW z0^-RU^dy?n0-%b=&wj919%KX?%f-I0Kh`e+R)!7=x*n?_ionawj}AyUBp7_9lnLM4 z=K}F+W(a6H=IK$L^wi{jc9yn(pi4qN;~jE}NVwQldybdz+@_o!G;!EGZ>$jt(tZwB zoUy*|$P>yknLiuYWXx&~afTVs}u2i|n;K z+u0s5p8foYnA~Y$Si&v80Sv>ue56 z5h=%0z_w6|4tQ)?h`*N?&=K~`3|{uz_6gbsc`n4&d9mPi?*2(J&nLVH4+DA+$0P0x zGkfl)J$u_dnhZPd?|;w=mRCdZxPLB?{SOC>@gFwi(ss6H|7xn*bXqb-{`T>bVzae? zvMJeG4xF^L$yWx60;i#Arq#+X0jE5^wC$9UNJ=!8ns;#auI$}FbM{_F>yC{qVv6Pc z0lt*v(v6!MVHy`O$@EUX=R9()Zhu|g>iGiEM|UxH+EYXk(@Lc$obzN2qfD9HQ`btm z6Meyb`S2H7e2jiJCpi2-EPh5D#@#Vkj3*9Cpre7okV2-uF_$hW0W$L^#ir&n6rsw# z7kAh_BU6+*F3HS7G^=W;%2ug#XU>g1#;WbSqck#CUxUd_#p}>PC6OJ4)Q+19HP0wI z8Yd}Qtrp}eH+LY@<&>ZlDw3rNREvhe)O8Hvv{C0Gp+&|Y4J>EH0h>)HG|T#9r+B6L zhMJX(B2;RL{*C({E^aC*{Ip}o`m^y_%+Sl2iybyqN2_;5%eqIYHJV>CKMpCSCNdbY z8V&8&8H~jD!BvX2Od9R{JJoguQ%tMM ziVfFE6a|fgm&DbxhiHv9%8Ovq$l9KH{UE?(AvQ}6>rvRyfKdxMfUAW1Q&(8n3&a)2_8?r)5|qOw0OaP#dOCxg{joz<+CkW~ zB2&twMS=3|g)-;YHb&iYo70)(+UVJ|I&E~E-`so}KRn;13uDQY(#ccw&|KpqYpc*z zEL5%`>91RY2$#_oDj_}m?v|vk!%SA#g{#wnZ+8Cq=Ww~zoMp~u?<^zF7}^VW%GU44 z8dnUN8m`on@|X&*`V#R2j1Tea!Z=w+Rb{Rk&#e~smxUYTZL)J3G+cj_m+$Z)w`Qq5 z3s2Mk@0sUP_zj6r2@>230MYnN3R>r^fkYV@Z?^7o_6Pm{c&hVc=p(E zcF2x^_xxhMq!$ z&uu+26-qOdYjtEjn)3OU_^M%lc?1&eI~^M#P081Ure-=Y82bS{Xj@{op`ypWE-XAz zu6}TmVuW$v((O}`r>+KrC#uTGQ`y%qsDFRZl!m6775z+OZlVAAF1n0`las~2mg5!` zn;-ZVvac=TTKB!C*1T#-YbybQqGoloyrv`ts8Bw!jE#apQ%7*gr0rIZz#Z7zFkb#| z{@+hQ%NU$RMTcg7$%pG`g6gOe84OJ8J+E7j+^1Vkd0sEKe!ibbedv}BPx`!}wBDFP zxKIqp_2|Qj*m3pPA_{^OvQcp)$wlsnWNEX++$}PXh`9_;np?^yHB&NDEKj2yV9?gN z1y&<-Gz6E0)K)M%0I#Fyg_TBX?1SdI46TiqjU??IO(iC5CdVBnXX};JN0F6kO`QtI z>mbXG$~~(2_rOA@#g$ctkp$V8luW{=V^ecUYA(9w)++59iBy;xACIAe8so`W(>zAP z*5#-|14oW78Cs#OG9zq?LhmvjS~Hf7x|6i3tQ~~p@@bYW!mbDNwnZv4mrSBQX#_&; zNDp~s8EJ0Szlzp6RS;I793Uz*w6Bl-Zl{s;XNQb^% z#SUBs-ei#&gcQ_u?2}cl*~`6#eY+i!39wp_k|$K>Oatstq!Vjn4Zc}egby9*u_%9X zx_A`;)I~KT0)sAjco<^oM1YvpMvES zR*>(6a@@Y8otF@K%v9<&XO<4(Q?~K4ne=TX#hd z-4tMdU4P~~ypmvP>=-Vc!Km%Ats;#0`Ok;74PrTOEHJl^T|KeJ^Xt_$b7Mm>ts~y)wY4ENb9gl)m>+6G*w|_T&wF3!C^&q-w`m;jL9Q;Bs4!ENosFNifD@VOGgXF0r>8iny#xBni5 z>sbVZY2y#$Ig{}Wvz8u->%PRF?Wn?Cz>Q(2JR4-8%-1^L$PBv{n!PG`E)aiiNT9( zo>+XaVwkOJ{e9#78~HELJkQWy!7V+so|3}t>Bt=jLka9zLO_ku@(bF@a<^hc2@5!h z-xqFLdx}WDbvPp4Smoj8uKBwlg11H^K{H8hIw!)UUqr=Ya^b;x?6qLXyKUu^^W0Uy zxcaFpc${X)k=sRd)Z>=FueBYw#;@I+d3-`{^bkDHyTVV;-y@Q2Z}k4X>bY4DOe_4v zUIByu`o;ebU!ec>`V?|;{6CbvQ;=m*l&xK98z*hswpD4{wr#7@c4nn*+qP}nsy{pW z{?WJlsc*zO5&LEDr?ciBd(APw;biAXBIxL7;PIc=|ECZAQviRc=e~5oG?M7@-c@#0 zPa(DP=vB0;h?!!QbBGF+%+6fG^n2)lL>)7?g?zntZmzGzXK9y3%u9b6m*Kkx{_=&B zZ4qMv_<%9vmrmXp-k$<^)BSaGWc3SRztL}x<>f#Z!!li>fA9c1rDuLNfhuONAgyPy zK?+mIWjWb@#1eCWUR^X7;}A2W@hV2Zss;b4{^meZ+tW(nmtsr%Ol3=`njalxpG3H@ z9Y}wmSqfUs0));VM)=O-91kte#*CWew(m+G!!C8m*W(9M8 zfR>>Zg$p|@zQq9zh0U{Wrk@piXTLorh{HHv{{Y-}ox*Tl45|h6UGp*{hB6DOweh2D zF5QQOpA5Smg&3m4hAV zdc)TaOqQ+5A*Tw;--?DdZZ}6}U^6XVvN4U~niO{~m`+IVhVyT?HPxb?-DU1kd1*25 z5U0+lmwP5VVWAn=aE5iDa~$k($@Nw*Z@m0x-1RpQ&#b{+to5t_fVrONej5<(QNu>- zKY~lSalbu`Cb@G&oDxvtY?3C1`4SFM66_%67*b!8#^)FgYKhM%_<$V)ZbP&&KYdzm zX6jR!&(=uUl507rPQeV_@-e_D4a&N$B40kLB?qCxoGJpb8#73Bf>$(YFWF|qbW}khJ4w? zbHXx0w7^&kxYVTyt;p5_12L%drCZmytQ*j|$O^1uG>0EHZn1%29$z-4daMDbXh8E} zxwo8{bZmMQ8O}h8Y#$!cM0A_AWQj30@OSIc>J7{()CAL|x-5DWcs#WiK^XOQ@u6o) z)FYkKyk_h)N3#Vj0x5Hdx3eTV)W+yZK?PHTDvkPFrSoBdg-IdG530G6k)@wMpxwFH zc!NcK_f!{a)bZ%w3Js!+R%rawCSU~=c%ayXix_xi00O-czfiQebU!-zk|=10m3%iU z9^G6fBPE{d2mt4$N_XtOkU(Q>Y%9B7T+k(*+hE8<`2M(G9`7)22s(|g=wL>gH4P)3 zchRex;HQ&!Q#)NhPh&KYPFsno41njCG$_``u4YP2tPRBslbdYB23h9779==ak{pNA zdqEje*_c^2=#GkQ%vRV)nRNU2eQIeZR2}R{a<);wr=4=tf3>m0o>EHqz_^r&9ZS`d zE;KfcaZoJfcwofaRbCF}2~R9L0@GT3ptCvafFpO|j+c!!&t)rgt}Y@rLYcK3w`8C% zIl`psoTk21OE%jsZg)0npps|d7IrpD-T4=929M#L3;Gm*!DHOl9uP9uOB;%Z7D0}l%u2MP+FeBvirZG?0s)-g^6 z`(I%_q{)a3*5%KepC|`MxJ+SZ|-3Pb6W56JVN_GWw;#D zDJfqOe({W^X(xX-8mMYB$t{BV6fdp89VZCZ_-mU*+djaZP2az|C|D;OLabJ~OAwqs zVP83Zae$p{a$R^HguNVnL2AMhWh7q#813bY^OvCQ)3J!{z&{}L*0*aSf?L82Vndh= z&2!s)UuGshY{8u=T2SJ~VSGxbP*A=gS#;4A-e595p+c^0(I8JQA*7bs)-x=y-RRm83CN*;==N=tmi#+A6jyme_xEKooU zc*sdCIxWcAkJ#RJLD%jyA71SAxnG{0zi-MBnw?fChA z0?$S@0t<`c=qQ+qHs8Cbjk>7oALC>)ToMW!57yJ(a19(B=3~M;qGDq9 zGk0C0WjID8a%kl#yB{0a*wM?pT7-8y-d+C7a?K~k|i)2 z9X8muoO1wCWNTDY1twupB>HS$sTl24RU!Gy8jLzC3FOrlUMQUcm@A~rFy0~99=0>s zi8)ql4}aTjEUMS6Ov2ZX%h``;GLmGN+IHZMaaNMnrR4&L$a$Hzj-#}mgm0NxE z3c3Jg{&c#uo|{j@+NnMIr<@pFYVm2tt*JT;PIxM;cAhV765)rutyGEwhartdUL@f0 zWr@@Enap+?1&!s|9N9twp|Mh@EQ`CLp`higIO55n3egHvShfY}2BrPr3CK1sMwQm& z{fmm?s-tSi)<1K^Em-UEh8R4KQOwS&p(f_s#w!euWFvp>K}Af*46EnE*r)Su3ogx^ z7q|f>;tc+At;CukgCTR3{!j)MJc1qKkn;$o%R#uAkf(icpij?m!QGPfxG}7tU@1re zQ5dS>$DHS9hu%=(iRQl!&tbs~9hbrzf=$i)Ir-&t4?$Mp9YnZ#l8m2757;n?-(gso zv_%@^;!FI2=gMn{U%}wsC%O9b$+00X2;-l*gm#cL7BK(LERQl$46w)(?4qH4XE1pQ z=Wi?O-h@AQ!B!70Ah7)5_X!@mEMD9|D~w@r}ql0-Ioq;-BJ3Dwh0 z>#f_`6~g4WG(+q);dI?^MCG99xcZNoNhkg(g^aM-SHOSYc)a-KT?#*HLFh*<{BL6> z{!85dm!RJeL-d_qO;G?n=B1THA^(kS1X7UH4LV;mNLZyLq?>0;Krg}u0cky!Y#jQT z^bNC4Xex-2uIlXwgq5qblg-KbgaaoMG>QY5hR znbKsGZZfgP005bBWg9KNi22<|wUQBy<&dcG*?zU!2NzK0+`Yvh1`RxiQw5gr&`b=l zOfGm#sWjBcK2E80?7O$t4I4MFwP0o>U4c5Zt$nPQl8P^>p_*+Y41ypeO+1T#mOLZ# z-*nIfhx`l1_;nro$fM@{yixve&cDEr-Y<4>fhiepSU0jkejl?SQE$Z>%rp3XhTgZZvfCH87> zTEK5~N^K^4OnmItKsi`%5UP_X@#vEYlQx57%36Wxs}y6_S{?DeVj*-TZE09;Q6TKv zI#Px$-8UW1=VeTb4S{q6)AeA^HTh{awZkebo#>+MzRkK>rE5>Byp|*;`GCScR{5bB zEDB`&L~vkqGBVKN4H$9##_UX#)@9T75$ye?mrAC9SQh@=Rm;40aqnc;BRUu54TOs{ zSXI!R;++ore{vVntKXU8s4e9xXYyhAR!btXW&K)3LN^w+u%Ht$p?-vmrLxW#e-FVI ziV6nD{>}{|2W)T^xCzeA2@ z;GQE%d^5zE}%{M8_b*qR;X9kJ9G?vy3X`uMvDVxUN&T!eUz(zIsKB)P`vF- ziu*SoGqgdeflHbkj-LFm_igHHxhTQiv4Cwe?4gym6`DjRXWYgi^Gk|AafBn%-|N5& z=iET894tHJE*{?rVn#MEi5EL(lW4`!#r!F=e_|`tBq<+U2zmdKs}3gVD;ZK6oIiBD zicVD{ixeL(>#nFD>G1PvYI>j!S~&`r zGZEc@k$cMEx4~P)mbgL=yNXTjZ_%F6ww#&ai>}-K4BbZGeaer)_Z0x+nem~v#@c`e# zUW?sPcCN<4d$UH??9~TS|0G~LDFojcf||TliOhlPJeMm3Gt}q{Vqq)TYDMpoMi_`G z1fd1s3ghaf#-Iej$gQ&kBG&B04^%)`i#lLP*SFyfO}vI)`Y5s0P`I;3;(1HMcUSFl zLw8r~dI4vLMC`BC%`YC+?KK!BriQ_UL?{5o15PoTXjc|!>@=CN+k1i3++e4&mT^~V zt4RdnC_7EOdp4UX`aXvs&@7Gq#kb^4cP5OR)f8xl?m7 zw5Tqg(ACAq3J+j3x6H($Bx}!CSpy!9^VyC*N?k|#_7qhTg&k16&(`d+ zqSYM0>BjOZ3hka2OL#0Sp0GNtrrRw#Piz=En=h0ea)z?*7*gJ@ImGZ#@#btfT~EH{ zL|!+yp7N?q--Rb^C+Ae$&%-^Jx})&R-wAKZ-=$bPzQ*@P{7E*Z@{P`w2nHgXb4Avo zD1D{0rFu<|%sl`PS<5Tf1yF4db5r?701c}R)!bU4foaP-!1N$-eE*{&YeT%&*;KvN zLhBj8Me7;CSMCfuxafN!=4jeoT{(PGx)blL*_Ugb@@#ylzV)oRXmYUa$s<`QS!wX` z$#?prjfU~6SCH9~A)rpUD%eW*(+r+Wp-8J&?K zojGj-`zeXM+G7;y5~C$0R%LrGT2*X^WM?%;RIm4qVY|HLtm_E<#ta-u!}$%YhsmdY z<;b(mFm<7AboNh22bL=3=*LuU%6#Gtoh{=Y9Ucmaa3~30AOV+y(QuEw?mV zISwbiP1R&^S!Rp&;=8s^#Hy~k&^Y?h0Ez_+>~{TxCo-c8+$8cF7zNyEDA37 z7@qGD$QvtH5OK>Ld4wSDcmYcQuyd(v%r>m?tX{IJwraFy_`wWe3%bTFNfk}T_lLf* zHiaWW^=xtnvGvbxSHEzuDLxTT2QVp~hM1Qtrh;z@(nPg@&eI*5NGtuR*X9WQEr(fb zUUr|x%jWbQL8$kKbJRe?@6Z`aj-jW8SHq~G81$(8u+y}u&5>@j%bn@NUzElvcdJbM zmqXnAf$Gr)8?u*@(>R5OXK;qNu>D+hgx*jCnS;;?X}yqQ7UU7Xn}xC`$6t9o{eu>j zUGWK!dQDd|yWh|F!$4KGVf`G5KP9vJFy=>f-IIigN9b4fnSBJfXBZ_@S8Ux?zaZXx zn-!&9!MO4Zl*9SF;O*a9cUpnvQbhJOcbhmPga(4_DW573X`glfk%OmLQ>I9h_kOqz zR^&{EBu}CS*}K*{y^#)1y?fO!x>FZ1V9Z0gBxeJ<<0nrxoqWX@wD${Y&(MjQjwv z4FBhy?z(yl5B9H6kWJa_xxO<%C>pYk7IIEyT=mBXju~Fq8lL&t-T!QAyFelwjk=O~R04;AU1sZV=d=;yZzyhoJ@}O#_Fr>x-IHqkA{z#xd zI1i1kpv5$?8&6dzKCO^Pu`({BaM$f?l)nuO!~|<#(LV68++m%$rdgdF48$k8C4{d; zqH3I))H_bj(lAmSYNqe&xn!mdwkh+PlbewKpO8_Mj3@5LpRezeAA|q@)?*^;V*P&u zwpITV+#}02b!>!9pa?1&qbS9<9;~Ts2_0w?uo!3fGXV?ZnSrxTyRp^Uai;t)g1`4J z6lN}+sj#rH<(p!}ZN_$>Dods3-mgVP1#5LpQqRk0vaa_7G-3rGm4nd5z|-u0?o`-lwzUaieKiJ*3;2pE8|m%qUQ|!4^wq zBMlu5v^~GJ0VhqYVh#pKPTCh2WEQM%Zy-N&?J!9sl&ixzMkE?N;z15v$6hm#SodXG z_18uFAm_{&Q+Igh0^n?I0ctI-q64JD5jJ}%9lpBcf01~fAUm(#-Drtg8A!d?$9_;)DOU$Y#i_)=5g@4sR0}8?Q%x>T9Z9^DhO-&_n0DB{e>)H1W;t_8 zsyQs8>^9nI%MaPXX5#pH=VjwS|Gae-`pKEHGna_E>!tM{SDU2DGAmrnuK%&N(zAo^ zIDCTHFdc=n3-N41>%~0Q9Uv3-e#;}&q=O4B+$Tf}n;(KZ?~j-qYo6dE1XLY>ow^>n zPmx9;cu=1npTfJjetwr2P$cT-8-Ok#)o9ps5MH0S>8)D%?jQF~7@@Q&MC zxJP@0rW-KS7gjJy+DX{CRH*A-EeDf%EtVD0sIXHxU-`Upf$(xp!YX~8yHR6L$oU8> z4Zwd7l{A}cGa^5YYBhA?x$ggV{RhDhsDFX#%dURZOrN!W>MVpbWosp-@IJty@PE4sBI zy8ERVu+8I+k$NZliw<=6mLBqJGt8$30vo=Tu~XU+-%BG0$3O$&8N{=gG6_XB$(LFQ zq>`auk23=9#i#+KF0mC$pTC&((BS@S)FPsDHy2#Ojy=R`ew%~|XhcR|Pcr5y5!G{& zTIWII5cu?Wf~VP-HdVnV&=cZZ58{Pc`h|fcIL%2MIY2n!2&gKugg2XCKb;p~$r z*+r76$fwGd0m-q8K!bRZctz4nwK!rpz1!(gZS=)4MwX{oneT;o|E(wf70B|HJUAJ^ zR81_W=9!RkzAm{(oPH`-lv6u&Av$L#s`11tXD29wFU*!-|4jQ%gHnzD}4 zf&eNnwxX1De4zg>JG3Suq%ta!NM1;~;T4CXyS?{XaX#q6prj)BzrW`lN0)1QLC}Uk>rdt2NpP6>PQpi>N%oy=tEASMP{vJ zEzfW(%(!0ksV4f|us)b0&)&8lADiWvNTB$`vt5?!#XZBb$rl zob|A!Wt`AX;!gIB#oR|TtiKKb2d5{K3s_RQ!nJOdvq zNbLvU<29|)TbUdvNPI!W#v2%+5{KdVPE-4?qA|MW%Y5~ zFdAWWnL^hd7>sF&_#$QIqz&Vpw3N($GA+|Rc}NTu017Tb zbPwr)xUDb1LMRyMF-zj_j}dB&44#nA!MvCMRMo_1sj`TM-=qR#vxH6yj#TB^^0ego z;ku%#wXtQHTT!uLiDWXyV7;C={2Ip=kc!fi$M?P zzSqV*Dm3@SzgKH(w{OGo&K2RhkDH})A;@iy-{W*|3+wtQ_2qVo)+2AP%flUiJ2y

qy8{=rE%g=vIbT$z*-~+P|X93EH9N30a`$PA(R5- z4-o&P+bIzW)LarpiQrq2fw9+Lqr z$f{`Wpqk^IVHHhWHth;w02{SLj5v&+O8alE;!QW*{PxsgARpPUZWX3$A^h!@xRQx;Sy2|4Qg89w$tnj)pSu^cyi&ZW_lCHYAt|PD zvGXnXcQZS0e`@^0KR$(aE$RMAIcxE7M2o6}YJ{Bd?h|^RcD&mzLc52U>gZI{lkSCq zzYuqU#ge=-g}`p~1I`RVhMU>UoqgTDr0AZ-B*k5vkNlP)&une{o3!1{r85tdz&{c^ zfzOkTP`|otJ!55kcJN!=`FfTSb}BL_;uEt46E_cuVsk~$Ar6<$ScmkKV_5x|_@deN ziS~tFUq{4qvtHg#R}61^TB)@cvy#yq_>=itb|+A&vrRkC{(~!ZN_P;q{FNv=|4&`) z|CT8K?qbyx9p^<*vK7&@!o=n{d?08Tiz{}5m^(?3XzU3VRZaBE)kO#jqSh!6ulv$h4$`x{W-#XxNDtHWsX2ghc5$T?qltZq;HcGu7vQMKZbXD^2|w#Ir@+v*3773%h<%AtBQ`?=PNrlrg0CEe6o`YyON(E+d48!NL?swohjSRL7#44%P1Db&qu**IS z3kNB00Abt(Ey=chUZ@BDAFb{+Y;2yN+px&kh3*3ZqJeh7OH?>2CHGW{?x1uB+XnZ| zc`8MtA+I4Cu&Xk8Qaw+6Dy2O9@Bnb489$j1@ixB)TsWB6{B%a;9cw63fnWnqr7C_i z%%GoUlq+xlfn=V+3{SoLx*!<8`W@;2y11zSuWpAz*1^=y-Sx}T^`G3S*7%3SEZ)3n zuiHfjR{auK(3GcvAsi*g7`IS0*n%ZxM z%(8`x$1s*yr+BscMIvlH-nyJf&Ak=^OA`}P03Rxh!UB3h=kjh~dtaRA3`(H3b81JM zboMbID()kYE3(_Qjw)uvmECTS%fjsd$K{i8a{%TljVHLC3dy)+|3}(8MoHEtUBg}KvTfV8 zZQHh$W!tu0)n&8Gwrv|-UF@o_?q}v%Ywr2pA2aW});TM4oy;GZCnBzM#f}}Z)#csH z60buzbeR$|f-ivyaBTJzppj{1q%LL0HI+g`DPs3AFk+FpB`NYWkS|%eS`a-&qxXV0 zwO?8&eMN?F)zh@TR0M~b>sul0g_G`Zz4ql3SltU5A{WNx56Gz9(?!C4{rTAV-oGbI z@z3)&mt06lo=H@tGh$$ncM>0xvJ&MrKh2Ii^8Wfhj8+&q$Rf&x$~X||LOGACSS+5P zr<=fc08+1zG_9a%UARCOmUY@NkwE5o*|05=*A3Rv&YeO63C33ht$+3h`|&ZS^d5xs zoM$u96Yd06j-W_H&!U-K5}+{^B1cD8z8CS~#NI>^~%=|m9jMvEHFlj}BT4|<;FaQUq`=*f1vR<$%o4J!vaBbLw-1xk+)Zx?nb_%C}Wji*3Q$>OGx_ z#CR;XU|f2;hTS+VoEU916)K>iO;6jXfP}qaXCsNM8mfZYw=q4T6U+AOLeguQU~q{l zl++0>&0)vckr{hz1d3P3bCKRNCFnW4%iT>NH%}BUX>eSSe2GXl2CAL5QRim&od(KE za^a#MEyJBPjW<%^G1KJ6sE$w^yXcI-;%Z`WeJ>g7%l~tc8%KEd96+Gk?!7m7Y5j=1 z5+U)n=|^Rl&ileYXm9z^Bzv~Zte;&PwkBVzMF}T;_3foEc1Dt)fv8rRD87$W=lcMI zDEruiymgR|*bE_39)%GGVOFH`PYC|VdN|+jymu956v+DVJi$bFyt-c<&5y(=HTzoG zWzwY7+%m+1`~o@YINSnOH~2?XW5j1|sK&zy!?q3LLONI?z9sewR-u_30-pF89J9$B zr!gSBnBYDYHz=g*O(U!&F?v<0Hbpb*;2YezEAh0L!uZOJ{S9r>Mo75#+$fTHBOw4f zPxQ91fc@Kl+hP0}HG7!+a%)P6Z{K+T@7?;J{;X=N{I$Q>4icgusEsTn3J>psP!v%V zBxw>nNKUp?HpAiP5chNeUV%zVNeTZSx#HGG(L*AdKzHXp;v$(q5P zQ?7KPqOyvKnKYDzV9y6qYP^gO) zo9J*e4h?saoB`#b?S{*g1>YKRIB@Ywh!ECxKB1@U2Ci_@u1GaY;Y{=+vnaPh9h}!j zSKo-B>c*lZ`*G>D%RC+bd@h#>9u*bv3GWI85>}Prob|w^TfsJ^)VvNO+TOWJn$OVy zGNA~f!wQ6M8!gB5DQf!6lN6dUmJ%tpJ@|dR0Xc4s#lRH!AVdLFF6D~5$GKPY0AQdW zJ=C!D6(8G$*k2L|jvRcq5=l>{mO=(ZW?0aRg?b@i4Y2Z*@N<9;R{4`3k&wfo@vhj5 zGR*dtXkzr-LL;$TOVx2NH0PHXU(2G34}W(VD$C$6;DCzdc`!0*^_giK?D5ybOT{X~XLI-Zhwj|K#0bLk9U|pE&KA+9ZaA$JjYZPGkB!5dl@C<&$WUp~L*o#-7 zI(y}eBy@W19J*B}y+e2S=mPz`5oGF7{`g)7PVR&unC7U#^OzrGt(B60uF~@eNDnI< z)HE;0)4=yliIP1aoADR;zoUoTg|SL*UmNk7uTT;CufybP%{P@aQ8IP5w{iR5_VExU z*)Q2R6z?blFn$5WgrGS90T!}XJoaGm91`JdqLOShcw=%(lU-}+7Sf9~-d7U~#X%KG zAkcuJ`O{Tajz`Athl@WT-zpW<4Dub%Jr-WAL!4B9ElZLj0kn}wmK6wPGpdY;#E2V!Xa>`Wkme2D`f`=lPnw? z+G?GTnF*1(Nsd?t7;LBPGKZ7?%q~IxaC3QE?&@>FlI@Q1@^s3(vPuo*-6C@6(pWb_ zO1TT}Pa#dV>(w=n78&YbzBB{Jt^5S#dgx+p&ph@Aek9E^{QaUc4GOiuIn^_QBe`p_ zcdEPq1q4i~L;WnBz#;~U`9rNLfV?=Q?dvYsBsqkqL&)fH|NV^d1rgX*Dz_ zxGx`~vkv_B-?qv!{3>xiUsi4SvZ}!Ul~w=$HU(xx$RVl=#Lo{O@3Y`R;758QASWcL zqC@OgPfZyFFql>pYjl{kN*~sG{I&c=Hzqb-s3y?*}&HfmW{-52}4 z6V%9<3RsN5*+mC`o^c5*1>}#E!VW!>gv+yl5-MQy^usJ!?jn|Z9>1bC{fPo=(0$m29!uRK@svu<5nirt`6k$j-fT-m4vo!qBPi|zNbHl(f+pR*97rVAixx|D z>~e+Yf#vr5^VF?W1%T1h=QmDIu&IvMrfG7 zO4R{5Cmel2V%*4F&rJQY;`u)nyiQ2Uwz+|vcKnk~uM>tm{Tuvm3Zc5-k#IKLb;1P9 zW=#8_k!9vnh}g_j8Cdh!W6>1|qi#bAjMyRJ4(Nz!C$jqBzcMf<23iH?5g+uU)m(aM zE}&WSLF@n$UU$(QOsSOA=}U%3P+2D(Tu?r~)Ff^@_5}7o?uhUtbt@4Jh_|^6h4db( zl(reDTA0A#&eHWez>gXnhiGLupg+$st_0o@&&84%8g+n`9NSmsYGP*Y`d08_g^vEs`jtSFfMPwb?`B zklFEPX%h($gtP?vg%vAejv6#YD?;HkrQp*;b9TuiG)FG|A};3m(dX%HBfux;NYP7X z1LXa074B};#isqQXq5Ug-+wTl<6pQ4a`wVDhR)9a*o>sa3Caz8iB@|mc`embtldu@xcO})+^tIS#hThuu2nLZXc<84x zWaD-%O((gl{$dA=h5^avZ&4=6It!XCB+|LDA@Eb(P(-A&yKg5P@wtC+cM;AE__1ml z^#AVh>za+PzF)U3>FebAuNE_hFJge9xhbusotgbV?wxETH(Wmh0@%)dqX-ymtG_LR zc)n~OBwH-<+Sf#Pj_^iBhi`Bp5+VaG_S;?jGwA-rFncD-6V1QYT;tfB5WKFEoJcjL zYEh%C#uNXX+8vO`Y|*K!u(hGL`Uk0j-o((w(8$uxgx=W9 zoL-rtH`{Gi3D%O`$jD!5G(MHK9_}rS&D1fi1DK zno@}d&#p-_8rF2($x8%5MN|gC!{rq`!WHnqw8l$Oli5WDf%G9LsLu0VBi>8$y!YGP z$r|G}&+OQa=;v>;yzI?RvLCpAI$yWDAO8;d!`~khZeJcu z`EK(}W`T5h1hac=M?V}B*u&i&i~I6Kj=ZzH)}zP0F@k$_1N!60?~?K54=_I_8oNAV z*~8jLAN1ZA^{TS5R(R>37`!{}HP%z9xgP-^*RU5Y_Umo21?}c#9nvu|Se{JFwQ&|3 z3zW8;K}-hGrcHFLcEydxFw$Q8X9=tMnaoX>*9j&zWmrF1(&UDaDhsY>l_N0xxR&)1 z2vMEE_a#}=F61!RTZx3QOMywA`~YIbTXAZ4S$-dj(r0FwJ?Q)uEM}2%ts*r6 z1>cM_0H&O8DjTs6nME#pN_H?s1juUE;cAzjsKH%I>NgX;cAwXGBbXSJtge;Em#P@H zP&3xx#nq)IqL$Q65|E^&5%+|CK~Nn7!ZP16zlOMEV8Ph9 zG3$n1FZb4yZ=oSenyA&XkxkhFx%Wc~VLwQ?{(($7QS3&530FO7aB8!Va*6ob@%}rE zwVUG%@_Ig3Cd+aq=T)>R3?g{ror_vj2E47RWoa2qpSDg6ymg2US2flw?hsRPiEl{m zd`!wD>oQk0rRKqpDn}#Pb{JXeqoXlp>qwbtD9y8KKIBqj9nq&f8 z8sq5h-sSB39lAQq3IneSKVypS@KIBC>eO;abbS;V3o0N9*0az?tR=ahoVgUbhT4p5 z193Sxf3$AxKLz4kvjT4Ys2XKA3$Is8d#%&J!wrfLok7LoQTt>>IM z%acO4&cEIGDoR6*LO^wUaF*7105W5 zU@SMw(VerB+9ewLRM~K*cd*gt-tM#Ob&WdIBa_a{qwmE?O$fdN5Lfw(rDf zssz^mEu|k+eM~qNPvcreMW2l-XBJqzTCty}tJ!&Q2D5U}q@hx@1oP;A^2`yI9Cjh;w` zG;XE2#nwDsmP$$rOSqHR>g)w!WmfT(*HhEgSDuR)3q!{I0BZ&*%pJnA!aZDSAQCXo z{&y0!0)~#er;2$$?Id`lH_p z%(_lZ5PTiQ#V9B6NTXnvCA%OW`l9=}I#AsaeP#J-=mx{HDsM06IP4P&IfsyKi0g95 z8j3~dX6OQHyY~k5aScz?So_b?Qr!vOYXjhL(PDmO$OD1x+=9JHnc~$x6lz~uqm)Pc%F-cw;L*6-m zv7_=i=1~=$R&Ye-o)?{R)BI5(6_r0qctw^3UlN;lGyw=eAMP6#qcu)wR4@WOLV zAoXY?7IeqUm6%Nu_aV{93u8z6bv%av$#%FG1?uDROf2Y!7n5LMj3-4>eux+j3gW?X zMV{l@=D(hD$n5~X*@n)yDZYG7uJ)TK9J~$!9tj^l;qz^D<W$WJiZlQ}%5`Ykx`SP>(jl;_3;2Gg1*DF8d>=XB+McR0Y zzw#b+<1^vLZ^(gPn+~%%5pH=P{MXCb^ldl|I(P^cG9&yzDX*TdKH#6V<|0CyM0>16 z0m|s93AY%>IsgRcBblz?gIgvvrJoqJ5M*@htZOpCwq*Tm$c9-FbyFg%W<)m3h%Ffq z8~=MbDkAXHFyb?U>5~;kY2wcc<)8M&$`OW}{!wCwn4*jhu8vI?kJHMs32Ai@UA~TY z7uNZbS=9Whh|x9jNgV@BAU*WpbbmF?UUr$C$L}=VFvLi%{nG7R@?fr%#iZHo(wxYz)+fS5)&q8wBAu9#cv zF^o||owQvW90bVrzZg`j9VdUTWs-aZakPw3?#@+K*zSpDFIkW_lk%_P5m zMHYlAeZl&r|2dV`!nlI2ZGmTq!d>DTy$z%aqTu+$EpPNLUM303Hmsb)26;a=FOf`r zc%wAL@wYylejzrR{9J?emV)0=qG@wNexc!Y(*AbhIiI{vOGiWIU2VhX{BL;j>KAG` z9#Qb^?klOzbi1+@Orq2dxuoV!hm++XCwWD@!k8y{X$4B9I`l>202ZTLR^FBr5D*cN6;zNkxC~5sk_jEV%B1N}t1?di@!288ef1 zYZ~F8+kTs)v{yU(He_Px-hPW$ar>ndPlQ8(-lI?T&bmp0_&XVzp9J-TtH+R*VW|J{ zs2`l9-)!lVZ0ilJhgL8@nc71oa+kYJljxEb-B*Xo8@h)Y(T)P$SBvVM*IS?Hk{X?l z2DJyZRkI&maR%8LZss(%@Kt@(jNi|{`y0GhJw?)q#yC&$CXIdv!=Wd7V>v-JTh#nj z+W=G3ve4K`-6unr9g|Y)3Y$@(Pcy{TV6FnXm`+Sp`#Zct+2F;nQ|(T?=O5usQbao{ zbYE$r%YA)HTEm`-Juq*@Uz9X$8E%g9MuKk~u^Z^PBX{ydi^wHE(ZnWJo_`KZd<3jr z+Tu)ngdlj8S5cVeNg)I3^2X_odOR@m^3Bym2zr@d|07~M1`xC-B*~INuh3!Vmh4K2i-6eO=#^2bzjIwWyM;!Hmbh93&3iT&VX z^019rh({(>CKF%AS+v+>L;WOC2NNT;E8DClP15e7DfJH(m*U6b(JB?705yuF=(T=> z?WfQ24R=ht)oflGCqxeP!dIy}eyKSr)CnX{b~&)tK2$bfzCySaLGo$XFzx^|5n3-0h17*3N-t40Ecxi{#-_oo_ssr6^Gl$2IsT@1QVr9IQzs`w|d z8B>x;P0Wnmc4C}3g&QI3 zijDFo1HTG*hs6r9u)M!#wYTH|F_SM0XX48${{a~ASN11tZ|Y?HRks#2{!5Vb9|>)a z^37kBHr_Z_Yjr5>H=w|0Xhn8~bCdir2t&ye09|&Bar#IjE+X?<%+pz6X#j`)cp=lw*i2TPL16wtA!97=Q)I;@| zrdYXSIb=_^bH=L@P98Hz^*=Lby|r7c!!}?VR{#K2oB8wGYS{;J*v^alx*O#Z4MEUk z+67Fy8huS|_qXn9#!36A8B2iAPLrFhAvbqs9hsIzIx4uW+`xA>OsUT;u>qo7>$Wgb zSmsfSQK(VKQQ`pxUM>jXO&6ZD%|oamYT@hFI2vY>5p4C=>f>92a-Any@hUYpDVO(! zU+_cj$04x(9NdSS@ehFu&_+h%$?=1*lR<_7i%9iti$JU9GCBmmBTxop`$bTsl|P8= zU>_#Z!?!CjEsvo0(c?uv1|>dhg|3*O-5uB?7x)k(p-2Z$zaOS74LOs@eb(y?`xxR* zC{BY=03-mGhs3Z%H9_|AT9}+}a7Qp>66H!HWW)tS#Eht4qz@9Mdv~RJpq!ypmfqsI zNO%U*CM1yJXy&>Fer<**4nsWUMdyG}k6>V1!OTq^Pb4jeJNCajF1Unk-(NgEye}HY zf9bgYs-c^s@;@at-`E~dBgEpa2q;w1tU{6P6e2l6oCz2I3}F3dg<4Ckug$BZ((r4Q zw=kx;$@^uT)21}D24+vwn8}S@;~P(FXY143OdRw#XaMQKcO~9l@U2d*;rpkeHl5SG-Q6OoPxm3%@d3?VK)14(!yd^@5t(jeW;e=T#S7H`rY5N+65! z*E)(2^E$Uj@$WLH>m1S-E-ST;Ys$E9s!Ba4n~_&q7LlF+b9GXcYBlB90s3MO5=bg8 zOLZ{zF@(t~a2WmAZV|n&PN60CD^;RfYX_o9EFhfPMHHMvQWpZ4zhhz240~|R#--QF z5gwEpK-lX?;x8;pmb zf}yWp#xrqNUnKc7TBpRj$Q)rft%A{>di!JSZGl%&YP!WN!+OBcB{)J|xz;=^mmw&L zcU%Kp(m2j46*?44H9)W?H&)kn#tzzS`b*^({gn}EMbnZY?a{DLcvc8uD8ukm$JkSP2@#hRjZ!Iw6W${js17TLABj>EO>Wmy^@>=Ri6{JnOp~(u`k>DL?-n94xixiSJ*} z+Mxf8jQ_8z`agohnS}A53%io^UzD~FHhS{Dk^)eOqd6g1$!~^=&6S`K0fi!w66-;V zoWGjt*~h+{vukmOd;onwnF|O(6yR~(e{u4w;0LRldE)Hd^fEJc{CshMS9^ms|N0I~rmr2SBxm`&TOsXvb5kqj2tMKLkp5gWpbm~0kM z*JCJ~MU-tL$_|!L*M3tR@)(yjO8rejc%no`<=JQ(m@>im%s=vY83&Fr13$JT4fDbt ziWACWj`ePIBy;DW))zFrZ^towd+S`USyI^oRCr|MgX~CmAX&>IG;~p;5*SicxfYRd z>8chJt4XmmZD``VBukDD4YnexOqgGK-`sQFS%f1%E&ipG;H;qpC|BJES~QDRN$= z^+?^(|J|qZK`eWezHnk-g8xXh{Quxn|L~|KO-O*s66%M&nMXzjx`YrC#C@2kG41JO~M*3f>D=^BJx4-s)NO^-?pr%OcLZwdj1I6L z-pW?os*Sm31=>r#*mKu|a39Hp>2z)dytEBOaMv#cbUL&mKkahQXL=pYo)J9Iwa=1P zypg#6WHD$3*;*yecp4A!fujNlz`Y$^1SQ@OR($w_>#fbM)|rW#7X7qSwFLpI1QTOnyRdHlEisQSrIgUSDL}ET)uSd&^7wqbEb-z= z+eC;MmC9}{Sxt#!O9x+VOZhbN3lM%;IxAEuUnN;PI~aK|r?N1e7M_b%^kO|g8`{st zyIofzdsE`D=Rsb`sBguxzao7!+Usdsq_&+4BR+23#MZzWxR+X9OI*oo>7ZP zI}RZs8pRWZ4!2W0v^mv7fdfm94y_?oR*P2mYCP4^M1`|ty`i0j0Zb|JMJ_{VtY$p% zmY3B^y6FF9xUIlscAc}k44(`~yfE2 zIn?Pm3vWJ`WUOA8q4gFB8j2h~o;uE=*HTn7zE$^rm2?Pu(le$LSZ**IPZrD*wic-e z&DE7gB;(BWUjfIT;7b|EGD`m381V|b>bGryc~%T#z`%mKCv zcQn3*`(=RGe2iV-qJ49K+|bNX9oFVE`g2KdcEL`o3QhkRRId6RbyxoW3P5ql{x&gk zXWt!4Pwh4`a_2x5thVAABEVyQ73E!^>&m#c3l1j8&=^^ z!;=x-d~VBNcljx8hHUBsJdt?mQCmtyi)lQQ%WLvps=V153E3O^jCS3v7`G5-b8wHf zD0zIRx7373`}{GcQ~t5k@4NJgGv;Jn7Xq~!nGWBZ!i$M%lH8)?yu4K zo<6x}3+^J4Hp*<6u~*sxZ%MHp5>oxdRQj*CpFSS$oN;tB_^ES26S&SWDrXftlw@!3 zALFR7F)6InSj#N0=NCRWK{3r$zyZS@CFZKH*s%v4%ysu6LF)VdVM+eP+2zsWTE~4F zjEl&0-JK%cTWRICaR~CuRJ4;}O1QG;v|P~UD&sem0y(vUo;tLC%MEH`8`@x-sy$X6 z`V$O`G}S-g+0>Sn*wyYyDRyxOv4HbszwGJHUX{IbVOVMieR0(Vwd{M5>h1jQ(K7M7S-*vC%$RSK>oNmCI*# zhy69@cX~9@cscp4$-HyK& z7EcR|%b__BE{Fe#&;Xn|ggm?x+TQ@_WY?eF-KDQX91Fk%p`>RVY;mV3;&x#(w+;emk@npbbAKiVQUse8s2eOTUDC;L*_ z_Jj3!YtgkK)V`iKrI%P@YeKxpW3F7r&R9Fs#=jaUxMP*@Po|?~sqTv$J*3<)i7oEO zDA1M1lXY?vY*>0*xLDl@+lTvVdf-(9$OgG7oVvq^z+|C>Zjcn@JWOTw>Y(~1vL>7% z*yhd*3AnxzHN!)VqTgg@HSOq7x*FF0e}sb6S2^1ghts(xl(}q~8gejsHe$vs=xJM$ zYk@Bi z!Hkfm2TPy5nGXLRI!42cpBeJB$p<=M_>Ks2IL`>)a35=s7^pVTZ&A7Krl=9Ao?ec# zCrOxSN@hO(yDx{do@@#yhiOK@I%8!pw-wwJ*^(&T5=v`Q=5NK{eAJ?Lbr~oY=4=g?NV{UUvUDk{t#3=T{XoggJ`$jlDt-K#^#>qDbE;@fW-g0QF<2do_gIuFb zFMhe<>DR`~Bkit0w!e-Zsc(`)H0>cBoN~VH$y6!T4T-Oqb~9SO^?>s`}Yd4gDGWC`09DuOk62 z9g-#UvQ#N{N_j?!rtsS{50_4*8?oJ&a?+k<8@uvlUNks2h5>=p83)Aa!@du6Vuy#v z6gAl@xwVCSz5``k-pJ;Mxyl$F^SBrTBZs(Rchl=Y5W|saCDlVT^7^ae`kDoa%}VoN*?IDeg3f=ByY3<-HUi zO9yP);Nh_!0Cyhn|2l|zrD!H)?cV5 zhVS_Jx+@471O(C3MCiCk-v${If(ut)u~b7jK3vHcq?uU5{0jcg%Z1E}6_fX8pP#Ac zMw1mG27j4!rtu{E$#?qY<6%Mln=~NaKQb@?TVpPM$zh=vLJc#LYZ{|T(x*dej^6xeo7#<=|t_(Z&BW+ zpfpx?cY+@$t~(P~5ek=F+j`UMwa3do+;uoR)E;3mv)*KIS6zY6zpn#qL!g=x(brYE z^YgQ6=mDlvPrBLw6O+(@1J$#c%!3GjBrNRafm_vNUdo{x0oun6;jC@SRD9cXs2V=I zpQGsgwyUmSE6i)Zi^?xPa;x*pE&;#Qidw9};fHFZsWV}IcGvFem3kBCg=bTDS=B5F z@ol*EZ#UROx{HItokS#7J*g9&H|_%D+6oPJ@m-S}xDRppoGsuW7b-l7Y(P;c zQ}Z45%Fm}Gt;YWyx8D1ra5ZR)L18oiB~DRscthDzO#O6v!1 zQEm$^L76sS31JL%422Ap45bXU48;u94CRcbI_2AD(lwfRKhBBVniz>5O#>_>!?6X!+(xb`!?^w)BY<=`J+C>tU{ zj~&sVrV}zrj%O@{JmO;Q!@CJfc6khSt{)Tr06Qi8LE<{BoU5Al6FFfox7l%=`~Wtr zGz}5eNq$Q!CKuNbiT3qp^K&}{*|+~Zs4>it9x=6a2IHzh8W&2&vkLx+pI4yf*}MvV zdJ`YtuTUZ(m2jS1C>?p-hQg~<%t|RIF;^u$M?N&>GEt*n88GUgP^o;DdK9lRa2Bjm zwlIu7Ur)xH9l0(t|HFlC&Qxt*_E$P;bp*1RsD0tgk7CP;yzu4k5f+Z&6mx@?54g## zex*PCN%kN*PQAm<4v$Y^QY}zKQR+gp0YU(O+^#|8uF`r}5#x@~i^PYY|JGkiIpxjQ z`4w7!u?YXuQjWcynWg#Pv^G^^>+Sjl5Jb%D2S^c$!)qB}(}?uHL5zte6X|w5df2Y< z<&nPOgy~g{0r-XiU731E&Nuc_mdi-#S<#O3(YsM|8L}V zli%^QJYQ%V$QK;_AM|+q0~z`2cF2FR)t$Z+&qzdV9b7#A3Aic9N)HGi_-wHKktkYP zj@y3B$CCjQ93+w`SD<*DRl04HZE>}3NFbqo1sU8?=0QREi@NUEfHqWg-9I^<<#7Z1 z#d5y?zKgLz2D1pY%8(#fEn?W{PaA5~xpATIl7kjB2X&nY{=KR?IUFZ%q&^%|j@u4n zl^Bnlr~}^HtAA^QL#1T|nJ;;~acgeXO^7w|peiGr=qy6F+GRN2UWzoyIrMV-!=LaZ zIM<-ur5I_;k^x0A58g+pGH3Sa!(W`KI?aHtJ>gK_rsG3t=rUws6g7>>cE#5VPwqKd zn?ccxm%D$q`4#CH8Rl*L^(* zBBB3_3cMZ_xsx-Ya^XeuGGmCOOv$u1tM2uNLS zY*{f2qA?}mjK}Ut)&&e<}^>!aa}y^Umh^4Vj? zXimLw1sE6vO{=tTp~9?;!?qeXx8XzFq{Z4^-44t5Txe`MZu)~KraoEz#A7NGnnx0@ zAZ9jxrUNI%B~%2Iq=;44a;NFmZPBMD55V4^|>26 zmq`!2pPHR&ouAmYEj7wT(n#*3nbrdH^*y7u3>mW$?6xW*gc!jKxus(Kl8w#nof3V6 z!mfd*HdE&^+bw5ZZHKT}R4d%QX0X}~7m`jIT+B^F3HccnOeWD*NqPCS5@NQ_oQ~U; zBIg6s*1jvMr{eV|e6v9O5~$jZqEQTPw{?BP2-+IX=Y&&u3jBFDyD+;W_ji*nCRcA9~$!E^DK$LM*l zE&LM+m6LczE-g-mCxkx{9@=Lr@S9T()D^MAn`D-@Fy7kbZMwCD%O&eFT^|>EYOERQ z{o-WP2K|GY+3b#jA?$Z85$?A&5l^=P5mC>xgQTdHOovtorUa9C}sI|b2}fnli` zP@ihB-tH!FBN%hNPcYB}+B3bzp(US&R3P$+$6l)#-+c+Bb4I~`c~aP_wWza2Ss#|} zo$#GAw_DnU(=kuNFKiY!4|!#>RFtQ{EXU(c>J+1QNbY>&G+ES`r79vL9)$KOet}33 zBN53=M6gs4>O$G4sJ7_ny=A!D7z zjrCaGUTSD|OcF2ci!+Vos95%UV`|qAS#Est&q~5F2kvNhhfIe6x!5_L?7}gRph-Tt zSWfX=kd?JB@f z6I%d^cGZ`HnbwA<OCxR*mHWz0fwa0DrY=^Kj z@HBJ@P9+Ckk2IqCt}qlH7(z*Gd45MnoWX>=yuEA&CY2TFpxiID)?w;?c1Jh>ej=}k zz!T45Ly}|`m!MRa|0my9BMxrOjAy+7o{a*+CDSL>4xSVi4BTnQ&NbC>>pY5W=uySW zy12f8Hx(oN_c`T;1Rid1bbB!~)6MK5`ZT7I)uYC>{Da0@mR!~!j~;RRbok*$uj9`7*KSg_DI zS+ENh8>M#jc5q}F%8xue?l7vT4MS#Aw=Bm6JiBvtqp;}WzzaICAj`Ee5v$qowYeH^ zC#EenbkDs|8Vc@clRUy(HHF-x`l|?$%~{%99S+BatvZ>3NLcDydsf;7I~4_$?ow$% zN9Dp1ggHa4;pu_^J7SNhfw~{Oh{iw8qB&}|ri?mwvirF?3*xasD6JmMT=ih4hsPRk z53_lW1FA++{h8uZY^fa4J)P5-#j(w(PB0;1JZl=gG4`1b%7@zFFz{S*@aITvq1t9O) z6d5axqNSb^o%XW>Q_sEoU>gO5{VgB1jfOG@0tdT)xyPs?>S?UPhm{suhq1yksWJVeu}#;klc^T>$YTUj=n&00$7&Oy)=Dr;vlK(M$)@|+rN<)O`6Jd4 zvEAd*$24OhBa}$G=#uR4Ra)OA&BC&ECMGE9>4=j4`J&1^sHg2MWuS@U=qyNf!6fql zxQ|(Sgod1^hEBnETuDz)!o$;0n=q&J1eCDGQjW%CKR(LS|1s()Anmt^gQ<`C;=>c2 za0rweS!g0-(Gbe6+9B#{vru-Z<0jqrZIcrgo*;8p8_^_;ngs;Gn6H7`Wrn7KjM$W;QKSfS`DFnhak_?d&Fp< zKA}oCIsaA@OL02z^I^JBLUB6(8B)@hcZBrTd2@Kl?RhpBiG_IbQD}1zaTe!$Tfj{S zMk;eI>g3Er#eF-M)At^UDT?=mb;a_84#i}V%1Cjaje8WTqA)UQP*2Gle+yBQ&sh_f@I7iD4%PG~Qw zQEmF&;=sG!t0yC$>e>S+59DxazQHZFzrl-AGao5-adBA{RsDsGz!?TYN(~%h%2sJk z?8HH9?q83(Dhsi02d(b9D!s77Q;PPa{D6jMTbcJ*xzpbqzG^B$R2;*^@_l}Yq*8B` zO(Mhj%~3Iq!KkUrFYkex+_7L#at5&E(5O6N^Es@p2NcS^^*S~x(S~yzXy|*(%AdYh zI8;wd@gd{#ko-Wtf$zcLBjGUM0V7Oj6hX%HjA!O`>CwwU!4C+mc<~sb05*X)Zc?U; zlEzLFJV*3arLGwt>RXLI_vx38UoYD2ZgLUbPxp(!D3taw80g)cB1A%zh0Bc17Z-j_AE%lrFxtVSIg7Wq!i8TvHhy=Eb)P+# zH=?{gFO<79#PwRuob$4ELNU*VmSf44v0sZ)EJJe zi5Vl&;UCQqj$L_Xy#Atqcst+l(%fBK$HY?J$wLoN>{|-@))BzRoeKqRQ4kzcSENL9 z_V7?i=lXnUtE`i{c4{9?R%^Z7kU!MLjY43}8e|XN;MMgO=8-bOtH^s?@s0G)O`aTA z_E((>s6+`5gtS9s{xeA%o3E7)Kjwh3L=x5udCCy(a$o)<`6e0?Nt0y{ZV)baXeA3}P5w4+sgMd7qQ0P0ugoa0!V^gHar_h2jQPIJL zUJz(@5$IAjt~N`qAkx1pG9fWy!LEFDkb6uBiRpAPSSLLkp1pWZTkd?k{<$LeH#H$f zxFw1F|2TVxC|kR&TXToK!?tbPwr$(y4%@bE+t^{-w(X2_|8q0*oSTKOWntA;bLw)+msnYrDwNz$)F-nyL*Q`_Wj7t?yKQkw; zFc8&^+#qUK8a7BQRY0U4XhIB)U#p*t6~bm1&J?Y)4LCU0hMna!s$>ouib6%U6l}8b z&36q=g=0I(*MM=8rz*pN0Tb$h7p*u)!j5qC5h$?0TB^}La{mT+n@|`sR1dJFk51ew zJyv%XWd-#?o8Tr5Z2-F-f16eMRjv1U!QjcKi;9xIE|8eLG5yea4 zHmSl4DG(1j^sABB2S3$JK9C%|#)&Fr9}4J#L}?KIBi6-*2M7f4=NC|FK@qk5GqXk? z6O3IEd6YWtvE4XsN;HbmAWQszKXW94-;%$6EWH03G zB~PZ%RAv_nWav#atB(^QvoFQu5R!{H=@lKdHz1sDT!|| zigo>dG@sL%A(pz5AJFSsiLKr0Ea=f?z~UCUFEw7xK9W}>BXLA%ze_h?t61JcT#Zo) z1R1I^Uih(LN(pc@)@U3Z1)C7P81_#Bi4V+`NQ~dNCoCRGYn)1~fsCb#v=z7;&t6lb z6P0<3#(H49AXVx>s93CSif!aTCVrcO=bl$tH@ zhcUW{SDYDv3BIa8{Ah?Q++iC2sYenZL2o<#6*n?P#QKA}4wd>kpo@14Bi%tjV)Fwu z^BW|iyT-o8)Z}svrTPfgbB5VLMD3;e8aA+wi~nMh+C^?XQ~RC1t`7>%B1i^fkA{|P zzqJ0)qrEGIAPp`#aaKIei8EJ&N)FIX*ag`!X7vY(Bv7Cp5U#`s*v(qymk)&!Q1_#| zq}+STkLJRpSl|n$wKcl3B?}in4xF@xA|9f+z##!N?9seWN^bSvYMJ%@hLMCYo*l7- zeLLrJ;JjInH69XeW^)j_0C`KYVuQ_05R!9T2Qp&&2QbYbaaa9ly_|r)!2HRjtZ82o z-XPSs_%V5e!FUL@UFoGNcJJIf@zmU%g58MeIV2;c4UqEUWa)A$=ydbZubYBHyt}2D zZ0kS<-%w+3i}X&Y*Ok#VD4`LCj*B4EB_LNRUKlk@LIz+*gFwhIIoiR?hG4@r&wG1t_HNFM3oN$wpIuQm zlPFdp;1B;JG-a9_$|l*9<_{5~o_)Bl-1k?~&CwnU1x_{TOT4W@OniKeq+!Ywb0z}2 zjI}p7MEYpO&kD2}Hg3u4+iNb>1&&1N#_!PRyFz8D--)F4sZPnH{Pd?Dc=7%59fQO& zdDyHcf7*nXl}O7e{ckA3jwQu?dC2^`Qr^A+{>`3(g-~h5zG;NiXk-nz1I8w5c&B>9IAjy{WIp}o4Hz>l3W|DPc^OWF9 zO^ZXG65AHi7(vb=U`a5T>EU%B`gVxnwp&xe5uzZ7xXNZxeZ%pGZL=IbII_?Y8LaE4 zw>+!5mRh=-mbUJ9wsEfjPlmnFEaRZ@0|^--N9~yWZs|VU7$=76M6gCQ0WxEU#MLw7 z^#y`kjAx9*M%x-orN%~oz)fjc(ECiqfT_O=ut$GI{xU%l3is%nVGw;3nEiV^4EjVa z2a3$}c;qOoIG!fjBqjbl@TG|K@*WI}&0gHg8k;pqCI{xg-Zhgk8!p^cs`o6%kt3bC z6ke>umNH3X()f^Oz>|`?AVqC_K!SKWuLzOO^5}S^Gf#z97GH+S8dkLlnJzjU983~# z7y=uEv*KAO%YQx-$x=ehpkYHnpPoKDPtpX4IAmUxD@&nf93fd8Ck}1dkQfv{tR%xI z38LM1mNb{GW(CXKkJ#o#bBea2lBaN4?I9Y;^nk`bup#I-3kjYP6Q92IQAl$VnaQIt zR{YQpPn|SNoavRWWJ#21X*zEzgK1Q)PhR?zBynt-g0x=142a;1Ny)#^i$oFerbjL4 zOpl)&pxC~elEpktxdOkbrTR5`a@G*cZVlx0jGP(D0~y_(MWGI|#mEu&eq1=A{v@6d zBJMZj{>v1paglG>3%hj8tBcH{xWLBp5|CAwp`sP5vd?%^M~S3s!o^g2o!MhKLG~8V zL5zDaLU7z@?4q$%nL}@r$NcJ*bnaEX*i4XlH)->l8f9+$kIId@ZV8y@9D2!empu8i z9fK}K;p1oUV!ZN(6*477yPeoj!--OzdhnxLdLK36$#VF-5WWXGG8p}!gkqeqOy5*H zty~?7Y8=>QcYuF5ffO?Fg(^Mi0OLxb0bGYr4X0lN#nhip5sH148EsfllEr$X14Qw2 zar&c6&kA#p`_7wuAb~>HW}~sBTQh8(b8Ncssjh(uEY+D*5~9h!$gmQkHD${23wOv- z?wcG8y^<}truUBZM%?!k40BsvBm;zA2VEO>#GE+bg6m-$cjf zFKQk$eYA?xuN?Y0+braeV>t~6@}0DgyVZtffwJ{~Us0~iK0IEukv07g&f6hmrP?5_ zm2KSXk_;&q{~%(?A`Fr<83ICFHLj1`bRKG%(5l(!9B3UbZ-uo->(+0$aN0}8mywQ%s z#Y_GMwR8>Nm$`6Y@-4LGPYRWPL?Ce8;YER<$<;q#SWvqF<$?l_v^ou^B{&&+!48bJ zR_9ZTe4{G3ywR)!TcNhLiuyf)c-Nt#x0%>9(`R!f77Fp>SMf+y8%po$Pb2DDoYjO} z;z8dx8#ihWsfXjThJ}aTQO0nC@x*=;B}WMs@UI*1JE4a9=&HvG(IUz##|lw7cyXTc zsGH6^SJg-qdkabvW}zIZCRBw+u5;im2vH$& z7YRVawuaBWwlmE^a*3E#~(2ih}RD{ zD3uvLJU#PbVB#uc_1R>Ev*-Kc14Iw^IUU@tBFuQBdS3>+!+C=kcw}@CuHVp7d5M`} zT3JSoeLD<@2Rq!xB8$UOHf!8Ti7g2iP9ovs zp?kc-u`(oUO5XV>nUHV+rD2d5okor{;$r3pwx2Yt=_%!4>vZ5#VKSmC=cK5%%eD%z1)I zn{4;zQUbyT-w5+dvR7EkVEZN|9cPQ2knaXaQg?NJV)fF`4jmKgpstt1P?Oj*;#sv$ zdvDpU>w(n^XT(LqGeHvg9?^0swdxl2KTDGCeBR-*pQgv*&yVe&H9v%Y!h4*4GV=bz zeqk-k|J$Dr?mW~#9}Jd9fL6x9%OAfl0!+7-DgZ#A{@mck635FghQZ*$h^x^&y;&T0 zdL6qLWB=E{uYzCr`te~7QAsO>a|oTU1SEm)?R6UYok;yw1(^=Z2|_ss^>V1fYNzdc zQdwCm%@l2NZ*J8vCE9GG(qkN)H?j$I-mYy*N4*_|aF^iY-<<8u{ZZqRTRxfB!LoP{ z9B!M)XNYfToyZ^2p5QwF`T5U~O-)EYs=oCxl;5X79QUxAve zHd^2`d{uiuA7I}DNh_|<{I#WkQj1dCSL>U{8;+iLpUcbKzXDR{8a1gcvAAq+RPPK=!oc&AnXD)CH5pU9Jis9$kjRyNI z6mGZC!=)`mqV-Wii=XNu6#N_te->lWR|)%|rXgl$v)DPZc|6#Tt1>H4n%crxy`6JI zl#Ip+3b)_x=5$e6xvvjF23uuZ31kdTxcisAB#+C4W5|8xs39oRoY=~}wtc^iJH96x zs#Jx(e4l36NeF&EuOOVx?za>2KF40_j6Dbp#g(|J0>K8U)YtQ`TUN)?m;FOz93p|~ z)q^9PWJ+5mXWxcGW?vRsaEftW(z}XoUQdH#!ob6>6pj#+cn38R zek-qBodzh7wXOxyd*yrfW0sU4F5L(WV{cG@VIF+V94V{ws;D$(EBe>IjtHSCC^1U< z?B4x_Fl9AEOEZFK+w#;C2Ja*I1>hw z?l*HPAG=M;0mkz*6qAqO%`1&Sha6A`S&9i5a!#IA(wOC|U#<<=LVyIr44*eN*3&Lw z>3tE=Xe?~WC+L4}yy#*C`mmo(rwaGut^EIW?)+Oy?@B(mMN&o^&Y90LK6N<-S&?vU z(Ws_bKU*3TCZ|qup@eEgh71L-p1*8_rs`?XAmJJCA^%pP18*pAJQ5P*xkwsae9nbdJ9 zTEJ$43^H);wNw6L{In=u9>I(XU08AYr_v>Eh~3V)LWSdOE3b*ARrlE9$UP>3;l0R# zQ{#$VYqtH~QX=7A$l*v8hq=T(2yc{y*{^OZ;1mrGVGtbnB+uz$OQgShGn+!gBtybY zUBB4NM&ExJ%}isa_H>iU*oR`taGyUz1|OXNsN%-UeMBCH{u8`uvW1q;MQ?%hEFLhp zq5W4ONygfWGb`PBq440bqag@!)V|9IeQ2K4Vbsv$$*n9_Hu^M~$Kq%te)TrYh!=CI zfiwz0u!ST-q)ao{hUPd8q#T9rgUyBA3lN+ z>@lICx-JSQMpeJ2Lj#&$=4YuURw>Mqdgg%MI@rVW54RCT(*d-Jb%0RD3KT z!&S9mTpVr_qtm}d<>ORDq6_9$Jf=NK>*c>Rn6EpZhYtDC3-7Z4{#5(gB&SJ0xzNlR zq}OC8e4Kuy+H2%?)lXXGnGumvGp1yA>8l;z8e&tU$Q0dYW-YH)JIhQvW!JcHQ8!eb zHsdAiqPt_l+^?8LULPTkPw08q zO+Y-W^75K9LI6r1xAY}8$me9vCj)~+tp#^I-q&aL*PGy~D^tr6hGF^tC&!aj7`p;Hj@jXzF|t`t>U zLQWncaYF2yRyWpfnz6~3X_QavHDQ&~?HIFxozI5UU(>57cfXy`J*_YK5HHOxK94AD zo(WMj@{SJA?g_|WmBa4lR*C}`T-*;n^Aw#K#1>%I!dE)~f|7S>)hS+|o?ES<)2d<6 zs-Xwk)~nqL{^QEEN1|nqXwxb}85nUkH99^b|I86mbiLO-8P*qV+0_lBp=S9BPK~W! zWtqUcwx_C}x%LrH!qfdI`H&y6T&Z*U-1fzFjtjTX_0H=QmkzI_liaWeIm+|IQVzsN z5G3yyk?;Xvg?yKj{jLmSGvEStO_d^c?BY3BI=_Dtx_`5HIai@7ryCGaU%vV?P|TY1 z!ZiqaL8F^C?rU0Y``0;3i?#K-<>2k= z+VQbN%XYRSzZ6`1`+{V)!Q*swqFB z;?0k!_zx0o|5su8KXv4P#MBV|8y)m-Ek#jM7EvDQ%ZA)LlA4wrwn7fRscP)S+!|c>KEt^&y~5D0aJJdz1BQj|05g1-{DwA9^3(#Lt7Dh$$;QGvIjC7M(FPHyC(Eq zsOi1tM-jLA4J{Pm@E_{iOwHMl$s&MqnyxOg<3?h2i%%(%yAgYGrjgnB5ei!WyiHnt z7RWgKw8dil&5`?Pv6O5db6Zz0MAjE;yndV2EA%WW^EeGu48A_wZ~FC(XAtCK$YRaK zlvdiH7L}$)WSj0MZBbgsQORV*rOBdj9>Qd|$>csMTCNrw_&GBmdw&yK@6)u(xOZ6S z(fq>d60auvif$E#rxvBUuEH5Kl6q5|P|(?Mn@Pr@%%Wm6D;G1Xpk;SJZnkN`K8&?W(h4G1ncRGN!Wq3UV=pGab6HF;GwgKO!*>q`-G9bh^wvl*3A2uoiZ(7kg8XBR6l^1 zVe2~v9}`-AnszXFrjqhP*7nnhjFY;%IA>7qGl(`ww9OE2sWaEvo^X0#yF_h)cmm^k zb^7q!qbwlmfkMAQ{21ng#_bJC~$LEdrW8R+6-*{0`Xb69W;YD?jo`vcN!r$pBx})>_ zltC=%q4P@hxP#FgAaTgtN_XP?Z37n#L5M+&K@V+4=+4^*;Aqv7uMVWPY|gENXPd9k zHY(3#)@!RI@TYrK(6`1{Rn`xaH4jZhV|w4|0mrsA+Z4$W4g};IG%W&Jv^U*n85XIl zxh>a|HI8X&&{eb-F{GJmSlvdP9JSULaM_<61K5nvrg*GxQQbEqtUHN#`g4V-A$9dq zk?xCh8WatRI~%HM>?WJCvIrFe)CU+gh%Jbqg8H?R@G~3EndlXms6P2il;^V;YSNhQ zd}f!-W-|fhwsE05GC(i?E{raa$QUrY6O_fZw*Y~(Wnn}WCOCdxXgw!Kv05FYQG*hq z1G}6IYR9JrTBA)$;e|w7rdrH4=QuYTljYNuit7fSmqd)hQKL&obYO?1et-JXPlK{o z-W_X|ra&+iZpp*c4^cZPOWQCnhBQ%YJ2FZ>l-vs&B()b=fYP)+LA!KN-)U6BcV-ZZ3i-@-{=^o5tDx z7{@kBtSp+%_lPk41{*OT@xia@b}M#Jq`>JF`eSFF*Z%Z zchA;!0w3^k^D7-)6AoBnL;?pte<3bp7otx5DlV0EQ1sNw z1XRy?K8LEu5m198iHRvSjh9uMD1PcynD0Ono4g=M=OWdPdeT&ops!u9Z3H3VunRMeKwD!A+3GGCvp+z^Bi{2`^ zbJQZy)o&AP;tMNQ;5FPqh3@9SJ4)k?6C&X%03wk0`a{W7BXM4_@P@GL!5{3w=i^Fn z@Bv_yuA#fz4$Cgf>f%H)sPw(9|H00j4L~)zYpf2X#x` zg{E%svjWbxs25@0M-tjA{vX~ax;I3EnhvfK@Ym=_x0D4`FY=Jty%D(2|LR})Mz!i; zf&KdBh4zn75C3z|{@;*L2NC^$d3W6Z-x*FtYUiq$!bsmR5Ua5?jnV)BmPL;sNEq;% z6~b12x#mD*;spz$TJa#w+AOWBGkfog8r!y>4*|NK(KU*~gNCx+UN>$JSl`5tQ&!M{ z7Z_6gqgiR33EQ8WoX=AicO$yIAK*JKUTA!9KW{^z3DC2{*4oy;j&*}W=rmIfbrVAg zT3kaz^9b3u`>Ve&Znb_*?}I?R6L+4BNFsoKxTy=|;2skN55_O{Y>ZBrU#ow?DL}yx9gl8*FW+pSs2#KPv&<794RmL?S4MNolr zFfe0;i5BPYsy!GPQB2w0?5c5ez@;lYBwJ)_&j^+zKAdVTfg2-9rp-o5krl)z&6HZK z&t(%CilQ0$W8`2(MGJ#W%u@G5SA^HWTX1E}nlLXC4gMB@h8;mv+>H~Wp!fDAVnz;= z9gYY5mJ|NCk(y#iYD`koQ7T!`Qqe^ytqM$s9+44Jm<@9y;ED?kMohrEt)^x`p^sd< zT|lCw?6k#=iVTt+L@3*jJDr5*?iAkHKf621Z7xcb5@|4_MeZ_+-d%%H%2>a-dv>-`D&tmFRW07tv zj#bA%P1Lc}A&ktEpeZpumQXN@Trr+BmRL}?z5+MQ(pEmyZ_2A?)~pyGK4Xlwl?ur} z*Kc`ftv0IX;>Tb)2obH53T`Kkk_m4W#u`o%uFG=5kk8MWt#nuAR8eJKU(h!6z^l#v zfNoKBHE<^rg7%cyq>NceqxMisR%GUM7kxYibsZy@N6%i*=d3Q%Y0&%%B1rSJ=q3s* zkr^6_tvM+(lwZ2aQ7^QsU6Ty=RMvTd9@pI9E+H&X>A`4HpmANY)4fVnb;vl2w8=4t8LY>zo6>Q#P*PaY+`e?F|qxkkXle;>}!A~*Po;2FQJ|z<8BIQ*1&!9D0tbJ^R z&ci6%;1EEd(MI1;)k%sy+9&ioi(B6LS!RC7WZQ?og<4#LxpUmM(x9FYePrcgTj_yA zmWa+WrzC221L#vzE$3h71;FQg zfahJCv(YCB=v^F(t`Dg?`4wS}Q$p>0Qy6FNcVEE))*CH<*KdkW?k)p0*?}$P7mv3= zxqSWYpP0}~9eSJAz&Dp`id(Z9)NpGp`5wr$`&)1xPrSIughOB#{4j5~P_Fc0I+^$< z{XYA@NAf#=J@vyO5xexmC9_VVB;3qO@1ac;*$EhVzh&Jp`ny&^V&6zAyx7)+=q_i7L&?1mA9X+b2EEy#z`J*87 zybqu%Lk%M1lc8uChj_gDj+;3Z$0eId6FaG@%_c2>^)+5rlc)$ts>QCYxPw&7-jrmw zr{$^5<}GwbVE>kC<+ImM9tIYXDNvM&lkZkLp2?(kM&{G3k$_6-A?Z>MGn8}~+5(b2`_dbZK%O4^Z!mQ=l z<~F`!r^?zp3ep;>RuFHqggk!yGjBk-gmrqPUH9=@t*70#N>C{P; zY8BvIR<#o3MIY(@{mVuu0|iJxl3~f9*)yEblmU^I;?wc?spe?JNoi)+PUf;+p>4zfAwEhbwI3Z2cd) zQI@i{ zh3IjI(*23L4~hok>IKHJx0DUU>J*JdBlLqWJ&;@rUL^WAl2xi%n%<^F?z5XMnOvc} zd|JwuE7n>NP%Nu_Xt&`7m$9&(E`2P>8hJ zdx~r=aq?z2wyc&|t}Qi_>hr`?HI~QLIW^ZTUBpXFle!t5g7#SgxfzTtej{vIq(`qb zOg?3eC^ry_G)s=c{!HO<(|eKOdo;;cUz!C67F`dkvf1|*1tX|1tbPN)s=iq(3gnxx zn|Lp*GlH#GCMmghW?(}sN?Ge-g?3VB+HBc@CC^hEjnpKTKWg^dg#H-<`Jm7jeUOUI zD&xySrXF!vCeq>(_4~qG$7_A>60Rbh{>^5iraeL_t&UEsK4oNnX3wkY%9eXyAU1-c zou9^_Wnn1D<-zS=eQM(-DkR6D-Q>6tdDS>62vKJ+{)DWM35f-4eQ#P7sBY>Hjp+JC*<35l&M*~+d%Nr7S~JH))8G+`h! z1gfH>C6bnKLkx9mg?j9V{aQll@wj6fB(IjCdFb0p5gg!GF}9*3AvRUP8~eZ z@9z30O&%zj<9h#6TJXug?hvT0kzXSluj?R{XwpXQcLA+Av1?sO?h^Neua!?0<^M#E z100*V51)W5h;_ZAJ?0hD2~z)|7!BtE@QU0o+d2LBy-~)kPJB$a7tH62!v0>77-G%fzGki*$8=ZF>tN^<%gi_!)F^PY*m1e0Q;3Q68>>!>?HTZP;8-p@ySAva z(%3*7e@gl6DtRQcn5{;=#&YYhR2F@i`v9gqV_>9vjZ1wAe)Q9SWx6EL2L%q}_Vnb; z9S?MwJVTP022ta6S5#<#7oUnT3M;n_TP}%BKB+g~6+;ro-K>02Ah|55p+9lHKl~U{ zlN(_BrVsy>sUC?h*vlyL=qW7bBlzW|<%N@=qfA`g2jUUEn9G*K>w=iTHHhVsJiq7~BeH-#-fVUU4EbSCPYHZ3H^$EMeim<$`$s4xj}* z6H_s&GrlO<=xCs`T1wG*m?1D_qpO=fPr8NqwacY-$sy^=S;lOS-r$;yUUF79=~<;bMOmfBd!U(MP? zN6*+hTLGxikL_#zVvg1G;isB+o`%wM*ReLhj&Ul%9OEOqxbt+~Z`(ZNRoWKKMmfEs zvvA(1IBD%PwK3fBH+5!v&FIAj1LC)8`mCpiQk8Vg8=}r}g56O-XDSmP>Q(u^PS4~s z;iK)AWq-t}Hi0xPDeQA|C2Rs<8Kp_=7I%$3p&cjbA~-Wd2xh<-O}7lG@m2qwCCiVb@vD?vt%Mgq!4M*%4YI`A<}=EqGrerD3`{N73eZ#hI8j zdfAZ|%Xpb?m{&ArArCpKI-)Ay`3LRsH1yFn`?P{=Np?Ei+zlIv!sRJaZKijSpE(P; zzKaSRm`US?sq*rpAmTh#(yJOmkOgynLFK5-E=lLe99^Z)zP3IrgjAN_cY)`?VO_EI zx=y1#Y_Gs^gthdRsl-x%1K(3iI&<(->vg&!Ld-49fPt1%Xu^t3n<6nSU?0C(^>`Nm z?bSqgq^x-l;aBR>*teiy;DFw1kVCsTbTH`^ZW4Bm+XuN~W!cR9NIF?KMmKA5YN)SZ zY5~##_DWk5%$=_`18+@M6r$JZY(lCI-7tr-XVjxR=(c`u9=d@=yY$mwts2$;W}Zlh zaf^CQRr{R~$a&6SFT(vdj;(;Z7PaQ76!mGh;oW}Y)YxOk&sCKcYmohC=I!XWpf1_d zK1J=jYVXyvJ}I3maCEQ%ZyC@}P#jF|t^UgNnV&b7Bk7J2+0#9TUQYi8UglHnwILGJ zpwFS+wX-Quo%LWaG8`t?AY&>g)Uj7+-=dFt^VMe$m)svzsHiZWJm#>p>*V z=YLsTr|S~`LjH9BjD85E|Ikk&;b?0kV{7!Eev&LDO~rK;xUU1KZXrE8zhF&AYl{pf z8^8z9A~a1Bi6|*zK?4p&<&}Cvf^l@ssaT!|*T$Y)T5qvT&5|sayG-20)9Ok&FgLMU zQzwajYJ)c5tKj~Bh4Jxm`xoI@@>2(?Q5ZaJM8&gq;= z5r&!04bT`XTl!OtKef>uD;MD!;UoZumB|z4lP(4Lw-q8Z<2B-mrF#wX<}8XWMMmh? z!K5j>Y?ZEDHC);)*oJims*5R`Jl~EFVT?CMK~mf_SScL}Yrg%kp%Uo=AwyN(%p;-5xZGh)++7 z2>09VOeD9ih^L`sKdt`7U)*3de#I7id4Z;~{Gcca0$|u~j_H}KuI-!1XeqMnK<1{( zCufV1^$sYY>cS9YP1E`CdD>3*5IgP+?3FE+jX)4ftjJe6Q!D)wyTG_kd?aQq}b37HV>OE+GCFi~?np~x5xV6`sI zm@4L^kth<6X!af582d`10iot&^>y-s!BJNn%VwWyZN!cc*6b-&V>ErV((5P6i zPJIPs#O3w($O?l{bMrlj4vl#cZly55bQ;OH_9ceDZzbGQ+(5R6ND)q~BiMtSx?hEX zKc*u#NFRcZP)Bi0MWDNL;oPozf&XIK3}38oBMm#~^$P!~FNX5EsbOeTml!y*4ii+q ztSJ&%-RBhUPy#hBEe2RBn=l`MW&D>=I zM|~yo$ydrTwIeFkYZpg4I(=8{Y5Ap*>-iRjZb~D+3F38BC!Jt|)3?AF=*uh6$ic^S z(l?tCO514^l;5Ug658G-w$r`KOi~}2gcvFu zgV5nhP*($+P~$$@-8(B~i8p_299$P}+c}{N9^<>D3!c1h`tc_PF2`V{Nd(ZF@<^kA zzsEAFO~tG9n)6&^Kd;-C;Da^o3#ZHHkPnu=3hP2&iW2tGPK7eWBXuUb|M|c!r#Ot5 zE*gGqLwzryAA?y_INN3Tc+wUIUA5-_C`b(R)s262wdD-Ma%I-!}2MVJN! z{b`&GzGpSPL$ zdFx{wL{&K%-N|~LOVBotXg0If_~VrIxSOU_tu+9{Eyt@@>xC zHbQUP+FWf;KfjnTL>`-C*y*57D(XzF&)YfH8gd?*5*3$0Ft0^2_;uHM?)UGLgglp7 z1hnFOp}jD0kJje5rAAx+eQLC3+);&sV2Yg<2s{*z`Oorq!Lk!Zec7WeEt_HGgJ+)vHd!*wx|W+rlpL`b4+q+B%aY|9M^1Qo?(+XN6ccqHW!~b7nt14 zmnNkXZ=R4w$0&{(TZ9y=ok&0yfd@$jNtO&49tss64rSBo7uxC%>7P&FHswkCLxya7 zo}7@(|EqeH(Xw&>eY|nG;W<5-V9WhM_KOOM6_p?Enl`ZEhEe!M-ODdw+TI~F0gRn} zVpK4bOG{{*yT6BLdK8t-Ju!jS;SP;dckjSnrh8&kmF<;+RCoUXLZ*9al$Fh$!Ec+Q z-*#US;KK&q2exM#Hiu>ycL(-$Ifm_(o|Jd@0A1wUoc;^iS0}Qk*Oc9z#;@mKWE$*7 zRah?M`F;{g*beI})7Dozkao}Z<*6m}<}~Ue^gisuoLZt@9Fji%%J( z#C=^-rm)n%V7yIYM4j%qg2OO3v1_hrgHEi8<>k(i@vBAeYr=jZGi>$C9pV)UhC@i-4C~zzM3CXAL(&zqM zLyLsJJ(XDr#=3`_jij@5w#eucVnP;Ip5(5_PaH&~=U!=P4CP*~2 zTtAZB=3ABn!9tV;Msymot`w_Y2`1oVJg2qg_erI_3lVOrr{>p1_g+{6uJ3 zcuHE;{X_i-Wg>SuSy@_c`6%d8r`z~z!>@LOS6xy)XZ15_!r|Kvbkokn8NE5p2H}7V zxr%=uJh@?hTWfZZQhyeIO{n+BzE?h@X8N^D(OqJY9RO2)hNtql_H6?Uri z3KKX;XxMG(IKp4g?rpXd+Ej=K$>X}{e=Bwyf&@2z2gqtwK2BQl1 zeS8EP>od%75Os*Ne5-pv-kpKF)88?}ZmR(L0vH%wmk=Txp6+=D>7+~oZJf{b96Dhu zXGzxTDuG}K7sVwQBWj1CMXMq7qA+wtg%4_>z!}?k7t<#UwG}fn2$#P@{JX5K`IU;O5gVojz$q^8(Ri4l>Zwat6`dw_>YnVMc>+!OT%9hC#i&6nV@Nkom5EB92}@x*DAuet;kT8&4_A zi27=z)s=CQQ;?#O>P{=Vl;|!PqA6uehY&^*`B>r{Cq#vDz3g6wt*<(q-5{PmuR9%& zO9HQMwM0e-pZr>EnW`^P!Vb<#j8JDc!skz&;f|fcoHt9CcWrO5@6Tw>UE#nVnU$ls&uFjgx#u6##<)H~+Ud1DoZuRKlh{#d-xTB3>H7GeZEM8>a+^%n?P$!4gAE zDB}?rK0RCLK@~EHY1DQRk$YAq5QGO@(Uucy3Oww)JuUK#cUGfY4K<9^KTe3v4B9EJ zC1@p>wAl1<71*O6JmOQpq@k*?(DL`oXRP*M83FD4!;?ct@>TmaYvC%JBYHJPii!eEv7=;6F@aWH4; zRc+TzeVB3lERzyVi`IS=J$Kwn2fc`M5Hjz)qc!KDVGg$OPhqb8gom}13`8v0a=QyI zyWm!(?^x^V*Y!2gea)eYlY_mZhw^2Mp~UiK%fUN86eGl$K;v^n?ew*Qroc*c|EkDr z$drjhkx}K!F6vkdD{Ouf0dvDRkN?-FRyQeo(G>f)vkCjkI9>zxMUfK>VPc?v9uD`a zrn52WblPano_bJU@m?(NPDoaljpyFX))tH1mYLgrETn)i9rQ6)N(2I}p6f#M9QNXzENbk(#PW`U2Q2x(d+i7}tI zj}Pezho*PwT2>R}MiMa%Gze$dq4P0*Y@qmh8xEcR4jelc*($-OON-BM_NA)alz)Gn z(o_BwTB7@Fv@Xm-n)N$DO7vt@{)vu5K^d!r6rmsD3k{t5??B#J!ikieU$wHyXxT zmFv?&MSfRTJ3P#8jBk+^N*C3uPDJTdbZJS?g+w9o3ZFFqgX2({Cr~leF`#)EwYSp@0@BLeIKF=7qrOO_dH{ixl z+$gnm*F>O%8RT5Z8*&Q$FIosWk<7m=1_P!k18iNMIG)vGDJ1G6dD^hP+DseqaByO& z6c@96o=+%TcJYuP!`%|$22V6Mj~q*vg24yCzunD$;9e#yKy3nuoN7>dJ_OXKP)QRb z{@Rshn&44#H#kIzwOzs>pF?Jh zi`MD(&m}kb*D}&oL}9Lb~$dZ zbbE3p+a9Hs?ldbn78)xoqkc%UggC74eGo0r@-{%5o+U1CPzI zaV>(GOoSw3UmuqbewIu&Ipo9g7VUR+q{>if0B}*Xi%ShXYZy~{&kR?{sRn%Uk0W<3 zCW;PwgPcv7cpZ$KiS(@HEgN4^jP&c_b3*f@s+s_t}DI+v&Wh<|RUe z9t_?;*-tZ1GQxXe<|&46W<*3e<=gOjW<+E=C7Q7yda!XD<#R-L<{H(^yh9C_#vo>X z+YRa;%L5;wlsjSh=jdoQM?u}{NSUFMOpm&DS@g7MIyT3WcIm;N2UdtoD60o0cZo0^`b~G> zpFI#kh>Cl&Wt4f63u$dyy9O0uDHUnAlw&oEVLG>i-Jz0V_N8; zSci>(0s6R`h1lAKt+m$&$?~~@8Nfw9CBOTSH;;z4Zv~n;d*)Q7Y)3nAsS11N{w8h!Xc%Vt`M`~dJs+&|Z z&nRJ%HWy%y|0(g-2`VqlA1h5TQtj9Tg+eU}}wb#6p)qjHWJ= zQGwcftnbq=_z`kvYM+L2h1bGj<*q{H?)Mt}B4j-WwOA!mcCI;-a%?-k{OCb|Mch@? z=)>!U?jZb#vm=)oIqAMGE1hYeNfx)&j)vfpxdwgB4}7a8OR?orC;6_k11Hd-n1?A(*Fg}JCyW(ZmuO5Ip2CT52-8l{3A6zl+JFJOH4{stAb>V8 zy-%I6M~}{{l=S|4^1!ST4ACKGj}Xm=ZprNfU|_T})Lt1*z<}lhEc7-&=e0t5AB#5R zCOn#ce_H(~jp2THexIJ28&{>YkhU64J-I#%^qz6mNsjqEL(3_qT?H?Mm{f<@$Y#!v zd0Mc0#dH^dF;GUuBdt_*>;-MZOuE^aMq8jD=L#Kh->H2-7(PMOuIUh=xguOJX#jD- zwGGrg`ELgzCsHjNF4%V`Ty1GxQs1F+KpjiW8$bLjRA+37wXN?(wFKS+=CQ_+LKi`$ zx!TdJfic@%B};g|>13eK?}w{hB&7*X>Xdnma-3w9pZr0!ixn$KN_3nNxiWIOqMPK_ ztaK00u9|BY->&hgsK?l zT$Tm;;;WM>p7T9p8<>0CZ57s~%wm@Rc76z$X~Iwt~N z@QP28q}c`b3r?sIiz??RW#)59n{QtK-$zBPRw;mM%g!%B%O&_G*7GuiBEJo=o}3N* zwo^zNhPQOn=$UUYRr~3~9WQA-4bvjaZ{d~Zyb|*d{G~ZpB)%Kq#_>|~4SVJ@Sk^UI z6Bj1nKer-sL^Ujp`5m`AVVZ+}kQ-yQh^)_2#9aGg_?>MF^I zrxa)}jYZXyHfUz5D=)ZvW|n4psmd$J*k+#{_%zC|l z(@0V_&xYbz1a2FbBt_M}_qmt-?})~)$OoTLcVDZ(+ml8=O{JB^3|Cb0$mM&YAh-XK?ZHftF&d zP`dDH5z7&<12h=CZ7YMLF5_0@RSB*xBQf>e#I7TWp;Dk=HaEuInrSDidMMcbJ%+7LXrhCO*eUOPgE(Hv*Z=lMG{Ywe!zPH z2vd-w2Z+_JF|bd@kYC^GR9|9uSrc+tT@R)=2rFPU*!&+~l+y389NISlYTwkGWA}5# z?}gWEL_NJPRD&>J7kUpljGNCOWLWa#SGs-t4U~Q@;yr95!1zl198v>AE<$Mzo z)cH2ZeA6Rg__gxZ32oGGr1^@C|7Ya{ZfulJs;H`bUJo(pOgr?(*#)ZQmg*d=?{#>C z_&68TKdiU-aqeT8&aGwA8=VqrZ`r(%e@XaDIY2XaXPMw)J$Z>UO$#rUp9T*b>mC<)n=B7e!L?xr;1!a3z+mzZ85ip0^g488jpD4t z*ppy(ND{`0ZSp~nFkEk?Vmn;b&ne!}xzYnR$c?TNpgrowCR{Vwtt4`D5zG}Z+pYjn z6S%yDgCPJ$S3YWM)ex^?mk>i%2yrh)12pDSjetdhTILA0GG-2dlFS4r9QZ+|Q zF=-Glc%{uaFopv}RZMWGToiZ^6f7UoLuxkxYQpBMFwAp*IrGio!q_r){BmkuR&HJo z;gAUAAj0y8vF7EFy?U@M%4cYX~?bIXy?AOp&NQbDrCht?y|ON6iWKs;2KK{>`xS+b!` z4C4-f9Lj;Jjn_&yr(FVkhq=Os+^A?@2e*YU$SD=wBo^Zp1Y*65Z%U&RaBqw&HwTBf zb%WXR=3WQ7K^5dg@&bT(CBQb6jT*S-CZKV#_yut@iW}{md_v*26wsY!&gJr6@Pe|L zF!OzEoYm?kYRJ~1uw!>lzeS9*a*>M{e4mFL7r?*#KB)F;kktM`RY7kI0G$+f)-20jHqWe zE$dR|UO4VO@I3i;Y=|G~bZ*rr@{XAKLkA@y25mjM5(jaVk^Z2BJ3H^)D*YY|9vqDr z996rX%}@qQQ_SgMlX&?f{~P}3$1#C&Ojf!0c6GUu`yrJeyGjq9fMr{jcYgM_LtN-4 zu!8bjw~GCr)6WIfvJ)na(KGc?;jnw;iGKmc5Dzfu6D$HM_tXP>qoo9?a>wg4d}mB6 zpMTLcgz6#dM`DK}u|LkHc7=X30P|B}F6E|faP~l`^E*C0lBo29?iP^`3hw)Vt;8yF z796P2{_*t1K|t95Zwb=>ti=Aiu(7P;?Sn7j`~7(>uf1()rj=Nt*+_7?#0y}V@aewdp-E!Z1yfrI>d6(VXj?!a<0 zf%Mir8f?*|F-!@#fFmJVZ5o9l(vPvfTQDh#d$Tbvky$fo3efSXhx^ByQum?rws|mS zU#VAS@Lp;db$c$ih=clvTjbqy)@(2XTydxj|552K-} zooFc9R~$5=@gOJs#U_~`shXlnx?G=k{w2wroSxj~5N|F#KiBmR?Y$WW@f+2s>_`4J zkehE5ZI0 z3EOc@@m=5k(boFddPvO7J_TzBx$&O&ce27LB*4u6X|ctRz_22>r5M50Q#JBQsE4-tPO8E zV%sX;YGzd$vo)SGrLda_3U>5-$VB^;?Z?_e`&0_dpM|QSF48HVB*21GNI4-HXNGY3 ztS$E6?HIsK%aGtKhrl3R_QKAi^c@*YkGv-bB{W4!g9dkcM7gvkq0#{y%a%Dk%bhBb zTr7#Q22ZAIj;a#PWhMn(R;t?MJJ+DIDgK4vfoU+BLL(naG}N(2wsBN}?+b@`3oW(S z+n*y%*^K1PplSts7v&6PYEZ#;a(N_-OaxIATG046Rk7H%P;-l7SS>XmEbR0mYih(~ z@O-(KUJRQo1TYtEut{1HshmashFO9B%4{SOHD=@}3`9XVISZ%E%fFSYG*FR`wB)Yh zJg&R}=#y%!&K6cr)wKdJ5fs4%0o6crQ1-1j)v%CgBdR<+@65hQ8X$)p7w-A-^9E+s zkJ{OBgsIJdt&|;(nglQxz|G3wxSf?GuiStMYpWGvVw6dJokW^M!hN!uC?a-nZs~N= z$YG*YIbt5zx>f%>WY4^Dru_2=tJ?V)=$&q5lgUWKusc743^5&Kp9f4 z2&EK4h7~cGirWg8nivKa3A?-$JD08Z2ddGGS*X@T9tUwcyr^Lvhhj`p<-A(f>iKdC zlouTi)p54c8Rlv-9L*ufN!vK1`#N=PsBpaL2X9)K{*%x&pK8MQFq)9s5ASF>zocNQ z_F$4!@{(iJEeG#~2Y9bM_zz7=i9@BuBMucO*;ojI_AFT4BkpW|!U7TrWf)#3yaJlz zFnqBIH8X2OaA@kEiQ|);OHOwv7pQ&<%sIM@j*w_7 z6D1X~y`1`kC6RclpvPK6Dq}vi^v#luI(;+Y?oG$N#_cpq)uZtg)Vm&C;T6a|i%-uL=Efh#B`?2m&KFN& z5qn>HrQRmT;%Q*_{-{e!D*fR#KiWg({^Oj$1~Oo8Kp2$zXb?}cr&H=9|E zx-JL8OP&!0$2EAZh3^%?F~j)dG{t1G(QR8r9w@cGSu~GAF}vhlrAOa#p_xM>yz#`a zFvEE~tY&^i>ZrzF$w98OM#AEHtf9)<o z!=l(@b$&e_O;vU~`qe0-a%!9`$_M>PdVcU=T2$;!XPU3dlB=s^eR-^Ij+9(hPrU2a z*GAf256iX^SA`OdmiM@OVm$%J>_b*-Jb|9V$Q#q`YlAA(EcdczO?|>;ZOo;^9TtxS zUi7VJaUOFlXy9>|1k&Q@Xy3d@1Ts^i0cgn&v#7A%3_ebLcJHCCw;>itfsgr*1OT9H zCLOpoBlRp1W28x@m*Pr&v~qaM`L`b?`PO?2yxBR7Bgw#Q^UhPo%e~q3Z@=*-XXrkP56H;bU4rwZU&~?M3!n=~My13&f4TCLylU78D^c2V z7D4zR?B8c2o1#Q9+{yL5{28)Kg*TT*NcC2t-h*cK3N3no0VR?EYR!b{_EBY9t^PKe zypF`Vr(xhUpSQgWp61#;CXhv5UQ%1(hqTOF4F)sIWYc~}3&VsLu(fvjI~V4EF^u|& z`s_RH_v|Zm=a6sxyQZ$rzub0gcNa@=ZEk*rb4Or-o$K_bxHLAlR?zTwTkqoT)eUa( zb2Rv8u*e~J@F%!lu*g?!pT|FGR!{45?Z0Whj>0T;(&&kEBB}-Y%!ea^tweU0wSf!A z;vZtjs02yZ<9ZNt(WTy+dRUcMB!@;D&_+2WlXkS+lF!!Sp~L&>?L@RB@JQInG*D># zheV7Ru79es#a%~3pLV9Xm2GzZx!oTdn*v<*v%4%iJL2+eY&>%qV|Hd26uoAPI7ww| z;lB`P-1d5N&~n6I}BtEn-A9g>=6m zO!5q>T*@T=&14sgslIcLb%IYZ2;c~N7!;AWN|%PI3S!Y-KRV)HKhbrm-mtU$H&zah zQg(~-bn-~;C^#fDpM=!2MG9`TaM$`FX6zzWp*ONct0VqLRhS{+!6s;X4vujR+?xcs zG9PgxaE0{Q{>L2b#kyVK#KpRPpxh_mc*>z?Lwa#n@hxwO|cs;)FAV~w@DdxZ4u#^%qqGNR*bUN z(k{Xv_9yEAbVVrYzqkV9GK@czZUzu}-Z?#9JU;|TZkdMLEVGZ25}%gXOn0hr!EXMD zTcpqFAhtc$fy3!|$nh^mRE;8Ihi5l(>KV`G7}4HALdPjfCExCe_eXr8!;_b!ap#z( zbG#1)k2b-Ja%@0oCSJU9%dlM60?1ZkI|YnZUV_|ieJ@n zFJ11QRJmTiMJ=zTd$|NoR88^1|ILH^S60*PmaoGg-r8}R3RdX7JMXk;-^b}y!@q(l z2pi)aR76Bw6FbI4^H55-s7OOli68yxifhhgz>wc(lmww&M9@w!Ys<) z_H06V?2UNrJ>GWWy3(?~x13@C#yQ9k($_~NC1#_GGpO(W(ds%%SWy&$$4qTD}Q`CDph2_lDq>ab~e=Kb_HmD#1_? zlAWr*4J1_EbJjte%@~r0tcb>*jV5lBG>RjFiC5Goj=?wq@qkVqMe2*N`%y4ARMUlMgJ_Q7Q+zcvDHTQg3i zAWYBcfIK;u*$0RLuYL+i^p+10L(hp~| zBm3oLJ&N2K<-GG&gznp{0QHtsywO(p#i9qK%9rRrNL7FFBVTw~B|X;|vY=*BgS82= zT!%^9gvza%8(TNcsDoAq3j_$r8d*1uA3z4w4N`*g3&VM!@mtj`JgGyvaI2n;?$PL# z6m_QSYnyN^G4>6sk6HhaZ7#EPWM;C`H&HUNCE^@-C31A~uTJ7EPC|EevTrEx2#zcS zDgyS=Z)M@c=JUrk_$?Jb04e;4R4!4h8DVBHq1nbc7N8v3u=43>k;1`-1=k$akMywC z^5k%c3)NSLkMd-`iEnv9v!}(QkHjZc6(mZW41E;p6HSy#zEEZcnNGe?KMkUs@(v#{ zU2fXd4Mx(-v#hPoI)qd%ZPO z5c#F$(NFwBx-4K(;h&4CzSnEOypsp{ud`Dd27Q`l=0_n5Z?6|%>$^ECwDXMaI?mju zBJx4$ac4$7V6Q~|%3;wgjt6Ac7G~ra#Gwylns4nFb1nnvk^Scv)1e4!)$}iAAQJ?@ z-(uv9*P$)`*|UaPG=NtBM$b8O7S+n%eG@Cq;$wIHt-76@_U&1Y<7$r_<3;;3P-%h& zysV&=rk7Qq!cML*Z*kxWx4Pdzn86DEmLG9BzI-RXoKXKDDJ-RDh~mB<^A#$EFPT=O zpR*zvy5;f9jP}^svxP>}eoUusvZ{chY`sl#MIh83ukj0K`5V8-WXWLv=?3>nqvGr5 zD_zl-Z{;`p$1kOC9sO_KqOTX#Z|GO5YnX3@@51k|s`)Q_(@3H|&h6DVh#!25lnO^NbUo@bGzY7-X_Bo#cOl``1$BHs_gWu;5*Yuveo0PUCr!B#d zQS6)6R+a}>HiaE-NcVIjGAv)Tmu^f}?c}f@xP} zvctuN87QK9OH5OSlWRs0wxmgc$~IzHd4ZnELGANJqX3T4SIMa#;<5i~>FElezfP4Y z<~U+6U@KzvrM1~BFj*yCOL9~-v`XHPq@LiUp7avW)e_IW$(LVLN(KfVBq=r|OT?s` z=t(in;>|EhEQXUwtU2mV%0a}+_Rm%3TyQfLgeIG|Vq(mQpm(HV48)4r0+i_wd#$NI zK-rXFs{7^J!-8HwrS;ct246Wm@;^>2Ek&M}irjtV?j@S zLjXh_STjNb$7Rzq>LbeASA4GuZMU^cyiqCgTkUKcmeqB-fI8OJSH`y1SUN2!D>vEi zJHI_2PP(VEu;y-Fe7}ym-&-F9zMW^fU$)Hdr~HXL5kSlzF7A!!x^}=f*AP`Z6OcIP z_sw~>gu``yUUEDu(fY<95tR*6ojP=dZ};;{?fOL_<&_TRJnk_fcV%rK_AhjE-&B3i zFI(_kHeK@5ZYz|0y1e2O@GB(t2qO1LmN3olPrAIqZNJmfI0Q%|E1nS(5Ehpq&+nrU zK%F_HBT4XG8a+p3{glQsC>mTnyTv9TEE`0(dnOJA?Wb{gnjH=yA67 zR)Gd@&F(LMYssnNWU@ZDu`1@|QD=6rzlOiILL9}WABVt37%fWB^zS38yMlRs3J0q? zoqQIgM-zrb@mV@q6V&i=_a}CY>kpC@Zacv6Ro+Z^qluc_#s4LGVB6CJ5}Yafk4-`L z83^>@?2g?%vDraIxHMI4cB--uuj4p^FKQ6((Tq8AgYf>>@)ragr{d_y`-1XIZbUzbB-2o94CoW}`p$_^LZM)w3CnQZb1$&t*1%}7n$VUMg}_%V6?nip)mXt+KNf)d1p$YI_l(fHv*%-~Cr zpE;Tv2~uTsCVN&fE+(?Ex;O~X8&GeZVDs_@8ZbA2x|mnr0@og3eC={p?Q3ej9&+vd zlgX7LfWjajT2Ifz+(CQg+Jt!cK(ocUVIM|$Frg0qKEbk|hxX^`gv#08j}+w*%CQ(3 zJqr`($-PCPjkWt8M`p>a&o6@}OSJ-&dlgwRA)agB6!UiGH!{2$I=x|6|3se5)>w)BF zG>#&%T?dUQw zi-8k+Tb7+H3+J^pr@>-p?%7sMw(yswTFY#KYsXi&p-_r}XU_nXi8$p=k({p@$~@j> zx8@9b&}{AmOcVc1Bim;sz>S+ea%IL+tOVhnG9yq6rO}6Mii%FQEcyJM8{{G51R$-fnQ;39i?l#6#;6i9 zlyxi}11iU}`T5LaXqQMJ^$DV*0Tm#y+-LP9Gbrc zx&m|fk^oP?*R0yf zo?cE7zT#wxrmW^NO6r-rTYSi)e3M|G^8rM3ew)`#feIT&oK<{0wMTX`{d|2!R_U)u_GX`G2v!$gBF?w<%(= zbEHQY^U0=0Tc`>ODPF5*69;*omqRmz4g=RT<9NAJ(^#^8mb1V@Q*b-|cr^y*J!)aL z^h+>5pq7c8aTh0k2FhcDo^H!ni z9h+~cFsF|sW%C?ONf{cABr_o9#%>Gk*1jkND0QN*SEiE*a<1q0iayYo;lYWX;>c)I zeltF0r!TztGFVt_DnKOZ+GdT_GdR0ficDSK$gFJ1+6+{Im`-^V-TEEVkKd&gcb}uh zQ%{R>g-G4yJE`on6edXyxDCC#sxT)=SdXrj(XnLaOJF|!F|~iuiO|GkDh-|F`Ij4K zRAy2Mh5|2x!A^2-*p7=rZv3?ZDyU^l$lO+t5cTQGX0;D5hhh;bL(G)3Ax$O%SgJNK zQ9zJ>T14&-)5UEsPIV^E#OPn_->A-sIt=D<(t(?ZOax%eI%Fgm7QJVT zXFDCh=hK|EOnApusdBg z_F<||GYIMtz>nkdfRBUppknHQLYTO(#jh4tc6#qgf2Z=74W|deAYosOwmSrxKgZk5 zjmP+bR{z)T0F$ZypvBnl)Y;^}mOiOd3V&W*kn-prJbikmux>-`dL&O=eOQ7s*5%=o zye#I7BB#>sy=d9z3KE3WFy#WLMjDe$dtx}pe`mz~xPD1}4!WY@+2l|FW=n9^uaW3@l5GV2M;3mvbT+Vl*cQg3Q9-5Fn<@F5V;Ir&r1 zh|^jG|JTby^aSsIBX>fw z^XJ4Ufhl@xcfU!X4*ZNl-RKk zv>t_%w0mi>w3>1goYGIB%b(4O8SDE|EVcY5Vn0?F`~9*k;)=CjWj>9)8;SaR+Oy z$31R;z{#|eh;Q2YQ3Q((Vv`$H9s>vCvJ8gv?YKnXWx8!C;_bdryPg-yBJBKJ)rFD@ z-b+QcKv}YHnUm58?Vnr+wOUWq%q{Jv`5{ z;lEAgk}30}$6|M^zmnyh+cc7zDf^p|Z*@&zZBjO7A5*z7RW{)0x){3$W%m8T;4PRWr-GljVqTKMb{Zq@HpVlvqUY18QGR-u*ZBQE~Igx~(3I zpuc2hD6;q@ex8gpBfpyfq@JagL>?A^P4>-6-`YQ-6C?2Iz!1p`pZtAlQjh6 zFJf@pxH8|QVm=a4ud&T(GEYpLt(?p5wWVz-po(mQ<1t@PnFv#2(9}@;)(s(qh$E>? zIt6yn)a+WS>j83i%+*@!sH2)GLk(kCa5XrmaFCzUv?o|}qJvJDk!2|@hSfg<{>rvB zULL7`3*!W{EQyl`i`rN8S1)WVVayo~uR0VZv4$P_a`w8FU)w~y6}AfS;;XihY}$A6 znI0ABR8A+qrhnWKKxu3mh)nz0(M-zPc|XH{502>C>_Srdqk;1#qZ}_0^uwQ~t$~_( z&3i%moo>fcd`VJ=NU~9+PMxPBxnBag87y`NwHawLW=eGAgDfP4v8P;Dt~S*a&R`ld zX*e^Gn$k&HtJmG8jcnj`lZ@zWz@bR6K@WjHkw8WkNXxnGvHmD)!(sg4LWp=kTBDii zGUW9022JI@?7x6Fs%!U0)uo?F>*IIq0Wc0eI63qmJ3#t5Qs{RFXxQ=1KB*HxxM8=q zouEkWoQv$;tG6Qw#ikJi>GHI9OAz0n9C_0@Aq9@=BzVJ!^92}4J75rY@AV(1#D{A@ z-l9^6RT&}Zf*_bMC7I{J>E4xxfWc>cp%S$tidFd4E{w0?wK$ zdM18!fL4+fFBeO_9pmG)k4Zmyo~AKa<3Z`yRseDEBJ;tIHT!F)vNBwdFeGSDF?|G; z=on3ouPc%!_aRC3&ME|Uofq|)kvgcW0RLL3Z5ux27NAW9o?4@5gRZYkLHSs_n)CZ8#93TbF;V}I?(NGO9t1Ke|45j_ zb+PQb>>mJYKJT!-Pqn2}5T3uF)WN~0d(is;4;ZUG6drdJ%t0ey5Lr-Lp>xwnm)5bb z%tVt;i-i<_9*U2h#$O-!yKz>Aok}aGT}R4Cc9+@J0u(}#62frUTL{@uDkCVqP}CJ z%n$}cZYLBrB>qvhQ?s}0vqqS|W7KZ2G@tb6=W#2~&1!YsVYS_nty67;HRZNPoy2Dz#_Em_F=eNHQ4;buuFvzv0j8x5)(bW$bcbW38Hzjm8j0 z!h?mh0sO^x*OvnCwI;VW1WHB3lxsq;q5l+BdHHIb6m zXbYJ!&85UONeSu{Q$}Td#vB-yIhhHV6hv-7-|^$ZPm_%&jk`CH=bXrkV2@AY=e$U3 zQ;DvHrN?T**^snDF)V_)h@%C$72;%7r#yVMaUJFBcwx@PREp)w*@9a>J|=NTu_rZn zJ&fAXlM_j2=SinYr|VD_jM~O6E%@yu+O1&4-*sR2x~<=zy9$MA_FdqvTzffeFcigM zGUY6RiCimz&zB*vHVm@E&g{H+R~|@HCU_xU`abSpLHsdVuq8gx?ADB75)Bu_f#_4C z*PQc%)DukVDP_IG2A~V?%y3TIx9xbj4*LStrnijQM@n+fZS_i$RlZ zYK#Q01Zss~b?zt=N-y)l%p=&>t7lFVU~(y7s>i%m@)doU<@IoLKd|vW>}SbQ6yypV8ynoR?%Vdu7EaemrQpOT~JGjW-_U@wY7o|^Nil=9>{Y%rgSFU1!< zixB3Fwt8Bt8d9`VI|La0_$4wrZ=+a6MlGmf_5WS4xt~hUZi1roC)lz`D#$enFL8V}pX1fCL5~p&i zbGwTKWgt0LU~J1^rwsTYn%vh6_}Jw5FRcMSqfwh|=wn)#@izm#VSCT^ppOQ0`Dc`Z z(F_4QWf3i419k*~*ll3PbcB|Vg@Hk-{HKr7 zl2%R}qiipp-cc`d{fwqHO!Q;&-z8>48+*Gj+!1qtv>B!q7oudi>{wY`CHV2j`J3E+U~?m%~V6ZCc=;%%p0nTy&%!L*lCF}CF7Ef z9rN*EOWbjG1Fh`U9y97^&NRn7>n`>4J4Z|Q;7O&net|q7xqu6KCAp)jGB4~SnAu*S zy)uciOdR%gmL#vY`eJdi*^t5HVTe|mf6RtIL?!ImOnX$+{;I#NS+#j+8k2t5pLQ{{ ze1lZ3<;luyLZRH;^u4ln=g7M9sH$=+@%~c%YMrpg7)6&rrx4dI!)lE$2ruNXc=PU= zO;(!uCf{_ct4)RU9wYlP(S_I*7Q(=Q+8R59Rh1{MQzi0};i^&^n*%qZ_+O&=KK~%$ zFAM4udtsXID#jb4Di-|7b2SsJ2B?(?>QLabnP#F(^{7?#*=NYQ1jsvba;FyhS6yZS z&Tw=65495HXd?)ujqYXPvtirfPaHPn0Iya2a);$~>Msu3FQk}*8)2MpteBG; zFDgJ@KCOI-Itx)o9Lqd0fCw@)C`g7=f?KGFS*Rr6N6I-FH)Ed0G?gp^!zM)xhJl3( zLnsVO*cPTOGpA%=yM|l0N>-u(<*L28=7bt24#yn17=J9ysX)+4q#+slSeZX20gk;4 zON3FoOm9v2=F2nlofpAX?&i@{Z?O0fJ4R}yNxtAoTkT?WiM>ZUX2vT@-pcjCdh8n! zUhn90B$OMYHY%H}ernIX0>P=+37g_q7^@{hOcJdNyjx12{{D=_YMPH&{f35PNN(H>}yc?i>-OJ?zDrK=_%#v)g*r^kgB8f_Rk((Vy zo81!4DZRQ1SdzK(pF^hBoy3!B#gnRi+OD;H=d(0F+6f?7mlQ3!d7(v=e~`|!wt zHDNU8Ag_VQd0Dk3z+bw=zi|zZq zsmnzt$8Xo?D`xFuS6;vpeuy(f9fuPyyOxBJXlNC#PW6**Bu`{RwlhF{MfC__AS`@e z*QaX)7;5ey!=OmrA{^O_HX?1SNK+Gtqf9lGx-tM}Nw6gIrw`8ZXLSNcpSWdFE42U^ zIi~2fsu`zcV6zl_v78lgN*~-)_xc_N$#D<{mvBB@jVcJ7xR|zJl3Nw!uL0QvA%*c& zvprfqDD?UC(R}Q~YwQ@gmDd{Jl5O?u@2X9p4Tf)PCy#h9fFsQ#SIIceHuBR7ai^}e zBni#0h_V^wXGbKi+NGeYL_u5TMaus3-J)-j5MY- zS}657BMy8`zSX+iF@Qeby~=Hq8}Rs7{FDy$jW(ob1MCe#>;nj~5AvK|`z zO1O2k_&a4TlHWwvXQ1%A8yNBRLaO)e&EnJ>qE{+LqH%DhbgJ!-{Sk*Zcio&Zpf^*? z9BFNd(%EYo@6k&TS#<8`<5oi3ptK#c|E&HCFC?I!m|2@@E{Afi2G%D^uLRCU(KcJ= zr|YcZz0=~+@i~AkW%WXm(CvuGNTce$HOdNs`2xnq6Xk>;a4)z|bXA?6r|H1A@Vjsk z_jpOZ47wmxoiL*>HwsixjRmWec%dSlRd(>%j;9nsp9`n*Rui#o-&YDT+Ip?!z=z-i zdiH8K5)$aKZx90Ot)yMyT4CuSM7#Z7`iP)PtnONG}{dZEoMD-tZ zO$hK6)=JMH^N-PoakpTX0694fV+_LHuj*5th)pzBpEEGvR<@pldk6hDCQ`aEQlO8> zjIXJSxPnh|-E?*;+viW#%@p^KUO)eDSVK&BZkPR9ju(U@XUT$i3X@~Sq2kc;<_iJ2P{F?ZsP zSo_2Ixc5Fgb7ih4e@}fGa3&qaPiRbBZgNw@*e%nJPm@YE$WKTTXO&%FeGHv8zlaOv zY-RN3v?mdFfB8dHNyWuoh&r3hdPu<-osO6b`OF3rZEZnHroKkw+@pvGK8$Mg`R=?p)F8X@M|c_nTb^SGGTDDm?4?SQm* z(TWp?p$5dFBmfVWFjJ3x1;IgWlK9G}(NF#}nlK6c=Fm0|Nom%+xm6trNY>EbMTkr2 z#^KvD92#|STErSNaveu)m_~BMX@kBrd#nz)Y><%u6* zJ(D(8VtGZ0KW*BY!AB?%Ez-9fE#?bB(8(x>8Bok8HFYy+>RE|KG5eL0_)@2O0r0&- z44Fy7w#gBOBX~JUOP)T*T%H{DU!TV@J>P7qgb|FRD2<)gl#$<8$A77@{`IDk7$rx! zn@@x@l{UzzCRb&Dox@jb}1|zr|gu2^&NWX_}gpsC{4ULWg z0ke-9oJXRQ0w@_DOR&0Bm3hs`KT@1tt#^U^F9N^BvHWuaG{#jj?q)qUA!N~))Ob@4 z%<(b5r;AQtesO2}C3E_tB^R@7VL@K{IoI5iip~_{1iHr)YxpnFZ32?$tu2#Os>r7T z67;|JB5yQ^j)|DT1*3+wlG$V*Bx+!Og+OPvq5gkBa=~=hH^j}6LMlY#W;z|~5QFxR zT!8yn=>dmr2Q9}EMl+M8oR_TNdz3CAW9GVAHwO3PL-W0m=B~p0=6xgG#-DwL0o$d> z$OLJANeHsIH7~uqf&r{#|L619qbt_SrU${7wiU!?s?OpMek(QT8ooHY!XIV7>qN^0|1P*6aw$zQA zG+`et{oB@8xl9`+Dylwkxf~*$jaywZ563w@#nfmjO5N%(E{v)Xc?-8SjB+&!rol6Z zF)j5<^b|nZBNW<;8zdgNA66C^Ekh#c`g|gSJ4IZG&%83W{-DD5as~bjo=B6nSiXbKbvGLhH5LuU=6n#Sk%iPp5nDh)wN}iE?J*|!rnXFS{45)=b%a9 z+KkpL2<*#0Hi(sTs4iswn=*3qXMcD|RvOfbIrt-ty^d}Wn?$g_K)MT+k_X5VQ!Hu> zcq~h9RTj4TgDw8Mahaf_yg|jcJ-YgLXkh!FWYL6@&*jJ$G&Qi>UZ5&1~2R_AX1J3LbxF3y~-}tUS_1$jQr4m}T2-@okBJUs?K!p070SIcpQ+W>~(9?0kXspVm!5o7< z9MAHpAsGOjy(2ed`Kjg>4XLtcCP4F9O&A>IE8iqStvP1r^i(_WL{84>I8h1znGUck zw@P5KTF{}hYFPlh=25k%%#9Re3|&@ZKq8YC%Ou|X3D$10!oPG5cF(U9V|EcWB4Y+5 zO?dk*wnUR4kEzz-pGmS6XTAGMu9~{JifQtxZmC?U)niWN5JnC+ zZkI_b=Q7PbFV+GlHetdNiZ!e+4=;*j*k;cGbVsd zFD+!0=><^FHS%&#^}0YTMaRB*!&vDISYj^qCLrEYvczXvP}x~5EkHq!{DoEWcZef? zvCwpTMEZX!!p7tY(EGlzvg6-rf&YK@{*_D|EexzJJWT%IjHH@WwdAnHP(FuSSfUx0 zXSB5?=Q8YeVo5EK#j)sP+3N^~b^;4&a4&|aD_v(jHiLQZOO(%)^j>3GMU+Kk-c-wc z%M|CCjK)`XXxLEGn3&8=d;VqFO-)?seZ9Xz_p*2)@{?VG&&0faZ|q_I@u!CLe>)OT zral%M@^>YKBQW8Y{Jtv1%r(` zFOJqWsm5H8S_nCs8JX`bV=#>24;G)5Avs-0GWZ<#n^eX2qR)6Tzqz~&Ef1FZpP@oS z81Hh%9(|@=x?8Dj(*$_(H-H-Jd6-40;hMgcXqG#G%mhs(xH{6bv|;fs+>+*7;>q2G z*}$*q(4Xh9d0My3+>gOW9nx=ECJ~IOTPtG~VXV6-nKpVdfBL`6294 zQO`PUjm||ZVJV9vqu=zUI5DO?;qjDeQrGDRE8)l_qepub{+XQEjZBcu;U!8Ka)K{Zf2m74PO^C*>N$pt|mdQId z7h#gP7vb?tkCqpslkDS7{#JBZ`)iKsxs+LMJ107GZp4>X7m#h9p|S^TauEB6Q6v}c zgW&#b4+82I@Opg0)Eo2+eM?Dd}=_7x~m`mA?PQo`fJ1?L34KB*ISBR$<-zf6( z&j+nh}@%(4KGpK3Qu|2w69*9Q7;) zY4dIr?08;G@W8sfFmp>J>yKLrryzUL*${Zh56%bMzklnnJb3C)hRBIXJsr;4jOhec z+Zd!jV4rmhVDP|+p#ATb!9@#}{oNv#Rj^IuI3-%ekuK8_w&js*E%yrrj%nYex^TH5 z-|^nk8lS<Iy5 zAfa_aIgbNPfxlJAiYN_2qh*s=!Ae1C$_EM(u2tCOxs{@A@-g?n99UPE9SA)j{G5VO zyQ%(xVFh#I45rNvu^Q97p=~ev%XQ*D%YMw#>V>Rb3-?r~ z?Udq$9Id{^svh%&Y&C}{WfAZ&h)5;kI;*^o7cq{?pYq0b-yN8d-kow21{2JpW9ALa z$|9L=3`~9bZ%%u6Kmr~2@30v8efW(a2ul$buMBMqP{h_iHX4VkstCk6X0sM(aA{vEFv3+{q>!@wm@P+jkLW-T%C= zpM9^puCZ^&-sJdx=~I04#!Nmp;eUm-c%=q?-R-kIS0(z8#cYr7_k28qewOa|zCY`A z($HK#%LnpNxT#TIzsM6NJry|)hG1$F*a!Wcj^PfvJG{J2NP+%YD4&<(b&z7oFIk=w zUaFplVV!@jvW#Y$8`K~OXB3Q8|22(aH7jXjQqbVktYhD;BVk)#rOPosVGn06* zrdS+{<>aF&aYE5N6$4#FR}7H1No0_@Qzwa8^hum)Q`Foa0a%*y%xb!4k{N4yy{nVO zsHSyn$zh*(1+Af2J{5rW&=$h^D3x%xLt7Md(jgdb`ZUf5LE9*v5C*X#OCou2m%{>2 zZ-o~^omtrs&1v#VXG2M(X-r)#KnL2T&4wuO0gS^-mfqyecMxjJ5y$Rui@*0|HYG`r=TO@Juf@;>aqEQo?y^XgQmJvXN@ zBjnlKLaM6HjK~c$7NQOcUesyTKmdkCT<6+VfZZY zDWD*w{=RRV3QSDolC-9`yg9gTUg^XzsF@rXCWxi*kb??~f8YFKUk0OE^ZD-z&!BI+ z5Ps;P*7OXqKju?!Rc;Wb8FpmiBzFr{M%Z20o7yxry)p~oCZ?LL99;AzzS2@0T{yX& zSM1OPNT>wQo~E5UDByB>YH)ds4-Ur%pqhr1l0?9V%czKQt3X_@^||!u-#M6clQzgD z##zP`$jnZCg>zEJ{=Jcw6r_NKMx8avaY?KOwVHriUBsY8UYDnWZJeoWmcd&e3pg$V zpAF42b}xu?a+XC+mgVPna?OB&!mAl!nMXk5E*1$I9sSAiYd4Zz-*3;OA7h1-T`!)C z&t{5P;xAZ-YNgR=Wf5eFoIt~iXrfs;QAQ2Nk`=<#m?$|G)4r%-Xi015s5GLqVvTTr z=y7fy3T1S~JkdE&!e4mX!0FeqqnRvXJe;ZUCWk)hBq!c3bx4yKF0g?r96UM96c5(O zWr`7zldLgMTB%eluT~H-h<)<(&?sHd8`?&Nd@O|a`x&^1^HTc>=lS$+;!j4|TK%q7 zi4cJRnk`R}e~&98<7`{XJ&GYmX}VQpp&g~r?KBAL_nt&JZkf+(DP||pte&vY6eOft zI~cl|{|(Iun_8%lbD zry$N~{^k$I5?1tYXr1yIoFH~B$imbhgs<4iIEAt;yaGG+IHAsZ0&|@{=JjO;1+vQN zjd(&)C%cLb2XR`Uw&mMdD+7ByAEdj2kK0~wXR@4O$mmo&F1?_{&&k+XJ91|6R;#%w z$4)`jgVcn`BQGN-(+K^AovJg8KWV5rYqo%qf!DLr=LP*@pkv;Ia$GJ3evJyFxp)v< zv=DlQ8){A2$$%=V!hHpXFrOGn674`lWWvM8nc=4T?`dw9i~NXXB=z@7^Jq zQ^2MC%I)n}>vl(~a1ueeDdAeym~o|gDs^uXbfs{r`x>sl=Mr?Kbn4^5pZ81Um6B&r zRNVTAq3+|PL{JL1QFm?4Ah)Rn*a(s}zfMht8HL-2QQ;D@2MMYzt-$eoU ziIQ^j1Qa|4a}D>IlGEe+;Is1)tzttTZv5ZlF0LyS<@ZS5DYcAbLBQcmWR*bp#q}mP zViK#gtSeJ2QCt2PJLceDgajb9Og!Kh8Oof}bmRM;feCCOuwwdnwzj5p8cjf;)Z=?pyZ z?yMRc$>KlMK0Q6zstrdb%;qJCuV-T1MfHz4jm|yGyZ}afq$m>3x>IjOR{mO%Mrpu* zB<;rJoDv7E#qAyx;G<_TEgl;e7R31&ws|Z?+FUU_cbpar_`tE2@6UB?NH4H`EHEv- zm`|Hge^N}qEwEr~5Rop>X>PPtBFAR>KG>1 z5no(=O_G^zkYTnrg51zrHEns%uxCoFqJJ#4M?UOo$JyRnuuSBjQ(cVJD4vj!rNze5 z*4`_v#)*ldMScX0E#zSu^B1r6??@u7NoAR?n`5u@tW=>~|4PE`Po>%8!X|sbQ=JlI^q z`J*C3t%=#jqDpUs!+15f+38@Sc$v(a#liH9-Y{gOZB{r%d!%)AWaYVoTL^OWR#LTo z)f(HZAI7LZGZE(JX;h?ciYXt0jD40sX?kEmY>w=TUeuBZhkMLJ6v@NiXLjaAn0;-! zHZttVO>(VFXx?M{`3oG|N~T&Iwe+kUWXCsFcd1v#icXHCTqmNlK!rD~g|q>b3`nN& z48@UkBI2%7^K)bIslU&8V;$|?MczqCPUfd=wa&(vU76B6jtFqZ;@iCZX3qi~r2w`2 zaHsu*?3{Kqs#vK;jB)j>+x-X0Y3PKht3d)yod^t`&*ozLRz31 zUnlC~n}R&zLB8TG@m&IW<%23%S5Y_d`y1lU9&agpUT8*ms|6d%G@jetQ^Cqvx~XeY zb>}oGMnMWRtR0Ma4jL(?WD@T zaSEVUrB?0>w6*NIMm!mF2~tsT3ZQE%#?FjrP3Iv!fVocv@O|;Ib(x1<-4anv5 zFN|ORAy3*K$`|sHLr=Qxh-6V#IJ5?uppZ0I14-9lUh*}Dqs?fqo7^J<+n}U$_g-V4m}%Ft@f}Sm)pjRM{d} zJZo6YGe8+`6xWq@$cqgMcV#z*kkk0LJmuvFWt=eWMw(P{hvUu$o|P7rAdxJ21f~r- zRdDZ#8A_J0@9~D|%9?8#PoO*!p4F>r)@Ub_x{0G}9)5ikk#R?sF348G(ir8!Y?fpy}B{hQS{Ca`{Ukd(c0s zub-IG5(X}>UJFtUm*2Un{uhkcODW(rL0uhNAJfv`Z%#xaGrOm?xfipxRkaL&MqF3O zia=ef4#P;-*Pna+J9()*`N*I0`itpt?b~(vQ8P;WpXTJ%QER3EfHfq=PkV4Dd(5=4Yp0ussOTlZJasb75~M!ew_ejuEiFveL2Q<$CjG%ewPn9b~tsdoiGP z1GpNH+PG8V{GSLILhitbqBq3&HG|0d5`SQAc~9)j3v&&)T$}@e4ev`jXkLD!9Dx0_OInTB{PmxhEqYx%@ zyuR^>%NpDzRe{6lo;@;8&YdDiFrCN$Obf@wgwDyt^Hxjk{g9$~T%Ve*a^ z6EAkkkv&Rx58r9IP_9)1i)+1}sd(Lm@0TblGAVpP z)@E;7^R*^X^?BvyjZ>i9-bI(dlF{YB&21h_yp>zejTpOnQ_c--^aDIL8Y}xbk^j3^g<_Vdfpy}iD8(Ad<+?(b8c{lhgnJ*OFZU?TgaPU2QErqZjl_!fan!*Tm`ah@& zr}le9R8K%lYX00{u0$PjziT_p&AS>QrYz$Ke|!A6>=Rd4^Mw8@)a=AAdYjopN%B^2 zNfE7TN^Jw36ynGV#!8PVQV!!R7bK$T*W|>t0YbD}V6rOFXqCZfS(r%X&tFS!{?`)k z8g~Q*KlIx(?D35}uxpR+nPLo2%tBkh5UZ+ESyc2vI=@^FCZ0mCB$*|3cra1M5%hFD zBme^O`OPfUkgzKfT5}sSU?jBvI@&>d!0qH82W%-2$m!GjFZIezvd2vgSS<&UN-$TdpM&Hjy~8KPahfzZrVW^NmjA-(bRE?PRL z<@qeO^Wx62CYI%9V_S{p5uSi_xll3OEYD`5l8ekK`Q}u8b#@h^5uR>ibq)=!sd0sM zN1l@0I7#Uzpr7M#?OidR!(9)6Q90VY*Z^}2BcP_i%C8TfMzl%-E16eGU2iUnT92`; zgw?`oLwhHh;90;-Ww_uuQ6)|(2*V$wVk+y5 zvkqmTE{%<7iXwzG93)H}81aUbVE8kQoD_4o?9bTrPs(55%5X5H2g1!`5@F+AfV@DH zQ`v=s>WU7)uA*UsRE4rl@a$JO0l_f6cQ{y8!`;)lwy&4#5Cj{{9`+Gu2U@~0hC?c= zptMZ6Qk=D+X*hxN)L#7M0U#n{$VTcHF?&jOmeTxcV0zwzM1|Zjvc-dnC2KJw7+%G{ zQ(@AKP|4qGo?fIyLZ$CMkRNaKZjMQxJF=&bIiphHWw(F57^VECRe6H1e8aG9^E#-d z+4MD91#ocx)XM%oDdy*)MbstT3y9I|?a-<1qU)0*Uq_3v`{na>;rUz=(dcjP9wsSF zCD|BXs$AFsi6Y{^zSmY8Fp~#4OPPO2qA3H^J0KzkBQK#M7X#Itm0j`U<$OBC5C&uD z$K)P?=}%Gb!^#Vju||CT3j>)Cxbe>AxlKa(je&J)BlN%oB_oc@0wYEdrcJ}CBgB-4 zzdTBL&pIm(OVFQmpKvnJ`#ru7H%!kk`~2T9sd&&5&duK^lX);derW%1e@EYnETDmf zt%;+siK&6JHSoW%78bTpZlV~b#XvPv**g(WcC#uq~sG0Xh3pGy_<^WRKl zj_J<4H(;~zLmEDhY8W-WtX{TJ@{47^@2yk3-e|jtMS>y@9E^f78%zSlVJASK1NpjW z-)h=tjUzN3{Wty8^JQmxVfXp+F7;!?A;t*OOa-uqGvcnjV=fv`6vz?m4y9+@O8jJo zNz0^dAU>*-zDqgqbAToI9KeR5YvvZPD-)anunVfi=wAo;6Aa`s7-Is1NrG_(7z6rh z`)jfMNA(#FP=U0T?(+*QBY(9T`k9#owP+|;QnV3UL@Ez3OfM?QX{W;kwf)i=9h2=P zo2$R4cp?ISrS*>uDMs6)>WAATY1YD`nG21}l|AS7id^qG2Q@h%?qjKJu@HZKDg2nW`56e~><;5sMAs zsiF&uKb3#}xyWCB!x5q1@*}HxIYHBhrkOZA+ICxq$%v}Hpc8c*TFe+gg*|>IvKgI) zCL)xPoKGOVpKUu0Jvq954jLmR90jC{`&vL-LLm-rk@Cnsir1w(xs6-P8#0M0RG_cl z{|zmBNoYh!sbP^aIq_0S1xdo(Fp=1PkP~!sKXGxeXzan@PMf4Uqfp|PEJj+E2GnO` za}NtvoupJzHf3%9M^wJ^7j7#3XZBc%wM-6+@q0i_ftxmGFhjID#sG!^d7uM~3x){0 zL85&|uu=j|BtxY9wU#ZojyiruqfK2lbNCe6c%rPjS=Uv6Yd{C|npYNj?&2@)WBzpI zEtmVs2#C2t8y(j=7yJ(GIVlen!**bW$2Yqgx0G86Xq_Hia^x3D zix*ZsyTdB_5c-7SFpDLsUAdL0J#@m_R$f)Gu3n-V`8&SIuXI*UR-g1h)?_)Hac3s$evkQRd|L; zEo7`q9`_Q)dBg>RrYO?))+`(R+64bi0*%q9`8hOY9= z&yeSJkjXB%HiatZ+joy2$Oh5vm1-<^!zBAF$vI+?)E+H2i?GSR50TDVdrZabtBo6q z4-0nIOXZfNT9eHVF1-NrHygwL018Bi{iT%Wkc)Zl*Yhb%pslrF7sBqS__#JRQt?ay zws{v?RO5>wSC~_c`r$JC}YP-_EKMD-Xh{bI|mRd|4qKW)%0K z7}rUJ+&E+i_X{Qk{^P;tA1~oC&}=W}Iko61;-ILjT-6yV>kt3fS1Qeg?U~}wXwWl! z4EZl%=?@r(2fIv#uOU>pje{t9H)P4oT^+oB@2Ojmm>rPoL7}Z6cy~75y|=p2?``+> zP)jHL_CKL#Km6gC&TW!?cHB6Gtr4&+)?D!GT@+m+thF0BQVGjmQ0l}c__%%xH7=Dy z4$a%lYByOm?idwrGx7C58YwqSZgHxze}6BLt3LlX)#@czzt_iiyc~i5c3b`5kC%=n z2HzVHAvca&PNGo0Q_I#zeTleC2SRxPgY{EWLT6nLyK{Et#X95VnZ#FT=1Wb zzvWTDKxn#FsqG0?CogOf?)&)qUG=u_1Adm#(P1wA!{efQ&m2AyP{sU|c?ZSdcY~{=y_qJg&%QYEHybM7|SvjU8|mT?lMWAykr<(sqGv#GGfo zaFb+*EAc*D{3{D7c1Gu9wbI?+l@ya_2zf@!R?bf-F~IAb@#hK_b5C{bjeg%r4eks6 z&ava=80Ay$9@qE%1nYM&D>fmdZb zUsi6Y{5lT$v%yIted7(+sN4|0;(VWJ`Vz7PsB;$}9C04VAF=rJh}2a&#I}GN|8zD& zEVATkZc`*(`D_Tyf-pN(%Zav-Da)zy{m)@cX>W$zoSNEdK63`6`2o z&o@=d^W~3(2(~w4vv38)4z1wi=hg+*nq}y;Se*eq6tOt^;V?I9K11q1WBeYH z29{TBLAg)q1hsaM*AsB=gH9{$q5zBr`GBD^K%4Mto)9#z_<+aCUM&-1XWa63g~6_} zUhhQ5%#gGjqZkCGORd0wZ36WtZ$C?3keCR5LSD!OXo4B$;m;?kJ(hP(a5@DTJHWnA z(2!Rr!hRA=gGwOsox|NvrYJWNKSGk943pxheu~8M>0tHZxf2!8%o-ZGrf8*Y+P_1< z9I2q0RT%On7r|chRRv3^_C(5|?p0_yf1!ehC&Ju6F#H6+naP;kX-`3TT^YuL$o&BS zf6C{c#4QAX=0ARHYl8d``ri$@|JjRPc>mHzQThCO>PmYuZAc>~HUO1^?FyD>HZLUr zixlKXlCR|#M^l$z%8^ac%g zs~G#bwaK;VX``0kb9;uDz7c*iwzz9=jyHch=JX~^>TRLOTXb}KQ{Pf=rbBOTw?g?b z{Bc?N(&`eM)62@-*Gb6r@;dR*)%Fs9jc;@9X|0F+!LH>I|MC~*jad6*g4UbHx@bv{ zyy*IA?ZAvnald}mVo^XI6B}TjV@YcH##_gAz)PpqxeOatGo4G7RSV!juE;Y}pvuIa&c{LhQoJjF+$eiT>s|$KpQ7HsZlF9y^G-*xMdzkO7Y=xFQs;JvA=Bt0w{ipo#qWq#q~CeK6_1$R%t`p$d^=Y|PS?4Q(To+${yFDO2oX?t|# zv9<0}UZPr_+yd+3;6OZz!z684?@?`A74St-HPif2HATu6X+OYHeDbBfV0qk;P`wxz zA5ko4$`W6zwD@HB`ipX8pQdsvrwS=EMSe}fHVqCooE~mtzH->AOR{Vf=17(O+jzZx z_;-5$v-~Tl)bv$Exhg^_cF33hUh3pv4#h25mbM^aTxo}cv&~<&TG|i&)EG9alI6bQ z$V_vo894WD8QrXO-Zx6zrei(uT> zaoeR$k3&>xi)+l+ir~-m42x&#E%z)qyP3-#`7_&;&tffKDc_86uMpZEskIopE;&12 zvlIMQ4YCiRme07)x;)=K)796K;Lo%S_ZvdAr?!l)8eaiB-_xa@IR&#Gm-B6P)aPWp z=Zp;0GvAT{rr=LpozGv{@?D=2GOt@jU*j`hm!<*tUo%2A^8$<4za$Mld?;#z0C^p&`^t~|<-CG3JQ5TG2(;EE z;tmapyP|DqWwd_5m!gavO@y!-q;sdb!33PMFliKoQn@w>{?-{cts>DUg7Cm1?k-?e zh87T=XCuEvMV(IQei%6};+J*R$-b#rc=tV!Z>*RPFR=&>^aS`D7ou%QpMh8ffI1M$ zEDX+&Df{n)z8~Smyktoge39SO`S&&+h_Kxcr5_U~*}b2Sc1gdc1!~ z$mA@uG^Amp%0Yx4K(_kXGR`DV#H;kXcNuMsPz? z+%auKGzF_>0ywrooECC)R9gnM2_YU-vDTqD!)&Puw!xo5I3h`zVpTlpYi@v|=pt5L zp=sK}0Yafz8srFAg+o&-VdwChFcP2{1qFgcin{18KHTU6v6T5uEKA)gg0qbaQw2F$ zYZz1=gHQ;z4p<#fUMFsqinukL-*?QI`5Z}`M5;3eB)F=x1}wO;xdUOqXINa>{DD#B zO{Gxs62-HYM9wJ15~Wo$d9F{}P$q?`K@H%cHRpRYG;fIFvEmuG_4U?qS29VMMqpz&(bU#k{zmbRl)NS@ zvo14FR$80iEYl1vPwZie93H}$$#66lw)zVkMeb9oDIYB>FVRe@X~Y=CDqiVns;w?; zoEXh;yna6CA&+phC8|wO&}2;gUgxCYEi|9%zl$F@PEJHkp%-tdPF78vph#x~r88DX zH$|J&RaaDHFyjrN=E{lZC=y|kL|2b_NY!!~%*IVf zN)K!KXR5rod_-3UV1B_;TU>CuuRHo5L=UYU-VR@ypdMA6vDhcX|;TXI9{%CEedpLY-h{cV>O4M7$WU^Dz3w8Q3!egG1&(T3K-?5@>;+-N1 z#8)MAuMAd&m4%b$fkh^Qc;=u_$R$PiD(SP>r0-pJ<=e`BdF>hYQkI3Hy!tUATzM&w zFEG$rT)k*S`@+6o+6I9dc2ijRY- zcav|}_VVAILE;R?AvFzjx{yt)_==@6@p{Q+Rh|n~G#WT&7Q;`}3T!VYFTdAx)Wnxt zC@swEu1#yL0;P99TuR(7geG%c6PbpZM%o!=jpYNfoWP$enZ(P6+nZgiMK46>4)!4x zeynZH^#q-pfGL@ka``Gs2{s#;2Fodx|3d(p< z{$W#P<+ICyX@$xxY?`?v2rY~^)O}b(^bviqxcbt_ioXfWtZk|-?<+XTs4^K;ggu~; zWQbdJ7lpl~%&FH)8RE_AbSNN**0p>GZ9gH$a2IYNZY3)P4Dz2ooMoaO{2&HPUqqap zAHWnV0_5j&+kcCaG$Q{@Z$QHjk&97Uam^yIWg5I(m?XNQ2M*_63ns#$q#Tu#Vs8$| z{aOw$H|Z`vG+rZZEb#yL4)SH_8`WdsT=&4K&@uLN?Qh%d=#- z8i=4*`Ou`yXS$a%(jEZHm7@Ei=C0sREjao0Cx2Sd#fJ*PdrV+OxuSheU*~3k|Hpm^ zqH+eM$|9-C8}UIPy|zOvQyv>b$!Ny_2-Qw2alASdCZgO)G`|{4M}1vAEB#feOQ#$b z3VgW#dlT0ZnN0kAU%6Wj8)ns0mgk>T0|bi zt(;upW1^!7Ne;3)`=~;-O1A|HkcVhmYk@{BLa{-#kUpkIN;I5m&JwIq+s>_=NaRtd z6kZ8b4G|E@+~XupBhXAx{xCfG0C@k&%bC=Ft0Crj3-V_;X|@+>v}u`BF@IsbBB4jC zvDi1LeQe3=rcN@fSaL{5}k=^C2UxVKDr^6pxc`$J6m*)#nRrJd#dGK~tW zeKG+htV2y-jF>LQ9#-X`GCl;IN^B&0@p9hvziBrSmk|~Z(r1a0bS@g zXo{^2<#yvF5_*FoG_Kmmy^n}=n9?$VO74bkti@a2#J#lg9H2DPTIjLM(#L6$1LXlB zRkEp>B?kp{;TrVs@Z0pf5)8utN=XIk(1Cr$i`S0`!`lgsaFeMUOlF8l5d72MOWZ|m zwkAdvSR)OvdSI{_b>gsutp#M7Gtlj`4x31V-HR%Z-)Y zSYd7bwB)594B%}S>OT{ZbSlFs8I4dtYJ$E|&*@A7pbF6_Sg$BT+`YMGZu`ZrmR?eE zV$M>RhL~RUHT{1!Pj^;u@sLAwl5xqaNGXv~Q61WRRZ#u~nD^&JYw_41bCA8y=5roX zEM59$1>;`k60DUhFTaePWl)1j71N2#HcAt$;K8VvX`Ui={QV7TP4yxp*x#HYX!Cn^ zlR3EqKORnlUom{Jm5T~>Yo9Okco;WMbLGri3( zClr@Tev02p)c_HB$*d`X;f=Ql`pYrcq-HB0*%3}PWnUQ~^}n;81_d>F-E|h#xSPsi zZIlo#mvoKm&cEoJDl3?JQ8%GkZG0_6z>tyay_RjRasd~~yRHVaN%!Od3g7MF;ty!p z!&QMsaIh6ah*bl9eMxU`STwUJ*BSb%qZ(b*7f39HZADZWtHpykZP@5S%R`w(i3Q3| zfsb3%Ge9w-JIN1;$Z@<7vwJTeksA`OMj|^^8#3bzT~s%`I`|(U}AbhU|N(RsFW`#c9o@y&kB{op9K;acBtOww8dE ziql2G50o%@cr5hP0g%0|)nBlnhgy2{>+-gZ-k~x;RV!wgrYDO<=~qoNC?HOjHR4W&cYWFq1@C)E!fSDnNM95_QBXu0QGOOw+6(g~ zM-6~%Ug0E<#v+b+c@2pePM5!{I%84d>>x${R>RkWaD8EJ2MM^7d2~!oHKioVXQLWy zhSCXd0(3#0V-X1o)Z5D5!VH2OliQ1L7;!QHSj>BPa%Bsl_HkD6>avKApIK;Lm+&Ua zc!F3w|ClImrjn(JuZmeK<1Z^UWL}ia7ZxOs*aS&?mpOM)Q`Sr^lk3i~2`9slp%}H&$1@$W=D{^tCjF1cD+-#v3bvpkO`Pz&{9j16Zqnt>jHyXBJhbw^Z z!kH{pp4CtYT2Ve6UywMB2!iER+E#NMuJs6Pf_r^w~4gBK?s>v6;calvZA#2 z5UB3=%Lbfg$@!N`n6X<$UY0mja@n4fSCeJF-(u@94{6tBsr??y<7MozOXB*v=1u7j z(mc!l@HjxHk^MLHBbxRCs`B1N+GHI(?rA<)V~UwAQsp*}4m(3Wob$)ZqjUk6ZQ&XX z1TJDG?Q8*G^t)LIyaH!p_Kk01^Fe(9fp#jr*mZrpG;>czSJ+!W8p$x=&68*^x_G{E z0^!=QguRwwv`q9)=;+JFa+U#9SP6d*`}dnHaT5IJSJqgEf!Avwlsz^R`HH~kY)cl= z^OueARVaBw*w_C7T|lD0N4njU&jE4eGiDr%jc+fZlOB@!ZzFbxEKsBAKCAC^* z9aj1N{kzI-^eyxuPDII2G&8QxxW6~=lGNB1pszKI< zwZ51JCNbG2mMY^6@f?E(_tf~|J|@woJvaopkE`xkxU4d`5I@|&*6&+Sv4DYItF|`F zQCrQcj@K!x!)x@!KCRJSG3Bh1L8|S!tP%4c_Lr6H`(!#r7%8mj0|af<@&h&b1?603_gVi<+<@L>tRlaF{+QOn|Tl<8KAbmI4x7tf4`K7wq3kvvR3g&lWXEnCO5=OCiimF5I39R&*EiMydqv@&^K)Ld<|`p zRTJFZ!h^o_?Vlf_(Z&Fh;^p;RD5QL+f4Df_`(!limwcDugQCg zznc6=KHn5yi3?g-pdq!r}}&+-eWK}LFp=1ggdO*{9#qXK?0#GR(tPF%l^pKOX9 zVy7uu>9i0J62z+}KM8M0MyH$(n$%5x4nNnFf=(qJ47zp`UgHPw15N3YDTZ{LGF6(U zOp`i;$;oSV{4K3anJzwHFunuU!P#2Dlo_&Q^1j@+I=4DZYVagT z_1vI_Fens!^JHeItWMMZ|Wn5Bh~qHavgrJbLBmDPsqZpt2HAO|L@lFEn-T3Df0 z<}pN>Xv&@v)$T4+_LjM(>_hU{SN3CYa8gu`x9y54`^y2Q94H5waqE0d4rV@!SqA8X2ya+E1YW2LmGw5LruMjl|w14$(& zb_7L+_GB|{D?6B$MAq`9Dl5HC2|FyoGNx`FV1h$sd%{O?e0%N|BCyE62cLLh{X> zJ?qd}&enaFS2X3JRPn>)3{%de+Ly^$CVz?l*_5;8;SA0Wdf1>=R)r`<+J^`l9ipR= zxwLm{ZfM!%xZK+2KodT-!e`xDxeUEWZF5bNzoEvL7t;CgY@MJh7c+M@%IX|#PH4w4 zQ_hj)rmUcv&n4@+nLlF6c_apjq_l0kW6C3l)kktvf%)1?49<-vg1wDrZmoKL-_qg8 znGv?IGFY|2R5z3%s^gH{8sCy8dac^oN|azqFc++GA--L++RCD)rhX+YeJw7l59OCc z4!%`L2RoBS-|@|U!~-UOk^j+@3&_MDMQk~mH0Bt&(2$E5oMUaumgkfb-rm6o7YJa5 z+P%2BiKse=!lOZ!`Na4ncTsWhGb+{wmW!-U*)2?6D9+AqCjW~6wOzI+-Zp}!^vNZrTq>&!xs1$?-;~G6 z<)*BWwI=(FePqfyS#Qb)hCnhiW-lpI9xv+|q=#ZG|Z+9(Dkrv z>|Lu&*+e%ig{!S>T9!Y>ztkzBIriREUzNYMvc{Av=w4$-OvYf6TpL`MI@|CgdaOb@ zr;E)2A4y~Itvp)cQXSHYxy4FqY#DK+G^AJqloll|<)tf;`cbzmX@I@?=U4lc$*SRCHt7-P%2d*u)?|iO4j3 z$1X&Q^0%fujpBlXIy&TGYGoSQ>~HwDraYbO_!;s{L!L$TJKNN5(QY;6@2G%8m5c6c zH|04J!RUGN_oh5wUSP@#W8RO$o3I5Gktl7X$O zugeR5{VX>WSy1et%-d*nhEO-d7mja$om*qf8%QFe&NG+Q>#eC|gXqQEoEj zL-JumY&GR(`3Qs2?Vn<1h(}Frjkea5kIKhP`MB80U_|={cTDYC?YbD*QlZcj3M|?p z;TXzX`~JAxrM^1MrYd(Z1`|Up8BqNXD=Pgp)<^c*C!JAqQ;6PAn%Wrc00sxPM=&uT zt2U;5irAmXdWC8crv^_mNQ?ORkSU*$&zf?JM7}*IpEu@c$2hV4`qg#i?L zEgB6TH6UYs7ogD9ioM9sG@zG3mMOZK@-6wcDc_Orn({sQezHMTkd2Yj^`O>b z$PY~Up+tc2vHZl;9@0?gx0v!%?O`JDXQupIeqm~7X=fYqOH+P@=2$#!YUgO@A_?P~ z4s278X!j?uA(UNr)98T}F?y053*zty)97XNj)eVjm&~W?vHgO^@6=+SE?h&R{SlX~~?c&{VYrF{0$s7-|^9NJ@sA>~k#9 z$TN_9`3P%_k;W)fb7?6i`+{zaHpV0iKWyVyf+0XOnlTP&4=M_yPoy0v+gnU~fjz>>OGL2H>P}4Y!gm;E9)6^QZ<4vQCQVo=vg(+jU zakwFr7R@n@a-+gD=Au#=^Nb@5<4Dt(Z!9p4ql}~JaExgjYb<1t6V}7Gtg^8j!&RU9 zh+I}!7=@LzoN9K2JL<1^hI(ZGS}NqP&o2*-$f%bR`J(WRVo`o0LlKjG#r~Q!l5L|y zI$1v)_toS;SDSs|qZrKF&EE9ja$$Q(FjBq&kzybT17nYJB_3TNn%nt?b>(Koe#SAe zD~LZjnHU^K#rzBo=*Y-lVpg{~TAsL{yp0cqB==&RPYW8xqBfhk>rK8Bvmt($w_(t} z-ib>LdD8yY=f%b)Pt};OC?poYc;C}PYjafWw6?^SGkRxc!&sbblf$=SPHeZrdo36Y zOjv@wMRLbFV69nQZ8RfVK*P3$Mxd08r*T%cC6?tjmT?$HRhv?h)ZT`MQQcU2D5vgTz~0#G5d&`{k}qvgNVUA9la& z)TO?rIh8AIXPrHGNX#TZjMw~uqCmjEw2rVRO%X;|8au<4CYMRVm-J<#yuqC`NHgx@)quWtvaB)?kBtE}#|Yctsf>R&C!(Anepeg1 zIylaGCg!W)SZbMqY?0MBADUE^KD8+aD;lM`$om3oNT|uBi?;<8eM|jao<}^6@@) z9rmf@E@2z@MZVnAzw0-%BD}BtZTcQzB~FX}Brdw+u+psC>cjJ1f7`EgbH>i%SpVZY zDqFi_?c;T`(+5a=wG9}vS2i%nj35ok1cUUjo%K|syGAOtGv_j38PZuR>&Oljbqq6v zeVGuE)>4Wj2POc0j;*B9ORaD3Ax0~u4f_Kn)HZAw-f}8xf0b8jXl^2u6q{9&)B|8~gKX_wOd$gC2d307Z4TJpi0o&a&a0&DXPkElkHxrmD@}dR z_azj}7+cw~6&-sJ#&oNytP6I!6jfFE0)b$#7oedbF%92n~$7qp26Lm#?CfiCTk zM29~2hJh35QfM-f-E|V^5ROf-%p<{<3Xy757lJy|>KmhsO)@UFV{1&KzD(zd)EkHN zDUR(Vy2pzV+gDCjWp!wC(BK5E#61a#KAoCyC(pL$9V=&>Q`tsTloPfMX_%>HFr|Z$ zSSSx#?SsxNn0b&GnE?k>I@c2KE0cgg)W(cRZ-E-=QLBn$7r7VNY_NF$3sLP+8bZD_tI=0mzrq)37pRYMT62y4A^ZHqmM*H`Ouqxs?eE%S zEI^g9N3@Y6G2>i`_ekEI6_)YF)@ajml=!L69QJm627GV&qf*in4Qm$FCmIC63#=e0 zPQ57-bJlRs9O#f!A&y#+k+qHix!gTW-J_!>RI;fh(~9QKsK9_MTFIO)X{BI_v9s!G ztWS{>5$cnnvq+Xrub4l(1l5wPPhAM&rsFxSNO3Mu1+2v=AuEQL z>~$!irC)T-S%MOM*wy4_ z=G@P7z5(NGQd`&lMkPt}xDkVGj-601VlMHlJ>|n3=c2|TtZ9PQtc2tCY#-$=CL~hK zR!5WzIUIXN;m|hCR`l#c8VwEQVQ;Eu=aT8n+6c`ZoEB&5Op>8OSUy;48fG3&wgZ!? zay$xzhMmK+OCe#j+i`kZ9El-Dvd?wI6Q^6$41NU#ajicqx8IrcmhAe!;Pa6r z&2|QGrqwr=)z{HJ9}H^SJ#iyR{}ithRBH`Sm|_8AoR>`xP0v zD|Ym-ELt^bBM>}`ZmGwzx6$9{Nn$$4ZW!5Qzc2HvSXR}K zjx`K}5Lb-(HBOhtfi;;HFg8CTD?URt3f<%aGlfL4Yb69(t?559<_g zhQWT-4dv~PqdP+8PSyzK9JOtZ=BT6~InM0F1Zz8-9?fiLg-Q4*bK;)Ucvvsa z;yGtFWlj`Zf(&6p_5+4=)N}9F+{+FK!SDpHSi}C)kh0Bp zgqg*DsbE3-UupjvYKE+3`(r=I_piOZJNy|^?E4;REW>Y2Sppx$o+|?cwZsP9M z5aI&iL~adp&$lfy>7d#;SrXPuA)ZND6}?@>d5%PIrW+rQw0%VREO$N5wu zgD3YK2-!3H5_I7EiEgW7*a{hw-xasKDViJs`_rEG{w6fZK89cy|LWgsiY0*Ez10Ec z?q&2IUDXaT*YPwA`a027XmvqMtDpL{Tit%N7~AaZ$T+gpn&sOgV!N6~-x6{w`Oe3> za%asenKP$!YRSUcbEnKGEnY~`ad|m?_n>rIX~`T6h%>8bLjwd0)BLNfH3ca1gX3nZ z=7_0T-8~{c?HEmPc3=lW+r8M8u_uD!4usL|=kd0^K)3&z#vA^CnzLi|`xV#MHq_TS zQ_0*I!!|YrXmvpwdq*v3kEOTvHIB0MI$3%K^WqF>w11|0oNzDseZ3E@ULIAqtf+Zc z>PvyieOZVyoQm2Km1D$|{>TXN_5EtS%^r)=?%rRU)kb*KJDfvd6DvcEn!5)l#5mQN zmv}$O=sAp$?sh_Qom25&r)WCZXA!=`$?nX=NIbd{HWMSYxo&w~{Yrbhp^M|_A}87~ zXlVbqXY!I9Z)%U#m8`Z!uC}@k=UO#oFg%IX!eLF^y642^S01N7zr*v?_Kt~9bHv4t zJvuT)ImD>6>NqyLqS5Dz?P2!Ptv32uJJY@BeL3y*q;aO@c8i>@6?wB)ZD#s9K4)8{JdYip5}E zEbb~-6UmP>e;{mF9{EYVDVRaz`k#`xTSm2a%%4FzeU3YPDM1(2d1GCPEOJ6eiVV}S zoUoiD7SO5A$cQW6M)gUtD3fAUF!92sJ+yz*9`i9_G-xY|v=@kXjto7msEfgednv5$ z_-Mjz?->#GS$H#iHoZNMHQrv*iFY*G^WEu@CayU7>|z_>^hM@cdv?V>5wcE)#8J1z zGhJhIq|S**v5H67H}^Xci_?-0iPk;)Y6{4ns&ID1?h`>9(BZu&><+3nzL3$@64y4T zgT&uMs?84?#9eXM<_9Jc%*AZ;`vHk&E$V&PTkLIM>@{#fH~OFvrauM%&OX8OPovI1 zi#q>2>imnS^DiULd(c;9Fx{Db&A!3k>7cW3+28PqzvJ07;P@B7J#-_mp~D^oexG{p zJ3OX?hR0c;!)!=_!`VOZEXR79{gZtUpi=+BTp8x}Z}uNM&wM(^UorFn;Om|2q`G*N z%Eq)Fu(Hv0_5=G7&okLi>}NZZA}pMWN*hYK3~K?c1@!35YQpN2=F};TZDYUS{Y>^S3`vf~=p+se*}lik^EWGA>(*%{o`R(7s9 z*cc<;!e!-j8!l(M|7Acn6W-U9AIJ&%sUt9!*QkVZc( zkh&IzZw7PzW=NaA5z@0VTA&j?oSBt{i9AYVW1LTVM3v@yN~2q_y*_McI&M-KXKmt1O)Gl_pbg=cqJ03=UTwC_3K(+X6qf&^hHwv@BlXJLCAm>7y}z&JZyqP;USm_n^8p{b;vRv zrJ)-(QsPtHlzb2|<~YQd;}BzxMGU+@lXpj=X^JeQoz|64@Cp$l1GF8`Q&FKu{x)oU zh!BiEL266N^+*Qd;Chs~US+IM$ENiz6nK_PlF`R%W%|%OukfPA^d+Kfg>HHHSieos z-#SelN)#DTs9WS4xCY9t)F6wHhS#tOIgV0_kb?_dURRzX><}I7Y=;fc8md1E!{%#V zQ~=B~ue=3D9I>wTNw2;IOs`Jm3xS1K&Wo_zU!cH(?08 z4I|(^I0)W{3Ge}wz^7;(KZ5{#4yVGGa3*{O7sJ?D@X6bFe?9=IoenqhfqW3&^THK;FdqU^ zF=r^qR;-+1@Sz4DX7J$#&olT4gXbH3BtZA=&;{8x5!sd&#y6dh3i6E`Hs2m2zL884 zLx^`RFcNu&tQ%FRZ-&wHhkM0F7*l8{79CLN+6)KIA2!@8y@uDd5emwN4$JfEEiiU1 z82UQU(Pkfn4<6hCg==6urp6Trk5~h89gOgjaP(_|@dXm!@}M|OK-r(T20G)CeRnA!(f&H zBUvU)W;syKyl@Qb3015YENA^;1si}?dmx;}hQse!9$d~w!?kP-^5Ot^kQFE{HlSsa zP^h>gu$*ChG#`Uk218eV06!2ZITAYY0zMWww*qqcLHuC6TLoiyA*M(XA9MKrn8WwS zY`#y1lleG49{Jt_xjlhTL_P&Al~vXx%*`rcGPo4~OF^`vAc`>l7a4pCXu%6bt>kQ@ zZ|lx&wjH%-8w~9gAs)qiDk=quM>aMk74JN^2@WYku9ZFnhelYm^^Qe5jHIUpW{{@a zH!q@;x;c|{w*|@yU3p&DLokcuwb_L!bnWm0w>M=g49|NAtrNbKx*5vRdsLK>>dt)> z^G(5byeSXCJPnRm2cx_x9{1=iFa(wS2tz5k$Gr)TET6A?UFGwIx?MgWWmoAuonmrb zYt6dW8F|ryG9J$+zyLN8hOLl#CzltZzHh4*5^G5^VfhY?+KVs=>=o?)Wx-6hB%avfGq> z*U-mQ@naO4IUNS@WBEd~`9T+L-3#FrDN~0drvcq`-gffViz4*7k}pOI5_8reQ%$^c z64Gl)fpX7<(jy*)rGNF4drLJ*t*u+@anWYjTHX)`y7fFAkG7J z5mNhNFxej+wo9s&4~79;qDUgY|qPl9>2#DCn(NXo_Q94IVIf6Ek?T!B^nZJ0VZ$ z*h+)1>eLF|!4>~eR4Rvkd^J_t*0dA&i580IzoGm5B!05($8X105-mp%^$~p`wF}9Y zHx^1v2MP^5HX&3(7u}4EP1yoHNGDdTA$Lm5UAYF(PEu+WJ+#^~^lq=)w&ib9O4;%g zkkOLh0?EONh2{qMjn}*tJ$vgLUUMtt^<2~XM??jw4nBErv~l*COEkT zPFdG_>jpU0Yqr2|N8G76Q$}s1#^V3(b~+zxrxRxMrZV;3Y3raQbS);^)7QbkHg8j< z5zw^28AzEk*R>7^N#eN(vw_`#l6WUd;$5iscO&Gy2YRvlQ5qjW{eKX~GlU`RVeqld z(8wNv6WF6DSC7MK>`C|odkXdbX}Af0?_$rv%j^Ysm%Rud;P1!mkMJ3L39;axVF!B& zL#&sX#$IKa>^0Vtz0Ue!dLVm~4P|e!JodID-Hot`pTbYWln8sF*z&7=;CAllhQP{=6_I2WCD8w>=rSLPcj1YYh&T(}d6v+o64Oa&c^674 zq5WNTbS-i)31jcye0zG^9nOO?zNCL6otm{rh79s!td7vGwtN*vE#7ob=N7oM(Bm~Jab95#R^CJAx{EhwD;Q|&UEZ7)xU8_NH)jjvQTp<=SVf}Q z8t8dOCi8akbXL{u>gnwDc)L&?QN6rfw&3mTHf|5Jin*fD>-A#Xsvf}eE7yVP$+#K} zPv?S+GdiQmU*O5~WG%w_W?lm>PxiI21Z$qX$dh(Gx@^_7WX1EGL!qsH& zh|1S+#E&~ZC*#+bp1T%{rQhp__tXp*HVr-9M!4QF42b>?$K!{nP#>WxeT+)<2`a{? zs1lz+AND!Asjpxh`x?Q(H?W9(3rkU&Yw=C$Q97Od6E0%^g3H*y(K!4Ejl<6vP;A5S z?-$sF(EBO20~H(KRnFi|{C$^m_?&C-71!Z=jNO04-(PqN1MX(2+{4m&4)gFXtSdsV z?%d0IVVpjg_h6%VPgcl#v0~nvmGeGq0q@6_@&0T%AHYuG1KDYOFgu$MVdwIp>{>pI z-N5tM9ef14m*=xh`~bF@Ph?Na_Iv1{j zLzNTFgqvUrKM!4Y7TgJi%4KImGhD7Pa0XliC-UE;DeJ^W!6nMcdsrcytM29?Hvg@1 z_gxTqAFtl+ipIMeKc8QKn%@U*SB}3k+L}T9LcHri-t1HkJq&m9_i}6|}>yGsN1E#WAFE*K9f~jow3Y^a`rJP|t7yL4QIiV?jR?sB# zvw|iWQ?^OQ)D;LR&?NIy72HFUjEM9~WTX=rXEe50cQVc{=!5jU65maM zaY)-WNDa3#&bb6tRK9C5Wj#O1dHyOi;RIw?LibiUD9lVFz)<}I;kLR7FdW_iDNIEM zCD3WtPcs!JT+Jv>;1vMcWY&r(u5)|d!k-lu1_JmA`u+@kTaiDWq_d#+8U7(WHB{j# z3|>}F#r(EI4j#R|wu9H;*R&!)=uZLnGGjUcbJn9z{A6<)% z?m7plU1KA)oWw}&2FstNQ1Gij*k_bd{_I8q!na^I_wb1582`szD z5!l~REI|NFiR!rs$6Q|1=?O~nr0Um^Fh1vXD@2w)6s1LaO>a7aF@!-GYZ2F@_?Q?% z(tAO~l)k0)GH-eiF`df_J9$zSR&(HzR^Y)usW-ySh$TFPm~y;nL41_v@r*{iBnce( z5h!&D-snQW$xBFR0HrTqVZ#c)JDxQ&$2^o!huQ(8~Ub!fxJf7GTop zoB)%z6PD-ADeQEH2LaPjo@@e49#1v_rq0*G(OB`$i#(|Wm{ijhbc7O5HUXy2y1JEV z-%@}HhG6bl>nv!ba_7_<1X_pNFv+xf!gnqVY1#)EGXvj%nsz^G+5@O*52B`_ZQ&2W zc>XXH^UdhAAAuwJV{j~g94h&f;O9?ag#0x8hChQ^_bi-;zZdf7;8OlPT*v1UqelN9d+pqc!U21HSkUNJAWJD%{wUH@1oYdhg$am>&8E1J^4on zX+CBL@K4zU{u!IXKWB&WuUVPKS-GaMBlv6V7)`QjErr!-sce;IvNN?bc8Qk3ZqPE> zMlG8?jlWy9F6;%ZtAZY#P<)?-KPVuP18=}-3P^Opwy#z|qAUCz+eARZ%O==Bq8mI2 zw<#du!MN`XrTeKU;3uK(AA(lkNLJ5p=7*v+_p@X9Etp?AtVBpbuq6X-WCQrESXw8z z9f6t!dG12kwvHeL+>0QNU`94{-XYJnq<+hn#rtekb0$JIuZ)AffUgAYnZ<$$84QG;Aw$ZiRu-KqA)Gv_c`I z@A{!23V_)FJ75B#0doF1$-ZU5hq;cg-VR;y6n%fi4#*A%0)z1wh66fWfCC0vkyRbd zMF#s&Z#VcI_z&BxcQ`X6Iy218Ow62k9k&Eb?&Npbz=WfXSAG4wKoI&kr$BmSSkIum z5f)RIABM9Ogj3>tGU{6}2DUo>Sg6x)9gOsdtHJGY6^M1vf7tM>+oTn*3Cj?9T%%?EiiC6IdIJao61E z4DB69JqubMXxa#HYx$6=jfC#nDCn<^hCFQyjMff-soH@sT^kECw1Z%_b}*D{<6)sT z5gPEf37RF^2Dre$Q>}+>V{1H8FEp;J=B z&ggaHl@z+tP<{rw<5;vc=vhXk$TJ2!^%@(zV6VRjYzNS~U#Sd@x2^0tab+ zDAtaHL$u|{+T&rq)(A_rW@PDNI8|E-zt>hdY%7NT%J!#1A4HbKHWz}dAS=fpE6GQ= zk>K@;l{C_EzQe%t9R{B7Fz|ebf#=%{G|*$-rx=(Hrzo~rqq$|E@5H#1nA8drLjgyS zeRM+wPRP4eXxK=pb6U}L8F8MBV&(>9rmm(ekUyXyrc9(T(lgX28k+u-MZ*-@sYuY@ zLK^;d(oRzZI>36-X>O*|+)SsrnND*vt>#8|Wk+>kZ$QwYq)Z!tWTg(yV{|2E*TDqp zsyb^e45RZq$r@b+z3JLr6tCzsaD2g5>c1YYwIzd!z;O4qf5lyz{SUXY^RzJRRERyak8DD~H&#NM$E>d{QC z51J_yN@c0;v+a^w{oZHUC%Ypt#gnoY4o1wpVGE6d=X;GUkfKvj{mF**4i!eTLC}ca zzb5R}H87C+Am?jT4VOma?xYrl?x0GzNhRXhNM)fBblW!4(V7h~9FrG8igp=aFTpq3%kWR_75G7W z3wCO6vn=gH)4bnbldD^G!VC^$jsC~(%Yu~V0+PADi`x`r2`%Verji~Kip$~sR z8NSm&Q+O){&VinG>S>HB$hf*$9;7M#A{=#$gQJddaMUqDvBi`vwwSWClu|SbFW@jl zr=kEZeBNl{U|VPTL`$ZG)7QoiN@R_Yu82?;w@s z71VXoDPky=bl2choM)NpV{!MKjJdEu+o2DhM@&R&;Tx@qUyR~&nyGa(4RNNC6ky0A z^t*;Bc@x@Q!}E|omtvH&g)Y-mqv@#!Xoz(Sct|xKTx-2~{~GHN)n9B5Q{BaQLA%S5 z9mIK<`~i)_kC37L0y!E2F`Yqwoui!UFibaKwC;jQdJ0U}-B7Bh!;yLhEYP!^sY;_^ zFyDj`2APzj9g}jj;s{eI!meDU9!9*asT84hYqTvLM20JEJM={)v<(T#`DTn!RJf{T zp%kD`fSpXKK21Z2>_|DsiA!5Zg{)4JwG@DUNSZXaAk_*ZO|2l!lSa{F5qhIEiXJgC zP50^>VPjzi_1E9)%}{;P)RBS#CRrnIhBqApE^j(ho+}MK*JDcCu{P@<-RmyI5Vp{@ zt~EeckET%vHBagI;ZMLOtfY%{_OXIgt-$n{RQADGwmG^m&5IRys4$&+vs>Wdwa{I4 z0O7^W-tVq$;X{2Ye59Aa*ZBLLJ`H}vdpq<)72lsg5M2TJN}JN*SQwzZX$G3z z66HXiYzS4Oj+ zzsmOESAu&dO}Ut-Iyrl6hklsei4g=j?;SA2a^62dH+L(xCmf-jt?>F;3ck-%4!jk) zmbQy04F0SN3IGaPvEsYVEC&2p~0dJ@c6CJ zx#wDNdGs}qGHiIy7I*@!1KxP@78)|ndMf7r)7JfGtozT#+}~o|-)h}|F6RF8*8LZ( z`!B}a|0CVc`qQnD6?y$7y!z*ut1tIl18JCI)I(yMv9K;ieKxw;!y!kX1HJWfRE@bX zNIwD!^dr%H&4&{GC^TWmz&!m}Sg0=qpI!+|^(t7QSHmf~56;w=!r8hXF4vDkl~@k9 z=(Vs;uSd0LfQ|a`@TlGd&*;tYCw&FHrk?L;R#{02VOPj*ZplHC#4Pn8%ll_H_% zD)qeTM5NRUm?8-I9?zo5Aq>A+NG^C)XLycFu=J?^86rcZA@g74f3#<@-Ux;Q zvi-bbD*|=76)nr~tXJ#-Hr)!?tSOWs{E$PsqW>P;`uRw_3!xYO_SG+TX1ri_PNVuc zI@r(A!G6lmYAW?7)OcN`$Q}rlB0p>Clm@JC1ekq^|Jknjax92m?1J@u)k0%=c3)Sp zwqcMKMIu$d3bODwN55Ltbg1>ZQ`0U^O}jWX?V{|J7Ey(l`73tVe39*IzE%U*hMH2N z5M%lVc&!j^zIz=aSr<9j*9%jv#2c#n6BBfULAcMDTD!+Z1d@If_IV7*Ya1aW_oDG zR2_8+>$js%xdTl79>~=1Mar&+9{L7Ur2Aon{s4^CAB4$>C1#?}oTonw)%s>sp2y%+ z{Rvc_ClP3GfwlSzs5mdedi;G*{}Vi>zl28Q&!{x7z^nRe@PYn1e5wCMaqI(>yd0E_ zSNUs5c`x$ibrq2ffKi-!7E@saB8xW>S(q>udh@sV+vpo6Lk@ojucZ^G9BzN@aQkbA z+g~dg)Kuy)TQ0v=5+GEHdJ84~{Y(w!8Cc2(%7?gMCR}6JY93r_*Qy%PAx*SSg%!}m z-{tS)^QXdb`~&_W*6KkxQ2DNOcnpT~kNC%s;V86qpcLYl>VZVLwEJ7yxa8y7eqHNm@=# zmg&}#T>(9jvOl3J{fw&g3uNfq(NOIGk6_SKXwX*(7$hW&6b2k9TrggwK(R=NIU)lV zi%#GdnNTOPARw~g1mS^GL=K!Ky2E9n2V53r@gMn5*620*#gtYk4)tsPtVA9` zO&&t2ZR+1I7zFH~uB+_^-|;h~rX$5LwGC2JTqyoKd8-u;uuri>>e+nUo?Fxc|F$M8 zD_f^#xhoTD5R1}=T8mjeDl~>-#814EE$|=9rcWa0IEZflu*RBr>fQuDB9@0NLQE}y zSi`jeezKm<+zda@S99by!nQ(}wU*(RH89pnZMRl6grbt(PE@jk1kkGw&m%e6NwLEF zURTsiRdFClQ2?em7;?lo$Q2V{fS3sRq6j94VwfVP!gNsrv&1wwT1|F@4~2#I)jPTk2|b>++p?OJWFGW)sHKiNvwV-II#il z*Em``ffo99O+$Mo5sF-=>1gc?m;k3K8y7;+>M4zor*-cWdu($wt!v14rblWrxU>O{ z-Ir+WsN)|me3_nQt#H_ekwg@})eK;oOG~jMLboLXYzZ>IwNUjiDdr0$5|Yj%L_l4! zL_m@Vh!*6OV(OsbEsSQNAyn#-%{UpD)HTRzrp@>23|Y-|>%m9yL9rIx_#@ZAbjqoP z8N}|bkdGJfk=|jerLtLyy<94|Kxz|nlVqiNQ)YT4zK~i**)AD6EU$%`lurvwTMNU6 zXS4Jcmazu1HnUE&P6Ml(vXN!3A2xgw%d$F@BubB0w*|EGW|pm2k^3E7*OC-h=Y z2P9Q0No8GPB=vIi%OI*yQhm@#EI~>2qogiJNv%Oitw%{c9woIA4iN#EDVpI(u>vLa zOqA5KV6`|KP7}X_v&Fe^fjAHD5a+}F;zDQ<7sI3CQg}*S1}})q;Z<=ZyeHPcH{xpe zUR(n|ifdt;xRL4NX66yMvH{{wmM`vN<>GF(NZiA!#Cj#|XP^f@1bS(11kx!OBahQk zH4{@WVB|@2wNqGmNEg@=r~hb)(|@!Cb-`5qM@xdbz!qt=E{#^6%u^bGy1-^D{Xkt{ z)3kI;7ub+6U7&F|t0tcinxr>TD}?=2P%EZ^8KD&!N-Hdt$g{Pg0MAecJVYy`m;!gEl7yxQPN*TN&h2C`b#M3 zFQcTt3NyrOXoFvelf)Zvs(8z>yA5G>_jHG3r#p7{bd)uZvb(1{cK4*9tU(|sYfu}M zHK+>88cd6_yXtvM!qmN>gyn%2Az?W&61Ib;Tz%PwAay}5b=ABUm-Ge5y)5L`qd~9B zdefW{mP_k0Y>pY07iN8^lg{RvGLXs(OX6CJ<%MZv(P&|P)rb-shWYd>OwDHf35ucp zo#>^LTd9xDTt@>;%0`;R>H%vZo$PEj8%Sn#GaH1q&SYfl*hV(k8lrj!GaO!E94 zHkH}JhS8*9T0vsYw92EEYiNeo!EpQ?9&Nw#;@EEt{<6ppkFYSP^t#tmam#}h+|2T+ zHfriA+TM{E#_8E?R35FsW1}hB3eHGD8$Slaurv(A*a2Y=9az{&P4r;aL=RR_n28T% zwy?3@Gz=f(%eON{8s$6Hk#B6R!W`}vb`aJa<=Y*S?^hAfgZKjF`%ADE&7~5<;(K z9`K0l2~Wyi@QmyYFUUUdy6g|{$^r1B90WV$5C(D>Gvsh)$~=}KN3zax6zd@i*a$h6 z9Uu>4WAS&qJeWkApI61r>sv;kiCk4 zL0rY|(*`SCmBsEUkS0;IrOSWWwr$%sx~j`omu>qm+qSxF+paF#w%NDu+?a^DGcOZ2 zV!h;BMrN*kcIH00zA()Gx}DDpZ|lj>7)dNnNj~CO zI6m%?P>hi_W-TbunILo?Jl^p^5`cf_*u7g@od^q~jj}G5TfT;2XI*&0!ml6d)oa{l z_@jK+a@->-?$JdNtg#EQDysBp=6ItpsR_R(E1G{lE~vf(S!9J!OgQ7Ef|ExBXyQWY z+p)c*iQtntm{phi0~-h_#}ABB;f4R*C6gmqZiSi{V2>(wp& z9ibQ^lYAEvEH8f?YCrQG;daXgA2yFpc}!#4R7<%aiJ?i3;i4Y3<#}N&ra$Ui&+prw zpQerDtwB*fLtgig%zdJCrXvcq1(HWvDg|^*GxWRbw_1H-;VLf!6CBC~r69E>GkBSk zoj?VesxiEgJoFD6S)eL+F@oA zTl?Nt!{`oe9U8m9?FM(ekMwTSyYOi(PTgPCUW2TU~`u!^L3c>A+8rG7jBU+>?hl!Ao^JDO$f+@ zmbYC4RYk~zCRpwVn`Er|EwECn4uA6Y2dWF=SY1>oWtR!o^Nmx9oGaq$PpIi|__XJk z-^Xze?b5l;iKAN6!z$dySXt@L%*MAPyv{OL+9vVhlypdE8Ow0kG`WMFnc02^Zc>3b zw{dtyk3bhqD%dDScv`s#_e4y6psoKA3YO}D*E^~*5+m%!XPcYUg4~d!YZ(Lo&ja%BVDPAB>~$^XD05~1XvruG#oka5W6)m=LPcbKUzC>5~%1^Y3}ri<#mN$ z!OFjnTk1Tm4Iz$QAu8zfl>`0|fE8a)UrG;o7n>WCW%c^C8plK4eS{wJNk6^BpWhTw zeIPp>Nihri!N1+B{YYanjQoT(AL|{!e?y>;-x(l%6QED}8UjAAfPp!dd#pv33uQ;{4KW|&y z`1ib>_|GEY!|R8y?_xQyub%QB0hc8s2WnkT#F}RL!S}D4g9&ejwYYYx@rW@#VZUbY+y;^wbKNy_Y8U z=!fNo0^SiK;D`HUC1!I;yw-I$*uCr&TIa25QrPP#RCjS+oJ)Ym$|-vE0-H=CS~zmP zaY9O<0D*5b&Ja4AfmHHI(XDQ%@g)AJ&NVfZxbjdCsv|PfK8Z||2;6T57c80b?RAkF z%Qy{Pz$p{&;1?;z2(X4(%_aDa6kG$Cdz(BK!a)kReBjtP=9YWGEq(NIATR3yE9yf| zR5FR%%FDQVzWk!`ZQI?0LHjbF3Aew;v$ZyaBvTg|cP9|${Dz>p+c`E$iuD+d`VB&4 z;jX)w$@L<;*$uEAKe#F$yJ<*q81a}|uvI>W5zM6@CGDqz$M7lSiW;Q~ZRU)wr!=v_ z@D5=m$#HBKT(5Raq`plL*&dNGqKre3bLU@_-!4?nnJUxN=m>d%u9Vv=<*62SpQ$uz zoG?`8Y#6lJfD4~yVI^76Arsit2^NrC0K)E^uO0Z+p|%fPjv}%P8=Oa=W!Yw6?37KO zDLeY75!wbQzGmE{h~PJS7(2s(VIZf(Og)Bps`yi7-)BLWL6gwbjE|;?OLIPH8$R6r z8x~16gY11u(rku7Zv#MCuvdmE8 z5az(UI$`+$3S-i0%%u3Y(mqTUgqEoA0$us=Mq?-+V)Fqh<5cTrHE5Ynl4lIqxW?1- zc+EnWM+z>Jw9RNeC%t&aj#54>8xmjku9FW0?NrH%O%aY}0kV=*88gO&tL#l9r&J6^P^6N#7K`I5?}rYPB8Fl%hcF}snx zoV~1{^gdQ{`FCM|xGs^x@*^i&ZtxTpeu9mN7wOjV=mlhw??z8XSl2DKLwUm*Q-@c_ zOfI=>$~7y0rx_xD2XdO>FNvJ($_d&!nZs2WL$udm9_{^Ml`byBG}EZRS*aU#wSl?X zn2&|cES00nf>2CVK|}f!7L8yiQ|moDK{2Kyy&9m!rAo53^6OxGIs40cM7Daut3?G-^m{U=qFsUH3sgU&EQ6NYSv)7mY` zI#jkE(Q4R>n^8Yt(U`1@j&qPn0!J5fW3Sa1@EN`e<3DiVAE^gFM7XSVY1UqteFTL4 znVAkJ(3C-H2wgdJ6Tcs{IQLU0&e2kmp`laxWf0d^DzQrWlzv#$f(A2;Cuz%shb{BS z`eP0Wc!}8Q-^9jytCk=Y+}0zwx5%ABITHxy!&^3R6gt;uv6~?Z`Hh=yUt1odwQe&)ivsvS9Dd%!XQZgN|x|F;Q>BSnOrPy?yf@{`U>Su67k>|5-QP$@UxP;RA>Qd)m9 zviHaqY`yO6TjMc537kOf$v|^^xbpUwA>Mk6y3N1v+F4nCgIJ{yO>G`=vtM+vf-0lA zQU^2s&_azG{-t6Ozb6+IF$9|Z{9kR0MXgrhwq?m|(}BDpb%g3Sj?$P^`9<8J=PwAS zG}|Hkj=1fQ@UjC?uUL+lVL<2Gd=EU#D7d;GJ^__4r2J%pK?wU;w+*k@JWoFf^?n?Y z>!hePtNU=?!_rK}`23qpqUAEb)U4`yv*OIo8wdmT_>gmcjOD{65pWZRs%ypVnexx{ zT2mF}scQu{w;xb(fsA(amnTwh;a_r%Och+<(PWC~4OF+2Hno!u97on2Ph6F^Kg4r7 z!)MXC$D1*JLy0(IumS#LaT46v(f$LWQ_|DoejsPJw|JLKlTqpAPn5`WQ*eogt`p zJI10b(CUi2{@0g*`~iP0UbfB__4k9QuA_q%q?T)$5kI3;_4QcGwVLGcE+DPm+? zDQBiOs_PPO?26$9lp(0+T8QDPiknxVOS|_(jud z1y!i3pXOi-CdAV(#+*pl$4*&TagkeWI=XonkCxww`t>7Sk&(C(7#lUUSF1?i$jdn$ zUj*M;gMOwzn7y>AK0Ae%>h&-Jp!j-|h^6*Kvp-Y=hjnab(}ooMNj7gv3q zc=2c~>gt^+=@Q~PuzeZdUzMz4FW|CgN7+Dgh<8#`;X|;!TcPvV+)qS_dIFe+I^{^R znD%!@J9XyRAJ00yh3|&>p;r1;u*cF)K@Moz(wLU)d5}DPGMN zmoe5eKoIUK)V50$J<~dvl`7yKgtD{dVEt9!}N&WrUa69xgf0jN_^JQ$3Oy3C8HjrC0tC;6&>(Nv z;*+BS9kj#1Y;-CoRd#m4OD)fH7RqiDHxNXM4T| zqVy!@uQ^PC_=}F+88TDXX-4OL4LGd}ny}C^&ru8l(!rBAVthlL7^qkQMBB1xOgE={ z3&+!0$4(uhZ_%vJJMR4PIWk5ar4v3vlC@%Y1q#5qmKieX5h+FtmL2vtF8=pJxz9@f zmXiSO4gxg+C$Dd!ML3h=YwOt_+Bf*-E#MRzd2wZ6kjQWakbB3`w*C2j`9|s3!w&~+ zdKqvO1jx9_#aBy6FW)_3Cg%NRYTFzA?KsF8V#4P%h(V^>#EoZ24v zy5l&wvKxry(1-UrqH`Enx$LoPhW`k982B?DfJlObFGA??RO%7%ML@WE=wbMOyU!QY6R1~L1gKsAuw@_$#aqO;oJ95Fn$(Y`&fs}tAgq9%B}QtQJByw4sb zV5ea683*z6#i8~S96tVU4QP4*{OTlFK5_seE=XoSDL^=(CdTkx8#{n>6iMQf!Y(?B zbQ%ZLw`EOB144-jF0SFl4!L5-1}1k4dX})~C3UaD79qEnnBQN*;~Q`94R631Vejp; zbocD*FUYK5NLltx>#fZ|?R=+N1$Q3&;Pc_|at6b{-BlfhmD`;e!bp0#vocWuAH8 z)~KSUi(db#naxQFeQJvczqpt`Evu}6CU8YIM=7**{n8IwxkD%;Tk$s+#3>0rw1`yr z0C$SRixkL>y2dID6IMnDwd8;|UZS?F>Omm*V=1j}LaY}PivI+1SmiipkkTj20TWg+ z&aABv2s|gDRxe>zQwWt>V)ww0d-yY0C#?{UagL%{W!^8zfj9AopZcd#2W+s*>6Agq z$T#(Pk_SbNX5bIg^@iH{)4p%)8z@84;yc>kbjJmg)~dzO^;uo8T%H(R>+b54L9hqv zd-iS{0yx$xv7aHPfsO3b-h&rCWX;{cVVdhN3JDwPpI!*-)+ZN>l<@Cr`X(z2zb5nF z);N^SR#_P)&B5Zib|w}w0{(#oWiTn^EA)45{sq$!@T^=KbSg)od{9JusY?Ht%rDYL z%(+{Y_#HyuyuKJkx)ZZ8G?LMSnHu=Uxb&%@AEo&!;8y~)$0Mk)>{Y?q>m)RLYeSUM zn2lR^YVdV4-J;=_%Ds8px7iZP?zU~qd`^e9t4JWk9EAt`S zn$NzrR9tc1U9=DvC>sz}=q758E)d+!2zC(w^o)6^k{#SVcORE!aw6>6-*R1TUbZ+V zpL~a*4u(%vjcJ?9VY6nU`MifAQoDx)-vX(<- z$F?d%=RDL!x015RE3?|y2^=PE1tDcX5+!WZD;&DXF=)N&d{$GqcTxOQS-?&^ADw31 zKQ9a?Kay6BB|mCWr_d?HaysiF9|!24M48bx&&UF0)U< zq$bgqX_{-AYbiE%jo$YJA)!yfV0&4UNq-%6xU0V$aC}9sD45+3YnRu0d|PqFQfEqc zOEPfjrzG^v9aZ*ink@3_pEE$INWIk3pOt7*`XNh|<|V>L&%7BSL!M~`?o|u~374X~ z7x($`MHDaU=p+L#7{btbEJu5=7(HbAK8d-PWq)C4ch3I625rW8K{e0-yC!0iWul#| zDXwO2V@x`r+wPEB)JY&3*&^1ioOI#2rhZlK*FreCO$a07uI?9C5rZ)cgi&M>WzuHN zZd-atqYH%R(?}cwLPdqEEB|oFZ4_F*<+u2$vgi;vY+ljGO^=WoMW0v4uBBZLlU=%x z!#B)Eh(5c@m^;6xfQ@7?m4`W3sY0Hldg|KQKo?KMZ)f5t@m|q4r8dpL{FTn{RWLHh z#NK%wD&QBpRxx1q;jiQ%Da_KjyuS39**9J`8JDDp>}m8@d>&>xQ?CpQwbIV%H@egX zYeDAeUjdFhN0SvCCVnq0@9>3z^`Kv~I#;P1)x0N=lzHq-y(uSCD^VJadak;>m)@cn zokpq-K6I8U)w(ScSCaMSDbzJ~!&}E)6m|A+w53}OZXMa48>Ka=)|^`{Yc`o_euAB$g`QZw!;MJ>(Rl5ZGH@%JH~82=lSo0?C~xXy4_uTb#EO z%@NvvNHkrlzo-U#*7x?e3_WCj359m4?(^z_JLC3yOrHvV0C&eYA8aNS7Ik=)BQEAB zp*z-Ihz^5-&Jdsy2EK%^6z223aJCc-!=07?#EK=IFcj}u#&@Ah+gJioH`0HHkqt?D zn$P|7Z4(R#h|K@kx1#@ytZHU%=H&E`kNaOpvVZjH|Mak*-Tsh5>H>!jz(g6oiG94G zy>CQwXC$*Fem-qJx)6x87~{Lx!R=7sP{Owg)u;yv6BQ~y~Eimrrz#J1zHFGFg zSMj2)64Ecqr~xa80c9#P!tyFotG~O`lsd>#s^HJBV3OXp@z%C8C;Khk3VT?& z4rwKxT(oIsPF-%2=>x})1vv53PMrb$+hBW7!`jF&=nxBFE{J=?Q+JMr{qSniqD}j8 z?G)Eln?YLqp+_HZlYU|-<@@W`!^G00n0>3FHNt#gEitLfUtYCa5&^-&HR z!)n*#0=~WS1em{n&y4QE@6WG@dg%Eq!R!Q`QdzE*aM@%^j0@kYq=ynVl`5Y-#VdBV z3R&n@S*6Ri$!k_mUE22Yq%7W8=^qZu#92oxzqvh#x7nyy|1KoL675=l6PxZ}gNv5} zMr*`CdM($rRAJ-hw}HyQ16mLZ``g-&uWl%a3@JP|^}Nz0e$aF3=oS{ri94zv|DJoa zk8bnfbL=#^KLX~5Z4ruESumn|5rJw>j0Tm`$f_l`Ir?W9ipp}#d>yxubZ?mW2FgbS z`p{a@-C6pq5oq4=Elwrx_30~rxCH%CU36hAM%aX$r3`^P&T;GxXjRY#Yv-&gvy-7I zE8x(X7Jrnhita<*(DJ#fLw}oqeBq za$cBUhg4Ciuz=6qFzoOp&c(e4C_DnFELk@fQBc|3kF6V8KK`5D@!by__FS{-ZS{!A z;NEQ?cD@h{4vlZXL;22soay8h1B=hdX_x@X+b}#u=Md~&Vuo$P3yi-PRjYpV+*4_u z-J6ihVyVR?_>|k|t3%`FUy=Uy4QE?_!T#gdXWb-(rn67F4U+sw>1is9JECLCKml$~ zm*?3P>`s9yLpDS$ky+$XJ7^NtRN|-2I+yz~Gog1SRos-9JPTL9+%wBQLQN~#3l`}@ zS^phS!>^b|DDr`4=0$OuH&v#p6yKAVd{6ke?#qz+{v2O%Me>oNE1PvsIK%&=A`x9b z&B#hfY{jpi;_7GenLy1~7|oTt#CSx`m0G5xj7s8ySt2Sm9X)3(9l528OA4m~#sN2D zMKpQ29ou1LT;&UldGnP2e=i%5`qBUydJvFk9}p0}|7qFyuR^iJ595KZzMx*qcQ#(^ zjEri?O%@)4Pn=J^2Tx*2Or9=GN*qGM7N1~BIU^si+r8a-5h$sLB2nluOqcKR8&LlD z+UxSXrs@KC;?-FbMD4$Hk()biN<3K5d10a7d+k@Nuio8ZfW-9qId%ZzP`t2#s8de^ z%uH%OIic)Rh|e;&({O5>KukNZLeNR4T#8vfrMdQYgp|p7G!uL4D zcIiQxI~?af*xl&)hsVd8@nz=V*vHQi^o3DAX!MqpPd_^C_Nru4cVzl#Q@4NGzP&v$ ztE#PiJ$7YR8_IzJygN3p+3CjXdaJJ+ul*8&Tf&WW`ur4s6XF3+I zUSV+KZJc1!W?#j9{f@C~Blcytd$Z{w>f?3zYtuU*3()QvvFGN{m|@>azBl*^U0auu zCFMC{;^u>&Crt{Qces6X^@=VyT_rfUn0xeV<8{r=?*o5FaCRDQ^OH#I4P5N4h~RGs z(|vT>>+s}e*T8h%+pqz7K#c-VVFZ79!)PH)~Iz{r#uE!$T^;&WO85U#HJU zF2T+y0sjqnk3a_2$6PGY-sq;!fU}Uoi2uIDrccctmYd}W6V6j@+eOPm-C+6Sb zSvQ9V0+Uz!+;0IcA?7u{w>3unJt;f4jXNqrAFS`G^h=Ud7->{$2n0;n@nGdEuoC_V z2s_lb&{7yY66!>o0XwX5(N-XOZf~$uF>5?~mh=giz$IxgGKzo%rP5eoi8vGCQkF8R z?`uY|w{QEI6hHFUm2m*}SQUH&(1y?<|10y&rK4`Uc`u$?O#LjCae3fj);O^fj5 z-nKAcG>#m0nA*JF z-kGmE<=V`ycjrJaHlEPoLtrM%s#R$B&hsQiQK~P4y?XTo0U~GHu(`2dEeB-8U;4nh zdl~_O?XzdZxOW5R@eQS6LeZ(lCDzKpD=m&zOYg)E7PS}#y4&g^^UJT5Yjuuw<>nD8 z_3bmpX}W0Q+$W|el?Pm;)!)@*uskW-l@3hshB}SyRQLR@Ly`j^fKW7%6JuwcyP*Vv zM&;F&yK5Sf=F}0q>x8CPl)ijs7c4r9+v=~~Sk^C*-;rfIQ}y5tuf4A`y}0^^xNPR` zBXjfHaMH$N5h9o?F~5A{AUp7#*4<$s2$HN4<&SaRWK6uq@mda zMs4i#s0{mD_nR`pvbQB$oFFqNGF@{C6df`p5k4J?jhuoV34VQVv_u^j&eVOK10j47 z4hpVfA%P*Mn>n9orA7P7iN*CDIqm}6h(^4}q|tR@SeWNFhW-vMQ^g<{nBEQi5AV$? zOa0oJkNE}k^`zmPm2B(+40REW7VZi%@gR7X#6FlLnASZ#me_jexF#icuD31Mnf#5= z_#YDNJi*g`T>Gnk)rWchY(^)ggxT@ZW_61w6?Lwo-6EHh)~;Z=u==Xv4=fJomI-)# z_@^wf*!~z|^PIJjdGNTv&D2BTO~K@VHEMDSJ=Fz9MY~w->t(a zge_g0P4F0Dv_pvcwvG)i=Ukgl7k8F>u=8L;39m`1#~&l-vNkP>@P3| zz8z*m0-zUN_L;W@C#^Isemi@qZ*CD1GQyr%7-s}I=t3L#o58ZypDS!A=Jec zHO$fwf4AGzq@q(MI7ZKqhENJaQBo3I>u2#?YR&7f3S*NKI2>8gcRG^kRv>=@4#rYm zf`I)VjPS_iJS;94VI2M@A(ky<^aaJp}YHpkJ}SyTow z733F&OchqyStJHGVESasRu<=Wqm?BT(#=i$II)LRUp3rQ( zn(4^5DCyLmDA`&^cOpJR>8YPWGrX$+da>Wd+u+L?CQz3CD%3<<L=KywDw0Hb-&nqo~0fx(g(Eb02q=1r=msNH9!*-DDg@w1PNpczus8`6Ujf& z?td+G#rQjs7oVS_8|04uRUy-qAi0WPxMDGJURup6MW*?pi9{~%X`R8km=dRgucb?# z)GHQZ<1KRM7?2i>?!n&eY^SNFqXo$<4Y0%GP_8!aY!|5s7%%N#u0uM?Yob3=}q)K^n_n3#ixx(`*ITa3AErSzZsMhdMS^(HYu?L2D98MtvInNwBN#UbKJ zl(n5rU$2Go3h+W#PY#tsSI)ZRRLPGcP4L|BCmzgRni%nC?la`i`i!bJ9@A~2JX|>T zfpR;~oeclX^l_-AXk^;0e)HayD`Pm*;a%u%XHv&len;KcN%DU4{igF3rI+cHEA<|8 z{~YhI@Y#%pLO_fusjG+n)Pe*~mx#b?b{13HTV$4f`&(?*jVp^zG8w+B@abtCLGGdi zWLG7Sr-NJnhiX8Z|C*!9N^+`7ZDE}jmh&*b-VZdGLdooW6GrnhV?m#yD9H3e6G0AR zlHRdHEUHL}e{ZtJ_2o;$sD3Ah<}_Tcn{6JdI9$%J%M7V1hBZ+~h5A^8j){yK5m0*U zu(gang)*bsmqk%Yj_t9on-6fTgyEw}TqzwcDCpB2nlxY?n!~TPm`A+15m7Glq|3^b z`B7>^6{cS%W4{>{(aJ9N;T=mEXHa|Rht@i{rLwDl4=#>^Y=>Zu1&oZwsEm|zA?C0q z(yeI@&NN8v^13xqbVK$WjwOsWs6Q|EaqBg(Rw6H4<|7ZN8UGAF?L+BpMs&O0@k##5 zWVA!QaB*zZtc}tc`pr8dj+&3KmFZrjnOw^ zC(+rag!K{yaJkF(ke15HSSC3p!AI+ro^k_R_}0X$&kdW`hhENzNV@Y9MvaE1Go%BgcL2Rll}{k4wO-fQr@xGDtg;WZsH|SsRN`CYE1StXmR=XF{^F2<>m8Sf z>J#PUijYTt>(F4wKVnKzl)Ibc_?Z%ML|j51tnBl1H~v@qwjWDstxBS!nMr{&$E4leLlTU9o-lQi;C6? zp7gC#7KH(YI8-|tc{CA}6Yzhku%MC=VC ziMvSCWU@HA z_#Cl@AIurgmLWB!)B>&)Xdh^r6msDfMtCZCn5wZb$FKb8=x=1A!98qMv=fcf_rfhZ z(L@bzNfgUvST5q|yq6-xrTBGHl4Hpc9zN*m=|RLopgiw=^nIs_u|{^?JFOD|D{M{j z|1fz8XY-IOAx4hF*;}1ot0ER%U6Cm!r0_ALp``MHZQ95K#lf^R%GDit5=0?Q<+`B_ zt23?yANvtg{j@1T;cI^N?4)Ino43%Q!-2zg^)xxW6+8pzqORhfQNEm3m}x9svdy$SDp*wJJ(yO9zwI%ecYjQb588(%zn+uMu#5|h|P%stg z=_TfT{L;dcB~{hdpU{a-=Zo_2c0$~I1-Dk{^(1b}Pbkp{9$PpMh-5S=pMaL(AjTZ1$FX`#LR=?XAiWO2ta(jq0XE)%` z-&k5Z)k;Q!@&+=w1`q5Ua86t^a%}QljV)^3p{7i6M5bxX6cjl*CiqXQo;tP|Yr=6O z8J37cO`E9qO(passmXpEy6BP3pib&n>&HPe(A;-e{t@iCc|AfD)4KFPf`-HaOrWh{ z*YEYvl{xxFwh38WXOIl1=+~~-^+BI}Q^5@t#ME+T2mRrGD}szeu^>Rp6aOJKOYSsE zuqrP)H0Etu@7&>?(bygc@oPCSYZ+Uop6Dp$lqr=JFNfhDE(ahgHS;9^N;-^IlOKXU zI5!1kX=2c)>&maPhVA?_rCmEK=eK>~^d2LuKawwIq8LxlaDu&ZXr)bnrI=mA+-2H; zi8AMGEa&u_WWr{Y^tk3rN%p>{CvPPAi^<4pSrUH%i)sQD~>8fU&=jNo0{LJ2jt3cs}TT(g%kBnF_D#J-%Iw_6*j_Y1u zPjk_6_R-{H6k<}7P3~-AvbE=E4jo2R?oz|rcwa3XFW#2mD*0VGfAi=O{P;QME2pns zt%Xm6dpHY&#fc*Lj^y`^g*W>pM0I_yqBezawnc*&O>d>^cIuQV7F>A^^P>YOQMy`+ zn->{+wOY_Zu*6z+vV7)rMe$p=k0bmvkF<2f?Ttd+oh4UACAqo$mT;;l+{WO-cN&55 zfI?ISo}E-yXSgQ}s`YMK?y@YpA)^_On2bNLd-=@P=(+9SZ>VfUmc({y#3Nl#I_HS) zf|Q8?pFq?LfVMs!h;lKqd9gjx!RF)Vd1)$L2#<|9WR1}Aw8J9EF0Xg=0y(+eoIIilJWs)5*hN%K!l0af zN2jm-h+7_1C&hoA?AZ48!Sbk6FBkg&Jho zw~>d~+RDjWZ~3md^pP}=;BFQ!`C18^2*Ka-Rc;b_K5Xpeu~W(Jd5#j33lP*J`F-Z2 zC(S0?RimtJ?F=OfFz{}Ex~nu@G5n*iN+?@SZCP!7d)IHcqg{6ADL2#_wd@J+&yI89 znHP~MqH^dGA`xDvj6Es!T$RGo>j`a&9-9@!aJ-U@(5orKeN2_+`{FmHG-4K()UAW+ ztS2azzG@32*tD&zZEyLgg0+H4(QHnTezE6MZL>}JbDE(t8&CUUTkK~(CnC{40(R%> zbEu=8tq6aQMA(?*X1o#ZMZ_Yw&x-`~~{G5TaPD)u-T%6A#z^U?5w^%3iq=V4uUt zah#lHx518ORmZM5uOXLM&OQ6_Qt1c!$Ho!5Qhw#k+U{dkU%J)2iH@=+%Vs^_ zHx*Tc9uYk+L}kN=eUD-&2!lq3;lBfJsj26%azl31{?dRT-?C>9=1r*lrTNy#su4Te zdbkBEzx8)%B~0v-Tp?`te1k+>N{CO1&{{X|`#3EC^Uq&aGz6g(=9Lc;QmtJ`2k{TW zIuZg~2G)S!OV8!>EM?@wnm|rF@4M0g0Ux{WWL1dW33{F%H;+Io( zDr6ZfB>#T}E*KIQfqKoNz$v5F!tuaheY|lzg|ugaYd`k{)9p(rSkj!4`inhkrRC)K zNC4WHjrwI=#R!)c=7ClwxSyj_BADPCCJzNa?4=#1HhGtYP}@%bFLqxgFaQ^3O894E zz%NSXYnB4hpszx@)z9gC$zVNULo7GAXE{_^68HP6bVIblen!f==B=PF+#Z&GKWo|d z0YyW!q7q}AK)r2-e`#2RaP5s9PlqO6s5C`?&q<4RGFaEe%j?irH6^)%F=NEY`X6NR zonjm@5jo)iSwQd?&HZHPt@?~r>>I&ScPPofshU1SNxdzW-?{STADw1HNX6(=J2`ce z<-%xY z_eb|s*>uYFz{eeUA4AxP;bsa|EEe0G4I%U%PH~q5>M=7-_M{SNLbei-WStiH5&T$r z?$`u&f(@OFSxM-dsX{bmJBOpiWllrA=UFhBAP#H874El+m!=q#r1x#CIwfL3FYlpi zD0TW0kHQKseJz1$^`;G*b8~##+A>hIO-+$7EaRuGI17d2ZM>W~>C(K@rk0i)cybFx zM$Olu6!a*jZp<)Ol+_uO)$pjngaq*_Ef`+1=@~}pVN+Y;c+HGpc4Ool*o>5N_^$FS zTE2AsW`v3}7Xj58*b=+m&7!m{IfRef@V@JB+G2488>?Z*?!r56o@Xm|@aH?A-~*j( zn!HWkGL;)77}wwcehBdK0{GzRcqF7GVcVG1_HoSVBo>TCawSR=-e=-V%|mH;d>ml9 zh+fLvHB83m139=WzCG=DSdgv5))#YKJ~&j&CV4@B$$~bs97t?IFU=!Y@VEKmj_!j! z$rnS35Yk_n#0G>3L^j6Ym`UUV)<13VY>eTpc+s+))k=BK>F^V?C6f;ODvIeMNhAo| z0m?Ml>56+p^sp4P)lwh(<`*B@*Mm`gESytrGGZG$0rF2*!Y#rSzD znfnv!5L8Wl66Qb;=xHwYl=*fo51xdjf^>J&IZqAJ(=VipHA5(|mYV|Y#3>1w1F>=p z%I$U@Ohx$Wcfs1gYQQiN%%5ekg|95cS56L1dx-U3BgyZrBky`b@tqi@;->{NtFOsf zofjk27mbjTQHV|wXevpv>e8FmLvcN%%fQPAtroHxflFA(Nwt0QZIRrb2#$B=s1rKC zEq4?qzBv-EUpO#3Dk=mP-NA8+Nxq)@h^7BHl!pzn^Xm@o zJt`04`|*(4Vy%*rlLq_aTFQ#^h?w~5EAp`=XbM#*bG*3f6FU2cY;J|z9#i}iFKVku z3mFSj-ss#l0{tH+0$f1i@$=ot!|!H)n2i_yV`We9(E;&=<-3ISpmtOJ2k82QIe=8Z zFg}8q1AO!lnGt<#FwhjHba!4kWb|K(Y6uTE3g#~PdK-;Kv>rrr8xTk+89Mr5bi!V-= zT#qBrr*$Ye$Z8i5>6zCJgs~^MU1+Z73?lGD9Z`%ed7tbcjk*f|qANapzyo7$q+I9K zjNHQ6Y>OwLX1nYwP<^4Vtshu#wE!xQaM+#=}1?i?J2ET&N3!opJdMg5W<0j(uT(Ty6s<((v- zDvKXf-b*R2gH+AT!mdY?6 zy7CvtPRQ3^g`xa|3)F4fa}`U^Z?*n9rEjH;g&(&afE8s+Idn&{J*~bE>hckDn1ofQ zmuEH|m|>llY=lMQ`9b}sZti&QI(!Z9&W#2|MwJv6Uxq+g-;ydzI0yE=3h~2D+Gdag z@q@E1;YucT@LKvZfM-PweG_zarD@NYlk^#}oL;`v(@n|=@S}O(5lZ-%*D>a~ZM=4R z;)OH`|1rinqA%a$SXq7tZbije0NVNkJ}(UfmrTh0C!(f9)|5BQlxX-2<@u0X>cXE* zp941)5;+Pb%}quM9v}tJT0$2>EEn+~*6;D&aEjl|q0A;+<74V>0gVWDWoIsOvrp5? zKhyW?YyrM>ZO8UdTz4bK(w^9<2`|5b7YU+KvbNtDc7LU4vYdDA%GfH)F=^NYli}04 zAFg6lUm+08twKpOMT>FKIFV<(4`rU)A~+(y^P#pZV$SEpsV9JP@vLU%P07>$S@)|! zWMKtHyA=qm^yBf?Zq51ep@^#84~7Y2ryt!Xj(J;z+h4}(8#H!6$$|76E$Wsn8)&er`w44(tD_tHcL2mM zobC=#XoEHXjHVwWl(@ATWBbZxhf2Fmg<3CW`C3gN(rf%s>th$?&|hr~32BgpJN5Hid!KW54%lg3QX)(G ztsfzk_|%Xj@sZSIGTt_*O9mtKk3?g!I*be(kFC#|l@M=>7A4ve;}vErhfKAra(IDp zN-}Y4dH+aj8mWq}^eqS)1~hR1TbmUhLo+F^r4(Y4L}{g(mo*RzuCGaf$2|ZndYJq% zjYM7*)kgyN3+u;KoOh@UlX&F1vZzy|Bk;OYinm{tge^k^2n?8KqE#o1FgKJeL|&U? z53+?7UqLkVgwJOkaAbd@J(g(530Fs3!S?Y;nrXNEhPJEC|o8LIy)gWg7PP z_Hiw?J^)o~(h=5Srym}QcXZW--|npzEEYB}mkT*!LmXn$`|ZT>AvswPS%>E54DiW9 z4I4m5V1uD#Mv5-)o?+HZM(7$wb!t(Y(A#}sFuh8O-Pjycf!h*IJox%gOoo##vfc%m zbki7B0-m30YxK>N>ZrhY<+-#8>xhbcAgMI!BDtRwYBu>P&2U&!-Zy6H*YAMey%=>* zY20|@NM`G!sB(O7b*yxMzv6RQj*d+I70J9AVvKn9+`K@aW_BG$;I*hXQ5lxvNv))PlmY~e1>w=*jIy~=DC1X^Fro@H>Fb|K zLgg_44X}?S2kMG{DwqQy+Ji#U+qLZG_5X=5fx{x;9xXcIp4$d$eE#324#Ck#e&^}P zrx)=Z`w6%)G?kOfx1$Zia(L{cmYhY<6U<7Zq}qn@pBovg53m_TCu$Ddj3jh{x{YGp zM2u|+%QAmOJo~;J_9WB&gmi}*8B^EZnAtcic$}m&iiDutfDoP)<0Bt?4g5a{gD3fR zBcH27G}4FX7&oNv7<(E2-1Ee?(K8*i!mwNR?9a9IrKmqFMORgNgu(mNGXB9v5#8s! z=lndx4aaO&kc2p+3IwaqzKjn4vrm3Xr_l$}fryE~EXqEBG5|0c9#^LRY*H6VC(A6* zt_~SC#>l48-sN|s)g_$?aNVb0C7ucF9BRJ};6}9p(KE`4HY%BnY9R;jx00U8tsVC$sbNv zs&lMhyF&e;#Hv}tHt+&LrmbKkS~twu4QB#}yPdwyNlxI$59qQ~kqow1LyYQrr!cFr zLIMM&uv<)N47~iZRcYBZD6yd{Wn#|$`F%xdl$So>K4W>&x6?c#!oJ`w5MY$D3U56m z=1_SW@Gy+oCe07_6ZrdW}YEzSPtai7=$J^A)K5vsa(YITuc8vKAt%b z`*ycOJ`xr;dsVW7RRKde527NCIHuFk$!FTc# z9imxpb0V)>x@0Dn=fAnAb{3!nV3V9^5D^$Cs&s(1-ldJsyV+SQ1>e6pblZ>}=r$o= zRFxrgwK<=m-{xSuLb-}OgV_-9Wi;_OmMq}0{eEAbZ{>!e&_CTW@(y0^g zLh!p|1g?6M>)#}KToDi6gKiQFhGY#(IaIwSM^BzO)V@+}QV9l+4q@FEzvAkn?)2>p zx85Svqq#*8?Wxt{^^m)MhnZTI1=UHRq?ebk>de>GCI)<^h)<#1>|0X6#Hn6#E6Ai4 zZipAG`kL1dNd{RwCQ{F7GKFde=Ok-0k=&S??A0&KqtX#Du!OdOeB`Tn)x%hFA#9?; zCQ^;9rxAVAtCP&5+8pSW`?-P@^Qrm;?JYzhDD5fRa22cZsl)P3JVT>;BBm{TSX>A0 z;j?L>XeG#-mW6`Vlj1~Ng`n$DDQV(W`bGjQ^-Kk5!kz?c(F zsY3|oCc!^V7}twn!vLFeRjY;d+Z;P_>5d0Jrs!z_j{14X2_2M2`tTa}wg>6{gshPdg?k}ECOj>P1WxWiyR_Y75rP>tBS%q@tB zojLNH;`$HxF#m2RNDH`ga!pN%z}z?I8+8#EFSz`>Y=Ly)(v7GdISOTomQwx#Uf_v- zSV%C}3`e2o*?+f6ZfG=+40|)zAgIw;cEukr+>o{8m$iF;ZA1dF)mGN?!Y-?2U`!W;9#tnc*M{Ov znCM0Nb|b7FLeNUTr5x}nod^ZF@cmV)Du`#ngrHhx5~~d4I|f_me`Qk8hDuHqXVTS% zb4?**36Pd)Euxd zXXjH`-KDiP%65V2s>)H|@xt&e&5`Wz6gb}j&nVN2z@8xI(rQPOq)AUSZO4gMUO7NJ z*5OlVC!kHit=DNs#-!ym4sJvMbg0++PL&Z zTR2L9wQwHLSA}&1tmPi+4bV!MvsHR#kYcU^2OX!u10H9#46hC{$9h)M>ud`pv4PFC zlgv#;sAE^$85M{4?b&?GFOjk$9v1A2WL4S?`YI&44wLmj^(%aoSoT*K-(VA2?rfja zaeD;mp0frX-%M2Ss5n^@O~jIb@>-Sxt_`#<1BBGSF-SuE`by9nI89zNa^YXdb`!D* za;taymF5@yEKf$6-c0g-<>vZl9HyZrq;6reog*E{66krbxXS}W5q|=v&z$jKx0Ycl z5mMdriUK-qWA;`t&_7y3ioqP!QtG`3l?T{h@AzxXx{PC#=?U!AB1Id7zNsR-p$58% zarxu+ky1S3z_!eiv&KO9ffV~xHOT72JaAKblhEIA;ZzL5jVE@;LAr%kPUSNSy1<7g zHkE3-V53w18C58VH_YxbnO^MwuIjEOfXy@?Orlq1~5{j##6 za?B?O$=4;hYya|KsE*-Uoe@~v(3;xyXP@2kYIy_~ma-q~#g7}US%d*0faj?C7 z`fyTVW`^he<}KliS`(%9s*^KwVG4SR4ncCzz}JzI_M~CLgxZ~>IAC@rE0!?SwO0~O;{}Z;7mAwvet(btBS~AAAl7v4_(Q%Y~JZNEQXLHT;v~daKllUQdzW4M#7W zQ`h?*B&LwQHCSFgOiex9-v;IgV9g{UA1=}YDW}eA6qW^zZo{Zm{R~ll5nz4+WTk-^ zytv%&grPsH8QxcVvF}uq1-l9u-2VyZ-DpS(b!I^-R*>$iKS6or*4|c_?x{Xuy(r)# zb}m6vEk#xURO|D3(8DVhotk;@6L06;B@4b zY3yg(up1PW9kO4DbZPS=J1S#J^LNI@oV1jUHV?)oSbOPOg^N6{tI;LnSO&x7kagRm z_(HDAY&RX!BMW#WADeP&{|uEr99`lzIU)joCC=@s7e*#a+vEd$`L<)4NB3-+RtOg) z5A~@|@_?}gAGOOzor09BxEGYB^BB%in#RcEHo&FB2Cq}|c%1qW6YR3F^|=I~H8Tj! zrjIT42FRFyS@D*fI)ui(VrO#>riJej`(t>7Ex=Yj6;u+8scA}C;FRKpkB4o$&{>pW z5}O3K51d6f!t(CzpE-`QknUydqL*Rz6WFnp69S9iG!E${?Mgng^Ue>66lk^zc@aB>4YLD2o`on*VP~dD{=# z7j60TyaxT)_q!h}ua8;sHrd+qzf)0*ovvS}|Gs+u<+d??+?}BU zF)8zo7RsrYaj$7l{1x+3&fHhBplPB~7fWAv%M?vF=}4I~XV5>HKlbWKQHgy`;R#eR zmzHT)5l)xU*B1JR>h6KtU0bvYORX-SE{q;%*mA!J3)anqKL;Nd(WM+n6gOi4$rx*!l6GipXy5e z&R69oP+F!u4NK)te5@~4nXj@ldvbz$M= zCyQZq?vU}!r3RFPW|f>~l{OoH0^=A0(vyahCndYyvrDdca$4;WLuOkhxR+kIU0?IY ziOQ44bKV>f{G`!3Z*^0)`cLWHhuWP`|3*=Xpx`|i;h5N*x8;i|)-qi5m)N>=y1v>@ z9jy=4O*~Iu`4y>`;E57}X5L&XCH{o}F}1gsj%Hq=fxk4VzlJ6P*Ph%l(J|ktQl6%P z)1CE1-Pr?4s(<7~_mz@?vO(#RErQ*nd)8fDa5RKJUgZZ9VC&-X!To{WPYkhcXXkbFhbd(S2e&!2YjoRS}?)nDW^ zziyNSGX(6( zsf86Qw+A~ap?j-QlP9UkSI((#1N*ZB6E2C-96MD=R|Wnpr8rDkMk|4C(G1Fp8dO_E z;<4dTsmMw!c=qV?Wlx^?OWdJd0r10j61tX*<#KNkbY~+H#;*VbTQN0N1e#Xd7=>qr zzNj`W5lh`)DCOkv&?)2B#uY3{(QwLWHsRmty0ZltOcxR#Q9Nue@zEqGRx%^B2;l<& zhjdF7Ibz44ETCKWtYw7QQtBCzOR|1$uI8oC*+gI!Gs)Qvh)qzg1 zUwZStumf#rSJvbtub@&JsVFC}D5tEjRC3O_WO|~b`Nh$Hk0+BWoBjxub4po(IS0hx zR)JY5D6jN8t-wI8g+W>^b@7RI|PiJ-1%6hQ3`fBYGwvPx00IzRaI zw?5N*U8K~ZU@|tv6SccLQ>9IbKpN$VW1=%x#dGdhA?Qp$WkUwuuDHz;wPi;Xw0jj8 z`@#<_=>7Zw2;Dznf?q8CnksK8+}$0LpHGC{v#3>>P)5zO(!Z)F+u+K%!e?0$|3cu2 z+1odVK@mwPzhue3gD=uV%1=f!-=n@|Y`9ukoWuv>R?6(Go70>ZjnB zSMUn*^hm4kmq=i+u$+EAO^eW~?3c>(TVB&pQR#Q=Pne{PK2dWou?oj(p*VoD&K|0HD&n0Z=$i-}f!8J+HqqwP<3O*V~Q>`f&c zimgVwzWj2w&K8`+Xcg~n%Z|8sgMmaWx6Z7hUJchqsI4BogZ?KdC~-1e%t9GOo2NqX z){#< zhUCi7GmGuT7W~a}t%hdU{@mu%+T0d74II9< zY#BTiu+m|xTRzjr@xJ<}%V4$apdxsx+PcAsbMx4Bb^5+T-fJofksxm*4FdPQklv`b z+cpa+9IBEheRWDAgy@x?ReA2n+RDjzS*LCG)LLh{AiV?!z>K)>X@d#D%&X<8+71AJ z=d|II2LoHJg0QK+J7Q?I*w3t*Z0EAklh4NJ(A9;u2)$<)8?L-9Dw7WklrPmL3Cr&O z8|30_)GgQC(&CL%fslrck%t8UY&~gfQdzfhkxf- z*A(Hn{MxmA_@WEFR5}n1h4K&QFrJN`o>;KQN;A9tU5Ad&mV4khUi{Fu5Sj88_=e7s zFzuRnKF&W0yTb8hA(V#Z8He8%m>Z1H)+B3gby*hNnF}2>ZGc)>GrG-cI6(BY^&+2q z-U>F{&O}@tc2S@b)2zcIo04jSjqa08cOFI(AwM!SvKv9a$0SLtF=pqpuPiKF;o0>Bqj@+C2QQl~J(nmWTa!zQb43>Y=C z)7+0?sUsIdqXat^mni{~wP$qmZb6lYw$&3r5y_B)NuI1Ec4B;dk@~WJQZc=}(5-kY zrMjuAO;3#|9GDNmGcLRci7+sQNkvEnjSMqWb8Wdys4%-cn?1YO?0A#Z_mkB8E&<$L zT==kIYdrl<)sAb0i4g6lk1mJ1Ka05mNqvdMQSvo7O3385mOvOa0(YTgJEKOAM%9PVw2B`w;^s6 zFewMqaibK@g|;N^A#qlod!f&E&q>&m)icJ3m}Y$knzw6Kw$40dYLc>j;zT=T8X@RO zf3J$#>hmeXxcI0p1 z>Or!eVg-U442)hwq8JtEjuz&qO}_lgjRvN9(r<}kR!AGL6{Kl()s|LwQ`%tD&PaMY z9LJ>;MNL7WfGLERlt=H@1SY;Sy$uga1%H!tcd40}N-maMUbiPveQr(7y!qvLw_|Dj zPc2PB;h0prYIj*m2+KQ6ovViqT^zlZ*3i+t=)8!$Jfw}^c+}hq4Jr@_?Yv>Z7 zXeFcMts2g$PHrSZQqIwh)O{NGPA>G|G76xqhnep?c=SJMgX6z?2aO>qOl78RJOS-h z1{-R-Q+vmRwkNqr;#)$|+?P}+JNr$R<$(N=?kMwtA%o$AmT7#=md?5wL;ZleihtF$ zdbiKs{O)S({pzx~bYi78fJz-G4Cjipfqo~uKSa#{-=oMH*w)k{t@|e zPoCT#Da7kq!srv8W8+!0?weJmOi>3n!RWToW?Ew}W@dK)y@p7SYa7{=IFkahQJJ&6( z4yfZ6NxW8Y3nD^fO%<|}g?A(5^FjXI+L2lu_1NYUpBbIE#1EY;B^2=L-hrtLQ(kTlQ2I%OEyNXQ0<2jDq{wU7PGe5un7k+yW&H1@wf?05!^?}yjt5WdKlR7I zlWnH7|5j>~*1V0Wqi`IJ;Lk!k#WF7lf15G! z3#dD4Ak;Fh$q2SncRe*@)cN>{#h(}cav6<<35%JUN}6W~8ju)3Y_u+-1)wzjN7IVxH8}Zq5J8myIzUQrke2 z|Hx500RS5jOf;rK;<@}TbxNmXr0nE)lJ_mX=TT2Mq#sKRh6>k_)QrvIBMHk5=8_A{ z?Bs$bU$`QJXzesc8{!9gUkoSw*a}W!M^;6bn;hY`K4%wJb*FxWQzOY|)_U2OVk*k( zxRo;fy|C=){=}PWIAc^W4P)ko!M>b$ECn=#(D2Xm8#d#j(Q%%&N7~BGzOmXtv}34M zm;r}cSF=}=ZVaU??B)R|d^2_2+)4zf^ANF#)EDge@rP>bhK4Kwe6K8vR`||amw<>b zG->aVXhO^9N;hEolDCAb7vJ&Q)s{4rx~q!$j0gJC0_}%5Fy=}$bzrwHcqqjGQ;kow-B;0Zi{^X7Lek_GgA4oG;K!vf}|j8Z7`#Y z(!`M}Su42essg~QDkEP|tsKeNywTTt4UHty4i|+$hT$TS8B`&jOR_1JPm&(zsjj}!~LM{P+ zWwS4~aFNZx^480oO>umLr?R)^d48E)L-pUYJ*=jwzzcBk_94 zY>i?al0Y)ug#rGxZSC_%Y!Ewf5W3MEZO!YLf4X|OG!QzA5LrYZL}_a%40pas5li1Y z4V5YTvo-gJgP(Ckx#D8jpMSi34oOvT^bg9;3TVf_Y=^Ymo|wS1vpb?7Y_iYcYCju* zu|`d_)RZder)}q}Q4CfgaLR8go4U}JH|2n?WcWzVB}qQ}n#(UH@H^f>?X#A%COw1$ zuHI%rO8~Sw%KN3&Hh_53WOW)mY0ak1i_7V0(rW7&Y0Y>hudm+(K*}w@)e8Q`BH;+L z{fnj9{85WkIASE$sS6)gc($+;JyxMDgu;+tEnVpEn){HvSbJi*F z@--bmY>qWrHq=KWqu~kr{XDAXq=~s1G=Kd3on5opir>YKbUheY_PrMeZt<0cbeyh@ zwSxvL0L9iL#vJ0>b-AlgI{4Tj7DO#e{T4KgltigvJM6o1-x#zYp7PJV| zOJ1E zqvFI#t(9Gu$BwOSo`w@-VT+fA+lR1yKX#cnc(7OE!MS%>2!_S>RBMHdCI(v7Tg3SH zH>(jpG&8#aDms`j!R23!@a?4N!k4q+^6tyFUDLQ`_1^UvQ>25;46iP1-MLd0#X`C@ zJBJPxto)0zW$Ks`nTx;uL6(=BSLS8>)V%>)HTF9cou&{i_;3}cb1>jBGFE1D@eaa{ zxU@x5BPg-`Obf+=2)MR@&XB}BAzou0``{s$ZI<~@sDI>FQSftBQ1(&I59h^$efO^sc%+gA8jMgN}1wEpG}v$?n+ zgfDzJg+IX@FiNk_zr5Il_=f+k>8~}>#J$3Kh7HzNOrN%k?su?g!@4r?$nU=~^TfV# z@F?zYHI}gw;at1ELJ%d35YzXYMMCHqM3VlHh8Xo&bYcr3PJ;KK?VR58c`b(69QVMs z=qrq1OLT~Uo8L4_Z={9yK!m@g=y+Mzh1l#TU=}MoD+b)o zbu$KM>KjHNybnof3bKd^<_Yh);uQ5_8ASw|AU*wK4ptUc(OojDS?Ii^(Y2yR8{g)b znG=XZQ%g$?gQrf$wpu`$WEo;MsV8oH`T4h+KoT8NauaO4$lC6yE<0JNwxB(rwKaby z`n;N_eQczfnn+*Xu!}G@p@RSQr@zPeducfyo>?S@ZHOwdCi*8oj@%wLrb>ZJlHXea zAjC0&>u(o|5$7z}q;(F%3a`0C{gp~Q5)B=eK}CV>%QnkAWJW%YG#W(>A()&$Y~=A_ zb#6tvxhHsRiTz>XAKBky^nIq1jqjIZA8{yFNL;pHo|WNnhx;lI(Tnzu%nBvII!q^u z_JjRVF%Ri6D`Jk~UO6k8D^9>8W8Asn8X)=UYYmgz@{;OXbgeye}F-96Wkj zMq;s_$bb?>8ZYjhL+Y4hy(_izkdzZr`3E?8CTZ1w;9tOU^ljze3LVX4I0g3HN1+m@ z=QHJB+JFt6CM(Vvx<4D+I(R5vapYJf5;D^IYPcqeT6PiS2V}wgjA=L~nOy5glfy8< zr}w_1IU-CIh1A|(i2xJ7y22ABZ&hA=^E zsCX^gyF;(Sm_hn85xAMVP_%x)-m;OPDJE)o4XYUF?A)><+`QBlYiVb6O~+e1aTeHv z18fVbtyW@MA+dt^4T?dafV}cYj!?0d$%BZNEmxCSJI${Fy z;V=648Kn0i(~dWWAifVWBsEsHz)|@75TTiE#=M1L*07gSuPLP2D9|vjh^V;UenZoG zuQ+IH*Lf1a{1PrW+Eel|ycJ?(QrSs$gdQ&Q)3kj=xwoUMDTXt3A!Oo14sl-juP!40 zPzaZ;PcgG`h|;6ti-;(U5bi3aWSnY`pi-+HMw|okdzRpz3Tnl8wT!hL+AuG5qH2l} zOT=*d;i3`0I6=aYrV@A0G<7PdfkIMW(I&l~>eMDFiS;TEb7FaH-SiL&;rj9IEOTA? zdmMs!I(^YD27mhq&Y_=Kv-vOXy{_no!p9EMZ=xjMNhC+u=Ad2V-z-C&2mBC=2auLb zbTnvjzd4594?u%&k2>M*iLuKFp_>~7_Q5;eGKs%PzBWn~rWk>7w)z#^?m0~w72)qQ zg@8YPd<2+OcD-m;82<9#)LB)q7FHmX1=c3jh36mf5Z@u+ z!*eKXfB6t_aefhe@J_8Hy}XB6SVe}V$x*vtHyf;Vq*aw->+tC0eh_}hicap8V{Hv< zV(U24t7`scY8KEj6ule`E#z+b3gZyM#j-%l)aa-sU~U#R;R;UK12mqLEr)r;aIDQW zHWLFUnu8$Vk1bb}{!|@X?rj=}ap1ixH#Q@Oaj4*$TdlKY{-i#OsfVRkM^8)WY+!)g z9GX0XCv`C!w*{?!R(_(nW;6h$2o(|B8!Y}C{D0q>Z?W1C-66FLGN0Zr`yF05t6S<6}! zgSFAmRwL~v_eP-^3sJ-}u!T!Kj2@GZLP4`mrizn55g%EL1!ji_&ur9>sCGhF9=KZC z+c=0ScS(1ssP%uql}%sHGzKAnc67VPZiYaV>D6fG2|W^%N@i;KtDTx!B{z?Uc~lo+ zZJ?1n9Y##Sv{Z(1#6Fav%FoPM;B3%&(-o04wQz@NRHqhn2X((}@GaO+!mM4!-mI`s zyQl5g+B*m;xr#C{DJ{ru=-KBL;w#3cqf}0n_b3#|Vjrj4qK9cz(la%qQrAU2VAw2& zwMyyQS;?N=lN~IVZm@{*X5wfm==F$vOw1|F+rZhAqZFQqoT70*|Hbdw;iQ0-;sKqIVVNXbf za;XefS<7_v6Br?~j73w5(Ky{`@%of*Et^G-cW2_ zgQ!uH@Isi*EDy`_%3g>NpDP2InoQTe#S= zh#eDsc^EL4Oxvk78l@9EyL7hKMGawk;1n1g45=_|TPgldmM!eEmZ)kxYXt$0R^w-e z84SH0;SisWQ!G~CamFtJ*ccyugj?8@lpJ}!BqgoJmb+NN;SE-H9*GKacRzSe??<>YU5ya8{3C}sXj(K)^# zo`_(sC^tTGD?TC)iQw^K3oCC*qqE-`n$HKmls1HRVScdKcZHc!Ik?H9(kLN&$ojJf znX<2|^*?ve;Qjj$85XK5e7UI!&?c;y2!PC~yd=B{RMVBnv!Q!);#BRU ziNh+S;IW}y*eoVE;#2JVV#wL(TbYq|D?k?mRLH8T@v_^`y z$Md-IKz-2>^BJn&uY6&{cX6i1_yZ7ZGYO4`fsY02`vx;oX~=WFqT{*sbhcc=)=Z&t z?u;@S&1|Tg>D&kd+KbDgFbIh9PpQ+);f77tmSn2C;#Hp%QUK-;y|0#<^QWS@sw6{L z6;VO)@(t2_2(@_!E9N2Ur=B*?cWoV*Y{80b+P+5EufGq~TSa5clY8FPXQfxdOqf#b zSn_kCIGA5I8k){srfB?af~3Tp*BP;)d#(Qh`M~EKR9+va@!~GXGhk zp{`ZCw$AyLrewXEV_cVu#lCVY8-c4;kh3*+tdPu@*6y%#dKsxy>55e5P%xB2X2_X> zSvAGMbTXZ)|CL|3^Rq?yg)6S1NV=OqY^aQ=gf7YS&T18MqZAa)U+s*t{X&Gq@{qsg z&){t)TU}>Erofk+h!KQeKbOgTagO2=qfm3A&&&(W-^YPFP3JY4+}!MRn@l_6Q!6G zzxx_NEjDbbdC?za$#D#0v=a+;_=MwJ@I?(Nn}Re%x$0Mx0hRIXcU^wh%Hd)F&TqF& zg8LuM8L`+s-ojR(^nB=S`r}~(VF|Vc4*YrA7_=@RX9s;I+N6hkT%Mruj^+|OCdMQ} ztj0qRO_ee07PH17Y*pUpph;iqPoNjdE4j|TNZ=-@C&6J}Ip3j>KB41L{e3o&9 zrOsmC%DCHa1-z{oH#tnxi!^2%vGiJ_VpxU0#J(DOXX004x4{rzCTsDPoR*ek(si!; zjWg#p(XG^rU4-4O$+L7%RJ1d|m$K2EeP|c`(BO+_rsfTRMOO(D(ED2EVh0KtIwX_S z2xI({Xi+8A>pVHO))aI{TRI(Z<`7B7LKn_(Nk)e?pz-ravq%InV7WippU?5TD%B*#cH;}l5=M4s-Z#Jgj*+Hh7+)PAR zE`aOCktNSYx*u?$5i9SH^+d8|OG-g)HBN{9C~UiqI}RHuWZG7@MxzfCz7^tw39xQJ zz*0JXEl>w9+@P4DMbp%9%+*?hBrHVzbfwt~X4PP&^W(Wt*$F|-x+8NsM14aQB*-{# z?h8lYxMY`g5W7(u@ z=h?iR*gwvvrZ#v)pYwk05nbJhxYBKQNRMpe$snEx(JFd;bVvt%W|6iw2Vebq{~qb$ z5tMEVhKf}Xv|_T)yQ`?-T2UN`k>XjJeejhOTQpbB(Oiy!puM;t)}QxKkh)yvXdCNJ zeeNc0BHxV5jXbs9R{BF+M7DDBt0bqfRfBr8^&9!-Y5QTRW`D#DQ*`9gE^f#>q4xGA zzw~mBwIUa+x9a4C3Kyapwzhx%E`|sHTzNP1tYdLEGvsVOFd91q)HPbb$b|%X_nnY? ziO0bs7CEJUW!CA^!^UbphnpO>%Ju|}p01L*MoUYjp}x7p%~{$A zvas3AcvP@|&6@G=JjeAMgm)HUcqx8q>RGuL4q&PT-I1IVbWjoHDFava{!2g$Qum~& zqN>WOa`;c6=1HE-pq=dG&{qSvi_64u;`mDAUHmz!ht~@SHq43a`@cnq`R3|iC!`x> zvN#BTt-knI(VZCt5{x5(JV33&NV}UB6n!tSaXs8sI(R|*({H$}6YIn4zDiq5Ppk+$ zL)0=!`|gs*VVmQBCO2cnv#=&#U4~>~R@U4Pye_DJNDpB?3Z9A+9tY%gNtX|4A71$Y z*-`U4N**GzDyE?|c zrrSJ-_Zt4``8;$2kR(HpFkn${;_Drg9rn(oUNYE)(Y#4VK-Kw zue%3nA-w0d%3Is50x4NHFfdfCzjZWKg}$@P&C)qne_ik|l*B%%$58v*EvKos|0$`e zYQ}0gDOxu#b+wVIWYE)6HPF`MX=^TlQ9sMj0z$A=`O=H56MMkZSsqb8~q4noz5P;%k*A=ONHI$trN>DEDkLpkUCT3okCWMM)2Zre*`DMn) z3OU&G{qjA}2;VH&M2K!|^u)z=+{%@>-qW5Jnm7E`T=eM(S}?Dy)>>k9K9Ch9Zf@@U z0i?T>k2x2eu7Q@CK2wPG?E$=&xHVErq>}ztU3@m zZU&?XG=1DPWs2h_;I?Z(=b=^cTl;&KXwt+SC{-f~btcE_i-nYtxGnYu%~ZNIb)1d7 zX#3Z3LkiC?7$i!129qD`7#f)B>Z@uqd4??II$t(BBSHX#r7ZJdb}6%nKRdCt@_~-< z+u}WaLP^zu83EX5g&Bg1@2*5stBXZgJq;uFxmMJ{*2fYmXA%wv7klm05@#wL!Q1mI zeepXaQ}a4l)}8|#pIJ!l!8LAw4b++<{X2G0QT|!KSYfuz@ChcEw0HWsc^N*cZL~L+ ztS+qB_*at#kEIX$JXrZs*u8LXNaJ?pX?PMD@HZ5;Tepbk$UL9D2L207&Rf2EUBMox z(V%AUOmUeq0Uo&GI%-Njlsng?_X|XfRJd`Qna7RzQN9~LN)unv7uV?}>JlLvLb+je zp~rMznKPSaKIM8^3T_+6Qz>Cx?qd9VZPd3g?M%=FgkS=GsF1Zd`=^t|8KzY!nz(uG7Fdapi~Y-{L%y~F z&bB`_pgP0yO~G6kI2Gk8#l>gt@}r`gVwxdWGx(7)Q&R=~6@ABU*5>jIleLQF#SVVv ztG!S{^D--F&o*kjB6dU06U0t*jjA!fLRF@rasbETMU(M_c7qry+fIo0FZ5?%z#OKI zGr9MtRYgR*d8+tw;uEOklj^MnPlZX;b-p<~{kpvzhG)$9K@xZAF|@KT{RU`oOkP%Ygjkj>d7M56DjX{ z0dM)_-Uf@W9FabxL z$|oh6g7E=EH1t_X6h08ehp7e4*QzSYcG*wX#7ZD8YM1g}Pn zolp6?YC0OK+RCatbw!O;C0us1G$)RMl8){)^oX8KG{0aP6fB(`tLYQe8ZHX=_VeKGzy*~#4(WFMZuZtAtP*3e z0uxAcZ+WE}5tQo<$@6m<15aFdL#a!LYwbE4ysGf1BUcxPwUJRM%H3R;fGP0^Up7#8 zk8Hozxp{uoYlg@|oqmknz|Q*fS(85!;f>>?jRt6B<&ww`kF7&MP>bxq#dAFG>xaab zO2OhS#Si;(zpK#;w=^Bv08$I@i@u^$T3^4y^I+gbd=vWZAZ$5ZRe= zBX5~8`CfV@^Q$*XKh`rd-l|M3ZVHhUdI`v$_JxNDc}w)=d{^;d7|HpQc( zrRUfw@4CLnXU$6&{lTjP;ER9d^JiE0^UI$rKMu7ipK!pVtts66op+72@k5~%_VzgA z(6X~(ih%BgQi%xK^*b;56mlZ1gF`kXco7Bdqs6eG8H-IYEG#<$-~eX+5@EEBqS|>N$6A|6xJ{rnl=FVrFLn zqWV=Q?A!6t71*gTRuJcY_?K=$T_#RFIBt4npstW+TVT~ykTBPRDU34~f*{-uxHfkt zbZ0$H8g4T<#6iuh@Yv910)0YIn?K}rmZw+gQRz$ zSD~bLY^Ha3hj-YrM)4+$^b{rQ0?$|ha{M!SKoqKqjh}ty7t|#P;$?XfA5|<*a4JCw zm4+lY?3vyek8YVf0l%QRig4G3pYg~{c9Yj0uf(0|)9?J^mPZz)NCQ_|b!zydskf_M zS;!hSnf{SWae)B(3Y#?DpR;BRR@dv?pTlN$%uaS4ff(y%`g=(e=B>FEZi$+P84#GG zn@FK9O5$M8ui6@YY-lBz*K>vudXvSzeasNayfb2fD2#YrTwFba8gRq->12_Gxz6Ba zMU1deto^2vI2Q1(5Hm~~yW6IowFuIPQ?_%0r>Td;+|uPj#AM|{JY!#=Zh0C|c2Fa- z@A9PJLOmfH&~}m|Dj`r5_eC3zs&eOG+oNv$$eM_lQJePskQ#xvb36N_{}B%Xd(D#g z_q{8Td2}G|f)56}>cM4lU8qSJohM9qiwdSeYgZ$hHT5v1aT~*2A~vl7apl2>xNtyW zG?*HJBF!L@Gs#TEZD zKzofZ8ruyw`^1X+pj0~gdHk&=m-wyOZ1HpF>`Hp55w2GHmE%Sr@5y-tKHk671F1Ag z0B6lJ?(jdCSfN;s@hQ>4TDjVs$cE+Bt=B4&b$;@&q~MlG_L$+pqvn-u<~RI%dG0r( z?^l|iWbB+HlorPz3mymZ@R(mhuNz^Eb_XuZ!swf^UL4`byD>=F0_DLlVzS5J5v6^f zEgJ_~r?9R`34eCt6;e=mCC#Tu;MFY@B&-~45C;rS-MBxOM<+aa)AVmQqkKNn?Jy!e zJQM~xG=`ke0dTBSJ!bI;4h(n^P+kxXhxMK8!Ymc5BE|bbXY>pO5q;TU9-zgPahosH zWbv{rYKQRo*UXC-k?G3U!h|U0OnxSJR<5&9!m`}DMte#BCU`J_Q7BE1!r#HaBKv4Q z#t^Sir72nCbF>-e9IDOWBd13yHXemHONb&-z8Qz%CcY~<9fUG4sADIJQ=_9`f>YZb zM~NQrtfXDWHj{{tFsLrM&S5-Qw_!b=k^qHe++3*%@>2k=7`SH>mX zpu`VWl}4@GUk{XqXf!}xVB7$=5niMp?dgTAPhD)+hlv&W-i5TZb5u{e-?yz3Z7$8b zUD8t$KUfd=6d;@16PTZ5F3p7;FiDcHOV0onD+z?O>GJPC=cX6L@tVn_qQ|NVva}$+ zZH=7p-<&}u9?UYvR0|UR1-azGEWdOGS&G2l!UA59xWW-b^Y8ba&dMRMF1eXaBb`FBs!ML4_p z66wodH}cN%g=#RWIJmXQd+C?h8nrK&(g!xjt((G0+@l@?r1t%r*a*;+axIY#7r2iA<3h3x1~@ySW_- zrq_@a5H=;37b@qBbw$*<#re~H0Qa1BSMm!$l|9NmyCQuo3CYNa$&M6NTm^esNFfW} z`TGLN?BV!lvoENBSO_4cR@(6Hx?HW5ImABl_~fkapB-h~*#|Y>dGz%SGO3)7p84Jx z=V0T$;z!&D5{ew=xXc~1<5oj@KbDZ~SJ)Sgkqo&=&x zjgb+Rrh+1`R|d5nC5J3ri2^KLfEVUA!h(DgvCEeiKS&&WOLG-=;tDI1H9enmk#U_^axLb;|sjw?^GhE!h{(TDlAi2(KZGV#gEh3!-8IMm5L+`U|Z-t zEg}wR`}u&fKG7#!$qA|N%kf3n=o1~x{u=~WTSLT5y5R=`&4IQ;Osp-9iqz=Pzb;f* z(!ey9*WN%@*|>^+Kpm@)A{Gt1ip)pB2dfcaoRL5T8F5#T{XR(!Np^l~PTGQzMB{X;Gl=e4(&(h$=dyotnxXNhzjYS;@e% z433>L%N|B4r=9xSfJZ6emFk=9kzv>sJB+jyO@5r268zvRoB*mSC8@Ns0ZQ7LWw*H1 zrrBMHJcQz%wiK6MSyTcM8d)yCFGqgx8mkc`;|aMGg!LUzKJ9oF=hozD18(B(+W^Os za48kc+hDG*K-rY|1a^WKSZX*aQKEv7ap@yVZhCQ!sIqq8H?RrM_NX zJOki_G-!-vI0kSQIxL7k!iSFwMw5LqFBor#U`*T6unBHof^e-=bH%g8l-+~q)@j-% zf01aVNJS2023{l12oJCwm7z5DrZ%()lEM$~rX;PHDRut~lbo-_aUDp@5uDhDS!)(x zfl7LZ7XWItPf}?pzT^Y+JcrtUZnId_Tc$M2&gvg{Ra|b^iH@~WCH9SZ%vS5~?-G2OYJCNj!_MSgv%3kyGx z_R|OFe>U1~J49=&A}#vdjsHC*{$!rp%k^?U5TDrM;G^V2pZuI|X9=$BC;Fa8PJU-&kuDt5E67=gj`L2A~xWDVFMBFfFSuFnw)M3m5P`Zk17}utwIZ(XGHmxC z6ouSPEnEt&0+&t#Cu`J-aag~W68Jh`V+NU|ED4FTXGEku!O(?Wgl_O{Ph^4D3LYhz z)57))lV`Gl;|gBbc<7+j;$Yw}|0JYTSt+(^iN8bAj~Xclh|WPa{fD%33eE&t)@W?o zwr$%^Cf3BZZQHhO+fM#C6Wg9RIdkj0-N$<$_v^0OyQ=%^UJD?#*|dA{x!f3+;s!Dr z&9XMGQ)@eJLjAT#$JFYSXF1Df6BU7hh&Kj46rS|-U22=%G$2DMJi ziRXLp~D!D}J zA|CYC5i{AyvZ3R%9NUo`zPo#Qr+5cGwugK}8sH1VsufAvF3EDEDPYVZQ(vC4Br?|| zcH211YJLit%v#%4oh_^OwiP?u>g`Ppn``vSpQqs?mjVp|QIz}aS3z-Ju-XPvz1%PISYUsW^~4e9`St#A_CE!+wdUK-n**r zu^!kTZ>Sc*VW4AQwiE%O_Ipz32yC+t4x+Km04!@zl3y?$FqT+Gz{Wr(5BY^17=P7f z-Pg2KXUW3r+tJ)bqm|3>Ni1KL*U1=9(lwJu&L?so&rOh%D!C$Uh)YIKd~EdZcug6p{(CX~Vk&Piv%~d^e4m&w>Gs41Zv^rq z_C_$q##K&YB8DVxdB7V^yzwyu=l_twTMZd@!^SW_+%S;N&5Yn3V#m-t-k4vX4d;4M zTx^`|-%*|xCxf;jeNms~d!w@sw%>jpiDswa=@I)TP-EN_pt*_+lPJ3Maq8nbQ-_Wyw9Uj-{asIb^(z4tgj_S$71bELcX-M8l58*C-rj>SDXtAIu1fkm&u&#h>jn={Ds(6O1nJSAA8_Cjw{Jjo&Pq(gE+H`2 zI*F8SthKrstZn$#Hh*YSQpZ{8n-?~LEt5`6Ndt?^P4lz(_NuMF`m+xEAr7n#_SH?wrb3b z8KN#%c7g6tI)q#iR>~f;&3xgl;7}dDh*y6In`~!QxZa*3YKqv_wx(uU)sFdh^zw1q zBl`5{{VSFhd`%{+(P+x+Ld9J1xt1Zk!{>l;{1XJpfK#o4nODGy!64#F)K0gC&Ayp- zjba7narl4T#$$biB{VvFU&XJpkL$3b&WL|2l3eCvst69&^(WspT__f+>!RBEM}};X z6MtA&@zbi~Xs^?LMRkD>E+{8_M%$c6{Vi^&IpANP)Bmnu&jP8&-`qUI+?Ys9kO<*V z_5Eb7egMIvf@hBv3bgpV1h!^9^n=>sRI^9O{FTLD&-Trgg+$SoaO6EZRM-H@Q6L)5 zL54EbE{VU1`Z;-~`L1K~eZ|Gi6 zf*C4XNci1nvXzMF6s%H;IBEVYETu#kWOU&+p-LDA;ucf)vy4u zrZ2?lGc_SBcU2cUZe2HveLLMDg>j2N*Cf^ni6h4WDTe=UMgKJm82b_0@70X)6P1v} z%Ny3)8&_q;UBn9)ZAZsS%D(>Y7k!3YI~G-9k@C-RxIHQGqcGGV*=9`g1fe;mY~bC$ zaYU;N6xouK3?dR-F6x1_V^2upUZEu6` zGWuzx?Z|b2{i}WPU2KF?l&KQ2LYP$}$ZDi& zf&B8odC}ZXD=vuir(Pdc`3CO${maqRUymobpPAkCgKs`um(zR1*Kib19d2 zm8QsK;aOfVg_Ez_^rxYXh*{0yASMnCc!%OpyUs@+Tg^@=7Yyv~``>U3L;AJ~J#P2%R zgv+PqZ$A!0T(YG(99*d#2;3v{@d;NUinIk0-lY9KBBgO9xZYRrrQKF3|21KMNB*T9 zGc4LRqV4SfHh12XNM57J4p@zdT8`R%DO-ott-YG|K`q9>iizcNr+uMtoNx3WoWV{o zuY3E3Fbotmbw**#bykhzv?D=QR&gZVw756Splh8YC)MIq%?Hu+t5kGqKLTiEye@wI zZGw8cI8Hdq-HllPs9L1`WoeDEzu{^}$L*Ac562ry&i7XxzBcPiy0kg;!SFAD9S+>Y zK?xNT+)TPBrl}Zf(IXSym2I1+WCi3DsBt8h(cgPW@x?M8C=yX$3AA}Z$s??LDDz=- z+shlQRn6vV=0*d+(`1u0Ojt5xlT}P8W>O@WX|1DvK$uBoCDZf6hIhU|5H&d7B#NJ( zc!JY~=vn(@Cy!Dwje~w^w8eApcm-0wKtT1|vT5egJl?kGd1DJ&!eck!ur))D%^ETa-7&ffdY` z7bq=GXtSwn2t`Wi5v#OMy9(K}i~S(*@AuU7D+wQ1I4$ z*rL5}sBMh3G;ox;m&RiIaX5GXd24nMnAW`<{v{4OtmKc~g+U}B8TbqiQ^QCs>Jw`5 zgA=;S$t3cL3NzBLXA>~Ckp(RKP6hUK?pAp9S5|1Y_OPm51_^+kLp0NGY??v z&;;zu&?DC^!ga{Y270&X-vy+>bhol`Rg?}-YeV!@nhxEz_}vw90QCVN290b3dRO=W zB&5Kn8dWMZwXk03O0oY>7QC29a zj!+aWvY|`KBsP(M-I0>AWs4V7k(`^ielx(N1G>3|dt%DJC~djUHld^zB}Bv0Kz&Dj4`-Qxz0TD^6~re zvuR>imp>WUU4!ydN5@gB3kZY!c%W=4f_yQ!T1mJhvf(#2@xVNpQZfn-}?xWubNcx-{2h9f5s)E)ZTkQf%L_GxUHKSgvP+O25^>Q@GeH(|18;+v&6 zBR7u{mak5?JYC)NJ@#aP5*62*To`{?lRTM{4y-IhAv-P zLUpj-vBE63%U*^tdKn`M?jAg-a^!ySYmBQ~uUNGpW=~8Hwx*yyq;+B&3_v5ZAou$* zAS^DCzO9WiR)M&+Ne>FJ9rr>}X3ed0jflzm2f~&?a8+P!q;d@-!%(DDP}XCKiw1o# ziN4u{uwr2^vb2n3#HGawDwJ)?z>ztU-OPU3Qds+v+vtfquK(ef8xj_sH$^Z$5=$ zE;9wXMi{G$$~W#@;gC;~oM2enrs|T{(!CVuf&!*RFpifjEjG8MVqS=tccM}I1V{1_ zYsg?-P?L|!SA<1ml5k1rutrjXezVZqjS3woYN*sG>zZ-X6hrZ%zbVQ|%pqlxsP^K2 zoyrjl{vtxtn0^KHgB>c)4qgkNw_rBi38-wD`>P*;>7AFB$W-!8g_ZIxXGdH7|l)SOStm=tYdSJjetvO8LLe%_N1SOZ=xV%3PukPbn z#}%o`L4Ap|4+u-2B)XVObx8_$3TZQkhfe^K=hm~QzSaV!3hY;+NKW3<(d| z1Ox9kC8-7kBp}|vu#fB=g8pXmKSxUOBGP;vEl*!nrfd>@Nj^~<;ucdB7C8g=ePY8ZC=ZXZE#Pkp{JRdZ`5V_F-qvtp9nH{p=-;{s z%lZ;Xy7t_)5E@yex8^m+f@R}?_GeNcBFMX_QH`3@#niIw`XPSLk;&siksaurkpy0o3=)X2S}7 zu#I<{jEeLDG+&09#rW{fcW8$oeTe918O<`r0G{3{j)E|eE*89fF&39r`0f>sD~+uN z9s2!}iJpK>E&9TU2b?ro(jk$a*&LyWcHpxIIWg?KA#d_<a|qLt<3TsFiRou# ziLm=9o}7s)5h2j;GDuyp+gIvL()Hrq4G3kI)kb+cV5wfPYM13hD%-HMu7ov!tvwrG ze%&(rmS0U0ffT~hd%a5%6RB-ieM@QEzqFgYlfZq@PX>LkC8=$AS8Zai)}=8-