summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMS <ms@taler.net>2023-05-30 09:14:27 +0200
committerMS <ms@taler.net>2023-05-30 09:14:27 +0200
commit9076c7a1b22c87e27feb2e1a99a22d6566ad7034 (patch)
tree0ef72c25fcdd1d44ed40ceaaa3160536066a025d
parenta6dba8366ae28db07c96f9d166888003d5e92da1 (diff)
downloadlibeufin-9076c7a1b22c87e27feb2e1a99a22d6566ad7034.tar.gz
libeufin-9076c7a1b22c87e27feb2e1a99a22d6566ad7034.tar.bz2
libeufin-9076c7a1b22c87e27feb2e1a99a22d6566ad7034.zip
PostFinance integration.
Implementing the EBICS message type to request pain.002 documents to the bank, and bringing the pain.001 to version 2019.
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt83
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/Iso20022.kt29
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/server/JSON.kt9
-rw-r--r--nexus/src/test/kotlin/EbicsTest.kt42
-rw-r--r--nexus/src/test/kotlin/Iso20022Test.kt31
-rw-r--r--nexus/src/test/kotlin/PostFinance.kt28
-rw-r--r--util/src/main/kotlin/XMLUtil.kt4
-rw-r--r--util/src/main/resources/xsd/pain.001.001.09.ch.03.xsd1733
8 files changed, 1887 insertions, 72 deletions
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
index 50578894..138146dc 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/ebics/EbicsNexus.kt
@@ -501,6 +501,64 @@ private fun getNotificationTypeAfterDialect(dialect: String? = null): String {
* take place. The caller then decides how to handle the exceptions.
*/
class EbicsBankConnectionProtocol: BankConnectionProtocol {
+ /**
+ * Downloads the pain.002 that informs about previous
+ * payments submissions. Not all the banks offer this
+ * service; some may use analog channels.
+ */
+ suspend fun fetchPaymentReceipt(
+ fetchSpec: FetchSpecJson,
+ client: HttpClient,
+ bankConnectionId: String,
+ accountId: String
+ ) {
+ val subscriberDetails = transaction { getEbicsSubscriberDetails(bankConnectionId) }
+ // Typically a date range.
+ if (fetchSpec.level != FetchLevel.RECEIPT) {
+ logger.error("This method accepts only RECEIPT as the fetch level, not '${fetchSpec.level}'.")
+ throw badRequest("Invalid params to get payments receipts: use fetch level RECEIPT.")
+ }
+ val ebicsOrderInfo = when(fetchSpec) {
+ is FetchSpecLatestJson -> {
+ EbicsFetchSpec(
+ orderType = "Z01", // PoFi specific.
+ orderParams = EbicsStandardOrderParams()
+ )
+ }
+ else -> throw NotImplementedError("Fetch spec '${fetchSpec::class}' not supported for payment receipts.")
+ }
+ // Proceeding to download now.
+ val response = try {
+ doEbicsDownloadTransaction(
+ client,
+ subscriberDetails,
+ ebicsOrderInfo.orderType,
+ ebicsOrderInfo.orderParams
+ )
+ } catch (e: EbicsProtocolError) {
+ if (e.ebicsTechnicalCode == EbicsReturnCode.EBICS_NO_DOWNLOAD_DATA_AVAILABLE) {
+ logger.debug("EBICS had no new data")
+ return
+ }
+ // re-throw in any other error case.
+ throw e
+ }
+ when(response) {
+ is EbicsDownloadEmptyResult -> {
+ // no-op
+ }
+ is EbicsDownloadBankErrorResult -> {
+ logger.error("Bank technical code: ${response.returnCode}")
+ }
+ is EbicsDownloadSuccessResult -> {
+ // Extracting the content (pain.002) and parsing it.
+ val orderData: String = response.orderData.toString()
+ logger.debug(orderData)
+ val doc = XMLUtil.parseStringIntoDom(orderData)
+
+ }
+ }
+ }
override suspend fun fetchTransactions(
fetchSpec: FetchSpecJson,
client: HttpClient,
@@ -533,6 +591,10 @@ class EbicsBankConnectionProtocol: BankConnectionProtocol {
FetchLevel.NOTIFICATION -> {
specs.add(EbicsFetchSpec(getNotificationTypeAfterDialect(subscriberDetails.dialect), p))
}
+ else -> {
+ logger.error("fetch level wrong in addForLevel() helper: ${fetchSpec.level}.")
+ throw badRequest("Fetch level ${fetchSpec.level} not supported")
+ }
}
}
// Figuring out what time range to put in the fetch instructions.
@@ -611,6 +673,8 @@ class EbicsBankConnectionProtocol: BankConnectionProtocol {
orderParams = pNtfn
))
}
+ else -> throw badRequest("Fetch level ${fetchSpec.level} " +
+ "not supported in the 'since last' EBICS time range.")
}
}
}
@@ -636,7 +700,10 @@ class EbicsBankConnectionProtocol: BankConnectionProtocol {
}
// Submit one Pain.001 for one payment initiations.
- override suspend fun submitPaymentInitiation(httpClient: HttpClient, paymentInitiationId: Long) {
+ override suspend fun submitPaymentInitiation(
+ httpClient: HttpClient,
+ paymentInitiationId: Long
+ ) {
val dbData = transaction {
val preparedPayment = getPaymentInitiation(paymentInitiationId)
val conn = preparedPayment.bankAccount.defaultBankConnection ?: throw NexusError(
@@ -668,19 +735,7 @@ class EbicsBankConnectionProtocol: BankConnectionProtocol {
val subscriberDetails = subscriberDetails
}
}
- if (!XMLUtil.validateFromString(dbData.painXml)) {
- val pmtInfId = transaction {
- val payment = getPaymentInitiation(paymentInitiationId)
- logger.error("Pain.001 ${payment.paymentInformationId}" +
- " is invalid, not submitting it and flag as invalid.")
- payment.invalid = true
- }
- throw NexusError(
- HttpStatusCode.InternalServerError,
- "pain document: $pmtInfId document is invalid. Not sent to the bank.",
- LibeufinErrorCode.LIBEUFIN_EC_INVALID_STATE
- )
- }
+ // Used to validate here, then removed for performances reasons.
doEbicsUploadTransaction(
httpClient,
dbData.subscriberDetails,
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/Iso20022.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/Iso20022.kt
index 14e24485..57d7bb7d 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/Iso20022.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/iso20022/Iso20022.kt
@@ -135,6 +135,15 @@ data class Pain001Namespaces(
val xsdFilename: String
)
+fun XmlElementBuilder.setBicAfterDialect(dialect: String?, bic: String) {
+ if (dialect == EbicsDialects.POSTFINANCE.dialectName)
+ element("BICFI") {
+ text(bic)
+ }
+ else element("BIC") {
+ text(bic)
+ }
+}
/**
* Create a PAIN.001 XML document according to the input data.
* Needs to be called within a transaction block.
@@ -145,9 +154,10 @@ fun createPain001document(
): String {
val namespace: Pain001Namespaces = if (dialect == "pf")
+ // The 2019 version of pain.001.
Pain001Namespaces(
- fullNamespace = "http://www.six-interbank-clearing.com/de/pain.001.001.03.ch.02.xsd",
- xsdFilename = "pain.001.001.03.ch.02.xsd"
+ fullNamespace = "urn:iso:std:iso:20022:tech:xsd:pain.001.001.09",
+ xsdFilename = "pain.001.001.09.ch.03.xsd"
)
else Pain001Namespaces(
fullNamespace = "urn:iso:std:iso:20022:tech:xsd:pain.001.001.03",
@@ -208,7 +218,12 @@ fun createPain001document(
}
element("ReqdExctnDt") {
val dateMillis = paymentData.preparationTimestamp
- text(importDateFromMillis(dateMillis).toDashedDate())
+ if (dialect == EbicsDialects.POSTFINANCE.dialectName)
+ element("Dt") {
+ text(importDateFromMillis(dateMillis).toDashedDate())
+ }
+ else
+ text(importDateFromMillis(dateMillis).toDashedDate())
}
element("Dbtr/Nm") {
text(paymentData.debtorName)
@@ -216,8 +231,8 @@ fun createPain001document(
element("DbtrAcct/Id/IBAN") {
text(paymentData.debtorIban)
}
- element("DbtrAgt/FinInstnId/BIC") {
- text(paymentData.debtorBic)
+ element("DbtrAgt/FinInstnId") {
+ setBicAfterDialect(dialect, paymentData.debtorBic)
}
element("ChrgBr") {
text("SLEV")
@@ -238,8 +253,8 @@ fun createPain001document(
}
val creditorBic = paymentData.creditorBic
if (creditorBic != null) {
- element("CdtrAgt/FinInstnId/BIC") {
- text(creditorBic)
+ element("CdtrAgt/FinInstnId") {
+ setBicAfterDialect(dialect, creditorBic)
}
}
element("Cdtr/Nm") {
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/server/JSON.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/server/JSON.kt
index bb0ece5e..074a2589 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/server/JSON.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/server/JSON.kt
@@ -175,6 +175,15 @@ enum class FetchLevel(@get:JsonValue val jsonName: String) {
REPORT("report"),
STATEMENT("statement"),
NOTIFICATION("notification"),
+ /**
+ * Although not strictly used to get camt documents - typically
+ * gets pain.002 documents, this level still participates in downloading
+ * bank account activity, so placing it here.
+ */
+ RECEIPT("receipt"),
+ /**
+ * Uses of ALL do NOT include RECEIPT, in the current version.
+ */
ALL("all");
}
diff --git a/nexus/src/test/kotlin/EbicsTest.kt b/nexus/src/test/kotlin/EbicsTest.kt
index 8de0d5a5..fc43a149 100644
--- a/nexus/src/test/kotlin/EbicsTest.kt
+++ b/nexus/src/test/kotlin/EbicsTest.kt
@@ -220,48 +220,6 @@ class DownloadAndSubmit {
}
/**
- * Submits one payment instruction with an invalid Pain.001
- * document, and checks that it was marked as invalid. Hence,
- * the error is expected only by the first submission, since
- * the second won't pick the invalid payment.
- */
- @Test
- fun invalidPain001() {
- withNexusAndSandboxUser {
- testApplication {
- application(sandboxApp)
- runBlocking {
- // Create Pain.001 to be submitted.
- addPaymentInitiation(
- Pain001Data(
- creditorIban = getIban(),
- creditorBic = "not-a-BIC", // this value causes the expected error.
- creditorName = "Tester",
- subject = "test payment",
- sum = "1",
- currency = "TESTKUDOS"
- ),
- transaction {
- NexusBankAccountEntity.findByName("foo") ?: throw Exception("Test failed")
- }
- )
- // Encounters errors.
- var thrown = false
- try {
- submitAllPaymentInitiations(client, "foo")
- } catch (e: NexusError) {
- assert((e.code == LibeufinErrorCode.LIBEUFIN_EC_INVALID_STATE))
- thrown = true
- }
- assert(thrown)
- // No errors, since it should not retry.
- submitAllPaymentInitiations(client, "foo")
- }
- }
- }
- }
-
- /**
* Submits one pain.001 document with the wrong currency and checks
* that the bank responded with EBICS_PROCESSING_ERROR.
*/
diff --git a/nexus/src/test/kotlin/Iso20022Test.kt b/nexus/src/test/kotlin/Iso20022Test.kt
index bc5d7379..253f9cfa 100644
--- a/nexus/src/test/kotlin/Iso20022Test.kt
+++ b/nexus/src/test/kotlin/Iso20022Test.kt
@@ -20,6 +20,7 @@ import tech.libeufin.nexus.server.nexusApp
import tech.libeufin.util.DestructionError
import tech.libeufin.util.XMLUtil
import tech.libeufin.util.destructXml
+import tech.libeufin.util.getNow
import withTestDatabase
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
@@ -122,10 +123,13 @@ class Iso20022Test {
parseCamtMessage(doc, dialect = "pf")
}
+ // TODO: test deduplication here.
+
@Test
fun ingestPoFiCamt054() {
val doc = XMLUtil.parseStringIntoDom(poFiCamt054_2019)
- withTestDatabase { prepNexusDb()
+ withTestDatabase {
+ prepNexusDb()
ingestCamtMessageIntoAccount(
"foo",
doc,
@@ -134,6 +138,31 @@ class Iso20022Test {
)
}
}
+ // Checks that the 2019 pain.001 version validates.
+ @Test
+ fun validatePain001() {
+ val pain001 = createPain001document(
+ NexusPaymentInitiationData(
+ debtorIban = "CH0889144371988976754",
+ debtorBic = "POFICHBEXXX",
+ debtorName = "Sample Debtor Name",
+ currency = "CHF",
+ amount = "5.00",
+ creditorIban = "CH9789144829733648596",
+ creditorName = "Sample Creditor Name",
+ creditorBic = "POFICHBEXXX",
+ paymentInformationId = "8aae7a2ded2f",
+ preparationTimestamp = getNow().toInstant().toEpochMilli(),
+ subject = "Unstructured remittance information",
+ instructionId = "InstructionId",
+ endToEndId = "71cfbdaf901f",
+ messageId = "2a16b35ed69c"
+ ),
+ dialect = "pf"
+ )
+ val doc = XMLUtil.parseStringIntoDom(pain001)
+ assert(XMLUtil.validateFromDom(doc))
+ }
@Test
fun parsePostFinanceCamt052() {
diff --git a/nexus/src/test/kotlin/PostFinance.kt b/nexus/src/test/kotlin/PostFinance.kt
index 5b93f677..23b562c2 100644
--- a/nexus/src/test/kotlin/PostFinance.kt
+++ b/nexus/src/test/kotlin/PostFinance.kt
@@ -5,6 +5,7 @@ import org.jetbrains.exposed.sql.transactions.transaction
import tech.libeufin.nexus.bankaccount.addPaymentInitiation
import tech.libeufin.nexus.bankaccount.fetchBankAccountTransactions
import tech.libeufin.nexus.bankaccount.getBankAccount
+import tech.libeufin.nexus.ebics.EbicsBankConnectionProtocol
import tech.libeufin.nexus.ebics.doEbicsUploadTransaction
import tech.libeufin.nexus.ebics.getEbicsSubscriberDetails
import tech.libeufin.nexus.getConnectionPlugin
@@ -14,7 +15,7 @@ import tech.libeufin.util.EbicsStandardOrderParams
import java.io.BufferedReader
import java.io.File
-
+// Submits a Z54 to the bank, expecting a camt.054 back.
private fun downloadPayment() {
val httpClient = HttpClient()
runBlocking {
@@ -29,7 +30,9 @@ private fun downloadPayment() {
}
}
-// Causes one CRDT payment to show up in the camt.054.
+/* Simulates one incoming payment for the test platorm's bank account.
+ * The QRR format is NOT used in Taler, it is just convenient.
+ * */
private fun uploadQrrPayment() {
val httpClient = HttpClient()
val qrr = """
@@ -48,6 +51,8 @@ private fun uploadQrrPayment() {
}
/**
+ * Submits a XE2 (+ pain.001 version 2019) message to the bank.
+ *
* Causes one DBIT payment to show up in the camt.054. This one
* however lacks the AcctSvcrRef, so other ways to pin it are needed.
* Notably, EndToEndId is mandatory in pain.001 _and_ is controlled
@@ -75,19 +80,22 @@ private fun uploadPain001Payment() {
ebicsConn.submitPaymentInitiation(httpClient, 1L)
}
}
+
fun main() {
- // Load EBICS subscriber's keys from disk.
+ // Loads EBICS subscriber's keys from disk.
val bufferedReader: BufferedReader = File("/tmp/pofi.json").bufferedReader()
val accessDataTxt = bufferedReader.use { it.readText() }
val ebicsConn = getConnectionPlugin("ebics")
val accessDataJson = jacksonObjectMapper().readTree(accessDataTxt)
+
+ // Creates a connection handle to the bank, using the loaded keys.
withTestDatabase {
prepNexusDb()
transaction {
ebicsConn.createConnectionFromBackup(
connId = "postfinance",
user = getNexusUser("foo"),
- passphrase = "foo",
+ passphrase = "secret",
accessDataJson
)
val fooBankAccount = getBankAccount("foo")
@@ -95,6 +103,14 @@ fun main() {
fooBankAccount.iban = "CH9789144829733648596"
}
}
- // uploadPayment()
- downloadPayment()
+ // uploadPain001Payment() // XE2
+ // downloadPayment() // Z54.
+ /*runBlocking {
+ (ebicsConn as EbicsBankConnectionProtocol).fetchPaymentReceipt(
+ FetchSpecLatestJson(FetchLevel.RECEIPT, null),
+ HttpClient(),
+ "postfinance",
+ "foo"
+ )
+ }*/
} \ No newline at end of file
diff --git a/util/src/main/kotlin/XMLUtil.kt b/util/src/main/kotlin/XMLUtil.kt
index 4a4b9a48..59772430 100644
--- a/util/src/main/kotlin/XMLUtil.kt
+++ b/util/src/main/kotlin/XMLUtil.kt
@@ -225,7 +225,6 @@ class XMLUtil private constructor() {
}
}
}
-
val schemaInputs: Array<Source> = listOf(
"xsd/ebics_H004.xsd",
"xsd/ebics_hev.xsd",
@@ -233,7 +232,8 @@ class XMLUtil private constructor() {
"xsd/camt.053.001.02.xsd",
"xsd/camt.054.001.02.xsd",
"xsd/pain.001.001.03.xsd",
- "xsd/pain.001.001.03.ch.02.xsd" // Swiss 2013 version.
+ // "xsd/pain.001.001.03.ch.02.xsd", // Swiss 2013 version.
+ "xsd/pain.001.001.09.ch.03.xsd" // Swiss 2019 version.
).map {
val stream =
classLoader.getResourceAsStream(it) ?: throw FileNotFoundException("Schema file $it not found.")
diff --git a/util/src/main/resources/xsd/pain.001.001.09.ch.03.xsd b/util/src/main/resources/xsd/pain.001.001.09.ch.03.xsd
new file mode 100644
index 00000000..f12da93c
--- /dev/null
+++ b/util/src/main/resources/xsd/pain.001.001.09.ch.03.xsd
@@ -0,0 +1,1733 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+(C) Copyright 2021, SIX, www.iso-payments.ch
+CH Version for pain.001 Credit Transfer: "pain.001.001.09.ch.03.xsd"
+.ch.: Identification for this CH version
+Last part (.03): CH Version of this scheme
+
+Based on ISO pain.001.001.09 (urn:iso:std:iso:20022:tech:xsd:pain.001.001.09)
+-->
+<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09" elementFormDefault="qualified">
+ <xs:element name="Document" type="Document_pain001_ch"/>
+ <xs:complexType name="AccountIdentification4Choice">
+ <xs:choice>
+ <xs:element name="IBAN" type="IBAN2007Identifier"/>
+ <xs:element name="Othr" type="GenericAccountIdentification1"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="AccountIdentification4Choice_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="AccountIdentification4Choice">
+ <xs:choice>
+ <xs:element name="IBAN" type="IBAN2007Identifier"/>
+ <xs:element name="Othr" type="GenericAccountIdentification1_pain001_ch"/>
+ </xs:choice>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="AccountSchemeName1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalAccountIdentification1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="ActiveOrHistoricCurrencyAndAmount">
+ <xs:simpleContent>
+ <xs:extension base="ActiveOrHistoricCurrencyAndAmount_SimpleType">
+ <xs:attribute name="Ccy" type="ActiveOrHistoricCurrencyCode" use="required"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ <xs:simpleType name="ActiveOrHistoricCurrencyAndAmount_SimpleType">
+ <xs:restriction base="xs:decimal">
+ <xs:minInclusive value="0"/>
+ <xs:totalDigits value="18"/>
+ <xs:fractionDigits value="5"/>
+ </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="AddressType2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="ADDR"/>
+ <xs:enumeration value="BIZZ"/>
+ <xs:enumeration value="DLVY"/>
+ <xs:enumeration value="HOME"/>
+ <xs:enumeration value="MLTO"/>
+ <xs:enumeration value="PBOX"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="AddressType3Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="AddressType2Code"/>
+ <xs:element name="Prtry" type="GenericIdentification30"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="AmountType4Choice">
+ <xs:choice>
+ <xs:element name="InstdAmt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="EqvtAmt" type="EquivalentAmount2"/>
+ </xs:choice>
+ </xs:complexType>
+ <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:complexType name="Authorisation1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="Authorisation1Code"/>
+ <xs:element name="Prtry" type="Max128Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="Authorisation1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="AUTH"/>
+ <xs:enumeration value="FDET"/>
+ <xs:enumeration value="FSUM"/>
+ <xs:enumeration value="ILEV"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="BaseOneRate">
+ <xs:restriction base="xs:decimal">
+ <xs:totalDigits value="11"/>
+ <xs:fractionDigits value="10"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="BatchBookingIndicator">
+ <xs:restriction base="xs:boolean"/>
+ </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">
+ <xs:sequence>
+ <xs:element name="FinInstnId" type="FinancialInstitutionIdentification18"/>
+ <xs:element name="BrnchId" type="BranchData3" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="BranchAndFinancialInstitutionIdentification6_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="BranchAndFinancialInstitutionIdentification6">
+ <xs:sequence>
+ <xs:element name="FinInstnId" type="FinancialInstitutionIdentification18_pain001_ch"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="BranchAndFinancialInstitutionIdentification6_pain001_ch_2">
+ <xs:complexContent>
+ <xs:restriction base="BranchAndFinancialInstitutionIdentification6">
+ <xs:sequence>
+ <xs:element name="FinInstnId" type="FinancialInstitutionIdentification18_pain001_ch_2"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="BranchAndFinancialInstitutionIdentification6_pain001_ch_3">
+ <xs:complexContent>
+ <xs:restriction base="BranchAndFinancialInstitutionIdentification6">
+ <xs:sequence>
+ <xs:element name="FinInstnId" type="FinancialInstitutionIdentification18_pain001_ch_3"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="BranchAndFinancialInstitutionIdentification6_pain001_ch_4">
+ <xs:complexContent>
+ <xs:restriction base="BranchAndFinancialInstitutionIdentification6">
+ <xs:sequence>
+ <xs:element name="FinInstnId" type="FinancialInstitutionIdentification18_pain001_ch_4"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="BranchData3">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text" minOccurs="0"/>
+ <xs:element name="LEI" type="LEIIdentifier" minOccurs="0"/>
+ <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
+ <xs:element name="PstlAdr" type="PostalAddress24" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CashAccount38">
+ <xs:sequence>
+ <xs:element name="Id" type="AccountIdentification4Choice"/>
+ <xs:element name="Tp" type="CashAccountType2Choice" minOccurs="0"/>
+ <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
+ <xs:element name="Nm" type="Max70Text" minOccurs="0"/>
+ <xs:element name="Prxy" type="ProxyAccountIdentification1" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CashAccount38_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="CashAccount38">
+ <xs:sequence>
+ <xs:element name="Id" type="AccountIdentification4Choice_pain001_ch"/>
+ <xs:element name="Tp" type="CashAccountType2Choice" minOccurs="0"/>
+ <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
+ <xs:element name="Prxy" type="ProxyAccountIdentification1" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="CashAccount38_pain001_ch_2">
+ <xs:complexContent>
+ <xs:restriction base="CashAccount38">
+ <xs:sequence>
+ <xs:element name="Id" type="AccountIdentification4Choice_pain001_ch"/>
+ <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
+ <xs:element name="Prxy" type="ProxyAccountIdentification1" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="CashAccount38_pain001_ch_3">
+ <xs:complexContent>
+ <xs:restriction base="CashAccount38">
+ <xs:sequence>
+ <xs:element name="Id" type="AccountIdentification4Choice"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="CashAccount38_pain001_ch_4">
+ <xs:complexContent>
+ <xs:restriction base="CashAccount38">
+ <xs:sequence>
+ <xs:element name="Id" type="AccountIdentification4Choice_pain001_ch"/>
+ <xs:element name="Prxy" type="ProxyAccountIdentification1" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="CashAccountType2Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalCashAccountType1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="CategoryPurpose1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalCategoryPurpose1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="CategoryPurpose1Choice_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="CategoryPurpose1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalCategoryPurpose1Code"/>
+ </xs:choice>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:simpleType name="ChargeBearerType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CRED"/>
+ <xs:enumeration value="DEBT"/>
+ <xs:enumeration value="SHAR"/>
+ <xs:enumeration value="SLEV"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="Cheque11">
+ <xs:sequence>
+ <xs:element name="ChqTp" type="ChequeType2Code" minOccurs="0"/>
+ <xs:element name="ChqNb" type="Max35Text" minOccurs="0"/>
+ <xs:element name="ChqFr" type="NameAndAddress16" minOccurs="0"/>
+ <xs:element name="DlvryMtd" type="ChequeDeliveryMethod1Choice" minOccurs="0"/>
+ <xs:element name="DlvrTo" type="NameAndAddress16" minOccurs="0"/>
+ <xs:element name="InstrPrty" type="Priority2Code" minOccurs="0"/>
+ <xs:element name="ChqMtrtyDt" type="ISODate" minOccurs="0"/>
+ <xs:element name="FrmsCd" type="Max35Text" minOccurs="0"/>
+ <xs:element name="MemoFld" type="Max35Text" minOccurs="0" maxOccurs="2"/>
+ <xs:element name="RgnlClrZone" type="Max35Text" minOccurs="0"/>
+ <xs:element name="PrtLctn" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Sgntr" type="Max70Text" minOccurs="0" maxOccurs="5"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Cheque11_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="Cheque11">
+ <xs:sequence>
+ <xs:element name="ChqTp" type="ChequeType2Code" minOccurs="0"/>
+ <xs:element name="DlvryMtd" type="ChequeDeliveryMethod1Choice" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:simpleType name="ChequeDelivery1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CRCD"/>
+ <xs:enumeration value="CRDB"/>
+ <xs:enumeration value="CRFA"/>
+ <xs:enumeration value="MLCD"/>
+ <xs:enumeration value="MLDB"/>
+ <xs:enumeration value="MLFA"/>
+ <xs:enumeration value="PUCD"/>
+ <xs:enumeration value="PUDB"/>
+ <xs:enumeration value="PUFA"/>
+ <xs:enumeration value="RGCD"/>
+ <xs:enumeration value="RGDB"/>
+ <xs:enumeration value="RGFA"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ChequeDeliveryMethod1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ChequeDelivery1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="ChequeType2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="BCHQ"/>
+ <xs:enumeration value="CCCH"/>
+ <xs:enumeration value="CCHQ"/>
+ <xs:enumeration value="DRFT"/>
+ <xs:enumeration value="ELDR"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ClearingSystemIdentification2Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalClearingSystemIdentification1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="ClearingSystemIdentification2Choice_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="ClearingSystemIdentification2Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalClearingSystemIdentification1Code"/>
+ </xs:choice>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="ClearingSystemMemberIdentification2">
+ <xs:sequence>
+ <xs:element name="ClrSysId" type="ClearingSystemIdentification2Choice" minOccurs="0"/>
+ <xs:element name="MmbId" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ClearingSystemMemberIdentification2_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="ClearingSystemMemberIdentification2">
+ <xs:sequence>
+ <xs:element name="ClrSysId" type="ClearingSystemIdentification2Choice_pain001_ch" minOccurs="0"/>
+ <xs:element name="MmbId" type="Max35Text"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="Contact4">
+ <xs:sequence>
+ <xs:element name="NmPrfx" type="NamePrefix2Code" minOccurs="0"/>
+ <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
+ <xs:element name="PhneNb" type="PhoneNumber" minOccurs="0"/>
+ <xs:element name="MobNb" type="PhoneNumber" minOccurs="0"/>
+ <xs:element name="FaxNb" type="PhoneNumber" minOccurs="0"/>
+ <xs:element name="EmailAdr" type="Max2048Text" minOccurs="0"/>
+ <xs:element name="EmailPurp" type="Max35Text" minOccurs="0"/>
+ <xs:element name="JobTitl" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Rspnsblty" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Dept" type="Max70Text" minOccurs="0"/>
+ <xs:element name="Othr" type="OtherContact1" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="PrefrdMtd" type="PreferredContactMethod1Code" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Contact4_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="Contact4">
+ <xs:sequence>
+ <xs:element name="Othr" type="OtherContact1_pain001_ch" minOccurs="0" maxOccurs="4"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:simpleType name="CountryCode">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z]{2,2}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="CreditDebitCode">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CRDT"/>
+ <xs:enumeration value="DBIT"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CreditorReferenceInformation2">
+ <xs:sequence>
+ <xs:element name="Tp" type="CreditorReferenceType2" minOccurs="0"/>
+ <xs:element name="Ref" type="Max35Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CreditorReferenceType1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="DocumentType3Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="CreditorReferenceType2">
+ <xs:sequence>
+ <xs:element name="CdOrPrtry" type="CreditorReferenceType1Choice"/>
+ <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CreditTransferTransaction34">
+ <xs:sequence>
+ <xs:element name="PmtId" type="PaymentIdentification6"/>
+ <xs:element name="PmtTpInf" type="PaymentTypeInformation26" minOccurs="0"/>
+ <xs:element name="Amt" type="AmountType4Choice"/>
+ <xs:element name="XchgRateInf" type="ExchangeRate1" minOccurs="0"/>
+ <xs:element name="ChrgBr" type="ChargeBearerType1Code" minOccurs="0"/>
+ <xs:element name="ChqInstr" type="Cheque11" minOccurs="0"/>
+ <xs:element name="UltmtDbtr" type="PartyIdentification135" minOccurs="0"/>
+ <xs:element name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification6" minOccurs="0"/>
+ <xs:element name="IntrmyAgt1Acct" type="CashAccount38" minOccurs="0"/>
+ <xs:element name="IntrmyAgt2" type="BranchAndFinancialInstitutionIdentification6" minOccurs="0"/>
+ <xs:element name="IntrmyAgt2Acct" type="CashAccount38" minOccurs="0"/>
+ <xs:element name="IntrmyAgt3" type="BranchAndFinancialInstitutionIdentification6" minOccurs="0"/>
+ <xs:element name="IntrmyAgt3Acct" type="CashAccount38" minOccurs="0"/>
+ <xs:element name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification6" minOccurs="0"/>
+ <xs:element name="CdtrAgtAcct" type="CashAccount38" minOccurs="0"/>
+ <xs:element name="Cdtr" type="PartyIdentification135" minOccurs="0"/>
+ <xs:element name="CdtrAcct" type="CashAccount38" minOccurs="0"/>
+ <xs:element name="UltmtCdtr" type="PartyIdentification135" minOccurs="0"/>
+ <xs:element name="InstrForCdtrAgt" type="InstructionForCreditorAgent1" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="InstrForDbtrAgt" type="Max140Text" minOccurs="0"/>
+ <xs:element name="Purp" type="Purpose2Choice" minOccurs="0"/>
+ <xs:element name="RgltryRptg" type="RegulatoryReporting3" minOccurs="0" maxOccurs="10"/>
+ <xs:element name="Tax" type="TaxInformation8" minOccurs="0"/>
+ <xs:element name="RltdRmtInf" type="RemittanceLocation7" minOccurs="0" maxOccurs="10"/>
+ <xs:element name="RmtInf" type="RemittanceInformation16" minOccurs="0"/>
+ <xs:element name="SplmtryData" type="SupplementaryData1" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CreditTransferTransaction34_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="CreditTransferTransaction34">
+ <xs:sequence>
+ <xs:element name="PmtId" type="PaymentIdentification6_pain001_ch"/>
+ <xs:element name="PmtTpInf" type="PaymentTypeInformation26_pain001_ch_2" minOccurs="0"/>
+ <xs:element name="Amt" type="AmountType4Choice"/>
+ <xs:element name="XchgRateInf" type="ExchangeRate1" minOccurs="0"/>
+ <xs:element name="ChrgBr" type="ChargeBearerType1Code" minOccurs="0"/>
+ <xs:element name="ChqInstr" type="Cheque11_pain001_ch" minOccurs="0"/>
+ <xs:element name="UltmtDbtr" type="PartyIdentification135_pain001_ch_3" minOccurs="0"/>
+ <xs:element name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification6_pain001_ch_3" minOccurs="0"/>
+ <xs:element name="IntrmyAgt1Acct" type="CashAccount38_pain001_ch_3" minOccurs="0"/>
+ <xs:element name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification6_pain001_ch_4" minOccurs="0"/>
+ <xs:element name="CdtrAgtAcct" type="CashAccount38_pain001_ch_3" minOccurs="0"/>
+ <xs:element name="Cdtr" type="PartyIdentification135_pain001_ch_4" minOccurs="0"/>
+ <xs:element name="CdtrAcct" type="CashAccount38_pain001_ch_4" minOccurs="0"/>
+ <xs:element name="UltmtCdtr" type="PartyIdentification135_pain001_ch_3" minOccurs="0"/>
+ <xs:element name="InstrForCdtrAgt" type="InstructionForCreditorAgent1" minOccurs="0" maxOccurs="2"/>
+ <xs:element name="InstrForDbtrAgt" type="Max140Text" minOccurs="0"/>
+ <xs:element name="Purp" type="Purpose2Choice_pain001_ch" minOccurs="0"/>
+ <xs:element name="RgltryRptg" type="RegulatoryReporting3" minOccurs="0" maxOccurs="10"/>
+ <xs:element name="RltdRmtInf" type="RemittanceLocation7" minOccurs="0"/>
+ <xs:element name="RmtInf" type="RemittanceInformation16_pain001_ch" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="CustomerCreditTransferInitiationV09">
+ <xs:sequence>
+ <xs:element name="GrpHdr" type="GroupHeader85"/>
+ <xs:element name="PmtInf" type="PaymentInstruction30" maxOccurs="unbounded"/>
+ <xs:element name="SplmtryData" type="SupplementaryData1" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CustomerCreditTransferInitiationV09_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="CustomerCreditTransferInitiationV09">
+ <xs:sequence>
+ <xs:element name="GrpHdr" type="GroupHeader85_pain001_ch"/>
+ <xs:element name="PmtInf" type="PaymentInstruction30_pain001_ch" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="DateAndDateTime2Choice">
+ <xs:choice>
+ <xs:element name="Dt" type="ISODate"/>
+ <xs:element name="DtTm" type="ISODateTime"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="DateAndPlaceOfBirth1">
+ <xs:sequence>
+ <xs:element name="BirthDt" type="ISODate"/>
+ <xs:element name="PrvcOfBirth" type="Max35Text" minOccurs="0"/>
+ <xs:element name="CityOfBirth" type="Max35Text"/>
+ <xs:element name="CtryOfBirth" type="CountryCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DatePeriod2">
+ <xs:sequence>
+ <xs:element name="FrDt" type="ISODate"/>
+ <xs:element name="ToDt" type="ISODate"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="DecimalNumber">
+ <xs:restriction base="xs:decimal">
+ <xs:totalDigits value="18"/>
+ <xs:fractionDigits value="17"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="DiscountAmountAndType1">
+ <xs:sequence>
+ <xs:element name="Tp" type="DiscountAmountType1Choice" minOccurs="0"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DiscountAmountType1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalDiscountAmountType1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="Document">
+ <xs:sequence>
+ <xs:element name="CstmrCdtTrfInitn" type="CustomerCreditTransferInitiationV09"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DocumentAdjustment1">
+ <xs:sequence>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
+ <xs:element name="Rsn" type="Max4Text" minOccurs="0"/>
+ <xs:element name="AddtlInf" type="Max140Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DocumentLineIdentification1">
+ <xs:sequence>
+ <xs:element name="Tp" type="DocumentLineType1" minOccurs="0"/>
+ <xs:element name="Nb" type="Max35Text" minOccurs="0"/>
+ <xs:element name="RltdDt" type="ISODate" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DocumentLineInformation1">
+ <xs:sequence>
+ <xs:element name="Id" type="DocumentLineIdentification1" maxOccurs="unbounded"/>
+ <xs:element name="Desc" type="Max2048Text" minOccurs="0"/>
+ <xs:element name="Amt" type="RemittanceAmount3" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DocumentLineType1">
+ <xs:sequence>
+ <xs:element name="CdOrPrtry" type="DocumentLineType1Choice"/>
+ <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DocumentLineType1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalDocumentLineType1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="DocumentType3Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="DISP"/>
+ <xs:enumeration value="FXDR"/>
+ <xs:enumeration value="PUOR"/>
+ <xs:enumeration value="RADM"/>
+ <xs:enumeration value="RPIN"/>
+ <xs:enumeration value="SCOR"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="DocumentType6Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="AROI"/>
+ <xs:enumeration value="BOLD"/>
+ <xs:enumeration value="CINV"/>
+ <xs:enumeration value="CMCN"/>
+ <xs:enumeration value="CNFA"/>
+ <xs:enumeration value="CREN"/>
+ <xs:enumeration value="DEBN"/>
+ <xs:enumeration value="DISP"/>
+ <xs:enumeration value="DNFA"/>
+ <xs:enumeration value="HIRI"/>
+ <xs:enumeration value="MSIN"/>
+ <xs:enumeration value="PUOR"/>
+ <xs:enumeration value="SBIN"/>
+ <xs:enumeration value="SOAC"/>
+ <xs:enumeration value="TSUT"/>
+ <xs:enumeration value="VCHR"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="Document_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="Document">
+ <xs:sequence>
+ <xs:element name="CstmrCdtTrfInitn" type="CustomerCreditTransferInitiationV09_pain001_ch"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="EquivalentAmount2">
+ <xs:sequence>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="CcyOfTrf" type="ActiveOrHistoricCurrencyCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="Exact4AlphaNumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[a-zA-Z0-9]{4}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ExchangeRate1">
+ <xs:sequence>
+ <xs:element name="UnitCcy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
+ <xs:element name="XchgRate" type="BaseOneRate" minOccurs="0"/>
+ <xs:element name="RateTp" type="ExchangeRateType1Code" minOccurs="0"/>
+ <xs:element name="CtrctId" type="Max35Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="ExchangeRateType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="AGRD"/>
+ <xs:enumeration value="SALE"/>
+ <xs:enumeration value="SPOT"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <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="ExternalCategoryPurpose1Code">
+ <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="ExternalDiscountAmountType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalDocumentLineType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalFinancialInstitutionIdentification1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalGarnishmentType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalLocalInstrument1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="35"/>
+ </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:simpleType name="ExternalPurpose1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalServiceLevel1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalTaxAmountType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="FinancialIdentificationSchemeName1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalFinancialInstitutionIdentification1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="FinancialInstitutionIdentification18">
+ <xs:sequence>
+ <xs:element name="BICFI" type="BICFIDec2014Identifier" minOccurs="0"/>
+ <xs:element name="ClrSysMmbId" type="ClearingSystemMemberIdentification2" minOccurs="0"/>
+ <xs:element name="LEI" type="LEIIdentifier" minOccurs="0"/>
+ <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
+ <xs:element name="PstlAdr" type="PostalAddress24" minOccurs="0"/>
+ <xs:element name="Othr" type="GenericFinancialIdentification1" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="FinancialInstitutionIdentification18_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="FinancialInstitutionIdentification18">
+ <xs:sequence>
+ <xs:element name="BICFI" type="BICFIDec2014Identifier" minOccurs="0"/>
+ <xs:element name="ClrSysMmbId" type="ClearingSystemMemberIdentification2" minOccurs="0"/>
+ <xs:element name="LEI" type="LEIIdentifier" minOccurs="0"/>
+ <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
+ <xs:element name="PstlAdr" type="PostalAddress24_pain001_ch" minOccurs="0"/>
+ <xs:element name="Othr" type="GenericFinancialIdentification1_pain001_ch" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="FinancialInstitutionIdentification18_pain001_ch_2">
+ <xs:complexContent>
+ <xs:restriction base="FinancialInstitutionIdentification18">
+ <xs:sequence>
+ <xs:element name="BICFI" type="BICFIDec2014Identifier" minOccurs="0"/>
+ <xs:element name="ClrSysMmbId" type="ClearingSystemMemberIdentification2_pain001_ch" minOccurs="0"/>
+ <xs:element name="LEI" type="LEIIdentifier" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="FinancialInstitutionIdentification18_pain001_ch_3">
+ <xs:complexContent>
+ <xs:restriction base="FinancialInstitutionIdentification18">
+ <xs:sequence>
+ <xs:element name="BICFI" type="BICFIDec2014Identifier" minOccurs="0"/>
+ <xs:element name="ClrSysMmbId" type="ClearingSystemMemberIdentification2_pain001_ch" minOccurs="0"/>
+ <xs:element name="LEI" type="LEIIdentifier" minOccurs="0"/>
+ <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
+ <xs:element name="PstlAdr" type="PostalAddress24_pain001_ch_4" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="FinancialInstitutionIdentification18_pain001_ch_4">
+ <xs:complexContent>
+ <xs:restriction base="FinancialInstitutionIdentification18">
+ <xs:sequence>
+ <xs:element name="BICFI" type="BICFIDec2014Identifier" minOccurs="0"/>
+ <xs:element name="ClrSysMmbId" type="ClearingSystemMemberIdentification2_pain001_ch" minOccurs="0"/>
+ <xs:element name="LEI" type="LEIIdentifier" minOccurs="0"/>
+ <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
+ <xs:element name="PstlAdr" type="PostalAddress24_pain001_ch_3" minOccurs="0"/>
+ <xs:element name="Othr" type="GenericFinancialIdentification1_pain001_ch_2" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="Garnishment3">
+ <xs:sequence>
+ <xs:element name="Tp" type="GarnishmentType1"/>
+ <xs:element name="Grnshee" type="PartyIdentification135" minOccurs="0"/>
+ <xs:element name="GrnshmtAdmstr" type="PartyIdentification135" minOccurs="0"/>
+ <xs:element name="RefNb" type="Max140Text" minOccurs="0"/>
+ <xs:element name="Dt" type="ISODate" minOccurs="0"/>
+ <xs:element name="RmtdAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ <xs:element name="FmlyMdclInsrncInd" type="TrueFalseIndicator" minOccurs="0"/>
+ <xs:element name="MplyeeTermntnInd" type="TrueFalseIndicator" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Garnishment3_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="Garnishment3">
+ <xs:sequence>
+ <xs:element name="Tp" type="GarnishmentType1"/>
+ <xs:element name="Grnshee" type="PartyIdentification135_pain001_ch_5" minOccurs="0"/>
+ <xs:element name="GrnshmtAdmstr" type="PartyIdentification135_pain001_ch_5" minOccurs="0"/>
+ <xs:element name="RefNb" type="Max140Text" minOccurs="0"/>
+ <xs:element name="Dt" type="ISODate" minOccurs="0"/>
+ <xs:element name="RmtdAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ <xs:element name="FmlyMdclInsrncInd" type="TrueFalseIndicator" minOccurs="0"/>
+ <xs:element name="MplyeeTermntnInd" type="TrueFalseIndicator" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="GarnishmentType1">
+ <xs:sequence>
+ <xs:element name="CdOrPrtry" type="GarnishmentType1Choice"/>
+ <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GarnishmentType1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalGarnishmentType1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="GenericAccountIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max34Text"/>
+ <xs:element name="SchmeNm" type="AccountSchemeName1Choice" minOccurs="0"/>
+ <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GenericAccountIdentification1_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="GenericAccountIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max34Text"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="GenericFinancialIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element name="SchmeNm" type="FinancialIdentificationSchemeName1Choice" minOccurs="0"/>
+ <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GenericFinancialIdentification1_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="GenericFinancialIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element name="SchmeNm" type="FinancialIdentificationSchemeName1Choice" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="GenericFinancialIdentification1_pain001_ch_2">
+ <xs:complexContent>
+ <xs:restriction base="GenericFinancialIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="GenericIdentification30">
+ <xs:sequence>
+ <xs:element name="Id" type="Exact4AlphaNumericText"/>
+ <xs:element name="Issr" type="Max35Text"/>
+ <xs:element name="SchmeNm" type="Max35Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GenericOrganisationIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element name="SchmeNm" type="OrganisationIdentificationSchemeName1Choice" minOccurs="0"/>
+ <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GenericPersonIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element name="SchmeNm" type="PersonIdentificationSchemeName1Choice" minOccurs="0"/>
+ <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GroupHeader85">
+ <xs:sequence>
+ <xs:element name="MsgId" type="Max35Text"/>
+ <xs:element name="CreDtTm" type="ISODateTime"/>
+ <xs:element name="Authstn" type="Authorisation1Choice" minOccurs="0" maxOccurs="2"/>
+ <xs:element name="NbOfTxs" type="Max15NumericText"/>
+ <xs:element name="CtrlSum" type="DecimalNumber" minOccurs="0"/>
+ <xs:element name="InitgPty" type="PartyIdentification135"/>
+ <xs:element name="FwdgAgt" type="BranchAndFinancialInstitutionIdentification6" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GroupHeader85_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="GroupHeader85">
+ <xs:sequence>
+ <xs:element name="MsgId" type="Max35Text_pain001_ch"/>
+ <xs:element name="CreDtTm" type="ISODateTime"/>
+ <xs:element name="NbOfTxs" type="Max15NumericText"/>
+ <xs:element name="CtrlSum" type="DecimalNumber" minOccurs="0"/>
+ <xs:element name="InitgPty" type="PartyIdentification135_pain001_ch"/>
+ <xs:element name="FwdgAgt" type="BranchAndFinancialInstitutionIdentification6_pain001_ch" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </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="Instruction3Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CHQB"/>
+ <xs:enumeration value="HOLD"/>
+ <xs:enumeration value="PHOB"/>
+ <xs:enumeration value="TELB"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="InstructionForCreditorAgent1">
+ <xs:sequence>
+ <xs:element name="Cd" type="Instruction3Code" minOccurs="0"/>
+ <xs:element name="InstrInf" type="Max140Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="ISODate">
+ <xs:restriction base="xs:date"/>
+ </xs:simpleType>
+ <xs:simpleType name="ISODateTime">
+ <xs:restriction base="xs:dateTime"/>
+ </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:complexType name="LocalInstrument2Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalLocalInstrument1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="Max10Text">
+ <xs:restriction base="SPSText">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="10"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max128Text">
+ <xs:restriction base="SPSText">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="128"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max140Text">
+ <xs:restriction base="SPSText">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="140"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max15NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{1,15}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max16Text">
+ <xs:restriction base="SPSText">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="16"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max2048Text">
+ <xs:restriction base="SPSText">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="2048"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max34Text">
+ <xs:restriction base="SPSText">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="34"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max350Text">
+ <xs:restriction base="SPSText">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="350"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max35Text">
+ <xs:restriction base="SPSText">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="35"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max35Text_pain001_ch">
+ <xs:restriction base="Max35Text">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="35"/>
+ <xs:pattern value="([A-Za-z0-9]|[+|\?|/|\-|:|\(|\)|\.|,|&apos;|\p{Zs}])*"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max4Text">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max70Text">
+ <xs:restriction base="SPSText">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="70"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="NameAndAddress16">
+ <xs:sequence>
+ <xs:element name="Nm" type="Max140Text"/>
+ <xs:element name="Adr" type="PostalAddress24"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="NamePrefix2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="DOCT"/>
+ <xs:enumeration value="MADM"/>
+ <xs:enumeration value="MIKS"/>
+ <xs:enumeration value="MISS"/>
+ <xs:enumeration value="MIST"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Number">
+ <xs:restriction base="xs:decimal">
+ <xs:totalDigits value="18"/>
+ <xs:fractionDigits value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="OrganisationIdentification29">
+ <xs:sequence>
+ <xs:element name="AnyBIC" type="AnyBICDec2014Identifier" minOccurs="0"/>
+ <xs:element name="LEI" type="LEIIdentifier" minOccurs="0"/>
+ <xs:element name="Othr" type="GenericOrganisationIdentification1" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="OrganisationIdentification29_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="OrganisationIdentification29">
+ <xs:sequence>
+ <xs:element name="AnyBIC" type="AnyBICDec2014Identifier" minOccurs="0"/>
+ <xs:element name="LEI" type="LEIIdentifier" minOccurs="0"/>
+ <xs:element name="Othr" type="GenericOrganisationIdentification1" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="OrganisationIdentification29_pain001_ch_2">
+ <xs:complexContent>
+ <xs:restriction base="OrganisationIdentification29">
+ <xs:sequence>
+ <xs:element name="AnyBIC" type="AnyBICDec2014Identifier" minOccurs="0"/>
+ <xs:element name="LEI" type="LEIIdentifier" minOccurs="0"/>
+ <xs:element name="Othr" type="GenericOrganisationIdentification1" minOccurs="0" maxOccurs="2"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="OrganisationIdentificationSchemeName1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalOrganisationIdentification1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="OtherContact1">
+ <xs:sequence>
+ <xs:element name="ChanlTp" type="Max4Text"/>
+ <xs:element name="Id" type="Max128Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="OtherContact1_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="OtherContact1">
+ <xs:sequence>
+ <xs:element name="ChanlTp" type="Max4Text"/>
+ <xs:element name="Id" type="Max128Text"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="Party38Choice">
+ <xs:choice>
+ <xs:element name="OrgId" type="OrganisationIdentification29"/>
+ <xs:element name="PrvtId" type="PersonIdentification13"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="Party38Choice_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="Party38Choice">
+ <xs:choice>
+ <xs:element name="OrgId" type="OrganisationIdentification29_pain001_ch"/>
+ <xs:element name="PrvtId" type="PersonIdentification13_pain001_ch"/>
+ </xs:choice>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="Party38Choice_pain001_ch_2">
+ <xs:complexContent>
+ <xs:restriction base="Party38Choice">
+ <xs:choice>
+ <xs:element name="OrgId" type="OrganisationIdentification29_pain001_ch_2"/>
+ <xs:element name="PrvtId" type="PersonIdentification13_pain001_ch_2"/>
+ </xs:choice>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PartyIdentification135">
+ <xs:sequence>
+ <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
+ <xs:element name="PstlAdr" type="PostalAddress24" minOccurs="0"/>
+ <xs:element name="Id" type="Party38Choice" minOccurs="0"/>
+ <xs:element name="CtryOfRes" type="CountryCode" minOccurs="0"/>
+ <xs:element name="CtctDtls" type="Contact4" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PartyIdentification135_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="PartyIdentification135">
+ <xs:sequence>
+ <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
+ <xs:element name="Id" type="Party38Choice_pain001_ch" minOccurs="0"/>
+ <xs:element name="CtctDtls" type="Contact4_pain001_ch" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PartyIdentification135_pain001_ch_2">
+ <xs:complexContent>
+ <xs:restriction base="PartyIdentification135">
+ <xs:sequence>
+ <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
+ <xs:element name="PstlAdr" type="PostalAddress24_pain001_ch_2" minOccurs="0"/>
+ <xs:element name="Id" type="Party38Choice_pain001_ch" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PartyIdentification135_pain001_ch_3">
+ <xs:complexContent>
+ <xs:restriction base="PartyIdentification135">
+ <xs:sequence>
+ <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
+ <xs:element name="PstlAdr" type="PostalAddress24_pain001_ch_3" minOccurs="0"/>
+ <xs:element name="Id" type="Party38Choice_pain001_ch" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PartyIdentification135_pain001_ch_4">
+ <xs:complexContent>
+ <xs:restriction base="PartyIdentification135">
+ <xs:sequence>
+ <xs:element name="Nm" type="Max140Text"/>
+ <xs:element name="PstlAdr" type="PostalAddress24_pain001_ch_3" minOccurs="0"/>
+ <xs:element name="Id" type="Party38Choice_pain001_ch" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PartyIdentification135_pain001_ch_5">
+ <xs:complexContent>
+ <xs:restriction base="PartyIdentification135">
+ <xs:sequence>
+ <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
+ <xs:element name="PstlAdr" type="PostalAddress24_pain001_ch_5" minOccurs="0"/>
+ <xs:element name="Id" type="Party38Choice_pain001_ch_2" minOccurs="0"/>
+ <xs:element name="CtryOfRes" type="CountryCode" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PaymentIdentification6">
+ <xs:sequence>
+ <xs:element name="InstrId" type="Max35Text" minOccurs="0"/>
+ <xs:element name="EndToEndId" type="Max35Text"/>
+ <xs:element name="UETR" type="UUIDv4Identifier" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PaymentIdentification6_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="PaymentIdentification6">
+ <xs:sequence>
+ <xs:element name="InstrId" type="Max35Text_pain001_ch" minOccurs="0"/>
+ <xs:element name="EndToEndId" type="Max35Text_pain001_ch"/>
+ <xs:element name="UETR" type="UUIDv4Identifier" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PaymentInstruction30">
+ <xs:sequence>
+ <xs:element name="PmtInfId" type="Max35Text"/>
+ <xs:element name="PmtMtd" type="PaymentMethod3Code"/>
+ <xs:element name="BtchBookg" type="BatchBookingIndicator" minOccurs="0"/>
+ <xs:element name="NbOfTxs" type="Max15NumericText" minOccurs="0"/>
+ <xs:element name="CtrlSum" type="DecimalNumber" minOccurs="0"/>
+ <xs:element name="PmtTpInf" type="PaymentTypeInformation26" minOccurs="0"/>
+ <xs:element name="ReqdExctnDt" type="DateAndDateTime2Choice"/>
+ <xs:element name="PoolgAdjstmntDt" type="ISODate" minOccurs="0"/>
+ <xs:element name="Dbtr" type="PartyIdentification135"/>
+ <xs:element name="DbtrAcct" type="CashAccount38"/>
+ <xs:element name="DbtrAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element name="DbtrAgtAcct" type="CashAccount38" minOccurs="0"/>
+ <xs:element name="InstrForDbtrAgt" type="Max140Text" minOccurs="0"/>
+ <xs:element name="UltmtDbtr" type="PartyIdentification135" minOccurs="0"/>
+ <xs:element name="ChrgBr" type="ChargeBearerType1Code" minOccurs="0"/>
+ <xs:element name="ChrgsAcct" type="CashAccount38" minOccurs="0"/>
+ <xs:element name="ChrgsAcctAgt" type="BranchAndFinancialInstitutionIdentification6" minOccurs="0"/>
+ <xs:element name="CdtTrfTxInf" type="CreditTransferTransaction34" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PaymentInstruction30_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="PaymentInstruction30">
+ <xs:sequence>
+ <xs:element name="PmtInfId" type="Max35Text_pain001_ch"/>
+ <xs:element name="PmtMtd" type="PaymentMethod3Code"/>
+ <xs:element name="BtchBookg" type="BatchBookingIndicator" minOccurs="0"/>
+ <xs:element name="NbOfTxs" type="Max15NumericText" minOccurs="0"/>
+ <xs:element name="CtrlSum" type="DecimalNumber" minOccurs="0"/>
+ <xs:element name="PmtTpInf" type="PaymentTypeInformation26_pain001_ch" minOccurs="0"/>
+ <xs:element name="ReqdExctnDt" type="DateAndDateTime2Choice"/>
+ <xs:element name="Dbtr" type="PartyIdentification135_pain001_ch_2"/>
+ <xs:element name="DbtrAcct" type="CashAccount38_pain001_ch"/>
+ <xs:element name="DbtrAgt" type="BranchAndFinancialInstitutionIdentification6_pain001_ch_2"/>
+ <xs:element name="InstrForDbtrAgt" type="Max140Text" minOccurs="0"/>
+ <xs:element name="UltmtDbtr" type="PartyIdentification135_pain001_ch_3" minOccurs="0"/>
+ <xs:element name="ChrgBr" type="ChargeBearerType1Code" minOccurs="0"/>
+ <xs:element name="ChrgsAcct" type="CashAccount38_pain001_ch_2" minOccurs="0"/>
+ <xs:element name="CdtTrfTxInf" type="CreditTransferTransaction34_pain001_ch" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:simpleType name="PaymentMethod3Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CHK"/>
+ <xs:enumeration value="TRA"/>
+ <xs:enumeration value="TRF"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="PaymentTypeInformation26">
+ <xs:sequence>
+ <xs:element name="InstrPrty" type="Priority2Code" minOccurs="0"/>
+ <xs:element name="SvcLvl" type="ServiceLevel8Choice" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="LclInstrm" type="LocalInstrument2Choice" minOccurs="0"/>
+ <xs:element name="CtgyPurp" type="CategoryPurpose1Choice" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PaymentTypeInformation26_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="PaymentTypeInformation26">
+ <xs:sequence>
+ <xs:element name="InstrPrty" type="Priority2Code" minOccurs="0"/>
+ <xs:element name="SvcLvl" type="ServiceLevel8Choice" minOccurs="0" maxOccurs="3"/>
+ <xs:element name="LclInstrm" type="LocalInstrument2Choice" minOccurs="0"/>
+ <xs:element name="CtgyPurp" type="CategoryPurpose1Choice_pain001_ch" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PaymentTypeInformation26_pain001_ch_2">
+ <xs:complexContent>
+ <xs:restriction base="PaymentTypeInformation26">
+ <xs:sequence>
+ <xs:element name="InstrPrty" type="Priority2Code" minOccurs="0"/>
+ <xs:element name="SvcLvl" type="ServiceLevel8Choice" minOccurs="0" maxOccurs="3"/>
+ <xs:element name="LclInstrm" type="LocalInstrument2Choice" minOccurs="0"/>
+ <xs:element name="CtgyPurp" type="CategoryPurpose1Choice" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:simpleType name="PercentageRate">
+ <xs:restriction base="xs:decimal">
+ <xs:totalDigits value="11"/>
+ <xs:fractionDigits value="10"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="PersonIdentification13">
+ <xs:sequence>
+ <xs:element name="DtAndPlcOfBirth" type="DateAndPlaceOfBirth1" minOccurs="0"/>
+ <xs:element name="Othr" type="GenericPersonIdentification1" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PersonIdentification13_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="PersonIdentification13">
+ <xs:sequence>
+ <xs:element name="DtAndPlcOfBirth" type="DateAndPlaceOfBirth1" minOccurs="0"/>
+ <xs:element name="Othr" type="GenericPersonIdentification1" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PersonIdentification13_pain001_ch_2">
+ <xs:complexContent>
+ <xs:restriction base="PersonIdentification13">
+ <xs:sequence>
+ <xs:element name="DtAndPlcOfBirth" type="DateAndPlaceOfBirth1" minOccurs="0"/>
+ <xs:element name="Othr" type="GenericPersonIdentification1" minOccurs="0" maxOccurs="2"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PersonIdentificationSchemeName1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalPersonIdentification1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="PhoneNumber">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="\+[0-9]{1,3}-[0-9()+\-]{1,30}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="PostalAddress24">
+ <xs:sequence>
+ <xs:element name="AdrTp" type="AddressType3Choice" minOccurs="0"/>
+ <xs:element name="Dept" type="Max70Text" minOccurs="0"/>
+ <xs:element name="SubDept" type="Max70Text" minOccurs="0"/>
+ <xs:element name="StrtNm" type="Max70Text" minOccurs="0"/>
+ <xs:element name="BldgNb" type="Max16Text" minOccurs="0"/>
+ <xs:element name="BldgNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Flr" type="Max70Text" minOccurs="0"/>
+ <xs:element name="PstBx" type="Max16Text" minOccurs="0"/>
+ <xs:element name="Room" type="Max70Text" minOccurs="0"/>
+ <xs:element name="PstCd" type="Max16Text" minOccurs="0"/>
+ <xs:element name="TwnNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="TwnLctnNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="DstrctNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="CtrySubDvsn" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Ctry" type="CountryCode" minOccurs="0"/>
+ <xs:element name="AdrLine" type="Max70Text" minOccurs="0" maxOccurs="7"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PostalAddress24_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="PostalAddress24">
+ <xs:sequence>
+ <xs:element name="AdrLine" type="Max70Text" minOccurs="0" maxOccurs="7"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PostalAddress24_pain001_ch_2">
+ <xs:complexContent>
+ <xs:restriction base="PostalAddress24">
+ <xs:sequence>
+ <xs:element name="AdrTp" type="AddressType3Choice" minOccurs="0"/>
+ <xs:element name="Dept" type="Max70Text" minOccurs="0"/>
+ <xs:element name="SubDept" type="Max70Text" minOccurs="0"/>
+ <xs:element name="StrtNm" type="Max70Text" minOccurs="0"/>
+ <xs:element name="BldgNb" type="Max16Text" minOccurs="0"/>
+ <xs:element name="BldgNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Flr" type="Max70Text" minOccurs="0"/>
+ <xs:element name="PstBx" type="Max16Text" minOccurs="0"/>
+ <xs:element name="Room" type="Max70Text" minOccurs="0"/>
+ <xs:element name="PstCd" type="Max16Text" minOccurs="0"/>
+ <xs:element name="TwnNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="TwnLctnNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="DstrctNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="CtrySubDvsn" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Ctry" type="CountryCode" minOccurs="0"/>
+ <xs:element name="AdrLine" type="Max70Text" minOccurs="0" maxOccurs="2"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PostalAddress24_pain001_ch_3">
+ <xs:complexContent>
+ <xs:restriction base="PostalAddress24">
+ <xs:sequence>
+ <xs:element name="Dept" type="Max70Text" minOccurs="0"/>
+ <xs:element name="SubDept" type="Max70Text" minOccurs="0"/>
+ <xs:element name="StrtNm" type="Max70Text" minOccurs="0"/>
+ <xs:element name="BldgNb" type="Max16Text" minOccurs="0"/>
+ <xs:element name="BldgNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Flr" type="Max70Text" minOccurs="0"/>
+ <xs:element name="PstBx" type="Max16Text" minOccurs="0"/>
+ <xs:element name="Room" type="Max70Text" minOccurs="0"/>
+ <xs:element name="PstCd" type="Max16Text" minOccurs="0"/>
+ <xs:element name="TwnNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="TwnLctnNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="DstrctNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="CtrySubDvsn" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Ctry" type="CountryCode" minOccurs="0"/>
+ <xs:element name="AdrLine" type="Max70Text" minOccurs="0" maxOccurs="2"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PostalAddress24_pain001_ch_4">
+ <xs:complexContent>
+ <xs:restriction base="PostalAddress24">
+ <xs:sequence>
+ <xs:element name="AdrLine" type="Max70Text" minOccurs="0" maxOccurs="2"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="PostalAddress24_pain001_ch_5">
+ <xs:complexContent>
+ <xs:restriction base="PostalAddress24">
+ <xs:sequence>
+ <xs:element name="Dept" type="Max70Text" minOccurs="0"/>
+ <xs:element name="SubDept" type="Max70Text" minOccurs="0"/>
+ <xs:element name="StrtNm" type="Max70Text" minOccurs="0"/>
+ <xs:element name="BldgNb" type="Max16Text" minOccurs="0"/>
+ <xs:element name="BldgNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Flr" type="Max70Text" minOccurs="0"/>
+ <xs:element name="PstBx" type="Max16Text" minOccurs="0"/>
+ <xs:element name="Room" type="Max70Text" minOccurs="0"/>
+ <xs:element name="PstCd" type="Max16Text" minOccurs="0"/>
+ <xs:element name="TwnNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="TwnLctnNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="DstrctNm" type="Max35Text" minOccurs="0"/>
+ <xs:element name="CtrySubDvsn" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Ctry" type="CountryCode" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:simpleType name="PreferredContactMethod1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CELL"/>
+ <xs:enumeration value="FAXX"/>
+ <xs:enumeration value="LETT"/>
+ <xs:enumeration value="MAIL"/>
+ <xs:enumeration value="PHON"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Priority2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="HIGH"/>
+ <xs:enumeration value="NORM"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ProxyAccountIdentification1">
+ <xs:sequence>
+ <xs:element name="Tp" type="ProxyAccountType1Choice" minOccurs="0"/>
+ <xs:element name="Id" type="Max2048Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProxyAccountType1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalProxyAccountType1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="Purpose2Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalPurpose1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="Purpose2Choice_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="Purpose2Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalPurpose1Code"/>
+ </xs:choice>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="ReferredDocumentInformation7">
+ <xs:sequence>
+ <xs:element name="Tp" type="ReferredDocumentType4" minOccurs="0"/>
+ <xs:element name="Nb" type="Max35Text" minOccurs="0"/>
+ <xs:element name="RltdDt" type="ISODate" minOccurs="0"/>
+ <xs:element name="LineDtls" type="DocumentLineInformation1" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ReferredDocumentType3Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="DocumentType6Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="ReferredDocumentType4">
+ <xs:sequence>
+ <xs:element name="CdOrPrtry" type="ReferredDocumentType3Choice"/>
+ <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RegulatoryAuthority2">
+ <xs:sequence>
+ <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
+ <xs:element name="Ctry" type="CountryCode" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RegulatoryReporting3">
+ <xs:sequence>
+ <xs:element name="DbtCdtRptgInd" type="RegulatoryReportingType1Code" minOccurs="0"/>
+ <xs:element name="Authrty" type="RegulatoryAuthority2" minOccurs="0"/>
+ <xs:element name="Dtls" type="StructuredRegulatoryReporting3" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="RegulatoryReportingType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="BOTH"/>
+ <xs:enumeration value="CRED"/>
+ <xs:enumeration value="DEBT"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="RemittanceAmount2">
+ <xs:sequence>
+ <xs:element name="DuePyblAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ <xs:element name="DscntApldAmt" type="DiscountAmountAndType1" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="CdtNoteAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ <xs:element name="TaxAmt" type="TaxAmountAndType1" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="AdjstmntAmtAndRsn" type="DocumentAdjustment1" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="RmtdAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RemittanceAmount3">
+ <xs:sequence>
+ <xs:element name="DuePyblAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ <xs:element name="DscntApldAmt" type="DiscountAmountAndType1" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="CdtNoteAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ <xs:element name="TaxAmt" type="TaxAmountAndType1" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="AdjstmntAmtAndRsn" type="DocumentAdjustment1" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="RmtdAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RemittanceInformation16">
+ <xs:sequence>
+ <xs:element name="Ustrd" type="Max140Text" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="Strd" type="StructuredRemittanceInformation16" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RemittanceInformation16_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="RemittanceInformation16">
+ <xs:sequence>
+ <xs:element name="Ustrd" type="Max140Text" minOccurs="0"/>
+ <xs:element name="Strd" type="StructuredRemittanceInformation16_pain001_ch" minOccurs="0"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="RemittanceLocation7">
+ <xs:sequence>
+ <xs:element name="RmtId" type="Max35Text" minOccurs="0"/>
+ <xs:element name="RmtLctnDtls" type="RemittanceLocationData1" minOccurs="0" maxOccurs="2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RemittanceLocationData1">
+ <xs:sequence>
+ <xs:element name="Mtd" type="RemittanceLocationMethod2Code"/>
+ <xs:element name="ElctrncAdr" type="Max2048Text" minOccurs="0"/>
+ <xs:element name="PstlAdr" type="NameAndAddress16" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="RemittanceLocationMethod2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="EDIC"/>
+ <xs:enumeration value="EMAL"/>
+ <xs:enumeration value="FAXI"/>
+ <xs:enumeration value="POST"/>
+ <xs:enumeration value="SMSM"/>
+ <xs:enumeration value="URID"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ServiceLevel8Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalServiceLevel1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="SPSText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[\p{IsBasicLatin}\p{IsLatin-1Supplement}\p{IsLatinExtended-A}€ȘșȚț-[\p{C}]]+"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="StructuredRegulatoryReporting3">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Dt" type="ISODate" minOccurs="0"/>
+ <xs:element name="Ctry" type="CountryCode" minOccurs="0"/>
+ <xs:element name="Cd" type="Max10Text" minOccurs="0"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ <xs:element name="Inf" type="Max35Text" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="StructuredRemittanceInformation16">
+ <xs:sequence>
+ <xs:element name="RfrdDocInf" type="ReferredDocumentInformation7" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="RfrdDocAmt" type="RemittanceAmount2" minOccurs="0"/>
+ <xs:element name="CdtrRefInf" type="CreditorReferenceInformation2" minOccurs="0"/>
+ <xs:element name="Invcr" type="PartyIdentification135" minOccurs="0"/>
+ <xs:element name="Invcee" type="PartyIdentification135" minOccurs="0"/>
+ <xs:element name="TaxRmt" type="TaxInformation7" minOccurs="0"/>
+ <xs:element name="GrnshmtRmt" type="Garnishment3" minOccurs="0"/>
+ <xs:element name="AddtlRmtInf" type="Max140Text" minOccurs="0" maxOccurs="3"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="StructuredRemittanceInformation16_pain001_ch">
+ <xs:complexContent>
+ <xs:restriction base="StructuredRemittanceInformation16">
+ <xs:sequence>
+ <xs:element name="RfrdDocInf" type="ReferredDocumentInformation7" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="RfrdDocAmt" type="RemittanceAmount2" minOccurs="0"/>
+ <xs:element name="CdtrRefInf" type="CreditorReferenceInformation2" minOccurs="0"/>
+ <xs:element name="Invcr" type="PartyIdentification135_pain001_ch_5" minOccurs="0"/>
+ <xs:element name="Invcee" type="PartyIdentification135_pain001_ch_5" minOccurs="0"/>
+ <xs:element name="TaxRmt" type="TaxInformation7" minOccurs="0"/>
+ <xs:element name="GrnshmtRmt" type="Garnishment3_pain001_ch" minOccurs="0"/>
+ <xs:element name="AddtlRmtInf" type="Max140Text" minOccurs="0" maxOccurs="3"/>
+ </xs:sequence>
+ </xs:restriction>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="SupplementaryData1">
+ <xs:sequence>
+ <xs:element name="PlcAndNm" type="Max350Text" minOccurs="0"/>
+ <xs:element name="Envlp" type="SupplementaryDataEnvelope1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="SupplementaryDataEnvelope1">
+ <xs:sequence>
+ <xs:any namespace="##any" processContents="lax"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxAmount2">
+ <xs:sequence>
+ <xs:element name="Rate" type="PercentageRate" minOccurs="0"/>
+ <xs:element name="TaxblBaseAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ <xs:element name="TtlAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ <xs:element name="Dtls" type="TaxRecordDetails2" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxAmountAndType1">
+ <xs:sequence>
+ <xs:element name="Tp" type="TaxAmountType1Choice" minOccurs="0"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxAmountType1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalTaxAmountType1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="TaxAuthorisation1">
+ <xs:sequence>
+ <xs:element name="Titl" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxInformation7">
+ <xs:sequence>
+ <xs:element name="Cdtr" type="TaxParty1" minOccurs="0"/>
+ <xs:element name="Dbtr" type="TaxParty2" minOccurs="0"/>
+ <xs:element name="UltmtDbtr" type="TaxParty2" minOccurs="0"/>
+ <xs:element name="AdmstnZone" type="Max35Text" minOccurs="0"/>
+ <xs:element name="RefNb" type="Max140Text" minOccurs="0"/>
+ <xs:element name="Mtd" type="Max35Text" minOccurs="0"/>
+ <xs:element name="TtlTaxblBaseAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ <xs:element name="TtlTaxAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ <xs:element name="Dt" type="ISODate" minOccurs="0"/>
+ <xs:element name="SeqNb" type="Number" minOccurs="0"/>
+ <xs:element name="Rcrd" type="TaxRecord2" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxInformation8">
+ <xs:sequence>
+ <xs:element name="Cdtr" type="TaxParty1" minOccurs="0"/>
+ <xs:element name="Dbtr" type="TaxParty2" minOccurs="0"/>
+ <xs:element name="AdmstnZone" type="Max35Text" minOccurs="0"/>
+ <xs:element name="RefNb" type="Max140Text" minOccurs="0"/>
+ <xs:element name="Mtd" type="Max35Text" minOccurs="0"/>
+ <xs:element name="TtlTaxblBaseAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ <xs:element name="TtlTaxAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
+ <xs:element name="Dt" type="ISODate" minOccurs="0"/>
+ <xs:element name="SeqNb" type="Number" minOccurs="0"/>
+ <xs:element name="Rcrd" type="TaxRecord2" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxParty1">
+ <xs:sequence>
+ <xs:element name="TaxId" type="Max35Text" minOccurs="0"/>
+ <xs:element name="RegnId" type="Max35Text" minOccurs="0"/>
+ <xs:element name="TaxTp" type="Max35Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxParty2">
+ <xs:sequence>
+ <xs:element name="TaxId" type="Max35Text" minOccurs="0"/>
+ <xs:element name="RegnId" type="Max35Text" minOccurs="0"/>
+ <xs:element name="TaxTp" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Authstn" type="TaxAuthorisation1" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxPeriod2">
+ <xs:sequence>
+ <xs:element name="Yr" type="ISODate" minOccurs="0"/>
+ <xs:element name="Tp" type="TaxRecordPeriod1Code" minOccurs="0"/>
+ <xs:element name="FrToDt" type="DatePeriod2" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxRecord2">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Ctgy" type="Max35Text" minOccurs="0"/>
+ <xs:element name="CtgyDtls" type="Max35Text" minOccurs="0"/>
+ <xs:element name="DbtrSts" type="Max35Text" minOccurs="0"/>
+ <xs:element name="CertId" type="Max35Text" minOccurs="0"/>
+ <xs:element name="FrmsCd" type="Max35Text" minOccurs="0"/>
+ <xs:element name="Prd" type="TaxPeriod2" minOccurs="0"/>
+ <xs:element name="TaxAmt" type="TaxAmount2" minOccurs="0"/>
+ <xs:element name="AddtlInf" type="Max140Text" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxRecordDetails2">
+ <xs:sequence>
+ <xs:element name="Prd" type="TaxPeriod2" minOccurs="0"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="TaxRecordPeriod1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="HLF1"/>
+ <xs:enumeration value="HLF2"/>
+ <xs:enumeration value="MM01"/>
+ <xs:enumeration value="MM02"/>
+ <xs:enumeration value="MM03"/>
+ <xs:enumeration value="MM04"/>
+ <xs:enumeration value="MM05"/>
+ <xs:enumeration value="MM06"/>
+ <xs:enumeration value="MM07"/>
+ <xs:enumeration value="MM08"/>
+ <xs:enumeration value="MM09"/>
+ <xs:enumeration value="MM10"/>
+ <xs:enumeration value="MM11"/>
+ <xs:enumeration value="MM12"/>
+ <xs:enumeration value="QTR1"/>
+ <xs:enumeration value="QTR2"/>
+ <xs:enumeration value="QTR3"/>
+ <xs:enumeration value="QTR4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="TrueFalseIndicator">
+ <xs:restriction base="xs:boolean"/>
+ </xs:simpleType>
+ <xs:simpleType name="UUIDv4Identifier">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}"/>
+ </xs:restriction>
+ </xs:simpleType>
+</xs:schema>