Commit d30d246c by wuzhe

camt10700101

parent 6df6ef3d
......@@ -33,6 +33,8 @@ public class Mx2MtConstants {
public static final String MT_TYPE_103 = "103";
public static final String MT_TYPE_110 = "110";
public static final String MT_TYPE_202 = "202";
public static final String MT_TYPE_205 = "205";
......
package com.brilliance.swift.mx2mt;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.context.Context;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.mt103.Mx2Mt103Creator;
import com.brilliance.swift.mx2mt.mt103Retn.Mx2Mt103RetnCreator;
import com.brilliance.swift.mx2mt.mt110.Mx2Mt110Creator;
import com.brilliance.swift.mx2mt.mt192292.Mx2Mtn92Creator;
import com.brilliance.swift.mx2mt.mt196296.Mx2Mtn96Creator;
import com.brilliance.swift.mx2mt.mt202Retn.Mx2Mt202RetnCreator;
......@@ -122,6 +122,8 @@ public class Mx2MtCreatorManager {
return new Mx2Mt920Creator();
} else if("camt058001".equals(messageType)){
return new Mx2Mt292Creator();
} else if("camt107001".equals(messageType)){
return new Mx2Mt110Creator();
}
else {
throw new SwiftException("Invalid message type");
......
package com.brilliance.swift.mx2mt.mt110;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.mx2mt.AbstractMx2MtCreator;
import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.mx2mt.Mx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.mt110.impl.*;
import com.brilliance.swift.util.XmlUtil;
import org.dom4j.Document;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class Mx2Mt110Creator extends AbstractMx2MtCreator {
@Override
public void preProcess() {
super.preProcess();
Document document = (Document)context.get(Mx2MtContextIdentifier.MX_XMl_DOCUMENT, true);
Map<String, String> parentElementMaps = XmlUtil.getParentElementMaps(document);
context.set(Mx2MtContextIdentifier.APPHDR_PARENT_ELEMENT_NAME, parentElementMaps.get("AppHdr"));
context.set(Mx2MtContextIdentifier.GRPHDR_PARENT_ELEMENT_NAME, parentElementMaps.get("GrpHdr"));
context.set(Mx2MtContextIdentifier.BODY_PARENT_ELEMENT_NAME, parentElementMaps.get("Chq"));
}
@Override
public List<Mx2MtTagsGenerate> getGenerateTagList() {
List<Mx2MtTagsGenerate> fieldsGenerateList = new ArrayList<>();
fieldsGenerateList.add(new Field20Generate());
fieldsGenerateList.add(new Field21Generate());
fieldsGenerateList.add(new Field30Generate());
fieldsGenerateList.add(new Field32aGenerate());
fieldsGenerateList.add(new Field50aGenerate());
fieldsGenerateList.add(new Field52aGenerate());
fieldsGenerateList.add(new Field53BGenerate());
fieldsGenerateList.add(new Field59Generate());
return fieldsGenerateList;
}
@Override
protected String getMtType() {
return Mx2MtConstants.MT_TYPE_110;
}
}
package com.brilliance.swift.mx2mt.mt110.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
* GrpHdr.MsgId
* AppHdr.BizMsgIdr
*/
public class Field20Generate extends AbstractMx2MtTagsGenerate {
private static String name = "20";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String messageId = getXmlNodeValue(grpHdrParentElementName, document, "GrpHdr.MsgId");
if (StringUtil.isEmpty(messageId)) {
messageId = getXmlNodeValue(appHdrParentElementName, document, "AppHdr.BizMsgIdr");
}
if (StringUtil.isNotEmpty(messageId)) {
if (messageId.length() > 16) {
buildSTErrorInfo(13, "Block4/:20:", messageId);
messageId = messageId.substring(0, 15) + "+";
}
tags.add(new Tag(name, messageId));
}
}
}
package com.brilliance.swift.mx2mt.mt110.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
* 取值逻辑:
* field21 = OrgnlNtfctn.OrgnlNtfctnRef.OrgnlItm.OrgnlItmId,如果长度大于16,field21 = field21截取15位 + 最后一位用+代替
* 如果filed21 以/开始或者以/结束或者包含//,field21=NONREF
* 否则保持原值不变
*/
public class Field21Generate extends AbstractMx2MtTagsGenerate {
private static String name = "21";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String chqNb = getXmlNodeValue(bodyHdrParentElementName, document, "Chq.ChqNb");
if (StringUtil.isNotEmpty(chqNb)) {
if (chqNb.length() > 16) {
buildSTErrorInfo(13, "Block4/:21:", chqNb);
chqNb = chqNb.substring(0, 15) + "+";
}
tags.add(new Tag(name, chqNb));
}
}
}
package com.brilliance.swift.mx2mt.mt110.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.util.List;
/**
*
*/
public class Field30Generate extends AbstractMx2MtTagsGenerate {
private static String name = "30";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
boolean flag30 = false;
String mtIsseDtStr = "";
String isseDtStr = getXmlNodeValue(bodyHdrParentElementName, document, "Chq.IsseDt");
if (StringUtil.isNotEmpty(isseDtStr)) {
try {
XMLGregorianCalendar valDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(isseDtStr);
mtIsseDtStr = DateUtil.format(valDt, "yyMMdd");
flag30 = true;
} catch (DatatypeConfigurationException e) {
throw new SwiftException(e.getMessage());
}
}
if(flag30){
tags.add(new Tag(name, mtIsseDtStr));
}
}
}
package com.brilliance.swift.mx2mt.mt110.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.util.DateUtil;
import com.brilliance.swift.util.NumberUtil;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.math.BigDecimal;
import java.util.List;
/**
*/
public class Field32aGenerate extends AbstractMx2MtTagsGenerate {
private static String name_32A = "32A";
private static String name_32B = "32B";
@Override
public void tagGenerate() throws SwiftException {
try {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String cheVaDt = "";
String cheAmt = "";
String cheAmtCcy = "";
String cheValDtValue = getXmlNodeValue(bodyHdrParentElementName, document, "Chq.ValDt.Dt");
String amt = getXmlNodeValue(bodyHdrParentElementName, document, "Chq.Amt");
String ccy = getXmlNodeValue(bodyHdrParentElementName, document, "Chq.Amt@Ccy");
if ("XAU".equalsIgnoreCase(ccy) || "XAG".equalsIgnoreCase(ccy)
|| "XPD".equalsIgnoreCase(ccy) || "XPT".equalsIgnoreCase(ccy)) {
buildSTErrorInfo(63, bodyHdrParentElementName+".Chq.Amt", ccy);
}
if (StringUtil.isNotEmpty(amt) && StringUtil.isNotEmpty(ccy)) {
cheAmt = NumberUtil.formatAmt(new BigDecimal(amt), ccy);
cheAmtCcy = ccy;
}
if (StringUtil.isNotEmpty(cheValDtValue)) {
XMLGregorianCalendar intrBkSttlmDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(cheValDtValue);
cheVaDt = DateUtil.format(intrBkSttlmDt, "yyMMdd");
tags.add(new Tag(name_32A, cheVaDt+cheAmtCcy+cheAmt));
}else {
tags.add(new Tag(name_32B, cheAmtCcy+cheAmt));
}
} catch (DatatypeConfigurationException e) {
throw new SwiftException(e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt110.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
*
*/
public class Field50aGenerate extends AbstractMx2MtTagsGenerate {
private static String name_50A = "50A";
private static String name_50F = "50F";
private static String name_50K = "50K";
@Override
public void tagGenerate() throws SwiftException {
context.set(Mx2MtContextIdentifier.MX_TO_MT_ERROR_LOCATION, "Block4/50a");
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String cheBIC = getXmlNodeValue(bodyHdrParentElementName, document, "Chq.Pyer.Id.OrgId.AnyBIC");
String chePyerAcct = bodyHdrParentElementName + ".Chq.PyerAcct";
String chePyerPstCtry = getXmlNodeValue(bodyHdrParentElementName, document, "Chq.Pyer.PstlAdr.Ctry");
String payerPath = bodyHdrParentElementName + ".Chq.Pyer";
String orgidOthr = getXmlNodeValue(bodyHdrParentElementName, document, "Chq.Pyer.Id.OrgId.Othr");
String prvtidOthr = getXmlNodeValue(bodyHdrParentElementName, document, "Chq.Pyer.Id.PrvtId.Othr");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "Chq.Pyer.PstlAdr.AdrLine");
String pstladrAdrline = "";
String pyerNm = getXmlNodeValue(bodyHdrParentElementName, document, "Chq.Pyer.Nm");
String account = "";
String nameAddress = "";
if (addressLineCount > 0){
pstladrAdrline = getXmlNodeValue(bodyHdrParentElementName, document, "Chq.Pyer.PstlAdr.AdrLine(0)");
}
if (StringUtil.isNotEmpty(cheBIC)) {
String bicCode = mx_to_mtAnyBIC(payerPath);
if (StringUtil.isNotEmpty(chePyerAcct)){
account = mx_to_mtAccount(bodyHdrParentElementName + ".Chq.PyerAcct");
}
tags.add(new Tag(name_50A, account + Mx2MtConstants.NEW_LINE + bicCode));
} else if (StringUtil.isNotEmpty(chePyerPstCtry)){
nameAddress = mx_to_mtFATFNameAndAddress(payerPath);
if (StringUtil.isNotEmpty(chePyerAcct)) {
account = mx_to_mtAccount(bodyHdrParentElementName + ".Chq.PyerAcct");
} else if (StringUtil.isNotEmpty(orgidOthr) || StringUtil.isNotEmpty(prvtidOthr)){
account = mx_to_mtFATFIdentification(payerPath, false);
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
if (StringUtil.isEmpty(account)) {
account = "/" + Mx2MtConstants.MX_TO_MT_DEFAULT_VALUE;
}
tags.add(new Tag(name_50F, account + Mx2MtConstants.NEW_LINE + nameAddress));
} else if (addressLineCount > 0 && !Mx2MtConstants.MX_TO_MT_DEFAULT_VALUE.equals(pstladrAdrline)){
boolean structuredAddressIndicator = mx_to_mtAddressLineType(payerPath);
if (structuredAddressIndicator) {
nameAddress = mx_to_mtFATFNameAndAddress2(payerPath);
if (StringUtil.isNotEmpty(chePyerAcct)) {
account = mx_to_mtAccount(bodyHdrParentElementName + ".Chq.PyerAcct");
} else if (StringUtil.isNotEmpty(orgidOthr) || StringUtil.isNotEmpty(prvtidOthr)){
account = mx_to_mtFATFIdentification(payerPath, true);
}
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
if (StringUtil.isEmpty(account)) {
account = "/" + Mx2MtConstants.MX_TO_MT_DEFAULT_VALUE;
}
tags.add(new Tag(name_50F, account + Mx2MtConstants.NEW_LINE + nameAddress));
} else {
nameAddress = mx_to_mtPartyNameAndUnstructuredAddress(payerPath);
if (StringUtil.isNotEmpty(chePyerAcct)){
account = mx_to_mtAccount(bodyHdrParentElementName + ".Chq.PyerAcct");
}
tags.add(new Tag(name_50K, account + Mx2MtConstants.NEW_LINE + nameAddress));
}
}else if (StringUtil.isNotEmpty(pyerNm)){
nameAddress = mx_to_mtPartyNameAndUnstructuredAddress(payerPath);
if (StringUtil.isNotEmpty(chePyerAcct)){
account = mx_to_mtAccount(bodyHdrParentElementName + ".Chq.PyerAcct");
}
tags.add(new Tag(name_50K, account + Mx2MtConstants.NEW_LINE + nameAddress));
}
}
}
package com.brilliance.swift.mx2mt.mt110.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
*
*/
public class Field52aGenerate extends AbstractMx2MtTagsGenerate {
private static String name_52A = "52A";
private static String name_52B = "52B";
private static String name_52D = "52D";
private static String name = "52";
@Override
public void tagGenerate() throws SwiftException {
context.set(Mx2MtContextIdentifier.MX_TO_MT_ERROR_LOCATION, "Block4/52a");
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String cheDrwrAgt = getXmlNodeValue(bodyHdrParentElementName, document, "Chq.DrwrAgt");
String cheDrwrAgtAcct = bodyHdrParentElementName + ".Chq.DrwrAgtAcct";
String account = "";
if (StringUtil.isEmpty(cheDrwrAgt)){
account = mx_to_mtAccount(bodyHdrParentElementName + ".Chq.DrwrAgtAcct");
tags.add(new Tag(name_52B, account));
} else {
Tag tag = mx_to_mtAgentGeneric(name, cheDrwrAgt, cheDrwrAgtAcct, true, false, false, null);
if (tag != null) {
if (name_52D.equals(tag.getName())) {
String value = mx_to_mtStartingLineCharacter(tag.getValue(), "Block4/:" + name_52D + ":");
tag.setValue(value);
}
tags.add(tag);
}
}
}
}
package com.brilliance.swift.mx2mt.mt110.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
*
*/
public class Field53BGenerate extends AbstractMx2MtTagsGenerate {
private static String name_53B = "53B";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String accountPath = bodyHdrParentElementName +".Chq.DrwrAgtAcct";
String account = mx_to_mtSettlementAccount("INDA", accountPath);
if (StringUtil.isNotEmpty(account)) {
tags.add(new Tag(name_53B, account));
}
}
}
package com.brilliance.swift.mx2mt.mt110.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.util.StringUtil;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.Tag;
import java.util.List;
/**
*
*/
public class Field59Generate extends AbstractMx2MtTagsGenerate {
private static String name = "59";
private static String name_59F = "59F";
@Override
public void tagGenerate() throws SwiftException {
context.set(Mx2MtContextIdentifier.MX_TO_MT_ERROR_LOCATION, "Block4/59a");
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String ptsCtry = getXmlNodeValue(bodyHdrParentElementName, document, "Chq.Pyee.PstlAdr.Ctry");
int chePyeePstLine = getXmlNodeCounts(bodyHdrParentElementName, document, "Chq.Pyee.PstlAdr.AdrLine");
String partyPath = bodyHdrParentElementName + ".Chq.Pyee";
if (StringUtil.isNotEmpty(ptsCtry)){
String nameAddress = mx_to_mtPartyNameAndAddressLEI1(partyPath);
tags.add(new Tag(name_59F, nameAddress));
} else if (chePyeePstLine>0) {
boolean structuredAddressIndicator = mx_to_mtAddressLineType(partyPath);
if (structuredAddressIndicator){
String nameAddress = mx_to_mtPartyNameAndAddressLEI2(partyPath, "3/");
tags.add(new Tag(name_59F, nameAddress));
} else {
String nameAddress = mx_to_mtPartyNameAndUnstructuredAddress(partyPath);
tags.add(new Tag(name, nameAddress));
}
}
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<RequestPayload>
<AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02">
<Fr>
<FIId>
<FinInstnId>
<BICFI>HELSFIHHXXX</BICFI>
</FinInstnId>
</FIId>
</Fr>
<To>
<FIId>
<FinInstnId>
<BICFI>NDEAFIHHXXX</BICFI>
</FinInstnId>
</FIId>
</To>
<BizMsgIdr>CNCL-ID001</BizMsgIdr>
<MsgDefIdr>camt.107.001.01</MsgDefIdr>
<BizSvc>swift.cbprplus.02</BizSvc>
<CreDt>2022-07-22T10:17:51.619+08:00</CreDt>
<PssblDplct>false</PssblDplct>
<Prty>NORM</Prty>
</AppHdr>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.107.001.01">
<ChqPresntmntNtfctn>
<GrpHdr>
<MsgId>CSE-001</MsgId>
<CreDtTm>2022-07-22T10:17:51.619+08:00</CreDtTm>
<NbOfChqs>1</NbOfChqs>
</GrpHdr>
<Chq>
<InstrId>CNCL-ID001</InstrId>
<ChqNb>EEE</ChqNb>
<IsseDt>2022-08-22T10:17:51.619+08:00</IsseDt>
<Amt Ccy="USD">123</Amt>
<!--32A-->
<ValDt>
<Dt>2022-08-22T10:17:51.619+08:00</Dt>
</ValDt>
<Pyer>
<Nm>QWE</Nm>
<!--50A-->
<Id>
<OrgId>
<AnyBIC>ASD123123123123123123</AnyBIC>
</OrgId>
</Id>
<!--50F-->
<!-- <PstlAdr>-->
<!-- <Ctry>WEQWE</Ctry>-->
<!-- </PstlAdr>-->
</Pyer>
<PyerAcct>
<Id>
<IBAN>SSSS</IBAN>
</Id>
</PyerAcct>
<DrwrAgtAcct>
<Id>
<!--52B-->
<IBAN>OBHHIO</IBAN>
</Id>
</DrwrAgtAcct>
<Pyee>
<Nm>EWQ</Nm>
<PstlAdr>
<Ctry>OOOOO</Ctry>
<AdrLine>PPPPPP</AdrLine>
</PstlAdr>
</Pyee>
</Chq>
</ChqPresntmntNtfctn>
</Document>
</RequestPayload>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Legal Notices
SWIFT SCRL@2016. All rights reserved.
This schema is a component of MyStandards, the SWIFT collaborative Web application used to manage
standards definitions and industry usage.
This is a licensed product, which may only be used and distributed in accordance with MyStandards License
Terms as specified in MyStandards Service Description and the related Terms of Use.
Unless otherwise agreed in writing with SWIFT SCRL, the user has no right to:
- authorise external end users to use this component for other purposes than their internal use.
- remove, alter, cover, obfuscate or cancel from view any copyright or other proprietary rights notices appearing in this physical medium.
- re-sell or authorise another party e.g. software and service providers, to re-sell this component.
This component is provided 'AS IS'. SWIFT does not give and excludes any express or implied warranties
with respect to this component such as but not limited to any guarantee as to its quality, supply or availability.
Any and all rights, including title, ownership rights, copyright, trademark, patents, and any other intellectual
property rights of whatever nature in this component will remain the exclusive property of SWIFT or its
licensors.
Trademarks
SWIFT is the trade name of S.W.I.F.T. SCRL.
The following are registered trademarks of SWIFT: the SWIFT logo, SWIFT, SWIFTNet, SWIFTReady, Accord, Sibos, 3SKey, Innotribe, the Standards Forum logo, MyStandards, and SWIFT Institute.
Other product, service, or company names in this publication are trade names, trademarks, or registered trademarks of their respective owners.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Group: Cross Border Payments and Reporting Plus (CBPR+)
Collection: CBPRPlus_ISO 20022_Portfolio_Release 2023
Usage Guideline: CBPRPlus-camt.107.001.01_ChequePresentmentNotification
Base Message: camt.107.001.01
Date of publication: 16 December 2022
URL: https://www2.swift.com/mystandards/#/mp/mx/_UQsRECZ9EeyFELcOlo2Q4w/_K4BmoCZ_EeyFELcOlo2Q4w
Description: Principles:
1A) AGENTS IDENTIFICATION - Textual Rules
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-> If BICFI is present, then (Name & Postal Address) is NOT allowed (ClearingSystemMemberIdentification and LEI may complement) – However, in case of conflicting information, the BICFI will always take precedence.
-> If BICFI is absent, (Name & Postal Address) OR [(Name & Postal Address) and ClearingSystemMemberIdentification] must be present.
Exception: If BICFI is absent, whenever Debtor Agent, Creditor Agent and all agents in between are located within the same country, the clearing code only may be used.
1B. PARTY IDENTIFICATION - Textual Rules
-> If AnyBIC is present, then (Name and Postal Address) is NOT allowed (other elements remain optional) - However, in case of conflicting information, AnyBIC will always take precedence.
-> If Name is present, it is recommended to use Postal Address.
2) Character Set:
All proprietary and Text fields EXCLUDING Name and Address for all actors and Related Remittance Information and Remittance are limited to the FIN-X-Character set.
All Name and Address for all actors, Related Remittance Information and Remittance Information (structured and unstructured), Email Address where included as part of a proxy element are extended to support the following additional characters:
!#$%&*=^_`{|}~";<>@[\]
< is replaced with &lt;
> is replaced with &gt;
Generated by the MyStandards web platform [https://www.swift.com/mystandards] on 2023-06-19T13:58:33+00:00
-->
<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:camt.107.001.01" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:iso:std:iso:20022:tech:xsd:camt.107.001.01">
<xs:element name="Document" type="Document"/>
<xs:complexType name="AccountIdentification4Choice__1">
<xs:choice>
<xs:element name="IBAN" type="IBAN2007Identifier"/>
<xs:element name="Othr" type="GenericAccountIdentification1__1"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="AccountSchemeName1Choice__1">
<xs:choice>
<xs:element name="Cd" type="ExternalAccountIdentification1Code"/>
<xs:element name="Prtry" type="CBPR_RestrictedFINXMax35Text"/>
</xs:choice>
</xs:complexType>
<xs:simpleType name="ActiveCurrencyCode">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{3,3}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ActiveOrHistoricCurrencyCode">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{3,3}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="AnyBICDec2014Identifier">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z0-9]{4,4}[A-Z]{2,2}[A-Z0-9]{2,2}([A-Z0-9]{3,3}){0,1}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="BICFIDec2014Identifier">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z0-9]{4,4}[A-Z]{2,2}[A-Z0-9]{2,2}([A-Z0-9]{3,3}){0,1}"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="BranchAndFinancialInstitutionIdentification6__1">
<xs:sequence>
<xs:element name="FinInstnId" type="FinancialInstitutionIdentification18__1"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="CBPR_Amount_SimpleType">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="5"/>
<xs:totalDigits value="14"/>
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="CBPR_Amount">
<xs:simpleContent>
<xs:extension base="CBPR_Amount_SimpleType">
<xs:attribute name="Ccy" type="ActiveCurrencyCode" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="CBPR_DateTime">
<xs:restriction base="xs:dateTime">
<xs:pattern value=".*(\+|-)((0[0-9])|(1[0-3])):[0-5][0-9]"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CBPR_RestrictedFINXMax140Text_Extended">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9a-zA-Z/\-\?:\(\)\.,'\+ !#$%&amp;\*=^_`\{\|\}~&quot;;&lt;&gt;@\[\\\]]+"/>
<xs:minLength value="1"/>
<xs:maxLength value="140"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CBPR_RestrictedFINXMax16Text">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9a-zA-Z/\-\?:\(\)\.,'\+ ]+"/>
<xs:minLength value="1"/>
<xs:maxLength value="16"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CBPR_RestrictedFINXMax16Text_Extended">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9a-zA-Z/\-\?:\(\)\.,'\+ !#$%&amp;\*=^_`\{\|\}~&quot;;&lt;&gt;@\[\\\]]+"/>
<xs:minLength value="1"/>
<xs:maxLength value="16"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CBPR_RestrictedFINXMax28Text">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9a-zA-Z/\-\?:\(\)\.,'\+ ]+"/>
<xs:minLength value="1"/>
<xs:maxLength value="28"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CBPR_RestrictedFINXMax320Text_Extended">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9a-zA-Z/\-\?:\(\)\.,'\+ !#$%&amp;\*=^_`\{\|\}~&quot;;&lt;&gt;@\[\\\]]+"/>
<xs:minLength value="1"/>
<xs:maxLength value="320"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CBPR_RestrictedFINXMax34Text">
<xs:restriction base="xs:string">
<xs:pattern value="([0-9a-zA-Z\-\?:\(\)\.,'\+ ]([0-9a-zA-Z\-\?:\(\)\.,'\+ ]*(/[0-9a-zA-Z\-\?:\(\)\.,'\+ ])?)*)"/>
<xs:minLength value="1"/>
<xs:maxLength value="34"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CBPR_RestrictedFINXMax35Text">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9a-zA-Z/\-\?:\(\)\.,'\+ ]+"/>
<xs:minLength value="1"/>
<xs:maxLength value="35"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CBPR_RestrictedFINXMax35Text_Extended">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9a-zA-Z/\-\?:\(\)\.,'\+ !#$%&amp;\*=^_`\{\|\}~&quot;;&lt;&gt;@\[\\\]]+"/>
<xs:minLength value="1"/>
<xs:maxLength value="35"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CBPR_RestrictedFINXMax70Text">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9a-zA-Z/\-\?:\(\)\.,'\+ ]+"/>
<xs:minLength value="1"/>
<xs:maxLength value="70"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="CBPR_RestrictedFINXMax70Text_Extended">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9a-zA-Z/\-\?:\(\)\.,'\+ !#$%&amp;\*=^_`\{\|\}~&quot;;&lt;&gt;@\[\\\]]+"/>
<xs:minLength value="1"/>
<xs:maxLength value="70"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="CashAccount40__1">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="Id" type="AccountIdentification4Choice__1"/>
<xs:element maxOccurs="1" minOccurs="0" name="Tp" type="CashAccountType2Choice__1"/>
<xs:element maxOccurs="1" minOccurs="0" name="Ccy" type="ActiveOrHistoricCurrencyCode"/>
<xs:element maxOccurs="1" minOccurs="0" name="Nm" type="CBPR_RestrictedFINXMax70Text"/>
<xs:element maxOccurs="1" minOccurs="0" name="Prxy" type="ProxyAccountIdentification1__1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CashAccountType2Choice__1">
<xs:choice>
<xs:element name="Cd" type="ExternalCashAccountType1Code"/>
<xs:element name="Prtry" type="CBPR_RestrictedFINXMax35Text"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="Cheque13__1">
<xs:sequence>
<xs:element name="InstrId" type="CBPR_RestrictedFINXMax35Text"/>
<xs:element name="ChqNb" type="CBPR_RestrictedFINXMax16Text"/>
<xs:element name="IsseDt" type="ISODate"/>
<xs:element maxOccurs="1" minOccurs="0" name="StlDt" type="ISODate"/>
<xs:element name="Amt" type="CBPR_Amount"/>
<xs:element maxOccurs="1" minOccurs="0" name="ValDt" type="DateAndDateTime2Choice__1"/>
<xs:element name="Pyer" type="PartyIdentification135__1"/>
<xs:element maxOccurs="1" minOccurs="0" name="PyerAcct" type="CashAccount40__1"/>
<xs:element maxOccurs="1" minOccurs="0" name="DrwrAgt" type="BranchAndFinancialInstitutionIdentification6__1"/>
<xs:element maxOccurs="1" minOccurs="0" name="DrwrAgtAcct" type="CashAccount40__1"/>
<xs:element name="Pyee" type="PartyIdentification135__2"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ChequePresentmentNotificationV01">
<xs:sequence>
<xs:element name="GrpHdr" type="GroupHeader103__1"/>
<xs:element name="Chq" type="Cheque13__1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ClearingSystemIdentification2Choice__1">
<xs:choice>
<xs:element name="Cd" type="ExternalClearingSystemIdentification1Code"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="ClearingSystemMemberIdentification2__1">
<xs:sequence>
<xs:element name="ClrSysId" type="ClearingSystemIdentification2Choice__1"/>
<xs:element name="MmbId" type="CBPR_RestrictedFINXMax28Text"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="CountryCode">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{2,2}"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="DateAndDateTime2Choice__1">
<xs:choice>
<xs:element name="Dt" type="ISODate"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="DateAndPlaceOfBirth1__1">
<xs:sequence>
<xs:element name="BirthDt" type="ISODate"/>
<xs:element maxOccurs="1" minOccurs="0" name="PrvcOfBirth" type="CBPR_RestrictedFINXMax35Text_Extended"/>
<xs:element name="CityOfBirth" type="CBPR_RestrictedFINXMax35Text_Extended"/>
<xs:element name="CtryOfBirth" type="CountryCode"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Document">
<xs:sequence>
<xs:element name="ChqPresntmntNtfctn" type="ChequePresentmentNotificationV01"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="ExternalAccountIdentification1Code">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="4"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ExternalCashAccountType1Code">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="4"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ExternalClearingSystemIdentification1Code">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="5"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ExternalOrganisationIdentification1Code">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="4"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ExternalPersonIdentification1Code">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="4"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ExternalProxyAccountType1Code">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="4"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="FinancialInstitutionIdentification18__1">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="BICFI" type="BICFIDec2014Identifier"/>
<xs:element maxOccurs="1" minOccurs="0" name="ClrSysMmbId" type="ClearingSystemMemberIdentification2__1"/>
<xs:element maxOccurs="1" minOccurs="0" name="LEI" type="LEIIdentifier"/>
<xs:element maxOccurs="1" minOccurs="0" name="Nm" type="CBPR_RestrictedFINXMax140Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="PstlAdr" type="PostalAddress24__1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GenericAccountIdentification1__1">
<xs:sequence>
<xs:element name="Id" type="CBPR_RestrictedFINXMax34Text"/>
<xs:element maxOccurs="1" minOccurs="0" name="SchmeNm" type="AccountSchemeName1Choice__1"/>
<xs:element maxOccurs="1" minOccurs="0" name="Issr" type="CBPR_RestrictedFINXMax35Text"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GenericOrganisationIdentification1__1">
<xs:sequence>
<xs:element name="Id" type="CBPR_RestrictedFINXMax35Text"/>
<xs:element maxOccurs="1" minOccurs="0" name="SchmeNm" type="OrganisationIdentificationSchemeName1Choice__1"/>
<xs:element maxOccurs="1" minOccurs="0" name="Issr" type="CBPR_RestrictedFINXMax35Text"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GenericPersonIdentification1__1">
<xs:sequence>
<xs:element name="Id" type="CBPR_RestrictedFINXMax35Text"/>
<xs:element maxOccurs="1" minOccurs="0" name="SchmeNm" type="PersonIdentificationSchemeName1Choice__1"/>
<xs:element maxOccurs="1" minOccurs="0" name="Issr" type="CBPR_RestrictedFINXMax35Text"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GroupHeader103__1">
<xs:sequence>
<xs:element name="MsgId" type="CBPR_RestrictedFINXMax16Text"/>
<xs:element name="CreDtTm" type="CBPR_DateTime"/>
<xs:element name="NbOfChqs" type="Max15NumericText_fixed"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="IBAN2007Identifier">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ISODate">
<xs:restriction base="xs:date"/>
</xs:simpleType>
<xs:simpleType name="LEIIdentifier">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z0-9]{18,18}[0-9]{2,2}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Max15NumericText_fixed">
<xs:restriction base="xs:string">
<xs:enumeration value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Max35Text">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="35"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="OrganisationIdentification29__1">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="AnyBIC" type="AnyBICDec2014Identifier"/>
<xs:element maxOccurs="1" minOccurs="0" name="LEI" type="LEIIdentifier"/>
<xs:element maxOccurs="2" minOccurs="0" name="Othr" type="GenericOrganisationIdentification1__1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="OrganisationIdentificationSchemeName1Choice__1">
<xs:choice>
<xs:element name="Cd" type="ExternalOrganisationIdentification1Code"/>
<xs:element name="Prtry" type="CBPR_RestrictedFINXMax35Text"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="Party38Choice__1">
<xs:choice>
<xs:element name="OrgId" type="OrganisationIdentification29__1"/>
<xs:element name="PrvtId" type="PersonIdentification13__1"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="PartyIdentification135__1">
<xs:sequence>
<xs:element name="Nm" type="CBPR_RestrictedFINXMax140Text_Extended"/>
<xs:element name="PstlAdr" type="PostalAddress24__1"/>
<xs:element maxOccurs="1" minOccurs="0" name="Id" type="Party38Choice__1"/>
<xs:element maxOccurs="1" minOccurs="0" name="CtryOfRes" type="CountryCode"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PartyIdentification135__2">
<xs:sequence>
<xs:element name="Nm" type="CBPR_RestrictedFINXMax140Text_Extended"/>
<xs:element name="PstlAdr" type="PostalAddress24__2"/>
<xs:element maxOccurs="1" minOccurs="0" name="Id" type="Party38Choice__1"/>
<xs:element maxOccurs="1" minOccurs="0" name="CtryOfRes" type="CountryCode"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PersonIdentification13__1">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="DtAndPlcOfBirth" type="DateAndPlaceOfBirth1__1"/>
<xs:element maxOccurs="2" minOccurs="0" name="Othr" type="GenericPersonIdentification1__1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PersonIdentificationSchemeName1Choice__1">
<xs:choice>
<xs:element name="Cd" type="ExternalPersonIdentification1Code"/>
<xs:element name="Prtry" type="CBPR_RestrictedFINXMax35Text"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="PostalAddress24__1">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="Dept" type="CBPR_RestrictedFINXMax70Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="SubDept" type="CBPR_RestrictedFINXMax70Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="StrtNm" type="CBPR_RestrictedFINXMax70Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="BldgNb" type="CBPR_RestrictedFINXMax16Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="BldgNm" type="CBPR_RestrictedFINXMax35Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="Flr" type="CBPR_RestrictedFINXMax70Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="PstBx" type="CBPR_RestrictedFINXMax16Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="Room" type="CBPR_RestrictedFINXMax70Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="PstCd" type="CBPR_RestrictedFINXMax16Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="TwnNm" type="CBPR_RestrictedFINXMax35Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="TwnLctnNm" type="CBPR_RestrictedFINXMax35Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="DstrctNm" type="CBPR_RestrictedFINXMax35Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="CtrySubDvsn" type="CBPR_RestrictedFINXMax35Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="Ctry" type="CountryCode"/>
<xs:element maxOccurs="3" minOccurs="0" name="AdrLine" type="CBPR_RestrictedFINXMax35Text_Extended"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PostalAddress24__2">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="Dept" type="CBPR_RestrictedFINXMax70Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="SubDept" type="CBPR_RestrictedFINXMax70Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="StrtNm" type="CBPR_RestrictedFINXMax70Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="BldgNb" type="CBPR_RestrictedFINXMax16Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="BldgNm" type="CBPR_RestrictedFINXMax35Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="Flr" type="CBPR_RestrictedFINXMax70Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="PstBx" type="CBPR_RestrictedFINXMax16Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="Room" type="CBPR_RestrictedFINXMax70Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="PstCd" type="CBPR_RestrictedFINXMax16Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="TwnNm" type="Max35Text"/>
<xs:element maxOccurs="1" minOccurs="0" name="TwnLctnNm" type="CBPR_RestrictedFINXMax35Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="DstrctNm" type="CBPR_RestrictedFINXMax35Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="CtrySubDvsn" type="CBPR_RestrictedFINXMax35Text_Extended"/>
<xs:element maxOccurs="1" minOccurs="0" name="Ctry" type="CountryCode"/>
<xs:element maxOccurs="3" minOccurs="0" name="AdrLine" type="CBPR_RestrictedFINXMax35Text_Extended"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ProxyAccountIdentification1__1">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="Tp" type="ProxyAccountType1Choice__1"/>
<xs:element name="Id" type="CBPR_RestrictedFINXMax320Text_Extended"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ProxyAccountType1Choice__1">
<xs:choice>
<xs:element name="Cd" type="ExternalProxyAccountType1Code"/>
<xs:element name="Prtry" type="CBPR_RestrictedFINXMax35Text"/>
</xs:choice>
</xs:complexType>
</xs:schema>
......@@ -144,6 +144,11 @@ public class Mx2MtTest {
}
@Test
public void test110() {
test("/swiftXml/camt10700101.xml", null);
}
@Test
public void testXmlFilePath() {
SwiftTranslationReport str = SwiftTransfer.mx2MtPlus("d:/test/MxPacs00800108.xml", true, null, null);
System.out.println(str.getMessage());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment