Skip to content

Payment-Components/demo-iso20022

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ISO20022 Message Validator Demo

This project is part of the FINaplo product and is here to demonstrate how our SDK for SWIFT MX (ISO20022) Messages Validation works. For our demonstration we are going to use the demo SDK which can parse/validate/generate a pacs.002.001.XX message.

It's a simple maven project, you can download it and run it, with Java 1.8 or above.

Table of Contents

  1. SDK Setup
  2. HOW-TO Use the SDK
  3. CBPR+ Messages
  4. SCRIPS (MEPS+) messages
  5. TARGET2 (RTGS) messages
  6. FedNow messages
  7. SIC/euroSIC messages
  8. BAHTNET messages
  9. [CGI-MP messages](#CGI-MP messages)
  10. SEPA Messages

SDK setup

Incorporate the SDK jar into your project by the regular IDE means. This process will vary depending upon your specific IDE and you should consult your documentation on how to deploy a bean. For example in Eclipse all that needs to be done is to import the jar files into a project. Alternatively, you can import it as a Maven or Gradle dependency.

Maven

Define repository in the repositories section

<repository>
    <id>paymentcomponents</id>
    <url>https://nexus.paymentcomponents.com/repository/public</url>
</repository>

Import the SDK

<dependency>
    <groupId>gr.datamation.mx</groupId>
    <artifactId>mx</artifactId>
    <version>23.17.0</version>
    <classifier>demo</classifier>
</dependency>
Gradle

Define repository in the repositories section

repositories {
    maven {
        url "https://nexus.paymentcomponents.com/repository/public"
    }
}

Import the SDK git push https://gantoniadispc14:hGgxJztpi8HNFTZ@github.com/Payment-Components/demo-iso20022.git main

implementation 'gr.datamation.mx:mx:23.17.0:demo@jar'

In case you purchase the SDK you will be given a protected Maven repository with a user name and a password. You can configure your project to download the SDK from there.

Other dependencies

There is a dependency in groovy-all library which is required for some of the included features (version 2.4.8 or later). There is also a dependency in classgraph library which is required for some of the included features (version 4.8.153 or later). You can use maven or gradle to add the dependencies below or manually include the jar to your project.

Maven
<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
    <version>2.4.8</version>
</dependency>
<dependency>
   <groupId>io.github.classgraph</groupId>
   <artifactId>classgraph</artifactId>
   <version>4.8.153</version>
</dependency>
Gradle
compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.4.8'
compile group: 'io.github.classgraph', name: 'classgraph', version: '4.8.153'

HOW-TO Use the SDK

All ISO20022 messages are identified by a code id and a name. The code id (FIToFIPmtStsRpt) and the name (FIToFIPaymentStatusReportV11) are located in the .xsd file that describes the XML schema of each message. Both the name and the code id of the message are available in the ISO20022 messages catalogue.

Inside pacs.002.001.11.xsd

<xs:complexType name="Document">
    <xs:sequence>
        <xs:element name="FIToFIPmtStsRpt" type="FIToFIPaymentStatusReportV11"/>
    </xs:sequence>
</xs:complexType>

Message objects

For every ISO20022 message there is an equivalent class in our SDK. The name of the class is equivalent to the name of the message. For example the name of the class for the message named FIToFIPaymentStatusReportV11 is FIToFIPaymentStatusReport11 (using version 11 of FIToFIPmtStsRpt). Each message has its own versions which are all maintained according to the yearly ISO20022 guidelines.

Building and validating messages

There are three steps the user must follow in order to build a new Swift MX message:

  1. Initialize the class corresponding to the message.

    The initialization of the class is as simple as initializing any class in Java. For the example message we are using here (FIToFIPaymentStatusReport11) the initialization would be

    FIToFIPaymentStatusReport11 message = new FIToFIPaymentStatusReport11();

    The above command will initialize a class for this message named FIToFIPaymentStatusReport11 which is initially empty.

    Validating a text

    ValidationErrorList errorList = message.validateXML(new ByteArrayInputStream("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                                                                                 "<Document xmlns=\"urn:iso:std:iso:20022:tech:xsd:pacs.002.001.11\">\n" +
                                                                                 "  <FIToFIPmtStsRpt>\n" +
                                                                                 "     ............\n" +
                                                                                 "  </FIToFIPmtStsRpt>\n" +
                                                                                 "</Document>".getBytes()));

    Parsing a text

    message.parseXML("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                     "<Document xmlns=\"urn:iso:std:iso:20022:tech:xsd:pacs.002.001.11\">\n" +
                     "  <FIToFIPmtStsRpt>\n" +
                     "     ............\n" +
                     "  </FIToFIPmtStsRpt>\n" +
                     "</Document>");
    Auto parse and validate

    In case we do not know the class of the message, we can use the auto parse and validate from the xml. Auto validating a text

    ValidationErrorList errorList = MXUtils.autoValidateXML(new ByteArrayInputStream("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                                                                                     "<Document xmlns=\"urn:iso:std:iso:20022:tech:xsd:pacs.002.001.11\">\n" +
                                                                                     "  <FIToFIPmtStsRpt>\n" +
                                                                                     "     ............\n" +
                                                                                     "  </FIToFIPmtStsRpt>\n" +
                                                                                     "</Document>".getBytes()));

    Auto parsing a text

    Message message = MXUtils.autoParseXML("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                                            "<Document xmlns=\"urn:iso:std:iso:20022:tech:xsd:pacs.002.001.11\">\n" +
                                            "  <FIToFIPmtStsRpt>\n" +
                                            "     ............\n" +
                                            "  </FIToFIPmtStsRpt>\n" +
                                            "</Document>");
  2. Add data to the class.

    The next step is to add data to the new message. In order to add some data to the message, user must know which element in the message tree he wants to add. The element he wants to add is identified by an XML path. The value of the element user wants to add may be a String, a Boolean or a complex type that is described in the SWIFT MX type catalog.

    So to enter some data into the message, user must call the following method of the previously instantiated object where the path argument is a String identifying the element to add and the value argument is an Object.

    message.setElement("path/to/field", "value");

    User can also work with the XSD defined classes that represent a tag. e.g. GroupHeader91 for GrpHdr tag.

    message.getMessage().setGrpHdr(new GroupHeader91()); // setGrpHdr() method accepts iso.pacs_002_001_11.GroupHeader91 objects
  3. Validate the message.

    After building a Swift MX message using the appropriate class, user may want to validate this message. Of course validation is not mandatory but is the only way to prove that the message is correct. Validation is performed by calling the validate() method and internally is a two step process:

    • Validation against the schema of the message in order to ensure that the message is a well-formed instance of it.
    • Validation against any Validation Rule as described for that message by the ISO20022 rules.

    The validate() method returns an ArrayList containing the validation errors that may occur. Each error is contained in the ArrayList as a ValidationError object describing the error.

    ValidationErrorList errorList = message.validate();

Resolve Paths

For each message object we can call the resolvePaths() method on the object.
This method returns the xml as paths, from root element to the leaf.
It returns a List and each element of the List is a String array consisted of 3 elements:

  1. Field Path excluding the leaf code
  2. Leaf code
  3. Leaf value
  4. Leaf attributes (e.g. Ccy=EUR;)

For example if we call the resolvePaths() on a pacs.002.001.12

FIToFIPaymentStatusReport12 pacs002 = new FIToFIPaymentStatusReport12();
//fill the message object or parse from an xml
List<String[]> paths = pacs002.resolvePaths();
for (String[] path: paths)
        System.out.println("Field path: " + path[0] + " | " + "Field code: " + path[1] +  " | " + "Field value: " + path[2] + " | " + "Field attributes: " + path[3]);

part of the output we will receive is

Field path: /Document/FIToFIPmtStsRpt/GrpHdr | Field code: MsgId | Field value: ABABUS23-STATUS-456/04 | Field attributes: null
Field path: /Document/FIToFIPmtStsRpt/GrpHdr | Field code: CreDtTm | Field value: 2015-06-29T09:56:00 | Field attributes: null
Field path: /Document/FIToFIPmtStsRpt/OrgnlGrpInfAndSts | Field code: OrgnlMsgId | Field value: AAAA100628-123v | Field attributes: null
Field path: /Document/FIToFIPmtStsRpt/OrgnlGrpInfAndSts | Field code: OrgnlMsgNmId | Field value: pacs.003.001.09 | Field attributes: null
Field path: /Document/FIToFIPmtStsRpt/TxInfAndSts | Field code: OrgnlEndToEndId | Field value: VA060327/0123 | Field attributes: null
Field path: /Document/FIToFIPmtStsRpt/TxInfAndSts | Field code: OrgnlTxId | Field value: AAAAUS29/100628/ad458 | Field attributes: null
Field path: /Document/FIToFIPmtStsRpt/TxInfAndSts | Field code: TxSts | Field value: RJCT | Field attributes: null

In case the child of an xml element is an array, we will receive an index of the element.
In our case, if pacs.002 had more than one FIToFIPmtStsRpt, the path would have an index. E.g.

/Document/FIToFIPmtStsRpt[0]/TxInfAndSts
/Document/FIToFIPmtStsRpt[1]/TxInfAndSts

Get Element

For each message object we can call the getElement() method on the object.
This method receives a field path until leaf and returns the field value. The value could be a simple String or a complex Object.
For example we can call the below in a pacs.002 message

pacs002.getElement("TxInfAndSts[0]/TxSts");

the output will be a "RJCT" String. If we call

pacs002.getElement("TxInfAndSts[0]");

the output will be a PaymentTransaction130 Object.
The use of index is necessary in case the element is an array.

Code Samples

In this project you can see code for all the basic manipulation of an MX message, like:

CBPR+ messages

SDK Setup

Maven

<!-- Import the CBPR+ demo SDK-->
<dependency>
    <groupId>gr.datamation.mx</groupId>
    <artifactId>mx</artifactId>
    <version>23.17.0</version>
    <classifier>demo-cbpr</classifier>
</dependency>

Gradle

implementation 'gr.datamation.mx:mx:23.17.0:demo-cbpr@jar'

Please refer to General SDK Setup for more details.

Parse & Validate CBPR+ Message

In case you need to handle CBPR+ messages, then you need to handle objects of CbprMessage class.

//Initialize the cbprMessage
CbprMessage<BusinessApplicationHeader02, FIToFICustomerCreditTransfer08> cbprMessage = new CbprMessage<>(new BusinessApplicationHeader02(), new FIToFICustomerCreditTransfer08());
//Fill the cbprMessage with data from xml validate CBPR+ against the xml schema. We can also exit in case of errors in this step.
ValidationErrorList validationErrorList = cbprMessage.autoParseAndValidateXml(new ByteArrayInputStream(validCbprPacs008String.getBytes()));
//Perform validation in both header and message object using cbprMessage
//Use CbprMessage.CbprMsgType enumeration object to select the matching schema (check the table of supported CBPR messages below
//CbprMessage.extractCbprMsgType() can also be used
validationErrorList.addAll(cbprMessage.validate(CbprMessage.CbprMsgType.PACS_008));

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}
 
