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 0000000..2a3b03c Binary files /dev/null and b/src/java/ABTProductsPUTGenerator/bin/ABTProductsPUTGenerator.jar differ diff --git a/src/java/ABTProductsPUTGenerator/bin/README.md b/src/java/ABTProductsPUTGenerator/bin/README.md new file mode 100644 index 0000000..3d0dad5 --- /dev/null +++ b/src/java/ABTProductsPUTGenerator/bin/README.md @@ -0,0 +1,12 @@ +# ABTProducts PUT request body generator +Simple tool to quickly edit HTM products via ABTProducts REST API. + +- Requires JRE 21 +- Run via: `java -jar ABTProductsPUTGenerator.jar` + - Specify custom input/output path via: `java -jar ABTProductsPUTGenerator.jar ` +- Takes a ABTProducts GET response body in JSON format (product details) +- Generates the equivalent PUT request body - send via either: + - Postman WSO2 ABTProducts collection + - `curl -X PUT -H 'Content-Type: application/json' {baseUrl}/abt/abtproducts/1.0/38 --data @output.json` +- Default input path: /input.json +- Default output path: /output.json (output is overwritten if it exists) diff --git a/src/java/ABTProductsPUTGenerator/bin/input.json b/src/java/ABTProductsPUTGenerator/bin/input.json new file mode 100644 index 0000000..2873379 --- /dev/null +++ b/src/java/ABTProductsPUTGenerator/bin/input.json @@ -0,0 +1,154 @@ +{ + "productId": 38, + "parentProductId": null, + "productCode": "30901-WA", + "gboPackageTemplateId": "30901", + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM P1W Prolongatie-Test 90% Korting", + "productDescription": "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis met korting!", + "validityPeriod": { + "validityPeriodId": 148, + "fromInclusive": "2023-12-31T23:00:00.000+00:00", + "toInclusive": "2029-12-08T04:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Prolongation-Test 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": [ + { + "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": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 5, + "customerDataItem": "address" + } + ], + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1W", + "maxStartInFutureDuration": "P6W", + "isRenewable": true, + "sendInvoice": true, + "imageReference": "https://web.acc.cloud.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/reisproducten/productvoorwaarden/htm-90-korting/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 89, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2029-12-01T23: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": 82, + "amountExclTax": 92, + "amountInclTax": 100, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2029-12-01T23: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, + "auditTrail": [ + { + "auditTrailId": 162, + "action": "insert", + "user": "api", + "timestamp": "2024-11-25T08:39:36.793+00:00" + } + ] +} \ No newline at end of file diff --git a/src/java/ABTProductsPUTGenerator/bin/output.json b/src/java/ABTProductsPUTGenerator/bin/output.json new file mode 100644 index 0000000..070aba6 --- /dev/null +++ b/src/java/ABTProductsPUTGenerator/bin/output.json @@ -0,0 +1,58 @@ +{ + "parentProductId" : null, + "productCode" : "30901-WA", + "gboPackageTemplateId" : "30901", + "tapConnectProductCode" : null, + "productGroupMetadata" : null, + "productName" : "HTM P1W Prolongatie-Test 90% Korting", + "productDescription" : "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis met korting!", + "validityPeriod" : { + "validityPeriodId" : 148, + "fromInclusive" : "2023-12-31T23:00:00.000+00:00", + "toInclusive" : "2029-12-08T04:00:00.000+00:00" + }, + "productTranslations" : [ { + "language" : "en", + "name" : "HTM Prolongation-Test 90% Discount", + "description" : "Are you a regular traveler? Activate HTM 90% discount on your EMV card!" + } ], + "productOwnerId" : 17, + "marketSegmentIds" : [ 1 ], + "customerSegmentIds" : [ 2, 3, 4, 5 ], + "productCategoryId" : 1, + "requiredCustomerLevelId" : 3, + "requiredProducts" : null, + "incompatibleProducts" : null, + "mandatoryCustomerDataItemIds" : [ 1, 2, 4, 5 ], + "requiredGboPersonalAttributes" : null, + "tokenTypeIds" : [ 1 ], + "paymentMomentId" : 1, + "serviceOptions" : null, + "validityDuration" : "P1W", + "maxStartInFutureDuration" : "P6W", + "isRenewable" : true, + "sendInvoice" : true, + "imageReference" : "https://web.acc.cloud.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/reisproducten/productvoorwaarden/htm-90-korting/", + "isSellableAtHtm" : true, + "needsSolvencyCheckConsumer" : false, + "needsSolvencyCheckBusiness" : false, + "sellingPeriods" : [ { + "sellingPeriodId" : 89, + "fromInclusive" : "2024-09-30T23:00:00.000+00:00", + "toInclusive" : "2029-12-01T23:00:00.000+00:00", + "salesTouchpointId" : 3, + "forbiddenPaymentMethodIds" : null, + "sellingPrices" : [ { + "sellingPriceId" : 82, + "amountExclTax" : 92, + "amountInclTax" : 100, + "fromInclusive" : "2024-09-30T23:00:00.000+00:00", + "toInclusive" : "2029-12-01T23:00:00.000+00:00", + "internalPrice" : 0.0, + "taxMetadataId" : "47C8972E-A730-4032-9BDA-AF0A5BCB2C85" + } ] + } ], + "purchasePrices" : null +} \ No newline at end of file diff --git a/src/java/ABTProductsPUTGenerator/output.json b/src/java/ABTProductsPUTGenerator/output.json new file mode 100644 index 0000000..070aba6 --- /dev/null +++ b/src/java/ABTProductsPUTGenerator/output.json @@ -0,0 +1,58 @@ +{ + "parentProductId" : null, + "productCode" : "30901-WA", + "gboPackageTemplateId" : "30901", + "tapConnectProductCode" : null, + "productGroupMetadata" : null, + "productName" : "HTM P1W Prolongatie-Test 90% Korting", + "productDescription" : "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis met korting!", + "validityPeriod" : { + "validityPeriodId" : 148, + "fromInclusive" : "2023-12-31T23:00:00.000+00:00", + "toInclusive" : "2029-12-08T04:00:00.000+00:00" + }, + "productTranslations" : [ { + "language" : "en", + "name" : "HTM Prolongation-Test 90% Discount", + "description" : "Are you a regular traveler? Activate HTM 90% discount on your EMV card!" + } ], + "productOwnerId" : 17, + "marketSegmentIds" : [ 1 ], + "customerSegmentIds" : [ 2, 3, 4, 5 ], + "productCategoryId" : 1, + "requiredCustomerLevelId" : 3, + "requiredProducts" : null, + "incompatibleProducts" : null, + "mandatoryCustomerDataItemIds" : [ 1, 2, 4, 5 ], + "requiredGboPersonalAttributes" : null, + "tokenTypeIds" : [ 1 ], + "paymentMomentId" : 1, + "serviceOptions" : null, + "validityDuration" : "P1W", + "maxStartInFutureDuration" : "P6W", + "isRenewable" : true, + "sendInvoice" : true, + "imageReference" : "https://web.acc.cloud.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/reisproducten/productvoorwaarden/htm-90-korting/", + "isSellableAtHtm" : true, + "needsSolvencyCheckConsumer" : false, + "needsSolvencyCheckBusiness" : false, + "sellingPeriods" : [ { + "sellingPeriodId" : 89, + "fromInclusive" : "2024-09-30T23:00:00.000+00:00", + "toInclusive" : "2029-12-01T23:00:00.000+00:00", + "salesTouchpointId" : 3, + "forbiddenPaymentMethodIds" : null, + "sellingPrices" : [ { + "sellingPriceId" : 82, + "amountExclTax" : 92, + "amountInclTax" : 100, + "fromInclusive" : "2024-09-30T23:00:00.000+00:00", + "toInclusive" : "2029-12-01T23:00:00.000+00:00", + "internalPrice" : 0.0, + "taxMetadataId" : "47C8972E-A730-4032-9BDA-AF0A5BCB2C85" + } ] + } ], + "purchasePrices" : null +} \ No newline at end of file diff --git a/src/java/ABTProductsPUTGenerator/pom.xml b/src/java/ABTProductsPUTGenerator/pom.xml new file mode 100644 index 0000000..6c41c8c --- /dev/null +++ b/src/java/ABTProductsPUTGenerator/pom.xml @@ -0,0 +1,67 @@ + + 4.0.0 + nl.htm.ovpay.abt + ABTProductsPUTGenerator + 1.0-SNAPSHOT + ABTProductsPUTGenerator + Generate an ABTProducts PUT request body from a given ABTProducts GET response body + + + + + 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 + + + + com.fasterxml.jackson.core + jackson-databind + 2.17.2 + + + + + + maven-assembly-plugin + + + package + + single + + + + + + + nl.htm.ovpay.abt.ABTProductsPUTGenerator + + + + jar-with-dependencies + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 21 + 21 + + + + + diff --git a/src/java/ABTProductsPUTGenerator/src/main/java/nl/htm/ovpay/abt/ABTProductsPUTGenerator.java b/src/java/ABTProductsPUTGenerator/src/main/java/nl/htm/ovpay/abt/ABTProductsPUTGenerator.java new file mode 100644 index 0000000..ae4bdc2 --- /dev/null +++ b/src/java/ABTProductsPUTGenerator/src/main/java/nl/htm/ovpay/abt/ABTProductsPUTGenerator.java @@ -0,0 +1,272 @@ +package nl.htm.ovpay.abt; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.JsonNodeType; +import com.fasterxml.jackson.databind.node.ObjectNode; + +public class ABTProductsPUTGenerator { + private static final Logger LOGGER = LoggerFactory.getLogger(ABTProductsPUTGenerator.class); + + public static void main(String[] args) throws Exception { + if (args.length != 2) { + LOGGER.info("To modify input/output path, use: java -jar ABTProductsPUTGenerator.jar "); + } + var inputFile = args.length > 0 ? args[0] : "input.json"; + var outputFile = args.length > 1 ? args[1] : "output.json"; + try (InputStream is = getInputStream(inputFile)) { + ObjectMapper mapper = new ObjectMapper(); + JsonNode jsonNode = mapper.readTree(is); + Long productId = jsonNode.get("productId").asLong(); + + LOGGER.info("Successfully parsed product with productId {} from JSON:\n{}\n", productId, jsonNode.toPrettyString()); + + JsonNode putJsonNode = processJsonNode(jsonNode); + + writeToFile(putJsonNode, outputFile); + + LOGGER.info("DONE! Modify the output JSON as desired and send it as ABTProducts PUT request body:"); + LOGGER.info("curl -X PUT -H 'Content-Type: application/json' {baseUrl}/abt/abtproducts/1.0/products/{} --data @{}", productId, outputFile); + } + } + + private static InputStream getInputStream(String filePath) throws IOException { + var externalResource = new File(filePath); + if (externalResource.exists()) { + LOGGER.info("Loading ABTProducts details JSON from external file {}...", externalResource.getAbsolutePath()); + return externalResource.toURI().toURL().openStream(); + } else { + LOGGER.info("External file {} not found, using internal resource /input.json...", filePath); + return ABTProductsPUTGenerator.class.getResourceAsStream("/input.json"); + } + } + + private static void writeToFile(JsonNode jsonNode, String filePath) throws IOException { + ObjectMapper mapper = new ObjectMapper(); + var outputFile = new File(filePath); + if (outputFile.exists()) { + LOGGER.info("Deleting existing output file {}...", filePath); + outputFile.delete(); + } + mapper.writerWithDefaultPrettyPrinter().writeValue(outputFile, jsonNode); + LOGGER.info("Successfully wrote JSON to file {}!", outputFile.getAbsolutePath(), jsonNode.toPrettyString()); + } + + private static JsonNode processJsonNode(JsonNode jsonNode) { + var newJsonNode = new ObjectNode(new JsonNodeFactory(true)); + + jsonNode.fields().forEachRemaining(jsonField -> { + if (!List.of(JsonNodeType.ARRAY, JsonNodeType.OBJECT).contains(jsonField.getValue().getNodeType())) { + if (!jsonField.getKey().equals("productId") && !jsonField.getKey().equals("auditTrail")) { + LOGGER.info("Keeping {} as-is...", jsonField.getKey()); + newJsonNode.put(jsonField.getKey(), jsonField.getValue()); + } + } else { + if (List.of("validityPeriod", "productTranslations").contains(jsonField.getKey())) { + LOGGER.info("Keeping {} as-is...", jsonField.getKey()); + newJsonNode.set(jsonField.getKey(), jsonField.getValue()); + } else { + rewriteObjectFields(jsonField, newJsonNode); + rewriteArrayFields(jsonField, newJsonNode); + } + } + }); + + LOGGER.info("Successfully rewritten into PUT JSON:\n{}\n", newJsonNode.toPrettyString()); + + return newJsonNode; + } + + private static void rewriteObjectFields(Map.Entry jsonField, JsonNode newJsonNode) { + switch (jsonField.getKey()) { + case "productOwner" -> { + LOGGER.info("Rewriting productOwner to productOwnerId..."); + Long productOwnerId = jsonField.getValue().get("productOwnerId").asLong(); + ((ObjectNode)newJsonNode).put("productOwnerId", productOwnerId); + } + case "productCategory" -> { + LOGGER.info("Rewriting productCategory to productCategoryId..."); + Long productCategoryId = jsonField.getValue().get("productCategoryId").asLong(); + ((ObjectNode)newJsonNode).put("productCategoryId", productCategoryId); + } + case "paymentMoment" -> { + LOGGER.info("Rewriting paymentMoment to paymentMomentId..."); + Long paymentMomentId = jsonField.getValue().get("paymentMomentId").asLong(); + ((ObjectNode)newJsonNode).put("paymentMomentId", paymentMomentId); + } + case "requiredCustomerLevel" -> { + LOGGER.info("Rewriting requiredCustomerLevel to requiredCustomerLevelId..."); + Long requiredCustomerLevelId = jsonField.getValue().get("requiredCustomerLevelId").asLong(); + ((ObjectNode)newJsonNode).put("requiredCustomerLevelId", requiredCustomerLevelId); + } + } + } + + private static void rewriteArrayFields(Map.Entry jsonField, JsonNode newJsonNode) { + switch (jsonField.getKey()) { + case "marketSegments" -> { + LOGGER.info("Rewriting marketSegments to marketSegmentIds..."); + if (jsonField.getValue() != null) { + ArrayNode marketSegmentIds = new ArrayNode(new JsonNodeFactory(true)); + ((ArrayNode)jsonField.getValue()).elements().forEachRemaining(marketSegment -> { + marketSegmentIds.add(marketSegment.get("marketSegmentId").asLong()); + }); + ((ObjectNode)newJsonNode).putArray("marketSegmentIds").addAll(marketSegmentIds); + } else { + ((ObjectNode)newJsonNode).putRawValue("marketSegmentIds", null); + } + } + case "customerSegments" -> { + LOGGER.info("Rewriting customerSegments to customerSegmentIds..."); + if (jsonField.getValue() != null) { + ArrayNode customerSegmentIds = new ArrayNode(new JsonNodeFactory(true)); + ((ArrayNode)jsonField.getValue()).elements().forEachRemaining(customerSegment -> { + customerSegmentIds.add(customerSegment.get("customerSegmentId").asLong()); + }); + ((ObjectNode)newJsonNode).putArray("customerSegmentIds").addAll(customerSegmentIds); + } else { + ((ObjectNode)newJsonNode).putRawValue("customerSegmentIds", null); + } + } + case "tokenTypes" -> { + LOGGER.info("Rewriting tokenTypes to tokenTypeIds..."); + if (jsonField.getValue() != null) { + ArrayNode tokenTypeIds = new ArrayNode(new JsonNodeFactory(true)); + ((ArrayNode)jsonField.getValue()).elements().forEachRemaining(tokenType -> { + tokenTypeIds.add(tokenType.get("tokenTypeId").asLong()); + }); + ((ObjectNode)newJsonNode).putArray("tokenTypeIds").addAll(tokenTypeIds); + } else { + ((ObjectNode)newJsonNode).putRawValue("tokenTypeIds", null); + } + } + case "mandatoryCustomerDataItems" -> { + LOGGER.info("Rewriting mandatoryCustomerDataItems to mandatoryCustomerDataItemIds..."); + if (jsonField.getValue() != null) { + ArrayNode mandatoryCustomerDataItemIds = new ArrayNode(new JsonNodeFactory(true)); + ((ArrayNode)jsonField.getValue()).elements().forEachRemaining(mandatoryCustomerDataItem -> { + mandatoryCustomerDataItemIds.add(mandatoryCustomerDataItem.get("mandatoryCustomerDataItemId").asLong()); + }); + ((ObjectNode)newJsonNode).putArray("mandatoryCustomerDataItemIds").addAll(mandatoryCustomerDataItemIds); + } else { + ((ObjectNode)newJsonNode).putRawValue("mandatoryCustomerDataItemIds", null); + } + } + case "requiredGboPersonalAttributes" -> { + LOGGER.info("Rewriting requiredGboPersonalAttributes to requiredGboPersonalAttributeIds..."); + if (jsonField.getValue() != null) { + ArrayNode requiredGboPersonalAttributeIds = new ArrayNode(new JsonNodeFactory(true)); + ((ArrayNode)jsonField.getValue()).elements().forEachRemaining(requiredGboPersonalAttribute -> { + requiredGboPersonalAttributeIds.add( + requiredGboPersonalAttribute.get("requiredGboPersonalAttributeId").asLong()); + }); + ((ObjectNode)newJsonNode).putArray("requiredGboPersonalAttributeIds").addAll(requiredGboPersonalAttributeIds); + } else { + ((ObjectNode)newJsonNode).putRawValue("requiredGboPersonalAttributeIds", null); + } + } + case "serviceOptions" -> { + LOGGER.info("Rewriting serviceOptions to serviceOptionIds..."); + if (jsonField.getValue() != null) { + ArrayNode serviceOptionIds = new ArrayNode(new JsonNodeFactory(true)); + ((ArrayNode)jsonField.getValue()).elements().forEachRemaining(serviceOption -> { + serviceOptionIds.add(serviceOption.get("serviceOptionId").asLong()); + }); + ((ObjectNode)newJsonNode).putArray("serviceOptionIds").addAll(serviceOptionIds); + } else { + ((ObjectNode)newJsonNode).putRawValue("serviceOptionIds", null); + } + } + case "incompatibleProducts" -> { + LOGGER.info("Rewriting incompatibleProducts to remove product names..."); + if (jsonField.getValue() != null) { + ArrayNode incompatibleProducts = ((ArrayNode)jsonField.getValue()).deepCopy(); + incompatibleProducts.elements().forEachRemaining(incompatibleProduct -> { + ((ObjectNode)incompatibleProduct).remove("productName"); + }); + ((ObjectNode)newJsonNode).putArray("incompatibleProducts").addAll(incompatibleProducts); + } else { + ((ObjectNode)newJsonNode).putRawValue("incompatibleProducts", null); + } + } + case "requiredProducts" -> { + LOGGER.info("Rewriting requiredProducts to remove product names..."); + if (jsonField.getValue() != null) { + ArrayNode requiredProducts = ((ArrayNode)jsonField.getValue()).deepCopy(); + requiredProducts.elements().forEachRemaining(requiredProduct -> { + ((ObjectNode)requiredProduct).remove("productName"); + }); + ((ObjectNode)newJsonNode).putArray("requiredProducts").addAll(requiredProducts); + } else { + ((ObjectNode)newJsonNode).putRawValue("requiredProducts", null); + } + } + case "sellingPeriods" -> { + if (jsonField.getValue() != null) { + LOGGER.info("Rewriting salesTouchpoint in sellingPeriods to salesTouchpointId..."); + ArrayNode sellingPeriods = ((ArrayNode)jsonField.getValue()).deepCopy(); + sellingPeriods.elements().forEachRemaining(sellingPeriod -> { + Long salesTouchpointId = sellingPeriod.get("salesTouchpoint").get("salesTouchpointId").asLong(); + ((ObjectNode)sellingPeriod).put("salesTouchpointId", salesTouchpointId); + ((ObjectNode)sellingPeriod).remove("salesTouchpoint"); + if (sellingPeriod.get("forbiddenPaymentMethods") != null) { + LOGGER.info("Rewriting forbiddenPaymentMethods to forbiddenPaymentMethodIds..."); + ArrayNode forbiddenPaymentMethodIds = new ArrayNode(new JsonNodeFactory(true)); + sellingPeriod.get("forbiddenPaymentMethods").elements().forEachRemaining(forbiddenPaymentMethod -> { + forbiddenPaymentMethodIds.add(forbiddenPaymentMethod.get("forbiddenPaymentMethodId").asLong()); + }); + ((ObjectNode)sellingPeriod).remove("forbiddenPaymentMethods"); + if (!forbiddenPaymentMethodIds.isEmpty()) { + ((ObjectNode)sellingPeriod).putArray("forbiddenPaymentMethodIds").addAll(forbiddenPaymentMethodIds); + } else { + ((ObjectNode)sellingPeriod).putRawValue("forbiddenPaymentMethodIds", null); + } + } + if (sellingPeriod.get("sellingPrices") != null) { + LOGGER.info("Rewriting taxMetadata in sellingPrices to taxMetadataId..."); + ArrayNode sellingPrices = ((ArrayNode)sellingPeriod.get("sellingPrices")).deepCopy(); + sellingPrices.elements().forEachRemaining(sellingPrice -> { + String taxMetadataId = sellingPrice.get("taxMetadata").get("taxMetadataId").asText(); + ((ObjectNode)sellingPrice).put("taxMetadataId", taxMetadataId); + ((ObjectNode)sellingPrice).remove("taxMetadata"); + }); + ((ObjectNode)sellingPeriod).remove("sellingPrices"); + if (!sellingPrices.isEmpty()) { + ((ObjectNode)sellingPeriod).putArray("sellingPrices").addAll(sellingPrices); + } else { + ((ObjectNode)sellingPeriod).putRawValue("sellingPrices", null); + } + } + }); + ((ObjectNode)newJsonNode).putArray("sellingPeriods").addAll(sellingPeriods); + } else { + ((ObjectNode)newJsonNode).putRawValue("sellingPeriods", null); + } + } + case "purchasePrices" -> { + LOGGER.info("Rewriting taxMetadata in purchasePrices to taxMetadataId..."); + if (jsonField.getValue() != null) { + ArrayNode purchasePrices = ((ArrayNode)jsonField.getValue()).deepCopy(); + purchasePrices.elements().forEachRemaining(purchasePrice -> { + String taxMetadataId = purchasePrice.get("taxMetadata").get("taxMetadataId").asText(); + ((ObjectNode)purchasePrice).put("taxMetadataId", taxMetadataId); + ((ObjectNode)purchasePrice).remove("taxMetadata"); + }); + ((ObjectNode)newJsonNode).putArray("purchasePrices").addAll(purchasePrices); + } else { + ((ObjectNode)newJsonNode).putRawValue("purchasePrices", null); + } + } + } + } +} diff --git a/src/java/ABTProductsPUTGenerator/src/main/resources/input.json b/src/java/ABTProductsPUTGenerator/src/main/resources/input.json new file mode 100644 index 0000000..2873379 --- /dev/null +++ b/src/java/ABTProductsPUTGenerator/src/main/resources/input.json @@ -0,0 +1,154 @@ +{ + "productId": 38, + "parentProductId": null, + "productCode": "30901-WA", + "gboPackageTemplateId": "30901", + "tapConnectProductCode": null, + "productGroupMetadata": null, + "productName": "HTM P1W Prolongatie-Test 90% Korting", + "productDescription": "Reis je regelmatig met HTM? Activeer dan HTM 90% Korting op je betaalpas of credit card en reis met korting!", + "validityPeriod": { + "validityPeriodId": 148, + "fromInclusive": "2023-12-31T23:00:00.000+00:00", + "toInclusive": "2029-12-08T04:00:00.000+00:00" + }, + "productTranslations": [ + { + "language": "en", + "name": "HTM Prolongation-Test 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": [ + { + "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": 1, + "isTravelProduct": true, + "name": "Kortingsabonnement" + }, + "requiredCustomerLevel": { + "requiredCustomerLevelId": 3, + "name": "profile" + }, + "requiredProducts": null, + "incompatibleProducts": null, + "mandatoryCustomerDataItems": [ + { + "mandatoryCustomerDataItemId": 1, + "customerDataItem": "birthname" + }, + { + "mandatoryCustomerDataItemId": 2, + "customerDataItem": "surname" + }, + { + "mandatoryCustomerDataItemId": 4, + "customerDataItem": "emailAddress" + }, + { + "mandatoryCustomerDataItemId": 5, + "customerDataItem": "address" + } + ], + "requiredGboPersonalAttributes": null, + "tokenTypes": [ + { + "tokenTypeId": 1, + "name": "EMV" + } + ], + "paymentMoment": { + "paymentMomentId": 1, + "name": "prepaid" + }, + "serviceOptions": null, + "validityDuration": "P1W", + "maxStartInFutureDuration": "P6W", + "isRenewable": true, + "sendInvoice": true, + "imageReference": "https://web.acc.cloud.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/reisproducten/productvoorwaarden/htm-90-korting/", + "isSellableAtHtm": true, + "needsSolvencyCheckConsumer": false, + "needsSolvencyCheckBusiness": false, + "sellingPeriods": [ + { + "sellingPeriodId": 89, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2029-12-01T23: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": 82, + "amountExclTax": 92, + "amountInclTax": 100, + "fromInclusive": "2024-09-30T23:00:00.000+00:00", + "toInclusive": "2029-12-01T23: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, + "auditTrail": [ + { + "auditTrailId": 162, + "action": "insert", + "user": "api", + "timestamp": "2024-11-25T08:39:36.793+00:00" + } + ] +} \ No newline at end of file diff --git a/src/java/ABTProductsPUTGenerator/src/main/resources/log4j2.xml b/src/java/ABTProductsPUTGenerator/src/main/resources/log4j2.xml new file mode 100644 index 0000000..47eb2d8 --- /dev/null +++ b/src/java/ABTProductsPUTGenerator/src/main/resources/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff --git a/src/openapi/customers/customers-crud-v2.yaml b/src/openapi/customers/customers-crud-v2.yaml index 72ef1eb..83c7a68 100644 --- a/src/openapi/customers/customers-crud-v2.yaml +++ b/src/openapi/customers/customers-crud-v2.yaml @@ -1,17 +1,1219 @@ 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/v1 + - url: https://api.integratielaag.nl/abt/abtcustomers/2.0 paths: + /customers: + get: + tags: + - Customer + summary: Search customer profiles + description: >- + Search for all customer profile list in the ABT database matching given 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: 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: + type: string + example: DB100001 + - name: debtorStatusId + in: query + schema: + type: array + items: + type: integer + description: Filter on possible debtor statuses. 1 = Active, 2 = Inactive + - name: vasCustomerNumber + in: query + schema: + type: string + example: VAS100001 + - name: lastLoginBefore + in: query + schema: + type: string + format: date-time + example: "2022-08-04 15:01:00.000" + - name: lastLoginAfter + in: query + schema: + type: string + format: date-time + example: "2022-08-04 15:01:00.000" + - name: birthname + in: query + schema: + type: string + example: John + - name: surname + in: query + schema: + type: string + example: Doe + - name: prefix + in: query + schema: + type: string + example: de + - name: suffix + in: query + schema: + type: string + example: PhD + - 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: 1234AB + - name: addressCity + in: query + schema: + type: string + example: The Hague + - name: addressCountry + in: query + schema: + type: string + example: NL + - 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: ovPasNumber + in: query + schema: + type: string + 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 + - 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: ascription + in: query + schema: + type: string + example: j.jansen + - name: billingAlias + in: query + schema: + type: string + example: Mijn ING bankrekening + - name: sort + in: query + schema: + type: string + - name: offset + in: query + schema: + type: integer + - name: limit + in: query + schema: + type: integer + example: 20 + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/getCustomerProfiles" + examples: + getCustomersMultiple: + summary: getCustomersMultiple + description: >- + Found multiple customer profiles matching the search parameters, does not return the financial details + 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: "2022-08-05 15:01:00.000" + person: + birthname: Pieter + surname: 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 + _links: + { + "self": + { + "href": "https://api.integratielaag.nl/abt/abtcustomers/2.0/customers?customerProfileId=1", + "method": "GET", + }, + } + - customerProfileId: 12 + customerNumber: 1000002 + debtorNumber: DB100121 + 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: "2022-08-05 15:01:00.000" + - customerStatus: + 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 + surname: Valen + prefix: de + suffix: PhD + dateOfBirth: "2002-10-29" + emailAddresses: 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 + 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: 2 + name: OV-pas physical + xTat: 0115b0df-db38-4702-8811-6f7de00db3ac + xBot: 71a88843-32b8-4d52-ac25-de2458c47775 + alias: alias + lastDigits: "5678" + ovpasNumber: OV34567 + 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 + _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: >- + 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: 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 + _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: >- + 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: 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 + _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: + 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 + 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 + - Requested format for country: + - NL + 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: de + 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 + debtorNumber: DB100001 + 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: + - Customer + summary: Modify a customer element + description: >- + + parameters: + - name: customerProfileId + in: path + required: true + schema: + type: integer + example: 1 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/customersEntity" + examples: + customer: + value: + debtorStatusId: 2 + required: true + responses: + 201: + description: Successfully modified a customer + content: + application/json: + schema: + $ref: "#/components/schemas/patchCustomerProfileResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerProfileId}/customerStatusInstances: + post: + tags: + - Customer + summary: Create a new customer status element + 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/postCustomerStatusResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerProfileId}/customerPreferences: + post: + tags: + - Customer + 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/postCustomerPreferencesResponse" + security: + - default: [] + 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 address + 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 address + summary: Edit 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/postCustomerProfileAddressResponse" + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + delete: + tags: + - Customer address + summary: Delete a customer address + description: >- + + parameters: + - name: addressId + in: path + required: true + schema: + type: integer + example: 2 + responses: + 200: + description: Successfully deleted a customer Address + content: + application/json: {} + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /customers/{customerProfileId}/phones: + post: + tags: + - Customer phoneNumber + 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/phoneEntity" + examples: + customerPhone: + value: + phone: + number: 0701112233 + countryCode: 0031 + phoneTypeId: 1 + isPreferred: true + required: true + responses: + 201: + description: Successfully created a customer phonenumber + 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 phoneNumber + summary: Edit a customer phonenumber + description: >- + + parameters: + - name: phoneId + in: path + required: true + schema: + type: integer + example: 2 + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/phoneEntity" + examples: + updatePhoneTypeId: + value: + phone: + phoneTypeId: 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 phoneNumber + 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: - - Token - summary: Find OVpay tokens. - description: Find OVpay tokens. + - Ovpay Token + summary: Find ovpay tokens. + description: Find ovpay tokens. parameters: - in: query name: ovPayTokenId @@ -101,6 +1303,19 @@ 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: + type: integer + - name: limit + in: query + schema: + type: integer + example: 20 responses: 200: description: OK @@ -127,8 +1342,491 @@ paths: "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: + 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: + - 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 ovchipcard + description: >- + + parameters: + - name: ovchipcardId + in: path + required: true + schema: + type: integer + example: 2 + responses: + 200: + description: Successfully deleted a customer ovchipcard + content: + application/json: {} + security: + - 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: bic + 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 + - name: sort + in: query + schema: + type: string + - name: offset + in: query + schema: + type: integer + - name: limit + in: query + schema: + type: integer + example: 20 + 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", + "bic": "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", + "bic": "GHJZIEJSKVM", + "ascription": "J. Doe", + "alias": null, + "billingAddressId": 42, + }, + { + "billingInformationId": 11, + "customerProfileId": 9, + "issuerCountry": "NL", + "iban": "NL27ABNA4458972219", + "bic": "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" + bic: "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: + example: + { + "billingInformationId": 1, + "customerProfileId": 1, + "issuerCountry": "NL", + "iban": "NL06RABO8902022560", + "ascription": "J. Doe", + "alias": "Mijn rekening details", + "billingAddressId": 4, + } + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /directdebitmandates: get: tags: @@ -223,6 +1921,19 @@ 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: + type: integer + - name: limit + in: query + schema: + type: integer + example: 20 responses: 200: description: OK @@ -230,30 +1941,182 @@ paths: application/json: schema: $ref: "#/components/schemas/unavailable" + 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: + - Mandates + summary: Add a customer direct debit mandate + 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 + /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: + customerDirectDebitMandateCancelled: + value: + directDebitMandate: + mandateState: CANCELLED + required: true + responses: + 200: + description: Successfully updated a customer mandate + content: + application/json: example: - [ - { - "directDebitMandateId": 71, - "customerProfileId": 12, - "billingInformationId": 51, - "directDebitMandateType": { + { + "directDebitMandateId": 1, + "customerProfileId": 12, + "billingInformationId": 51, + "directDebitMandateType": + { "directDebitMandateTypeId": 1, "name": "import", - "description": "import" + "description": "import", }, - "mandateAddressId": 21, - "created": "2024-03-22T08:55:00", - "mandateReference": "CORE01", - "mandateState": "SINGED", - "updateTimestamp": "2024-03-22T08:55:00" - }, - ] + "mandateAddressId": 21, + "created": "2024-03-22T08:55:00", + "mandateReference": "CORE01", + "mandateState": "CANCELLED", + "updateTimestamp": "2025-03-22T08:55:00", + } + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited components: securitySchemes: - bearerToken: - type: http - scheme: bearer - bearerFormat: JWT + default: + type: oauth2 + flows: + implicit: + authorizationUrl: https://services.acc.api.htm.nl/authorize + scopes: {} schemas: unavailable: type: object @@ -283,3 +2146,530 @@ components: example: - /account/12345 - /account/67890 + getAuditTrails: + type: object + properties: + auditTrailId: + type: integer + customerProfileId: + type: integer + action: + type: string + user: + type: string + timestamp: + type: string + format: datetime + correlationId: + type: string + getOvPayTokens: + 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 + getOvChipcards: + type: object + properties: + ovChipCardId: + type: integer + chipCardNumber: + type: integer + validUntil: + type: string + format: date + alias: + type: string + getCustomerStatusInstance: + type: object + 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 + getDebtorStatus: + type: object + properties: + debtorStatusId: + type: integer + name: + type: string + getPerson: + type: object + properties: + birthname: + type: string + description: voornaam + surname: + type: string + description: achternaam + prefix: + type: string + description: tussenvoegsel + suffix: + type: string + description: achtervoegsel + dateOfBirth: + type: string + format: date + emailAddresses: + type: string + format: email + addresses: + type: array + items: + $ref: "#/components/schemas/getAddresses" + phones: + type: array + items: + $ref: "#/components/schemas/getPhones" + getAddresses: + 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: + $ref: "#/components/schemas/getAddressType" + getAddressType: + type: object + properties: + addressTypeId: + type: integer + name: + type: string + getPhones: + type: object + properties: + phoneId: + type: integer + number: + type: string + countryCode: + type: string + phoneType: + $ref: "#/components/schemas/getPhoneType" + isPreferred: + type: boolean + getPhoneType: + type: object + properties: + phoneTypeId: + type: integer + name: + type: string + getCustomerPreference: + type: object + properties: + language: + $ref: "#/components/schemas/getCustomerLanguage" + getCustomerLanguage: + type: object + properties: + languageId: + type: integer + name: + type: string + ietfCode: + type: string + iso639Code: + type: string + getCustomerProfiles: + type: object + properties: + customers: + type: array + items: + $ref: "#/components/schemas/getCustomerProfile" + getCustomerProfile: + type: object + properties: + customerNumber: + type: integer + debtorNumber: + type: integer + debtorStatus: + $ref: "#/components/schemas/getDebtorStatus" + vasCustomerNumber: + type: integer + customerPreference: + $ref: "#/components/schemas/getCustomerPreference" + customerStatusInstances: + type: array + items: + $ref: "#/components/schemas/getCustomerStatusInstance" + person: + $ref: "#/components/schemas/getPerson" + ovChipcards: + type: array + items: + $ref: "#/components/schemas/getOvChipcards" + ovPayTokens: + type: array + items: + $ref: "#/components/schemas/getOvPayTokens" + auditTrails: + type: array + items: + $ref: "#/components/schemas/getAuditTrails" + 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 + postPhoneEntity: + required: + - countryCode + - number + - phoneTypeId + type: object + properties: + number: + type: string + countryCode: + type: string + phoneTypeId: + type: integer + isPreferred: + type: boolean + phoneEntity: + type: object + properties: + number: + type: string + countryCode: + type: string + phoneTypeId: + type: integer + isPreferred: + type: boolean + defaultCustomerProfileResponse: + type: object + properties: + 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/postPhoneEntity" + 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 + 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 + postCustomerProfileResponse: + type: object + properties: + customerNumber: + type: integer + example: 10000001 + customerProfileId: + type: integer + example: 1 + postCustomerProfileAddressResponse: + type: object + properties: + customerProfileId: + type: integer + example: 1 + addressId: + type: integer + example: 3 + postPhoneResponse: + type: object + properties: + phoneId: + type: integer + example: 2 + postBillingInformationResponse: + type: object + properties: + billingInformationId: + type: integer + example: 1 + postDirectDebitMandateResponse: + type: object + properties: + directDebitMandateId: + type: integer + example: 1 + postOvChipCardResponse: + type: object + properties: + ovChipCardId: + type: integer + example: 1 + patchCustomerProfileResponse: + type: object + properties: + customerProfileId: + type: integer + example: 1 + postCustomerStatusResponse: + type: object + properties: + customerPreferenceId: + type: integer + example: 1 + postCustomerPreferencesResponse: + type: object + properties: + customerPreferenceId: + type: integer + example: 1 + patchCustomerPreferencesResponse: + type: object + properties: + customerPreferenceId: + type: integer + example: 1 + customerLanguageId: + type: integer + example: 1 + getCustomerProfileOvPayTokenResponse: + type: object + properties: + ovPayToken: + 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 + ascription: + type: string + alias: + type: string + billingAddressId: + type: integer + mandateEntity: + type: object + properties: + directDebitMandateId: + type: integer + directDebitMandateTypeId: + type: integer + mandateAddressId: + type: integer + mandateReference: + 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 + description: voornaam + surname: + type: string + description: achternaam + prefix: + type: string + description: tussenvoegsel + suffix: + type: string + description: achtervoegsel + dateOfBirth: + type: string + format: date + emailAddress: + type: string + postOvPayTokenResponse: + type: object + properties: + ovPayTokenId: + type: integer + example: 1 + ErrorResponse: + type: object + properties: + type: + type: string + title: + type: string + detail: + type: string + instance: + type: string diff --git a/src/openapi/fiko/fiko-crud.yaml b/src/openapi/fiko/fiko-crud.yaml index 33fb229..bfc55cd 100644 --- a/src/openapi/fiko/fiko-crud.yaml +++ b/src/openapi/fiko/fiko-crud.yaml @@ -8,12 +8,12 @@ info: servers: - url: https://api.integratielaag.nl/fiko/1.0 paths: - /transactionitems: + /Odata/TransactionItem: get: - summary: P1. Find transaction items. + summary: Find transaction items. description: Find transaction items. tags: - - Transactions v2.2 + - Odata parameters: - $ref: "#/components/parameters/top" - $ref: "#/components/parameters/skip" @@ -91,16 +91,19 @@ paths: summary: No transaction items were found description: No transaction items that match the search criteria were found. value: - transactionItems: [] - href: null + "@odata.context": "$metadata#TransactionItem" + value: [] 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 + "@odata.context": "$metadata#TransactionItem" + value: + - "@odata.etag": 6962e56b-c7dd-3336-9627-6687f007ee07 + transactionItemRowId: 3231 + transactionItemId: afce35b2-1dff-4ace-98d0-4b9ac405c87d transactionType: sales - sourceName: Verkoopengine + sourceName: HTM-website transactionId: 1001236 transactionLineId: 1 name: HTM Maandkorting 20% @@ -115,9 +118,11 @@ paths: status: created aggregationReference: null accountingSystemReference: null - - transactionItemId: 1c1fc1c8-57f4-4336-9b43-a974eae5afbf + - "@odata.etag": e671c8a1-b918-4867-bf12-5289822479c3 + transactionItemRowId: 3232 + transactionItemId: 1c1fc1c8-57f4-4336-9b43-a974eae5afbf transactionType: sales - sourceName: Verkoopengine + sourceName: HTM-website transactionId: 1002001 transactionLineId: 1 name: Reisproduct HTM 3 dag Anoniem @@ -132,9 +137,11 @@ paths: status: failed aggregationReference: null accountingSystemReference: null - - transactionItemId: 3f58441e-dc8f-4956-9bc5-c952312476db + - "@odata.etag": be2715d4-4eff-4562-9bf3-5c43ad23e2c8 + transactionItemRowId: 3233 + transactionItemId: 3f58441e-dc8f-4956-9bc5-c952312476db transactionType: sales - sourceName: Verkoopengine + sourceName: HTM-website transactionId: 1001871 transactionLineId: 1 name: Reisproduct HTM 3 dag Anoniem @@ -149,9 +156,11 @@ paths: status: returned to src aggregationReference: FIKO-171f40609e accountingSystemReference: null - - transactionItemId: 4418825f-3f9b-45bc-b662-dc3cd4ce6599 + - "@odata.etag": 52130c4d-e944-4454-a73e-8d55449a4bd1 + transactionItemRowId: 3234 + transactionItemId: 4418825f-3f9b-45bc-b662-dc3cd4ce6599 transactionType: sales - sourceName: Verkoopengine + sourceName: HTM-website transactionId: 1001131 transactionLineId: 1 name: Reisproduct HTM 3 dag Anoniem @@ -166,9 +175,11 @@ paths: status: returned to trx-db aggregationReference: null accountingSystemReference: null - - transactionItemId: 2ddc1831-cf7b-4a77-8aa1-11aaf8e98d9f + - "@odata.etag": 7da305e1-85cd-4250-ad77-8b54b2649cfb + transactionItemRowId: 3235 + transactionItemId: 2ddc1831-cf7b-4a77-8aa1-11aaf8e98d9f transactionType: sales - sourceName: Verkoopengine + sourceName: HTM-website transactionId: 1001885 transactionLineId: 1 name: Reisproduct HTM 3 dag Anoniem @@ -183,9 +194,11 @@ paths: status: re-entered aggregationReference: null accountingSystemReference: null - - transactionItemId: 5ab2513d-f334-4cf8-8895-4e7269374a4b + - "@odata.etag": c3b17d21-0506-474d-b3d4-7ff654f368b9 + transactionItemRowId: 3236 + transactionItemId: 5ab2513d-f334-4cf8-8895-4e7269374a4b transactionType: sales - sourceName: Verkoopengine + sourceName: HTM-website transactionId: 1001679 transactionLineId: 1 name: Reisproduct HTM 1 dag Anoniem @@ -200,7 +213,11 @@ paths: status: succeeded aggregationReference: FIKO-6a4fca8cd6 accountingSystemReference: U4F-123456 - href: null + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /transactionitems: post: summary: P1. Add one ore more finanicial transaction items in bulk. description: Add one ore more finanicial transaction items in bulk. @@ -219,7 +236,7 @@ paths: value: transactionItems: - transactionType: sales - sourceName: Verkoopengine + sourceName: HTM-website transactionId: 1001236 transactionLineId: 1 name: HTM Maandkorting 20% @@ -237,7 +254,7 @@ paths: value: transactionItems: - transactionType: sales - sourceName: Verkoopengine + sourceName: HTM-website transactionId: 1001236 transactionLineId: 1 name: HTM Maandkorting 20% @@ -250,7 +267,7 @@ paths: type: debit articleNumber: 4031 - transactionType: sales - sourceName: Verkoopengine + sourceName: HTM-website transactionId: 1001237 transactionLineId: 1 name: HTM Maandkorting 20% @@ -282,6 +299,10 @@ paths: clientTrackingId: 08584620957189579629541919368CU00 callbackurl: https://api.integratielaag.nl/transactionitems/responsestatus/runtime/webhooks/workflow/scaleUnits/prod-00/workflows/6fd466916c retryAfter: 10 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /transactionitems/{transactionItemId}: parameters: - in: path @@ -337,6 +358,10 @@ paths: description: The transaction item was successfully updated in the database. value: transactionItemId: 7c3a5b0f-b89e-4f02-8b09-d11c5a050a07 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /transactionitems/responsestatus/{clientTrackingId}: get: tags: @@ -391,6 +416,10 @@ paths: pointer: "#/transactionItems/0" transactionId: 1ad109d3-fd7d-4b6f-872b-220d492f385f transactionLineId: fee907dd-e59d-44f5-a63b-bbdec38f79b7 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /transactionitems/{transactionItemId}/processingfailures: parameters: - in: path @@ -439,6 +468,10 @@ paths: description: The processing failure was successfully added to the database. value: processingFailureId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /transactionitems/{transactionItemId}/transactionaudittrails: parameters: - in: path @@ -496,12 +529,16 @@ paths: The transactionAuditTrailId is returned as a reference for the consumer. value: transactionAuditTrailId: 37a8095b-19db-498f-9349-5f37d21c5bdf - /transactionaudittrails: + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /Odata/TransactionAuditTrail: get: - summary: P3. Find audit trail entries. + summary: Find audit trail entries. description: Find audit trail entries. tags: - - Audit Trail v2.2 + - Odata parameters: - $ref: "#/components/parameters/top" - $ref: "#/components/parameters/skip" @@ -568,18 +605,21 @@ paths: schema: $ref: "#/components/schemas/TransactionAuditTrailsGetResponseBody" examples: - No transaction items: + No transaction item audit trails: summary: No transaction audit trails were found description: No transaction audit trails that match the search criteria were found. value: - transactionAuditTrails: [] - href: null + "@odata.context": "$metadata#TransactionAuditTrail" + value: [] 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 + "@odata.context": "$metadata#TransactionAuditTrail" + value: + - "@odata.etag": 0d22aa9e-2183-4f2d-aa5b-98c362683529 + transactionAuditTrailRowId: 8218 + transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 user: fiko timestamp: 2025-01-01 12:34:51 @@ -587,7 +627,9 @@ paths: status: created description: Transaction created. correlationId: null - - transactionAuditTrailId: 1d234fc1-eb16-41d3-b2e0-e400e17b017f + - "@odata.etag": 1ce407d3-4725-46b8-92b2-47282ccd38f5 + transactionAuditTrailRowId: 8219 + transactionAuditTrailId: 1d234fc1-eb16-41d3-b2e0-e400e17b017f transactionItemId: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b user: fiko timestamp: 2025-01-01 12:34:50 @@ -595,7 +637,9 @@ paths: status: created description: Transaction created. correlationId: null - - transactionAuditTrailId: f4798a84-489d-4533-9dfe-42423c70f6b6 + - "@odata.etag": c8dec28b-bb85-4cb2-8a56-4a95fb2ed7bb + transactionAuditTrailRowId: 8220 + transactionAuditTrailId: f4798a84-489d-4533-9dfe-42423c70f6b6 transactionItemId: e8891be1-1b8a-4a0f-91e2-6b523b6497dd user: ad.vogelaar timestamp: 2025-01-01 12:34:48 @@ -603,7 +647,9 @@ paths: status: return to src description: Transaction retunred to source. correlationId: a3891560-3084-42cb-867c-f289e7cda47d - - transactionAuditTrailId: cc80d58d-6ee7-409a-8c14-b1f807e67c10 + - "@odata.etag": 967ddfa0-835e-4954-a4af-2eb11de325dc + transactionAuditTrailRowId: 8221 + transactionAuditTrailId: cc80d58d-6ee7-409a-8c14-b1f807e67c10 transactionItemId: 34ba3d7c-3ca1-4fa4-aa42-23d4c4fc767b user: fiko timestamp: 2025-01-01 12:34:47 @@ -611,13 +657,15 @@ paths: 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 + "@odata.context": "$metadata#TransactionAuditTrail" + value: + - "@odata.etag": 0d22aa9e-2183-4f2d-aa5b-98c362683529 + transactionAuditTrailRowId: 8218 + transactionAuditTrailId: d571ff7c-eaa5-428a-9bc3-5a0fa3e5ee2e transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 user: fiko timestamp: 2025-01-07 12:34:59 @@ -625,7 +673,9 @@ paths: status: re-entered description: Transaction re-entered. correlationId: null - - transactionAuditTrailId: b2192e6c-ab79-4000-a04d-d8f4d574a82f + - "@odata.etag": 1ce407d3-4725-46b8-92b2-47282ccd38f5 + transactionAuditTrailRowId: 8219 + transactionAuditTrailId: b2192e6c-ab79-4000-a04d-d8f4d574a82f transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 user: ad.vogelaar timestamp: 2025-01-04 12:34:54 @@ -633,7 +683,9 @@ paths: status: return to src description: Transaction retunred to source. correlationId: a3891560-3084-42cb-867c-f289e7cda47d - - transactionAuditTrailId: 1d759985-7f1a-48bd-8dd1-efa30ce26423 + - "@odata.etag": c8dec28b-bb85-4cb2-8a56-4a95fb2ed7bb + transactionAuditTrailRowId: 8220 + transactionAuditTrailId: 1d759985-7f1a-48bd-8dd1-efa30ce26423 transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 user: fiko timestamp: 2025-01-02 00:34:50 @@ -641,7 +693,9 @@ paths: status: failed description: Validation XYZ failed. correlationId: null - - transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d + - "@odata.etag": 967ddfa0-835e-4954-a4af-2eb11de325dc + transactionAuditTrailRowId: 8221 + transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 user: fiko timestamp: 2025-01-01 12:34:47 @@ -649,13 +703,15 @@ paths: 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). + ? List containing multiple audit trails of different failed transactions + : summary: List containing multiple audit trails of different failed transactions + description: List containing multiple audit trails of different failed transactions (status = failed). value: - transactionAuditTrails: - - transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d + "@odata.context": "$metadata#TransactionAuditTrail" + value: + - "@odata.etag": 0d22aa9e-2183-4f2d-aa5b-98c362683529 + transactionAuditTrailRowId: 8218 + transactionAuditTrailId: afce35b2-1dff-4ace-98d0-4b9ac405c87d transactionItemId: d667d293-aa82-4c9e-9b10-77cffc9058a1 user: fiko timestamp: 2025-01-01 00:34:51 @@ -663,7 +719,9 @@ paths: status: failed description: Validation XYZ failed. correlationId: null - - transactionAuditTrailId: 1d234fc1-eb16-41d3-b2e0-e400e17b017f + - "@odata.etag": 1ce407d3-4725-46b8-92b2-47282ccd38f5 + transactionAuditTrailRowId: 8219 + transactionAuditTrailId: 1d234fc1-eb16-41d3-b2e0-e400e17b017f transactionItemId: urn:uuid:4017fabc-1b28-11e8-accf-0ed5f89f718b user: fiko timestamp: 2025-01-01 00:34:50 @@ -671,7 +729,9 @@ paths: status: failed description: Validation XYZ failed. correlationId: null - - transactionAuditTrailId: f4798a84-489d-4533-9dfe-42423c70f6b6 + - "@odata.etag": c8dec28b-bb85-4cb2-8a56-4a95fb2ed7bb + transactionAuditTrailRowId: 8220 + transactionAuditTrailId: f4798a84-489d-4533-9dfe-42423c70f6b6 transactionItemId: e8891be1-1b8a-4a0f-91e2-6b523b6497dd user: fiko timestamp: 2025-01-01 00:34:48 @@ -679,7 +739,9 @@ paths: status: failed description: Validation XYZ failed. correlationId: null - - transactionAuditTrailId: cc80d58d-6ee7-409a-8c14-b1f807e67c10 + - "@odata.etag": 967ddfa0-835e-4954-a4af-2eb11de325dc + transactionAuditTrailRowId: 8221 + transactionAuditTrailId: cc80d58d-6ee7-409a-8c14-b1f807e67c10 transactionItemId: 34ba3d7c-3ca1-4fa4-aa42-23d4c4fc767b user: fiko timestamp: 2025-01-01 00:34:47 @@ -687,13 +749,16 @@ paths: status: failed description: Validation XYZ failed. correlationId: null - href: null - /processingfailures: + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /Odata/ProcessingFailure: get: - summary: P1.Find processing failures. + summary: Find processing failures. description: Find processing failures. tags: - - Failures v2.2 + - Odata parameters: - $ref: "#/components/parameters/top" - $ref: "#/components/parameters/skip" @@ -764,12 +829,12 @@ paths: schema: $ref: "#/components/schemas/ProcessingFailuresGetResponseBody" examples: - No processing failures: - summary: No processing failures + No processing failures were found: + summary: No processing failures were found description: No processing failures were found (for example for a single transaction item). value: - processingFailures: [] - href: null + "@odata.context": "$metadata#ProcessingFailure" + value: [] Multiple processing failures for a single transaction item: summary: Multiple processing failures for a single transaction item description: | @@ -778,8 +843,11 @@ paths: 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 + "@odata.context": "$metadata#ProcessingFailure" + value: + - "@odata.etag": 0d22aa9e-2183-4f2d-aa5b-98c362683529 + processingFailureRowId: 9 + processingFailureId: 37a8095b-19db-498f-9349-5f37d21c5bdf transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce timestamp: 2022-01-01 00:00:00 element: costType @@ -788,7 +856,9 @@ paths: reasonDescription: Cost type does not exist. resolved: false change: null - - processingFailureId: ccc06dc9-956d-47d8-bde7-9644ddde2193 + - "@odata.etag": ff49829d-a5de-4c1a-b331-15fd9c71dfe9 + processingFailureRowId: 10 + processingFailureId: ccc06dc9-956d-47d8-bde7-9644ddde2193 transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce timestamp: 2025-01-01 00:43:01 element: costCenter @@ -797,7 +867,9 @@ paths: reasonDescription: Cost center does not exist. resolved: true change: Adapt config - - processingFailureId: 96bf8d44-0030-4509-b24e-2d62299779c5 + - "@odata.etag": 5d5d3351-d3f1-49b2-905f-4dbbe1cc30e3 + processingFailureRowId: 11 + processingFailureId: 96bf8d44-0030-4509-b24e-2d62299779c5 transactionItemId: 2d77d978-7141-499a-84ad-93fad8ee03ce timestamp: 2025-01-01 00:43:01 element: department @@ -806,15 +878,17 @@ paths: 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 + "@odata.context": "$metadata#ProcessingFailure" + value: + - "@odata.etag": 0d22aa9e-2183-4f2d-aa5b-98c362683529 + processingFailureRowId: 9 + processingFailureId: 1d0f237e-5fbe-4107-8bdf-a41f43307ac0 transactionItemId: d0425652-07a3-4b95-bb37-8bb15ea1b9b5 timestamp: 2022-01-01 00:00:00 element: occuredOn @@ -823,7 +897,9 @@ paths: reasonDescription: Transaction date is in the future resolved: false change: null - - processingFailureId: 76aa82e1-a10f-4664-a84f-1f30d60884b3 + - "@odata.etag": 584d3a8a-48bc-45f9-99be-8dd70399e6e4 + processingFailureRowId: 10 + processingFailureId: 76aa82e1-a10f-4664-a84f-1f30d60884b3 transactionItemId: 3f0a8a74-c642-441e-a187-d32fedb77fdf timestamp: 2025-01-01 00:43:01 element: costCenter @@ -832,7 +908,9 @@ paths: reasonDescription: Cost center does not exist. resolved: false change: null - - processingFailureId: 25d2dd6f-ae17-44a7-b7a5-43eaf6de78e1 + - "@odata.etag": df4ade9b-1bda-4d91-a5ba-4dbe067568a0 + processingFailureRowId: 11 + processingFailureId: 25d2dd6f-ae17-44a7-b7a5-43eaf6de78e1 transactionItemId: 446ad396-41f6-4c1f-942c-a131e620075d timestamp: 2025-01-01 00:43:01 element: department @@ -841,7 +919,10 @@ paths: reasonDescription: Department does not exist. resolved: false change: null - href: null + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /processingfailures/{processingFailureId}: parameters: - in: path @@ -884,12 +965,16 @@ paths: description: The processing failure has been updated successfully. value: processingFailureId: 37a8095b-19db-498f-9349-5f37d21c5bdf - /bookingprocesses: + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /Odata/BookingProcess: get: - summary: P1. Find booking processes. + summary: Find booking processes. description: Find booking processes. tags: - - Booking Processes v2.2 + - Odata parameters: - $ref: "#/components/parameters/top" - $ref: "#/components/parameters/skip" @@ -941,16 +1026,25 @@ paths: 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 + "@odata.context": "$metadata#BookingProcess" + value: + - "@odata.etag": df4ade9b-1bda-4d91-a5ba-4dbe067568a0 + bookingProcessRowId: 10 + bookingProcessId: 37a8095b-19db-498f-9349-5f37d21c5bdf name: Verkooptransacties transactionType: sales identifyingFieldName: articleNumber - - bookingProcessId: 03105285-3c4c-477a-821c-0fae801d9d26 + - "@odata.etag": 97c65a01-f5ac-4081-b731-137622c4630d + bookingProcessRowId: 11 + bookingProcessId: 03105285-3c4c-477a-821c-0fae801d9d26 name: Inkooptransacties transactionType: purchase identifyingFieldName: null - href: null + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /bookingprocesses: post: summary: P2. Add a booking process. description: Add a booking process. @@ -984,6 +1078,10 @@ paths: description: The new booking process was successfully added to the database. value: bookingProcessId: 03105285-3c4c-477a-821c-0fae801d9d26 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /bookingprocesses/{bookingProcessId}: parameters: - in: path @@ -1025,6 +1123,10 @@ paths: description: The booking process was successfully updated in the database. value: bookingProcessId: 37a8095b-19db-498f-9349-5f37d21c5bdf + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /bookingprocesses/{bookingProcessId}/bookingmetadata: parameters: - in: path @@ -1075,12 +1177,16 @@ paths: description: The new booking metadata was successfully added to the database. value: bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 - /bookingmetadata: + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /Odata/BookingMetadata: get: - summary: P1. Find booking metadata. + summary: Find booking metadata. description: Find booking metadata. tags: - - Booking Processes v2.2 + - Odata parameters: - $ref: "#/components/parameters/top" - $ref: "#/components/parameters/skip" @@ -1161,8 +1267,11 @@ paths: 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 + "@odata.context": "$metadata#BookingMetadata" + value: + - "@odata.etag": 6962e56b-c7dd-3336-9627-6687f007ee07 + bookingMetadataRowId: 13 + bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 bookingProcessId: 37a8095b-19db-498f-9349-5f37d21c5bdf description: Dagkaart department: 900 @@ -1174,7 +1283,9 @@ paths: hasLinePerConcession: true validFrom: 2022-01-01 00:00:00 validUntil: null - - bookingMetadataId: bd290c3f-4a27-4898-911e-1aadacc4a034 + - "@odata.etag": 2fc41131-e875-4365-b4b4-f5babc7349b1 + bookingMetadataRowId: 14 + bookingMetadataId: bd290c3f-4a27-4898-911e-1aadacc4a034 bookingProcessId: 37a8095b-19db-498f-9349-5f37d21c5bdf description: Saldoreizen department: 900 @@ -1186,7 +1297,10 @@ paths: hasLinePerConcession: true validFrom: 2022-01-01 00:00:00 validUntil: null - href: null + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /bookingmetadata/{bookingMetadataId}: parameters: - in: path @@ -1228,6 +1342,10 @@ paths: description: The booking metadata was successfully updated in the database. value: bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /bookingmetadata/{bookingMetadataId}/bookinggroupfields: parameters: - in: path @@ -1268,6 +1386,10 @@ paths: description: The new booking group field was successfully added to the database. value: bookingGroupFieldId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /bookingmetadata/{bookingMetadataId}/bookinglinemetadata: parameters: - in: path @@ -1339,12 +1461,16 @@ paths: description: The new booking line metadata was successfully added to the database. value: bookingLineMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 - /bookinggroupfields: + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /Odata/BookingGroupField: get: - summary: P1. Find booking group fields. + summary: Find booking group fields. description: Find booking group fields. tags: - - Booking Processes v2.2 + - Odata parameters: - $ref: "#/components/parameters/top" - $ref: "#/components/parameters/skip" @@ -1407,58 +1533,90 @@ paths: 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 + "@odata.context": "$metadata#BookingGroupField" + value: + - "@odata.etag": 2e52e353-bf49-4296-8dc3-bd5e6096be4e + bookingGroupFieldRowId: 8 + bookingGroupFieldId: b34d0fc2-96fc-409b-93b6-ae51fb8c694a bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 identifyingFieldValue: 1737 - - bookingGroupFieldId: 3b9005f4-42c4-4e2b-b472-ba7d0926fe77 + - "@odata.etag": 3f285dc2-6ae3-4613-a759-68fada2afcdf + bookingGroupFieldRowId: 9 + bookingGroupFieldId: 3b9005f4-42c4-4e2b-b472-ba7d0926fe77 bookingMetadataId: bd290c3f-4a27-4898-911e-1aadacc4a034 identifyingFieldValue: 1748 - - bookingGroupFieldId: ae773282-ac9b-4a0b-a487-b4061ea2a42f + - "@odata.etag": f6f303f9-6685-44be-9c44-aec14a59e461 + bookingGroupFieldRowId: 10 + bookingGroupFieldId: ae773282-ac9b-4a0b-a487-b4061ea2a42f bookingMetadataId: bd290c3f-4a27-4898-911e-1aadacc4a034 identifyingFieldValue: 1750 - - bookingGroupFieldId: fe1aca8c-3ef5-4e15-962b-202d28d3d761 + - "@odata.etag": 39d5bf02-0ac3-47a2-8ba4-e00a18108e98 + bookingGroupFieldRowId: 11 + 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 + "@odata.context": "$metadata#BookingGroupField" + value: + - "@odata.etag": 2e52e353-bf49-4296-8dc3-bd5e6096be4e + bookingGroupFieldRowId: 8 + bookingGroupFieldId: b34d0fc2-96fc-409b-93b6-ae51fb8c694a bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 identifyingFieldValue: 1737 - - bookingGroupFieldId: fe1aca8c-3ef5-4e15-962b-202d28d3d761 + - "@odata.etag": d269b9e9-2f8e-4c3d-9874-599d2e7553aa + bookingGroupFieldRowId: 9 + bookingGroupFieldId: fe1aca8c-3ef5-4e15-962b-202d28d3d761 bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 identifyingFieldValue: 1757 - - bookingGroupFieldId: fede01e0-86c5-47d0-9466-3093132148e5 + - "@odata.etag": 8110f2ee-a37a-4e56-a3d8-5ae113675923 + bookingGroupFieldRowId: 10 + bookingGroupFieldId: fede01e0-86c5-47d0-9466-3093132148e5 bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 identifyingFieldValue: 4031 - - bookingGroupFieldId: d7c25182-b64e-4e47-8998-19ddb65b8f2c + - "@odata.etag": 89e9ef54-138a-479d-a4ce-5e01d3f8bb14 + bookingGroupFieldRowId: 11 + bookingGroupFieldId: d7c25182-b64e-4e47-8998-19ddb65b8f2c bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 identifyingFieldValue: 4032 - - bookingGroupFieldId: ea02d3eb-29e6-42fd-b7eb-dfbfd2231090 + - "@odata.etag": ab2242f7-b891-40fe-86c0-34e0f4453316 + bookingGroupFieldRowId: 12 + bookingGroupFieldId: ea02d3eb-29e6-42fd-b7eb-dfbfd2231090 bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 identifyingFieldValue: 4033 - - bookingGroupFieldId: a73407a6-ff8c-4924-a7ac-5cd605e1793c + - "@odata.etag": 9244dd72-fcc0-4578-97cc-9dcc55429eb4 + bookingGroupFieldRowId: 13 + bookingGroupFieldId: a73407a6-ff8c-4924-a7ac-5cd605e1793c bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 identifyingFieldValue: 4034 - - bookingGroupFieldId: d9af4bf1-4e85-4eb6-ae5d-d2020b18d63c + - "@odata.etag": 057281d9-65ef-46b9-b7d3-efee2968a438 + bookingGroupFieldRowId: 14 + bookingGroupFieldId: d9af4bf1-4e85-4eb6-ae5d-d2020b18d63c bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 identifyingFieldValue: 4051 - - bookingGroupFieldId: c1ba494b-249a-475b-a542-19918aa36778 + - "@odata.etag": 95e91fe2-e990-4b9e-a146-b44142d66b90 + bookingGroupFieldRowId: 15 + bookingGroupFieldId: c1ba494b-249a-475b-a542-19918aa36778 bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 identifyingFieldValue: 4053 - - bookingGroupFieldId: 69be1be0-c600-492d-aec1-8490409371da + - "@odata.etag": c346c96d-acac-4e2b-a652-219983fc5bca + bookingGroupFieldRowId: 16 + bookingGroupFieldId: 69be1be0-c600-492d-aec1-8490409371da bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 identifyingFieldValue: 4054 - - bookingGroupFieldId: d7d00ec1-6d53-44e9-bcd8-01f6a523f771 + - "@odata.etag": 39635b84-551e-4927-9787-28f6868d3b18 + bookingGroupFieldRowId: 17 + bookingGroupFieldId: d7d00ec1-6d53-44e9-bcd8-01f6a523f771 bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 identifyingFieldValue: 4055 - href: null + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /bookinggroupfields/{bookingGroupFieldId}: parameters: - in: path @@ -1477,12 +1635,16 @@ paths: responses: "200": description: OK - /bookinglinemetadata: + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /Odata/BookingLineMetadata: get: - summary: P1. Find booking line metadata. + summary: Find booking line metadata. description: Find booking line metadata. tags: - - Booking Processes v2.2 + - Odata parameters: - $ref: "#/components/parameters/top" - $ref: "#/components/parameters/skip" @@ -1569,26 +1731,20 @@ paths: 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). + List containing two different booking lines: + summary: List containing two different booking lines + description: List containing two different booking line metadata records, for two different booking processes (no filters applied). value: - bookingLineMetadata: - - bookingLineMetadataId: 98dccb4c-f24f-4acd-a036-f4b465124842 + "@odata.context": "$metadata#BookingLineMetadata" + value: + - "@odata.etag": 511fb29c-47d6-4af9-bc54-cbbf3de27dae + bookingLineMetadataRowId: 10 + 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: Koos Verweg - rejectionProcessing: system - rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc + sourceName: HTM-website identifyingFieldValue: null - concession: - concessionId: 2 - name: BUS + concessionId: 2 lineType: summary lineSense: credit costCenter: 603031 @@ -1599,21 +1755,14 @@ paths: extRef4: null extRef5: Webshop extRef6: null - - bookingLineMetadataId: 1bca01db-40d3-4447-9f28-41475ec6877d + - "@odata.etag": 42b91a85-0771-4cde-92ff-fe4a42bb6cf7 + bookingLineMetadataRowId: 11 + 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: Koos Verweg - rejectionProcessing: mail - rejectionInfo: helpdesk@translink.nl + sourceName: Translink identifyingFieldValue: null - concession: - concessionId: 1 - name: RAIL + concessionId: 1 lineType: summary lineSense: credit costCenter: 603007 @@ -1624,7 +1773,6 @@ paths: 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: | @@ -1632,22 +1780,16 @@ paths: 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 + "@odata.context": "$metadata#BookingLineMetadata" + value: + - "@odata.etag": 42b91a85-0771-4cde-92ff-fe4a42bb6cf7 + bookingLineMetadataRowId: 11 + 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: Koos Verweg - rejectionProcessing: system - rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc + name: Webshop - Dagkaart - BUS + sourceName: HTM-website identifyingFieldValue: null - concession: - concessionId: 2 - name: BUS + concessionId: 2 lineType: summary lineSense: credit costCenter: 619031 @@ -1658,21 +1800,14 @@ paths: extRef4: null extRef5: Webshop extRef6: null - - bookingLineMetadataId: a4464b5c-9a8e-4e48-a0a0-5500b1ca0885 + - "@odata.etag": 8513d1aa-5cba-4765-81ca-56ca1272cc05 + bookingLineMetadataRowId: 12 + 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: Koos Verweg - rejectionProcessing: system - rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc + name: Webshop - Dagkaart - RAIL + sourceName: HTM-website identifyingFieldValue: null - concession: - concessionId: 1 - name: RAIL + concessionId: 1 lineType: summary lineSense: credit costCenter: 603031 @@ -1683,21 +1818,14 @@ paths: extRef4: null extRef5: Webshop extRef6: null - - bookingLineMetadataId: feaa7b33-ba49-40a2-90f3-5dd70d591f17 + - "@odata.etag": 63e1c54d-7c6b-4b77-ab7f-86a5e9ce9e53 + bookingLineMetadataRowId: 13 + 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: Danny Negen - rejectionProcessing: mail - rejectionInfo: d.negen@htm.nl + name: Ticketapp - Dagkaart - BUS + sourceName: HTM-app identifyingFieldValue: null - concession: - concessionId: 2 - name: BUS + concessionId: 2 lineType: summary lineSense: credit costCenter: 619031 @@ -1708,21 +1836,14 @@ paths: extRef4: null extRef5: Webshop extRef6: null - - bookingLineMetadataId: ea6ce4e7-4d52-4b89-bbea-ffe0ef6c48ff + - "@odata.etag": 576446b0-b3c4-4a63-bff4-939d44104572 + bookingLineMetadataRowId: 14 + 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: Danny Negen - rejectionProcessing: mail - rejectionInfo: d.negen@htm.nl + name: Ticketapp - Dagkaart - RAIL + sourceName: HTM-app identifyingFieldValue: null - concession: - concessionId: 1 - name: RAIL + concessionId: 1 lineType: summary lineSense: credit costCenter: 603031 @@ -1733,7 +1854,9 @@ paths: extRef4: null extRef5: Webshop extRef6: null - - bookingLineMetadataId: 0a8dbb7d-73c8-451e-9028-e4613283c7bd + - "@odata.etag": cbd3968b-8e73-4c43-847b-a680e43e67cb + bookingLineMetadataRowId: 15 + bookingLineMetadataId: 0a8dbb7d-73c8-451e-9028-e4613283c7bd bookingMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 name: Dagkaart - BTW sourceMetadata: null @@ -1749,7 +1872,10 @@ paths: extRef4: null extRef5: null extRef6: null - href: null + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /bookinglinemetadata/{bookingLineMetadataId}: parameters: - in: path @@ -1791,6 +1917,10 @@ paths: description: The booking line metadata was successfully updated in the database. value: bookingLineMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited delete: summary: P2. Delete booking line metadata. description: Delete booking line metadata. @@ -1799,12 +1929,16 @@ paths: responses: "200": description: OK - /taxmetadata: + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /Odata/TaxMetadata: get: - summary: P1. Find tax metadata. + summary: Find tax metadata. description: Find tax metadata. tags: - - Metadata v2.2 + - Odata parameters: - $ref: "#/components/parameters/top" - $ref: "#/components/parameters/skip" @@ -1860,44 +1994,61 @@ paths: 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 + "@odata.context": "$metadata#TaxMetadata" + value: + - "@odata.etag": 4a758689-c28f-47d1-a230-e5422e9ad3be + taxMetadataRowId: 13 + 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 + - "@odata.etag": f848cce9-7fbe-4371-a70c-085fefe4613e + taxMetadataRowId: 14 + 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 + - "@odata.etag": db06ae45-710d-4a4b-958b-cba61a8ba027 + taxMetadataRowId: 15 + 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 + - "@odata.etag": 3bc97433-06f8-431c-b931-f5e33641bf88 + taxMetadataRowId: 16 + 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 + - "@odata.etag": 2262ab02-57a8-4425-a823-88d3c8d956bf + taxMetadataRowId: 17 + 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 + - "@odata.etag": 261794fa-11fa-47a2-9429-1e671638cb9d + taxMetadataRowId: 18 + 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 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /taxmetadata: post: summary: P3. Add tax metadata. description: Add tax metadata. @@ -1932,6 +2083,10 @@ paths: description: The tax metadata was successfully added to the database. value: taxMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /taxmetadata/{taxMetadataId}: parameters: - in: path @@ -1972,12 +2127,16 @@ paths: description: The tax metadata was successfully updated in the database. value: taxMetadataId: 7c3a5b0f-b89e-4f02-8b09-d11c5a050a07 - /sourcemetadata: + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /Odata/SourceMetadata: get: - summary: P1. Find source metadata. + summary: Find source metadata. description: Find source metadata. tags: - - Metadata v2.2 + - Odata parameters: - $ref: "#/components/parameters/top" - $ref: "#/components/parameters/skip" @@ -2035,29 +2194,40 @@ paths: 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 + "@odata.context": "$metadata#SourceMetadata" + value: + - "@odata.etag": 309ac952-12ad-4f13-a19d-f7443b8a1e93 + sourceMetadataRowId: 2 + sourceMetadataId: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0 incomingName: HTM-web incomingEntity: OrderLine outgoingName: webshop businessOwner: Koos Verweg rejectionProcessing: system rejectionInfo: api.htm.nl/v2/account/12345/msgs/abc - - sourceMetadataId: c3a9ef01-06c6-4c05-8fc7-df825f676dfc + - "@odata.etag": 4b743da5-4195-4b2e-a11b-6e5393a94c0a + sourceMetadataRowId: 3 + sourceMetadataId: c3a9ef01-06c6-4c05-8fc7-df825f676dfc incomingName: HTM-app incomingEntity: OrderLine outgoingName: ticketapp businessOwner: Danny Negen rejectionProcessing: mail rejectionInfo: d.negen@htm.nl - - sourceMetadataId: 0b6e3e07-c4e0-42bf-86f2-9c9522b71209 + - "@odata.etag": 502e2f58-b4e1-4dd0-947a-db6eea726e3a + sourceMetadataRowId: 4 + sourceMetadataId: 0b6e3e07-c4e0-42bf-86f2-9c9522b71209 incomingName: SMP incomingEntity: OrderLine outgoingName: balieverkoop businessOwner: Guus Geluk rejectionProcessing: mail rejectionInfo: ao@htm.nl - href: null + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /sourcemetadata: post: summary: P3. Add source metadata. description: Add source metadata. @@ -2093,6 +2263,10 @@ paths: description: The source metadata was successfully added to the database. value: sourceMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /sourcemetadata/{sourceMetadataId}: parameters: - in: path @@ -2133,12 +2307,16 @@ paths: description: The source metadata was successfully updated in the database. value: sourceMetadataId: 37a8095b-19db-498f-9349-5f37d21c5bdf - /accountingperiodmetadata: + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /Odata/AccountingPeriodMetadata: get: - summary: P1. Find accounting period metadata. + summary: Find accounting period metadata. description: Find accounting period metadata. tags: - - Metadata v2.2 + - Odata parameters: - $ref: "#/components/parameters/top" - $ref: "#/components/parameters/skip" @@ -2188,17 +2366,28 @@ paths: 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 + "@odata.context": "$metadata#AccountingPeriodMetadata" + value: + - "@odata.etag": 8f085711-eeae-44ed-bac1-06779bedb480 + accountingPeriodMetadataRowId: 1 + accountingPeriodMetadataId: e0af8c8f-d421-4567-a14e-48e2a1bb86fb accountingPeriod: 2025/01 isOpen: true - - accountingPeriodMetadataId: 36a34bd8-2b84-4c89-87a4-22e809f6ed4a + - "@odata.etag": 66c033af-fc67-4eb2-9d17-d74a0166470f + accountingPeriodMetadataRowId: 2 + accountingPeriodMetadataId: 36a34bd8-2b84-4c89-87a4-22e809f6ed4a accountingPeriod: 2024/12 isOpen: false - - accountingPeriodMetadataId: 33b4889b-0036-4870-87df-be43f9316cdf + - "@odata.etag": fc1aa814-ede9-4f99-b09b-b969c8738003 + accountingPeriodMetadataRowId: 3 + accountingPeriodMetadataId: 33b4889b-0036-4870-87df-be43f9316cdf accountingPeriod: 2024/11 isOpen: false - href: null + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /accountingperiodmetadata: post: summary: P2. Add accounting period metadata. description: Add accounting period metadata. @@ -2230,6 +2419,10 @@ paths: description: The accounting period metadata was successfully added to the database. value: accountingPeriodMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /accountingperiodmetadata/{accountingPeriodMetadataId}: parameters: - in: path @@ -2270,12 +2463,16 @@ paths: description: The accounting period metadata was successfully updated in the database. value: accountingPeriodMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 - /concessionmetadata: + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /Odata/ConcessionMetadata: get: - summary: P1. Find concession metadata. + summary: Find concession metadata. description: Find concession metadata. tags: - - Metadata v2.2 + - Odata parameters: - $ref: "#/components/parameters/top" - $ref: "#/components/parameters/skip" @@ -2342,50 +2539,55 @@ paths: 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 + "@odata.context": "$metadata#ConcessionMetadata" + value: + - "@odata.etag": 8a7c6124-574b-4725-9105-834924437087 + concessionMetadataRowId: 14 + concessionMetadataId: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + concessionId: 1 percentage: 84.021 validFrom: 2025-01-01T00:00:00.000 validUntil: null - - concessionMetadataId: 39720be0-af88-486a-b5e2-faea7eb5b352 - concession: - concessionId: 2 - name: BUS + - "@odata.etag": 90d4cf7b-86c8-4111-975b-af332b1507e5 + concessionMetadataRowId: 15 + concessionMetadataId: 39720be0-af88-486a-b5e2-faea7eb5b352 + concessionId: 2 percentage: 15.979 validFrom: 2025-01-01T00:00:00.000 validUntil: null - - concessionMetadataId: 274db383-96dd-410e-a07e-0b9e3040ac91 - concession: - concessionId: 1 - name: RAIL + - "@odata.etag": 08b684af-7fe5-44ee-ad99-dab0f57c42bb + concessionMetadataRowId: 16 + concessionMetadataId: 274db383-96dd-410e-a07e-0b9e3040ac91 + concessionId: 1 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 + - "@odata.etag": 640270c1-8dff-468e-9a5b-459e57b3ae13 + concessionMetadataRowId: 17 + concessionMetadataId: 03959bc5-83f2-4ac7-9bf5-67e0f2a6eace + concessionId: 2 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 + - "@odata.etag": a03c2a52-d65d-40c6-828b-18ce07df1d68 + concessionMetadataRowId: 18 + concessionMetadataId: d5b7d8f6-5cb8-482e-9d9a-68909dc7b5d3 + concessionId: 1 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 + - "@odata.etag": 4eb2fbe7-8dca-4ac9-a59d-379d56611bb4 + concessionMetadataRowId: 19 + concessionMetadataId: 5ee5f86f-ab00-4630-b130-4714fd060d1a + concessionId: 2 percentage: 14.979 validFrom: 2024-11-01T00:00:00.000 validUntil: 2024-11-30T23:59:59.999 - href: null + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /concessionmetadata: post: summary: P2. Add concession metadata. description: Add concession metadata. @@ -2421,6 +2623,10 @@ paths: description: The new concession metadata was successfully added to the database. value: concessionMetadataId: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited /concessionmetadata/{concessionMetadataId}: parameters: - in: path @@ -2463,126 +2669,57 @@ paths: description: The concession metadata was successfully updated in the database. value: concessionMetadataId: 37a8095b-19db-498f-9349-5f37d21c5bdf - /metadataaudittrails: + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited + /Odata/Concession: get: - summary: Find metadata audit trails. - description: Find metadata audit trails. - deprecated: true + summary: Find concessions. + description: Find concessions. tags: - - Audit Trail v2.2 + - Odata parameters: - - in: query - name: metadataAuditTrailId - schema: - type: string - format: uuid - example: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The id of the metadata audit trail. - - in: query - name: source - schema: - type: string - example: FMT - description: The source of the metadata change. - - in: query - name: endpoint - schema: - type: string - format: url - example: https://dev.api.htm.nl/v2/productmetadata - description: The endpoint of the metadata change. - - in: query - name: operation + - $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 enum: - - GET - - POST - - PATCH - - DELETE - example: POST + - concessionMetadataRowId + - concessionMetadataId + - concessionId + - percentage + - validFrom + - validUntil + - name: $select + in: query + description: Select properties to be returned + required: false + style: form explode: false - description: The operation of the metadata change. - - in: query - name: responseCode schema: - type: integer - example: 200 - description: The HTTP response code of the metadata change. - - in: query - name: requestBody - schema: - type: string - format: json - example: { "json": "data" } - description: The request body of the metadata change. - - in: query - name: responseBody - schema: - type: string - format: json - example: { "json": "data" } - description: The response body of the metadata change. - - in: query - name: user - schema: - type: string - example: ad.vogelaar - description: The id of the user who performed the metadata change. - - in: query - name: timestampBefore - schema: - type: string - 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 - 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: 37a8095b-19db-498f-9349-5f37d21c5bdf - description: The correlation id of the metadata change. - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/MetadataAuditTrailsGetResponseBody" - post: - summary: Add metadata audit trail. - description: Add metadata audit trail. - deprecated: true - tags: - - Audit Trail v2.2 - 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: P1. Get all concessions. - description: Get all concessions. - tags: - - References v2.2 + uniqueItems: true + type: array + items: + type: string + enum: + - concessionMetadataRowId + - concessionMetadataId + - concessionId + - percentage + - validFrom + - validUntil responses: "200": description: OK @@ -2595,116 +2732,132 @@ paths: summary: List containing all concessions description: Returns a list containing all concessions (no filters applied). value: - concessions: - - concessionId: 1 + "@odata.context": "$metadata#Concession" + value: + - "@odata.etag": 6962e56b-c7dd-3336-9627-6687f007ee07 + concessionRowId: 1 + concessionId: 1 name: RAIL - - concessionId: 2 + - "@odata.etag": b4eb7b82-9ecb-424f-a3e3-c532f0b763a4 + concessionRowId: 2 + concessionId: 2 name: BUS - href: null + security: + - default: [] + x-auth-type: Application & Application User + x-throttling-tier: Unlimited components: securitySchemes: - bearerToken: - type: http - scheme: bearer - bearerFormat: JWT + default: + type: oauth2 + flows: + implicit: + authorizationUrl: https://api.integratielaag.nl/authorize + scopes: {} schemas: unavailable: type: object TransactionItemsGetResponseBody: type: object properties: - transactionItems: + "@odata.context": + type: string + example: $metadata#TransactionItem + value: type: array items: - type: object - properties: - transactionItemId: - type: string - example: afce35b2-1dff-4ace-98d0-4b9ac405c87d - 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 - articleNumber: - type: string - nullable: true - example: 4031 - status: - type: string - enum: - - created - - succeeded - - failed - - returned to trx-db - - returned to src - - re-entered - example: created - aggregationReference: - type: string - nullable: true - example: FIKO-123456 - accountingSystemReference: - type: string - nullable: true - example: U4F-123456 - required: - - transactionItemId - - transactionType - - sourceName - - transactionId - - name - - quantity - - taxCode - - amountExclTax - - amountInclTax - - amountTax - - occurredOn - - type - - status - href: + $ref: "#/components/schemas/TransactionItem" + TransactionItem: + type: object + properties: + "@odata.etag": + type: string + example: 6962e56b-c7dd-3336-9627-6687f007ee07 + transactionItemRowId: + type: integer + example: 3231 + transactionItemId: + type: string + example: afce35b2-1dff-4ace-98d0-4b9ac405c87d + transactionType: + type: string + enum: + - sales + example: sales + sourceName: + type: string + example: HTM-website + transactionId: + type: string + example: 1001236 + transactionLineId: type: string nullable: true - description: URI for pagination. - example: null + 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 + articleNumber: + type: string + nullable: true + example: 4031 + status: + type: string + enum: + - created + - succeeded + - failed + - returned to trx-db + - returned to src + - re-entered + example: created + aggregationReference: + type: string + nullable: true + example: FIKO-123456 + accountingSystemReference: + type: string + nullable: true + example: U4F-123456 + required: + - transactionItemId + - transactionType + - sourceName + - transactionId + - name + - quantity + - taxCode + - amountExclTax + - amountInclTax + - amountTax + - occurredOn + - type + - status TransactionItemsPostRequestBody: type: object properties: @@ -2720,7 +2873,7 @@ components: example: sales sourceName: type: string - example: Verkoopengine + example: HTM-website transactionId: type: string example: 1001236 @@ -2955,56 +3108,62 @@ components: ProcessingFailuresGetResponseBody: type: object properties: - processingFailures: + "@odata.context": + type: string + example: $metadata#ProcessingFailure + value: 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 - timestamp: - type: string - format: date-time - example: 2022-01-01 00:00:00 - element: - type: string - example: costCenter - value: - type: string - example: 84955 - 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: Adapt config - required: - - processingFailureId - - transactionItemId - - timestamp - - element - - value - - reasonCode - - reasonDescription - - resolved - href: + $ref: "#/components/schemas/ProcessingFailure" + ProcessingFailure: + type: object + properties: + "@odata.etag": + type: string + example: 464155e4-0018-3676-8102-42429f14f2ed + processingFailureRowId: + type: integer + example: 9 + processingFailureId: + type: string + format: uuid + example: 37a8095b-19db-498f-9349-5f37d21c5bdf + transactionItemId: + type: string + format: uuid + example: 2d77d978-7141-499a-84ad-93fad8ee03ce + timestamp: + type: string + format: date-time + example: 2022-01-01 00:00:00 + element: + type: string + example: costCenter + value: + type: string + example: 84955 + reasonCode: + type: string + example: "002" + reasonDescription: + type: string + example: Contra account does not exist. + resolved: + type: boolean + example: false + change: type: string nullable: true - description: URI for pagination. - example: null + example: Adapt config + required: + - processingFailureId + - transactionItemId + - timestamp + - element + - value + - reasonCode + - reasonDescription + - resolved ProcessingFailuresPatchRequestBody: type: object properties: @@ -3077,99 +3236,108 @@ components: TransactionAuditTrailsGetResponseBody: type: object properties: - transactionAuditTrails: + "@odata.context": + type: string + example: $metadata#TransactionAuditTrail + value: 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: - - create - - update - example: create - status: - type: string - enum: - - created - - succeeded - - failed - - returned to trx-db - - returned to src - - re-entered - 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 - - status - href: + $ref: "#/components/schemas/TransactionAuditTrail" + TransactionAuditTrail: + type: object + properties: + "@odata.etag": + type: string + example: a669b92c-1a10-3dd6-b4d1-efaed0629db8 + transactionAuditTrailRowId: + type: integer + example: 8218 + 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: + - create + - update + example: create + status: + type: string + enum: + - created + - succeeded + - failed + - returned to trx-db + - returned to src + - re-entered + example: created + description: type: string nullable: true - example: null + example: Transaction created. + correlationId: + type: string + format: uuid + nullable: true + example: a3891560-3084-42cb-867c-f289e7cda47d required: - - transactionAuditTrails + - transactionAuditTrailId + - transactionItemId + - user + - timestamp + - action + - status BookingProcessesGetResponseBody: type: object properties: - bookingProcesses: + "@odata.context": + type: string + example: $metadata#BookingProcess + value: 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: + $ref: "#/components/schemas/BookingProcess" + BookingProcess: + type: object + properties: + "@odata.etag": + type: string + example: 9e8b14cf-c03a-3be7-b9ec-ef5dd6948217 + bookingProcessRowId: + type: integer + example: 10 + 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 - description: URI for pagination. - example: null + example: articleNumber required: - - bookingProcesses + - bookingProcessId + - name + - transactionType BookingProcessesPostRequestBody: type: object properties: @@ -3226,70 +3394,75 @@ components: BookingMetadataGetResponseBody: type: object properties: - bookingMetadata: + "@odata.context": + type: string + example: $metadata#BookingMetadata + value: 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 - department: - type: string - example: 900 - costType: - 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 - validUntil: - type: string - format: date-time - nullable: true - example: null - required: - - bookingMetadataId - - bookingProcessId - - description - - department - - costType - - documentCode - - hasSeparateTaxLine - - hasLinePerIdentifyingField - - hasLinePerSource - - hasLinePerConcession - - validFrom - href: + $ref: "#/components/schemas/BookingMetadata" + BookingMetadata: + type: object + properties: + "@odata.etag": type: string + example: f477014f-8bf2-3e72-b9b6-1bb609840b61 + bookingMetadataRowId: + type: integer + example: 13 + 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 + department: + type: string + example: 900 + costType: + 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 + validUntil: + type: string + format: date-time nullable: true example: null required: - - bookingMetadata + - bookingMetadataId + - bookingProcessId + - description + - department + - costType + - documentCode + - hasSeparateTaxLine + - hasLinePerIdentifyingField + - hasLinePerSource + - hasLinePerConcession + - validFrom BookingMetadataPostRequestBody: type: object properties: @@ -3419,32 +3592,37 @@ components: BookingGroupFieldsGetResponseBody: type: object properties: - bookingGroupFields: + "@odata.context": + type: string + example: $metadata#BookingGroupField + value: type: array items: - type: object - properties: - bookingGroupFieldId: - type: string - format: uuid - example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 - bookingMetadataId: - type: string - format: uuid - example: 12b4d128-0ab8-4a4a-944d-25b83de38b27 - identifyingFieldValue: - type: string - example: 1737 - required: - - bookingGroupFieldId - - bookingMetadataId - - identifyingFieldValue - href: + $ref: "#/components/schemas/BookingGroupField" + BookingGroupField: + type: object + properties: + "@odata.etag": type: string - nullable: true - example: null + example: ef520db0-4e3d-39a0-926f-f37ad49bb7cf + bookingGroupFieldRowId: + type: integer + example: 8 + bookingGroupFieldId: + type: string + format: uuid + example: 6ce10520-9a73-4cb4-b8dd-39ee46ceb617 + bookingMetadataId: + type: string + format: uuid + example: 12b4d128-0ab8-4a4a-944d-25b83de38b27 + identifyingFieldValue: + type: string + example: 1737 required: - - bookingGroupFields + - bookingGroupFieldId + - bookingMetadataId + - identifyingFieldValue BookingLineMetadataPostRequestBody: type: object properties: @@ -3525,89 +3703,96 @@ components: BookingLineMetadataGetResponseBody: type: object properties: - bookingLineMetadata: + "@odata.context": + type: string + example: $metadata#BookingLineMetadata + value: 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 - RAIL - sourceMetadata: - type: object - $ref: "#/components/schemas/SourceMetadata" - identifyingFieldValue: - type: string - example: null - nullable: true - concession: - type: object - $ref: "#/components/schemas/Concession" - lineType: - type: string - enum: - - summary - - analysis - - tax - example: summary - lineSense: - type: string - enum: - - debit - - credit - example: credit - costCenter: - type: string - example: 603031 - nullable: true - articleName: - 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: + $ref: "#/components/schemas/BookingLineMetadata" + BookingLineMetadata: + type: object + properties: + "@odata.etag": type: string + example: c0afe2d6-f4b2-321a-ae6b-2dc72b25ebc1 + bookingLineMetadataRowId: + type: integer + example: 10 + 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 - RAIL + sourceName: + type: string + example: HTM-website nullable: true + identifyingFieldValue: + type: string example: null + nullable: true + concessionId: + type: integer + example: 1 + nullable: true + lineType: + type: string + enum: + - summary + - analysis + - tax + example: summary + lineSense: + type: string + enum: + - debit + - credit + example: credit + costCenter: + type: string + example: 603031 + nullable: true + articleName: + 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: - - bookingLineMetadata + - bookingLineMetadataId + - bookingMetadataId + - name + - lineType + - lineSense BookingLineMetadataPatchRequestBody: type: object properties: @@ -3812,44 +3997,50 @@ components: TaxMetadataGetResponseBody: type: object properties: - taxMetadata: + "@odata.context": + type: string + example: $metadata#TaxMetadata + value: type: array items: - type: object - properties: - taxMetadataId: - type: string - format: uuid - example: 192882fe-3f51-46bb-bfdb-2e4cb31ef925 - taxCode: - type: string - example: V21 - taxPercentageAmount: - type: number - 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: + $ref: "#/components/schemas/TaxMetadata" + TaxMetadata: + type: object + properties: + "@odata.etag": type: string + example: e4e7c773-eb7a-3fe0-960d-df1744127a7b + taxMetadataRowId: + type: integer + example: 13 + taxMetadataId: + type: string + format: uuid + example: 192882fe-3f51-46bb-bfdb-2e4cb31ef925 + taxCode: + type: string + example: V21 + taxPercentageAmount: + type: number + 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 - description: URI for pagination. example: null + required: + - taxMetadataId + - taxCode + - taxPercentageAmount + - description + - validFrom TaxMetadataPostRequestBody: type: object properties: @@ -3857,7 +4048,7 @@ components: type: string example: V21 taxPercentageAmount: - type: integer + type: number example: 21 description: type: string @@ -3892,7 +4083,7 @@ components: type: string example: V21 taxPercentageAmount: - type: integer + type: number example: 21 description: type: string @@ -3918,21 +4109,59 @@ components: SourceMetadataGetResponseBody: type: object properties: - sourceMetadata: + "@odata.context": + type: string + example: $metadata#SourceMetadata + value: type: array items: $ref: "#/components/schemas/SourceMetadata" - href: + SourceMetadata: + type: object + properties: + "@odata.etag": type: string - nullable: true - description: URI for pagination. - example: null + example: d7df8249-3e72-35f2-a069-d845e8e2cbba + sourceMetadataRowId: + type: integer + example: 2 + sourceMetadataId: + type: string + format: uuid + example: bc4ea24a-27a5-40e8-bbbc-57a105afaaa0 + incomingName: + type: string + example: HTM-website + incomingEntity: + type: string + example: OrderLine + outgoingName: + type: string + example: Website Verkopen + businessOwner: + type: string + example: Koos Verweg + rejectionProcessing: + type: string + example: system + rejectionInfo: + type: string + example: api.htm.nl/v2/account/12345/msgs/abc + required: + - sourceMetadataId + - incomingName + - incomingEntity + - outgoingName + - businessOwner + - rejectionProcessing + - rejectionInfo + - validFrom SourceMetadataPostRequestBody: type: object properties: incomingName: type: string - example: VerkoopEngine + example: HTM-website incomingEntity: type: string example: OrderLine @@ -3969,7 +4198,7 @@ components: properties: incomingName: type: string - example: VerkoopEngine + example: HTM-website incomingEntity: type: string example: OrderLine @@ -3997,30 +4226,36 @@ components: AccountingPeriodMetadataGetResponseBody: type: object properties: - accountingPeriodMetadata: + "@odata.context": + type: string + example: $metadata#AccountingPeriodMetadata + value: 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: + $ref: "#/components/schemas/AccountingPeriodMetadata" + AccountingPeriodMetadata: + type: object + properties: + "@odata.etag": type: string - nullable: true - description: URI for pagination. - example: null + example: 333d6b7d-b709-3b89-89e0-bcb3d5fdddfc + accountingPeriodMetadataRowId: + type: integer + example: 1 + 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 AccountingPeriodMetadataPostRequestBody: type: object properties: @@ -4063,40 +4298,46 @@ components: ConcessionMetadataGetResponseBody: type: object properties: - concessionMetadata: + "@odata.context": + type: string + example: $metadata#ConcessionMetadata + value: type: array items: - type: object - properties: - concessionMetadataId: - type: string - format: en - example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb - concession: - type: object - $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: + $ref: "#/components/schemas/ConcessionMetadata" + ConcessionMetadata: + type: object + properties: + "@odata.etag": type: string + example: 77c78584-7ce8-3cf5-b89e-73b888d72d70 + concessionMetadataRowId: + type: integer + example: 14 + concessionMetadataId: + type: string + format: en + example: e0af8c8f-d421-4567-a14e-48e2a1bb86fb + 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 - description: URI for pagination. example: null + required: + - concessionMetadataId + - concessionId + - percentage + - validFrom ConcessionMetadataPostRequestBody: type: object properties: @@ -4158,18 +4399,22 @@ components: ConcessionsGetResponseBody: type: object properties: - concessions: + "@odata.context": + type: string + example: $metadata#Concession + value: type: array items: $ref: "#/components/schemas/Concession" - href: - type: string - nullable: true - description: URI for pagination. - example: null Concession: type: object properties: + "@odata.etag": + type: string + example: 49bfa10d-b80d-3f2f-b3c2-9a5da3182cc3 + concessionRowId: + type: integer + example: 1 concessionId: type: integer example: 1 @@ -4179,40 +4424,6 @@ components: required: - concessionId - name - 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: Koos Verweg - rejectionProcessing: - type: string - example: system - rejectionInfo: - type: string - example: api.htm.nl/v2/account/12345/msgs/abc - required: - - sourceMetadataId - - incomingName - - incomingEntity - - outgoingName - - businessOwner - - rejectionProcessing - - rejectionInfo - - validFrom TransactionItemsResponseStatusGetResponseBody: type: object properties: 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