Compare commits
No commits in common. "a09058d15151efcf0e9e2e3bf6e8f166c54833b6" and "520362ae4de5058771921a76872224dc390b7e0b" have entirely different histories.
a09058d151
...
520362ae4d
@ -1,307 +0,0 @@
|
||||
########################
|
||||
## ##
|
||||
## CUSTOM IGNORE LIST ##
|
||||
## ##
|
||||
########################
|
||||
|
||||
# Ignore appsettings.json as it contains credentials - only the template should be shared!
|
||||
appsettings.json
|
||||
|
||||
# Also ignore pfx and pem files for the same reason
|
||||
*.pfx
|
||||
*.pem
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
x64/
|
||||
x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
|
||||
# Visual Studio 2015 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUNIT
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
**/Properties/launchSettings.json
|
||||
|
||||
# VS Code
|
||||
.vscode/
|
||||
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JustCode is a .NET coding add-in
|
||||
.JustCode
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# TODO: Comment the next line if you want to checkin your web deploy settings
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/packages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/packages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/packages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Typescript v1 declaration files
|
||||
typings/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
38
src/java/ABTProductsPUTGenerator/.gitignore
vendored
38
src/java/ABTProductsPUTGenerator/.gitignore
vendored
@ -1,38 +0,0 @@
|
||||
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
|
||||
@ -1,8 +0,0 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
@ -1,7 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
||||
</component>
|
||||
</project>
|
||||
@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="MavenProjectsManager">
|
||||
<option name="originalFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/pom.xml" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="temurin-21" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
Binary file not shown.
@ -1,12 +0,0 @@
|
||||
# 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 <inputPath> <outputPath>`
|
||||
- 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)
|
||||
@ -1,160 +0,0 @@
|
||||
{
|
||||
"productId": 151,
|
||||
"fikoArticleNumber": null,
|
||||
"parentProductId": 114,
|
||||
"gboPackageTemplateId": "33629",
|
||||
"tapConnectProductCode": null,
|
||||
"productName": "HTM Regio Vrij - Voltarief - Losse Maand - HL62",
|
||||
"productDescription": "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
|
||||
"validityPeriod": {
|
||||
"validityPeriodId": 262,
|
||||
"fromInclusive": "2024-09-30T23:00:00.000+00:00",
|
||||
"toInclusive": "2099-12-30T23:00:00.000+00:00"
|
||||
},
|
||||
"productTranslations": [
|
||||
{
|
||||
"language": "en",
|
||||
"name": "HTM Regio Free - Full Fare - 1 Month - HL62",
|
||||
"description": "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62"
|
||||
}
|
||||
],
|
||||
"productOwner": {
|
||||
"productOwnerId": 19,
|
||||
"name": "MRDH",
|
||||
"organization": "MRDH"
|
||||
},
|
||||
"marketSegments": null,
|
||||
"customerSegments": null,
|
||||
"allowedGboAgeProfiles": [
|
||||
{
|
||||
"gboAgeProfileId": 1,
|
||||
"name": "Baby/peuter (0 t/m 3 jaar)",
|
||||
"ageFromInclusive": 0,
|
||||
"ageToInclusive": 3
|
||||
},
|
||||
{
|
||||
"gboAgeProfileId": 4,
|
||||
"name": "Volwassene (19 t/m 64 jaar)",
|
||||
"ageFromInclusive": 19,
|
||||
"ageToInclusive": 64
|
||||
},
|
||||
{
|
||||
"gboAgeProfileId": 5,
|
||||
"name": "Oudere (65 jaar of ouder)",
|
||||
"ageFromInclusive": 65,
|
||||
"ageToInclusive": 999
|
||||
}
|
||||
],
|
||||
"productCategory": {
|
||||
"productCategoryId": 3,
|
||||
"isTravelProduct": true,
|
||||
"name": "Afgekocht reisrecht"
|
||||
},
|
||||
"requiredCustomerLevel": {
|
||||
"requiredCustomerLevelId": 3,
|
||||
"name": "profile"
|
||||
},
|
||||
"requiredProducts": null,
|
||||
"incompatibleProducts": null,
|
||||
"mandatoryCustomerDataItems": [
|
||||
{
|
||||
"mandatoryCustomerDataItemId": 1,
|
||||
"customerDataItem": "birthname"
|
||||
},
|
||||
{
|
||||
"mandatoryCustomerDataItemId": 2,
|
||||
"customerDataItem": "surname"
|
||||
},
|
||||
{
|
||||
"mandatoryCustomerDataItemId": 4,
|
||||
"customerDataItem": "emailAddress"
|
||||
},
|
||||
{
|
||||
"mandatoryCustomerDataItemId": 8,
|
||||
"customerDataItem": "padBirthDate"
|
||||
}
|
||||
],
|
||||
"requiredGboPersonalAttributes": [
|
||||
{
|
||||
"requiredGboPersonalAttributeId": 1,
|
||||
"name": "NAME"
|
||||
},
|
||||
{
|
||||
"requiredGboPersonalAttributeId": 2,
|
||||
"name": "BIRTHDATE"
|
||||
},
|
||||
{
|
||||
"requiredGboPersonalAttributeId": 3,
|
||||
"name": "PHOTO"
|
||||
}
|
||||
],
|
||||
"tokenTypes": [
|
||||
{
|
||||
"tokenTypeId": 1,
|
||||
"name": "EMV"
|
||||
}
|
||||
],
|
||||
"paymentMoment": {
|
||||
"paymentMomentId": 1,
|
||||
"name": "prepaid"
|
||||
},
|
||||
"serviceOptions": null,
|
||||
"validityDuration": "P1M",
|
||||
"maxStartInFutureDuration": "P6W",
|
||||
"isRenewable": false,
|
||||
"sendInvoice": false,
|
||||
"imageReference": "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
||||
"productPageUrl": "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij",
|
||||
"termsUrl": "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
|
||||
"isSellableAtHtm": true,
|
||||
"needsSolvencyCheckConsumer": false,
|
||||
"needsSolvencyCheckBusiness": false,
|
||||
"sellingPeriods": [
|
||||
{
|
||||
"sellingPeriodId": 214,
|
||||
"fromInclusive": "2024-10-30T23:00:00.000+00:00",
|
||||
"toInclusive": "2029-12-30T23:00:00.000+00:00",
|
||||
"salesTouchpoint": {
|
||||
"salesTouchpointId": 3,
|
||||
"name": "Website (Perplex)",
|
||||
"isActive": true,
|
||||
"retailer": {
|
||||
"retailerId": 1001,
|
||||
"name": "HTM externe touchpoints",
|
||||
"street": "Koningin Julianaplein",
|
||||
"number": 10,
|
||||
"numberAddition": null,
|
||||
"postalCode": "2595 AA",
|
||||
"city": "Den Haag",
|
||||
"country": "Nederland",
|
||||
"emailAddress": "info@htm.nl",
|
||||
"phoneNumber": "070 374 9002",
|
||||
"taxId": 572309345923,
|
||||
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg"
|
||||
}
|
||||
},
|
||||
"forbiddenPaymentMethods": null,
|
||||
"sellingPrices": [
|
||||
{
|
||||
"sellingPriceId": 195,
|
||||
"taxCode": "V09",
|
||||
"taxPercentage": 9.0000,
|
||||
"amountExclTax": 13486,
|
||||
"amountInclTax": 14700,
|
||||
"fromInclusive": "2024-10-30T23:00:00.000+00:00",
|
||||
"toInclusive": "2029-12-01T23:00:00.000+00:00",
|
||||
"internalPrice": 0.0000
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"purchasePrices": null,
|
||||
"auditTrail": [
|
||||
{
|
||||
"auditTrailId": 475,
|
||||
"action": "insert",
|
||||
"user": "api",
|
||||
"timestamp": "2025-05-07T14:05:43.213+00:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,59 +0,0 @@
|
||||
{
|
||||
"fikoArticleNumber" : null,
|
||||
"parentProductId" : 114,
|
||||
"gboPackageTemplateId" : "33629",
|
||||
"tapConnectProductCode" : null,
|
||||
"productName" : "HTM Regio Vrij - Voltarief - Losse Maand - HL62",
|
||||
"productDescription" : "Voor een vast bedrag onbeperkt reizen met EBS, HTM en RET in gebied HL62",
|
||||
"validityPeriod" : {
|
||||
"validityPeriodId" : 262,
|
||||
"fromInclusive" : "2024-09-30T23:00:00.000+00:00",
|
||||
"toInclusive" : "2099-12-30T23:00:00.000+00:00"
|
||||
},
|
||||
"productTranslations" : [ {
|
||||
"language" : "en",
|
||||
"name" : "HTM Regio Free - Full Fare - 1 Month - HL62",
|
||||
"description" : "For a fixed amount unlimited travel with EBS, HTM and RET in region HL62"
|
||||
} ],
|
||||
"productOwnerId" : 19,
|
||||
"marketSegmentIds" : null,
|
||||
"customerSegmentIds" : null,
|
||||
"allowedGboAgeProfileIds" : [ 1, 4, 5 ],
|
||||
"productCategoryId" : 3,
|
||||
"requiredCustomerLevelId" : 3,
|
||||
"requiredProducts" : null,
|
||||
"incompatibleProducts" : null,
|
||||
"mandatoryCustomerDataItemIds" : [ 1, 2, 4, 8 ],
|
||||
"requiredGboPersonalAttributeIds" : [ 1, 2, 3 ],
|
||||
"tokenTypeIds" : [ 1 ],
|
||||
"paymentMomentId" : 1,
|
||||
"serviceOptionIds" : null,
|
||||
"validityDuration" : "P1M",
|
||||
"maxStartInFutureDuration" : "P6W",
|
||||
"isRenewable" : false,
|
||||
"sendInvoice" : false,
|
||||
"imageReference" : "https://web.acc.cloud.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
||||
"productPageUrl" : "https://web.acc.cloud.htm.nl/webshop/htm-regio-vrij",
|
||||
"termsUrl" : "https://web.acc.cloud.htm.nl/reisproducten/productvoorwaarden/htm-regio-vrij/",
|
||||
"isSellableAtHtm" : true,
|
||||
"needsSolvencyCheckConsumer" : false,
|
||||
"needsSolvencyCheckBusiness" : false,
|
||||
"sellingPeriods" : [ {
|
||||
"sellingPeriodId" : 214,
|
||||
"fromInclusive" : "2024-10-30T23:00:00.000+00:00",
|
||||
"toInclusive" : "2029-12-30T23:00:00.000+00:00",
|
||||
"salesTouchpointId" : 3,
|
||||
"forbiddenPaymentMethodIds" : null,
|
||||
"sellingPrices" : [ {
|
||||
"sellingPriceId" : 195,
|
||||
"taxCode" : "V09",
|
||||
"taxPercentage" : 9.0,
|
||||
"amountExclTax" : 13486,
|
||||
"amountInclTax" : 14700,
|
||||
"fromInclusive" : "2024-10-30T23:00:00.000+00:00",
|
||||
"toInclusive" : "2029-12-01T23:00:00.000+00:00",
|
||||
"internalPrice" : 0.0
|
||||
} ]
|
||||
} ],
|
||||
"purchasePrices" : null
|
||||
}
|
||||
@ -1,58 +0,0 @@
|
||||
{
|
||||
"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
|
||||
}
|
||||
@ -1,67 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>nl.htm.ovpay.abt</groupId>
|
||||
<artifactId>ABTProductsPUTGenerator</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<name>ABTProductsPUTGenerator</name>
|
||||
<description>Generate an ABTProducts PUT request body from a given ABTProducts GET response body</description>
|
||||
|
||||
<dependencies>
|
||||
<!-- Log4j Slf4j Logging -->
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-api</artifactId>
|
||||
<version>2.23.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-core</artifactId>
|
||||
<version>2.23.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-slf4j-impl</artifactId>
|
||||
<version>2.23.1</version>
|
||||
</dependency>
|
||||
<!-- JSON parsing -->
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>2.17.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>nl.htm.ovpay.abt.ABTProductsPUTGenerator</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
<descriptorRefs>
|
||||
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||
</descriptorRefs>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>21</source>
|
||||
<target>21</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
@ -1,313 +0,0 @@
|
||||
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 <inputPath> <outputPath>");
|
||||
}
|
||||
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.getValue().isNull()) {
|
||||
checkRewriteNullFields(jsonField, newJsonNode);
|
||||
} else 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 checkRewriteNullFields(Map.Entry<String, JsonNode> jsonField, JsonNode newJsonNode) {
|
||||
switch (jsonField.getKey()) {
|
||||
case "marketSegments" -> {
|
||||
LOGGER.info("Rewriting null marketSegments to marketSegmentIds...");
|
||||
((ObjectNode)newJsonNode).putRawValue("marketSegmentIds", null);
|
||||
}
|
||||
case "customerSegments" -> {
|
||||
LOGGER.info("Rewriting null customerSegments to customerSegmentIds...");
|
||||
((ObjectNode)newJsonNode).putRawValue("customerSegmentIds", null);
|
||||
}
|
||||
case "allowedGboAgeProfiles" -> {
|
||||
LOGGER.info("Rewriting null allowedGboAgeProfiles to allowedGboAgeProfileIds...");
|
||||
((ObjectNode)newJsonNode).putRawValue("allowedGboAgeProfileIds", null);
|
||||
}
|
||||
case "mandatoryCustomerDataItems" -> {
|
||||
LOGGER.info("Rewriting null mandatoryCustomerDataItems to mandatoryCustomerDataItemIds...");
|
||||
((ObjectNode)newJsonNode).putRawValue("mandatoryCustomerDataItemIds", null);
|
||||
}
|
||||
case "requiredGboPersonalAttributes" -> {
|
||||
LOGGER.info("Rewriting null requiredGboPersonalAttributes to requiredGboPersonalAttributeIds...");
|
||||
((ObjectNode)newJsonNode).putRawValue("requiredGboPersonalAttributeIds", null);
|
||||
}
|
||||
case "tokenTypes" -> {
|
||||
LOGGER.info("Rewriting null tokenTypes to tokenTypeIds...");
|
||||
((ObjectNode)newJsonNode).putRawValue("tokenTypeIds", null);
|
||||
}
|
||||
case "serviceOptions" -> {
|
||||
LOGGER.info("Rewriting null serviceOptions to serviceOptionIds...");
|
||||
((ObjectNode)newJsonNode).putRawValue("serviceOptionIds", null);
|
||||
}
|
||||
default -> {
|
||||
LOGGER.info("Keeping {} as-is...", jsonField.getKey());
|
||||
((ObjectNode)newJsonNode).put(jsonField.getKey(), jsonField.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void rewriteObjectFields(Map.Entry<String, JsonNode> 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<String, JsonNode> 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 "allowedGboAgeProfiles" -> {
|
||||
LOGGER.info("Rewriting allowedGboAgeProfiles to allowedGboAgeProfileIds...");
|
||||
if (jsonField.getValue() != null) {
|
||||
ArrayNode allowedGboAgeProfileIds = new ArrayNode(new JsonNodeFactory(true));
|
||||
((ArrayNode)jsonField.getValue()).elements().forEachRemaining(allowedGboAgeProfile -> {
|
||||
allowedGboAgeProfileIds.add(allowedGboAgeProfile.get("gboAgeProfileId").asLong());
|
||||
});
|
||||
((ObjectNode)newJsonNode).putArray("allowedGboAgeProfileIds").addAll(allowedGboAgeProfileIds);
|
||||
} else {
|
||||
((ObjectNode)newJsonNode).putRawValue("allowedGboAgeProfileIds", 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").isNull()) {
|
||||
LOGGER.info("Deep-copying sellingPrices...");
|
||||
ArrayNode sellingPrices = ((ArrayNode)sellingPeriod.get("sellingPrices")).deepCopy();
|
||||
((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("Deep-copying purchasePrices...");
|
||||
if (!jsonField.getValue().isNull()) {
|
||||
ArrayNode purchasePrices = ((ArrayNode)jsonField.getValue()).deepCopy();
|
||||
((ObjectNode)newJsonNode).putArray("purchasePrices").addAll(purchasePrices);
|
||||
} else {
|
||||
((ObjectNode)newJsonNode).putRawValue("purchasePrices", null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,202 +0,0 @@
|
||||
{
|
||||
"productId": 251,
|
||||
"fikoArticleNumber": null,
|
||||
"parentProductId": null,
|
||||
"gboPackageTemplateId": "30901",
|
||||
"tapConnectProductCode": null,
|
||||
"productName": "MaxTestPOST-21-okt-test-1 edited PUT",
|
||||
"productDescription": "21-okt-test-1 edited PUT - reis met 90% korting gedurende de eerste F&F pilot!",
|
||||
"validityPeriod": null,
|
||||
"productTranslations": null,
|
||||
"productOwner": {
|
||||
"productOwnerId": 1,
|
||||
"name": "Corneel Verstoep",
|
||||
"organization": "HTM"
|
||||
},
|
||||
"marketSegments": null,
|
||||
"customerSegments": null,
|
||||
"allowedGboAgeProfiles": null,
|
||||
"productCategory": {
|
||||
"productCategoryId": 9,
|
||||
"isTravelProduct": true,
|
||||
"name": "Kortingsabonnement"
|
||||
},
|
||||
"requiredCustomerLevel": {
|
||||
"requiredCustomerLevelId": 1,
|
||||
"name": "guest"
|
||||
},
|
||||
"requiredProducts": null,
|
||||
"incompatibleProducts": null,
|
||||
"mandatoryCustomerDataItems": [
|
||||
{
|
||||
"mandatoryCustomerDataItemId": 4,
|
||||
"customerDataItem": "emailAddress"
|
||||
},
|
||||
{
|
||||
"mandatoryCustomerDataItemId": 5,
|
||||
"customerDataItem": "address"
|
||||
}
|
||||
],
|
||||
"requiredGboPersonalAttributes": [
|
||||
{
|
||||
"requiredGboPersonalAttributeId": 1,
|
||||
"name": "NAME"
|
||||
},
|
||||
{
|
||||
"requiredGboPersonalAttributeId": 2,
|
||||
"name": "BIRTHDATE"
|
||||
},
|
||||
{
|
||||
"requiredGboPersonalAttributeId": 3,
|
||||
"name": "PHOTO"
|
||||
}
|
||||
],
|
||||
"tokenTypes": [
|
||||
{
|
||||
"tokenTypeId": 1,
|
||||
"name": "EMV"
|
||||
}
|
||||
],
|
||||
"paymentMoment": {
|
||||
"paymentMomentId": 1,
|
||||
"name": "prepaid"
|
||||
},
|
||||
"serviceOptions": null,
|
||||
"validityDuration": "P7D",
|
||||
"maxStartInFutureDuration": "P6W",
|
||||
"isRenewable": false,
|
||||
"sendInvoice": false,
|
||||
"imageReference": "https://www.htm.nl/media/leif2leu/htm-logo-mobile.svg",
|
||||
"productPageUrl": "https://www.htm.nl/nog-onbekende-product-pagina",
|
||||
"termsUrl": "https://www.htm.nl/nog-onbekende-productvoorwaarden-pagina",
|
||||
"isSellableAtHtm": true,
|
||||
"needsSolvencyCheckConsumer": false,
|
||||
"needsSolvencyCheckBusiness": false,
|
||||
"sellingPeriods": [
|
||||
{
|
||||
"sellingPeriodId": 240,
|
||||
"fromInclusive": "2024-09-06T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-29T23:59:59.000+00:00",
|
||||
"salesTouchpoint": {
|
||||
"salesTouchpointId": 6,
|
||||
"name": "Service-engine",
|
||||
"isActive": true,
|
||||
"retailer": {
|
||||
"retailerId": 1000,
|
||||
"name": "HTM intern beheer",
|
||||
"street": "Koningin Julianaplein",
|
||||
"number": 10,
|
||||
"numberAddition": null,
|
||||
"postalCode": "2595 AA",
|
||||
"city": "Den Haag",
|
||||
"country": "Nederland",
|
||||
"emailAddress": "info@htm.nl",
|
||||
"phoneNumber": "070 374 9002",
|
||||
"taxId": null,
|
||||
"imageReference": "https://www.htm.nl/typo3conf/ext/htm_template/Resources/Public/img/logo.svg"
|
||||
}
|
||||
},
|
||||
"forbiddenPaymentMethods": null,
|
||||
"sellingPrices": [
|
||||
{
|
||||
"sellingPriceId": 318,
|
||||
"taxCode": "V21",
|
||||
"taxPercentage": 21.0000,
|
||||
"amountExclTax": 94,
|
||||
"amountInclTax": 100,
|
||||
"fromInclusive": "2024-09-06T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-18T23:59:59.000+00:00",
|
||||
"internalPrice": 92.0000
|
||||
},
|
||||
{
|
||||
"sellingPriceId": 319,
|
||||
"taxCode": "V21",
|
||||
"taxPercentage": 21.0000,
|
||||
"amountExclTax": 98,
|
||||
"amountInclTax": 102,
|
||||
"fromInclusive": "2024-12-19T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-29T23:59:59.000+00:00",
|
||||
"internalPrice": 0.0000
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sellingPeriodId": 241,
|
||||
"fromInclusive": "2024-09-06T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-29T23:59:59.000+00:00",
|
||||
"salesTouchpoint": {
|
||||
"salesTouchpointId": 5,
|
||||
"name": "Servicewinkel (Team Incident Masters)",
|
||||
"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": null,
|
||||
"imageReference": "https://www.htm.nl/typo3conf/ext/htm_template/Resources/Public/img/logo.svg"
|
||||
}
|
||||
},
|
||||
"forbiddenPaymentMethods": [
|
||||
{
|
||||
"forbiddenPaymentMethodId": 2,
|
||||
"name": "creditcard",
|
||||
"issuer": "Visa"
|
||||
}
|
||||
],
|
||||
"sellingPrices": [
|
||||
{
|
||||
"sellingPriceId": 320,
|
||||
"taxCode": "V21",
|
||||
"taxPercentage": 21.0000,
|
||||
"amountExclTax": 94,
|
||||
"amountInclTax": 100,
|
||||
"fromInclusive": "2024-09-06T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-18T23:59:59.000+00:00",
|
||||
"internalPrice": 92.0000
|
||||
},
|
||||
{
|
||||
"sellingPriceId": 321,
|
||||
"taxCode": "V21",
|
||||
"taxPercentage": 21.0000,
|
||||
"amountExclTax": 98,
|
||||
"amountInclTax": 102,
|
||||
"fromInclusive": "2024-12-19T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-29T23:59:59.000+00:00",
|
||||
"internalPrice": 0.0000
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"purchasePrices": [
|
||||
{
|
||||
"purchasePriceId": 184,
|
||||
"taxCode": "V21",
|
||||
"taxPercentage": 21.0000,
|
||||
"amountExclTax": 0,
|
||||
"amountInclTax": 0,
|
||||
"fromInclusive": "2024-09-01T00:00:00.000+00:00",
|
||||
"toInclusive": "2024-12-31T23:59:59.000+00:00"
|
||||
}
|
||||
],
|
||||
"auditTrail": [
|
||||
{
|
||||
"auditTrailId": 228,
|
||||
"action": "update",
|
||||
"user": "api",
|
||||
"timestamp": "2024-10-21T09:00:30.410+00:00"
|
||||
},
|
||||
{
|
||||
"auditTrailId": 227,
|
||||
"action": "insert",
|
||||
"user": "api",
|
||||
"timestamp": "2024-10-21T08:58:39.237+00:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,17 +0,0 @@
|
||||
<Configuration status="INFO">
|
||||
<Appenders>
|
||||
<Console name="STDOUT-COLOR">
|
||||
<PatternLayout
|
||||
pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} | %highlight{%-5level} | %cyan{%-28c{1}} - %msg %blue{[%t]}%n"
|
||||
disableAnsi="false"/>
|
||||
</Console>
|
||||
<Console name="STDOUT-NOCOLOR">
|
||||
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} | %-5level | %-28c{1} - %msg [%t]%n"/>
|
||||
</Console>
|
||||
</Appenders>
|
||||
<Loggers>
|
||||
<Root level="INFO">
|
||||
<AppenderRef ref="STDOUT-NOCOLOR"/>
|
||||
</Root>
|
||||
</Loggers>
|
||||
</Configuration>
|
||||
@ -1,482 +0,0 @@
|
||||
openapi: 3.0.1
|
||||
info:
|
||||
title: Personal Account Data (PAD) APIs for touchpoints and Service Engine
|
||||
description: |-
|
||||
APIs for touchpoints and Service Engine to manage Personal Account Data (PAD) on OVpay tokens (xTATs).\
|
||||
These APIs connect directly to the PADP APIs in GBO APIM and are implemented in Logic Apps
|
||||
in the Integration Layer.
|
||||
version: '1.0'
|
||||
servers:
|
||||
- url: https://api.integratielaag.nl/abt/touchpoint/1.0
|
||||
tags:
|
||||
- name: Personal Data APIs for touchpoints
|
||||
description: Personal Data APIs for touchpoints, no Service Engine in between!
|
||||
- name: Personal Data APIs for Service Engine
|
||||
description: Personal Data APIs for Service Engine, not to be exposed to touchpoints!
|
||||
paths:
|
||||
/personal-data/{xtat}:
|
||||
post:
|
||||
tags:
|
||||
- Personal Data APIs for touchpoints
|
||||
summary: Add the supplied Personal Data to the given xTAT (that should not contain any Personal Data yet).
|
||||
description: |-
|
||||
- The given xTAT should not contain any Personal Data yet (the PATCH endpoint should be used in that case) - if the given xTAT already contains Personal Data, an error is thrown;
|
||||
- The given e-mail address will be used for future OTP challenges to manage the Personal Data in the future - this e-mail adress should therefore be validated;
|
||||
- If the e-mail address is not yet validated by other means (e.g. the e-mail address is used for login, or is entered twice to prevent typos), an OTP challenge for the e-mail address should be triggered and supplied to this endpoint;
|
||||
- xTAT and e-mail address are always required, for the Personal Data it is allowed to supply any subset, or all three data attributes;
|
||||
- Each of the three data attributes is validated - for the requirements per attribute, see the descriptions in the request details below;
|
||||
- If any attribute fails validation, none of the attributes will be added to the xTAT.
|
||||
operationId: CreatePersonalData
|
||||
parameters:
|
||||
- name: xtat
|
||||
in: path
|
||||
required: true
|
||||
example: 'c3a6c0f2-3b6a-4b9a-9c5d-5d9c6b3a4c5d'
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
requestBody:
|
||||
content:
|
||||
multipart/form-data:
|
||||
schema:
|
||||
type: object
|
||||
required:
|
||||
- email
|
||||
properties:
|
||||
email:
|
||||
type: string
|
||||
format: email
|
||||
description: Email address to be used for OTP challenges to prove ownership and manage the Personal Data in the future
|
||||
example: 8Z9dG@example.com
|
||||
otp:
|
||||
type: string
|
||||
pattern: ^[0-9]{6}$
|
||||
description: OTP is optional, should be supplied if the e-mail address is not yet validated by other means (e.g. the e-mail address is used for login, or is entered twice to prevent typo's)
|
||||
example: "053395"
|
||||
name:
|
||||
type: string
|
||||
description: Should consist of at least two words (first name and last name)
|
||||
example: John Doe
|
||||
birthDate:
|
||||
type: string
|
||||
format: date
|
||||
description: Should be a date between 1900-01-01 and today, in the format `YYYY-MM-DD`
|
||||
example: 2000-01-01
|
||||
photo:
|
||||
type: string
|
||||
description: Should be a JPG image, with a filesize of max. 512KB and resolution between 520x520 and 720x720 pixels
|
||||
format: binary
|
||||
encoding:
|
||||
photo:
|
||||
contentType: image/jpeg
|
||||
responses:
|
||||
'201':
|
||||
description: Created
|
||||
'400':
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
'404':
|
||||
description: Not Found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
'500':
|
||||
description: Internal Server Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
get:
|
||||
tags:
|
||||
- Personal Data APIs for touchpoints
|
||||
summary: Retrieve the decrypted Personal Data for the given xTAT, using the OTP for verification of ownership.
|
||||
description: OTP challenge is required to retrieve the Personal Data.
|
||||
operationId: GetDecryptedPersonalData
|
||||
parameters:
|
||||
- name: xtat
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 'c3a6c0f2-3b6a-4b9a-9c5d-5d9c6b3a4c5d'
|
||||
- name: otp
|
||||
in: query
|
||||
required: true
|
||||
description: OTP challenge code that the token owner received in their e-mail inbox. OTP is always required for managing existing Personal Data.
|
||||
schema:
|
||||
type: string
|
||||
pattern: ^[0-9]{6}$
|
||||
example: "053395"
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/DecryptedPersonalData'
|
||||
'400':
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
'404':
|
||||
description: Not Found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
'500':
|
||||
description: Internal Server Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
patch:
|
||||
tags:
|
||||
- Personal Data APIs for touchpoints
|
||||
summary: Update the supplied personal data for the given xTAT, using the OTP for verification of ownership.
|
||||
description: This is a PATCH call, so only the personal data that the user desires to change need to be supplied. Integration layer supplements with any other existing personal data to be able to call GBO (PUT call).
|
||||
operationId: UpdatePersonalData
|
||||
parameters:
|
||||
- name: xtat
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 'c3a6c0f2-3b6a-4b9a-9c5d-5d9c6b3a4c5d'
|
||||
requestBody:
|
||||
content:
|
||||
multipart/form-data:
|
||||
schema:
|
||||
type: object
|
||||
required:
|
||||
- otp
|
||||
properties:
|
||||
otp:
|
||||
type: string
|
||||
pattern: ^[0-9]{6}$
|
||||
description: OTP challenge code that the token owner received in their e-mail inbox. OTP is always required for managing existing Personal Data.
|
||||
example: "053395"
|
||||
name:
|
||||
type: string
|
||||
description: Should consist of at least two words (first name and last name)
|
||||
example: John Doe
|
||||
birthDate:
|
||||
type: string
|
||||
format: date
|
||||
description: Should be a date between 1900-01-01 and today, in the format `YYYY-MM-DD`
|
||||
example: 2000-01-01
|
||||
photo:
|
||||
type: string
|
||||
description: Should be a JPG image, with a filesize of max. 512KB and resolution between 520x520 and 720x720 pixels
|
||||
format: binary
|
||||
encoding:
|
||||
photo:
|
||||
contentType: image/jpeg
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
/personal-data/generate-otp:
|
||||
get:
|
||||
tags:
|
||||
- Personal Data APIs for touchpoints
|
||||
summary: Trigger OTP email for the given xTAT or e-mail address, to prove ownership
|
||||
operationId: GenerateOtp
|
||||
description: |-
|
||||
Generate an OTP challenge e-mail to prove ownership of the given e-mail address or xTAT.\
|
||||
Only one type of parameter can be supplied, either xtat or email. When both are supplied, an error is thrown.
|
||||
parameters:
|
||||
- name: xtat
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 'c3a6c0f2-3b6a-4b9a-9c5d-5d9c6b3a4c5d'
|
||||
- name: email
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
format: email
|
||||
example: 'sV4yj@example.com'
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/OtpResponse'
|
||||
'400':
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
'404':
|
||||
description: Not Found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
'500':
|
||||
description: Internal Server Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ErrorResponse'
|
||||
/personal-data/{xtat}/administrative-data:
|
||||
get:
|
||||
tags:
|
||||
- Personal Data APIs for Service Engine
|
||||
summary: API 1211 - Get Administrative Data
|
||||
description: Integration Layer utilizes PAD management V2 in GBO APIM (`/pad-management/v2/..`)
|
||||
operationId: GetAdministrativeData
|
||||
parameters:
|
||||
- name: xtat
|
||||
description: xTAT to get administrative data for
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 'c3a6c0f2-3b6a-4b9a-9c5d-5d9c6b3a4c5d'
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/AdministrativeData"
|
||||
examples:
|
||||
Valid and complete PAD:
|
||||
summary: Valid and complete PAD
|
||||
value:
|
||||
name:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 1
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
photo:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 5
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
birthdate:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 3
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
Partially filled PAD (no photo):
|
||||
summary: Partially filled PAD (no photo)
|
||||
value:
|
||||
name:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 1
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
photo: null
|
||||
birthdate:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 3
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
Flagged PAD:
|
||||
summary: Flagged PAD
|
||||
value:
|
||||
name:
|
||||
inaccuracyFlag: true
|
||||
inaccuracyFlagReason: "Invalid name"
|
||||
inaccuracyFlagCounter: 1
|
||||
changeCounter: 1
|
||||
maxUpdatesVerificationCount: 1
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
photo:
|
||||
inaccuracyFlag: true
|
||||
inaccuracyFlagReason: "Invalid photo"
|
||||
inaccuracyFlagCounter: 1
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 5
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
birthdate:
|
||||
inaccuracyFlag: true
|
||||
inaccuracyFlagReason: "Invalid birthdate"
|
||||
inaccuracyFlagCounter: 1
|
||||
changeCounter: 2
|
||||
maxUpdatesVerificationCount: 3
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
"400":
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Invalid UUID:
|
||||
summary: Invalid UUID
|
||||
value:
|
||||
errors:
|
||||
code: "0x03000103"
|
||||
data: [
|
||||
"geen-uuid"
|
||||
]
|
||||
message: "The provided scTat is not a valid UUID"
|
||||
exceptionClassName: "PadpConstraintViolationException"
|
||||
exceptionStackTrace: "not available because debug mode is turned off"
|
||||
"404":
|
||||
description: Not Found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
No PAD found for xTAT:
|
||||
summary: No PAD found for xTAT
|
||||
value:
|
||||
errors:
|
||||
code: "0x03000105"
|
||||
data: []
|
||||
message: "Transit account not found"
|
||||
exceptionClassName: "PadpEntityNotFoundException"
|
||||
exceptionStackTrace: "not available because debug mode is turned off"
|
||||
"500":
|
||||
description: Internal Server Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Unknown xTAT:
|
||||
summary: Unknown xTAT
|
||||
value:
|
||||
errors:
|
||||
code: "0x00000001"
|
||||
data: null
|
||||
message: "400 : \"{\"errorMessage\":{\"referenceId\":\"076f0de4-df33-42a3-add0-def971ab6679\",\"message\":\"Unknown external transit account token.\"},\"businessExceptions\":[{\"code\":\"TM0207\",\"message\":\"Unknown external transit account token.\"}]}\""
|
||||
exceptionClassName: "BadRequest"
|
||||
exceptionStackTrace: "not available because debug mode is turned off"
|
||||
components:
|
||||
schemas:
|
||||
AdministrativeData:
|
||||
type: object
|
||||
properties:
|
||||
name:
|
||||
$ref: '#/components/schemas/AdministrativeDataElement'
|
||||
photo:
|
||||
$ref: '#/components/schemas/AdministrativeDataElement'
|
||||
birthdate:
|
||||
$ref: '#/components/schemas/AdministrativeDataElement'
|
||||
additionalProperties: false
|
||||
AdministrativeDataElement:
|
||||
type: object
|
||||
properties:
|
||||
inaccuracyFlag:
|
||||
type: boolean
|
||||
inaccuracyFlagReason:
|
||||
type: string
|
||||
nullable: true
|
||||
inaccuracyFlagCounter:
|
||||
type: integer
|
||||
format: int32
|
||||
changeCounter:
|
||||
type: integer
|
||||
format: int32
|
||||
maxUpdatesVerificationCount:
|
||||
type: integer
|
||||
format: int32
|
||||
lastChangeDate:
|
||||
type: string
|
||||
format: date-time
|
||||
isValidated:
|
||||
type: boolean
|
||||
additionalProperties: false
|
||||
DecryptedData:
|
||||
type: object
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
nullable: true
|
||||
birthdate:
|
||||
type: string
|
||||
nullable: true
|
||||
photo:
|
||||
type: string
|
||||
description: Base64 encoded photo
|
||||
format: byte
|
||||
nullable: true
|
||||
additionalProperties: false
|
||||
DecryptedPersonalData:
|
||||
type: object
|
||||
properties:
|
||||
decryptedData:
|
||||
$ref: '#/components/schemas/DecryptedData'
|
||||
additionalProperties: false
|
||||
Error:
|
||||
type: object
|
||||
properties:
|
||||
code:
|
||||
type: string
|
||||
nullable: true
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
nullable: true
|
||||
message:
|
||||
type: string
|
||||
nullable: true
|
||||
additionalProperties: false
|
||||
ErrorResponse:
|
||||
type: object
|
||||
properties:
|
||||
errors:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Error'
|
||||
nullable: true
|
||||
exceptionClassName:
|
||||
type: string
|
||||
nullable: true
|
||||
exceptionStackTrace:
|
||||
type: string
|
||||
nullable: true
|
||||
additionalProperties: false
|
||||
Metadata:
|
||||
type: object
|
||||
properties:
|
||||
encryptedEphemeralKey:
|
||||
type: string
|
||||
nullable: true
|
||||
additionalProperties: false
|
||||
OtpResponse:
|
||||
type: object
|
||||
properties:
|
||||
maskedEmailAddress:
|
||||
type: string
|
||||
nullable: true
|
||||
additionalProperties: false
|
||||
@ -1,477 +0,0 @@
|
||||
openapi: 3.0.3
|
||||
info:
|
||||
title: ABT GBO APIM APIs
|
||||
description: APIs for calling GBO APIM - internal use only, these are NOT the functional APIs to be used by touchpoints!
|
||||
version: "1.0"
|
||||
servers:
|
||||
- url: https://api.integratielaag.nl/abt/gboapim/1.0
|
||||
paths:
|
||||
/pad-management/v2/personal-data/{xtat}/administrative-data:
|
||||
servers:
|
||||
- url: https://api.integratielaag.nl/abt/serviceengine
|
||||
description: APIPRODUCT ABT Service Engine Portal
|
||||
- url: https://api.integratielaag.nl/abt/gboapim/1.0
|
||||
description: API ABT GBO APIM
|
||||
get:
|
||||
tags:
|
||||
- API WSO2 - GBO APIM
|
||||
summary: API 1211 - Get Administrative Data
|
||||
operationId: ABTPAD-GetAdministrativeData
|
||||
parameters:
|
||||
- name: xtat
|
||||
description: xTAT to get administrative data for
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/AdministrativeData"
|
||||
examples:
|
||||
Valid and complete PAD:
|
||||
summary: Valid and complete PAD
|
||||
value:
|
||||
name:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 1
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
photo:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 5
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
birthdate:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 3
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
Partially filled PAD (no photo):
|
||||
summary: Partially filled PAD (no photo)
|
||||
value:
|
||||
name:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 1
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
photo: null
|
||||
birthdate:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 3
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
Flagged PAD:
|
||||
summary: Flagged PAD
|
||||
value:
|
||||
name:
|
||||
inaccuracyFlag: true
|
||||
inaccuracyFlagReason: "Invalid name"
|
||||
inaccuracyFlagCounter: 1
|
||||
changeCounter: 1
|
||||
maxUpdatesVerificationCount: 1
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
photo:
|
||||
inaccuracyFlag: true
|
||||
inaccuracyFlagReason: "Invalid photo"
|
||||
inaccuracyFlagCounter: 1
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 5
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
birthdate:
|
||||
inaccuracyFlag: true
|
||||
inaccuracyFlagReason: "Invalid birthdate"
|
||||
inaccuracyFlagCounter: 1
|
||||
changeCounter: 2
|
||||
maxUpdatesVerificationCount: 3
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
"400":
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Invalid UUID:
|
||||
summary: Invalid UUID
|
||||
value:
|
||||
errors:
|
||||
code: "0x03000103"
|
||||
data: [
|
||||
"geen-uuid"
|
||||
]
|
||||
message: "The provided scTat is not a valid UUID"
|
||||
exceptionClassName: "PadpConstraintViolationException"
|
||||
exceptionStackTrace: "not available because debug mode is turned off"
|
||||
"404":
|
||||
description: Not Found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
No PAD found for xTAT:
|
||||
summary: No PAD found for xTAT
|
||||
value:
|
||||
errors:
|
||||
code: "0x03000105"
|
||||
data: []
|
||||
message: "Transit account not found"
|
||||
exceptionClassName: "PadpEntityNotFoundException"
|
||||
exceptionStackTrace: "not available because debug mode is turned off"
|
||||
"500":
|
||||
description: Internal Server Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Unknown xTAT:
|
||||
summary: Unknown xTAT
|
||||
value:
|
||||
errors:
|
||||
code: "0x00000001"
|
||||
data: null
|
||||
message: "400 : \"{\"errorMessage\":{\"referenceId\":\"076f0de4-df33-42a3-add0-def971ab6679\",\"message\":\"Unknown external transit account token.\"},\"businessExceptions\":[{\"code\":\"TM0207\",\"message\":\"Unknown external transit account token.\"}]}\""
|
||||
exceptionClassName: "BadRequest"
|
||||
exceptionStackTrace: "not available because debug mode is turned off"
|
||||
|
||||
/internal/b2b-client-authentication/v1/token/idp/b2b-access-token:
|
||||
servers:
|
||||
- url: https://only-for-internal-use.com
|
||||
get:
|
||||
tags:
|
||||
- Internal DHIL use only - Raw GBO APIM
|
||||
summary: API 1020 - Get B2B Access Token
|
||||
description: Returns a client access token, needed for most other PADP APIs.
|
||||
operationId: GetB2bAccessToken
|
||||
parameters:
|
||||
- name: APIKey
|
||||
description: B2B IDP APIM Product API Key
|
||||
in: header
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
- name: grant_type
|
||||
description: A grant_type IS A string THAT defines the method which is used by client to request Access Token. grant_type = client_credentials - is used for M2M communication
|
||||
in: query
|
||||
required: true
|
||||
example: client_credentials
|
||||
schema:
|
||||
type: string
|
||||
- name: client_id
|
||||
description: A client_id IS A string THAT is a unique identifier of the client application
|
||||
in: query
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
- name: client_secret
|
||||
description: A client_secret IS A unique identifier THAT is issued by IDP server on client registertraion and known only to Client and IDP server
|
||||
in: query
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/B2bAccessToken"
|
||||
"400":
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
"404":
|
||||
description: Not Found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
"500":
|
||||
description: Internal Server Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
/internal/pad-management/v2/personal-data/{xtat}/administrative-data:
|
||||
servers:
|
||||
- url: https://only-for-internal-use.com
|
||||
get:
|
||||
tags:
|
||||
- Internal DHIL use only - Raw GBO APIM
|
||||
summary: API 1211 - Get Administrative Data
|
||||
operationId: InternalGBOAPIM-GetAdministrativeData
|
||||
parameters:
|
||||
- name: xtat
|
||||
description: xTAT to get administrative data for
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
- name: APIKey
|
||||
description: PADP APIM Product API Key
|
||||
in: header
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
- name: Authorization
|
||||
description: B2B Client Access Token, without the 'Bearer ' prefix
|
||||
in: header
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
- name: requestId
|
||||
description: A unique identifier for the request
|
||||
in: header
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/AdministrativeData"
|
||||
examples:
|
||||
Valid and complete PAD:
|
||||
summary: Valid and complete PAD
|
||||
value:
|
||||
name:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 1
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
photo:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 5
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
birthdate:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 3
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
Partially filled PAD (no photo):
|
||||
summary: Partially filled PAD (no photo)
|
||||
value:
|
||||
name:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 1
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
photo: null
|
||||
birthdate:
|
||||
inaccuracyFlag: false
|
||||
inaccuracyFlagReason: null
|
||||
inaccuracyFlagCounter: 0
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 3
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
Flagged PAD:
|
||||
summary: Flagged PAD
|
||||
value:
|
||||
name:
|
||||
inaccuracyFlag: true
|
||||
inaccuracyFlagReason: "Invalid name"
|
||||
inaccuracyFlagCounter: 1
|
||||
changeCounter: 1
|
||||
maxUpdatesVerificationCount: 1
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
photo:
|
||||
inaccuracyFlag: true
|
||||
inaccuracyFlagReason: "Invalid photo"
|
||||
inaccuracyFlagCounter: 1
|
||||
changeCounter: 0
|
||||
maxUpdatesVerificationCount: 5
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
birthdate:
|
||||
inaccuracyFlag: true
|
||||
inaccuracyFlagReason: "Invalid birthdate"
|
||||
inaccuracyFlagCounter: 1
|
||||
changeCounter: 2
|
||||
maxUpdatesVerificationCount: 3
|
||||
lastChangeDate: "2025-03-26T10:18:42.947"
|
||||
isValidated: false
|
||||
"400":
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Invalid UUID:
|
||||
summary: Invalid UUID
|
||||
value:
|
||||
errors:
|
||||
code: "0x03000103"
|
||||
data: [
|
||||
"geen-uuid"
|
||||
]
|
||||
message: "The provided scTat is not a valid UUID"
|
||||
exceptionClassName: "PadpConstraintViolationException"
|
||||
exceptionStackTrace: "not available because debug mode is turned off"
|
||||
"404":
|
||||
description: Not Found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
No PAD found for xTAT:
|
||||
summary: No PAD found for xTAT
|
||||
value:
|
||||
errors:
|
||||
code: "0x03000105"
|
||||
data: []
|
||||
message: "Transit account not found"
|
||||
exceptionClassName: "PadpEntityNotFoundException"
|
||||
exceptionStackTrace: "not available because debug mode is turned off"
|
||||
"500":
|
||||
description: Internal Server Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ErrorResponse"
|
||||
examples:
|
||||
Unknown xTAT:
|
||||
summary: Unknown xTAT
|
||||
value:
|
||||
errors:
|
||||
code: "0x00000001"
|
||||
data: null
|
||||
message: "400 : \"{\"errorMessage\":{\"referenceId\":\"076f0de4-df33-42a3-add0-def971ab6679\",\"message\":\"Unknown external transit account token.\"},\"businessExceptions\":[{\"code\":\"TM0207\",\"message\":\"Unknown external transit account token.\"}]}\""
|
||||
exceptionClassName: "BadRequest"
|
||||
exceptionStackTrace: "not available because debug mode is turned off"
|
||||
components:
|
||||
schemas:
|
||||
AdministrativeData:
|
||||
type: object
|
||||
properties:
|
||||
name:
|
||||
$ref: "#/components/schemas/AdministrativeData_AdministrativeDataElement"
|
||||
photo:
|
||||
$ref: "#/components/schemas/AdministrativeData_AdministrativeDataElement"
|
||||
birthdate:
|
||||
$ref: "#/components/schemas/AdministrativeData_AdministrativeDataElement"
|
||||
additionalProperties: false
|
||||
AdministrativeData_AdministrativeDataElement:
|
||||
type: object
|
||||
properties:
|
||||
inaccuracyFlag:
|
||||
type: boolean
|
||||
inaccuracyFlagReason:
|
||||
type: string
|
||||
nullable: true
|
||||
inaccuracyFlagCounter:
|
||||
type: integer
|
||||
format: int32
|
||||
changeCounter:
|
||||
type: integer
|
||||
format: int32
|
||||
maxUpdatesVerificationCount:
|
||||
type: integer
|
||||
format: int32
|
||||
lastChangeDate:
|
||||
type: string
|
||||
format: date-time
|
||||
isValidated:
|
||||
type: boolean
|
||||
additionalProperties: false
|
||||
B2bAccessToken:
|
||||
type: object
|
||||
properties:
|
||||
access_token:
|
||||
type: string
|
||||
nullable: true
|
||||
expires_in:
|
||||
type: integer
|
||||
format: int32
|
||||
refresh_expires_in:
|
||||
type: integer
|
||||
format: int32
|
||||
refresh_token:
|
||||
type: string
|
||||
nullable: true
|
||||
token_type:
|
||||
type: string
|
||||
nullable: true
|
||||
not-before-policy:
|
||||
type: integer
|
||||
format: int32
|
||||
scope:
|
||||
type: string
|
||||
nullable: true
|
||||
BE_ID:
|
||||
type: string
|
||||
nullable: true
|
||||
additionalProperties: false
|
||||
ErrorResponse:
|
||||
type: object
|
||||
properties:
|
||||
errors:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/ErrorResponse_Error"
|
||||
nullable: true
|
||||
exceptionClassName:
|
||||
type: string
|
||||
nullable: true
|
||||
exceptionStackTrace:
|
||||
type: string
|
||||
nullable: true
|
||||
additionalProperties: false
|
||||
ErrorResponse_Error:
|
||||
type: object
|
||||
properties:
|
||||
code:
|
||||
type: string
|
||||
nullable: true
|
||||
data:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
nullable: true
|
||||
message:
|
||||
type: string
|
||||
nullable: true
|
||||
additionalProperties: false
|
||||
@ -1,268 +0,0 @@
|
||||
openapi: 3.0.1
|
||||
info:
|
||||
title: ClaimsAPI
|
||||
version: '1.0'
|
||||
servers:
|
||||
- url: https://services.acc.api.htm.nl/chipkaart/1.0
|
||||
- url: http://services.acc.api.htm.nl/chipkaart/1.0
|
||||
security:
|
||||
- default: []
|
||||
tags:
|
||||
- name: Claims
|
||||
paths:
|
||||
/claims:
|
||||
post:
|
||||
tags:
|
||||
- Claims
|
||||
summary: Create a claim
|
||||
description: >
|
||||
Create a claim by sending a JSON as specified in the schema. By
|
||||
specifying the chipcardnumber under 'chipkaart',
|
||||
|
||||
a claim for OV chipcard will be send to the OVC API. If no
|
||||
chipcardnumber is specified under 'chipkaart', a claim for EMV is send
|
||||
to mendix.
|
||||
parameters: []
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/claimsEntity'
|
||||
examples:
|
||||
OVCK:
|
||||
value:
|
||||
aankomsthalte: '1'
|
||||
instapdatum: '2024-03-06T15:20:44.549Z'
|
||||
instaptijd: '2024-03-06T15:20:44.549Z'
|
||||
ingecheckt: true
|
||||
uitgecheckt: true
|
||||
chipkaart: '1234123412341234'
|
||||
afgeschrevenbedrag: 0
|
||||
vertrekhalte: string
|
||||
korting: true
|
||||
iban: '1234123412341234'
|
||||
naam: string
|
||||
emailadres: user@example.com
|
||||
uitstaptijd: '2024-03-06T15:20:44.549Z'
|
||||
verwachtbedrag: 0
|
||||
toelichting: string
|
||||
lijn: '1'
|
||||
vervoertype: '1'
|
||||
serviceRefId: '1'
|
||||
Totaalbedrag: 0
|
||||
EMV:
|
||||
value:
|
||||
aankomsthalte: '1'
|
||||
instapdatum: '2024-03-06T15:20:44.549Z'
|
||||
instaptijd: '2024-03-06T15:20:44.549Z'
|
||||
ingecheckt: true
|
||||
uitgecheckt: true
|
||||
afgeschrevenbedrag: 0
|
||||
vertrekhalte: string
|
||||
korting: true
|
||||
iban: '1234123412341234'
|
||||
naam: string
|
||||
emailadres: user@example.com
|
||||
uitstaptijd: '2024-03-06T15:20:44.549Z'
|
||||
verwachtbedrag: 0
|
||||
toelichting: string
|
||||
lijn: '1'
|
||||
vervoertype: '1'
|
||||
serviceRefId: '1'
|
||||
Totaalbedrag: 0
|
||||
responses:
|
||||
'200':
|
||||
description: ok
|
||||
'401':
|
||||
description: Unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/401Response'
|
||||
'500':
|
||||
description: Internal Server Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/500Response'
|
||||
security:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
x-throttling-tier: Unlimited
|
||||
/refunds:
|
||||
post:
|
||||
tags:
|
||||
- Claims
|
||||
summary: Create a refund request
|
||||
description: Create a refund request by sending a JSON as specified in the schema. Either a serviceReferenceId or ovPasNumber should be present in order to fulfill the refund request.
|
||||
parameters: []
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/refundsEntity'
|
||||
examples:
|
||||
EMV:
|
||||
value:
|
||||
emailAddress: 'j.beek@htm.nl'
|
||||
orderNumber: 'ORD1000046'
|
||||
serviceReferenceId: 'NLOVA5BCD124H3Z21X'
|
||||
amount: 2305
|
||||
iban: 'NL98INGB0003856625'
|
||||
orderDate: '2025-01-13'
|
||||
productName: 'HTM 20% korting'
|
||||
OVpas:
|
||||
value:
|
||||
emailAddress: 'j.beek@htm.nl'
|
||||
orderNumber: 'ORD1000046'
|
||||
ovpasNumber: '63AW974'
|
||||
iban: 'NL98INGB0003856625'
|
||||
orderDate: '2025-01-13'
|
||||
productName: 'HTM 20% korting'
|
||||
responses:
|
||||
'201':
|
||||
description: Created
|
||||
'401':
|
||||
description: Unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/401Response'
|
||||
'500':
|
||||
description: Internal Server Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/500Response'
|
||||
security:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
x-throttling-tier: Unlimited
|
||||
components:
|
||||
schemas:
|
||||
claimsEntity:
|
||||
required:
|
||||
- Totaalbedrag
|
||||
- aankomsthalte
|
||||
- afgeschrevenbedrag
|
||||
- emailadres
|
||||
- instapdatum
|
||||
- instaptijd
|
||||
- korting
|
||||
- lijn
|
||||
- serviceRefId
|
||||
- toelichting
|
||||
- uitgecheckt
|
||||
- vertrekhalte
|
||||
- vervoertype
|
||||
- verwachtbedrag
|
||||
type: object
|
||||
properties:
|
||||
aankomsthalte:
|
||||
type: string
|
||||
instapdatum:
|
||||
type: string
|
||||
format: date-time
|
||||
instaptijd:
|
||||
type: string
|
||||
format: date-time
|
||||
ingecheckt:
|
||||
type: boolean
|
||||
uitgecheckt:
|
||||
type: boolean
|
||||
chipkaart:
|
||||
type: string
|
||||
afgeschrevenbedrag:
|
||||
type: number
|
||||
format: float
|
||||
vertrekhalte:
|
||||
type: string
|
||||
korting:
|
||||
type: boolean
|
||||
iban:
|
||||
type: string
|
||||
description: String of length between 15 en 32 characters
|
||||
example: '1234123412341234'
|
||||
naam:
|
||||
type: string
|
||||
emailadres:
|
||||
type: string
|
||||
format: email
|
||||
uitstaptijd:
|
||||
type: string
|
||||
format: date-time
|
||||
verwachtbedrag:
|
||||
type: number
|
||||
format: float
|
||||
toelichting:
|
||||
type: string
|
||||
lijn:
|
||||
type: string
|
||||
vervoertype:
|
||||
type: string
|
||||
serviceRefId:
|
||||
type: string
|
||||
Totaalbedrag:
|
||||
type: number
|
||||
format: float
|
||||
refundsEntity:
|
||||
required:
|
||||
- emailAddress
|
||||
- iban
|
||||
type: object
|
||||
properties:
|
||||
emailAddress:
|
||||
type: string
|
||||
format: email
|
||||
example: j.beek@htm.nl
|
||||
orderNumber:
|
||||
type: string
|
||||
example: ORD1000046
|
||||
serviceReferenceId:
|
||||
type: string
|
||||
example: NLOVA5BCD124H3Z21X
|
||||
amount:
|
||||
type: integer
|
||||
example: 12305
|
||||
ovpasNumber:
|
||||
type: string
|
||||
example: 63AW974
|
||||
iban:
|
||||
type: string
|
||||
example: NL00RABO000001337
|
||||
orderDate:
|
||||
type: string
|
||||
format: date
|
||||
example: 2025-01-13
|
||||
productName:
|
||||
type: string
|
||||
example: HTM 20% korting
|
||||
401Response:
|
||||
type: object
|
||||
properties:
|
||||
code:
|
||||
type: string
|
||||
example: '900901'
|
||||
type:
|
||||
type: string
|
||||
message:
|
||||
type: string
|
||||
example: Invalid Credentials
|
||||
description:
|
||||
type: string
|
||||
example: >-
|
||||
Invalid Credentials. Make sure you have provided the correct
|
||||
security credentials
|
||||
500Response:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
example: error while connecting to backend
|
||||
securitySchemes:
|
||||
default:
|
||||
type: oauth2
|
||||
flows:
|
||||
implicit:
|
||||
authorizationUrl: https://services.acc.api.htm.nl/authorize
|
||||
scopes: {}
|
||||
@ -213,19 +213,6 @@ paths:
|
||||
"updated": "2024-06-02 15:01:00.000",
|
||||
"state": "invoice_created",
|
||||
"isCredit": false,
|
||||
"invoiceAccountingStatuses":
|
||||
[
|
||||
{
|
||||
"invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f",
|
||||
"accountingStatus":
|
||||
{
|
||||
"accountingStatusId": 1,
|
||||
"name": "open",
|
||||
},
|
||||
"createdOn": "2024-06-02 15:01:00.000",
|
||||
"description": null,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
"contractInvoiceId": "1c345237-4d84-47f0-93c2-7b94338e3355",
|
||||
@ -235,19 +222,6 @@ paths:
|
||||
"updated": "2024-07-02 15:01:00.000",
|
||||
"state": "invoice_created",
|
||||
"isCredit": false,
|
||||
"invoiceAccountingStatuses":
|
||||
[
|
||||
{
|
||||
"invoiceAccountingStatusId": "1e95b854-0094-42a4-9268-c16353fb72a8",
|
||||
"accountingStatus":
|
||||
{
|
||||
"accountingStatusId": 1,
|
||||
"name": "open",
|
||||
},
|
||||
"createdOn": "2024-07-02 15:01:00.000",
|
||||
"description": null,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
"contractVersions":
|
||||
@ -297,19 +271,6 @@ paths:
|
||||
"updated": "2024-06-02 15:01:00.000",
|
||||
"state": "invoice_created",
|
||||
"isCredit": false,
|
||||
"invoiceAccountingStatuses":
|
||||
[
|
||||
{
|
||||
"invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f",
|
||||
"accountingStatus":
|
||||
{
|
||||
"accountingStatusId": 1,
|
||||
"name": "open",
|
||||
},
|
||||
"createdOn": "2024-06-02 15:01:00.000",
|
||||
"description": null,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
"contractInvoiceId": "1c345237-4d84-47f0-93c2-7b94338e3355",
|
||||
@ -319,19 +280,6 @@ paths:
|
||||
"updated": "2024-07-02 15:01:00.000",
|
||||
"state": "invoice_created",
|
||||
"isCredit": false,
|
||||
"invoiceAccountingStatuses":
|
||||
[
|
||||
{
|
||||
"invoiceAccountingStatusId": "1e95b854-0094-42a4-9268-c16353fb72a8",
|
||||
"accountingStatus":
|
||||
{
|
||||
"accountingStatusId": 1,
|
||||
"name": "open",
|
||||
},
|
||||
"createdOn": "2024-07-02 15:01:00.000",
|
||||
"description": null,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
"contractVersions":
|
||||
@ -452,16 +400,6 @@ paths:
|
||||
"state": "invoice_created",
|
||||
"data": "{json}",
|
||||
"isCredit": false,
|
||||
"invoiceAccountingStatuses":
|
||||
[
|
||||
{
|
||||
"invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f",
|
||||
"accountingStatus":
|
||||
{ "accountingStatusId": 1, "name": "open" },
|
||||
"createdOn": "2024-06-02 15:01:00.000",
|
||||
"description": null,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
@ -521,7 +459,7 @@ paths:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/InvoiceAccountingStatus"
|
||||
$ref: "#/components/schemas/ContractVersion"
|
||||
example:
|
||||
{
|
||||
"contractVersion":
|
||||
@ -629,16 +567,6 @@ paths:
|
||||
"state": "invoice_sent",
|
||||
"data": "{json}",
|
||||
"isCredit": false,
|
||||
"invoiceAccountingStatuses":
|
||||
[
|
||||
{
|
||||
"invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f",
|
||||
"accountingStatus":
|
||||
{ "accountingStatusId": 1, "name": "open" },
|
||||
"createdOn": "2024-06-02 15:01:00.000",
|
||||
"description": null,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
"contractInvoiceId": "dadff658-4ff5-4eb8-b516-492f1f6c6245",
|
||||
@ -649,16 +577,6 @@ paths:
|
||||
"state": "invoice_created",
|
||||
"data": "{json}",
|
||||
"isCredit": false,
|
||||
"invoiceAccountingStatuses":
|
||||
[
|
||||
{
|
||||
"invoiceAccountingStatusId": "84af0f01-0416-4860-851a-a0d4b3cf674a",
|
||||
"accountingStatus":
|
||||
{ "accountingStatusId": 1, "name": "open" },
|
||||
"createdOn": "2024-06-02 15:01:00.000",
|
||||
"description": null,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
@ -683,15 +601,6 @@ paths:
|
||||
"state": "invoice_created",
|
||||
"data": "{json}",
|
||||
"isCredit": false,
|
||||
"invoiceAccountingStatuses":
|
||||
[
|
||||
{
|
||||
"invoiceAccountingStatusId": 1,
|
||||
"createdOn",
|
||||
"2024-07-02 15:01:00.000",
|
||||
"description": null,
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
||||
responses:
|
||||
@ -715,14 +624,6 @@ paths:
|
||||
tags:
|
||||
- ContractInvoice
|
||||
parameters:
|
||||
- in: query
|
||||
name: contractInvoiceId
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 8699d72a-cf4d-4e6b-9e9c-549d837ca51f
|
||||
required: false
|
||||
description: Id of the contract invoice to fetch.
|
||||
- in: query
|
||||
name: contractId
|
||||
schema:
|
||||
@ -812,16 +713,6 @@ paths:
|
||||
"state": "invoice_created",
|
||||
"data": "{json}",
|
||||
"isCredit": false,
|
||||
"invoiceAccountingStatuses":
|
||||
[
|
||||
{
|
||||
"invoiceAccountingStatusId": "32785417-1fb8-42c7-bda1-533f5868809f",
|
||||
"accountingStatus":
|
||||
{ "accountingStatusId": 1, "name": "open" },
|
||||
"createdOn": "2024-06-02 15:01:00.000",
|
||||
"description": null,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
"contractId": "a7452e22-3894-40cc-87d6-869370a92277",
|
||||
@ -833,16 +724,6 @@ paths:
|
||||
"state": "invoice_created",
|
||||
"data": "{json}",
|
||||
"isCredit": false,
|
||||
"invoiceAccountingStatuses":
|
||||
[
|
||||
{
|
||||
"invoiceAccountingStatusId": "84af0f01-0416-4860-851a-a0d4b3cf674a",
|
||||
"accountingStatus":
|
||||
{ "accountingStatusId": 1, "name": "open" },
|
||||
"createdOn": "2024-08-02 15:01:00.000",
|
||||
"description": null,
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
@ -889,43 +770,6 @@ paths:
|
||||
"contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
|
||||
},
|
||||
}
|
||||
/contractinvoices/{contractInvoiceId}/invoiceaccountingstatuses:
|
||||
parameters:
|
||||
- in: path
|
||||
name: contractInvoiceId
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: d1dd439b-6072-4b97-89c9-724268865b93
|
||||
required: true
|
||||
description: The id of the ContractInvoice, formatted as UUID.
|
||||
post:
|
||||
summary: Add a new invoice accounting status to a contract invoice.
|
||||
description: Add a new invoice accounting status to a contract invoice.
|
||||
tags:
|
||||
- ContractInvoice
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ContractInvoice"
|
||||
example:
|
||||
{
|
||||
"accountingStatusId": 1,
|
||||
"createdOn": "2024-07-02 15:01:00.000",
|
||||
"description": null,
|
||||
}
|
||||
responses:
|
||||
"201":
|
||||
description: Created
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ContractInvoice"
|
||||
example:
|
||||
{
|
||||
"invoiceAccountingStatusId": "a6836364-4812-4960-9226-69deb2e2b903",
|
||||
}
|
||||
/contracts/{contractId}/contractactions:
|
||||
parameters:
|
||||
- in: path
|
||||
@ -1216,37 +1060,6 @@ components:
|
||||
isCredit:
|
||||
type: boolean
|
||||
example: false
|
||||
InvoiceAccountingStatus:
|
||||
type: object
|
||||
properties:
|
||||
invoiceAccountingStatusId:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 6b6f0f5e-5d3f-4a6d-8e7d-6a7d0f9e6c5b
|
||||
contractInvoiceId:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 8699d72a-cf4d-4e6b-9e9c-549d837ca51f
|
||||
accountingStatus:
|
||||
type: object
|
||||
$ref: "#/components/schemas/AccountingStatus"
|
||||
createdOn:
|
||||
type: string
|
||||
format: date-time
|
||||
example: 2024-07-02 15:01:00.000
|
||||
description:
|
||||
type: string
|
||||
example: Open
|
||||
AccountingStatus:
|
||||
type: object
|
||||
properties:
|
||||
accountingStatusId:
|
||||
type: integer
|
||||
example: 1
|
||||
name:
|
||||
type: string
|
||||
enum: [open, sent, received, rejected]
|
||||
example: open
|
||||
ContractStatus:
|
||||
type: object
|
||||
properties:
|
||||
@ -1255,16 +1068,7 @@ components:
|
||||
example: 2
|
||||
name:
|
||||
type: string
|
||||
enum:
|
||||
[
|
||||
new,
|
||||
active,
|
||||
suspended,
|
||||
cancelled,
|
||||
terminated,
|
||||
pending cancellation,
|
||||
pending termination,
|
||||
]
|
||||
enum: [new, active, suspended, cancelled, terminated, pending cancellation, pending termination]
|
||||
example: active
|
||||
ActionType:
|
||||
type: object
|
||||
|
||||
@ -4,7 +4,7 @@ info:
|
||||
version: "1.0"
|
||||
description: Service Engine APIs for ABT Contracts v2. These are NOT the CRUD APIs to the data hub.
|
||||
servers:
|
||||
- url: https://api.integratielaag.nl/abt/touchpoint/1.0
|
||||
- url: https://api.integratielaag.nl/v1
|
||||
paths:
|
||||
/customers/contracts:
|
||||
parameters:
|
||||
@ -27,65 +27,40 @@ paths:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
List all contracts for a single customer profile:
|
||||
summary: List all contracts for a single customer profile
|
||||
description: |
|
||||
List all contracts for single customer profile with customer
|
||||
number 'D123456'.
|
||||
value:
|
||||
[
|
||||
{
|
||||
"contractId": "5a3876a1-e9a1-4278-8983-4679a8d583c2",
|
||||
"contractNumber": "D123456",
|
||||
"customerProfileId": 42,
|
||||
"orderId": "eb3d08f7-7feb-4f31-9f5b-daa634e51f48",
|
||||
"orderLineId": "52efbbfc-8c28-4016-9ece-dc3ef9a70bd8",
|
||||
"touchpointId": 2,
|
||||
"contractStatus":
|
||||
{ "contractStatusId": 2, "name": "active" },
|
||||
"productId": 1,
|
||||
"productName": "HTM Maand 20% korting",
|
||||
"termDuration": "P0Y1M0D",
|
||||
"billingDay": 15,
|
||||
"highestInvoiceTerm": 1,
|
||||
"created": "2024-08-01 15:01:00.000",
|
||||
"ovPayTokenId": 1337,
|
||||
"_links":
|
||||
{
|
||||
"get_token":
|
||||
{
|
||||
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPayTokenId=1337",
|
||||
"method": "GET",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
"contractId": "f07253e6-c364-474c-a342-a10a4a7cf305",
|
||||
"contractNumber": "D123456",
|
||||
"customerProfileId": 42,
|
||||
"orderId": "945d43e6-516e-425b-8847-9aba41289acd",
|
||||
"orderLineId": "42f68042-908f-41f4-9d9b-4cab843ff0e8",
|
||||
"touchpointId": 2,
|
||||
"contractStatus":
|
||||
{ "contractStatusId": 1, "name": "new" },
|
||||
"productId": 1,
|
||||
"productName": "HTM Maand 20% korting",
|
||||
"termDuration": "P0Y1M0D",
|
||||
"billingDay": 15,
|
||||
"highestInvoiceTerm": 1,
|
||||
"created": "2024-08-01 15:01:00.000",
|
||||
"ovPayTokenId": 1338,
|
||||
"_links":
|
||||
{
|
||||
"get_token":
|
||||
{
|
||||
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPayTokenId=1338",
|
||||
"method": "GET",
|
||||
},
|
||||
},
|
||||
},
|
||||
]
|
||||
example:
|
||||
[
|
||||
{
|
||||
"contractId": "5a3876a1-e9a1-4278-8983-4679a8d583c2",
|
||||
"contractNumber": "D123456",
|
||||
"customerProfileId": 42,
|
||||
"orderId": "eb3d08f7-7feb-4f31-9f5b-daa634e51f48",
|
||||
"orderLineId": "52efbbfc-8c28-4016-9ece-dc3ef9a70bd8",
|
||||
"touchpointId": 2,
|
||||
"contractStatus":
|
||||
{ "contractStatusId": 2, "name": "active" },
|
||||
"productId": 1,
|
||||
"productName": "HTM Maand 20% korting",
|
||||
"termDuration": "P0Y1M0D",
|
||||
"billingDay": 15,
|
||||
"highestInvoiceTerm": 1,
|
||||
"created": "2024-08-01 15:01:00.000",
|
||||
},
|
||||
{
|
||||
"contractId": "f07253e6-c364-474c-a342-a10a4a7cf305",
|
||||
"contractNumber": "D123456",
|
||||
"customerProfileId": 42,
|
||||
"orderId": "945d43e6-516e-425b-8847-9aba41289acd",
|
||||
"orderLineId": "42f68042-908f-41f4-9d9b-4cab843ff0e8",
|
||||
"touchpointId": 2,
|
||||
"contractStatus": { "contractStatusId": 1, "name": "new" },
|
||||
"productId": 1,
|
||||
"productName": "HTM Maand 20% korting",
|
||||
"termDuration": "P0Y1M0D",
|
||||
"billingDay": 15,
|
||||
"highestInvoiceTerm": 1,
|
||||
"created": "2024-08-01 15:01:00.000",
|
||||
},
|
||||
]
|
||||
/customers/contracts/{contractId}:
|
||||
parameters:
|
||||
- in: header
|
||||
@ -137,93 +112,75 @@ paths:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
Full contract details of a single contract:
|
||||
summary: Full contract details of a single contract
|
||||
description: |
|
||||
Full contract details of a single contract with contract
|
||||
number 'D123456'.
|
||||
value:
|
||||
{
|
||||
"contractId": "5a3876a1-e9a1-4278-8983-4679a8d583c2",
|
||||
"contractNumber": "D123456",
|
||||
"customerProfileId": 42,
|
||||
"orderId": "eb3d08f7-7feb-4f31-9f5b-daa634e51f48",
|
||||
"orderLineId": "52efbbfc-8c28-4016-9ece-dc3ef9a70bd8",
|
||||
"touchpointId": 2,
|
||||
"contractStatus":
|
||||
{ "contractStatusId": 2, "name": "active" },
|
||||
"productId": 1,
|
||||
"productName": "HTM Maand 20% korting",
|
||||
"termDuration": "P0Y1M0D",
|
||||
"billingDay": 15,
|
||||
"highestInvoiceTerm": 1,
|
||||
"ovPayTokenId": 1337,
|
||||
"contractVersions":
|
||||
[
|
||||
{
|
||||
"contractVersionId": 1,
|
||||
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
|
||||
"termAmountExclTax": 1200,
|
||||
"taxCode": "V21",
|
||||
"taxAmount": 108,
|
||||
"termAmountInclTax": 1308,
|
||||
"start": "2024-07-04 15:01:00.000",
|
||||
"end": "2024-12-31 15:01:00.000",
|
||||
},
|
||||
{
|
||||
"contractVersionId": 2,
|
||||
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
|
||||
"termAmountExclTax": 1300,
|
||||
"taxCode": "V21",
|
||||
"taxAmount": 117,
|
||||
"termAmountInclTax": 1417,
|
||||
"start": "2025-01-01 15:01:00.000",
|
||||
},
|
||||
],
|
||||
"contractActions":
|
||||
[
|
||||
{
|
||||
"contractActionId": "67687851-59dd-4bbc-aa74-0f7abd26c883",
|
||||
"actionType":
|
||||
{ "actionTypeId": 1, "name": "create" },
|
||||
"user": "subid123456",
|
||||
"timestamp": "2024-07-02 15:01:00.000",
|
||||
"details": "Contract created",
|
||||
"correlationId": "976e7a4c-bf24-43d2-b444-55817556e7ee",
|
||||
},
|
||||
{
|
||||
"contractActionId": "ea9ad287-9cd3-4e76-bcb9-d71db551cf55",
|
||||
"actionType":
|
||||
{ "actionTypeId": 2, "name": "change" },
|
||||
"user": "subid123456",
|
||||
"timestamp": "2024-07-03 15:01:00.000",
|
||||
"details": "Contract changed",
|
||||
"correlationId": "e2462347-6749-4841-b42a-cf8de19ec727",
|
||||
},
|
||||
],
|
||||
"contractInvoices":
|
||||
[
|
||||
{
|
||||
"contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
|
||||
"externalReference": "F2024-0001",
|
||||
"term": 1,
|
||||
"created": "2024-07-02 15:01:00.000",
|
||||
"updated": "2024-07-02 15:01:00.000",
|
||||
"state": "invoice_created",
|
||||
"data": "{json}",
|
||||
"isCredit": false,
|
||||
},
|
||||
],
|
||||
"_links":
|
||||
{
|
||||
"get_token":
|
||||
{
|
||||
"href": "https://api.integratielaag.nl/abt/touchpoint/1.0/customers/tokens?ovPayTokenId=1337",
|
||||
"method": "GET",
|
||||
},
|
||||
},
|
||||
}
|
||||
example:
|
||||
{
|
||||
"contractId": "5a3876a1-e9a1-4278-8983-4679a8d583c2",
|
||||
"contractNumber": "D123456",
|
||||
"customerProfileId": 42,
|
||||
"orderId": "eb3d08f7-7feb-4f31-9f5b-daa634e51f48",
|
||||
"orderLineId": "52efbbfc-8c28-4016-9ece-dc3ef9a70bd8",
|
||||
"touchpointId": 2,
|
||||
"contractStatus": { "contractStatusId": 2, "name": "active" },
|
||||
"productId": 1,
|
||||
"productName": "HTM Maand 20% korting",
|
||||
"termDuration": "P0Y1M0D",
|
||||
"billingDay": 15,
|
||||
"highestInvoiceTerm": 1,
|
||||
"contractVersions":
|
||||
[
|
||||
{
|
||||
"contractVersionId": 1,
|
||||
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
|
||||
"termAmountExclTax": 1200,
|
||||
"taxCode": "V21",
|
||||
"taxAmount": 108,
|
||||
"termAmountInclTax": 1308,
|
||||
"start": "2024-07-04 15:01:00.000",
|
||||
"end": "2024-12-31 15:01:00.000",
|
||||
},
|
||||
{
|
||||
"contractVersionId": 2,
|
||||
"termsAndConditions": "https://www.htm.nl/reisproducten/productvoorwaarden/htm-maandkorting/",
|
||||
"termAmountExclTax": 1300,
|
||||
"taxCode": "V21",
|
||||
"taxAmount": 117,
|
||||
"termAmountInclTax": 1417,
|
||||
"start": "2025-01-01 15:01:00.000",
|
||||
},
|
||||
],
|
||||
"contractActions":
|
||||
[
|
||||
{
|
||||
"contractActionId": "67687851-59dd-4bbc-aa74-0f7abd26c883",
|
||||
"actionType": { "actionTypeId": 1, "name": "create" },
|
||||
"user": "subid123456",
|
||||
"timestamp": "2024-07-02 15:01:00.000",
|
||||
"details": "Contract created",
|
||||
"correlationId": "976e7a4c-bf24-43d2-b444-55817556e7ee",
|
||||
},
|
||||
{
|
||||
"contractActionId": "ea9ad287-9cd3-4e76-bcb9-d71db551cf55",
|
||||
"actionType": { "actionTypeId": 2, "name": "change" },
|
||||
"user": "subid123456",
|
||||
"timestamp": "2024-07-03 15:01:00.000",
|
||||
"details": "Contract changed",
|
||||
"correlationId": "e2462347-6749-4841-b42a-cf8de19ec727",
|
||||
},
|
||||
],
|
||||
"contractInvoices":
|
||||
[
|
||||
{
|
||||
"contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
|
||||
"externalReference": "F2024-0001",
|
||||
"term": 1,
|
||||
"created": "2024-07-02 15:01:00.000",
|
||||
"updated": "2024-07-02 15:01:00.000",
|
||||
"state": "invoice_created",
|
||||
"data": "{json}",
|
||||
"isCredit": false,
|
||||
},
|
||||
],
|
||||
}
|
||||
/customers/contracts/{contractId}/invoices:
|
||||
parameters:
|
||||
- in: header
|
||||
@ -253,37 +210,31 @@ paths:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
Get all invoices of a single contract:
|
||||
summary: Get all invoices of a single contract
|
||||
description: |
|
||||
Get all invoices of a single contract with contract number
|
||||
'D123456'.
|
||||
value:
|
||||
[
|
||||
{
|
||||
"contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
|
||||
"contractId": "9e224750-3065-471d-af57-85b9cffa7c89",
|
||||
"externalReference": "F2024-0001",
|
||||
"term": 1,
|
||||
"created": "2024-07-02 15:01:34.000",
|
||||
"updated": "2024-07-04 00:04:56.000",
|
||||
"state": "invoice_created",
|
||||
"public_link": "http://mijnfactuurinzien.nl/F2024-0001",
|
||||
"isCredit": false,
|
||||
},
|
||||
{
|
||||
"contractInvoiceId": "0e729101-2c84-44db-8b18-d8f759e968e0",
|
||||
"contractId": "9e224750-3065-471d-af57-85b9cffa7c89",
|
||||
"externalReference": "F2024-0002",
|
||||
"term": 2,
|
||||
"created": "2024-08-02 15:01:34.000",
|
||||
"updated": "2024-08-04 00:04:56.000",
|
||||
"state": "invoice_created",
|
||||
"public_link": "http://mijnfactuurinzien.nl/F2024-0002",
|
||||
"isCredit": false,
|
||||
},
|
||||
]
|
||||
example:
|
||||
[
|
||||
{
|
||||
"contractInvoiceId": "8699d72a-cf4d-4e6b-9e9c-549d837ca51f",
|
||||
"contractId": "9e224750-3065-471d-af57-85b9cffa7c89",
|
||||
"externalReference": "F2024-0001",
|
||||
"term": 1,
|
||||
"created": "2024-07-02 15:01:34.000",
|
||||
"updated": "2024-07-04 00:04:56.000",
|
||||
"state": "invoice_created",
|
||||
"public_link": "http://mijnfactuurinzien.nl/F2024-0001",
|
||||
"isCredit": false,
|
||||
},
|
||||
{
|
||||
"contractInvoiceId": "0e729101-2c84-44db-8b18-d8f759e968e0",
|
||||
"contractId": "9e224750-3065-471d-af57-85b9cffa7c89",
|
||||
"externalReference": "F2024-0002",
|
||||
"term": 2,
|
||||
"created": "2024-08-02 15:01:34.000",
|
||||
"updated": "2024-08-04 00:04:56.000",
|
||||
"state": "invoice_created",
|
||||
"public_link": "http://mijnfactuurinzien.nl/F2024-0002",
|
||||
"isCredit": false,
|
||||
},
|
||||
]
|
||||
/contracts/{contractId}/cancellationmoments:
|
||||
parameters:
|
||||
- in: header
|
||||
@ -313,19 +264,14 @@ paths:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
All cancellation moments of a term bound contract:
|
||||
summary: All cancellation moments of a term bound contract
|
||||
description: |
|
||||
All cancellation moments of a term bound contract.
|
||||
value:
|
||||
{
|
||||
"cancellationMoment": "termBound",
|
||||
"termDuration": "P1M",
|
||||
"billingDay": 18,
|
||||
"cancellationFrom": "2024-08-10T00:00:00",
|
||||
"cancellationUntil": "2026-08-10T00:00:00",
|
||||
}
|
||||
example:
|
||||
{
|
||||
"cancellationMoment": "termBound",
|
||||
"termDuration": "P1M",
|
||||
"billingDay": 18,
|
||||
"cancellationFrom": "2024-08-10T00:00:00",
|
||||
"cancellationUntil": "2026-08-10T00:00:00"
|
||||
}
|
||||
/contracts/{contractId}/cancellationvalidation:
|
||||
parameters:
|
||||
- in: header
|
||||
@ -354,12 +300,10 @@ paths:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
Validate a cancellation of a given end date:
|
||||
summary: Validate a cancellation of a given end date
|
||||
description: |
|
||||
Validate a cancellation of a given end date.
|
||||
value: { "end": "2024-08-10T00:00:00" }
|
||||
example:
|
||||
{
|
||||
"end": "2024-08-10T00:00:00"
|
||||
}
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
@ -367,32 +311,14 @@ paths:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
Successfully validated cancellation:
|
||||
summary: Successfully validated cancellation
|
||||
description: |
|
||||
Successfully validated a cancellation. The response contains
|
||||
the refund amount and refund methods.
|
||||
value:
|
||||
{
|
||||
"validationResult": true,
|
||||
"validationMessage": "",
|
||||
"end": "2024-08-10T03:59:59",
|
||||
"refundAmount": 2489,
|
||||
"refundMethods": ["creditInvoice", "iDeal"],
|
||||
}
|
||||
Unsuccesful validation:
|
||||
summary: Unsuccesful validation
|
||||
description: |
|
||||
Unsuccesful validation. The response contains the error message.
|
||||
value:
|
||||
{
|
||||
"validationResult": false,
|
||||
"validationMessage": "Cancellation end date not allowed",
|
||||
"end": null,
|
||||
"refundAmount": null,
|
||||
"refundMethods": [],
|
||||
}
|
||||
example:
|
||||
{
|
||||
"validationResult": "true",
|
||||
"validationMessage": "",
|
||||
"end": "2024-08-10T03:59:59",
|
||||
"refundAmount": "2489",
|
||||
"refundMethods": [ "creditInvoice", "iDeal" ]
|
||||
}
|
||||
/contracts/{contractId}/cancellation:
|
||||
parameters:
|
||||
- in: header
|
||||
@ -417,17 +343,15 @@ paths:
|
||||
- SE Contract Cancellation v2
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
Cancellation request for credit invoice:
|
||||
summary: Cancellation request for credit invoice
|
||||
description: |
|
||||
Cancellation request for credit invoice.
|
||||
value:
|
||||
{ "end": "2024-08-10T00:00:00", "refundMethod": "creditInvoice" }
|
||||
example:
|
||||
{
|
||||
"end": "2024-08-10T00:00:00",
|
||||
"refundMethod": "creditInvoice"
|
||||
}
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
@ -435,18 +359,12 @@ paths:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/unavailable"
|
||||
examples:
|
||||
Successfully cancelled contract:
|
||||
summary: Successfully cancelled contract
|
||||
description: |
|
||||
Successfully cancelled a contract. The response contains
|
||||
the refund amount and refund method.
|
||||
value:
|
||||
{
|
||||
"end": "2024-08-10T03:59:59",
|
||||
"refundAmount": 2489,
|
||||
"refundMethod": "creditInvoice",
|
||||
}
|
||||
example:
|
||||
{
|
||||
"end": "2024-08-10T03:59:59",
|
||||
"refundAmount": "2489",
|
||||
"refundMethod": "creditInvoice"
|
||||
}
|
||||
components:
|
||||
securitySchemes:
|
||||
bearerToken:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -45,6 +45,7 @@ paths:
|
||||
directDebitMandate:
|
||||
directDebitMandateTypeId: 1
|
||||
billingInformationId: 1
|
||||
mandateAddressId: 2
|
||||
mandateReference: Dit is een test Reference
|
||||
mandateState: SIGNED
|
||||
updateDirectDebitMandateType:
|
||||
@ -55,6 +56,10 @@ paths:
|
||||
value:
|
||||
directDebitMandate:
|
||||
billingInformationId: 2
|
||||
updateMandateAddressId:
|
||||
value:
|
||||
directDebitMandate:
|
||||
mandateAddressId: 3
|
||||
updateMandateReference:
|
||||
value:
|
||||
directDebitMandate:
|
||||
@ -124,10 +129,17 @@ paths:
|
||||
updateFullBillingInformation:
|
||||
value:
|
||||
billingInformation:
|
||||
issuerCountry: NL
|
||||
iban: '1234567890'
|
||||
bic: ING
|
||||
swift: Swift
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
alias: Alias Test
|
||||
billingAddressId: 2
|
||||
updateIssuerCountry:
|
||||
value:
|
||||
billingInformation:
|
||||
issuerCountry: DE
|
||||
updateIban:
|
||||
value:
|
||||
billingInformation:
|
||||
@ -136,6 +148,10 @@ paths:
|
||||
value:
|
||||
billingInformation:
|
||||
bic: DEUT
|
||||
updateSwift:
|
||||
value:
|
||||
billingInformation:
|
||||
swift: UpdatedSwift
|
||||
updateAscription:
|
||||
value:
|
||||
billingInformation:
|
||||
@ -144,6 +160,10 @@ paths:
|
||||
value:
|
||||
billingInformation:
|
||||
alias: Updated Alias
|
||||
updateBillingAddressId:
|
||||
value:
|
||||
billingInformation:
|
||||
billingAddressId: 3
|
||||
required: true
|
||||
responses:
|
||||
'201':
|
||||
@ -198,16 +218,21 @@ paths:
|
||||
fullFinancialInformation:
|
||||
value:
|
||||
billingInformation:
|
||||
issuerCountry: NL
|
||||
iban: '1234567890'
|
||||
bic: ING
|
||||
swift: Swift
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
alias: Alias Test
|
||||
billingAddressId: 2
|
||||
minimumBillingInformation:
|
||||
value:
|
||||
billingInformation:
|
||||
issuerCountry: NL
|
||||
iban: '1234567890'
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
alias: Alias Test
|
||||
billingAddressId: 2
|
||||
required: true
|
||||
responses:
|
||||
'201':
|
||||
@ -264,12 +289,16 @@ paths:
|
||||
directDebitMandate:
|
||||
directDebitMandateTypeId: 1
|
||||
billingInformationId: 1
|
||||
mandateAddressId: 2
|
||||
created: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
minimumdirectDebitMandate:
|
||||
value:
|
||||
directDebitMandate:
|
||||
directDebitMandateTypeId: 1
|
||||
billingInformationId: 1
|
||||
mandateAddressId: 2
|
||||
created: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
required: true
|
||||
responses:
|
||||
@ -329,32 +358,38 @@ paths:
|
||||
customerNumber: 1000003
|
||||
billingInformation:
|
||||
- billingInformationId: 1
|
||||
issuerCountry: NL
|
||||
iban: '1234567890'
|
||||
bic: ING
|
||||
swift: Swift
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
created: "2024-06-02T15:03:460"
|
||||
alias: Alias Test
|
||||
billingAddressId: 2
|
||||
- billingInformationId: 2
|
||||
issuerCountry: BE
|
||||
iban: '0987654321'
|
||||
bic: null
|
||||
swift: null
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
created: "2024-06-02T15:03:460"
|
||||
alias: Alias Test
|
||||
billingAddressId: 3
|
||||
directDebitMandate:
|
||||
- directDebitMandateId: 1
|
||||
directDebitMandateTypeName: PIN Transaction
|
||||
billingInformationId: 1
|
||||
mandateAddressId: 2
|
||||
created: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
mandateState: SIGNED
|
||||
updateTimestamp: '2024-01-01T00:00:00.000'
|
||||
updateTimestamp: '2024-01-01T00:00:00.00'
|
||||
- directDebitMandateId: 2
|
||||
directDebitMandateTypeName: Paper Contract
|
||||
billingInformationId: 1
|
||||
mandateAddressId: 2
|
||||
created: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
mandateState: CANCELLED
|
||||
updateTimestamp: '2024-01-01T00:00:00.000'
|
||||
updateTimestamp: '2024-01-01T00:00:00.00'
|
||||
missingBillingInformation:
|
||||
value:
|
||||
customerNumber: 1000003
|
||||
@ -363,31 +398,35 @@ paths:
|
||||
- directDebitMandateId: 1
|
||||
directDebitMandateTypeName: PIN transaction
|
||||
billingInformationId: 1
|
||||
mandateAddressId: 2
|
||||
created: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
updateTimestamp: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
- directDebitMandateId: 2
|
||||
directDebitMandateTypeName: Paper Contract
|
||||
billingInformationId: 1
|
||||
mandateAddressId: 2
|
||||
created: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
updateTimestamp: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
missingDebitMandateInformation:
|
||||
value:
|
||||
customerNumber: 1000003
|
||||
billingInformation:
|
||||
- billingInformationId: 1
|
||||
issuerCountry: NL
|
||||
iban: '1234567890'
|
||||
bic: ING
|
||||
swift: Swift
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
created: "2024-06-02T15:03:460"
|
||||
alias: Alias Test
|
||||
billingAddressId: 2
|
||||
- billingInformationId: 2
|
||||
issuerCountry: BE
|
||||
iban: '0987654321'
|
||||
bic: null
|
||||
bic: null
|
||||
swift: null
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
created: "2024-06-02T15:03:460"
|
||||
alias: Alias Test
|
||||
billingAddressId: 3
|
||||
directDebitMandate: []
|
||||
minimumFinancialInformation:
|
||||
value:
|
||||
@ -461,16 +500,21 @@ paths:
|
||||
directDebitMandate:
|
||||
directDebitMandateTypeId: 1
|
||||
billingInformationId: 1
|
||||
mandateAddressId: 2
|
||||
mandateReference: Dit is een test Reference
|
||||
mandateState: SIGNED
|
||||
updateDirectDebitMandateType:
|
||||
value:
|
||||
directDebitMandate:
|
||||
directDebitMandateTypeId: 1
|
||||
directDebitMandateTypeId: 1
|
||||
updateBillingInformationId:
|
||||
value:
|
||||
directDebitMandate:
|
||||
billingInformationId: 2
|
||||
updateMandateAddressId:
|
||||
value:
|
||||
directDebitMandate:
|
||||
mandateAddressId: 3
|
||||
updateMandateReference:
|
||||
value:
|
||||
directDebitMandate:
|
||||
@ -547,10 +591,17 @@ paths:
|
||||
updateFullBillingInformation:
|
||||
value:
|
||||
billingInformation:
|
||||
issuerCountry: NL
|
||||
iban: '1234567890'
|
||||
bic: ING
|
||||
swift: Swift
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
alias: Alias Test
|
||||
billingAddressId: 2
|
||||
updateIssuerCountry:
|
||||
value:
|
||||
billingInformation:
|
||||
issuerCountry: DE
|
||||
updateIban:
|
||||
value:
|
||||
billingInformation:
|
||||
@ -559,6 +610,10 @@ paths:
|
||||
value:
|
||||
billingInformation:
|
||||
bic: DEUT
|
||||
updateSwift:
|
||||
value:
|
||||
billingInformation:
|
||||
swift: UpdatedSwift
|
||||
updateAscription:
|
||||
value:
|
||||
billingInformation:
|
||||
@ -632,14 +687,17 @@ paths:
|
||||
fullFinancialInformation:
|
||||
value:
|
||||
billingInformation:
|
||||
issuerCountry: NL
|
||||
iban: '1234567890'
|
||||
bic: ING
|
||||
swift: Swift
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
billingAddressId: 2
|
||||
minimumBillingInformation:
|
||||
value:
|
||||
billingInformation:
|
||||
issuerCountry: NL
|
||||
iban: '1234567890'
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
@ -707,13 +765,17 @@ paths:
|
||||
directDebitMandate:
|
||||
directDebitMandateTypeId: 1
|
||||
billingInformationId: 1
|
||||
mandateReference: Dit is een test Reference
|
||||
mandateAddressId: 2
|
||||
created: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
minimumdirectDebitMandate:
|
||||
value:
|
||||
directDebitMandate:
|
||||
directDebitMandateTypeId: 1
|
||||
billingInformationId: 1
|
||||
mandateReference: Dit is een test Reference
|
||||
mandateAddressId: 2
|
||||
created: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
required: true
|
||||
responses:
|
||||
'201':
|
||||
@ -779,34 +841,38 @@ paths:
|
||||
customerNumber: 1000003
|
||||
billingInformation:
|
||||
- billingInformationId: 1
|
||||
issuerCountry: NL
|
||||
iban: '1234567890'
|
||||
bic: ING
|
||||
swift: Swift
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
billingAddressId: 2
|
||||
created: '2024-01-01T00:00:00.000'
|
||||
updateTimestamp: '2024-01-01T00:00:00.00'
|
||||
- billingInformationId: 2
|
||||
issuerCountry: BE
|
||||
iban: '0987654321'
|
||||
bic: null
|
||||
swift: null
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
billingAddressId: 3
|
||||
created: '2024-01-01T00:00:00.000'
|
||||
updateTimestamp: '2024-01-01T00:00:00.00'
|
||||
directDebitMandate:
|
||||
- directDebitMandateId: 1
|
||||
directDebitMandateTypeName: PIN transaction
|
||||
billingInformationId: 1
|
||||
mandateAddressId: 2
|
||||
created: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
mandateState: SIGNED
|
||||
updateTimestamp: '2024-01-01T00:00:00.000'
|
||||
- directDebitMandateId: 2
|
||||
directDebitMandateTypeName: Paper Contract
|
||||
billingInformationId: 1
|
||||
mandateAddressId: 2
|
||||
created: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
mandateState: CANCELLED
|
||||
updateTimestamp: '2024-01-01T00:00:00.000'
|
||||
missingBillingInformation:
|
||||
value:
|
||||
customerNumber: 1000003
|
||||
@ -815,31 +881,35 @@ paths:
|
||||
- directDebitMandateId: 1
|
||||
directDebitMandateTypeName: PIN transaction
|
||||
billingInformationId: 1
|
||||
mandateAddressId: 2
|
||||
created: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
updateTimestamp: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
- directDebitMandateId: 2
|
||||
directDebitMandateTypeName: Paper Contract
|
||||
billingInformationId: 1
|
||||
mandateAddressId: 2
|
||||
created: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
updateTimestamp: '1900-01-01T00:00:00.000'
|
||||
mandateReference: Dit is een test Reference
|
||||
missingDebitMandateInformation:
|
||||
value:
|
||||
customerNumber: 1000003
|
||||
billingInformation:
|
||||
- billingInformationId: 1
|
||||
issuerCountry: NL
|
||||
iban: '1234567890'
|
||||
bic: ING
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
created: "2024-06-02T15:03:460"
|
||||
- billingInformationId: 2
|
||||
iban: '0987654321'
|
||||
bic: null
|
||||
swift: Swift
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
created: "2024-06-02T15:03:460"
|
||||
billingAddressId: 2
|
||||
- billingInformationId: 2
|
||||
issuerCountry: BE
|
||||
iban: '0987654321'
|
||||
bic: null
|
||||
swift: null
|
||||
ascription: Dit is een Test
|
||||
alias: Alias Test
|
||||
billingAddressId: 3
|
||||
directDebitMandate: []
|
||||
minimumFinancialInformation:
|
||||
value:
|
||||
@ -1042,7 +1112,8 @@ paths:
|
||||
postalCode: 0000AA
|
||||
city: Den Haag
|
||||
country: NL
|
||||
addressType: Billing
|
||||
isPreferred: true
|
||||
addressType: Office
|
||||
- addressId: 2
|
||||
street: mystreet 33
|
||||
houseNumber: 1
|
||||
@ -1050,7 +1121,8 @@ paths:
|
||||
postalCode: 4455CA
|
||||
city: Den BOSCH
|
||||
country: NL
|
||||
addressType: Shipping
|
||||
isPreferred: true
|
||||
addressType: Office
|
||||
phone:
|
||||
- phoneId: 1
|
||||
number: '3112345678'
|
||||
@ -1127,7 +1199,8 @@ paths:
|
||||
postalCode: 0000AA
|
||||
city: Den Haag
|
||||
country: NL
|
||||
addressType: Billing
|
||||
isPreferred: true
|
||||
addressType: Office
|
||||
- addressId: 2
|
||||
street: mystreet 33
|
||||
houseNumber: 1
|
||||
@ -1135,7 +1208,8 @@ paths:
|
||||
postalCode: 4455CA
|
||||
city: Den BOSCH
|
||||
country: NL
|
||||
addressType: Shipping
|
||||
isPreferred: true
|
||||
addressType: Office
|
||||
phone:
|
||||
- phoneId: 1
|
||||
number: '3112345678'
|
||||
@ -1463,7 +1537,8 @@ paths:
|
||||
postalCode: 0000AA
|
||||
city: Den Haag
|
||||
country: NL
|
||||
addressType: Billing
|
||||
isPreferred: true
|
||||
addressType: Office
|
||||
- addressId: 2
|
||||
street: mystreet 33
|
||||
houseNumber: 1
|
||||
@ -1471,7 +1546,8 @@ paths:
|
||||
postalCode: 4455CA
|
||||
city: Den BOSCH
|
||||
country: NL
|
||||
addressType: Shipping
|
||||
isPreferred: true
|
||||
addressType: Office
|
||||
phone:
|
||||
- phoneId: 1
|
||||
number: '3112345678'
|
||||
@ -1677,6 +1753,7 @@ paths:
|
||||
postalCode: 2500AA
|
||||
city: Den Haag
|
||||
country: NL
|
||||
isPreferred: true
|
||||
addressTypeId: 1
|
||||
- street: Beeklaan
|
||||
houseNumber: 30
|
||||
@ -1684,6 +1761,7 @@ paths:
|
||||
postalCode: 2500AA
|
||||
city: Den Haag
|
||||
country: NL
|
||||
isPreferred: false
|
||||
addressTypeId: 2
|
||||
phones:
|
||||
- number: '6123456789'
|
||||
@ -2526,6 +2604,7 @@ paths:
|
||||
postalCode: 2500AA
|
||||
city: Den Haag
|
||||
country: NL
|
||||
isPreferred: true
|
||||
addressTypeId: 1
|
||||
addMinimumAddress:
|
||||
value:
|
||||
@ -2535,6 +2614,7 @@ paths:
|
||||
postalCode: 2500AA
|
||||
city: Den Haag
|
||||
country: NL
|
||||
isPreferred: true
|
||||
addressTypeId: 1
|
||||
responses:
|
||||
'201':
|
||||
@ -2746,6 +2826,7 @@ paths:
|
||||
city: Den Haag
|
||||
country: NL
|
||||
addressTypeId: 2
|
||||
isPreferred: true
|
||||
updateStreet:
|
||||
value:
|
||||
address:
|
||||
@ -2773,7 +2854,11 @@ paths:
|
||||
updateAddressTypeId:
|
||||
value:
|
||||
address:
|
||||
addressTypeId: 1
|
||||
addressTypeId: 3
|
||||
updateIsPreferred:
|
||||
value:
|
||||
address:
|
||||
isPreferred: false
|
||||
responses:
|
||||
'202':
|
||||
description: Successful updated the customer profile
|
||||
@ -3026,7 +3111,8 @@ paths:
|
||||
postalCode: 0000AA
|
||||
city: Den Haag
|
||||
country: NL
|
||||
addressType: Billing
|
||||
isPreferred: true
|
||||
addressType: Office
|
||||
- addressId: 2
|
||||
street: mystreet 33
|
||||
houseNumber: 1
|
||||
@ -3034,7 +3120,8 @@ paths:
|
||||
postalCode: 4455CA
|
||||
city: Den BOSCH
|
||||
country: NL
|
||||
addressType: Shipping
|
||||
isPreferred: true
|
||||
addressType: Office
|
||||
phone:
|
||||
- phoneId: 1
|
||||
number: '3112345678'
|
||||
@ -3241,6 +3328,7 @@ paths:
|
||||
postalCode: 2500AA
|
||||
city: Den Haag
|
||||
country: NL
|
||||
isPreferred: true
|
||||
addressTypeId: 1
|
||||
- street: Beeklaan
|
||||
houseNumber: 30
|
||||
@ -3248,6 +3336,7 @@ paths:
|
||||
postalCode: 2500AA
|
||||
city: Den Haag
|
||||
country: NL
|
||||
isPreferred: false
|
||||
addressTypeId: 2
|
||||
phones:
|
||||
- number: '6123456789'
|
||||
@ -4025,6 +4114,7 @@ paths:
|
||||
postalCode: 2500AA
|
||||
city: Den Haag
|
||||
country: NL
|
||||
isPreferred: true
|
||||
addressTypeId: 1
|
||||
addMinimumAddress:
|
||||
value:
|
||||
@ -4034,6 +4124,7 @@ paths:
|
||||
postalCode: 2500AA
|
||||
city: Den Haag
|
||||
country: NL
|
||||
isPreferred: true
|
||||
addressTypeId: 1
|
||||
responses:
|
||||
'201':
|
||||
@ -4259,6 +4350,7 @@ paths:
|
||||
city: Den Haag
|
||||
country: NL
|
||||
addressTypeId: 2
|
||||
isPreferred: true
|
||||
updateStreet:
|
||||
value:
|
||||
address:
|
||||
@ -4286,7 +4378,7 @@ paths:
|
||||
updateAddressTypeId:
|
||||
value:
|
||||
address:
|
||||
addressTypeId: 1
|
||||
addressTypeId: 3
|
||||
updateIsPreferred:
|
||||
value:
|
||||
address:
|
||||
@ -4604,6 +4696,8 @@ components:
|
||||
type: string
|
||||
country:
|
||||
type: string
|
||||
isPreferred:
|
||||
type: boolean
|
||||
addressType:
|
||||
type: string
|
||||
getPhone:
|
||||
@ -4667,6 +4761,7 @@ components:
|
||||
- billingInformationId
|
||||
- created
|
||||
- directDebitMandateTypeName
|
||||
- mandateAddressId
|
||||
- mandateReference
|
||||
type: object
|
||||
properties:
|
||||
@ -4674,6 +4769,10 @@ components:
|
||||
type: string
|
||||
billingInformationId:
|
||||
type: integer
|
||||
mandateAddressId:
|
||||
type: integer
|
||||
created:
|
||||
type: string
|
||||
mandateReference:
|
||||
type: string
|
||||
directDebitMandatePost:
|
||||
@ -4688,6 +4787,8 @@ components:
|
||||
type: string
|
||||
billingInformationId:
|
||||
type: integer
|
||||
mandateAddressId:
|
||||
type: integer
|
||||
mandateReference:
|
||||
type: string
|
||||
mandateState:
|
||||
@ -4710,6 +4811,8 @@ components:
|
||||
type: integer
|
||||
billingInformationId:
|
||||
type: integer
|
||||
mandateAddressId:
|
||||
type: integer
|
||||
created:
|
||||
type: string
|
||||
mandateReference:
|
||||
@ -4723,41 +4826,52 @@ components:
|
||||
- alias
|
||||
- ascription
|
||||
- bic
|
||||
- billingAddressId
|
||||
- billingInformationId
|
||||
- iban
|
||||
- created
|
||||
- issuerCountry
|
||||
- swift
|
||||
type: object
|
||||
properties:
|
||||
billingInformationId:
|
||||
type: integer
|
||||
issuerCountry:
|
||||
type: string
|
||||
iban:
|
||||
type: string
|
||||
bic:
|
||||
type: string
|
||||
swift:
|
||||
type: string
|
||||
ascription:
|
||||
type: string
|
||||
alias:
|
||||
type: string
|
||||
created:
|
||||
type: string
|
||||
billingAddressId:
|
||||
type: integer
|
||||
billingInformationPostEntity:
|
||||
required:
|
||||
- alias
|
||||
- ascription
|
||||
- billingAddressId
|
||||
- iban
|
||||
- issuerCountry
|
||||
type: object
|
||||
properties:
|
||||
issuerCountry:
|
||||
type: string
|
||||
iban:
|
||||
type: string
|
||||
bic:
|
||||
type: string
|
||||
swift:
|
||||
type: string
|
||||
ascription:
|
||||
type: string
|
||||
alias:
|
||||
type: string
|
||||
created:
|
||||
type: string
|
||||
billingAddressId:
|
||||
type: integer
|
||||
billingInformationPost:
|
||||
type: object
|
||||
properties:
|
||||
@ -4766,14 +4880,20 @@ components:
|
||||
billingInformationPatchEntity:
|
||||
type: object
|
||||
properties:
|
||||
issuerCountry:
|
||||
type: string
|
||||
iban:
|
||||
type: string
|
||||
bic:
|
||||
type: string
|
||||
swift:
|
||||
type: string
|
||||
ascription:
|
||||
type: string
|
||||
alias:
|
||||
type: string
|
||||
billingAddressId:
|
||||
type: integer
|
||||
billingInformationPatch:
|
||||
type: object
|
||||
properties:
|
||||
@ -4975,6 +5095,8 @@ components:
|
||||
type: string
|
||||
country:
|
||||
type: string
|
||||
isPreferred:
|
||||
type: boolean
|
||||
addressTypeId:
|
||||
type: integer
|
||||
addressPatchEntity:
|
||||
@ -4994,6 +5116,8 @@ components:
|
||||
type: string
|
||||
addressTypeId:
|
||||
type: integer
|
||||
isPreferred:
|
||||
type: boolean
|
||||
phonePostEntity:
|
||||
required:
|
||||
- countryCode
|
||||
|
||||
@ -294,6 +294,164 @@ paths:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
x-throttling-tier: Unlimited
|
||||
post:
|
||||
tags:
|
||||
- ABTCustomerReference
|
||||
summary: Create a address type
|
||||
description: Create a address type with a specific value
|
||||
parameters: []
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/addressType'
|
||||
required: true
|
||||
responses:
|
||||
'201':
|
||||
description: Successful created a new address type
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
example: 1
|
||||
'400':
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/400Response'
|
||||
'401':
|
||||
description: Unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/401Response'
|
||||
'404':
|
||||
description: Not Found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/404Response'
|
||||
'500':
|
||||
description: Internal Server Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/500Response'
|
||||
security:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
x-throttling-tier: Unlimited
|
||||
/addresstype/{addressTypeId}:
|
||||
put:
|
||||
tags:
|
||||
- ABTCustomerReference
|
||||
summary: Update a address type
|
||||
description: Update an existing address type with a specific value
|
||||
parameters:
|
||||
- name: addressTypeId
|
||||
in: path
|
||||
required: true
|
||||
style: simple
|
||||
explode: false
|
||||
schema:
|
||||
type: integer
|
||||
format: integer
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/addressType'
|
||||
required: true
|
||||
responses:
|
||||
'202':
|
||||
description: Successful updated an existing a address type
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
type: integer
|
||||
example: 1
|
||||
'400':
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/400Response'
|
||||
'401':
|
||||
description: Unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/401Response'
|
||||
'404':
|
||||
description: Not Found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/404Response'
|
||||
'500':
|
||||
description: Internal Server Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/500Response'
|
||||
security:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
x-throttling-tier: Unlimited
|
||||
delete:
|
||||
tags:
|
||||
- ABTCustomerReference
|
||||
summary: Remove a address type
|
||||
description: Remove an existing address type with a specific value
|
||||
parameters:
|
||||
- name: addressTypeId
|
||||
in: path
|
||||
required: true
|
||||
style: simple
|
||||
explode: false
|
||||
schema:
|
||||
type: integer
|
||||
format: integer
|
||||
responses:
|
||||
'202':
|
||||
description: Successful removed a address type
|
||||
'400':
|
||||
description: Bad Request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/400Response'
|
||||
'401':
|
||||
description: Unauthorized
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/401Response'
|
||||
'404':
|
||||
description: Not Found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
oneOf:
|
||||
- $ref: '#/components/schemas/404ResponseId'
|
||||
- $ref: '#/components/schemas/404Response'
|
||||
'500':
|
||||
description: Internal Server Error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/500Response'
|
||||
security:
|
||||
- default: []
|
||||
x-auth-type: Application & Application User
|
||||
x-throttling-tier: Unlimited
|
||||
/customerstatus:
|
||||
get:
|
||||
tags:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,206 +0,0 @@
|
||||
openapi: 3.0.3
|
||||
info:
|
||||
title: Service Desk Card Reader API
|
||||
version: 0.9.0
|
||||
description: |-
|
||||
This API enables that external systems (such as SOS) can operate on information from service desk card readers.
|
||||
|
||||
### 0.9.0
|
||||
- First draft version
|
||||
servers:
|
||||
- url: /v1
|
||||
paths:
|
||||
/card-reader/token:
|
||||
post:
|
||||
tags:
|
||||
- CardReader
|
||||
summary: Register a token from the card
|
||||
operationId: registerToken
|
||||
description: |
|
||||
Register a token from the card to the external system.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/TokenRegisterRequest"
|
||||
responses:
|
||||
"202":
|
||||
description: Accepted
|
||||
"400":
|
||||
description: |-
|
||||
Bad Request. Occurs when the readerId is unknown to the external system. A call to `/card-reader/registrations`,
|
||||
followed by a `/card-reader/register` is needed in order to restore reader registrations.
|
||||
/card-reader/register:
|
||||
post:
|
||||
tags:
|
||||
- CardReader
|
||||
summary: Register a reader that is connected to the Card Reader Interface
|
||||
operationId: registerReader
|
||||
description: |
|
||||
Register a reader to the external system to receive a newly generated readerID.
|
||||
|
||||
**N.B.**: After the last reader has been registered, an initial `/card-reader/registrations` call must be sent.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ReaderRegisterRequest"
|
||||
responses:
|
||||
"200":
|
||||
description: Registration was successful
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ReaderRegisterResponse"
|
||||
"400":
|
||||
description: Bad Request
|
||||
|
||||
/card-reader/unregister:
|
||||
post:
|
||||
tags:
|
||||
- CardReader
|
||||
summary: Unregister a reader from the external system
|
||||
operationId: unregisterReader
|
||||
description: |
|
||||
Unregister a reader from the external system.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ReaderUnregisterRequest"
|
||||
responses:
|
||||
"204":
|
||||
description: Unregistration was successful
|
||||
"400":
|
||||
description: Bad Request
|
||||
/card-reader/registrations:
|
||||
post:
|
||||
tags:
|
||||
- CardReader
|
||||
summary: Send a list of readers that should currently be registered
|
||||
operationId: sendReaderRegistrations
|
||||
description: |
|
||||
Send a list of readers of which the Card Reader Interface believes are registered. This must be done periodically.
|
||||
The period is determined by the timeout duration in the response.
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/RegistrationsRequest"
|
||||
responses:
|
||||
"200":
|
||||
description: Reader registrations successfully received
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/RegistrationsResponse"
|
||||
|
||||
components:
|
||||
schemas:
|
||||
TokenRegisterRequest:
|
||||
description: Request containing token information read using the card reader
|
||||
type: object
|
||||
properties:
|
||||
readerId:
|
||||
$ref: "#/components/schemas/ReaderId"
|
||||
xBot:
|
||||
type: string
|
||||
format: uuid
|
||||
description: The unique identifier of the token.
|
||||
required:
|
||||
- readerId
|
||||
- xBot
|
||||
|
||||
ReaderRegisterRequest:
|
||||
description: Request containing card reader information for one or more readers to be be registered
|
||||
type: object
|
||||
properties:
|
||||
readerIdQuantity:
|
||||
type: integer
|
||||
default: 1
|
||||
minimum: 1
|
||||
cardReaderInterfaceId:
|
||||
$ref: "#/components/schemas/cardReaderInterfaceId"
|
||||
locationName:
|
||||
$ref: "#/components/schemas/LocationName"
|
||||
required:
|
||||
- cardReaderInterfaceId
|
||||
- locationName
|
||||
- readerIdQuantity
|
||||
ReaderRegisterResponse:
|
||||
description: Response containing one or more readerIds for the registered reader(s)
|
||||
type: object
|
||||
properties:
|
||||
readerIds:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/ReaderId"
|
||||
required:
|
||||
- readerIds
|
||||
|
||||
ReaderUnregisterRequest:
|
||||
description: Request containing the readerId to unregister
|
||||
type: object
|
||||
properties:
|
||||
cardReaderInterfaceId:
|
||||
$ref: "#/components/schemas/cardReaderInterfaceId"
|
||||
locationName:
|
||||
$ref: "#/components/schemas/LocationName"
|
||||
readerId:
|
||||
$ref: "#/components/schemas/ReaderId"
|
||||
required:
|
||||
- readerId
|
||||
|
||||
RegistrationsRequest:
|
||||
description: Request containing a list of readerId of which the Card Reader Interface believes are registered.
|
||||
type: object
|
||||
properties:
|
||||
cardReaderInterfaceId:
|
||||
$ref: "#/components/schemas/cardReaderInterfaceId"
|
||||
locationName:
|
||||
$ref: "#/components/schemas/LocationName"
|
||||
readerIds:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/ReaderId"
|
||||
required:
|
||||
- cardReaderInterfaceId
|
||||
- locationName
|
||||
- readerIds
|
||||
RegistrationsResponse:
|
||||
description: Response with actionable information for the Card Reader Interface.
|
||||
type: object
|
||||
properties:
|
||||
nextCallTimeout:
|
||||
|
||||
type: integer
|
||||
description: |
|
||||
Timeout duration in seconds BEFORE which the next `/card-reader/registrations` call should happen.
|
||||
Failure to send a call before this timeout will result in automatic unregistration of all readers associated to this Card Read Interface.
|
||||
|
||||
The external systems must maintain a grace period on reception of the next call.
|
||||
The Card Read Interface must start sending the next call on or before the timeout (grace period not needed).
|
||||
readerIds:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/ReaderId"
|
||||
description: |
|
||||
A list of readerIds that are registered to the external system. This mean all readerIds that readers with
|
||||
readerIds missing from this list must be reregistered using `/card-reader/register`.
|
||||
required:
|
||||
- nextCallTimeout
|
||||
- readerIds
|
||||
|
||||
cardReaderInterfaceId:
|
||||
type: string
|
||||
description: Each Card Reader Interface has a unique cardReaderInterfaceId. Identifier for the Card Reader Interface to which one or more readers are connected.
|
||||
LocationName:
|
||||
type: string
|
||||
description: Name of the location of the reader. A location can have one ore more Card Reader Interfaces (cardReaderInterfaceIds)
|
||||
ReaderId:
|
||||
type: string
|
||||
description: Unique identifier generated by the external system. Should be displayed on the screen of the reader.
|
||||
@ -1,180 +0,0 @@
|
||||
openapi: 3.0.1
|
||||
info:
|
||||
title: ABT Service Engine Order APIs
|
||||
version: "1.0"
|
||||
description: Order APIs available in the Service Engine for order validation and fulfillment.
|
||||
servers:
|
||||
- url: https://api.integratielaag.nl/abt/abtserviceengine/1.0
|
||||
paths:
|
||||
/orders/validation/gboAgeProfile:
|
||||
get:
|
||||
tags:
|
||||
- ServiceEngine Order validation
|
||||
summary: Get GBO age profile that is valid for the given input
|
||||
description: |-
|
||||
Only one age profile can be valid at any one time, so only one profile is returned.
|
||||
parameters:
|
||||
- name: productStartDate
|
||||
in: query
|
||||
required: true
|
||||
description: Start date of product validity
|
||||
schema:
|
||||
type: string
|
||||
format: date
|
||||
example: 2025-03-20
|
||||
- name: birthDate
|
||||
in: query
|
||||
required: false
|
||||
description: Birthdate of the OVpay-token holder
|
||||
schema:
|
||||
type: string
|
||||
format: date
|
||||
example: 2000-01-01
|
||||
- name: ovPayTokenId
|
||||
in: query
|
||||
required: false
|
||||
description: ovPayTokenId of the customer's selected token
|
||||
schema:
|
||||
type: integer
|
||||
example: 1
|
||||
- name: customerTokenId
|
||||
in: query
|
||||
required: false
|
||||
description: customerTokenId of the customer's selected token
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
example: "4a2d2c9c-1e5d-4d8a-9c0a-6c0a6c0a6c0a"
|
||||
- name: serviceReferenceId
|
||||
in: query
|
||||
required: false
|
||||
description: serviceReferenceId of the customer's selected token
|
||||
schema:
|
||||
type: string
|
||||
example: "NLOV1234567ABCDEFG"
|
||||
- name: amount
|
||||
in: query
|
||||
required: false
|
||||
description: amount belonging to the serviceReferenceId
|
||||
schema:
|
||||
type: integer
|
||||
example: 100
|
||||
- name: ovpasNumber
|
||||
in: query
|
||||
required: false
|
||||
description: OVpas number of the customer's selected token
|
||||
schema:
|
||||
type: string
|
||||
example: "63AW974"
|
||||
- name: verificationCode
|
||||
in: query
|
||||
required: false
|
||||
description: verification code belonging to the OVpas number
|
||||
schema:
|
||||
type: string
|
||||
example: 1A3C7D
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/GboAgeProfileResponse"
|
||||
|
||||
"400":
|
||||
description: Bad request
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/rfc9457Response"
|
||||
examples:
|
||||
Missing parameter(s):
|
||||
summary: Missing parameter(s)
|
||||
value:
|
||||
{
|
||||
"type": "https://www.htm.nl/api/v1/400Error",
|
||||
"title": "Missing parameter(s)",
|
||||
"detail": "At least one of the following parameters must be present: birthDate, ovPayTokenId, customerTokenId, (serviceReferenceId and amount), (ovpasNumber and verificationCode)",
|
||||
"instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c",
|
||||
"apiErrorCode": "htm.api.err.400.2",
|
||||
}
|
||||
Invalid date format:
|
||||
summary: Invalid date format
|
||||
value:
|
||||
{
|
||||
"type": "https://www.htm.nl/api/v1/400Error",
|
||||
"title": "Invalid input",
|
||||
"detail": "The given birthDate is not a valid Date format",
|
||||
"instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c",
|
||||
"apiErrorCode": "htm.api.err.400.3",
|
||||
}
|
||||
"404":
|
||||
description: Not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/rfc9457Response"
|
||||
examples:
|
||||
No birthdate present in PAD of OVpay token:
|
||||
summary: No birthdate present in PAD of OVpay token
|
||||
value:
|
||||
{
|
||||
"type": "https://www.htm.nl/api/v1/404Error",
|
||||
"title": "Missing birthdate in PAD",
|
||||
"detail": "There is no birthdate present in the PAD of the OVpay token, or there is no PAD present at all",
|
||||
"instance": "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c",
|
||||
"apiErrorCode": "htm.api.err.404.1",
|
||||
}
|
||||
components:
|
||||
schemas:
|
||||
GboAgeProfileResponse:
|
||||
type: object
|
||||
required:
|
||||
- gboAgeProfileId
|
||||
- name
|
||||
- ageFromInclusive
|
||||
- ageToInclusive
|
||||
properties:
|
||||
gboAgeProfileId:
|
||||
type: integer
|
||||
example: 1
|
||||
name:
|
||||
type: string
|
||||
example: Kind (4 t/m 11 jaar)
|
||||
ageFromInclusive:
|
||||
type: integer
|
||||
example: 4
|
||||
ageToInclusive:
|
||||
type: integer
|
||||
example: 11
|
||||
rfc9457Response:
|
||||
type: object
|
||||
properties:
|
||||
type:
|
||||
type: string
|
||||
format: url
|
||||
example: "https://www.htm.nl/api/v1/rfc9457Error"
|
||||
title:
|
||||
type: string
|
||||
description: "Short summary of the error."
|
||||
example: "The request is not valid."
|
||||
detail:
|
||||
type: string
|
||||
description: "More detailed descriptionof the error."
|
||||
example: "Some required parameters are missing."
|
||||
instance:
|
||||
type: string
|
||||
description: "Unique identifier to correlate this specific error with logging in other applications."
|
||||
example: "urn:uuid:13c8416f-7632-4c8b-8a16-2132197be60c"
|
||||
additionalProperty1:
|
||||
type: string
|
||||
description: "Example of an additional property value to be used for error reporting."
|
||||
example: "additionalValue1"
|
||||
additionalProperty2:
|
||||
type: array
|
||||
description: "Example of an additional property array to be used for error reporting."
|
||||
items:
|
||||
type: string
|
||||
example:
|
||||
- "additionalValue2-1"
|
||||
- "additionalValue2-2"
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -52,13 +52,6 @@ paths:
|
||||
example: 2024-10-04T12:34:56.000
|
||||
required: false
|
||||
description: The purchased product should be last updated after this timestamp.
|
||||
- in: query
|
||||
name: resourceNameId
|
||||
schema:
|
||||
type: integer
|
||||
example: 2
|
||||
required: false
|
||||
description: The id of the resource.
|
||||
- in: query
|
||||
name: resourceName
|
||||
schema:
|
||||
|
||||
@ -1,159 +0,0 @@
|
||||
openapi: "3.0.3"
|
||||
info:
|
||||
title: ABT Service CRUD APIs
|
||||
version: "1.0"
|
||||
description: CRUD APIs for ABT Service processes.
|
||||
servers:
|
||||
- url: https://api.integratielaag.nl/v1/service
|
||||
paths:
|
||||
/tokenregisterrequests:
|
||||
get:
|
||||
summary: Get all token register requests.
|
||||
description: Get all token register requests.
|
||||
tags:
|
||||
- NFC Reader
|
||||
parameters:
|
||||
- in: query
|
||||
name: readerId
|
||||
schema:
|
||||
type: string
|
||||
example: b14b0320-2b72-48bb-990b-b97a2d67f9df
|
||||
explode: false
|
||||
required: false
|
||||
description: Filter on possible NFC reader ids.
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/TokenRegisterRequestsGetResponse"
|
||||
examples:
|
||||
Single TokenRegisterRequest:
|
||||
summary: Single TokenRegisterRequest
|
||||
value:
|
||||
{
|
||||
"tokenRegisterRequests":
|
||||
[
|
||||
{
|
||||
"readerId": "b14b0320-2b72-48bb-990b-b97a2d67f9df",
|
||||
"xBot": "4bfaede2-a6c9-45dd-8a80-1f83a075a115",
|
||||
"updated": "2025-07-02T15:01:00.000+00:00",
|
||||
},
|
||||
],
|
||||
}
|
||||
Multiple TokenRegisterRequests:
|
||||
summary: Multiple TokenRegisterRequests
|
||||
value:
|
||||
{
|
||||
"tokenRegisterRequests":
|
||||
[
|
||||
{
|
||||
"readerId": "b14b0320-2b72-48bb-990b-b97a2d67f9df",
|
||||
"xBot": "4bfaede2-a6c9-45dd-8a80-1f83a075a115",
|
||||
"updated": "22025-07-02T15:01:00.000+00:00",
|
||||
},
|
||||
{
|
||||
"readerId": "b4d8e43c-be21-472c-955b-a0c7c11b4bfb",
|
||||
"xBot": "625bc66b-a5de-42fc-ba9e-fb02ada4a4ee",
|
||||
"updated": "2025-07-02T13:37:07.000+00:00",
|
||||
},
|
||||
],
|
||||
}
|
||||
/tokenregisterrequests/{readerId}:
|
||||
parameters:
|
||||
- in: path
|
||||
name: readerId
|
||||
required: true
|
||||
description: The NFC reader id.
|
||||
schema:
|
||||
type: string
|
||||
example: b14b0320-2b72-48bb-990b-b97a2d67f9df
|
||||
put:
|
||||
summary: Insert or update token register request.
|
||||
description: Insert or update token register request.
|
||||
tags:
|
||||
- NFC Reader
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/TokenRegisterRequestPutRequest"
|
||||
example: { "xBot": "4bfaede2-a6c9-45dd-8a80-1f83a075a115" }
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/TokenRegisterRequestPutResponse"
|
||||
example:
|
||||
{
|
||||
"readerId": "b14b0320-2b72-48bb-990b-b97a2d67f9df",
|
||||
"xBot": "4bfaede2-a6c9-45dd-8a80-1f83a075a115",
|
||||
"updated": "2025-07-02T15:01:00.000+00:00",
|
||||
}
|
||||
"201":
|
||||
description: Created
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/TokenRegisterRequestPutResponse"
|
||||
example:
|
||||
{
|
||||
"readerId": "b14b0320-2b72-48bb-990b-b97a2d67f9df",
|
||||
"xBot": "4bfaede2-a6c9-45dd-8a80-1f83a075a115",
|
||||
"updated": "2025-07-02T15:01:00.000+00:00",
|
||||
}
|
||||
components:
|
||||
securitySchemes:
|
||||
bearerToken:
|
||||
type: http
|
||||
scheme: bearer
|
||||
bearerFormat: JWT
|
||||
schemas:
|
||||
TokenRegisterRequestsGetResponse:
|
||||
type: object
|
||||
properties:
|
||||
tokenRegisterRequests:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/TokenRegisterRequest"
|
||||
TokenRegisterRequestPutRequest:
|
||||
type: object
|
||||
properties:
|
||||
xBot:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 4bfaede2-a6c9-45dd-8a80-1f83a075a115
|
||||
nullable: false
|
||||
description: The xBOT id.
|
||||
required:
|
||||
- xBot
|
||||
TokenRegisterRequestPutResponse:
|
||||
$ref: "#/components/schemas/TokenRegisterRequest"
|
||||
TokenRegisterRequest:
|
||||
type: object
|
||||
properties:
|
||||
readerId:
|
||||
type: string
|
||||
example: b14b0320-2b72-48bb-990b-b97a2d67f9df
|
||||
nullable: false
|
||||
description: The NFC reader id.
|
||||
xBot:
|
||||
type: string
|
||||
format: uuid
|
||||
example: 4bfaede2-a6c9-45dd-8a80-1f83a075a115
|
||||
nullable: false
|
||||
description: The xBOT id.
|
||||
updated:
|
||||
type: string
|
||||
format: date-time
|
||||
example: "2025-07-02T15:01:00+00:00"
|
||||
nullable: false
|
||||
description: The date and time when the token register request was updated.
|
||||
required:
|
||||
- readerId
|
||||
- xBot
|
||||
- updated
|
||||
@ -1,65 +0,0 @@
|
||||
<soapenv:Envelope
|
||||
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
|
||||
xmlns:web="http://www.coda.com/efinance/schemas/inputext/input-14.0/webservice"
|
||||
xmlns:tran="http://www.coda.com/efinance/schemas/transaction"
|
||||
xmlns:flex="http://www.coda.com/common/schemas/flexifield"
|
||||
xmlns:att="http://www.coda.com/common/schemas/attachment"
|
||||
xmlns:inp="http://www.coda.com/efinance/schemas/inputext"
|
||||
xmlns:mat="http://www.coda.com/efinance/schemas/matching"
|
||||
xmlns:ass="http://www.coda.com/efinance/schemas/association">
|
||||
<soapenv:Body>
|
||||
<web:PostToBooksRequest>
|
||||
<web:Transaction>
|
||||
<tran:Header
|
||||
xmlns:tran="http://www.coda.com/efinance/schemas/transaction">
|
||||
<tran:Key>
|
||||
<tran:CmpCode>1HTM</tran:CmpCode>
|
||||
<tran:Code>OPBR-FIKO</tran:Code>
|
||||
</tran:Key>
|
||||
<tran:TimeStamp>0</tran:TimeStamp>
|
||||
<tran:InputDate>2024-11-25T00:00:00.000Z</tran:InputDate>
|
||||
<tran:Period>2024/7</tran:Period>
|
||||
<tran:CurCode>EUR</tran:CurCode>
|
||||
<tran:Date>2024-07-25T00:00:00.000Z</tran:Date>
|
||||
<tran:OriginalCompany>1HTM</tran:OriginalCompany>
|
||||
<tran:OriginalCode>OPBR-FIKO</tran:OriginalCode>
|
||||
<tran:CompletionWorkflow>
|
||||
<tran:CompletionStatus>wfl_no_completion</tran:CompletionStatus>
|
||||
</tran:CompletionWorkflow>
|
||||
<tran:SalesInvoiceStatus>salesinv_notyetinv</tran:SalesInvoiceStatus>
|
||||
</tran:Header>
|
||||
<tran:Lines
|
||||
xmlns:tran="http://www.coda.com/efinance/schemas/transaction">
|
||||
<tran:Line>
|
||||
<tran:Number>1</tran:Number>
|
||||
<tran:AccountCode>100.12400.D150000001</tran:AccountCode>
|
||||
<tran:DocValue>100.00</tran:DocValue>
|
||||
<tran:LineType>summary</tran:LineType>
|
||||
<tran:LineSense>debit</tran:LineSense>
|
||||
<tran:LineOrigin>dl_orig_defined</tran:LineOrigin>
|
||||
<tran:Description>test</tran:Description>
|
||||
<tran:ExtRef1>987654</tran:ExtRef1>
|
||||
<tran:ExtRef2>test987654</tran:ExtRef2>
|
||||
<tran:SEPAPaymentCategoryPurposeCode>none</tran:SEPAPaymentCategoryPurposeCode>
|
||||
<tran:SEPAPaymentPurposeCode>none</tran:SEPAPaymentPurposeCode>
|
||||
</tran:Line>
|
||||
<tran:Line>
|
||||
<tran:Number>2</tran:Number>
|
||||
<tran:AccountCode>642.41236.609311</tran:AccountCode>
|
||||
<tran:DocValue>100.00</tran:DocValue>
|
||||
<tran:UserStatus/>
|
||||
<tran:LineType>analysis</tran:LineType>
|
||||
<tran:LineSense>credit</tran:LineSense>
|
||||
<tran:LineOrigin>dl_orig_defined</tran:LineOrigin>
|
||||
<tran:SEPAPaymentCategoryPurposeCode>none</tran:SEPAPaymentCategoryPurposeCode>
|
||||
<tran:SEPAPaymentPurposeCode>none</tran:SEPAPaymentPurposeCode>
|
||||
</tran:Line>
|
||||
</tran:Lines>
|
||||
</web:Transaction>
|
||||
<web:PostData>
|
||||
<web:Template>OPBR-FIKO</web:Template>
|
||||
<web:DocumentWideData/>
|
||||
</web:PostData>
|
||||
</web:PostToBooksRequest>
|
||||
</soapenv:Body>
|
||||
</soapenv:Envelope>
|
||||
@ -1,77 +0,0 @@
|
||||
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.coda.com/efinance/schemas/inputext/input-14.0/webservice" xmlns:tran="http://www.coda.com/efinance/schemas/transaction" xmlns:flex="http://www.coda.com/common/schemas/flexifield" xmlns:att="http://www.coda.com/common/schemas/attachment" xmlns:inp="http://www.coda.com/efinance/schemas/inputext" xmlns:mat="http://www.coda.com/efinance/schemas/matching" xmlns:ass="http://www.coda.com/efinance/schemas/association">
|
||||
<soapenv:Header>
|
||||
<web:Options/>
|
||||
</soapenv:Header>
|
||||
<soapenv:Body>
|
||||
<web:PostRequest>
|
||||
<web:PostOptions postto="intray" reportallerrors="1"/> <!-- postto staat nu naar het register (intray). Dit zou ik een live situatie moeten/kunnen worden aangepast naar de boeken (books) -->
|
||||
<web:Transaction>
|
||||
<tran:Header>
|
||||
<tran:Key>
|
||||
<tran:CmpCode>1HTM</tran:CmpCode> <!-- Unit4 Financials bedrijf -->
|
||||
<tran:Code>VERK_FACTUUR</tran:Code> <!-- Documentcode -->
|
||||
</tran:Key>
|
||||
<tran:TimeStamp>0</tran:TimeStamp> <!-- Timestamp bij nieuwe transacties altijd 0 -->
|
||||
<tran:Period>2024/5</tran:Period> <!-- Jaar en periode van boeken -->
|
||||
<tran:CurCode>EUR</tran:CurCode> <!-- Valutacode -->
|
||||
<tran:Date>2024-06-05T00:00:00.000Z</tran:Date> <!-- Documentdatum> -->
|
||||
<tran:Description>DW12345</tran:Description> <!-- Omschrijving document -->
|
||||
</tran:Header>
|
||||
<tran:Lines>
|
||||
<tran:Line>
|
||||
<tran:Number>1</tran:Number> <!-- Regelnummer - 1 Debiteurenregel -->
|
||||
<tran:AccountCode>1200.D001</tran:AccountCode> <!-- Boeken op elementcode, in dit geval alleen elementen op niveau 1 en 2 (gescheiden door een punt) -->
|
||||
<tran:DocValue>121.00</tran:DocValue> <!-- Totaalbedrag debiteurenregel -->
|
||||
<tran:LineType>summary</tran:LineType> <!-- Type regel, in het geval van een debiteurenregel is dit summary -->
|
||||
<tran:LineSense>credit</tran:LineSense> <!-- Debet of Credit -->
|
||||
<tran:LineOrigin>dl_orig_defined</tran:LineOrigin> <!-- Aangezien hier gebruik wordt gemaakt van het invoersjabloon FACTUUR_VER (zie regel 72) is dit een vooraf gedefinieerde regel ( dl_orig_defined) -->
|
||||
<tran:Description>Nov 2020 Huur</tran:Description> <!-- Regelomschrijving -->
|
||||
<tran:ExtRef1>DW12345</tran:ExtRef1> <!-- Externe referentie 1 -->
|
||||
<tran:ExtRef2/> <!-- Externe referentie 2, nu niet gevuld -->
|
||||
<tran:ExtRef3/> <!-- Externe referentie 3, nu niet gevuld, hieronder kunnen ook nog andere referenties worden opgenomen -->
|
||||
<tran:DocSumTax>21.00</tran:DocSumTax> <!-- BTW-bedrag behorende bij debiteurenregel -->
|
||||
<tran:TaxInclusive>false</tran:TaxInclusive> <!-- Inclusief of exclusief BTW -->
|
||||
</tran:Line>
|
||||
<tran:Line>
|
||||
<tran:Number>2</tran:Number> <!-- Regelnummer - 1 Omzetregel -->
|
||||
<tran:AccountCode>4300</tran:AccountCode> <!-- Boeken op elementcode, in dit geval alleen element op niveau 1 -->
|
||||
<tran:DocValue>100.00</tran:DocValue> <!-- Totaalbedrag omzetregel -->
|
||||
<tran:LineType>analysis</tran:LineType> <!-- Type regel, in het geval van een omzetregel is dit analyses (analyse) -->
|
||||
<tran:LineSense>debit</tran:LineSense> <!-- Debet of Credit -->
|
||||
<tran:LineOrigin>dl_orig_defined</tran:LineOrigin> <!-- Aangezien hier gebruik wordt gemaakt van het invoersjabloon FACTUUR_VER (zie regel 72) is dit een vooraf gedefinieerde regel ( dl_orig_defined) -->
|
||||
<tran:Description>Voorschot Q1.</tran:Description> <!-- Regelomschrijving -->
|
||||
<tran:ExtRef1>Ref. DW12345</tran:ExtRef1> <!-- Externe referentie 1 -->
|
||||
<tran:ExtRef2/> <!-- Externe referentie 2, nu niet gevuld -->
|
||||
<tran:ExtRef3/> <!-- Externe referentie 3, nu niet gevuld, hieronder kunnen ook nog andere referenties worden opgenomen -->
|
||||
<tran:TaxInclusive>false</tran:TaxInclusive> <!-- Inclusief of exclusief BTW -->
|
||||
<tran:Taxes>
|
||||
<tran:Tax>
|
||||
<tran:Code>21%</tran:Code> <!-- BTW-code -->
|
||||
<tran:ShortName>21% BTW</tran:ShortName> <!-- Verkorte omschrijving BTW -->
|
||||
<tran:Value>21.00</tran:Value> <!-- BTW-bedrag analyse regel -->
|
||||
</tran:Tax>
|
||||
</tran:Taxes>
|
||||
</tran:Line>
|
||||
<tran:Line>
|
||||
<tran:Number>3</tran:Number> <!-- Regelnummer - 3 BTW-regel -->
|
||||
<tran:AccountCode>1400</tran:AccountCode> <!-- Boeken op elementcode, in dit geval alleen element op niveau 1 -->
|
||||
<tran:DocValue>21.00</tran:DocValue> <!-- BTW-bedrag -->
|
||||
<tran:LineType>tax</tran:LineType> <!-- Type regel, in het geval van een BTW-regel is dit tax (BTW) -->
|
||||
<tran:LineSense>debit</tran:LineSense> <!-- Debet of Credit -->
|
||||
<tran:LineOrigin>dl_orig_gentax</tran:LineOrigin> <!-- Aangezien hier gebruik wordt gemaakt van het invoersjabloon FACTUUR_VER (zie regel 72) is dit een vooraf gedefinieerde regel ( dl_orig_gentax) -->
|
||||
<tran:Description>Test DW</tran:Description> <!-- Regelomschrijving -->
|
||||
<tran:ExtRef1/>
|
||||
<tran:ExtRef2/>
|
||||
<tran:ExtRef3/>
|
||||
<tran:TaxLineCode>21%</tran:TaxLineCode> <!-- BTW-code -->
|
||||
<tran:DocTaxTurnover>100.00</tran:DocTaxTurnover> <!-- Bedrag waar BTW over berekend -->
|
||||
</tran:Line>
|
||||
</tran:Lines>
|
||||
</web:Transaction>
|
||||
<web:PostData>
|
||||
<inp:Template>FACTUUR_VER</inp:Template> <!-- Te gebruiken invoersjabloon -->
|
||||
<inp:DocumentWideData/>
|
||||
</web:PostData>
|
||||
</web:PostRequest>
|
||||
</soapenv:Body>
|
||||
</soapenv:Envelope>
|
||||
Loading…
Reference in New Issue
Block a user