//Extract the header and the core message from cbprMessage object
BusinessApplicationHeader02 businessApplicationHeader = (BusinessApplicationHeader02)cbprMessage.getAppHdr();
FIToFICustomerCreditTransfer08 fiToFICustomerCreditTransfer = (FIToFICustomerCreditTransfer08) cbprMessage.getDocument();

AutoParse & Validate CBPR+ Message

//Initialize the cbprMessage
CbprMessage<?, ?> cbprMessage = new CbprMessage<>();
//Fill the cbprMessage with data from xml and validate CBPR+ against the xml schema. We can also exit in case of errors in this step.
ValidationErrorList validationErrorList = cbprMessage.autoParseAndValidateXml(new ByteArrayInputStream(validCbprPacs008String.getBytes()));

//Perform validation in both header and message object using cbprMessage
validationErrorList.addAll(cbprMessage.autoValidate());

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Construct CBPR+ Message

//Initialize the header object
BusinessApplicationHeader02 businessApplicationHeader = new BusinessApplicationHeader02();
businessApplicationHeader.parseXML(validCbprPacs008HeaderString);

//Initialize the document object
FIToFICustomerCreditTransfer08 fiToFICustomerCreditTransfer = new FIToFICustomerCreditTransfer08();
fiToFICustomerCreditTransfer.parseXML(validCbprPacs008DocumentString);

//We fill the elements of the message object using setters
fiToFICustomerCreditTransfer.getMessage().setGrpHdr(new GroupHeader93());
fiToFICustomerCreditTransfer.getMessage().getGrpHdr().setMsgId("1234");
//or setElement()
fiToFICustomerCreditTransfer.setElement("GrpHdr/MsgId", "1234");

//Construct the CBPR message object      
CbprMessage<BusinessApplicationHeader02, FIToFICustomerCreditTransfer08> cbprMessage = new CbprMessage<>(businessApplicationHeader, fiToFICustomerCreditTransfer);

//Perform validation in both header and message object using cbprMessage
//Use CbprMessage.CbprMsgType enumeration object to select the matching schema (check the table of supported CBPR messages below)
//CbprMessage.extractCbprMsgType() can also be used
ValidationErrorList validationErrorList = cbprMessage.validate(CbprMessage.CbprMsgType.PACS_008); 

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

In case you want to enclose the CBPR+ message under another Root Element, use the code below

cbprMessage.encloseCbprMessage("RequestPayload") //In case you want RequestPayload

Code samples

Parse and validate CBPR+ message

Supported CBPR+ Message Types (v2.1)

ISO20022 Message CbprMsgType ENUM Library Object class Available in Demo
camt.029.001.09 CAMT_029 ResolutionOfInvestigation09
camt.052.001.08 CAMT_052 BankToCustomerAccountReport08
camt.053.001.08 CAMT_053 BankToCustomerStatement08
camt.054.001.08 CAMT_054 BankToCustomerDebitCreditNotification08
camt.055.001.08 CAMT_055 CustomerPaymentCancellationRequest08
camt.056.001.08 CAMT_056 FIToFIPaymentCancellationRequest08
camt.057.001.06 CAMT_057 NotificationToReceive06
camt.058.001.08 CAMT_058 NotificationToReceiveCancellationAdvice08
camt.060.001.05 CAMT_060 AccountReportingRequest05
camt.107.001.01 CAMT_107 ChequePresentmentNotification01
camt.108.001.01 CAMT_108 ChequeCancellationOrStopRequest01
camt.109.001.01 CAMT_109 ChequeCancellationOrStopReport01
pacs.002.001.10 PACS_002 FIToFIPaymentStatusReport10
pacs.003.001.08 PACS_003 FIToFICustomerDirectDebit08
pacs.004.001.09 PACS_004 PaymentReturn09
pacs.008.001.08 PACS_008 FIToFICustomerCreditTransfer08
pacs.008.001.08 PACS_008_STP FIToFICustomerCreditTransfer08
pacs.009.001.08 PACS_009_CORE FinancialInstitutionCreditTransfer08 âś“
pacs.009.001.08 PACS_009_COV FinancialInstitutionCreditTransfer08
pacs.009.001.08 PACS_009_ADV FinancialInstitutionCreditTransfer08
pacs.010.001.03 PACS_010 FinancialInstitutionDirectDebit03
pacs.010.001.03 PACS_010_COL FinancialInstitutionDirectDebit03
pain.001.001.09 PAIN_001 CustomerCreditTransferInitiation09
pain.002.001.10 PAIN_002 CustomerPaymentStatusReport10
pain.008.001.08 PAIN_008 CustomerDirectDebitInitiation08

Auto replies

Source Message Reply Message Source Class Reply Class AutoReplies Class
pacs.008.001.08 pacs.004.001.09 FIToFICustomerCreditTransfer08 PaymentReturn09 FIToFICustomerCreditTransferCbprAutoReplies
pacs.008.001.08 camt.056.001.08 FIToFICustomerCreditTransfer08 FIToFIPaymentCancellationRequest08 FIToFICustomerCreditTransferCbprAutoReplies
pacs.009.001.08 pacs.004.001.09 FinancialInstitutionCreditTransfer08 PaymentReturn09 FinancialInstitutionCreditTransferCbprAutoReplies
pacs.009.001.08 camt.056.001.08 FinancialInstitutionCreditTransfer08 FIToFIPaymentCancellationRequest08 FinancialInstitutionCreditTransferCbprAutoReplies
camt.056.001.08 camt.029.001.09 FIToFIPaymentCancellationRequest08 ResolutionOfInvestigation09 FIToFIPaymentCancellationRequestCbprAutoReplies

Sample code for FIToFICustomerCreditTransferCbprAutoReplies can be found here.
Sample code for FinancialInstitutionCreditTransferCbprAutoReplies can be found here.
Sample code for FIToFIPaymentCancellationRequestCbprAutoReplies can be found here.

Please refer to general auto replies for more details.

SCRIPS (MEPS+) messages

Parse & Validate SCRIPS Message

In case you need to handle SCRIPS messages, then you need to handle objects of ScripsMessage class.

//Initialize the scripsMessage
ScripsMessage<BusinessApplicationHeader02, FinancialInstitutionCreditTransfer08> scripsMessage = new ScripsMessage<>(new BusinessApplicationHeader02(), new FinancialInstitutionCreditTransfer08());
//Fill the scripsMessage with data from xml and validate SCRIPS against the xml schema
ValidationErrorList validationErrorList = scripsMessage.autoParseAndValidateXml(new ByteArrayInputStream(validScripsPacs009CoreString.getBytes()));
//Perform validation in both header and message object using scripsMessage
//Use ScripsMessage.ScripsMsgType enumeration object to select the matching schema (check the table of supported SCRIPS messages below
//ScripsMessage.extractScripsMsgType() can also be used
validationErrorList.addAll(scripsMessage.validate(ScripsMessage.ScripsMsgType.PACS_009_CORE));

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}
 
//Extract the header and the core message from scripsMessage object
BusinessApplicationHeader02 businessApplicationHeader = (BusinessApplicationHeader02)scripsMessage.getAppHdr();
FIToFICustomerCreditTransfer08 fiToFICustomerCreditTransfer = (FIToFICustomerCreditTransfer08) scripsMessage.getDocument();

AutoParse SCRIPS Message

//Initialize the scripsMessage
ScripsMessage<?, ?> scripsMessage = new ScripsMessage<>();
//Fill the scripsMessage with data from xml and validate SCRIPS against the xml schema
ValidationErrorList validationErrorList = scripsMessage.autoParseAndValidateXml(new ByteArrayInputStream(validScripsPacs009CoreString.getBytes()));

//Perform validation in both header and message object using scripsMessage
validationErrorList.addAll(scripsMessage.autoValidate());

if (validationErrorList.isEmpty()) {
    System.out.println("Message is valid");
    System.out.println(scripsMessage.convertToXML()); //Get the generated xmls for head and document
} else {
    handleValidationError(validationErrorList);
}

Construct SCRIPS Message

//Initialize the document object
FinancialInstitutionCreditTransfer08 financialInstitutionCreditTransfer08 = new FinancialInstitutionCreditTransfer08();
financialInstitutionCreditTransfer08.parseXML(validScripsPacs009CoreDocumentString);

//We fill the elements of the message object using setters
//financialInstitutionCreditTransfer08.getMessage().setGrpHdr(new GroupHeader93())
//financialInstitutionCreditTransfer08.getMessage().getGrpHdr().setMsgId("1234")

//or setElement()
//financialInstitutionCreditTransfer08.setElement("GrpHdr/MsgId", "1234")

//Construct the SCRIPS message object using two separate objects, header, document
ScripsMessage<BusinessApplicationHeader02, FinancialInstitutionCreditTransfer08> scripsMessage = new ScripsMessage<>(businessApplicationHeader, financialInstitutionCreditTransfer08);

//Perform validation in both header and message object using scripsMessage
//Use ScripsMessage.ScripsMsgType enumeration object to select the matching schema (check the table of supported SCRIPS messages below
//ScripsMessage.extractScripsMsgType() can also be used
ValidationErrorList validationErrorList = scripsMessage.validate(ScripsMessage.ScripsMsgType.PACS_009_CORE);

if (validationErrorList.isEmpty()) {
    System.out.println("Message is valid");
    System.out.println(scripsMessage.convertToXML()); //Get the generated xmls for head and document
} else {
    handleValidationError(validationErrorList);
}

Code samples

Parse and validate SCRIPS message

Supported SCRIPS Message Types (v2.4)

ISO20022 Message ScripsMsgType ENUM Library Object class
camt.029.001.09 CAMT_029 ResolutionOfInvestigation09
camt.056.001.08 CAMT_056 FIToFIPaymentCancellationRequest08
pacs.008.001.08 PACS_008 FIToFICustomerCreditTransfer08
pacs.009.001.08 PACS_009_CORE FinancialInstitutionCreditTransfer08
pacs.009.001.08 PACS_009_COV FinancialInstitutionCreditTransfer08
camt.053.001.08 CAMT_053 BankToCustomerStatement08
camt.053.001.08 CAMT_053_AOS BankToCustomerStatement08

TARGET2 (RTGS) messages

SDK Setup

Maven

<!-- Import the TARGET2 (RTGS) demo SDK-->
<dependency>
    <groupId>gr.datamation.mx</groupId>
    <artifactId>mx</artifactId>
    <version>23.17.0</version>
    <classifier>demo-rtgs</classifier>
