Commit 97c75817 by chengzhuoshen

根据官方mapping文档完成camt054001转MT900910。

parent d5e16b5c
......@@ -67,7 +67,7 @@
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.24</version>
<version>1.2.83</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
......@@ -24,37 +24,37 @@ public class Field13CGenerate extends AbstractMx2MtTagsGenerate {
String dbtDtTmStr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.SttlmTmIndctn.DbtDtTm");
if (StringUtil.isNotEmpty(dbtDtTmStr)) {
XMLGregorianCalendar dbtDtTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(dbtDtTmStr);
String value = "/SNDTIME/" + String.valueOf(dbtDtTm.getHour()) + String.valueOf(dbtDtTm.getMinute()) + dbtDtTmStr.substring(dbtDtTmStr.length()-6);
String value = "/SNDTIME/" + (dbtDtTm.getHour()<10?"0"+dbtDtTm.getHour():dbtDtTm.getHour()) + (dbtDtTm.getMinute()<10?"0"+dbtDtTm.getMinute():dbtDtTm.getMinute()) + dbtDtTmStr.substring(dbtDtTmStr.length()-6);
tags.add(new Tag(name, value));
}
String cdtDtTmStr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.SttlmTmIndctn.CdtDtTm");
if (StringUtil.isNotEmpty(cdtDtTmStr)) {
XMLGregorianCalendar cdtDtTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(cdtDtTmStr);
String value = "/RNCTIME/" + String.valueOf(cdtDtTm.getHour()) + String.valueOf(cdtDtTm.getMinute()) + dbtDtTmStr.substring(cdtDtTmStr.length()-6);
String value = "/RNCTIME/" + (cdtDtTm.getHour()<10?"0"+cdtDtTm.getHour():cdtDtTm.getHour()) + (cdtDtTm.getMinute()<10?"0"+cdtDtTm.getMinute():cdtDtTm.getMinute()) + dbtDtTmStr.substring(cdtDtTmStr.length()-6);
tags.add(new Tag(name, value));
}
String clsTmStr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.SttlmTmReq.CLSTm");
if (StringUtil.isNotEmpty(clsTmStr)) {
XMLGregorianCalendar clsTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(clsTmStr);
String value = "/CLSTIME/" + String.valueOf(clsTm.getHour()) + String.valueOf(clsTm.getMinute()) + clsTmStr.substring(clsTmStr.length()-6);
String value = "/CLSTIME/" + (clsTm.getHour()<10?"0"+clsTm.getHour():clsTm.getHour()) + (clsTm.getMinute()<10?"0"+clsTm.getMinute():clsTm.getMinute()) + clsTmStr.substring(clsTmStr.length()-6);
tags.add(new Tag(name, value));
}
String tillTmStr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.SttlmTmReq.TillTm");
if (StringUtil.isNotEmpty(tillTmStr)) {
XMLGregorianCalendar tillTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(tillTmStr);
String value = "/TILTIME/" + String.valueOf(tillTm.getHour()) + String.valueOf(tillTm.getMinute()) + tillTmStr.substring(tillTmStr.length()-6);
String value = "/TILTIME/" + (tillTm.getHour()<10?"0"+tillTm.getHour():tillTm.getHour()) + (tillTm.getMinute()<10?"0"+tillTm.getMinute():tillTm.getMinute()) + tillTmStr.substring(tillTmStr.length()-6);
tags.add(new Tag(name, value));
}
String frTmStr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.SttlmTmReq.FrTm");
if (StringUtil.isNotEmpty(frTmStr)) {
XMLGregorianCalendar frTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(frTmStr);
String value = "/FROTIME/" + String.valueOf(frTm.getHour()) + String.valueOf(frTm.getMinute()) + frTmStr.substring(frTmStr.length()-6);
String value = "/FROTIME/" + (frTm.getHour()<10?"0"+frTm.getHour():frTm.getHour()) + (frTm.getMinute()<10?"0"+frTm.getMinute():frTm.getMinute()) + frTmStr.substring(frTmStr.length()-6);
tags.add(new Tag(name, value));
}
String rejTmStr = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.SttlmTmReq.RjctTm");
if (StringUtil.isNotEmpty(rejTmStr)) {
XMLGregorianCalendar rejTm = DatatypeFactory.newInstance().newXMLGregorianCalendar(rejTmStr);
String value = "/REJTIME/" + String.valueOf(rejTm.getHour()) + String.valueOf(rejTm.getMinute()) + rejTmStr.substring(rejTmStr.length()-6);
String value = "/REJTIME/" + (rejTm.getHour()<10?"0"+rejTm.getHour():rejTm.getHour()) + (rejTm.getMinute()<10?"0"+rejTm.getMinute():rejTm.getMinute()) + rejTmStr.substring(rejTmStr.length()-6);
tags.add(new Tag(name, value));
}
} catch(DatatypeConfigurationException e) {
......
......@@ -22,10 +22,13 @@ public class Field50AGenerate extends AbstractMx2MtTagsGenerate {
@Override
public void tagGenerate() throws SwiftException {
//TODO 为F条件待补充
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String partyPath = bodyHdrParentElementName + ".CdtTrfTxInf.Dbtr";
String bicCode = mx_to_mtAnyBIC(bodyHdrParentElementName + ".CdtTrfTxInf.Dbtr");
String countryCode = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.Dbtr.PstlAdr.Ctry");
String name = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.Dbtr.Nm");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.Dbtr.PstlAdr.AdrLine");
String account = mx_to_mtAccount(bodyHdrParentElementName + ".CdtTrfTxInf.DbtrAcct");
String value = "";
if (StringUtil.isNotEmpty(bicCode)) {
......@@ -35,25 +38,51 @@ public class Field50AGenerate extends AbstractMx2MtTagsGenerate {
value = bicCode;
}
tags.add(new Tag(name_A, value));
} else {
String name = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.Dbtr.Nm");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.Dbtr.PstlAdr.AdrLine");
if (addressLineCount > 0) {
String mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(bodyHdrParentElementName + ".CdtTrfTxInf.Dbtr");
} else if (StringUtil.isNotEmpty(countryCode)) {
String nameAddress = mx_to_mtFATFNameAndAddress(partyPath);
if (StringUtil.isEmpty(account)) {
account = mx_to_mtFATFIdentification(partyPath);
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
}
if (StringUtil.isEmpty(account)) {
account = "/" + Mx2MtConstants.MX_TO_MT_DEFAULT_VALUE;
}
value = account + Mx2MtConstants.NEW_LINE + nameAddress;
tags.add(new Tag(name_F, value));
} else if (addressLineCount > 0) {
boolean structuredAddressIndicator = mx_to_mtAddressLineType(partyPath);
if (structuredAddressIndicator) {
String nameAddress = mx_to_mtFATFNameAndAddress2(partyPath);
if (StringUtil.isEmpty(account)) {
account = mx_to_mtFATFIdentification(partyPath);
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
}
if (StringUtil.isEmpty(account)) {
account = "/" + Mx2MtConstants.MX_TO_MT_DEFAULT_VALUE;
}
value = account + Mx2MtConstants.NEW_LINE + nameAddress;
tags.add(new Tag(name_F, value));
} else {
String mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(partyPath);
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
tags.add(new Tag(name_K, value));
} else if (StringUtil.isNotEmpty(name)) {
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + name;
} else {
value = name;
}
tags.add(new Tag(name_K, value));
}
} else if (StringUtil.isNotEmpty(name)) {
String mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(partyPath);
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
tags.add(new Tag(name_K, value));
}
}
}
......@@ -56,7 +56,7 @@ public class Field59Generate extends AbstractMx2MtTagsGenerate {
} else if (addressLineCount > 0){
boolean structuredAddressIndicator = mx_to_mtAddressLineType(partyPath);
if (structuredAddressIndicator) {
String nameAddress = mx_to_mtPartyNameAndAddressLEI2(partyPath);
String nameAddress = mx_to_mtPartyNameAndAddressLEI2(partyPath, "3/");
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + nameAddress;
} else {
......
......@@ -21,11 +21,14 @@ public class Field50AGenerate extends AbstractMx2MtTagsGenerate {
@Override
public void tagGenerate() throws SwiftException {
//TODO 为F条件待补充
boolean covFlag = false;
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String partyPath = bodyHdrParentElementName + ".CdtTrfTxInf.UndrlygCstmrCdtTrf.Dbtr";
String bicCode = mx_to_mtAnyBIC(bodyHdrParentElementName + ".CdtTrfTxInf.UndrlygCstmrCdtTrf.Dbtr");
String countryCode = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.Dbtr.PstlAdr.Ctry");
String name = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.Dbtr.Nm");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.Dbtr.PstlAdr.AdrLine");
String account = mx_to_mtAccount(bodyHdrParentElementName + ".CdtTrfTxInf.UndrlygCstmrCdtTrf.DbtrAcct");
String value = "";
if (StringUtil.isNotEmpty(bicCode)) {
......@@ -36,26 +39,55 @@ public class Field50AGenerate extends AbstractMx2MtTagsGenerate {
}
tags.add(new Tag(name_A, value));
covFlag = true;
} else {
String name = getXmlNodeValue(bodyHdrParentElementName, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.Dbtr.Nm");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "CdtTrfTxInf.UndrlygCstmrCdtTrf.Dbtr.PstlAdr.AdrLine");
if (addressLineCount > 0) {
String mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(bodyHdrParentElementName + ".CdtTrfTxInf.UndrlygCstmrCdtTrf.Dbtr");
} else if (StringUtil.isNotEmpty(countryCode)) {
String nameAddress = mx_to_mtFATFNameAndAddress(partyPath);
if (StringUtil.isEmpty(account)) {
account = mx_to_mtFATFIdentification(partyPath);
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
}
if (StringUtil.isEmpty(account)) {
account = "/" + Mx2MtConstants.MX_TO_MT_DEFAULT_VALUE;
}
value = account + Mx2MtConstants.NEW_LINE + nameAddress;
tags.add(new Tag(name_F, value));
covFlag = true;
} else if (addressLineCount > 0) {
boolean structuredAddressIndicator = mx_to_mtAddressLineType(partyPath);
if (structuredAddressIndicator) {
String nameAddress = mx_to_mtFATFNameAndAddress2(partyPath);
if (StringUtil.isEmpty(account)) {
account = mx_to_mtFATFIdentification(partyPath);
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
}
if (StringUtil.isEmpty(account)) {
account = "/" + Mx2MtConstants.MX_TO_MT_DEFAULT_VALUE;
}
value = account + Mx2MtConstants.NEW_LINE + nameAddress;
tags.add(new Tag(name_F, value));
covFlag = true;
} else {
String mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(partyPath);
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
tags.add(new Tag(name_K, value));
} else if (StringUtil.isNotEmpty(name)) {
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + name;
} else {
value = name;
}
tags.add(new Tag(name_K, value));
covFlag = true;
}
} else if (StringUtil.isNotEmpty(name)) {
String mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(partyPath);
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
tags.add(new Tag(name_K, value));
covFlag = true;
}
if (covFlag) {
SwiftBlock3 block3 = context.get(SwiftMessage.class).getBlock3();
......
......@@ -48,7 +48,7 @@ public class Field59AGenerate extends AbstractMx2MtTagsGenerate {
} else if (addressLineCount > 0){
boolean structuredAddressIndicator = mx_to_mtAddressLineType(partyPath);
if (structuredAddressIndicator) {
String nameAddress = mx_to_mtPartyNameAndAddressLEI2(partyPath);
String nameAddress = mx_to_mtPartyNameAndAddressLEI2(partyPath, "3/");
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + nameAddress;
} else {
......
......@@ -7,8 +7,6 @@ import com.brilliance.swift.mx2mt.Mx2MtContextIdentifier;
import com.brilliance.swift.mx2mt.Mx2MtTagsGenerate;
import com.brilliance.swift.mx2mt.mt900910.impl.*;
import com.brilliance.swift.util.XmlUtil;
import com.prowidesoftware.swift.model.SwiftBlock3;
import com.prowidesoftware.swift.model.SwiftMessage;
import com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import org.dom4j.Document;
......@@ -31,25 +29,19 @@ public class Mx2Mt900910Creator extends AbstractMx2MtCreator {
@Override
public void withBlock3() throws SwiftException {
super.withBlock3();
SwiftBlock3 block3 = context.get(SwiftMessage.class).getBlock3();
Document document = (Document)context.get(Mx2MtContextIdentifier.MX_XMl_DOCUMENT, true);
String bodyParentPath = (String)context.get(Mx2MtContextIdentifier.BODY_PARENT_ELEMENT_NAME, true);
/*String uetr = getXmlNodeValue(bodyParentPath, document, "CdtTrfTxInf.PmtId.UETR");
if (StringUtil.isNotEmpty(uetr)) {
block3.getTags().add(new Tag("121", uetr));
}*/
}
@Override
public List<Mx2MtTagsGenerate> getGenerateTagList() {
List<Mx2MtTagsGenerate> fieldsGenerateList = new ArrayList<>();
fieldsGenerateList.add(new Field13DGenerate());
fieldsGenerateList.add(new Field20Generate());
fieldsGenerateList.add(new Field21Generate());
fieldsGenerateList.add(new Field25aGenerate());
fieldsGenerateList.add(new Field13DGenerate());
fieldsGenerateList.add(new Field32AGenerate());
fieldsGenerateList.add(new Field50aGenerate());
fieldsGenerateList.add(new Field52aGenerate());
fieldsGenerateList.add(new Field52aFor900Generate());
fieldsGenerateList.add(new Field52aFor910Generate());
fieldsGenerateList.add(new Field56aGenerate());
fieldsGenerateList.add(new Field72Generate());
return fieldsGenerateList;
......@@ -61,10 +53,9 @@ public class Mx2Mt900910Creator extends AbstractMx2MtCreator {
Document document = (Document)context.get(Mx2MtContextIdentifier.MX_XMl_DOCUMENT);
String bodyParentPath = (String)context.get(Mx2MtContextIdentifier.BODY_PARENT_ELEMENT_NAME, true);
String cdtDbtInd = getXmlNodeValue(bodyParentPath, document, "Ntfctn.Ntry.CdtDbtInd");
//judge 900 or 910
if (CreditDebitCode.DBIT.equals(CreditDebitCode.valueOf(cdtDbtInd))) {
if (CreditDebitCode.DBIT.value().equals(cdtDbtInd)) {
mtType = Mx2MtConstants.MT_TYPE_900;
} else if (CreditDebitCode.CRDT.equals(CreditDebitCode.valueOf(cdtDbtInd))) {
} else if (CreditDebitCode.CRDT.value().equals(cdtDbtInd)) {
mtType = Mx2MtConstants.MT_TYPE_910;
}
return mtType;
......
......@@ -2,12 +2,36 @@ package com.brilliance.swift.mx2mt.mt900910.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 java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class Field13DGenerate extends AbstractMx2MtTagsGenerate {
private static String name = "13D";
@Override
public void tagGenerate() throws SwiftException {
try {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String bookDateStr = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.BookgDt");
if (StringUtil.isNotEmpty(bookDateStr)) {
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date bookDate = fmt.parse(bookDateStr);
String dateStr = DateUtil.format(bookDate, "yyMMddHHmm");
String value = dateStr + bookDateStr.substring(bookDateStr.length()-6);
tags.add(new Tag(name, value));
}
} catch (ParseException e) {
throw new SwiftException("ERROR", e.getMessage());
}
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
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>
*/
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.isNotEmpty(messageId)) {
String value = "";
if (messageId.length() > 16) {
value = messageId.substring(0, 15) + "+";
}
if (value.startsWith("/") || value.endsWith("/") || value.contains("//")) {
value = Mx2MtConstants.MX_TO_MT_DEFAULT_VALUE;
}
tags.add(new Tag(name, value));
}
}
}
......@@ -2,14 +2,39 @@ package com.brilliance.swift.mx2mt.mt900910.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;
/**
* <Ntfctn><Ntry><NtryDtls><TxDtls><Refs><EndToEndId>
*/
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 endToEndId = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.Refs.EndToEndId");
String instructionId = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.Refs.InstrId");
String value = "";
if (StringUtil.isNotEmpty(endToEndId)) {
value = endToEndId;
if (endToEndId.length() > 16) {
value = endToEndId.substring(0, 15) + "+";
}
} else if (StringUtil.isNotEmpty(instructionId)) {
value = instructionId;
if (instructionId.length() > 16) {
value = instructionId.substring(0, 15) + "+";
}
}
if (StringUtil.isNotEmpty(value)) {
tags.add(new Tag(name, value));
}
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
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;
/**
* <Ntfctn><Acct><Id><IBAN>
......@@ -9,9 +15,31 @@ import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
*/
public class Field25aGenerate extends AbstractMx2MtTagsGenerate {
private static String name = "25";
private static String name_P = "25P";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String iban = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Acct.Id.IBAN");
String acctId = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Acct.Id.Othr.Id");
String account = StringUtil.isNotEmpty(iban) ? iban : acctId;
String bicCode = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Acct.Ownr.Id.OrgId.AnyBIC");
String value = "";
if (StringUtil.isNotEmpty(bicCode)) {
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
value = bicCode;
}
tags.add(new Tag(name_P, value));
} else {
value = account;
if (StringUtil.isNotEmpty(value)) {
tags.add(new Tag(name, value));
}
}
}
}
......@@ -2,6 +2,17 @@ package com.brilliance.swift.mx2mt.mt900910.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;
/**
* <Ntfctn><Ntry><ValDt><Dt>
......@@ -9,9 +20,34 @@ import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
*/
public class Field32AGenerate extends AbstractMx2MtTagsGenerate {
private static String name = "32A";
@Override
public void tagGenerate() throws SwiftException {
try {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String intrBkSttlmDtStr = "";
String intrBkSttlmAmt = "";
String intrBkSttlmccy = "";
String intrBkSttlmDtValue = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.ValDt.Dt");
if (StringUtil.isEmpty(intrBkSttlmDtValue)) {
intrBkSttlmDtValue = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdDts.IntrBkSttlmDt");
}
if (StringUtil.isNotEmpty(intrBkSttlmDtValue)) {
XMLGregorianCalendar intrBkSttlmDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(intrBkSttlmDtValue);
intrBkSttlmDtStr = DateUtil.format(intrBkSttlmDt, "yyMMdd");
}
String amt = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.Amt");
String ccy = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.Amt@Ccy");
if (StringUtil.isNotEmpty(amt) && StringUtil.isNotEmpty(ccy)) {
intrBkSttlmAmt = NumberUtil.formatAmt(new BigDecimal(amt), ccy);
intrBkSttlmccy = ccy;
}
tags.add(new Tag(name, intrBkSttlmDtStr+intrBkSttlmccy+intrBkSttlmAmt));
} catch (DatatypeConfigurationException e) {
throw new SwiftException("ERROR", e.getMessage());
}
}
......
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
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 com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import java.util.List;
/**
* 50A
......@@ -15,9 +22,109 @@ import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
*/
public class Field50aGenerate extends AbstractMx2MtTagsGenerate {
private static String name_A = "50A";
private static String name_F = "50F";
private static String name_K = "50K";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String cdtDbtInd = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.CdtDbtInd");
if (!CreditDebitCode.CRDT.value().equals(cdtDbtInd)) {
return;
}
String value = "";
String partyPath = bodyHdrParentElementName + ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Pty";
String bicCode = mx_to_mtAnyBIC(bodyHdrParentElementName + ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Pty");
String countryCode = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Pty.PstlAdr.Ctry");
String name = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Pty.Nm");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Pty.PstlAdr.AdrLine");
String account = mx_to_mtAccount(bodyHdrParentElementName + ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.DbtrAcct");
if (StringUtil.isNotEmpty(bicCode)) {
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
value = bicCode;
}
tags.add(new Tag(name_A, value));
} else if (StringUtil.isNotEmpty(countryCode)) {
String nameAddress = mx_to_mtFATFNameAndAddress(partyPath);
if (StringUtil.isEmpty(account)) {
account = mx_to_mtFATFIdentification(partyPath);
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
}
if (StringUtil.isEmpty(account)) {
account = "/" + Mx2MtConstants.MX_TO_MT_DEFAULT_VALUE;
}
value = account + Mx2MtConstants.NEW_LINE + nameAddress;
tags.add(new Tag(name_F, value));
} else if (addressLineCount > 0) {
boolean structuredAddressIndicator = mx_to_mtAddressLineType(partyPath);
if (structuredAddressIndicator) {
String nameAddress = mx_to_mtFATFNameAndAddress2(partyPath);
if (StringUtil.isEmpty(account)) {
account = mx_to_mtFATFIdentification(partyPath);
if (StringUtil.isNotEmpty(account) && account.length() > 35) {
account = account.substring(0, 35);
}
}
if (StringUtil.isEmpty(account)) {
account = "/" + Mx2MtConstants.MX_TO_MT_DEFAULT_VALUE;
}
value = account + Mx2MtConstants.NEW_LINE + nameAddress;
tags.add(new Tag(name_F, value));
} else {
String mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(partyPath);
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
tags.add(new Tag(name_K, value));
}
} else if (StringUtil.isNotEmpty(name)) {
String mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(partyPath);
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
tags.add(new Tag(name_K, value));
}
if (StringUtil.isEmpty(value)) {
bicCode = mx_to_mtBICFI(bodyHdrParentElementName + ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt");
if (StringUtil.isNotEmpty(bicCode)) {
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
value = bicCode;
}
tags.add(new Tag(name_A, value));
} else {
name = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt.FinInstnId.Nm");
countryCode = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt.FinInstnId.PstlAdr.Ctry");
addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt.FinInstnId.PstlAdr.AdrLine");
String mtNameAddress = "";
if (addressLineCount > 0) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(bodyHdrParentElementName+ ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt.FinInstnId");
} else if (StringUtil.isNotEmpty(countryCode)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndStructuredAddress(bodyHdrParentElementName+ ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt.FinInstnId", false);
} else if (StringUtil.isNotEmpty(name)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(bodyHdrParentElementName+ ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt.FinInstnId");
}
if (StringUtil.isEmpty(mtNameAddress)) return;//如果name和地址不存在,返回。
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
tags.add(new Tag(name_K, value));
}
}
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
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 com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import java.util.List;
//<Ntfctn><Ntry><NtryDtls><TxDtls><RltdPties><Dbtr><Pty><Id><OrgId><AnyBIC>
public class Field52aFor900Generate extends AbstractMx2MtTagsGenerate {
private static String name_A = "52A";
private static String name_D = "52D";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String cdtDbtInd = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.CdtDbtInd");
if (!CreditDebitCode.DBIT.value().equals(cdtDbtInd)) {
return;
}
String value = "";
String account = mx_to_mtAccount(bodyHdrParentElementName + ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.DbtrAcct");
String bicCode = mx_to_mtBICFI(bodyHdrParentElementName + ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt");
if (StringUtil.isNotEmpty(bicCode)) {
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + bicCode;
} else {
value = bicCode;
}
tags.add(new Tag(name_A, value));
} else {
String name = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt.FinInstnId.Nm");
String countryCode = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt.FinInstnId.PstlAdr.Ctry");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt.FinInstnId.PstlAdr.AdrLine");
String mtNameAddress = "";
if (addressLineCount > 0) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(bodyHdrParentElementName+ ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt.FinInstnId");
} else if (StringUtil.isNotEmpty(countryCode)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndStructuredAddress(bodyHdrParentElementName+ ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt.FinInstnId", false);
} else if (StringUtil.isNotEmpty(name)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(bodyHdrParentElementName+ ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdPties.Dbtr.Agt.FinInstnId");
}
if (StringUtil.isEmpty(mtNameAddress)) return;//如果name和地址不存在,返回。
if (StringUtil.isNotEmpty(account)) {
value = account + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
tags.add(new Tag(name_D, value));
}
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
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 com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import java.util.List;
//<Ntfctn><Ntry><NtryDtls><TxDtls><RltdPties><Dbtr><Pty><Id><OrgId><AnyBIC>
public class Field52aFor910Generate extends AbstractMx2MtTagsGenerate {
private static String name_A = "52A";
private static String name_D = "52D";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String cdtDbtInd = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.CdtDbtInd");
if (!CreditDebitCode.CRDT.value().equals(cdtDbtInd)) {
return;
}
String agtPath = bodyHdrParentElementName + ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.DbtrAgt";
String bicCode = mx_to_mtBICFI(agtPath);
String mtClearSystemId = mx_to_mtClearingIdentifier(agtPath);
String value = "";
if (StringUtil.isNotEmpty(bicCode)) {
if (StringUtil.isNotEmpty(mtClearSystemId)) {
value = mtClearSystemId + Mx2MtConstants.NEW_LINE + bicCode;
} else {
value = bicCode;
}
tags.add(new Tag(name_A, value));
} else {
String name = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.DbtrAgt.FinInstnId.Nm");
String countryCode = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.DbtrAgt.FinInstnId.PstlAdr.Ctry");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.DbtrAgt.FinInstnId.PstlAdr.AdrLine");
String mtNameAddress = "";
if (addressLineCount > 0) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(agtPath + ".FinInstnId");
} else if (StringUtil.isNotEmpty(countryCode)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndStructuredAddress(agtPath + ".FinInstnId", false);
} else if (StringUtil.isNotEmpty(name)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(agtPath + ".FinInstnId");
}
if (StringUtil.isEmpty(mtNameAddress)) return;//如果name和地址不存在,返回。
if (StringUtil.isNotEmpty(mtClearSystemId)) {
value = mtClearSystemId + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
tags.add(new Tag(name_D, value));
}
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.exception.SwiftException;
import com.brilliance.swift.mx2mt.AbstractMx2MtTagsGenerate;
//<Ntfctn><Ntry><NtryDtls><TxDtls><RltdPties><Dbtr><Pty><Id><OrgId><AnyBIC>
public class Field52aGenerate extends AbstractMx2MtTagsGenerate {
@Override
public void tagGenerate() throws SwiftException {
}
}
package com.brilliance.swift.mx2mt.mt900910.impl;
import com.brilliance.swift.constants.Mx2MtConstants;
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 com.prowidesoftware.swift.model.mx.dic.CreditDebitCode;
import java.util.List;
public class Field56aGenerate extends AbstractMx2MtTagsGenerate {
private static String name_A = "56A";
private static String name_D = "56D";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String cdtDbtInd = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.CdtDbtInd");
if (!CreditDebitCode.CRDT.value().equals(cdtDbtInd)) {
return;
}
String agtPath = bodyHdrParentElementName + ".Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.IntrmyAgt1";
String bicCode = mx_to_mtBICFI(agtPath);
String mtClearSystemId = mx_to_mtClearingIdentifier(agtPath);
String value = "";
if (StringUtil.isNotEmpty(bicCode)) {
if (StringUtil.isNotEmpty(mtClearSystemId)) {
value = mtClearSystemId + Mx2MtConstants.NEW_LINE + bicCode;
} else {
value = bicCode;
}
tags.add(new Tag(name_A, value));
} else {
String name = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.IntrmyAgt1.FinInstnId.Nm");
String countryCode = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.IntrmyAgt1.FinInstnId.PstlAdr.Ctry");
int addressLineCount = getXmlNodeCounts(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.RltdAgts.IntrmyAgt1.FinInstnId.PstlAdr.AdrLine");
String mtNameAddress = "";
if (addressLineCount > 0) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(agtPath + ".FinInstnId");
} else if (StringUtil.isNotEmpty(countryCode)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndStructuredAddress(agtPath + ".FinInstnId", false);
} else if (StringUtil.isNotEmpty(name)) {
mtNameAddress = mx_to_mtFinancialInstitutionNameAndUnstructuredAddress(agtPath + ".FinInstnId");
}
if (StringUtil.isEmpty(mtNameAddress)) return;//如果name和地址不存在,返回。
if (StringUtil.isNotEmpty(mtClearSystemId)) {
value = mtClearSystemId + Mx2MtConstants.NEW_LINE + mtNameAddress;
} else {
value = mtNameAddress;
}
tags.add(new Tag(name_D, value));
}
}
}
......@@ -2,12 +2,27 @@ package com.brilliance.swift.mx2mt.mt900910.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;
public class Field72Generate extends AbstractMx2MtTagsGenerate {
private static String name = "72";
@Override
public void tagGenerate() throws SwiftException {
SwiftMessage swiftMessage = context.get(SwiftMessage.class);
List<Tag> tags = swiftMessage.getBlock4().getTags();
String additionalTxnInf = getXmlNodeValue(bodyHdrParentElementName, document, "Ntfctn.Ntry.NtryDtls.TxDtls.AddtlTxInf");
if (StringUtil.isNotEmpty(additionalTxnInf)) {
if (additionalTxnInf.length() > 210) {
additionalTxnInf = additionalTxnInf.substring(0, 209) + "+";
}
String value = StringUtil.getStringByEnter(additionalTxnInf, 35, 6);
tags.add(new Tag(name, value));
}
}
}
package com.brilliance.swift.util;
import com.brilliance.swift.vo.common.ClearingSystemMemberCode;
import com.brilliance.swift.vo.common.OrganisationIdentificationCode;
import com.brilliance.swift.vo.common.PersonIdentificationCode;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
......@@ -568,4 +570,34 @@ public class SwiftTransferUtil {
}
return code;
}
/**
* 根据mxcode取OrganisationIdentificationCode
*/
public static OrganisationIdentificationCode getOrganisationIdentificationCodeByCode(String mxCode) {
OrganisationIdentificationCode code = null;
OrganisationIdentificationCode[] values = OrganisationIdentificationCode.values();
for (OrganisationIdentificationCode tmpCode : values) {
if (tmpCode.value().equals(mxCode)) {
code = tmpCode;
break;
}
}
return code;
}
/**
* 根据mxcode取PersonIdentificationCode
*/
public static PersonIdentificationCode getPersonIdentificationCodeByCode(String mxCode) {
PersonIdentificationCode code = null;
PersonIdentificationCode[] values = PersonIdentificationCode.values();
for (PersonIdentificationCode tmpCode : values) {
if (tmpCode.value().equals(mxCode)) {
code = tmpCode;
break;
}
}
return code;
}
}
package com.brilliance.swift.vo.common;
public enum OrganisationIdentificationCode {
BANK("BankPartyIdentification"),
CBID("CentralBankIdentificationNumber"),
CHID("ClearingIdentificationNumber"),
CINC("CertificateOfIncorporationNumber"),
COID("CountryIdentificationCode"),
CUST("CustomerNumber"),
DUNS("DataUniversalNumberingSystem"),
EMPL("EmployerIdentificationNumber"),
GS1G("GS1GLNIdentifier"),
SREN("SIREN"),
SRET("SIRET"),
TXID("TaxIdentificationNumber");
OrganisationIdentificationCode(String s) {}
public String value() {
return name();
}
}
package com.brilliance.swift.vo.common;
public enum PersonIdentificationCode {
ARNU("AlienRegistrationNumber"),
CCPT("PassportNumber"),
CUST("CustomerIdentificationNumber"),
DRLC("DriversLicenseNumber"),
EMPL("EmployeeIdentificationNumber"),
NIDN("NationalIdentityNumber"),
SOSE("SocialSecurityNumber"),
TELE("TelephoneNumber"),
TXID("TaxIdentificationNumber");
PersonIdentificationCode(String s) {}
public String value() {
return name();
}
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Envelope xmlns="urn:swift:xsd:envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:swift:xsd:envelope ../../../../Schemas/Translator_envelope.xsd">
<AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02">
<Fr>
<FIId>
<FinInstnId>
<BICFI>SHWHQWER123</BICFI>
</FinInstnId>
</FIId>
</Fr>
<To>
<FIId>
<FinInstnId>
<BICFI>BJWHS12X</BICFI>
</FinInstnId>
</FIId>
</To>
<BizMsgIdr>pacs8bizmsgidr02</BizMsgIdr>
<MsgDefIdr>camt.053.001.02</MsgDefIdr>
<BizSvc>swift.cbprplus.02</BizSvc>
<CreDt>2020-09-08T10:10:47+08:00</CreDt>
</AppHdr>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02">
<BkToCstmrStmt>
<GrpHdr>
<MsgId>00010013800002001234</MsgId>
<CreDtTm>2022-03-30T15:15:40.483+08:00</CreDtTm>
<AddtlInf>EODY</AddtlInf>
<MsgPgntn>
<PgNb>200</PgNb>
</MsgPgntn>
</GrpHdr>
<Stmt>
<Id>1123456789012317092013</Id>
<ElctrncSeqNb>178</ElctrncSeqNb>
<LglSeqNb>178</LglSeqNb>
<CreDtTm>2022-03-30T15:15:40.483+08:00</CreDtTm>
<FrToDt>
<FrDtTm>2022-03-30T15:15:40.483+08:00</FrDtTm>
<ToDtTm>2022-03-30T15:15:40.483+08:00</ToDtTm>
</FrToDt>
<RptgSrc>
<Cd>GPRD</Cd>
</RptgSrc>
<Acct>
<Id>
<IBAN>S15612345678012345</IBAN>
</Id>
<Ccy>USD</Ccy>
<Svcr>
<FinInstnId>
<BIC>BJWHS12X</BIC>
</FinInstnId>
</Svcr>
<Ownr>
<Id>
<OrgId>
<BICOrBEI>SHWHQWER123</BICOrBEI>
</OrgId>
</Id>
</Ownr>
</Acct>
<Bal>
<Tp>
<CdOrPrtry>
<Cd>ITBD</Cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="USD">120274.34</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Dt>
<Dt>2022-03-30+08:00</Dt>
</Dt>
</Bal>
<Bal>
<Tp>
<CdOrPrtry>
<Cd>FWAV</Cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="USD">123456.29</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Dt>
<Dt>2022-03-30+08:00</Dt>
</Dt>
</Bal>
<Bal>
<Tp>
<CdOrPrtry>
<Cd>FWAV</Cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="USD">119609.29</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Dt>
<Dt>2022-03-30+08:00</Dt>
</Dt>
</Bal>
<Bal>
<Tp>
<CdOrPrtry>
<Cd>FWAV</Cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="USD">120274.34</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Dt>
<Dt>2022-03-30+08:00</Dt>
</Dt>
</Bal>
<Ntry>
<NtryRef>FUNDTRANFER20220330</NtryRef>
<Amt Ccy="USD">393.17</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>BOOK</Sts>
<BookgDt>
<Dt>2022-03-30+08:00</Dt>
</BookgDt>
<ValDt>
<Dt>2022-03-30+08:00</Dt>
</ValDt>
<AcctSvcrRef>1309170100000390154395</AcctSvcrRef>
<BkTxCd>
<Prtry>
<Cd>FCHK</Cd>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<EndToEndId>S100000189-735</EndToEndId>
<TxId>1309170100000390154395</TxId>
</Refs>
<AmtDtls>
<InstdAmt>
<Amt Ccy="USD">393.17</Amt>
</InstdAmt>
<TxAmt>
<Amt Ccy="USD">393.17</Amt>
</TxAmt>
</AmtDtls>
<AddtlTxInf>PLACI LOVECNAMENSKIH WUHAN</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>CHINESE BEIJING</AddtlNtryInf>
</Ntry>
<Ntry>
<NtryRef>FUNDTRANFER20220331</NtryRef>
<Amt Ccy="USD">445</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>BOOK</Sts>
<BookgDt>
<Dt>2022-03-30+08:00</Dt>
</BookgDt>
<ValDt>
<Dt>2022-03-30+08:00</Dt>
</ValDt>
<AcctSvcrRef>1309170100000390154395</AcctSvcrRef>
<BkTxCd>
<Prtry>
<Cd>FCHK</Cd>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<EndToEndId>S100000189-735</EndToEndId>
<TxId>1309170100000390154395</TxId>
</Refs>
<AmtDtls>
<InstdAmt>
<Amt Ccy="USD">393.17</Amt>
</InstdAmt>
<TxAmt>
<Amt Ccy="USD">393.17</Amt>
</TxAmt>
</AmtDtls>
<AddtlTxInf>PLACI LOVECNAMENSKIH STORITEV</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf></AddtlNtryInf>
</Ntry>
<AddtlStmtInf>HELLO WORLD</AddtlStmtInf>
</Stmt>
</BkToCstmrStmt>
</Document>
</Envelope>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Envelope xmlns="urn:swift:xsd:envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:swift:xsd:envelope ../../../../Schemas/Translator_envelope.xsd">
<AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02">
<Fr>
<FIId>
<FinInstnId>
<BICFI>SHWHQWER123</BICFI>
</FinInstnId>
</FIId>
</Fr>
<To>
<FIId>
<FinInstnId>
<BICFI>BJWHS12X</BICFI>
</FinInstnId>
</FIId>
</To>
<BizMsgIdr>pacs8bizmsgidr02</BizMsgIdr>
<MsgDefIdr>camt.053.001.02</MsgDefIdr>
<BizSvc>swift.cbprplus.02</BizSvc>
<CreDt>2020-09-08T10:10:47+08:00</CreDt>
</AppHdr>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02">
<BkToCstmrStmt>
<GrpHdr>
<MsgId>00010013800002001234</MsgId>
<CreDtTm>2022-03-30T15:15:40.483+08:00</CreDtTm>
<AddtlInf>EODY</AddtlInf>
<MsgPgntn>
<PgNb>200</PgNb>
</MsgPgntn>
</GrpHdr>
<Stmt>
<Id>1123456789012317092013</Id>
<ElctrncSeqNb>178</ElctrncSeqNb>
<LglSeqNb>178</LglSeqNb>
<CreDtTm>2022-03-30T15:15:40.483+08:00</CreDtTm>
<FrToDt>
<FrDtTm>2022-03-30T15:15:40.483+08:00</FrDtTm>
<ToDtTm>2022-03-30T15:15:40.483+08:00</ToDtTm>
</FrToDt>
<RptgSrc>
<Cd>GPRD</Cd>
</RptgSrc>
<Acct>
<Id>
<IBAN>S15612345678012345</IBAN>
</Id>
<Ccy>USD</Ccy>
<Svcr>
<FinInstnId>
<BIC>BJWHS12X</BIC>
</FinInstnId>
</Svcr>
<Ownr>
<Id>
<OrgId>
<BICOrBEI>SHWHQWER123</BICOrBEI>
</OrgId>
</Id>
</Ownr>
</Acct>
<Bal>
<Tp>
<CdOrPrtry>
<Cd>ITBD</Cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="USD">120274.34</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Dt>
<Dt>2022-03-30+08:00</Dt>
</Dt>
</Bal>
<Bal>
<Tp>
<CdOrPrtry>
<Cd>ITBD</Cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="USD">123456.29</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Dt>
<Dt>2022-03-30+08:00</Dt>
</Dt>
</Bal>
<Bal>
<Tp>
<CdOrPrtry>
<Cd>CLAVS</Cd>
</CdOrPrtry>
</Tp>
<Amt Ccy="USD">119609.29</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Dt>
<Dt>2022-03-30+08:00</Dt>
</Dt>
</Bal>
<Ntry>
<NtryRef>FUNDTRANFER20220330</NtryRef>
<Amt Ccy="USD">393.17</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>BOOK</Sts>
<BookgDt>
<Dt>2022-03-30+08:00</Dt>
</BookgDt>
<ValDt>
<Dt>2022-03-30+08:00</Dt>
</ValDt>
<AcctSvcrRef>1309170100000390154395</AcctSvcrRef>
<BkTxCd>
<Prtry>
<Cd>FCHK</Cd>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<EndToEndId>S100000189-735</EndToEndId>
<TxId>1309170100000390154395</TxId>
</Refs>
<AmtDtls>
<InstdAmt>
<Amt Ccy="USD">393.17</Amt>
</InstdAmt>
<TxAmt>
<Amt Ccy="USD">393.17</Amt>
</TxAmt>
</AmtDtls>
<AddtlTxInf>PLACI LOVECNAMENSKIH WUHAN</AddtlTxInf>
</TxDtls>
</NtryDtls>
</Ntry>
<Ntry>
<NtryRef>FUNDTRANFER20220331</NtryRef>
<Amt Ccy="USD">445</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>BOOK</Sts>
<BookgDt>
<Dt>2022-03-30+08:00</Dt>
</BookgDt>
<ValDt>
<Dt>2022-03-30+08:00</Dt>
</ValDt>
<AcctSvcrRef>1309170100000390154395</AcctSvcrRef>
<BkTxCd>
<Prtry>
<Cd>FCHK</Cd>
</Prtry>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<EndToEndId>S100000189-735</EndToEndId>
<TxId>1309170100000390154395</TxId>
</Refs>
<AmtDtls>
<InstdAmt>
<Amt Ccy="USD">393.17</Amt>
</InstdAmt>
<TxAmt>
<Amt Ccy="USD">393.17</Amt>
</TxAmt>
</AmtDtls>
<AddtlTxInf>PLACI LOVECNAMENSKIH STORITEV</AddtlTxInf>
</TxDtls>
</NtryDtls>
</Ntry>
</Stmt>
</BkToCstmrStmt>
</Document>
</Envelope>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Envelope xmlns="urn:swift:xsd:envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:swift:xsd:envelope ../../../../Schemas/Translator_envelope.xsd">
<AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02">
<Fr>
<FIId>
<FinInstnId>
<BICFI>DEUTDEFF</BICFI>
</FinInstnId>
</FIId>
</Fr>
<To>
<FIId>
<FinInstnId>
<BICFI>DEUTNL2A</BICFI>
</FinInstnId>
</FIId>
</To>
<BizMsgIdr>pacs8bizmsgidr02</BizMsgIdr>
<MsgDefIdr>camt.054.001.02</MsgDefIdr>
<BizSvc>swift.cbprplus.02</BizSvc>
<CreDt>2020-09-08T10:10:47+08:00</CreDt>
</AppHdr>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02">
<BkToCstmrDbtCdtNtfctn>
<GrpHdr>
<MsgId>FRDA000003421606</MsgId>
<CreDtTm>2022-03-30T15:15:40.483+08:00</CreDtTm>
<AddtlInf>BatchAccounting</AddtlInf>
</GrpHdr>
<Ntfctn>
<Id>AC730486180000000002</Id>
<ElctrncSeqNb>1234</ElctrncSeqNb>
<Acct>
<Id>
<IBAN>S15612345678012345</IBAN>
</Id>
<Svcr>
<FinInstnId>
<BIC>DEUTNL2A</BIC>
</FinInstnId>
</Svcr>
<Ownr>
<Id>
<OrgId>
<BICOrBEI>DEUTDEFF</BICOrBEI>
</OrgId>
</Id>
</Ownr>
</Acct>
<Ntry>
<ValDt>
<Dt>2022-03-30+08:00</Dt>
</ValDt>
<Amt Ccy="EUR">126</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>BOOK</Sts>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>RDDT</Cd>
<SubFmlyCd>ESDD</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Issr>SWIFT</Issr>
</Prtry>
</BkTxCd>
<AmtDtls>
<InstdAmt>
<Amt Ccy="EUR">126</Amt>
<CcyXchg/>
</InstdAmt>
<TxAmt>
<Amt Ccy="EUR">126</Amt>
<CcyXchg/>
</TxAmt>
<CntrValAmt>
<Amt Ccy="EUR">126</Amt>
<CcyXchg/>
</CntrValAmt>
</AmtDtls>
<Chrgs>
<TtlChrgsAndTaxAmt Ccy="AAA">0</TtlChrgsAndTaxAmt>
<Amt Ccy="AAA">0</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Tp>
<Cd>COMM</Cd>
</Tp>
<Rate>0</Rate>
<Br>SLEV</Br>
<Pty>
<FinInstnId>
<BIC>AAAAAA20</BIC>
<ClrSysMmbId>
<ClrSysId>
<Cd>a</Cd>
</ClrSysId>
<MmbId>a</MmbId>
</ClrSysMmbId>
<Nm>a</Nm>
<PstlAdr>
<AdrTp>MLTO</AdrTp>
<Dept>a</Dept>
<SubDept>a</SubDept>
<StrtNm>a</StrtNm>
<BldgNb>a</BldgNb>
<PstCd>a</PstCd>
<TwnNm>a</TwnNm>
<CtrySubDvsn>a</CtrySubDvsn>
<Ctry>AA</Ctry>
<AdrLine>a</AdrLine>
</PstlAdr>
<Othr>
<Id>a</Id>
<SchmeNm>
<Cd>a</Cd>
</SchmeNm>
<Issr>a</Issr>
</Othr>
</FinInstnId>
<BrnchId>
<Id>a</Id>
<Nm>a</Nm>
<PstlAdr>
<AdrTp>ADDR</AdrTp>
<Dept>a</Dept>
<SubDept>a</SubDept>
<StrtNm>a</StrtNm>
<BldgNb>a</BldgNb>
<PstCd>a</PstCd>
<TwnNm>a</TwnNm>
<CtrySubDvsn>a</CtrySubDvsn>
<Ctry>AA</Ctry>
<AdrLine>a</AdrLine>
</PstlAdr>
</BrnchId>
</Pty>
<Tax>
<Id>a</Id>
<Rate>0</Rate>
<Amt Ccy="AAA">0</Amt>
</Tax>
</Chrgs>
<NtryDtls>
<Btch>
<MsgId>FG00000000000y88sd</MsgId>
<NbOfTxs>1</NbOfTxs>
</Btch>
<TxDtls>
<Refs>
<AcctSvcrRef>FRDA00000343</AcctSvcrRef>
<EndToEndId>E2E1201</EndToEndId>
<TxId>FRDA00003343</TxId>
<MndtId>MANFRST1COR1201003</MndtId>
<UETR>8a562c67-ca16-48ba-b074-65581be6f001</UETR>
</Refs>
<AmtDtls/>
<RltdPties>
<Dbtr>
<Nm>Creditor 1</Nm>
<PstlAdr>
<Ctry>PT</Ctry>
<AdrLine>TEST1</AdrLine>
<AdrLine>TEST2</AdrLine>
<AdrLine>TEST3</AdrLine>
<AdrLine>TEST4</AdrLine>
</PstlAdr>
<CtryOfRes>PT</CtryOfRes>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>FR7630588000010050000143176</IBAN>
</Id>
</DbtrAcct>
</RltdPties>
<RltdAgts>
<DbtrAgt>
<FinInstnId>
<BIC>QWERASDF</BIC>
<ClrSysMmbId>
<mmbId>123456</mmbId>
</ClrSysMmbId>
</FinInstnId>
</DbtrAgt>
<IntrmyAgt1>
<FinInstnId>
<Nm>81939316</Nm>
<PstlAdr>
<AdrLine>ADDRESS 1</AdrLine>
<AdrLine>ADDRESS 2</AdrLine>
<AdrLine>ADDRESS 3</AdrLine>
<AdrLine>ADDRESS 4</AdrLine>
</PstlAdr>
</FinInstnId>
</IntrmyAgt1>
</RltdAgts>
<RltdDts>
<AccptncDtTm>2016-12-06T04:01:10</AccptncDtTm>
<IntrBkSttlmDt>2016-12-07</IntrBkSttlmDt>
</RltdDts>
<AddtlTxInf>ENRICHED|TRUE SETT_METHOD|SEPA IAT_IND|FALSE DOMESTIC_IND|FALSE PRIORITY_IND|FALSE</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>ENRICHED|TRUE SETT_METHOD|SEPA IAT_IND|FALSE DOMESTIC_IND|FALSE PRIORITY_IND|FALSE</AddtlNtryInf>
</Ntry>
</Ntfctn>
</BkToCstmrDbtCdtNtfctn>
</Document>
</Envelope>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Envelope xmlns="urn:swift:xsd:envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:swift:xsd:envelope ../../../../Schemas/Translator_envelope.xsd">
<AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02">
<Fr>
<FIId>
<FinInstnId>
<BICFI>DEUTDEFF</BICFI>
</FinInstnId>
</FIId>
</Fr>
<To>
<FIId>
<FinInstnId>
<BICFI>DEUTNL2A</BICFI>
</FinInstnId>
</FIId>
</To>
<BizMsgIdr>pacs8bizmsgidr02</BizMsgIdr>
<MsgDefIdr>camt.054.001.02</MsgDefIdr>
<BizSvc>swift.cbprplus.02</BizSvc>
<CreDt>2020-09-08T10:10:47+08:00</CreDt>
</AppHdr>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02">
<BkToCstmrDbtCdtNtfctn>
<GrpHdr>
<MsgId>FRDA000003421606</MsgId>
<CreDtTm>2022-03-30T15:15:40.483+08:00</CreDtTm>
<AddtlInf>BatchAccounting</AddtlInf>
</GrpHdr>
<Ntfctn>
<Id>AC730486180000000002</Id>
<ElctrncSeqNb>1234</ElctrncSeqNb>
<Acct>
<Id>
<IBAN>S15612345678012345</IBAN>
</Id>
<Svcr>
<FinInstnId>
<BIC>DEUTNL2A</BIC>
</FinInstnId>
</Svcr>
<Ownr>
<Id>
<OrgId>
<BICOrBEI>DEUTDEFF</BICOrBEI>
</OrgId>
</Id>
</Ownr>
</Acct>
<Ntry>
<ValDt>
<Dt>2022-03-30+08:00</Dt>
</ValDt>
<Amt Ccy="EUR">126</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>BOOK</Sts>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>RDDT</Cd>
<SubFmlyCd>ESDD</SubFmlyCd>
</Fmly>
</Domn>
<Prtry>
<Issr>SWIFT</Issr>
</Prtry>
</BkTxCd>
<AmtDtls>
<InstdAmt>
<Amt Ccy="EUR">126</Amt>
<CcyXchg/>
</InstdAmt>
<TxAmt>
<Amt Ccy="EUR">126</Amt>
<CcyXchg/>
</TxAmt>
<CntrValAmt>
<Amt Ccy="EUR">126</Amt>
<CcyXchg/>
</CntrValAmt>
</AmtDtls>
<Chrgs>
<TtlChrgsAndTaxAmt Ccy="AAA">0</TtlChrgsAndTaxAmt>
<Amt Ccy="AAA">0</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Tp>
<Cd>COMM</Cd>
</Tp>
<Rate>0</Rate>
<Br>SLEV</Br>
<Pty>
<FinInstnId>
<BIC>AAAAAA20</BIC>
<ClrSysMmbId>
<ClrSysId>
<Cd>a</Cd>
</ClrSysId>
<MmbId>a</MmbId>
</ClrSysMmbId>
<Nm>a</Nm>
<PstlAdr>
<AdrTp>MLTO</AdrTp>
<Dept>a</Dept>
<SubDept>a</SubDept>
<StrtNm>a</StrtNm>
<BldgNb>a</BldgNb>
<PstCd>a</PstCd>
<TwnNm>a</TwnNm>
<CtrySubDvsn>a</CtrySubDvsn>
<Ctry>AA</Ctry>
<AdrLine>a</AdrLine>
</PstlAdr>
<Othr>
<Id>a</Id>
<SchmeNm>
<Cd>a</Cd>
</SchmeNm>
<Issr>a</Issr>
</Othr>
</FinInstnId>
<BrnchId>
<Id>a</Id>
<Nm>a</Nm>
<PstlAdr>
<AdrTp>ADDR</AdrTp>
<Dept>a</Dept>
<SubDept>a</SubDept>
<StrtNm>a</StrtNm>
<BldgNb>a</BldgNb>
<PstCd>a</PstCd>
<TwnNm>a</TwnNm>
<CtrySubDvsn>a</CtrySubDvsn>
<Ctry>AA</Ctry>
<AdrLine>a</AdrLine>
</PstlAdr>
</BrnchId>
</Pty>
<Tax>
<Id>a</Id>
<Rate>0</Rate>
<Amt Ccy="AAA">0</Amt>
</Tax>
</Chrgs>
<NtryDtls>
<Btch>
<MsgId>FG00000000000y88sd</MsgId>
<NbOfTxs>1</NbOfTxs>
</Btch>
<TxDtls>
<Refs>
<AcctSvcrRef>FRDA00000343</AcctSvcrRef>
<EndToEndId>E2E1201</EndToEndId>
<TxId>FRDA00003343</TxId>
<MndtId>MANFRST1COR1201003</MndtId>
<UETR>8a562c67-ca16-48ba-b074-65581be6f001</UETR>
</Refs>
<AmtDtls/>
<RltdPties>
<Dbtr>
<Nm>Creditor 1</Nm>
<PstlAdr>
<Ctry>PT</Ctry>
<AdrLine>TEST1</AdrLine>
<AdrLine>TEST2</AdrLine>
<AdrLine>TEST3</AdrLine>
<AdrLine>TEST4</AdrLine>
</PstlAdr>
<CtryOfRes>PT</CtryOfRes>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>FR7630588000010050000143176</IBAN>
</Id>
</DbtrAcct>
</RltdPties>
<RltdAgts>
<IntrmyAgt1>
<FinInstnId>
<Nm>81939316</Nm>
<PstlAdr>
<AdrLine>ADDRESS 1</AdrLine>
<AdrLine>ADDRESS 2</AdrLine>
<AdrLine>ADDRESS 3</AdrLine>
<AdrLine>ADDRESS 4</AdrLine>
</PstlAdr>
</FinInstnId>
</IntrmyAgt1>
</RltdAgts>
<RltdDts>
<AccptncDtTm>2016-12-06T04:01:10</AccptncDtTm>
<IntrBkSttlmDt>2016-12-07</IntrBkSttlmDt>
</RltdDts>
<AddtlTxInf>ENRICHED|TRUE SETT_METHOD|SEPA IAT_IND|FALSE DOMESTIC_IND|FALSE PRIORITY_IND|FALSEENRICHED|TRUE SETT_METHOD|SEPA IAT_ENRICHED|TRUE SETT_METHOD|SEPA IAT_ENRICHED|TRUE SETT_METHOD|SEPA IAT_ENRICHED|TRUE SETT_METHOD|SEPA IAT_ENRICHED|TRUE SETT_METHOD|SEPA IAT_ENRICHED|TRUE SETT_METHOD|SEPA IAT_EWEQDSDSDGFGFTYTY</AddtlTxInf>
</TxDtls>
</NtryDtls>
<AddtlNtryInf>ENRICHED|TRUE SETT_METHOD|SEPA IAT_IND|FALSE DOMESTIC_IND|FALSE PRIORITY_IND|FALSE</AddtlNtryInf>
</Ntry>
</Ntfctn>
</BkToCstmrDbtCdtNtfctn>
</Document>
</Envelope>
\ No newline at end of file
<?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>DEUTDEFF</BICFI>
</FinInstnId>
</FIId>
</Fr>
<To>
<FIId>
<FinInstnId>
<BICFI>DEUTNL2A</BICFI>
</FinInstnId>
</FIId>
</To>
<BizMsgIdr>FRDA000003421606</BizMsgIdr>
<MsgDefIdr>camt.054.001.08</MsgDefIdr>
<CreDt>2022-04-29T16:06:51.839+08:00</CreDt>
<Prty>NORM</Prty>
</AppHdr>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08">
<BkToCstmrDbtCdtNtfctn>
<GrpHdr>
<MsgId>FRDA000003421606</MsgId>
<CreDtTm>2022-04-29T16:06:51.839+08:00</CreDtTm>
<AddtlInf></AddtlInf>
</GrpHdr>
<Ntfctn>
<Acct>
<Id>
<Othr>
<Id>S15612345678012345</Id>
</Othr>
</Id>
</Acct>
<Ntry>
<Amt Ccy="EUR">126</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<ValDt>
<Dt>2022-03-30+08:00</Dt>
</ValDt>
<NtryDtls>
<TxDtls>
<Refs>
<EndToEndId>E2E1201</EndToEndId>
<UETR>8a562c67-ca16-48ba-b074-65581be6f001</UETR>
</Refs>
<RltdPties>
<Dbtr>
<Pty>
<Nm>Creditor 1</Nm>
<PstlAdr>
<AdrLine>TEST1</AdrLine>
<AdrLine>TEST2</AdrLine>
<AdrLine>TEST3</AdrLine>
</PstlAdr>
</Pty>
</Dbtr>
</RltdPties>
<RltdAgts>
<IntrmyAgt1>
<FinInstnId>
<ClrSysMmbId>
<ClrSysId>
<Cd>ATBLZ</Cd>
</ClrSysId>
<MmbId>FR7630588000010050000143176</MmbId>
</ClrSysMmbId>
<Nm>81939316</Nm>
<PstlAdr>
<AdrLine>ADDRESS 1</AdrLine>
<AdrLine>ADDRESS 2</AdrLine>
<AdrLine>ADDRESS 3</AdrLine>
</PstlAdr>
</FinInstnId>
</IntrmyAgt1>
</RltdAgts>
<AddtlTxInf>ENRICHED|TRUE SETT_METHOD|SEPA IAT_IND|FALSE DOMESTIC_IND|FALSE PRIORITY_IND|FALSE</AddtlTxInf>
</TxDtls>
</NtryDtls>
</Ntry>
</Ntfctn>
</BkToCstmrDbtCdtNtfctn>
</Document>
</RequestPayload>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!--
THE MESSAGE WILL WORK “AS IS” IN THE READINESS PORTAL. IT IS ESSENTIAL THAT USERS REMOVE THE ENVELOPE AND REPLACE IT WITH THEIR OWN TRANSPORT HEADER (FOR EXAMPLE FOR ALLIANCE ACCESS YOU WOULD USE THE XML V2 HEADERS).
=========================================================================================================================================================================================
Legal Disclaimer:
=================
SWIFT © 2020. All rights reserved.
This publication contains SWIFT or third-party confidential information. Do not disclose this publication outside your organisation without SWIFT’s prior written consent.
The use of this document is governed by the legal notices appearing at the end of this document. By using this document, you will be deemed to have accepted those legal notices.
=================================================================================================================================================================================
Use Case c.54.1.1 Agent A Unicredit provides a debit notification to the debtor Flexo Merchant Services
========================================================================================================================
Change Log
2020-10-16 - Original version
=============================
-->
<Envelope xmlns="urn:swift:xsd:envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:swift:xsd:envelope ../../../../March21Schemas/Translator_envelope.xsd">
<AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02">
<Fr>
<FIId>
<FinInstnId>
<BICFI>BKAUATWW</BICFI>
</FinInstnId>
</FIId>
</Fr>
<To>
<FIId>
<FinInstnId>
<BICFI>FEXMIE2D</BICFI>
</FinInstnId>
</FIId>
</To>
<BizMsgIdr>cmt054bizmsgidr-001</BizMsgIdr>
<MsgDefIdr>camt.054.001.08</MsgDefIdr>
<BizSvc>swift.cbprplus.02</BizSvc>
<CreDt>2020-09-08T10:00:47+01:00</CreDt>
</AppHdr>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08">
<BkToCstmrDbtCdtNtfctn>
<GrpHdr>
<MsgId>cmt054bizmsgidr-001</MsgId>
<CreDtTm>2020-09-08T10:00:47+01:00</CreDtTm>
</GrpHdr>
<Ntfctn>
<Id>cmt054NtfctnId-002</Id>
<Acct>
<Id>
<Othr>
<Id>SML4564887</Id>
</Othr>
</Id>
<Ccy>EUR</Ccy>
</Acct>
<Ntry>
<NtryRef>cmt054NtryRef002</NtryRef>
<Amt Ccy="EUR">300000</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<Sts>
<Cd>STCD</Cd>
</Sts>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>ICDT</Cd>
<SubFmlyCd>XBCT</SubFmlyCd>
</Fmly>
</Domn>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<InstrId>cmt054bizmsgidr-001</InstrId>
<EndToEndId>pacs008EndToEndId-001</EndToEndId>
<UETR>8a562c67-ca16-48ba-b074-65581be6f001</UETR>
</Refs>
<Amt Ccy="EUR">300000</Amt>
<CdtDbtInd>CRDT</CdtDbtInd>
<RmtInf>
<Ustrd>Inv: AEG-69874/958</Ustrd>
</RmtInf>
<RltdDts>
<IntrBkSttlmDt>2020-09-08</IntrBkSttlmDt>
</RltdDts>
<RltdPties>
<Dbtr>
<Pty>
<Id>
<OrgId>
<AnyBIC>QWERASDF</AnyBIC>
</OrgId>
</Id>
</Pty>
<Agt>
<FinInstnId>
<BICFI>CITIBHNK</BICFI>
</FinInstnId>
</Agt>
</Dbtr>
<DbtrAcct>
<Id>
<Othr>
<Id>81939316</Id>
</Othr>
</Id>
</DbtrAcct>
</RltdPties>
<RltdAgts>
<DbtrAgt>
<FinInstnId>
<BICFI>BMRIIDAE</BICFI>
</FinInstnId>
</DbtrAgt>
<IntrmyAgt1>
<FinInstnId>
<BICFI>BSIFVCBK</BICFI>
</FinInstnId>
</IntrmyAgt1>
</RltdAgts>
<AddtlTxInf>chengzhuoshen</AddtlTxInf>
</TxDtls>
</NtryDtls>
</Ntry>
</Ntfctn>
</BkToCstmrDbtCdtNtfctn>
</Document>
</Envelope>
<?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>DEUTDEFF</BICFI>
</FinInstnId>
</FIId>
</Fr>
<To>
<FIId>
<FinInstnId>
<BICFI>DEUTNL2A</BICFI>
</FinInstnId>
</FIId>
</To>
<BizMsgIdr>FRDA000003421606</BizMsgIdr>
<MsgDefIdr>camt.054.001.08</MsgDefIdr>
<CreDt>2022-04-29T16:06:27.410+08:00</CreDt>
<Prty>NORM</Prty>
</AppHdr>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08">
<BkToCstmrDbtCdtNtfctn>
<GrpHdr>
<MsgId>FRDA000003421606</MsgId>
<CreDtTm>2022-04-29T16:06:27.410+08:00</CreDtTm>
<AddtlInf></AddtlInf>
</GrpHdr>
<Ntfctn>
<Acct>
<Id>
<Othr>
<Id>S15612345678012345</Id>
</Othr>
</Id>
</Acct>
<Ntry>
<Amt Ccy="EUR">126</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<ValDt>
<Dt>2022-03-30+08:00</Dt>
</ValDt>
<NtryDtls>
<TxDtls>
<Refs>
<EndToEndId>E2E1201</EndToEndId>
<UETR>8a562c67-ca16-48ba-b074-65581be6f001</UETR>
</Refs>
<RltdPties>
<Dbtr>
<Pty>
<Nm>Creditor 1</Nm>
<PstlAdr>
<AdrLine>TEST1</AdrLine>
<AdrLine>TEST2</AdrLine>
<AdrLine>TEST3</AdrLine>
</PstlAdr>
</Pty>
</Dbtr>
</RltdPties>
<AddtlTxInf>ENRICHED|TRUE SETT_METHOD|SEPA IAT_IND|FALSE DOMESTIC_IND|FALSE PRIORITY_IND|FALSEENRICHED|TRUE SETT_METHOD|SEPA IAT_ENRICHED|TRUE SETT_METHOD|SEPA IAT_ENRICHED|TRUE SETT_METHOD|SEPA IAT_ENRICHED|TRUE SETT_METH</AddtlTxInf>
</TxDtls>
</NtryDtls>
</Ntry>
</Ntfctn>
</BkToCstmrDbtCdtNtfctn>
</Document>
</RequestPayload>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!--
THE MESSAGE WILL WORK “AS IS” IN THE READINESS PORTAL. IT IS ESSENTIAL THAT USERS REMOVE THE ENVELOPE AND REPLACE IT WITH THEIR OWN TRANSPORT HEADER (FOR EXAMPLE FOR ALLIANCE ACCESS YOU WOULD USE THE XML V2 HEADERS).
=========================================================================================================================================================================================
Legal Disclaimer:
=================
SWIFT © 2020. All rights reserved.
This publication contains SWIFT or third-party confidential information. Do not disclose this publication outside your organisation without SWIFT’s prior written consent.
The use of this document is governed by the legal notices appearing at the end of this document. By using this document, you will be deemed to have accepted those legal notices.
=================================================================================================================================================================================
Use Case c.54.1.1 Agent A Unicredit provides a debit notification to the debtor Flexo Merchant Services
========================================================================================================================
Change Log
2020-10-16 - Original version
=============================
-->
<Envelope xmlns="urn:swift:xsd:envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:swift:xsd:envelope ../../../../March21Schemas/Translator_envelope.xsd">
<AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02">
<Fr>
<FIId>
<FinInstnId>
<BICFI>BKAUATWW</BICFI>
</FinInstnId>
</FIId>
</Fr>
<To>
<FIId>
<FinInstnId>
<BICFI>FEXMIE2D</BICFI>
</FinInstnId>
</FIId>
</To>
<BizMsgIdr>cmt054bizmsgidr-001</BizMsgIdr>
<MsgDefIdr>camt.054.001.08</MsgDefIdr>
<BizSvc>swift.cbprplus.02</BizSvc>
<CreDt>2020-09-08T10:00:47+01:00</CreDt>
</AppHdr>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08">
<BkToCstmrDbtCdtNtfctn>
<GrpHdr>
<MsgId>cmt054bizmsgidr-001</MsgId>
<CreDtTm>2020-09-08T10:00:47+01:00</CreDtTm>
</GrpHdr>
<Ntfctn>
<Id>cmt054NtfctnId-002</Id>
<Acct>
<Id>
<Othr>
<Id>SML4564887</Id>
</Othr>
</Id>
<Ccy>EUR</Ccy>
</Acct>
<Ntry>
<NtryRef>cmt054NtryRef002</NtryRef>
<Amt Ccy="EUR">300000</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<Sts>
<Cd>STCD</Cd>
</Sts>
<BkTxCd>
<Domn>
<Cd>PMNT</Cd>
<Fmly>
<Cd>ICDT</Cd>
<SubFmlyCd>XBCT</SubFmlyCd>
</Fmly>
</Domn>
</BkTxCd>
<NtryDtls>
<TxDtls>
<Refs>
<InstrId>cmt054bizmsgidr-001</InstrId>
<EndToEndId>pacs008EndToEndId-001</EndToEndId>
<UETR>8a562c67-ca16-48ba-b074-65581be6f001</UETR>
</Refs>
<Amt Ccy="EUR">300000</Amt>
<CdtDbtInd>DBIT</CdtDbtInd>
<RmtInf>
<Ustrd>Inv: AEG-69874/958</Ustrd>
</RmtInf>
<RltdDts>
<IntrBkSttlmDt>2020-09-08</IntrBkSttlmDt>
</RltdDts>
<RltdPties>
<Dbtr>
<Pty>
<Id>
<OrgId>
<AnyBIC>QWERASDF</AnyBIC>
</OrgId>
</Id>
</Pty>
<Agt>
<FinInstnId>
<BICFI>CITIBHNK</BICFI>
</FinInstnId>
</Agt>
</Dbtr>
<DbtrAcct>
<Id>
<Othr>
<Id>81939316</Id>
</Othr>
</Id>
</DbtrAcct>
</RltdPties>
<AddtlTxInf>chengzhuoshen</AddtlTxInf>
</TxDtls>
</NtryDtls>
</Ntry>
</Ntfctn>
</BkToCstmrDbtCdtNtfctn>
</Document>
</Envelope>
package com.brilliance.mx2mt.mt900;
import com.brilliance.swift.mx2mt.Mx2MtCreatorManager;
import org.apache.commons.io.FileUtils;
import java.io.File;
public class TestMx2MtFor900 {
public static void main(String[] args) throws Exception {
File file = new File(System.getProperty("user.dir")+"\\swiftCore\\src\\main\\resources\\swiftXml\\MxCamt05400108_DEBIT.xml");
String xmlStr = FileUtils.readFileToString(file);
String mt900 = new Mx2MtCreatorManager().mx2Mt(xmlStr, null, null);
System.out.println(mt900);
}
}
package com.brilliance.mx2mt.mt910;
import com.brilliance.swift.mx2mt.Mx2MtCreatorManager;
import org.apache.commons.io.FileUtils;
import java.io.File;
public class TestMx2MtFor910 {
public static void main(String[] args) throws Exception {
File file = new File(System.getProperty("user.dir")+"\\swiftCore\\src\\main\\resources\\swiftXml\\MxCamt05400108_CREDIT.xml");
String xmlStr = FileUtils.readFileToString(file);
String mt910 = new Mx2MtCreatorManager().mx2Mt(xmlStr, null, null);
System.out.println(mt910);
}
}
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