[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libeufin] branch master updated (460a80b9 -> 11d3a68b)
From: |
gnunet |
Subject: |
[libeufin] branch master updated (460a80b9 -> 11d3a68b) |
Date: |
Tue, 16 Jan 2024 12:28:46 +0100 |
This is an automated email from the git hooks/post-receive script.
antoine pushed a change to branch master
in repository libeufin.
from 460a80b9 Parse and print HAC logs
new 7d3e3ea4 Start parsing CustomerPaymentStatusReport
new 11d3a68b Add back withdrawal /abort in corebank API
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.gitignore | 1 -
.../main/kotlin/tech/libeufin/bank/CoreBankApi.kt | 14 +
bank/src/test/kotlin/CoreBankApiTest.kt | 4 +-
integration/src/main/kotlin/Main.kt | 92 +-
.../main/kotlin/tech/libeufin/nexus/EbicsFetch.kt | 134 +--
.../main/kotlin/tech/libeufin/nexus/Iso20022.kt | 87 +-
util/import.py | 49 +-
util/src/main/kotlin/EbicsCodeSets.kt | 335 +++---
util/src/main/resources/xsd/pain.002.001.13.xsd | 1253 ++++++++++++++++++++
9 files changed, 1665 insertions(+), 304 deletions(-)
create mode 100644 util/src/main/resources/xsd/pain.002.001.13.xsd
diff --git a/.gitignore b/.gitignore
index fb39b151..8d1b734f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,7 +26,6 @@ __pycache__
*.log
.DS_Store
*.mk
-*.xsd
util/src/main/resources/version.txt
debian/usr/share/libeufin/demobank-ui/index.js
debian/usr/share/libeufin/demobank-ui/*.html
diff --git a/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt
b/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt
index a7d0f2c6..eb39c136 100644
--- a/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt
+++ b/bank/src/main/kotlin/tech/libeufin/bank/CoreBankApi.kt
@@ -506,6 +506,20 @@ private fun Routing.coreBankWithdrawalApi(db: Database,
ctx: BankConfig) {
WithdrawalConfirmationResult.Success ->
call.respond(HttpStatusCode.NoContent)
}
}
+ post("/accounts/{USERNAME}/withdrawals/{withdrawal_id}/abort") {
+ val opId = call.uuidParameter("withdrawal_id")
+ when (db.withdrawal.abort(opId)) {
+ AbortResult.UnknownOperation -> throw notFound(
+ "Withdrawal operation $opId not found",
+ TalerErrorCode.BANK_TRANSACTION_NOT_FOUND
+ )
+ AbortResult.AlreadyConfirmed -> throw conflict(
+ "Cannot abort confirmed withdrawal",
+ TalerErrorCode.BANK_ABORT_CONFIRM_CONFLICT
+ )
+ AbortResult.Success -> call.respond(HttpStatusCode.NoContent)
+ }
+ }
}
get("/withdrawals/{withdrawal_id}") {
val uuid = call.uuidParameter("withdrawal_id")
diff --git a/bank/src/test/kotlin/CoreBankApiTest.kt
b/bank/src/test/kotlin/CoreBankApiTest.kt
index 86115e78..5a031b87 100644
--- a/bank/src/test/kotlin/CoreBankApiTest.kt
+++ b/bank/src/test/kotlin/CoreBankApiTest.kt
@@ -1003,7 +1003,7 @@ class CoreBankWithdrawalApiTest {
}.assertOkJson<BankAccountCreateWithdrawalResponse> {
val uuid = it.taler_withdraw_uri.split("/").last()
withdrawalSelect(uuid)
-
client.postA("/taler-integration/withdrawal-operation/$uuid/abort").assertNoContent()
+
client.postA("/accounts/merchant/withdrawals/$uuid/abort").assertNoContent()
// Check error
client.postA("/accounts/merchant/withdrawals/$uuid/confirm")
@@ -1023,7 +1023,7 @@ class CoreBankWithdrawalApiTest {
.assertConflict(TalerErrorCode.BANK_UNALLOWED_DEBIT)
// Check can abort because not confirmed
-
client.postA("/taler-integration/withdrawal-operation/$uuid/abort").assertNoContent()
+
client.postA("/accounts/merchant/withdrawals/$uuid/abort").assertNoContent()
}
// Check confirm another user's operation
diff --git a/integration/src/main/kotlin/Main.kt
b/integration/src/main/kotlin/Main.kt
index 6d823ffd..bf946cab 100644
--- a/integration/src/main/kotlin/Main.kt
+++ b/integration/src/main/kotlin/Main.kt
@@ -117,34 +117,56 @@ class Cli : CliktCommand("Run integration tests on banks
provider") {
.assertOk("ebics-setup should succeed the second
time")
}
- if (ask("Submit transactions ? y/n>") == "y") {
- val payto =
"payto://iban/CH2989144971918294289?receiver-name=Test"
+ val payto =
"payto://iban/CH2989144971918294289?receiver-name=Test"
- step("Test submit one transaction")
- nexusDb.initiatedPaymentCreate(InitiatedPayment(
- amount = NexusAmount(42L, 0, "CFH"),
- creditPaytoUri = payto,
- wireTransferSubject = "single transaction test",
- initiationTime = Instant.now(),
- requestUid = Base32Crockford.encode(randBytes(16))
- ))
- nexusCmd.test("ebics-submit --transient -c
$conf").assertOk()
-
- step("Test submit many transaction")
- repeat(4) {
+ step("Test fetch transactions")
+ nexusCmd.test("ebics-fetch --transient -c $conf
--pinned-start 2022-01-01").assertOk()
+
+ while (true) {
+ when (ask("Run 'fetch', 'submit', 'tx', 'txs', 'logs',
'ack' or 'exit'>")) {
+ "fetch" -> {
+ step("Fetch new transactions")
+ nexusCmd.test("ebics-fetch --transient -c
$conf").assertOk()
+ }
+ "tx" -> {
+ step("Test submit one transaction")
nexusDb.initiatedPaymentCreate(InitiatedPayment(
- amount = NexusAmount(100L + it, 0, "CFH"),
- creditPaytoUri = payto,
- wireTransferSubject = "multi transaction test
$it",
- initiationTime = Instant.now(),
- requestUid =
Base32Crockford.encode(randBytes(16))
- ))
+ amount = NexusAmount(42L, 0, "CFH"),
+ creditPaytoUri = payto,
+ wireTransferSubject = "single transaction
test",
+ initiationTime = Instant.now(),
+ requestUid =
Base32Crockford.encode(randBytes(16))
+ ))
+ nexusCmd.test("ebics-submit --transient -c
$conf").assertOk()
+ }
+ "txs" -> {
+ step("Test submit many transaction")
+ repeat(4) {
+
nexusDb.initiatedPaymentCreate(InitiatedPayment(
+ amount = NexusAmount(100L + it, 0,
"CFH"),
+ creditPaytoUri = payto,
+ wireTransferSubject = "multi
transaction test $it",
+ initiationTime = Instant.now(),
+ requestUid =
Base32Crockford.encode(randBytes(16))
+ ))
+ }
+ nexusCmd.test("ebics-submit --transient -c
$conf").assertOk()
+ }
+ "submit" -> {
+ step("Submit pending transactions")
+ nexusCmd.test("ebics-submit --transient -c
$conf").assertOk()
+ }
+ "logs" -> {
+ step("Fetch logs")
+ nexusCmd.test("ebics-fetch --transient -c
$conf --only-logs").assertOk()
+ }
+ "ack" -> {
+ step("Fetch ack")
+ nexusCmd.test("ebics-fetch --transient -c
$conf --only-ack").assertOk()
+ }
+ "exit" -> break
}
- nexusCmd.test("ebics-submit --transient -c
$conf").assertOk()
}
-
- step("Test fetch transactions")
- nexusCmd.test("ebics-fetch --transient -c $conf
--pinned-start 2022-01-01").assertOk()
}
Kind.netzbon -> {
if (!hasClientKeys)
@@ -159,7 +181,7 @@ class Cli : CliktCommand("Run integration tests on banks
provider") {
nexusCmd.test("ebics-fetch --transient -c $conf
--pinned-start 2022-01-01").assertOk()
while (true) {
- when (ask("Run 'fetch', 'submit' or 'exit'>")) {
+ when (ask("Run 'fetch', 'submit', 'logs', 'ack' or
'exit'>")) {
"fetch" -> {
step("Fetch new transactions")
nexusCmd.test("ebics-fetch --transient -c
$conf").assertOk()
@@ -168,6 +190,26 @@ class Cli : CliktCommand("Run integration tests on banks
provider") {
step("Submit pending transactions")
nexusCmd.test("ebics-submit --transient -c
$conf").assertOk()
}
+ "tx" -> {
+ step("Submit new transaction")
+ // TODO interactive payment editor
+
nexusDb.initiatedPaymentCreate(InitiatedPayment(
+ amount = getTalerAmount("1.1", "CFH"),
+ creditPaytoUri =
"payto://iban/CH6208704048981247126?receiver-name=Grothoff+Hans",
+ wireTransferSubject = "single transaction
test",
+ initiationTime = Instant.now(),
+ requestUid =
Base32Crockford.encode(randBytes(16))
+ ))
+ nexusCmd.test("ebics-submit --transient -c
$conf").assertOk()
+ }
+ "logs" -> {
+ step("Fetch logs")
+ nexusCmd.test("ebics-fetch --transient -c
$conf --only-logs").assertOk()
+ }
+ "ack" -> {
+ step("Fetch ack")
+ nexusCmd.test("ebics-fetch --transient -c
$conf --only-ack").assertOk()
+ }
"exit" -> break
}
}
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt
b/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt
index 91af3e84..5f51d023 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/EbicsFetch.kt
@@ -18,6 +18,7 @@ import java.time.LocalDate
import java.time.ZoneId
import java.util.UUID
import kotlin.io.path.*
+import kotlin.io.*
/**
* Necessary data to perform a download.
@@ -340,43 +341,60 @@ fun firstLessThanSecond(
return a.value < b.value
}
-/**
- * Parses the response of an EBICS notification looking for
- * incoming payments. As a result, it either creates a Taler
- * withdrawal or bounces the incoming payment. In detail, this
- * function extracts the camt.054 from the ZIP archive, invokes
- * the lower-level camt.054 parser and updates the database.
- *
- * @param db database connection.
- * @param content the ZIP file that contains the EBICS
- * notification as camt.054 records.
- */
-private fun ingestNotification(
+private fun ingestDocument(
db: Database,
- ctx: FetchContext,
- content: ByteArray
+ currency: String,
+ content: ByteArray,
+ whichDocument: SupportedDocument
) {
- val incomingPayments = mutableListOf<IncomingPayment>()
- val outgoingPayments = mutableListOf<OutgoingPayment>()
-
- try {
- content.unzipForEach { fileName, xmlContent ->
- if (!fileName.contains("camt.054", ignoreCase = true))
- throw Exception("Asked for notification but did NOT get a
camt.054")
- logger.debug("parse $fileName")
- parseTxNotif(xmlContent, ctx.cfg.currency, incomingPayments,
outgoingPayments)
- }
- } catch (e: IOException) {
- throw Exception("Could not open any ZIP archive", e)
- }
+ when (whichDocument) {
+ SupportedDocument.CAMT_054 -> {
+ try {
+ val incomingPayments = mutableListOf<IncomingPayment>()
+ val outgoingPayments = mutableListOf<OutgoingPayment>()
+
+ try {
+ content.unzipForEach { fileName, xmlContent ->
+ if (!fileName.contains("camt.054", ignoreCase = true))
+ throw Exception("Asked for notification but did
NOT get a camt.054")
+ logger.debug("parse $fileName")
+ parseTxNotif(xmlContent, currency, incomingPayments,
outgoingPayments)
+ }
+ } catch (e: IOException) {
+ throw Exception("Could not open any ZIP archive", e)
+ }
- runBlocking {
- incomingPayments.forEach {
- ingestIncomingPayment(db, it)
+ runBlocking {
+ incomingPayments.forEach {
+ ingestIncomingPayment(db, it)
+ }
+ outgoingPayments.forEach {
+ ingestOutgoingPayment(db, it)
+ }
+ }
+ } catch (e: Exception) {
+ throw Exception("Ingesting notifications failed", e)
+ }
}
- outgoingPayments.forEach {
- ingestOutgoingPayment(db, it)
+ SupportedDocument.PAIN_002_LOGS -> {
+ val acks = parseCustomerAck(content.toString(Charsets.UTF_8))
+ for (ack in acks) {
+ println(ack)
+ }
+ }
+ SupportedDocument.PAIN_002 -> {
+ try {
+ content.unzipForEach { fileName, xmlContent ->
+ logger.debug("parse $fileName")
+ val status =
parseCustomerPaymentStatusReport(xmlContent.toString())
+ logger.debug("$status") // TODO ingest in db
+ }
+ } catch (e: IOException) {
+ throw Exception("Could not open any ZIP archive", e)
+ }
+
}
+ else -> logger.warn("Not ingesting ${whichDocument}. Only camt.054
notifications supported.")
}
}
@@ -427,27 +445,7 @@ private suspend fun fetchDocuments(
maybeContent,
nonZip = ctx.whichDocument == SupportedDocument.PAIN_002_LOGS
)
- // Parsing the XML: only camt.054 (Detailavisierung) supported currently.
-
- when (ctx.whichDocument) {
- SupportedDocument.CAMT_054 -> {
- try {
- ingestNotification(db, ctx, maybeContent)
- } catch (e: Exception) {
- throw Exception("Ingesting notifications failed", e)
- }
- }
- SupportedDocument.PAIN_002_LOGS -> {
- val acks = parseCustomerAck(maybeContent.toString(Charsets.UTF_8))
- for (ack in acks) {
- if (ack.code != null)
- println("${ack.timestamp.fmtDateTime()} ${ack.actionType}
${ack.code.name} ${ack.code.isoCode} ${ack.code.description}")
- else
- println("${ack.timestamp.fmtDateTime()} ${ack.actionType}")
- }
- }
- else -> logger.warn("Not ingesting ${ctx.whichDocument}. Only
camt.054 notifications supported.")
- }
+ ingestDocument(db, ctx.cfg.currency, maybeContent, ctx.whichDocument)
}
class EbicsFetch: CliktCommand("Fetches bank records. Defaults to camt.054
notifications") {
@@ -516,34 +514,8 @@ class EbicsFetch: CliktCommand("Fetches bank records.
Defaults to camt.054 noti
Database(dbCfg.dbConnStr).use { db ->
if (parse || import) {
logger.debug("Reading from STDIN, running in debug mode. Not
involving the database.")
- val maybeStdin =
generateSequence(::readLine).joinToString("\n")
- when(whichDoc) {
- SupportedDocument.CAMT_054 -> {
- val incomingTxs = mutableListOf<IncomingPayment>()
- val outgoingTxs = mutableListOf<OutgoingPayment>()
- parseTxNotif(maybeStdin, cfg.currency, incomingTxs,
outgoingTxs)
- if (import) {
- runBlocking {
- incomingTxs.forEach {
- ingestIncomingPayment(db, it)
- }
- outgoingTxs.forEach {
- ingestOutgoingPayment(db, it)
- }
- }
- }
- }
- SupportedDocument.PAIN_002_LOGS -> {
- val acks = parseCustomerAck(maybeStdin)
- for (ack in acks) {
- if (ack.code != null)
- println("${ack.timestamp.fmtDateTime()}
${ack.actionType} ${ack.code.name} ${ack.code.isoCode} ${ack.code.description}")
- else
- println("${ack.timestamp.fmtDateTime()}
${ack.actionType}")
- }
- }
- else -> throw Exception("Parsing $whichDoc not supported")
- }
+ val stdin =
generateSequence(::readLine).joinToString("\n").toByteArray()
+ ingestDocument(db, cfg.currency, stdin, whichDoc) // TODO no db
return@cliCmd
}
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt
b/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt
index d0a46389..35fbec8d 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt
@@ -159,17 +159,22 @@ data class CustomerAck(
val actionType: String,
val code: ExternalStatusReasonCode?,
val timestamp: Instant
-)
+) {
+ override fun toString(): String {
+ return if (code != null)
+ "${timestamp.fmtDateTime()} ${actionType} ${code.isoCode}
'${code.description}'"
+ else
+ "${timestamp.fmtDateTime()} ${actionType}"
+ }
+}
/**
* Extract logs from a pain.002 HAC document.
*
- * @param notifXml pain.002 input document
+ * @param xml pain.002 input document
*/
-fun parseCustomerAck(
- notifXml: String
-): List<CustomerAck> {
- val notifDoc = XMLUtil.parseStringIntoDom(notifXml)
+fun parseCustomerAck(xml: String): List<CustomerAck> {
+ val notifDoc = XMLUtil.parseStringIntoDom(xml)
return destructXml(notifDoc) {
requireRootElement("Document") {
requireUniqueChildNamed("CstmrPmtStsRpt") {
@@ -215,6 +220,76 @@ fun parseCustomerAck(
}
}
+data class PaymentStatus(
+ val msgId: String,
+ val code: ExternalPaymentGroupStatusCode,
+ val reasons: List<Reason>
+) {
+ override fun toString(): String {
+ var builder = "'${msgId}' ${code.isoCode} '${code.description}'"
+ for (reason in reasons) {
+ builder += " - ${reason.code.isoCode} '${reason.code.description}'"
+ }
+ return builder
+ }
+}
+
+data class Reason (
+ val code: ExternalStatusReasonCode,
+ val information: String
+)
+
+/**
+ * Extract payment status from a pain.002 document.
+ *
+ * @param xml pain.002 input document
+ */
+fun parseCustomerPaymentStatusReport(xml: String): PaymentStatus {
+ val notifDoc = XMLUtil.parseStringIntoDom(xml)
+ fun XmlElementDestructor.reasons(): List<Reason> {
+ return mapEachChildNamed("StsRsnInf") {
+ val code = requireUniqueChildNamed("Rsn") {
+ requireUniqueChildNamed("Cd") {
+ ExternalStatusReasonCode.valueOf(focusElement.textContent)
+ }
+ }
+ // TODO parse information
+ Reason(code, "")
+ }
+ }
+ return destructXml(notifDoc) {
+ requireRootElement("Document") {
+ requireUniqueChildNamed("CstmrPmtStsRpt") {
+ val (msgId, msgCode, msgReasons) =
requireUniqueChildNamed("OrgnlGrpInfAndSts") {
+ val id = requireUniqueChildNamed("OrgnlMsgId") {
+ focusElement.textContent
+ }
+ val code = maybeUniqueChildNamed("GrpSts") {
+
ExternalPaymentGroupStatusCode.valueOf(focusElement.textContent)
+ }
+ val reasons = reasons()
+ Triple(id, code, reasons)
+ }
+ val paymentInfo = maybeUniqueChildNamed("OrgnlPmtInfAndSts") {
+ val code = requireUniqueChildNamed("PmtInfSts") {
+
ExternalPaymentGroupStatusCode.valueOf(focusElement.textContent)
+ }
+ val reasons = reasons()
+ Pair(code, reasons)
+ }
+
+ // TODO handle multi level code better
+ if (paymentInfo != null) {
+ val (code, reasons) = paymentInfo
+ PaymentStatus(msgId, code, reasons)
+ } else {
+ PaymentStatus(msgId, msgCode!!, msgReasons)
+ }
+ }
+ }
+ }
+}
+
/**
* Searches payments in a camt.054 (Detailavisierung) document.
*
diff --git a/util/import.py b/util/import.py
index fae5e2e4..e1389052 100644
--- a/util/import.py
+++ b/util/import.py
@@ -17,17 +17,27 @@ files = zip.namelist()
assert len(files) == 1
file = zip.open(files[0])
-# Extract specific code set from XLSX
-df = (
- pl.read_excel(file, sheet_name="AllCodeSets")
- .filter(pl.col("Code Set") == "ExternalStatusReason1Code")
- .sort("Code Value")
-)
+# Parse excel
+df = pl.read_excel(file, sheet_name="AllCodeSets")
+
+def extractCodeSet(setName: str, className: str) -> str:
+ out = f"enum class {className}(val isoCode: String, val description:
String) {{"
+
+ for row in df.filter(pl.col("Code Set") == setName).sort("Code
Value").rows(named=True):
+ (value, isoCode, description) = (
+ row["Code Value"],
+ row["Code Name"],
+ row["Code Definition"].split("\n", 1)[0].strip(),
+ )
+ out += f'\n\t{value}("{isoCode}", "{description}"),'
+
+ out += "\n}"
+ return out
# Write kotlin file
-kt = """/*
+kt = f"""/*
* This file is part of LibEuFin.
- * Copyright (C) 2023 Stanisci and Dold.
+ * Copyright (C) 2024 Taler Systems S.A.
* LibEuFin is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
@@ -44,26 +54,13 @@ kt = """/*
* <http://www.gnu.org/licenses/>
*/
-package tech.libeufin.util
-
-enum class ExternalStatusReasonCode(val isoCode: String, val description:
String) {"""
-for row in df.rows(named=True):
- (value, isoCode, description) = (
- row["Code Value"],
- row["Code Name"],
- row["Code Definition"].split("\n", 1)[0].strip().strip("."),
- )
- kt += f'\n\t{value}("{isoCode}", "{description}"),'
+// THIS FILE IS GENERATED, DO NOT EDIT
+package tech.libeufin.util
-kt += """;
-
- companion object {
- fun lookup(statusCode: String): ExternalStatusReasonCode? {
- return values().find { it.name == statusCode }
- }
- }
-}"""
+{extractCodeSet("ExternalStatusReason1Code", "ExternalStatusReasonCode")}
+{extractCodeSet("ExternalPaymentGroupStatus1Code",
"ExternalPaymentGroupStatusCode")}
+"""
with open("src/main/kotlin/EbicsCodeSets.kt", "w") as file1:
file1.write(kt)
diff --git a/util/src/main/kotlin/EbicsCodeSets.kt
b/util/src/main/kotlin/EbicsCodeSets.kt
index e11c34bb..4e0f95da 100644
--- a/util/src/main/kotlin/EbicsCodeSets.kt
+++ b/util/src/main/kotlin/EbicsCodeSets.kt
@@ -1,6 +1,6 @@
/*
* This file is part of LibEuFin.
- * Copyright (C) 2023 Stanisci and Dold.
+ * Copyright (C) 2024 Taler Systems S.A.
* LibEuFin is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
@@ -17,61 +17,63 @@
* <http://www.gnu.org/licenses/>
*/
+// THIS FILE IS GENERATED, DO NOT EDIT
+
package tech.libeufin.util
enum class ExternalStatusReasonCode(val isoCode: String, val description:
String) {
- AB01("AbortedClearingTimeout", "Clearing process aborted due to
timeout"),
- AB02("AbortedClearingFatalError", "Clearing process aborted due to a
fatal error"),
- AB03("AbortedSettlementTimeout", "Settlement aborted due to timeout"),
- AB04("AbortedSettlementFatalError", "Settlement process aborted due to
a fatal error"),
- AB05("TimeoutCreditorAgent", "Transaction stopped due to timeout at the
Creditor Agent"),
- AB06("TimeoutInstructedAgent", "Transaction stopped due to timeout at
the Instructed Agent"),
- AB07("OfflineAgent", "Agent of message is not online"),
- AB08("OfflineCreditorAgent", "Creditor Agent is not online"),
- AB09("ErrorCreditorAgent", "Transaction stopped due to error at the
Creditor Agent"),
- AB10("ErrorInstructedAgent", "Transaction stopped due to error at the
Instructed Agent"),
- AB11("TimeoutDebtorAgent", "Transaction stopped due to timeout at the
Debtor Agent"),
- AC01("IncorrectAccountNumber", "Account number is invalid or missing"),
+ AB01("AbortedClearingTimeout", "Clearing process aborted due to
timeout."),
+ AB02("AbortedClearingFatalError", "Clearing process aborted due to a
fatal error."),
+ AB03("AbortedSettlementTimeout", "Settlement aborted due to timeout."),
+ AB04("AbortedSettlementFatalError", "Settlement process aborted due to
a fatal error."),
+ AB05("TimeoutCreditorAgent", "Transaction stopped due to timeout at the
Creditor Agent."),
+ AB06("TimeoutInstructedAgent", "Transaction stopped due to timeout at
the Instructed Agent."),
+ AB07("OfflineAgent", "Agent of message is not online."),
+ AB08("OfflineCreditorAgent", "Creditor Agent is not online."),
+ AB09("ErrorCreditorAgent", "Transaction stopped due to error at the
Creditor Agent."),
+ AB10("ErrorInstructedAgent", "Transaction stopped due to error at the
Instructed Agent."),
+ AB11("TimeoutDebtorAgent", "Transaction stopped due to timeout at the
Debtor Agent."),
+ AC01("IncorrectAccountNumber", "Account number is invalid or missing."),
AC02("InvalidDebtorAccountNumber", "Debtor account number invalid or
missing"),
AC03("InvalidCreditorAccountNumber", "Creditor account number invalid
or missing"),
- AC04("ClosedAccountNumber", "Account number specified has been closed
on the bank of account's books"),
+ AC04("ClosedAccountNumber", "Account number specified has been closed
on the bank of account's books."),
AC05("ClosedDebtorAccountNumber", "Debtor account number closed"),
- AC06("BlockedAccount", "Account specified is blocked, prohibiting
posting of transactions against it"),
+ AC06("BlockedAccount", "Account specified is blocked, prohibiting
posting of transactions against it."),
AC07("ClosedCreditorAccountNumber", "Creditor account number closed"),
AC08("InvalidBranchCode", "Branch code is invalid or missing"),
AC09("InvalidAccountCurrency", "Account currency is invalid or
missing"),
AC10("InvalidDebtorAccountCurrency", "Debtor account currency is
invalid or missing"),
AC11("InvalidCreditorAccountCurrency", "Creditor account currency is
invalid or missing"),
- AC12("InvalidAccountType", "Account type missing or invalid"),
+ AC12("InvalidAccountType", "Account type missing or invalid."),
AC13("InvalidDebtorAccountType", "Debtor account type missing or
invalid"),
AC14("InvalidCreditorAccountType", "Creditor account type missing or
invalid"),
- AC15("AccountDetailsChanged", "The account details for the counterparty
have changed"),
- AC16("CardNumberInvalid", "Credit or debit card number is invalid"),
- AEXR("AlreadyExpiredRTP", "Request-to-pay Expiry Date and Time has
already passed"),
+ AC15("AccountDetailsChanged", "The account details for the counterparty
have changed."),
+ AC16("CardNumberInvalid", "Credit or debit card number is invalid."),
+ AEXR("AlreadyExpiredRTP", "Request-to-pay Expiry Date and Time has
already passed."),
AG01("TransactionForbidden", "Transaction forbidden on this type of
account (formerly NoAgreement)"),
AG02("InvalidBankOperationCode", "Bank Operation code specified in the
message is not valid for receiver"),
AG03("TransactionNotSupported", "Transaction type not
supported/authorized on this account"),
- AG04("InvalidAgentCountry", "Agent country code is missing or invalid"),
+ AG04("InvalidAgentCountry", "Agent country code is missing or
invalid."),
AG05("InvalidDebtorAgentCountry", "Debtor agent country code is missing
or invalid"),
AG06("InvalidCreditorAgentCountry", "Creditor agent country code is
missing or invalid"),
- AG07("UnsuccesfulDirectDebit", "Debtor account cannot be debited for a
generic reason"),
+ AG07("UnsuccesfulDirectDebit", "Debtor account cannot be debited for a
generic reason."),
AG08("InvalidAccessRights", "Transaction failed due to invalid or
missing user or access right"),
- AG09("PaymentNotReceived", "Original payment never received"),
- AG10("AgentSuspended", "Agent of message is suspended from the Real
Time Payment system"),
- AG11("CreditorAgentSuspended", "Creditor Agent of message is suspended
from the Real Time Payment system"),
- AG12("NotAllowedBookTransfer", "Payment orders made by transferring
funds from one account to another at the same financial institution (bank or
payment institution) are not allowed"),
- AG13("ForbiddenReturnPayment", "Returned payments derived from
previously returned transactions are not allowed"),
+ AG09("PaymentNotReceived", "Original payment never received."),
+ AG10("AgentSuspended", "Agent of message is suspended from the Real
Time Payment system."),
+ AG11("CreditorAgentSuspended", "Creditor Agent of message is suspended
from the Real Time Payment system."),
+ AG12("NotAllowedBookTransfer", "Payment orders made by transferring
funds from one account to another at the same financial institution (bank or
payment institution) are not allowed."),
+ AG13("ForbiddenReturnPayment", "Returned payments derived from
previously returned transactions are not allowed."),
AGNT("IncorrectAgent", "Agent in the payment workflow is incorrect"),
- ALAC("AlreadyAcceptedRTP", "Request-to-pay has already been accepted by
the Debtor"),
+ ALAC("AlreadyAcceptedRTP", "Request-to-pay has already been accepted by
the Debtor."),
AM01("ZeroAmount", "Specified message amount is equal to zero"),
AM02("NotAllowedAmount", "Specific transaction/message amount is
greater than allowed maximum"),
AM03("NotAllowedCurrency", "Specified message amount is an non
processable currency outside of existing agreement"),
- AM04("InsufficientFunds", "Amount of funds available to cover specified
message amount is insufficient"),
+ AM04("InsufficientFunds", "Amount of funds available to cover specified
message amount is insufficient."),
AM05("Duplication", "Duplication"),
- AM06("TooLowAmount", "Specified transaction amount is less than agreed
minimum"),
- AM07("BlockedAmount", "Amount specified in message has been blocked by
regulatory authorities"),
+ AM06("TooLowAmount", "Specified transaction amount is less than agreed
minimum."),
+ AM07("BlockedAmount", "Amount specified in message has been blocked by
regulatory authorities."),
AM09("WrongAmount", "Amount received is not the amount agreed or
expected"),
- AM10("InvalidControlSum", "Sum of instructed amounts does not equal the
control sum"),
+ AM10("InvalidControlSum", "Sum of instructed amounts does not equal the
control sum."),
AM11("InvalidTransactionCurrency", "Transaction currency is invalid or
missing"),
AM12("InvalidAmount", "Amount is invalid or missing"),
AM13("AmountExceedsClearingSystemLimit", "Transaction amount exceeds
limits set by clearing system"),
@@ -79,38 +81,38 @@ enum class ExternalStatusReasonCode(val isoCode: String,
val description: String
AM15("AmountBelowClearingSystemMinimum", "Transaction amount below
minimum set by clearing system"),
AM16("InvalidGroupControlSum", "Control Sum at the Group level is
invalid"),
AM17("InvalidPaymentInfoControlSum", "Control Sum at the Payment
Information level is invalid"),
- AM18("InvalidNumberOfTransactions", "Number of transactions is invalid
or missing"),
+ AM18("InvalidNumberOfTransactions", "Number of transactions is invalid
or missing."),
AM19("InvalidGroupNumberOfTransactions", "Number of transactions at the
Group level is invalid or missing"),
AM20("InvalidPaymentInfoNumberOfTransactions", "Number of transactions
at the Payment Information level is invalid"),
- AM21("LimitExceeded", "Transaction amount exceeds limits agreed between
bank and client"),
- AM22("ZeroAmountNotApplied", "Unable to apply zero amount to designated
account. For example, where the rules of a service allow the use of zero amount
payments, however the back-office system is unable to apply the funds to the
account. If the rules of a service prohibit the use of zero amount payments,
then code AM01 is used to report the error condition"),
- AM23("AmountExceedsSettlementLimit", "Transaction amount exceeds
settlement limit"),
- APAR("AlreadyPaidRTP", "Request To Pay has already been paid by the
Debtor"),
- ARFR("AlreadyRefusedRTP", "Request-to-pay has already been refused by
the Debtor"),
- ARJR("AlreadyRejectedRTP", "Request-to-pay has already been rejected"),
- ATNS("AttachementsNotSupported", "Attachments to the request-to-pay are
not supported"),
- BE01("InconsistenWithEndCustomer", "Identification of end customer is
not consistent with associated account number. (formerly CreditorConsistency)"),
- BE04("MissingCreditorAddress", "Specification of creditor's address,
which is required for payment, is missing/not correct (formerly
IncorrectCreditorAddress)"),
+ AM21("LimitExceeded", "Transaction amount exceeds limits agreed between
bank and client."),
+ AM22("ZeroAmountNotApplied", "Unable to apply zero amount to designated
account. For example, where the rules of a service allow the use of zero amount
payments, however the back-office system is unable to apply the funds to the
account. If the rules of a service prohibit the use of zero amount payments,
then code AM01 is used to report the error condition."),
+ AM23("AmountExceedsSettlementLimit", "Transaction amount exceeds
settlement limit."),
+ APAR("AlreadyPaidRTP", "Request To Pay has already been paid by the
Debtor."),
+ ARFR("AlreadyRefusedRTP", "Request-to-pay has already been refused by
the Debtor."),
+ ARJR("AlreadyRejectedRTP", "Request-to-pay has already been rejected."),
+ ATNS("AttachementsNotSupported", "Attachments to the request-to-pay are
not supported."),
+ BE01("InconsistenWithEndCustomer", "Identification of end customer is
not consistent with associated account number. (formerly
CreditorConsistency)."),
+ BE04("MissingCreditorAddress", "Specification of creditor's address,
which is required for payment, is missing/not correct (formerly
IncorrectCreditorAddress)."),
BE05("UnrecognisedInitiatingParty", "Party who initiated the message is
not recognised by the end customer"),
BE06("UnknownEndCustomer", "End customer specified is not known at
associated Sort/National Bank Code or does no longer exist in the books"),
- BE07("MissingDebtorAddress", "Specification of debtor's address, which
is required for payment, is missing/not correct"),
+ BE07("MissingDebtorAddress", "Specification of debtor's address, which
is required for payment, is missing/not correct."),
BE08("MissingDebtorName", "Debtor name is missing"),
- BE09("InvalidCountry", "Country code is missing or Invalid"),
+ BE09("InvalidCountry", "Country code is missing or Invalid."),
BE10("InvalidDebtorCountry", "Debtor country code is missing or
invalid"),
BE11("InvalidCreditorCountry", "Creditor country code is missing or
invalid"),
- BE12("InvalidCountryOfResidence", "Country code of residence is missing
or Invalid"),
+ BE12("InvalidCountryOfResidence", "Country code of residence is missing
or Invalid."),
BE13("InvalidDebtorCountryOfResidence", "Country code of debtor's
residence is missing or Invalid"),
BE14("InvalidCreditorCountryOfResidence", "Country code of creditor's
residence is missing or Invalid"),
- BE15("InvalidIdentificationCode", "Identification code missing or
invalid"),
+ BE15("InvalidIdentificationCode", "Identification code missing or
invalid."),
BE16("InvalidDebtorIdentificationCode", "Debtor or Ultimate Debtor
identification code missing or invalid"),
BE17("InvalidCreditorIdentificationCode", "Creditor or Ultimate
Creditor identification code missing or invalid"),
BE18("InvalidContactDetails", "Contact details missing or invalid"),
BE19("InvalidChargeBearerCode", "Charge bearer code for transaction
type is invalid"),
- BE20("InvalidNameLength", "Name length exceeds local rules for payment
type"),
- BE21("MissingName", "Name missing or invalid. Generic usage if cannot
specifically identify debtor or creditor"),
+ BE20("InvalidNameLength", "Name length exceeds local rules for payment
type."),
+ BE21("MissingName", "Name missing or invalid. Generic usage if cannot
specifically identify debtor or creditor."),
BE22("MissingCreditorName", "Creditor name is missing"),
- BE23("AccountProxyInvalid", "Phone number or email address, or any
other proxy, used as the account proxy is unknown or invalid"),
- CERI("CheckERI", "Credit transfer is not tagged as an Extended
Remittance Information (ERI) transaction but contains ERI"),
+ BE23("AccountProxyInvalid", "Phone number or email address, or any
other proxy, used as the account proxy is unknown or invalid."),
+ CERI("CheckERI", "Credit transfer is not tagged as an Extended
Remittance Information (ERI) transaction but contains ERI."),
CH03("RequestedExecutionDateOrRequestedCollectionDateTooFarInFuture",
"Value in Requested Execution Date or Requested Collection Date is too far in
the future"),
CH04("RequestedExecutionDateOrRequestedCollectionDateTooFarInPast",
"Value in Requested Execution Date or Requested Collection Date is too far in
the past"),
CH07("ElementIsNotToBeUsedAtB-andC-Level", "Element is not to be used
at B- and C-Level"),
@@ -127,12 +129,12 @@ enum class ExternalStatusReasonCode(val isoCode: String,
val description: String
CH20("DecimalPointsNotCompatibleWithCurrency", "Number of decimal
points not compatible with the currency"),
CH21("RequiredCompulsoryElementMissing", "Mandatory element is
missing"),
CH22("COREandB2BwithinOnemessage", "SDD CORE and B2B not permitted
within one message"),
- CHQC("ChequeSettledOnCreditorAccount", "Cheque has been presented in
cheque clearing and settled on the creditor’s account"),
- CN01("AuthorisationCancelled", "Authorisation is cancelled"),
+ CHQC("ChequeSettledOnCreditorAccount", "Cheque has been presented in
cheque clearing and settled on the creditor’s account."),
+ CN01("AuthorisationCancelled", "Authorisation is cancelled."),
CNOR("CreditorBankIsNotRegistered", "Creditor bank is not registered
under this BIC in the CSM"),
CURR("IncorrectCurrency", "Currency of the payment is incorrect"),
CUST("RequestedByCustomer", "Cancellation requested by the Debtor"),
- DC02("SettlementNotReceived", "Rejection of a payment due to covering
FI settlement not being received"),
+ DC02("SettlementNotReceived", "Rejection of a payment due to covering
FI settlement not being received."),
DNOR("DebtorBankIsNotRegistered", "Debtor bank is not registered under
this BIC in the CSM"),
DS01("ElectronicSignaturesCorrect", "The electronic signature(s) is/are
correct"),
DS02("OrderCancelled", "An authorized user has cancelled the order"),
@@ -143,29 +145,29 @@ enum class ExternalStatusReasonCode(val isoCode: String,
val description: String
DS07("ProcessingOK", "All actions concerning the order could be done by
the EBICS bank server"),
DS08("DecompressionError", "The decompression of the file was not
successful"),
DS09("DecryptionError", "The decryption of the file was not
successful"),
- DS0A("DataSignRequested", "Data signature is required"),
- DS0B("UnknownDataSignFormat", "Data signature for the format is not
available or invalid"),
- DS0C("SignerCertificateRevoked", "The signer certificate is revoked"),
- DS0D("SignerCertificateNotValid", "The signer certificate is not valid
(revoked or not active)"),
- DS0E("IncorrectSignerCertificate", "The signer certificate is not
present"),
- DS0F("SignerCertificationAuthoritySignerNotValid", "The authority of
the signer certification sending the certificate is unknown"),
- DS0G("NotAllowedPayment", "Signer is not allowed to sign this operation
type"),
- DS0H("NotAllowedAccount", "Signer is not allowed to sign for this
account"),
- DS0K("NotAllowedNumberOfTransaction", "The number of transaction is
over the number allowed for this signer"),
- DS10("Signer1CertificateRevoked", "The certificate is revoked for the
first signer"),
- DS11("Signer1CertificateNotValid", "The certificate is not valid
(revoked or not active) for the first signer"),
- DS12("IncorrectSigner1Certificate", "The certificate is not present for
the first signer"),
- DS13("SignerCertificationAuthoritySigner1NotValid", "The authority of
signer certification sending the certificate is unknown for the first signer"),
+ DS0A("DataSignRequested", "Data signature is required."),
+ DS0B("UnknownDataSignFormat", "Data signature for the format is not
available or invalid."),
+ DS0C("SignerCertificateRevoked", "The signer certificate is revoked."),
+ DS0D("SignerCertificateNotValid", "The signer certificate is not valid
(revoked or not active)."),
+ DS0E("IncorrectSignerCertificate", "The signer certificate is not
present."),
+ DS0F("SignerCertificationAuthoritySignerNotValid", "The authority of
the signer certification sending the certificate is unknown."),
+ DS0G("NotAllowedPayment", "Signer is not allowed to sign this operation
type."),
+ DS0H("NotAllowedAccount", "Signer is not allowed to sign for this
account."),
+ DS0K("NotAllowedNumberOfTransaction", "The number of transaction is
over the number allowed for this signer."),
+ DS10("Signer1CertificateRevoked", "The certificate is revoked for the
first signer."),
+ DS11("Signer1CertificateNotValid", "The certificate is not valid
(revoked or not active) for the first signer."),
+ DS12("IncorrectSigner1Certificate", "The certificate is not present for
the first signer."),
+ DS13("SignerCertificationAuthoritySigner1NotValid", "The authority of
signer certification sending the certificate is unknown for the first signer."),
DS14("UserDoesNotExist", "The user is unknown on the server"),
DS15("IdenticalSignatureFound", "The same signature has already been
sent to the bank"),
- DS16("PublicKeyVersionIncorrect", "The public key version is not
correct. This code is returned when a customer sends signature files to the
financial institution after conversion from an older program version (old ES
format) to a new program version (new ES format) without having carried out
re-initialisation with regard to a public key change"),
+ DS16("PublicKeyVersionIncorrect", "The public key version is not
correct. This code is returned when a customer sends signature files to the
financial institution after conversion from an older program version (old ES
format) to a new program version (new ES format) without having carried out
re-initialisation with regard to a public key change."),
DS17("DifferentOrderDataInSignatures", "Order data and signatures don’t
match"),
- DS18("RepeatOrder", "File cannot be tested, the complete order has to
be repeated. This code is returned in the event of a malfunction during the
signature check, e.g. not enough storage space"),
+ DS18("RepeatOrder", "File cannot be tested, the complete order has to
be repeated. This code is returned in the event of a malfunction during the
signature check, e.g. not enough storage space."),
DS19("ElectronicSignatureRightsInsufficient", "The user’s rights
(concerning his signature) are insufficient to execute the order"),
- DS20("Signer2CertificateRevoked", "The certificate is revoked for the
second signer"),
- DS21("Signer2CertificateNotValid", "The certificate is not valid
(revoked or not active) for the second signer"),
- DS22("IncorrectSigner2Certificate", "The certificate is not present for
the second signer"),
- DS23("SignerCertificationAuthoritySigner2NotValid", "The authority of
signer certification sending the certificate is unknown for the second signer"),
+ DS20("Signer2CertificateRevoked", "The certificate is revoked for the
second signer."),
+ DS21("Signer2CertificateNotValid", "The certificate is not valid
(revoked or not active) for the second signer."),
+ DS22("IncorrectSigner2Certificate", "The certificate is not present for
the second signer."),
+ DS23("SignerCertificationAuthoritySigner2NotValid", "The authority of
signer certification sending the certificate is unknown for the second
signer."),
DS24("WaitingTimeExpired", "Waiting time expired due to incomplete
order"),
DS25("OrderFileDeleted", "The order file was deleted by the bank
server"),
DS26("UserSignedMultipleTimes", "The same user has signed multiple
times"),
@@ -174,24 +176,24 @@ enum class ExternalStatusReasonCode(val isoCode: String,
val description: String
DT02("InvalidCreationDate", "Invalid creation date and time in Group
Header (eg, historic date)"),
DT03("InvalidNonProcessingDate", "Invalid non bank processing date (eg,
weekend or local public holiday)"),
DT04("FutureDateNotSupported", "Future date not supported"),
- DT05("InvalidCutOffDate", "Associated message, payment information
block or transaction was received after agreed processing cut-off date, i.e.,
date in the past"),
+ DT05("InvalidCutOffDate", "Associated message, payment information
block or transaction was received after agreed processing cut-off date, i.e.,
date in the past."),
DT06("ExecutionDateChanged", "Execution Date has been modified in order
for transaction to be processed"),
- DU01("DuplicateMessageID", "Message Identification is not unique"),
- DU02("DuplicatePaymentInformationID", "Payment Information Block is not
unique"),
- DU03("DuplicateTransaction", "Transaction is not unique"),
- DU04("DuplicateEndToEndID", "End To End ID is not unique"),
- DU05("DuplicateInstructionID", "Instruction ID is not unique"),
+ DU01("DuplicateMessageID", "Message Identification is not unique."),
+ DU02("DuplicatePaymentInformationID", "Payment Information Block is not
unique."),
+ DU03("DuplicateTransaction", "Transaction is not unique."),
+ DU04("DuplicateEndToEndID", "End To End ID is not unique."),
+ DU05("DuplicateInstructionID", "Instruction ID is not unique."),
DUPL("DuplicatePayment", "Payment is a duplicate of another payment"),
- ED01("CorrespondentBankNotPossible", "Correspondent bank not possible"),
+ ED01("CorrespondentBankNotPossible", "Correspondent bank not
possible."),
ED03("BalanceInfoRequest", "Balance of payments complementary info is
requested"),
- ED05("SettlementFailed", "Settlement of the transaction has failed"),
- ED06("SettlementSystemNotAvailable", "Interbank settlement system not
available"),
- EDTL("ExpiryDateTooLong", "Expiry date time of the request-to-pay is
too far in the future"),
- EDTR("ExpiryDateTimeReached", "Expiry date time of the request-to-pay
is already reached"),
- ERIN("ERIOptionNotSupported", "Extended Remittance Information (ERI)
option is not supported"),
+ ED05("SettlementFailed", "Settlement of the transaction has failed."),
+ ED06("SettlementSystemNotAvailable", "Interbank settlement system not
available."),
+ EDTL("ExpiryDateTooLong", "Expiry date time of the request-to-pay is
too far in the future."),
+ EDTR("ExpiryDateTimeReached", "Expiry date time of the request-to-pay
is already reached."),
+ ERIN("ERIOptionNotSupported", "Extended Remittance Information (ERI)
option is not supported."),
FF01("InvalidFileFormat", "File Format incomplete or invalid"),
- FF02("SyntaxError", "Syntax error reason is provided as narrative
information in the additional reason information"),
- FF03("InvalidPaymentTypeInformation", "Payment Type Information is
missing or invalid"),
+ FF02("SyntaxError", "Syntax error reason is provided as narrative
information in the additional reason information."),
+ FF03("InvalidPaymentTypeInformation", "Payment Type Information is
missing or invalid."),
FF04("InvalidServiceLevelCode", "Service Level code is missing or
invalid"),
FF05("InvalidLocalInstrumentCode", "Local Instrument code is missing or
invalid"),
FF06("InvalidCategoryPurposeCode", "Category Purpose code is missing or
invalid"),
@@ -199,102 +201,109 @@ enum class ExternalStatusReasonCode(val isoCode:
String, val description: String
FF08("InvalidEndToEndId", "End to End Id missing or invalid"),
FF09("InvalidChequeNumber", "Cheque number missing or invalid"),
FF10("BankSystemProcessingError", "File or transaction cannot be
processed due to technical issues at the bank side"),
- FF11("ClearingRequestAborted", "Clearing request rejected due it being
subject to an abort operation"),
- FF12("OriginalTransactionNotEligibleForRequestedReturn", "Original
payment is not eligible to be returned given its current status"),
- FF13("RequestForCancellationNotFound", "No record of request for
cancellation found"),
- FOCR("FollowingCancellationRequest", "Return following a cancellation
request"),
- FR01("Fraud", "Returned as a result of fraud"),
- FRAD("FraudulentOrigin", "Cancellation requested following a
transaction that was originated fraudulently. The use of the FraudulentOrigin
code should be governed by jurisdictions"),
- G000("PaymentTransferredAndTracked", "In an FI To FI Customer Credit
Transfer: The Status Originator transferred the payment to the next Agent or to
a Market Infrastructure. The payment transfer is tracked. No further updates
will follow from the Status Originator"),
- G001("PaymentTransferredAndNotTracked", "In an FI To FI Customer Credit
Transfer: The Status Originator transferred the payment to the next Agent or to
a Market Infrastructure. The payment transfer is not tracked. No further
updates will follow from the Status Originator"),
- G002("CreditDebitNotConfirmed", "In a FIToFI Customer Credit Transfer:
Credit to the creditor’s account may not be confirmed same day. Update will
follow from the Status Originator"),
- G003("CreditPendingDocuments", "In a FIToFI Customer Credit Transfer:
Credit to creditor’s account is pending receipt of required documents. The
Status Originator has requested creditor to provide additional documentation.
Update will follow from the Status Originator"),
- G004("CreditPendingFunds", "In a FIToFI Customer Credit Transfer:
Credit to the creditor’s account is pending, status Originator is waiting for
funds provided via a cover. Update will follow from the Status Originator"),
- G005("DeliveredWithServiceLevel", "Payment has been delivered to
creditor agent with service level"),
- G006("DeliveredWIthoutServiceLevel", "Payment has been delivered to
creditor agent without service level"),
- ID01("CorrespondingOriginalFileStillNotSent", "Signature file was sent
to the bank but the corresponding original file has not been sent yet"),
- IEDT("IncorrectExpiryDateTime", "Expiry date time of the request-to-pay
is incorrect"),
- IRNR("InitialRTPNeverReceived", "No initial request-to-pay has been
received"),
+ FF11("ClearingRequestAborted", "Clearing request rejected due it being
subject to an abort operation."),
+ FF12("OriginalTransactionNotEligibleForRequestedReturn", "Original
payment is not eligible to be returned given its current status."),
+ FF13("RequestForCancellationNotFound", "No record of request for
cancellation found."),
+ FOCR("FollowingCancellationRequest", "Return following a cancellation
request."),
+ FR01("Fraud", "Returned as a result of fraud."),
+ FRAD("FraudulentOrigin", "Cancellation requested following a
transaction that was originated fraudulently. The use of the FraudulentOrigin
code should be governed by jurisdictions."),
+ G000("PaymentTransferredAndTracked", "In an FI To FI Customer Credit
Transfer: The Status Originator transferred the payment to the next Agent or to
a Market Infrastructure. The payment transfer is tracked. No further updates
will follow from the Status Originator."),
+ G001("PaymentTransferredAndNotTracked", "In an FI To FI Customer Credit
Transfer: The Status Originator transferred the payment to the next Agent or to
a Market Infrastructure. The payment transfer is not tracked. No further
updates will follow from the Status Originator."),
+ G002("CreditDebitNotConfirmed", "In a FIToFI Customer Credit Transfer:
Credit to the creditor’s account may not be confirmed same day. Update will
follow from the Status Originator."),
+ G003("CreditPendingDocuments", "In a FIToFI Customer Credit Transfer:
Credit to creditor’s account is pending receipt of required documents. The
Status Originator has requested creditor to provide additional documentation.
Update will follow from the Status Originator."),
+ G004("CreditPendingFunds", "In a FIToFI Customer Credit Transfer:
Credit to the creditor’s account is pending, status Originator is waiting for
funds provided via a cover. Update will follow from the Status Originator."),
+ G005("DeliveredWithServiceLevel", "Payment has been delivered to
creditor agent with service level."),
+ G006("DeliveredWIthoutServiceLevel", "Payment has been delivered to
creditor agent without service level."),
+ ID01("CorrespondingOriginalFileStillNotSent", "Signature file was sent
to the bank but the corresponding original file has not been sent yet."),
+ IEDT("IncorrectExpiryDateTime", "Expiry date time of the request-to-pay
is incorrect."),
+ IRNR("InitialRTPNeverReceived", "No initial request-to-pay has been
received."),
MD01("NoMandate", "No Mandate"),
- MD02("MissingMandatoryInformationInMandate", "Mandate related
information data required by the scheme is missing"),
+ MD02("MissingMandatoryInformationInMandate", "Mandate related
information data required by the scheme is missing."),
MD05("CollectionNotDue", "Creditor or creditor's agent should not have
collected the direct debit"),
MD06("RefundRequestByEndCustomer", "Return of funds requested by end
customer"),
- MD07("EndCustomerDeceased", "End customer is deceased"),
+ MD07("EndCustomerDeceased", "End customer is deceased."),
MS02("NotSpecifiedReasonCustomerGenerated", "Reason has not been
specified by end customer"),
- MS03("NotSpecifiedReasonAgentGenerated", "Reason has not been specified
by agent"),
- NARR("Narrative", "Reason is provided as narrative information in the
additional reason information"),
- NERI("NoERI", "Credit transfer is tagged as an Extended Remittance
Information (ERI) transaction but does not contain ERI"),
- NOAR("NonAgreedRTP", "No existing agreement for receiving
request-to-pay messages"),
- NOAS("NoAnswerFromCustomer", "No response from Beneficiary"),
- NOCM("NotCompliantGeneric", "Customer account is not compliant with
regulatory requirements, for example FICA (in South Africa) or any other
regulatory requirements which render an account inactive for certain
processing"),
- NOPG("NoPaymentGuarantee", "Requested payment guarantee (by Creditor)
related to a request-to-pay cannot be provided"),
- NRCH("PayerOrPayerRTPSPNotReachable", "Recipient side of the
request-to-pay (payer or its request-to-pay service provider) is not
reachable"),
- PINS("TypeOfPaymentInstrumentNotSupported", "Type of payment requested
in the request-to-pay is not supported by the payer"),
- RC01("BankIdentifierIncorrect", "Bank identifier code specified in the
message has an incorrect format (formerly IncorrectFormatForRoutingCode)"),
- RC02("InvalidBankIdentifier", "Bank identifier is invalid or missing"),
+ MS03("NotSpecifiedReasonAgentGenerated", "Reason has not been specified
by agent."),
+ NARR("Narrative", "Reason is provided as narrative information in the
additional reason information."),
+ NERI("NoERI", "Credit transfer is tagged as an Extended Remittance
Information (ERI) transaction but does not contain ERI."),
+ NOAR("NonAgreedRTP", "No existing agreement for receiving
request-to-pay messages."),
+ NOAS("NoAnswerFromCustomer", "No response from Beneficiary."),
+ NOCM("NotCompliantGeneric", "Customer account is not compliant with
regulatory requirements, for example FICA (in South Africa) or any other
regulatory requirements which render an account inactive for certain
processing."),
+ NOPG("NoPaymentGuarantee", "Requested payment guarantee (by Creditor)
related to a request-to-pay cannot be provided."),
+ NRCH("PayerOrPayerRTPSPNotReachable", "Recipient side of the
request-to-pay (payer or its request-to-pay service provider) is not
reachable."),
+ PINS("TypeOfPaymentInstrumentNotSupported", "Type of payment requested
in the request-to-pay is not supported by the payer."),
+ RC01("BankIdentifierIncorrect", "Bank identifier code specified in the
message has an incorrect format (formerly IncorrectFormatForRoutingCode)."),
+ RC02("InvalidBankIdentifier", "Bank identifier is invalid or missing."),
RC03("InvalidDebtorBankIdentifier", "Debtor bank identifier is invalid
or missing"),
RC04("InvalidCreditorBankIdentifier", "Creditor bank identifier is
invalid or missing"),
- RC05("InvalidBICIdentifier", "BIC identifier is invalid or missing"),
+ RC05("InvalidBICIdentifier", "BIC identifier is invalid or missing."),
RC06("InvalidDebtorBICIdentifier", "Debtor BIC identifier is invalid or
missing"),
RC07("InvalidCreditorBICIdentifier", "Creditor BIC identifier is
invalid or missing"),
- RC08("InvalidClearingSystemMemberIdentifier",
"ClearingSystemMemberidentifier is invalid or missing"),
+ RC08("InvalidClearingSystemMemberIdentifier",
"ClearingSystemMemberidentifier is invalid or missing."),
RC09("InvalidDebtorClearingSystemMemberIdentifier", "Debtor
ClearingSystemMember identifier is invalid or missing"),
RC10("InvalidCreditorClearingSystemMemberIdentifier", "Creditor
ClearingSystemMember identifier is invalid or missing"),
RC11("InvalidIntermediaryAgent", "Intermediary Agent is invalid or
missing"),
RC12("MissingCreditorSchemeId", "Creditor Scheme Id is invalid or
missing"),
RCON("RMessageConflict", "Conflict with R-Message"),
- RECI("ReceiverCustomerInformation", "Further information regarding the
intended recipient"),
- REPR("RTPReceivedCanBeProcessed", "Request-to-pay has been received and
can be processed further"),
- RF01("NotUniqueTransactionReference", "Transaction reference is not
unique within the message"),
+ RECI("ReceiverCustomerInformation", "Further information regarding the
intended recipient."),
+ REPR("RTPReceivedCanBeProcessed", "Request-to-pay has been received and
can be processed further."),
+ RF01("NotUniqueTransactionReference", "Transaction reference is not
unique within the message."),
RR01("MissingDebtorAccountOrIdentification", "Specification of the
debtor’s account or unique identification needed for reasons of regulatory
requirements is insufficient or missing"),
- RR02("MissingDebtorNameOrAddress", "Specification of the debtor’s name
and/or address needed for regulatory requirements is insufficient or missing"),
- RR03("MissingCreditorNameOrAddress", "Specification of the creditor’s
name and/or address needed for regulatory requirements is insufficient or
missing"),
+ RR02("MissingDebtorNameOrAddress", "Specification of the debtor’s name
and/or address needed for regulatory requirements is insufficient or missing."),
+ RR03("MissingCreditorNameOrAddress", "Specification of the creditor’s
name and/or address needed for regulatory requirements is insufficient or
missing."),
RR04("RegulatoryReason", "Regulatory Reason"),
- RR05("RegulatoryInformationInvalid", "Regulatory or Central Bank
Reporting information missing, incomplete or invalid"),
- RR06("TaxInformationInvalid", "Tax information missing, incomplete or
invalid"),
- RR07("RemittanceInformationInvalid", "Remittance information structure
does not comply with rules for payment type"),
- RR08("RemittanceInformationTruncated", "Remittance information
truncated to comply with rules for payment type"),
- RR09("InvalidStructuredCreditorReference", "Structured creditor
reference invalid or missing"),
- RR10("InvalidCharacterSet", "Character set supplied not valid for the
country and payment type"),
- RR11("InvalidDebtorAgentServiceID", "Invalid or missing identification
of a bank proprietary service"),
- RR12("InvalidPartyID", "Invalid or missing identification required
within a particular country or payment type"),
- RTNS("RTPNotSupportedForDebtor", "Debtor does not support
request-to-pay transactions"),
- RUTA("ReturnUponUnableToApply", "Return following investigation request
and no remediation possible"),
- S000("ValidRequestForCancellationAcknowledged", "Request for
Cancellation is acknowledged following validation"),
- S001("UETRFlaggedForCancellation", "Unique End-to-end Transaction
Reference (UETR) relating to a payment has been identified as being associated
with a Request for Cancellation"),
- S002("NetworkStopOfUETR", "Unique End-to-end Transaction Reference
(UETR) relating to a payment has been prevent from traveling across a messaging
network"),
- S003("RequestForCancellationForwarded", "Request for Cancellation has
been forwarded to the payment processing/last payment processing agent"),
- S004("RequestForCancellationDeliveryAcknowledgement", "Request for
Cancellation has been acknowledged as delivered to payment processing/last
payment processing agent"),
- SL01("SpecificServiceOfferedByDebtorAgent", "Due to specific service
offered by the Debtor Agent"),
- SL02("SpecificServiceOfferedByCreditorAgent", "Due to specific service
offered by the Creditor Agent"),
- SL03("ServiceofClearingSystem", "Due to a specific service offered by
the clearing system"),
- SL11("CreditorNotOnWhitelistOfDebtor", "Whitelisting service offered by
the Debtor Agent; Debtor has not included the Creditor on its “Whitelist”
(yet). In the Whitelist the Debtor may list all allowed Creditors to debit
Debtor bank account"),
- SL12("CreditorOnBlacklistOfDebtor", "Blacklisting service offered by
the Debtor Agent; Debtor included the Creditor on his “Blacklist”. In the
Blacklist the Debtor may list all Creditors not allowed to debit Debtor bank
account"),
- SL13("MaximumNumberOfDirectDebitTransactionsExceeded", "Due to Maximum
allowed Direct Debit Transactions per period service offered by the Debtor
Agent"),
- SL14("MaximumDirectDebitTransactionAmountExceeded", "Due to Maximum
allowed Direct Debit Transaction amount service offered by the Debtor Agent"),
- SPII("RTPServiceProviderIdentifierIncorrect", "Identifier of the
request-to-pay service provider is incorrect"),
+ RR05("RegulatoryInformationInvalid", "Regulatory or Central Bank
Reporting information missing, incomplete or invalid."),
+ RR06("TaxInformationInvalid", "Tax information missing, incomplete or
invalid."),
+ RR07("RemittanceInformationInvalid", "Remittance information structure
does not comply with rules for payment type."),
+ RR08("RemittanceInformationTruncated", "Remittance information
truncated to comply with rules for payment type."),
+ RR09("InvalidStructuredCreditorReference", "Structured creditor
reference invalid or missing."),
+ RR10("InvalidCharacterSet", "Character set supplied not valid for the
country and payment type."),
+ RR11("InvalidDebtorAgentServiceID", "Invalid or missing identification
of a bank proprietary service."),
+ RR12("InvalidPartyID", "Invalid or missing identification required
within a particular country or payment type."),
+ RTNS("RTPNotSupportedForDebtor", "Debtor does not support
request-to-pay transactions."),
+ RUTA("ReturnUponUnableToApply", "Return following investigation request
and no remediation possible."),
+ S000("ValidRequestForCancellationAcknowledged", "Request for
Cancellation is acknowledged following validation."),
+ S001("UETRFlaggedForCancellation", "Unique End-to-end Transaction
Reference (UETR) relating to a payment has been identified as being associated
with a Request for Cancellation."),
+ S002("NetworkStopOfUETR", "Unique End-to-end Transaction Reference
(UETR) relating to a payment has been prevent from traveling across a messaging
network."),
+ S003("RequestForCancellationForwarded", "Request for Cancellation has
been forwarded to the payment processing/last payment processing agent."),
+ S004("RequestForCancellationDeliveryAcknowledgement", "Request for
Cancellation has been acknowledged as delivered to payment processing/last
payment processing agent."),
+ SL01("SpecificServiceOfferedByDebtorAgent", "Due to specific service
offered by the Debtor Agent."),
+ SL02("SpecificServiceOfferedByCreditorAgent", "Due to specific service
offered by the Creditor Agent."),
+ SL03("ServiceofClearingSystem", "Due to a specific service offered by
the clearing system."),
+ SL11("CreditorNotOnWhitelistOfDebtor", "Whitelisting service offered by
the Debtor Agent; Debtor has not included the Creditor on its “Whitelist”
(yet). In the Whitelist the Debtor may list all allowed Creditors to debit
Debtor bank account."),
+ SL12("CreditorOnBlacklistOfDebtor", "Blacklisting service offered by
the Debtor Agent; Debtor included the Creditor on his “Blacklist”. In the
Blacklist the Debtor may list all Creditors not allowed to debit Debtor bank
account."),
+ SL13("MaximumNumberOfDirectDebitTransactionsExceeded", "Due to Maximum
allowed Direct Debit Transactions per period service offered by the Debtor
Agent."),
+ SL14("MaximumDirectDebitTransactionAmountExceeded", "Due to Maximum
allowed Direct Debit Transaction amount service offered by the Debtor Agent."),
+ SPII("RTPServiceProviderIdentifierIncorrect", "Identifier of the
request-to-pay service provider is incorrect."),
TA01("TransmissonAborted", "The transmission of the file was not
successful – it had to be aborted (for technical reasons)"),
TD01("NoDataAvailable", "There is no data available (for download)"),
TD02("FileNonReadable", "The file cannot be read (e.g. unknown
format)"),
TD03("IncorrectFileStructure", "The file format is incomplete or
invalid"),
- TK01("TokenInvalid", "Token is invalid"),
- TK02("SenderTokenNotFound", "Token used for the sender does not exist"),
- TK03("ReceiverTokenNotFound", "Token used for the receiver does not
exist"),
- TK09("TokenMissing", "Token required for request is missing"),
- TKCM("TokenCounterpartyMismatch", "Token found with counterparty
mismatch"),
- TKSG("TokenSingleUse", "Single Use Token already used"),
- TKSP("TokenSuspended", "Token found with suspended status"),
- TKVE("TokenValueLimitExceeded", "Token found with value limit rule
violation"),
- TKXP("TokenExpired", "Token expired"),
- TM01("InvalidCutOffTime", "Associated message, payment information
block, or transaction was received after agreed processing cut-off time"),
- TS01("TransmissionSuccessful", "The (technical) transmission of the
file was successful"),
+ TK01("TokenInvalid", "Token is invalid."),
+ TK02("SenderTokenNotFound", "Token used for the sender does not
exist."),
+ TK03("ReceiverTokenNotFound", "Token used for the receiver does not
exist."),
+ TK09("TokenMissing", "Token required for request is missing."),
+ TKCM("TokenCounterpartyMismatch", "Token found with counterparty
mismatch."),
+ TKSG("TokenSingleUse", "Single Use Token already used."),
+ TKSP("TokenSuspended", "Token found with suspended status."),
+ TKVE("TokenValueLimitExceeded", "Token found with value limit rule
violation."),
+ TKXP("TokenExpired", "Token expired."),
+ TM01("InvalidCutOffTime", "Associated message, payment information
block, or transaction was received after agreed processing cut-off time."),
+ TS01("TransmissionSuccessful", "The (technical) transmission of the
file was successful."),
TS04("TransferToSignByHand", "The order was transferred to pass by
accompanying note signed by hand"),
- UCRD("UnknownCreditor", "Unknown Creditor"),
- UPAY("UnduePayment", "Payment is not justified"),;
+ UCRD("UnknownCreditor", "Unknown Creditor."),
+ UPAY("UnduePayment", "Payment is not justified."),
+}
- companion object {
- fun lookup(statusCode: String): ExternalStatusReasonCode? {
- return values().find { it.name == statusCode }
- }
- }
-}
\ No newline at end of file
+enum class ExternalPaymentGroupStatusCode(val isoCode: String, val
description: String) {
+ ACCC("AcceptedSettlementCompletedCreditorAccount", "Settlement on the
creditor's account has been completed."),
+ ACCP("AcceptedCustomerProfile", "Preceding check of technical
validation was successful. Customer profile check was also successful."),
+ ACSC("AcceptedSettlementCompletedDebitorAccount", "Settlement on the
debtor's account has been completed."),
+ ACSP("AcceptedSettlementInProcess", "All preceding checks such as
technical validation and customer profile were successful and therefore the
payment initiation has been accepted for execution."),
+ ACTC("AcceptedTechnicalValidation", "Authentication and syntactical and
semantical validation are successful"),
+ ACWC("AcceptedWithChange", "Instruction is accepted but a change will
be made, such as date or remittance not sent."),
+ PART("PartiallyAccepted", "A number of transactions have been accepted,
whereas another number of transactions have not yet achieved"),
+ PDNG("Pending", "Payment initiation or individual transaction included
in the payment initiation is pending. Further checks and status update will be
performed."),
+ RCVD("Received", "Payment initiation has been received by the receiving
agent"),
+ RJCT("Rejected", "Payment initiation or individual transaction included
in the payment initiation has been rejected."),
+}
diff --git a/util/src/main/resources/xsd/pain.002.001.13.xsd
b/util/src/main/resources/xsd/pain.002.001.13.xsd
new file mode 100644
index 00000000..01d18ba4
--- /dev/null
+++ b/util/src/main/resources/xsd/pain.002.001.13.xsd
@@ -0,0 +1,1253 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Generated by Standards Editor (build:R1.6.22) on 2023 Feb 09 10:24:15, ISO
20022 version : 2013-->
+<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:pain.002.001.13"
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
targetNamespace="urn:iso:std:iso:20022:tech:xsd:pain.002.001.13">
+ <xs:element name="Document" type="Document"/>
+ <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="AccountSchemeName1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalAccountIdentification1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="ActiveCurrencyAndAmount_SimpleType">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="5"/>
+ <xs:totalDigits value="18"/>
+ <xs:minInclusive value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ActiveCurrencyAndAmount">
+ <xs:simpleContent>
+ <xs:extension base="ActiveCurrencyAndAmount_SimpleType">
+ <xs:attribute name="Ccy" type="ActiveCurrencyCode"
use="required"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ <xs:simpleType name="ActiveCurrencyCode">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z]{3,3}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ActiveOrHistoricCurrencyAndAmount_SimpleType">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="5"/>
+ <xs:totalDigits value="18"/>
+ <xs:minInclusive value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <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="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="PBOX"/>
+ <xs:enumeration value="HOME"/>
+ <xs:enumeration value="BIZZ"/>
+ <xs:enumeration value="MLTO"/>
+ <xs:enumeration value="DLVY"/>
+ </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="AmendmentInformationDetails14">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlMndtId"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlCdtrSchmeId"
type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlCdtrAgt"
type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlCdtrAgtAcct"
type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlDbtr"
type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlDbtrAcct"
type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlDbtrAgt"
type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlDbtrAgtAcct"
type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlFnlColltnDt"
type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlFrqcy"
type="Frequency36Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlRsn"
type="MandateSetupReason1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlTrckgDays"
type="Exact2NumericText"/>
+ </xs:sequence>
+ </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: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:simpleType name="BaseOneRate">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="10"/>
+ <xs:totalDigits value="11"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="BranchAndFinancialInstitutionIdentification6">
+ <xs:sequence>
+ <xs:element name="FinInstnId"
type="FinancialInstitutionIdentification18"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="BrnchId"
type="BranchData3"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="BranchData3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Id"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="LEI"
type="LEIIdentifier"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nm"
type="Max140Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PstlAdr"
type="PostalAddress24"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CashAccount40">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Id"
type="AccountIdentification4Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp"
type="CashAccountType2Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Ccy"
type="ActiveOrHistoricCurrencyCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nm"
type="Max70Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Prxy"
type="ProxyAccountIdentification1"/>
+ </xs:sequence>
+ </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:simpleType name="ChargeBearerType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="DEBT"/>
+ <xs:enumeration value="CRED"/>
+ <xs:enumeration value="SHAR"/>
+ <xs:enumeration value="SLEV"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ChargeType3Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalChargeType1Code"/>
+ <xs:element name="Prtry" type="GenericIdentification3"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="Charges12">
+ <xs:sequence>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="Agt"
type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp"
type="ChargeType3Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="ClearingChannel2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="RTGS"/>
+ <xs:enumeration value="RTNS"/>
+ <xs:enumeration value="MPNS"/>
+ <xs:enumeration value="BOOK"/>
+ </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="ClearingSystemIdentification3Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalCashClearingSystem1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="ClearingSystemMemberIdentification2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="ClrSysId"
type="ClearingSystemIdentification2Choice"/>
+ <xs:element name="MmbId" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Contact4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NmPrfx"
type="NamePrefix2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nm"
type="Max140Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PhneNb"
type="PhoneNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MobNb"
type="PhoneNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FaxNb"
type="PhoneNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="EmailAdr"
type="Max2048Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="EmailPurp"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="JobTitl"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rspnsblty"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Dept"
type="Max70Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Othr"
type="OtherContact1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PrefrdMtd"
type="PreferredContactMethod1Code"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="CountryCode">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z]{2,2}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="CreditDebitCode">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CRDT"/>
+ <xs:enumeration value="DBIT"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CreditTransferMandateData1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="MndtId"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp"
type="MandateTypeInformation2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DtOfSgntr"
type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DtOfVrfctn"
type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ElctrncSgntr"
type="Max10KBinary"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrstPmtDt"
type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FnlPmtDt"
type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Frqcy"
type="Frequency36Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn"
type="MandateSetupReason1Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CreditorReferenceInformation2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp"
type="CreditorReferenceType2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Ref"
type="Max35Text"/>
+ </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 maxOccurs="1" minOccurs="0" name="Issr"
type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CurrencyExchange13">
+ <xs:sequence>
+ <xs:element name="SrcCcy" type="ActiveCurrencyCode"/>
+ <xs:element name="TrgtCcy" type="ActiveCurrencyCode"/>
+ <xs:element name="XchgRate" type="BaseOneRate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UnitCcy"
type="ActiveCurrencyCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CustomerPaymentStatusReportV13">
+ <xs:sequence>
+ <xs:element name="GrpHdr" type="GroupHeader86"/>
+ <xs:element name="OrgnlGrpInfAndSts" type="OriginalGroupHeader17"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0"
name="OrgnlPmtInfAndSts" type="OriginalPaymentInstruction45"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="SplmtryData"
type="SupplementaryData1"/>
+ </xs:sequence>
+ </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 maxOccurs="1" minOccurs="0" name="PrvcOfBirth"
type="Max35Text"/>
+ <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:fractionDigits value="17"/>
+ <xs:totalDigits value="18"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="DiscountAmountAndType1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp"
type="DiscountAmountType1Choice"/>
+ <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="CstmrPmtStsRpt"
type="CustomerPaymentStatusReportV13"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DocumentAdjustment1">
+ <xs:sequence>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtDbtInd"
type="CreditDebitCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn"
type="Max4Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlInf"
type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DocumentLineIdentification1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp"
type="DocumentLineType1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nb"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdDt"
type="ISODate"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DocumentLineInformation1">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="Id"
type="DocumentLineIdentification1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Desc"
type="Max2048Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Amt"
type="RemittanceAmount3"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DocumentLineType1">
+ <xs:sequence>
+ <xs:element name="CdOrPrtry" type="DocumentLineType1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr"
type="Max35Text"/>
+ </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="RADM"/>
+ <xs:enumeration value="RPIN"/>
+ <xs:enumeration value="FXDR"/>
+ <xs:enumeration value="DISP"/>
+ <xs:enumeration value="PUOR"/>
+ <xs:enumeration value="SCOR"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="DocumentType6Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MSIN"/>
+ <xs:enumeration value="CNFA"/>
+ <xs:enumeration value="DNFA"/>
+ <xs:enumeration value="CINV"/>
+ <xs:enumeration value="CREN"/>
+ <xs:enumeration value="DEBN"/>
+ <xs:enumeration value="HIRI"/>
+ <xs:enumeration value="SBIN"/>
+ <xs:enumeration value="CMCN"/>
+ <xs:enumeration value="SOAC"/>
+ <xs:enumeration value="DISP"/>
+ <xs:enumeration value="BOLD"/>
+ <xs:enumeration value="VCHR"/>
+ <xs:enumeration value="AROI"/>
+ <xs:enumeration value="TSUT"/>
+ <xs:enumeration value="PUOR"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <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="Exact2NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{2}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Exact4AlphaNumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[a-zA-Z0-9]{4}"/>
+ </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="ExternalCashClearingSystem1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="3"/>
+ </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="ExternalChargeType1Code">
+ <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="ExternalMandateSetupReason1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </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="ExternalPaymentGroupStatus1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalPaymentTransactionStatus1Code">
+ <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="ExternalStatusReason1Code">
+ <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 maxOccurs="1" minOccurs="0" name="BICFI"
type="BICFIDec2014Identifier"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ClrSysMmbId"
type="ClearingSystemMemberIdentification2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="LEI"
type="LEIIdentifier"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nm"
type="Max140Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PstlAdr"
type="PostalAddress24"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Othr"
type="GenericFinancialIdentification1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Frequency36Choice">
+ <xs:choice>
+ <xs:element name="Tp" type="Frequency6Code"/>
+ <xs:element name="Prd" type="FrequencyPeriod1"/>
+ <xs:element name="PtInTm" type="FrequencyAndMoment1"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="Frequency6Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="YEAR"/>
+ <xs:enumeration value="MNTH"/>
+ <xs:enumeration value="QURT"/>
+ <xs:enumeration value="MIAN"/>
+ <xs:enumeration value="WEEK"/>
+ <xs:enumeration value="DAIL"/>
+ <xs:enumeration value="ADHO"/>
+ <xs:enumeration value="INDA"/>
+ <xs:enumeration value="FRTN"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="FrequencyAndMoment1">
+ <xs:sequence>
+ <xs:element name="Tp" type="Frequency6Code"/>
+ <xs:element name="PtInTm" type="Exact2NumericText"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="FrequencyPeriod1">
+ <xs:sequence>
+ <xs:element name="Tp" type="Frequency6Code"/>
+ <xs:element name="CntPerPrd" type="DecimalNumber"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Garnishment3">
+ <xs:sequence>
+ <xs:element name="Tp" type="GarnishmentType1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Grnshee"
type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="GrnshmtAdmstr"
type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RefNb"
type="Max140Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Dt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtdAmt"
type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FmlyMdclInsrncInd"
type="TrueFalseIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MplyeeTermntnInd"
type="TrueFalseIndicator"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GarnishmentType1">
+ <xs:sequence>
+ <xs:element name="CdOrPrtry" type="GarnishmentType1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr"
type="Max35Text"/>
+ </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 maxOccurs="1" minOccurs="0" name="SchmeNm"
type="AccountSchemeName1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr"
type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GenericFinancialIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SchmeNm"
type="FinancialIdentificationSchemeName1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr"
type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GenericIdentification3">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr"
type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GenericIdentification30">
+ <xs:sequence>
+ <xs:element name="Id" type="Exact4AlphaNumericText"/>
+ <xs:element name="Issr" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SchmeNm"
type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GenericOrganisationIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SchmeNm"
type="OrganisationIdentificationSchemeName1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr"
type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GenericPersonIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SchmeNm"
type="PersonIdentificationSchemeName1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr"
type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GroupHeader86">
+ <xs:sequence>
+ <xs:element name="MsgId" type="Max35Text"/>
+ <xs:element name="CreDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InitgPty"
type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FwdgAgt"
type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtrAgt"
type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrAgt"
type="BranchAndFinancialInstitutionIdentification6"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="IBAN2007Identifier">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z]{2,2}[0-9]{2,2}[a-zA-Z0-9]{1,30}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ISODate">
+ <xs:restriction base="xs:date"/>
+ </xs:simpleType>
+ <xs:simpleType name="ISODateTime">
+ <xs:restriction base="xs:dateTime"/>
+ </xs:simpleType>
+ <xs:simpleType name="ISOYear">
+ <xs:restriction base="xs:gYear"/>
+ </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:complexType name="MandateClassification1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="MandateClassification1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="MandateClassification1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="FIXE"/>
+ <xs:enumeration value="USGB"/>
+ <xs:enumeration value="VARI"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="MandateRelatedData2Choice">
+ <xs:choice>
+ <xs:element maxOccurs="1" minOccurs="0" name="DrctDbtMndt"
type="MandateRelatedInformation15"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtTrfMndt"
type="CreditTransferMandateData1"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="MandateRelatedInformation15">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="MndtId"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DtOfSgntr"
type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AmdmntInd"
type="TrueFalseIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AmdmntInfDtls"
type="AmendmentInformationDetails14"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ElctrncSgntr"
type="Max1025Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrstColltnDt"
type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FnlColltnDt"
type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Frqcy"
type="Frequency36Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn"
type="MandateSetupReason1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TrckgDays"
type="Exact2NumericText"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="MandateSetupReason1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalMandateSetupReason1Code"/>
+ <xs:element name="Prtry" type="Max70Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="MandateTypeInformation2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="SvcLvl"
type="ServiceLevel8Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="LclInstrm"
type="LocalInstrument2Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtgyPurp"
type="CategoryPurpose1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Clssfctn"
type="MandateClassification1Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="Max1025Text">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="1025"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max105Text">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="105"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max10KBinary">
+ <xs:restriction base="xs:base64Binary">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="10240"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max128Text">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="128"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max140Text">
+ <xs:restriction base="xs:string">
+ <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="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="16"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max2048Text">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="2048"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max34Text">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="34"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max350Text">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="350"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max35Text">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="35"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs: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="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="70"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="NamePrefix2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="DOCT"/>
+ <xs:enumeration value="MADM"/>
+ <xs:enumeration value="MISS"/>
+ <xs:enumeration value="MIST"/>
+ <xs:enumeration value="MIKS"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Number">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="0"/>
+ <xs:totalDigits value="18"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="NumberOfTransactionsPerStatus5">
+ <xs:sequence>
+ <xs:element name="DtldNbOfTxs" type="Max15NumericText"/>
+ <xs:element name="DtldSts"
type="ExternalPaymentTransactionStatus1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DtldCtrlSum"
type="DecimalNumber"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="OrganisationIdentification29">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="AnyBIC"
type="AnyBICDec2014Identifier"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="LEI"
type="LEIIdentifier"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Othr"
type="GenericOrganisationIdentification1"/>
+ </xs:sequence>
+ </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="OriginalGroupHeader17">
+ <xs:sequence>
+ <xs:element name="OrgnlMsgId" type="Max35Text"/>
+ <xs:element name="OrgnlMsgNmId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlCreDtTm"
type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlNbOfTxs"
type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlCtrlSum"
type="DecimalNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="GrpSts"
type="ExternalPaymentGroupStatus1Code"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="StsRsnInf"
type="StatusReasonInformation12"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0"
name="NbOfTxsPerSts" type="NumberOfTransactionsPerStatus5"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="OriginalPaymentInstruction45">
+ <xs:sequence>
+ <xs:element name="OrgnlPmtInfId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlNbOfTxs"
type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlCtrlSum"
type="DecimalNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtInfSts"
type="ExternalPaymentGroupStatus1Code"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="StsRsnInf"
type="StatusReasonInformation12"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0"
name="NbOfTxsPerSts" type="NumberOfTransactionsPerStatus5"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="TxInfAndSts"
type="PaymentTransaction144"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="OriginalTransactionReference35">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrBkSttlmAmt"
type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Amt"
type="AmountType4Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrBkSttlmDt"
type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ReqdColltnDt"
type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ReqdExctnDt"
type="DateAndDateTime2Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrSchmeId"
type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SttlmInf"
type="SettlementInstruction11"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtTpInf"
type="PaymentTypeInformation27"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtMtd"
type="PaymentMethod4Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MndtRltdInf"
type="MandateRelatedData2Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtInf"
type="RemittanceInformation21"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UltmtDbtr"
type="Party40Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Dbtr"
type="Party40Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtrAcct"
type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtrAgt"
type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtrAgtAcct"
type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrAgt"
type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrAgtAcct"
type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Cdtr"
type="Party40Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrAcct"
type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UltmtCdtr"
type="Party40Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Purp"
type="Purpose2Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="OtherContact1">
+ <xs:sequence>
+ <xs:element name="ChanlTp" type="Max4Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Id"
type="Max128Text"/>
+ </xs:sequence>
+ </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="Party40Choice">
+ <xs:choice>
+ <xs:element name="Pty" type="PartyIdentification135"/>
+ <xs:element name="Agt"
type="BranchAndFinancialInstitutionIdentification6"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="PartyIdentification135">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nm"
type="Max140Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PstlAdr"
type="PostalAddress24"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Id"
type="Party38Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtryOfRes"
type="CountryCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtctDtls"
type="Contact4"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="PaymentMethod4Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CHK"/>
+ <xs:enumeration value="TRF"/>
+ <xs:enumeration value="DD"/>
+ <xs:enumeration value="TRA"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="PaymentTransaction144">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="StsId"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlInstrId"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlEndToEndId"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlUETR"
type="UUIDv4Identifier"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxSts"
type="ExternalPaymentTransactionStatus1Code"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="StsRsnInf"
type="StatusReasonInformation12"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="ChrgsInf"
type="Charges12"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TrckrData"
type="TrackerData1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AccptncDtTm"
type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AcctSvcrRef"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ClrSysRef"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlTxRef"
type="OriginalTransactionReference35"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="SplmtryData"
type="SupplementaryData1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PaymentTypeInformation27">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstrPrty"
type="Priority2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ClrChanl"
type="ClearingChannel2Code"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="SvcLvl"
type="ServiceLevel8Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="LclInstrm"
type="LocalInstrument2Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SeqTp"
type="SequenceType3Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtgyPurp"
type="CategoryPurpose1Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="PercentageRate">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="10"/>
+ <xs:totalDigits value="11"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="PersonIdentification13">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="DtAndPlcOfBirth"
type="DateAndPlaceOfBirth1"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Othr"
type="GenericPersonIdentification1"/>
+ </xs:sequence>
+ </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 maxOccurs="1" minOccurs="0" name="AdrTp"
type="AddressType3Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Dept"
type="Max70Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SubDept"
type="Max70Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="StrtNm"
type="Max70Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="BldgNb"
type="Max16Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="BldgNm"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Flr"
type="Max70Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PstBx"
type="Max16Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Room"
type="Max70Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PstCd"
type="Max16Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TwnNm"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TwnLctnNm"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DstrctNm"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtrySubDvsn"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Ctry"
type="CountryCode"/>
+ <xs:element maxOccurs="7" minOccurs="0" name="AdrLine"
type="Max70Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="PreferredContactMethod1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="LETT"/>
+ <xs:enumeration value="MAIL"/>
+ <xs:enumeration value="PHON"/>
+ <xs:enumeration value="FAXX"/>
+ <xs:enumeration value="CELL"/>
+ </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 maxOccurs="1" minOccurs="0" name="Tp"
type="ProxyAccountType1Choice"/>
+ <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="ReferredDocumentInformation7">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp"
type="ReferredDocumentType4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nb"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdDt"
type="ISODate"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="LineDtls"
type="DocumentLineInformation1"/>
+ </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 maxOccurs="1" minOccurs="0" name="Issr"
type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RemittanceAmount2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="DuePyblAmt"
type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0"
name="DscntApldAmt" type="DiscountAmountAndType1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtNoteAmt"
type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="TaxAmt"
type="TaxAmountAndType1"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0"
name="AdjstmntAmtAndRsn" type="DocumentAdjustment1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtdAmt"
type="ActiveOrHistoricCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RemittanceAmount3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="DuePyblAmt"
type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0"
name="DscntApldAmt" type="DiscountAmountAndType1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtNoteAmt"
type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="TaxAmt"
type="TaxAmountAndType1"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0"
name="AdjstmntAmtAndRsn" type="DocumentAdjustment1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtdAmt"
type="ActiveOrHistoricCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RemittanceInformation21">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Ustrd"
type="Max140Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Strd"
type="StructuredRemittanceInformation17"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="SequenceType3Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="FRST"/>
+ <xs:enumeration value="RCUR"/>
+ <xs:enumeration value="FNAL"/>
+ <xs:enumeration value="OOFF"/>
+ <xs:enumeration value="RPRE"/>
+ </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:complexType name="SettlementInstruction11">
+ <xs:sequence>
+ <xs:element name="SttlmMtd" type="SettlementMethod1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SttlmAcct"
type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ClrSys"
type="ClearingSystemIdentification3Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstgRmbrsmntAgt"
type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0"
name="InstgRmbrsmntAgtAcct" type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstdRmbrsmntAgt"
type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0"
name="InstdRmbrsmntAgtAcct" type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ThrdRmbrsmntAgt"
type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ThrdRmbrsmntAgtAcct"
type="CashAccount40"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="SettlementMethod1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="INDA"/>
+ <xs:enumeration value="INGA"/>
+ <xs:enumeration value="COVE"/>
+ <xs:enumeration value="CLRG"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="StatusReason6Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalStatusReason1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="StatusReasonInformation12">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Orgtr"
type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn"
type="StatusReason6Choice"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="AddtlInf"
type="Max105Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="StructuredRemittanceInformation17">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="RfrdDocInf"
type="ReferredDocumentInformation7"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RfrdDocAmt"
type="RemittanceAmount2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrRefInf"
type="CreditorReferenceInformation2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Invcr"
type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Invcee"
type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TaxRmt"
type="TaxData1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="GrnshmtRmt"
type="Garnishment3"/>
+ <xs:element maxOccurs="3" minOccurs="0" name="AddtlRmtInf"
type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="SupplementaryData1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="PlcAndNm"
type="Max350Text"/>
+ <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="TaxAmount3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rate"
type="PercentageRate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TaxblBaseAmt"
type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlAmt"
type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Dtls"
type="TaxRecordDetails3"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxAmountAndType1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp"
type="TaxAmountType1Choice"/>
+ <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 maxOccurs="1" minOccurs="0" name="Titl"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nm"
type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxData1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Cdtr"
type="TaxParty1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Dbtr"
type="TaxParty2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UltmtDbtr"
type="TaxParty2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AdmstnZone"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RefNb"
type="Max140Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Mtd"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlTaxblBaseAmt"
type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlTaxAmt"
type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Dt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SeqNb"
type="Number"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Rcrd"
type="TaxRecord3"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxParty1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TaxId"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RegnId"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TaxTp"
type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxParty2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TaxId"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RegnId"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TaxTp"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Authstn"
type="TaxAuthorisation1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxPeriod3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Yr" type="ISOYear"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp"
type="TaxRecordPeriod1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrToDt"
type="DatePeriod2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxRecord3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Ctgy"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtgyDtls"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtrSts"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CertId"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrmsCd"
type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Prd"
type="TaxPeriod3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TaxAmt"
type="TaxAmount3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlInf"
type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxRecordDetails3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Prd"
type="TaxPeriod3"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="TaxRecordPeriod1Code">
+ <xs:restriction base="xs:string">
+ <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:enumeration value="HLF1"/>
+ <xs:enumeration value="HLF2"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="TrackerData1">
+ <xs:sequence>
+ <xs:element name="ConfdDt" type="DateAndDateTime2Choice"/>
+ <xs:element name="ConfdAmt" type="ActiveCurrencyAndAmount"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="TrckrRcrd"
type="TrackerRecord1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TrackerRecord1">
+ <xs:sequence>
+ <xs:element name="Agt"
type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChrgBr"
type="ChargeBearerType1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChrgsAmt"
type="ActiveCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="XchgRateData"
type="CurrencyExchange13"/>
+ </xs:sequence>
+ </xs:complexType>
+ <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>
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [libeufin] branch master updated (460a80b9 -> 11d3a68b),
gnunet <=