</dependency>

Gradle

implementation 'gr.datamation.mx:mx:23.17.0:demo-rtgs@jar'

Please refer to General SDK Setup for more details.

Parse & Validate TARGET2 Message

In case you need to handle TARGET2 (RTGS) messages, then you need to handle objects that extend the ISO20022 classes.

//Initialize the message object
FIToFICustomerCreditTransfer08Rtgs fiToFICustomerCreditTransfer = new FIToFICustomerCreditTransfer08Rtgs();
//Validate against the xml schema. We can also exit in case of errors in this step.
ValidationErrorList validationErrorList = fiToFICustomerCreditTransfer.validateXML(new ByteArrayInputStream(validRtgsPacs008String.getBytes()));
//Fill the message with data from xml
fiToFICustomerCreditTransfer.parseXML(validRtgsPacs008String);
//Validate both the xml schema and rules
validationErrorList.addAll(fiToFICustomerCreditTransfer.validate());  

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

AutoParse TARGET2 Message

//Validate against the xml schema without knowing the message type. We can also exit in case of errors in this step.
ValidationErrorList validationErrorList = RtgsUtils.autoValidateXML(new ByteArrayInputStream(validRtgsPacs008String.getBytes()));
//Fill the message with data from xml without knowing the message type
Message message = RtgsUtils.autoParseXML(validRtgsPacs008String);
//Validate both the xml schema and rules
validationErrorList.addAll(message.validate());

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Construct TARGET2 Message

//Initialize the message object
FIToFICustomerCreditTransfer08 fiToFICustomerCreditTransfer = new FIToFICustomerCreditTransfer08();

//We fill the elements of the message object using setters
fiToFICustomerCreditTransfer.getMessage().setGrpHdr(new GroupHeader93());
fiToFICustomerCreditTransfer.getMessage().getGrpHdr().setMsgId("1234");
//or setElement()
fiToFICustomerCreditTransfer.setElement("GrpHdr/MsgId", "1234");

//Perform validation
ValidationErrorList validationErrorList = fiToFICustomerCreditTransfer.validate(); 

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Code samples

Parse and validate TARGET2 message

Supported TARGET2 Message Types (v2.2)

ISO20022 Message Library Object class Available in Demo
admi.007.001.01 ReceiptAcknowledgement01Rtgs
camt.025.001.05 Receipt05Rtgs
camt.029.001.09 ResolutionOfInvestigation09Rtgs
camt.050.001.05 LiquidityCreditTransfer05Rtgs
camt.053.001.08 BankToCustomerStatement08Rtgs
camt.054.001.08 BankToCustomerDebitCreditNotification08Rtgs
camt.056.001.08 FIToFIPaymentCancellationRequest08Rtgs
pacs.002.001.10 FIToFIPaymentStatusReport10Rtgs
pacs.004.001.09 PaymentReturn09Rtgs
pacs.008.001.08 FIToFICustomerCreditTransfer08Rtgs
pacs.009.001.08 FinancialInstitutionCreditTransfer08Rtgs âś“
pacs.010.001.03 FinancialInstitutionDirectDebit03Rtgs

Auto replies

Source Message Reply Message Source Class Reply Class AutoReplies Class
pacs.008.001.08 pacs.004.001.09 FIToFICustomerCreditTransfer08Rtgs PaymentReturn09Rtgs FIToFICustomerCreditTransferRtgsAutoReplies
pacs.008.001.08 camt.056.001.08 FIToFICustomerCreditTransfer08Rtgs FIToFIPaymentCancellationRequest08Rtgs FIToFICustomerCreditTransferRtgsAutoReplies
pacs.009.001.08 pacs.004.001.09 FinancialInstitutionCreditTransfer08Rtgs PaymentReturn09Rtgs FinancialInstitutionCreditTransferRtgsAutoReplies
pacs.009.001.08 camt.056.001.08 FinancialInstitutionCreditTransfer08Rtgs FIToFIPaymentCancellationRequest08Rtgs FinancialInstitutionCreditTransferRtgsAutoReplies
camt.056.001.08 camt.029.001.09 FIToFIPaymentCancellationRequest08Rtgs ResolutionOfInvestigation09Rtgs FIToFIPaymentCancellationRequestRtgsAutoReplies

Sample code for FIToFICustomerCreditTransferRtgsAutoReplies can be found here.
Sample code for FinancialInstitutionCreditTransferRtgsAutoReplies can be found here.
Sample code for FIToFIPaymentCancellationRequestRtgsAutoReplies can be found here.

Please refer to general auto replies for more details.

FedNow messages

Parse & Validate FedNow Message

In case you need to handle FedNow messages, then you need to handle objects that extend the ISO20022 classes.

//Initialize the message object
FIToFICustomerCreditTransfer08Fednow fiToFICustomerCreditTransfer = new FIToFICustomerCreditTransfer08Fednow();
//Validate against the xml schema. We can also exit in case of errors in this step.
ValidationErrorList validationErrorList = fiToFICustomerCreditTransfer.validateXML(new ByteArrayInputStream(validFednowPacs008String.getBytes()));
//Fill the message with data from xml
fiToFICustomerCreditTransfer.parseXML(validFednowPacs008String);
//Validate both the xml schema and rules
validationErrorList.addAll(fiToFICustomerCreditTransfer.validate());  

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Auto Parse and Validate FedNow Message

//Validate against the xml schema without knowing the message type. We can also exit in case of errors in this step.
//We can use FednowUtils.FedNowMessageType enumeration in order to specify the fednow type we are interested in messages with multiple types (pacs.002, camt.052, camt.029)
ValidationErrorList validationErrorList = FednowUtils.autoValidateXML(new ByteArrayInputStream(validFednowPacs008String.getBytes()));
//Fill the message with data from xml without knowing the message type
Message message = FednowUtils.autoParseXML(validFednowPacs008String);
//Validate both the xml schema and rules
validationErrorList.addAll(message.validate());

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Construct FedNow Message

//Initialize the message object
FIToFICustomerCreditTransfer08Fednow fiToFICustomerCreditTransfer = new FIToFICustomerCreditTransfer08Fednow();

//We fill the elements of the message object using setters
fiToFICustomerCreditTransfer.getMessage().setGrpHdr(new GroupHeader93());
fiToFICustomerCreditTransfer.getMessage().getGrpHdr().setMsgId("1234");
//or setElement()
fiToFICustomerCreditTransfer.setElement("GrpHdr/MsgId", "1234");

//Perform validation
ValidationErrorList validationErrorList = fiToFICustomerCreditTransfer.validate(); 

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Code samples

Parse and validate FedNow message

Supported FedNow Message Types (29 June 2022)

ISO20022 Message Library Object class Category
pacs.008.001.08 FIToFICustomerCreditTransfer08Fednow Customer Credit Transfers
pacs.002.001.10 FIToFIPaymentStatusReport10FednowPaymentStatusFednow Customer Credit Transfers
pacs.002.001.10 FIToFIPaymentStatusReport10ParticipantPaymentStatusFednow Customer Credit Transfers
pacs.028.001.03 FIToFIPaymentStatusRequest03Fednow Customer Credit Transfers
camt.029.001.09 ResolutionOfInvestigation09ReturnRequestResponseFednow Payment Returns
camt.056.001.08 FIToFIPaymentCancellationRequest08Fednow Payment Returns
pacs.004.001.10 PaymentReturn10Fednow Payment Returns
pacs.009.001.08 FinancialInstitutionCreditTransfer08Fednow Liquidity Management Transfers
admi.002.001.01 MessageReject01Fednow System Messages
admi.007.001.01 ReceiptAcknowledgement01Fednow System Messages
camt.060.001.05 AccountReportingRequest05Fednow Account Reporting
camt.052.001.08 BankToCustomerAccountReport08AccountActivityDetailsReportFednow Account Reporting
camt.052.001.08 BankToCustomerAccountReport08AccountActivityTotalsReportFednow Account Reporting
camt.052.001.08 BankToCustomerAccountReport08AccountBalanceReportFednow Account Reporting
camt.054.001.08 BankToCustomerDebitCreditNotification08Fednow Account Reporting
head.001.001.02 BusinessApplicationHeader02Fednow

Auto replies

Source Message Reply Message Source Class Reply Class AutoReplies Class
pacs.008.001.08 pacs.004.001.10 FIToFICustomerCreditTransfer08Fednow PaymentReturn10Fednow FIToFICustomerCreditTransferFednowAutoReplies
pacs.008.001.08 camt.056.001.08 FIToFICustomerCreditTransfer08Fednow FIToFIPaymentCancellationRequest08Fednow FIToFICustomerCreditTransferFednowAutoReplies
camt.056.001.08 camt.029.001.09 FIToFIPaymentCancellationRequest08Fednow ResolutionOfInvestigation09ReturnRequestResponseFednow FIToFIPaymentCancellationRequestFednowAutoReplies

Sample code for FIToFICustomerCreditTransferFednowAutoReplies can be found here.
Sample code for FIToFIPaymentCancellationRequestFednowAutoReplies can be found here.

SIC/euroSIC messages

Parse & Validate SIC/euroSIC Message

 //Initialize the message object
 FIToFICustomerCreditTransfer08SicEurosic fiToFICustomerCreditTransfer = new FIToFICustomerCreditTransfer08SicEurosic();
 //Validate against the xml schema. We can also exit in case of errors in this step.
 ValidationErrorList validationErrorList = fiToFICustomerCreditTransfer.validateXML(new ByteArrayInputStream(validSicEuroSicPacs008String.getBytes()));
 //Fill the message with data from xml
 fiToFICustomerCreditTransfer.parseXML(validSicEuroSicPacs008String);
 
 //Validate both the xml schema and rules
 validationErrorList.addAll(fiToFICustomerCreditTransfer.validate());
 
 if (validationErrorList.isEmpty()) {
 System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
 } else {
 System.out.println(validationErrorList);
 }

Auto Parse and Validate SIC/euroSIC Message

 //Initialize the message object
 FIToFICustomerCreditTransfer08SicEurosic fiToFICustomerCreditTransfer = new FIToFICustomerCreditTransfer08SicEurosic();

 //Validate against the xml schema without knowing the message type. We can also exit in case of errors in this step.
 ValidationErrorList validationErrorList = SicEurosicUtils.autoValidateXML(new ByteArrayInputStream(validSicEuroSicPacs008String.getBytes()));
 //Fill the message with data from xml without knowing the message type
 Message message = SicEurosicUtils.autoParseXML(validSicEuroSicPacs008String);
 
 //Validate both the xml schema and rules
 validationErrorList.addAll(message.validate());
 
 if (validationErrorList.isEmpty()) {
 System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
 } else {
 System.out.println(validationErrorList);
 }

Construct SIC/euroSIC Message

 //Initialize the message object
 FIToFICustomerCreditTransfer08SicEurosic fiToFICustomerCreditTransfer = new FIToFICustomerCreditTransfer08SicEurosic();

 //We fill the elements of the message object using setters
 fiToFICustomerCreditTransfer.getMessage().setGrpHdr(new GroupHeader93());
 fiToFICustomerCreditTransfer.getMessage().getGrpHdr().setMsgId("1234");
 fiToFICustomerCreditTransfer.getMessage().getGrpHdr().setNbOfTxs("0");
 //or setElement()
 fiToFICustomerCreditTransfer.setElement("GrpHdr/MsgId", "1234");
 fiToFICustomerCreditTransfer.setElement("GrpHdr/NbOfTxs", "0");

 //Perform validation
 ValidationErrorList validationErrorList = fiToFICustomerCreditTransfer.validate();

 if (validationErrorList.isEmpty()) {
 System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
 } else {
 System.out.println(validationErrorList);

Code samples

Parse and validate SIC/euroSIC message

Supported SIC/euroSIC Message Types (version 4.9)

ISO20022 Message Library Object class
pacs.008.001.08 FIToFICustomerCreditTransfer08SicEurosic
pacs.002.001.10 FIToFIPaymentStatusReport10SicEurosic
camt.029.001.09 ResolutionOfInvestigation09SicEurosic
camt.056.001.08 FIToFIPaymentCancellationRequest08SicEurosic
pacs.004.001.09 FIToFIPaymentStatusReport09SicEurosic

BAHTNET messages

Parse & Validate Bahtnet Message

In case you need to handle Bahtnet messages, then you need to handle objects of BahtnetMessage class.

//Initialize the bahtnetMessage
BahtnetMessage<BusinessApplicationHeader02, FIToFICustomerCreditTransfer08> bahtnetMessage = new BahtnetMessage<>(new BusinessApplicationHeader02(), new FIToFICustomerCreditTransfer08());
//Fill the bahtnetMessage with data from xml validate Bahtnet against the xml schema. We can also exit in case of errors in this step.
ValidationErrorList validationErrorList = bahtnetMessage.autoParseAndValidateXml(new ByteArrayInputStream(validBahtnetPacs008String.getBytes()));
//Perform validation in both header and message object using bahtnetMessage
//Use BahtnetMessage.BahtnetMsgType enumeration object to select the matching schema (check the table of supported Bahtnet messages below
//BahtnetMessage.extractBahtnetMsgType() can also be used
validationErrorList.addAll(bahtnetMessage.validate(BahtnetMessage.BahtnetMsgType.PACS_008));

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}
 
//Extract the header and the core message from bahtnetMessage object
BusinessApplicationHeader02 businessApplicationHeader = (BusinessApplicationHeader02)bahtnetMessage.getAppHdr();
FIToFICustomerCreditTransfer08 fiToFICustomerCreditTransfer = (FIToFICustomerCreditTransfer08) bahtnetMessage.getDocument();

AutoParse & Validate Bahtnet Message

//Initialize the bahtnetMessage
BahtnetMessage<?, ?> bahtnetMessage = new BahtnetMessage<>();
//Fill the bahtnetMessage with data from xml and validate Bahtnet against the xml schema. We can also exit in case of errors in this step.
ValidationErrorList validationErrorList = bahtnetMessage.autoParseAndValidateXml(new ByteArrayInputStream(validBahtnetPacs008String.getBytes()));

//Perform validation in both header and message object using bahtnetMessage
validationErrorList.addAll(bahtnetMessage.autoValidate());

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Construct Bahtnet Message

//Initialize the header object
BusinessApplicationHeader02 businessApplicationHeader = new BusinessApplicationHeader02();
businessApplicationHeader.parseXML(validBahtnetPacs008HeaderString);

//Initialize the document object
FIToFICustomerCreditTransfer08 fiToFICustomerCreditTransfer = new FIToFICustomerCreditTransfer08();
fiToFICustomerCreditTransfer.parseXML(validBahtnetPacs008DocumentString);

//We fill the elements of the message object using setters
fiToFICustomerCreditTransfer.getMessage().setGrpHdr(new GroupHeader93());
fiToFICustomerCreditTransfer.getMessage().getGrpHdr().setMsgId("1234");
//or setElement()
fiToFICustomerCreditTransfer.setElement("GrpHdr/MsgId", "1234");

//Construct the Bahtnet message object      
BahtnetMessage<BusinessApplicationHeader02, FIToFICustomerCreditTransfer08> bahtnetMessage = new BahtnetMessage<>(businessApplicationHeader, fiToFICustomerCreditTransfer);

//Perform validation in both header and message object using bahtnetMessage
//Use BahtnetMessage.BahtnetMsgType enumeration object to select the matching schema (check the table of supported Bahtnet messages below)
//BahtnetMessage.extractBahtnetMsgType() can also be used
ValidationErrorList validationErrorList = bahtnetMessage.validate(BahtnetMessage.BahtnetMsgType.PACS_008); 

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFICustomerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

In case you want to enclose the Bahtnet message under another Root Element, use the code below

bahtnetMessage.encloseBahtnetMessage("RequestPayload") //In case you want RequestPayload

Code samples

Parse and validate BAHTNET message

Supported BAHTNET Message Types (03 March 2022)

ISO20022 Message BahtnetMsgType ENUM Library Object class
camt.053.001.08 CAMT_053 FIToFICustomerCreditTransfer08Bahtnet
camt.054.001.08 CAMT_054_CDT FIToFIPaymentStatusReport10Bahtnet
camt.054.001.08 CAMT_054_DBT FinancialInstitutionCreditTransfer08Bahtnet
camt.056.001.08 CAMT_056_CAN FinancialInstitutionCreditTransfer08CovBahtnet
camt.056.001.08 CAMT_056_RTN BankToCustomerCreditNotification08Bahtnet
camt.087.001.06 CAMT_087 BankToCustomerDebitNotification08Bahtnet
camt.998.001.02 CAMT_998 BankToCustomerStatement08Bahtnet
mft.01 MFT_01 FIToFIPaymentCancellationRequest08Bahtnet
pacs.002.001.10 PACS_002 FIToFIPaymentCancellationRequestReturn08Bahtnet
pacs.008.001.08 PACS_008 ProprietaryMessage02Bahtnet
pacs.009.001.08 PACS_009_CORE RequestToModifyPayment06Bahtnet
pacs.009.001.08 PACS_009_COV MftDetailBahtnet01

CGI-MP messages

SDK Setup

Maven

<!-- Import the TARGET2 (RTGS) demo SDK-->
<dependency>
    <groupId>gr.datamation.mx</groupId>
    <artifactId>mx</artifactId>
    <version>23.17.0</version>
    <classifier>{CLIENT_CLASSIFIER}</classifier>
</dependency>

Gradle

implementation 'gr.datamation.mx:mx:23.17.0:{CLIENT_CLASSIFIER}@jar'

Please refer to General SDK Setup for more details.

Parse & Validate CGI-MP Message

In case you need to handle CGI-MP messages, then you need to handle objects that extend the ISO20022 classes.

//Initialize the message object
CustomerCreditTransferInitiation09RelayServiceCgiMp customerCreditTransfer = new CustomerCreditTransferInitiation09RelayServiceCgiMp();
//Validate against the xml schema. We can also exit in case of errors in this step.
ValidationErrorList validationErrorList = customerCreditTransfer.validateXML(new ByteArrayInputStream(validPain001String.getBytes()));
//Fill the message with data from xml
customerCreditTransfer.parseXML(validPain001String);
//Validate both the xml schema and rules
validationErrorList.addAll(customerCreditTransfer.validate());  

if (validationErrorList.isEmpty()) {
    System.out.println(customerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Construct CGI-MP Message

//Initialize the message object
CustomerCreditTransferInitiation09RelayServiceCgiMp customerCreditTransfer = new CustomerCreditTransferInitiation09RelayServiceCgiMp();

//We fill the elements of the message object using setters
customerCreditTransfer.getMessage().setGrpHdr(new GroupHeader85());
customerCreditTransfer.getMessage().getGrpHdr().setMsgId("1234");
//or setElement()
customerCreditTransfer.setElement("GrpHdr/MsgId", "1234");

//Perform validation
ValidationErrorList validationErrorList = customerCreditTransfer.validate(); 

if (validationErrorList.isEmpty()) {
    System.out.println(customerCreditTransfer.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Code samples

Parse and validate CGI-MP message

Supported CGI-MP Message Types

ISO20022 Message Library Object class
pain.001.001.09.relay.service CustomerCreditTransferInitiation09RelayServiceCgiMp
pain.001.001.09.urgent.payments CustomerCreditTransferInitiation09UrgentPaymentsCgiMp

SEPA-EPC Credit Transfer

SDK Setup

Maven

<!-- Import the SEPA-EPC-CT demo SDK-->
<dependency>
    <groupId>gr.datamation.mx</groupId>
    <artifactId>mx</artifactId>
    <version>23.17.0</version>
    <classifier>demo-sepa</classifier>
</dependency>

Gradle

implementation 'gr.datamation.mx:mx:23.17.0:demo-sepa@jar'

Please refer to General SDK Setup for more details.

Parse & Validate SEPA Message

In case you need to handle SEPA-EPC-CT messages, then you need to handle objects that extend the ISO20022 classes.

//Initialize the message object
FIToFIPaymentStatusReport10SepaEpcCt fiToFIPaymentStatusReport = new FIToFIPaymentStatusReport10SepaEpcCt();
//Validate against the xml schema. We can also exit in case of errors in this step.
ValidationErrorList validationErrorList = fiToFIPaymentStatusReport.validateXML(new ByteArrayInputStream(validSepaPacs002String.getBytes()));
//Fill the message with data from xml
fiToFIPaymentStatusReport.parseXML(validSepaPacs002String);
//Validate both the xml schema and rules
validationErrorList.addAll(fiToFIPaymentStatusReport.validate());  

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFIPaymentStatusReport.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Construct SEPA-EPC-CT Message

//Initialize the message object
FIToFIPaymentStatusReport10 fiToFIPaymentStatusReport = new FIToFIPaymentStatusReport10();

//We fill the elements of the message object using setters
fiToFIPaymentStatusReport.getMessage().setGrpHdr(new GroupHeader93());
fiToFIPaymentStatusReport.getMessage().getGrpHdr().setMsgId("1234");
//or setElement()
fiToFIPaymentStatusReport.setElement("GrpHdr/MsgId", "1234");

//Perform validation
ValidationErrorList validationErrorList = fiToFIPaymentStatusReport.validate(); 

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFIPaymentStatusReport.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Code samples

Parse and validate SEPA-EPC-CT message

Supported SEPA-EPC-CT Message Types (2023 Version 1.0)

ISO20022 Message Library Object class Available in Demo
camt.027.001.07 ClaimNonReceipt07SepaEpcCt
camt.029.001.09 ResolutionOfInvestigation09ConfirmationPositiveReplyCamt087SepaEpcCt
camt.029.001.09 ResolutionOfInvestigation09NegativeReplyCamt027SepaEpcCt
camt.029.001.09 ResolutionOfInvestigation09NegativeReplyCamt087SepaEpcCt
camt.029.001.09 ResolutionOfInvestigation09NegativeReplyRecallSepaEpcCt
camt.029.001.09 ResolutionOfInvestigation09NegativeReplyRfroSepaEpcCt
camt.029.001.09 ResolutionOfInvestigation09PositiveReplyCamt027SepaEpcCt
camt.029.001.09 ResolutionOfInvestigation09PositiveReplyCamt087SepaEpcCt
camt.056.001.08 FIToFIPaymentCancellationRequest08RecallSepaEpcCt
camt.056.001.08 FIToFIPaymentCancellationRequest08RfroSepaEpcCt
camt.087.001.06 RequestToModifyPayment06SepaEpcCt
pacs.002.001.10 FIToFIPaymentStatusReport10SepaEpcCt âś“
pacs.004.001.09 PaymentReturn09PositiveReplyRecallSepaEpcCt
pacs.004.001.09 PaymentReturn09PositiveReplyRfroSepaEpcCt
pacs.004.001.09 PaymentReturn09ReturnSepaEpcCt
pacs.008.001.08 FIToFICustomerCreditTransfer08FcSepaEpcCt
pacs.008.001.08 FIToFICustomerCreditTransfer08RtiSepaEpcCt
pacs.008.001.08 FIToFICustomerCreditTransfer08SepaEpcCt
pacs.028.001.03 FIToFIPaymentStatusRequest03InquirySepaEpcCt
pacs.028.001.03 FIToFIPaymentStatusRequest03RecallSepaEpcCt
pacs.028.001.03 FIToFIPaymentStatusRequest03RfroSepaEpcCt

Auto replies

Source Message Reply Message Source Class Reply Class AutoReplies Class
pacs.008.001.08 pacs.004.001.09 FIToFICustomerCreditTransfer08SepaEpcCt PaymentReturn09ReturnSepaEpcCt FIToFICustomerCreditTransferSepaEpcCtAutoReplies
pacs.008.001.08 camt.056.001.08 FIToFICustomerCreditTransfer08SepaEpcCt FIToFIPaymentCancellationRequest08RecallSepaEpcCt FIToFICustomerCreditTransferSepaEpcCtAutoReplies
pacs.008.001.08 camt.029.001.09 FIToFICustomerCreditTransfer08SepaEpcCt ResolutionOfInvestigation09NegativeReplyRecallSepaEpcCt FIToFICustomerCreditTransferSepaEpcCtAutoReplies
pacs.008.001.08 camt.027.001.07 FIToFICustomerCreditTransfer08SepaEpcCt ClaimNonReceipt07SepaEpcCt FIToFICustomerCreditTransferSepaEpcCtAutoReplies
pacs.008.001.08 camt.087.001.06 FIToFICustomerCreditTransfer08SepaEpcCt RequestToModifyPayment06SepaEpcCt FIToFICustomerCreditTransferSepaEpcCtAutoReplies
pacs.008.001.08 pacs.028.001.03 FIToFICustomerCreditTransfer08SepaEpcCt FIToFIPaymentStatusRequest03InquirySepaEpcCt FIToFICustomerCreditTransferSepaEpcCtAutoReplies
camt.056.001.08 camt.029.001.09 FIToFIPaymentCancellationRequest08RecallSepaEpcCt ResolutionOfInvestigation09NegativeReplyRecallSepaEpcCt FIToFIPaymentCancellationRequestSepaEpcCtAutoReplies
camt.027.001.07 camt.029.001.09 ClaimNonReceipt07SepaEpcCt ResolutionOfInvestigation09NegativeReplyRecallSepaEpcCt ClaimNonReceiptSepaEpcCtAutoReplies
camt.027.001.07 camt.029.001.09 ClaimNonReceipt07SepaEpcCt ResolutionOfInvestigation09PositiveReplyCamt027SepaEpcCt ClaimNonReceiptSepaEpcCtAutoReplies
camt.087.001.06 camt.029.001.09 RequestToModifyPayment06SepaEpcCt ResolutionOfInvestigation09NegativeReplyCamt087SepaEpcCt ClaimNonReceiptSepaEpcCtAutoReplies
camt.087.001.06 camt.029.001.09 RequestToModifyPayment06SepaEpcCt ResolutionOfInvestigation09PositiveReplyCamt087SepaEpcCt RequestToModifyPaymentSepaEpcCtAutoReplies

Sample code for FIToFICustomerCreditTransferSepaEpcCtAutoReplies can be found here.
Sample code for FIToFIPaymentCancellationRequestSepaEpcCtAutoReplies can be found here.
Sample code for ClaimNonReceiptSepaEpcCtAutoReplies can be found here.
Sample code for RequestToModifyPaymentSepaEpcCtAutoReplies can be found here.

Please refer to general auto replies for more details.

SEPA-EPC Direct Debit

SDK Setup

Maven

<!-- Import the SEPA-EPC-DD demo SDK-->
<dependency>
    <groupId>gr.datamation.mx</groupId>
    <artifactId>mx</artifactId>
    <version>23.17.0</version>
    <classifier>demo-sepa</classifier>
</dependency>

Gradle

implementation 'gr.datamation.mx:mx:23.17.0:demo-sepa@jar'

Please refer to General SDK Setup for more details.

Parse & Validate SEPA Message

In case you need to handle SEPA-EPC-DD messages, then you need to handle objects that extend the ISO20022 classes.

//Initialize the message object
FIToFIPaymentStatusReport10SepaEpcDd fiToFIPaymentStatusReport = new FIToFIPaymentStatusReport10SepaEpcDd();
//Validate against the xml schema. We can also exit in case of errors in this step.
ValidationErrorList validationErrorList = fiToFIPaymentStatusReport.validateXML(new ByteArrayInputStream(validSepaPacs002String.getBytes()));
//Fill the message with data from xml
fiToFIPaymentStatusReport.parseXML(validSepaPacs002String);
//Validate both the xml schema and rules
validationErrorList.addAll(fiToFIPaymentStatusReport.validate());  

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFIPaymentStatusReport.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Construct SEPA-EPC-DD Message

//Initialize the message object
FIToFIPaymentStatusReport10 fiToFIPaymentStatusReport = new FIToFIPaymentStatusReport10();

//We fill the elements of the message object using setters
fiToFIPaymentStatusReport.getMessage().setGrpHdr(new GroupHeader93());
fiToFIPaymentStatusReport.getMessage().getGrpHdr().setMsgId("1234");
//or setElement()
fiToFIPaymentStatusReport.setElement("GrpHdr/MsgId", "1234");

//Perform validation
ValidationErrorList validationErrorList = fiToFIPaymentStatusReport.validate(); 

if (validationErrorList.isEmpty()) {
    System.out.println(fiToFIPaymentStatusReport.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Code samples

Parse and validate SEPA-EPC-DD message

Supported SEPA-EPC-DD Message Types (2023 Version 1.0)

ISO20022 Message Library Object class Available in Demo
pacs.002.001.10 FIToFIPaymentStatusReport10SepaEpcDd
pacs.003.001.08 FIToFICustomerDirectDebit08SepaEpcDd
pacs.004.001.09 PaymentReturn09SepaEpcDd
pacs.007.001.09 FIToFIPaymentReversal09SepaEpcDd

Auto replies

Source Message Reply Message Source Class Reply Class AutoReplies Class
pacs.003.001.08 pacs.002.001.10 FIToFIPaymentStatusReport10SepaEpcDd FIToFIPaymentStatusReport10SepaEpcDd FIToFICustomerDirectDebit08SepaEpcDdAutoReplies
pacs.003.001.08 pacs.004.001.09 FIToFIPaymentStatusReport10SepaEpcDd PaymentReturn09SepaEpcDd FIToFICustomerDirectDebit08SepaEpcDdAutoReplies
pacs.003.001.08 pacs.007.001.09 FIToFIPaymentStatusReport10SepaEpcDd FIToFIPaymentReversal09SepaEpcDd FIToFICustomerDirectDebit08SepaEpcDdAutoReplies
pacs.007.001.09 pacs.004.001.09 FIToFIPaymentReversal09SepaEpcDd PaymentReturn09SepaEpcDd FIToFIPaymentReversalSepaEpcDdAutoReplies

Sample code for FIToFICustomerDirectDebit08SepaEpcDdAutoReplies can be found here.

Sample code for FIToFIPaymentReversalSepaEpcDdAutoReplies can be found here.

SEPA-EPC Instant Payment

SDK Setup

Maven

<!-- Import the SEPA-EPC-INST demo SDK-->
<dependency>
    <groupId>gr.datamation.mx</groupId>
    <artifactId>mx</artifactId>
    <version>23.17.0</version>
    <classifier>demo-sepa</classifier>
</dependency>

Gradle

implementation 'gr.datamation.mx:mx:23.00.0:demo-sepa@jar'

Please refer to General SDK Setup for more details.

Parse & Validate SEPA Message

In case you need to handle SEPA-EPC-INST messages, then you need to handle objects that extend the ISO20022 classes.

//Initialize the message object
FIToFICustomerCreditTransfer08SepaEpcInst fiCustomerCreditTransfer08SepaEpcInst = new FIToFICustomerCreditTransfer08SepaEpcInst();
//Validate against the xml schema
ValidationErrorList validationErrorList = fiCustomerCreditTransfer08SepaEpcInst.validateXML(new ByteArrayInputStream(validSepaEpcInstPacs008string.getBytes()));
//Fill the message with data from xml
fiCustomerCreditTransfer08SepaEpcInst.parseXML(validSepaEpcInstPacs008string);
//Validate both the xml schema and rules
validationErrorList.addAll(fiCustomerCreditTransfer08SepaEpcInst.validate());

if (validationErrorList.isEmpty()) {
    System.out.println("Message is valid");
    System.out.println(fiCustomerCreditTransfer08SepaEpcInst.convertToXML()); //Get the generated xml
} else {
     System.out.println(validationErrorList);
}

Construct SEPA-EPC-INST Message

//Initialize the message object
FIToFICustomerCreditTransfer08SepaEpcInst fIToFIPaymentStatusReport10 = new FIToFICustomerCreditTransfer08SepaEpcInst();

//We fill the elements with the message object using setters
fIToFIPaymentStatusReport10.getMessage().setGrpHdr(new GroupHeader93());
fIToFIPaymentStatusReport10.getMessage().getGrpHdr().setMsgId("1234");
//or setElement()
fIToFIPaymentStatusReport10.setElement("GrpHdr/MsgId", "1234");

//Perform validation
ValidationErrorList validationErrorList = fIToFIPaymentStatusReport10.validate();

if (validationErrorList.isEmpty()) {
    System.out.println(fIToFIPaymentStatusReport10.convertToXML()); //Get the generated xml
} else {
     System.out.println(validationErrorList);
}

Code samples

Parse and validate SEPA-EPC-INST message

Supported SEPA-EPC-INST Message Types (2023 Version 1.0)

ISO20022 Message Library Object class Available in Demo
pacs.008.001.08 FIToFICustomerCreditTransfer08SepaEpcInst
pacs.002.001.10 FIToFIPaymentStatusReport10NegativeSepaEpcInst
pacs.002.001.10 FIToFIPaymentStatusReport10PositiveSepaEpcInst
pacs.028.001.03 FIToFIPaymentStatusRequest03RecallSepaEpcInst
pacs.028.001.03 FIToFIPaymentStatusRequest03RfroSepaEpcInst
pacs.028.001.03 FIToFIPaymentStatusRequest03StatusInvestigationSepaEpcInst
pacs.004.001.09 PaymentReturn09PosReRecalSepaEpcInst
pacs.004.001.09 PaymentReturn09PosReRfroSepaEpcInst
camt.056.001.08 FIToFIPaymentCancellationRequest08RecallSepaEpcInst
camt.056.001.08 FIToFIPaymentCancellationRequest08RfroSepaEpcInst
camt.029.001.09 ResolutionOfInvestigation09NegReRecallSepaEpcInst
camt.029.001.09 ResolutionOfInvestigation09NegReRfroSepaEpcInst

Auto replies

Source Message Reply Message Source Class Reply Class AutoReplies Class
pacs.008.001.08 pacs.004.001.09 FIToFICustomerCreditTransfer08SepaEpcInst PaymentReturn09PosReRecalSepaEpcInst FIToFICustomerCreditTransferSepaEpcInstAutoReplies
pacs.008.001.08 pacs.002.001.10 FIToFICustomerCreditTransfer08SepaEpcInst FIToFIPaymentStatusReport10PositiveSepaEpcInst FIToFICustomerCreditTransferSepaEpcInstAutoReplies
pacs.008.001.08 pacs.002.001.10 FIToFICustomerCreditTransfer08SepaEpcInst FIToFIPaymentStatusReport10NegativeSepaEpcInst FIToFICustomerCreditTransferSepaEpcInstAutoReplies
pacs.008.001.08 camt.056.001.08 FIToFICustomerCreditTransfer08SepaEpcInst FIToFIPaymentCancellationRequest08RecallSepaEpcInst FIToFICustomerCreditTransferSepaEpcInstAutoReplies
pacs.008.001.08 camt.029.001.09 FIToFICustomerCreditTransfer08SepaEpcInst ResolutionOfInvestigation09NegReRecallSepaEpcInst FIToFICustomerCreditTransferSepaEpcInstAutoReplies
camt.056.001.08 pacs.028.001.03 FIToFIPaymentCancellationRequest08RecallSepaEpcInst FIToFIPaymentStatusRequest03RecallSepaEpcInst FIToFIPaymentCancellationRequestEpcInstAutoReplies

Sample code for FIToFICustomerCreditTransferSepaEpcInstAutoReplies can be found here.
Sample code for FIToFIPaymentCancellationRequestEpcInstAutoReplies can be found here.

SEPA-EBA Credit Transfer

SDK Setup

Maven

<!-- Import the SEPA-EΒΑ-CT demo SDK-->
<dependency>
    <groupId>gr.datamation.mx</groupId>
    <artifactId>mx</artifactId>
    <version>23.17.0</version>
    <classifier>demo-sepa</classifier>
</dependency>

Gradle

implementation 'gr.datamation.mx:mx:23.17.0:demo-sepa@jar'

Please refer to General SDK Setup for more details.

Parse & Validate SEPA Message

In case you need to handle SEPA-ΕΒΑ-CT messages, there is a dedicated class for each message type.

//Initialize the message object
FIToFIPaymentStatusReport10SepaEbaCt fIToFIPaymentStatusReport10 = new FIToFIPaymentStatusReport10SepaEbaCt();
//Validate against the xml schema
ValidationErrorList validationErrorList = fIToFIPaymentStatusReport10.validateXML(new ByteArrayInputStream(validSepaEbaCtPacs002String.getBytes()));

//Fill the message with data from xml
fIToFIPaymentStatusReport10.parseXML(validSepaEbaCtPacs002String);
//Validate both the xml schema and rules
validationErrorList.addAll(fIToFIPaymentStatusReport10.validate());

if (validationErrorList.isEmpty()) {
    System.out.println(fIToFIPaymentStatusReport10.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Construct SEPA-EBA-CT Message

//Initialize the message object
FIToFIPaymentStatusReport10SepaEbaCt fIToFIPaymentStatusReport10 = new FIToFIPaymentStatusReport10SepaEbaCt();

//We fill the elements of the message object using setters
fIToFIPaymentStatusReport10.getMessage().setGrpHdr(new SCTGroupHeader91());
fIToFIPaymentStatusReport10.getMessage().getGrpHdr().setMsgId("1234");
//or setElement()
fIToFIPaymentStatusReport10.setElement("GrpHdr/MsgId", "1234");

//Perform validation
ValidationErrorList validationErrorList = fIToFIPaymentStatusReport10.validate();

if (validationErrorList.isEmpty()) {
    System.out.println(fIToFIPaymentStatusReport10.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Code samples

Parse and validate SEPA-EPC-CT message

Supported SEPA-EBA-CT Message Types

ISO20022 Message Library Object class Available in Demo
camt.027.001.07 ClaimNonReceipt07SepaEbaCt
camt.029.001.09 ResolutionOfInvestigation09SepaEbaCt
camt.056.001.08 FIToFIPaymentCancellationRequest08SepaEbaCt
camt.087.001.06 RequestToModifyPayment06SepaEbaCt
pacs.002.001.10 FIToFIPaymentStatusReport10SepaEbaCt âś“
pacs.004.001.09 PaymentReturn09ReturnSepaEbaCt
pacs.008.001.08 FIToFICustomerCreditTransfer08FcSepaEbaCt
pacs.028.001.03 FIToFIPaymentStatusRequest03InquirySepaEbaCt
SCTCvfBlkCredTrf CvfBulkCreditTransferSepaEbaCt âś“
SCTIcfBlkCredTrf IcfBulkCreditTransferSepaEbaCt
SCTIqfBlkCredTrf IqfBulkCreditTransferSepaEbaCt
SCTOqfBlkCredTrf OqfBulkCreditTransferSepaEbaCt
SCTPcfBlkCredTrf PcfBulkCreditTransferSepaEbaCt
SCTQvfBlkCredTrf QvfBulkCreditTransferSepaEbaCt
SCTRsfBlkCredTrf RsfBulkCreditTransferSepaEbaCt
SCTScfBlkCredTrf ScfBulkCreditTransferSepaEbaCt

Auto replies

Source Message Reply Message Source Class Reply Class AutoReplies Class
pacs.008.001.08 pacs.004.001.09 FIToFICustomerCreditTransfer08SepaEbaCt PaymentReturn09SepaEbaCt FIToFICustomerCreditTransferSepaEbaCtAutoReplies
pacs.008.001.08 camt.056.001.08 FIToFICustomerCreditTransfer08SepaEbaCt FIToFIPaymentCancellationRequest08SepaEbaCt FIToFICustomerCreditTransferSepaEbaCtAutoReplies
pacs.008.001.08 camt.027.001.07 FIToFICustomerCreditTransfer08SepaEbaCt ClaimNonReceipt07SepaEbaCt FIToFICustomerCreditTransferSepaEbaCtAutoReplies
pacs.008.001.08 camt.087.001.06 FIToFICustomerCreditTransfer08SepaEbaCt RequestToModifyPayment06SepaEbaCt FIToFICustomerCreditTransferSepaEbaCtAutoReplies
pacs.008.001.08 pacs.028.001.03 FIToFICustomerCreditTransfer08SepaEbaCt FIToFIPaymentStatusRequest03InquirySepaEbaCt FIToFICustomerCreditTransferSepaEbaCtAutoReplies
camt.056.001.08 camt.029.001.09 FIToFIPaymentCancellationRequest08SepaEbaCt ResolutionOfInvestigation09SepaEbaCt FIToFIPaymentCancellationRequestSepaEbaCtAutoReplies
camt.027.001.07 camt.029.001.09 ClaimNonReceipt07SepaEbaCt ResolutionOfInvestigation09SepaEbaCt ClaimNonReceiptSepaEbaCtAutoReplies
camt.087.001.06 camt.029.001.09 RequestToModifyPayment06SepaEbaCt ResolutionOfInvestigation09SepaEbaCt RequestToModifyPaymentSepaEbaCtAutoReplies

Sample code for FIToFICustomerCreditTransferSepaEbaCtAutoReplies can be found here.
Sample code for FIToFIPaymentCancellationRequestSepaEbaCtAutoReplies can be found here.
Sample code for ClaimNonReceiptSepaEbaCtAutoReplies can be found here.
Sample code for RequestToModifyPaymentSepaEbaCtAutoReplies can be found here.

Please refer to general auto replies for more details.

SEPA-DIAS Credit Transfer

SDK Setup

Maven

<!-- Import the SEPA-DIAS-CT demo SDK-->
<dependency>
    <groupId>gr.datamation.mx</groupId>
    <artifactId>mx</artifactId>
    <version>23.17.0</version>
    <classifier>demo-sepa</classifier>
</dependency>

Gradle

implementation 'gr.datamation.mx:mx:23.17.0:demo-sepa@jar'

Please refer to General SDK Setup for more details.

Parse & Validate SEPA Message

In case you need to handle SEPA-DIAS-CT messages, there is a dedicated class for each message type.

//Initialize the message object
FIToFIPaymentStatusReport10BatchSepaDiasCt fIToFIPaymentStatusReport10 = new FIToFIPaymentStatusReport10BatchSepaDiasCt();
//Validate against the xml schema
ValidationErrorList validationErrorList = fIToFIPaymentStatusReport10.validateXML(new ByteArrayInputStream(validSepaDiasCtPacs002String.getBytes()));

//Fill the message with data from xml
fIToFIPaymentStatusReport10.parseXML(validSepaDiasCtPacs002String);
//Validate both the xml schema and rules
validationErrorList.addAll(fIToFIPaymentStatusReport10.validate());

if (validationErrorList.isEmpty()) {
    System.out.println(fIToFIPaymentStatusReport10.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Construct SEPA-DIAS-CT Message

//Initialize the message object
FIToFIPaymentStatusReport10BatchSepaDiasCt fIToFIPaymentStatusReport10 = new FIToFIPaymentStatusReport10BatchSepaDiasCt();

//We fill the elements of the message object using setters
fIToFIPaymentStatusReport10.getMessage().setGrpHdr(new GroupHeader91());
fIToFIPaymentStatusReport10.getMessage().getGrpHdr().setMsgId("1234");
//or setElement()
fIToFIPaymentStatusReport10.setElement("GrpHdr/MsgId", "1234");

//Perform validation
ValidationErrorList validationErrorList = fIToFIPaymentStatusReport10.validate();

if (validationErrorList.isEmpty()) {
    System.out.println(fIToFIPaymentStatusReport10.convertToXML()); //Get the generated xml
} else {
    System.out.println(validationErrorList);
}

Code samples

Parse and validate SEPA-DIAS-CT message

Supported SEPA-DIAS-CT Message Types

ISO20022 Message Library Object class Available in Demo
camt.027.001.07 ClaimNonReceipt07SepaDiasCt
camt.029.001.09 ResolutionOfInvestigation09SepaDiasCt
camt.056.001.08 FIToFIPaymentCancellationRequest08SepaDiasCt
camt.087.001.06 RequestToModifyPayment06SepaDiasCt
pacs.002.001.10 FIToFIPaymentStatusReport10BatchSepaDiasCt âś“
pacs.004.001.09 PaymentReturn09ReturnSepaDiasCt
pacs.008.001.08 FIToFICustomerCreditTransfer08FcSepaDiasCt
pacs.028.001.03 FIToFIPaymentStatusRequest03InquirySepaDiasCt
DIASSCTFH DiasSctFileHeader

Auto replies

Source Message Reply Message Source Class Reply Class AutoReplies Class
pacs.008.001.08 pacs.004.001.09 FIToFICustomerCreditTransfer08SepaDiasCt PaymentReturn09SepaDiasCt FIToFICustomerCreditTransferSepaDiasCtAutoReplies
pacs.008.001.08 camt.056.001.08 FIToFICustomerCreditTransfer08SepaDiasCt FIToFIPaymentCancellationRequest08SepaDiasCt FIToFICustomerCreditTransferSepaDiasCtAutoReplies
pacs.008.001.08 camt.027.001.07 FIToFICustomerCreditTransfer08SepaDiasCt ClaimNonReceipt07SepaDiasCt FIToFICustomerCreditTransferSepaDiasCtAutoReplies
pacs.008.001.08 camt.087.001.06 FIToFICustomerCreditTransfer08SepaDiasCt RequestToModifyPayment06SepaDiasCt FIToFICustomerCreditTransferSepaDiasCtAutoReplies
pacs.008.001.08 pacs.028.001.03 FIToFICustomerCreditTransfer08SepaDiasCt FIToFIPaymentStatusRequest03InquirySepaDiasCt FIToFICustomerCreditTransferSepaDiasCtAutoReplies
camt.056.001.08 camt.029.001.09 FIToFIPaymentCancellationRequest08SepaDiasCt ResolutionOfInvestigation09SepaDiasCt FIToFIPaymentCancellationRequestSepaDiasCtAutoReplies
camt.027.001.07 camt.029.001.09 ClaimNonReceipt07SepaDiasCt ResolutionOfInvestigation09SepaDiasCt ClaimNonReceiptSepaDiasCtAutoReplies
camt.087.001.06 camt.029.001.09 RequestToModifyPayment06SepaDiasCt ResolutionOfInvestigation09SepaDiasCt RequestToModifyPaymentSepaDiasCtAutoReplies

Sample code for FIToFICustomerCreditTransferSepaDiasCtAutoReplies can be found here.
Sample code for FIToFIPaymentCancellationRequestSepaDiasCtAutoReplies can be found here.
Sample code for ClaimNonReceiptSepaDiasCtAutoReplies can be found here. Sample code for RequestToModifyPaymentSepaDiasCtAutoReplies can be found here.

Please refer to general auto replies for more details.

SEPA-SIBS Credit Transfer

SDK Setup

Maven

<!-- Import the SEPA-SIBS-CT demo SDK-->
<dependency>
    <groupId>gr.datamation.mx</groupId>
    <artifactId>mx</artifactId>
    <version>23.17.0</version>
    <classifier>demo-sepa</classifier>
</dependency>

Gradle

implementation 'gr.datamation.mx:mx:23.17.0:demo-sepa@jar'

Please refer to General SDK Setup for more details.

Parse & Validate SEPA Message

In case you need to handle SEPA-SIBS-CT messages, there is a dedicated class for each message type.

//Initialize the message object
FIToFIPaymentStatusReport10SepaSibsCt fIToFIPaymentStatusReport10 = new FIToFIPaymentStatusReport10SepaSibsCt();
//Validate against the xml schema
ValidationErrorList validationErrorList = fIToFIPaymentStatusReport10.validateXML(new ByteArrayInputStream(validSepaSibsCtPacs002String.getBytes()));

//Fill the message with data from xml
fIToFIPaymentStatusReport10.parseXML(validSepaSibsCtPacs002String);
//Validate both the xml schema and rules
validationErrorList.addAll(fIToFIPaymentStatusReport10.validate());

if (validationErrorList.isEmpty()) {
System.out.println(fIToFIPaymentStatusReport10.convertToXML()); //Get the generated xml
} else {
System.out.println(validationErrorList);
}

Construct SEPA-SIBS-CT Message

//Initialize the message object
FIToFIPaymentStatusReport10SepaSibsCt fIToFIPaymentStatusReport10 = new FIToFIPaymentStatusReport10SepaSibsCt();
//We fill the elements with the message object using setters
fIToFIPaymentStatusReport10.getMessage().setGrpHdr(new SCTGroupHeader91());
fIToFIPaymentStatusReport10.getMessage().getGrpHdr().setMsgId("1234");
//or setElement()
fIToFIPaymentStatusReport10.setElement("GrpHdr/MsgId", "1234");

//Perform validation
ValidationErrorList validationErrorList = fIToFIPaymentStatusReport10.validate();

if (validationErrorList.isEmpty()) {
System.out.println(fIToFIPaymentStatusReport10.convertToXML()); //Get the generated xml
} else {
System.out.println(validationErrorList);
}

Code samples

Parse and validate SEPA-SIBS-CT message

Supported SEPA-SIBS-CT Message Types

ISO20022 Message Library Object class Available in Demo
camt.027.001.07 ClaimNonReceipt07SepaSibsCt
camt.029.001.09 ResolutionOfInvestigation09SepaSibsCt
camt.056.001.08 FIToFIPaymentCancellationRequest08SepaSibsCt
camt.087.001.06 RequestToModifyPayment06SepaSibsCt
pacs.002.001.10 FIToFIPaymentStatusReport10SepaSibsCt
pacs.004.001.09 PaymentReturn09SepaSibsCt
pacs.008.001.08 FIToFICustomerCreditTransfer08SepaSibsCt
pacs.028.001.03 FIToFIPaymentStatusRequest03SepaSibsCt
SCTCvfBlkCredTrf CvfBulkCreditTransferSepaSibsCt
SCTIcfBlkCredTrf IcfBulkCreditTransferSepaSibsCt
SCTIqfBlkCredTrf IqfBulkCreditTransferSepaSibsCt
SCTOqfBlkCredTrf OqfBulkCreditTransferSepaSibsCt
SCTPcfBlkCredTrf PcfBulkCreditTransferSepaSibsCt
SCTQvfBlkCredTrf QvfBulkCreditTransferSepaSibsCt
SCTRsfBlkCredTrf RsfBulkCreditTransferSepaSibsCt
SCTScfBlkCredTrf ScfBulkCreditTransferSepaSibsCt

Auto replies

Source Message Reply Message Source Class Reply Class AutoReplies Class
pacs.008.001.08 pacs.004.001.09 FIToFICustomerCreditTransfer08SepaSibsCt PaymentReturn09SepaSibsCt FIToFICustomerCreditTransferSepaSibsCtAutoReplies
pacs.008.001.08 camt.056.001.08 FIToFICustomerCreditTransfer08SepaSibsCt FIToFIPaymentCancellationRequest08SepaSibsCt FIToFICustomerCreditTransferSepaSibsCtAutoReplies
pacs.008.001.08 camt.027.001.07 FIToFICustomerCreditTransfer08SepaSibsCt ClaimNonReceipt07SepaSibsCt FIToFICustomerCreditTransferSepaSibsCtAutoReplies
pacs.008.001.08 camt.087.001.06 FIToFICustomerCreditTransfer08SepaSibsCt RequestToModifyPayment06SepaSibsCt FIToFICustomerCreditTransferSepaSibsCtAutoReplies
pacs.008.001.08 pacs.028.001.03 FIToFICustomerCreditTransfer08SepaSibsCt FIToFIPaymentStatusRequest03SepaSibsCt FIToFICustomerCreditTransferSepaSibsCtAutoReplies
camt.056.001.08 camt.029.001.09 FIToFIPaymentCancellationRequest08SepaSibsCt ResolutionOfInvestigation09SepaSibsCt FIToFIPaymentCancellationRequestSepaSibsCtAutoReplies
camt.027.001.07 camt.029.001.09 ClaimNonReceipt07SepaSibsCt ResolutionOfInvestigation09SepaSibsCt ClaimNonReceiptSepaSibsCtAutoReplies
camt.087.001.06 camt.029.001.09 RequestToModifyPayment06SepaSibsCt ResolutionOfInvestigation09SepaSibsCt RequestToModifyPaymentSepaSibsCtAutoReplies

Sample code for FIToFICustomerCreditTransferSepaSibsCtAutoReplies can be found here.
Sample code for FIToFIPaymentCancellationRequestSepaSibsCtAutoReplies can be found here.
Sample code for ClaimNonReceiptSepaSibsCtAutoReplies can be found here.
Sample code for RequestToModifyPaymentSepaEbaCtAutoReplies can be found here.

Please refer to general auto replies for more details.

SEPA-SIBS Direct Debit

SDK Setup

Maven

<!-- Import the SEPA-SIBS-CT demo SDK-->
<dependency>
    <groupId>gr.datamation.mx</groupId>
    <artifactId>mx</artifactId>
    <version>23.17.0</version>
    <classifier>demo-sepa</classifier>
</dependency>

Gradle

implementation 'gr.datamation.mx:mx:23.17.0:demo-sepa@jar'

Please refer to General SDK Setup for more details.

Parse & Validate SEPA Message

In case you need to handle SEPA-SIBS-DD messages, there is a dedicated class for each message type.

 //Initialize the message object
FIToFIPaymentStatusReport10S2SepaSibsDd fIToFIPaymentStatusReport10 = new FIToFIPaymentStatusReport10S2SepaSibsDd();
//Validate against the xml schema
ValidationErrorList validationErrorList = fIToFIPaymentStatusReport10.validateXML(new ByteArrayInputStream(validSepaSibsDdPacs002String.getBytes()));

//Fill the message with data from xml
fIToFIPaymentStatusReport10.parseXML(validSepaSibsDdPacs002String);
//Validate both the xml schema and rules
validationErrorList.addAll(fIToFIPaymentStatusReport10.validate());

if (validationErrorList.isEmpty()) {
System.out.println(fIToFIPaymentStatusReport10.convertToXML()); //Get the generated xml
} else {
System.out.println(validationErrorList);
}

Construct SEPA-SIBS-DD Message

//Initialize the message object
FIToFIPaymentStatusReport10S2SepaSibsDd fIToFIPaymentStatusReport10 = new FIToFIPaymentStatusReport10S2SepaSibsDd();
//We fill the elements with the message object using setters
fIToFIPaymentStatusReport10.getMessage().setGrpHdr(new SDDGroupHeader91());
fIToFIPaymentStatusReport10.getMessage().getGrpHdr().setMsgId("1234");
//or setElement()
fIToFIPaymentStatusReport10.setElement("GrpHdr/MsgId", "1234");

//Perform validation
ValidationErrorList validationErrorList = fIToFIPaymentStatusReport10.validate();

if (validationErrorList.isEmpty()) {
System.out.println(fIToFIPaymentStatusReport10.convertToXML()); //Get the generated xml
} else {
System.out.println(validationErrorList);
}

Code samples

Parse and validate SEPA-SIBS-DD message

Supported SEPA-SIBS-DD Message Types

ISO20022 Message Library Object class Available in Demo
camt.056.001.08 FIToFIPaymentCancellationRequest08SepaSibsDd
pacs.002.001.10 FIToFIPaymentStatusReport10SepaSibsDd
pacs.002.001.10S2 FIToFIPaymentStatusReport10S2SepaSibsDd
pacs.003.001.08 FIToFICustomerDirectDebit08SepaSibsDd
pacs.004.001.09 PaymentReturn09SepaSibsDd
pacs.007.001.09 FIToFIPaymentReversal09SepaSibsDd
MPEDDCdfBlkDirDeb MPEDDCdfBulkDirectDebit
MPEDDDnxBlkDirDeb MPEDDDnxBulkDirectDebit
MPEDDDrxBlkDirDeb MPEDDDrxBulkDirectDebit
MPEDDDvfBlkDirDeb MPEDDDvfBulkDirectDebit
MPEDDIdxBlkDirDeb MPEDDIdxBulkDirectDebit
MPEDDIrxBlkDirDeb MPEDDIrxBulkDirectDebit
MPEDDRsfBlkDirDeb MPEDDRsfBulkDirectDebit
MPEDDSdfBlkDirDeb MPEDDSdfBulkDirectDebit

Auto replies

Source Message Reply Message Source Class Reply Class AutoReplies Class
pacs.003.001.08 pacs.002.001.10 FIToFICustomerDirectDebit08SepaSibsDd FIToFIPaymentStatusReport10SepaSibsDd FIToFICustomerDirectDebitSepaSibsDdAutoReplies
pacs.003.001.08 pacs.004.001.09 FIToFICustomerDirectDebit08SepaSibsDd PaymentReturn09SepaSibsDd FIToFICustomerDirectDebitSepaSibsDdAutoReplies
pacs.003.001.08 pacs.007.001.09 FIToFICustomerDirectDebit08SepaSibsDd FIToFIPaymentReversal09SepaSibsDd FIToFICustomerDirectDebitSepaSibsDdAutoReplies
pacs.007.001.09 pacs.004.001.09 FIToFIPaymentReversal09SepaSibsDd PaymentReturn09SepaSibsDd FIToFIPaymentReversalSepaSibsDdAutoReplies

Sample code for FIToFICustomerDirectDebitSepaSibsDdAutoReplies can be found here.

Sample code for FIToFIPaymentReversalSepaSibsDdAutoReplies can be found here.

Please refer to general auto replies for more details.

More features are included in the paid version

Auto Replies

Additional Dependencies

In order to use auto-replies, the use of gson is required Maven

<dependency>
   <groupId>com.google.code.gson</groupId>
   <artifactId>gson</artifactId>
   <version>2.8.9</version>
</dependency>

The library supports the creation of reply message. For example, for a pacs.008 message, you can create a pacs.004 message.
The correspondent classes belong to gr.datamation.replies package and extends the CoreMessageAutoReplies abstract Class.
This class contains the abstract <R extends CoreMessage> R autoReply(R replyMessage, List<MsgReplyInfo> msgReplyInfo) method.
MsgReplyInfo contains information for the reply and is a list because some reply messages may contain many transactions.
For example, for a pacs.008.001.10, the class for replies should be FIToFICustomerCreditTransferAutoReplies that extends CoreMessageAutoReplies.
We initiate this class with the source message.
For a pacs.008.001.10, the initialization should be:

FIToFICustomerCreditTransfer10 pacs008 = new FIToFICustomerCreditTransfer10();
//fill the message object or parse from an xml
FIToFICustomerCreditTransferAutoReplies<FIToFICustomerCreditTransfer10, PaymentReturn11> pacs008Replies = 
    new FIToFICustomerCreditTransferAutoReplies<>(pacs008);

If we want to create a pacs.004.001.11 reply for this pacs.008, we should call the autoReply() like this:

MsgReplyInfo msgReplyInfo = new MsgReplyInfo();
ReasonInformation reasonInformation = new ReasonInformation();
msgReplyInfo.setRsnInf(reasonInformation);

reasonInformation.setType(ReasonInformation.Type.CD);
reasonInformation.setValue("AC01");
reasonInformation.setAddtlInf(Collections.singletonList("Additional info"));

msgReplyInfo.setOrgnlInstrId("instrId");
msgReplyInfo.setReplyId("pacs008Reply");
msgReplyInfo.setIntrBkSttlmDt(new Date());

ChargesInformation chargesInformation = new ChargesInformation();
chargesInformation.setAmount(new BigDecimal("2.00"));
chargesInformation.setAgentBic("AAAAGB2L");
msgReplyInfo.setChargesInformation(Collections.singletonList(chargesInformation));

msgReplyInfo.setChargeBearer("SLEV");

PaymentReturn11 pacs004 = pacs008Replies.autoReply(new PaymentReturn11(), Collections.singletonList(msgReplyInfo));

The following replies for generic iso20022 messages are supported:

Source Message Reply Message Source Class Reply Class AutoReplies Class
pacs.008.001.xx pacs.004.001.xx FIToFICustomerCreditTransferXX PaymentReturnXX FIToFICustomerCreditTransferAutoReplies
pacs.008.001.xx camt.056.001.xx FIToFICustomerCreditTransferXX FIToFIPaymentCancellationRequestXX FIToFICustomerCreditTransferAutoReplies
pacs.009.001.xx pacs.004.001.xx FinancialInstitutionCreditTransferXX PaymentReturnXX FinancialInstitutionCreditTransferAutoReplies
pacs.009.001.xx camt.056.001.xx FinancialInstitutionCreditTransferXX FIToFIPaymentCancellationRequestXX FinancialInstitutionCreditTransferAutoReplies
camt.056.001.xx camt.029.001.xx FIToFIPaymentCancellationRequestXX ResolutionOfInvestigationXX FIToFIPaymentCancellationRequestAutoReplies

* Where XX represents the version of the message.
Sample code for FIToFICustomerCreditTransferAutoReplies can be found here.
Sample code for FinancialInstitutionCreditTransferAutoReplies can be found here.
Sample code for FIToFIPaymentCancellationRequestAutoReplies can be found here.

Universal Confirmations

You can create Universal Confirmations trck.001.001.02 for a pacs.008 messages. It is the equivalent of creating MT199 Universal Confirmation for an MT103.
First, you need to initiate FIToFICustomerCreditTransferAutoReplies class since the method for Universal Confirmation exists there.
A Universal Confirmations message is represented by UniversalConfirmationsMessage and consists of the ApplicationHeader(head.001.001.02) and the Document(trck.001.001.02).
Available statuses are: ACCC, ACSP and RJCT.
Below you can see how to use it.

//initiate a UniversalConfirmationsMessage instance
String status = "ACSP";
ReasonInformation rsnInf1 = new ReasonInformation();
rsnInf1.setValue("G001");
MsgReplyInfo msgReplyInfo1 = new MsgReplyInfo();
msgReplyInfo1.setRsnInf(rsnInf1);
msgReplyInfo1.setOrgnlInstrId("BBBB/150928-CCT/JPY/123/0");
msgReplyInfo1.setChargeBearer("CRED"); //optional
msgReplyInfo1.setChargesInformation(new ArrayList<>()); //optional
msgReplyInfo1.getChargesInformation().add(new ChargesInformation()); //optional
msgReplyInfo1.getChargesInformation().get(0).setAmount(new BigDecimal("1")); //optional

//OR
String status = "ACCC";
MsgReplyInfo msgReplyInfo1 = new MsgReplyInfo();
msgReplyInfo1.setOrgnlInstrId("BBBB/150928-CCT/JPY/123/0");

//OR
String status = "RJCT";
ReasonInformation rsnInf1 = new ReasonInformation();
rsnInf1.setValue("AM06");
MsgReplyInfo msgReplyInfo1 = new MsgReplyInfo();
msgReplyInfo1.setRsnInf(rsnInf1);
msgReplyInfo1.setOrgnlInstrId("BBBB/150928-CCT/JPY/123/0");
        
UniversalConfirmationsMessage universalConfirmationsMessage =
   new UniversalConfirmationsMessage<>(new BusinessApplicationHeader02(), new PaymentStatusTrackerUpdate02UniversalConfirmations());

//initiate the Reply Class instance
UniversalConfirmationsAutoReplies<FIToFICustomerCreditTransfer08> universalConfirmationsAutoReplies =
   new UniversalConfirmationsAutoReplies<>(pacs008);

//call method that generates the universal confirmation
universalConfirmationsAutoReplies.autoReply(universalConfirmationsMessage, Arrays.asList(msgReplyInfo1), status);

See more provided SDKs on ISO20022 and SWIFT MT here