summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine A <>2024-01-26 03:51:27 +0100
committerAntoine A <>2024-01-28 12:37:11 +0100
commitf78ce3e453371fe74bc2cc3d6bcd1abd58aeed56 (patch)
tree2cd0f80029a19c91b2a86ea7e91675d7141f2056
parent3975f316c5c1b2010a3dd0047225091f0919a660 (diff)
downloadlibeufin-codegen.tar.gz
libeufin-codegen.tar.bz2
libeufin-codegen.zip
Generate ISO20022 types and parsercodegen
-rw-r--r--Makefile4
-rw-r--r--codegen/codegen.py76
-rw-r--r--codegen/codeset.py88
-rw-r--r--codegen/schema.py171
-rw-r--r--codegen/xsd.py407
-rw-r--r--ebics/build.gradle3
-rw-r--r--ebics/import.py66
-rw-r--r--ebics/src/main/kotlin/EbicsCodeSets.kt309
-rw-r--r--ebics/src/main/kotlin/XmlCombinators.kt80
-rw-r--r--ebics/src/main/kotlin/iso20022/camt_054_001_04.kt1329
-rw-r--r--ebics/src/main/kotlin/iso20022/camt_054_001_08.kt1217
-rw-r--r--ebics/src/main/kotlin/iso20022/codesets.kt1355
-rw-r--r--ebics/src/main/kotlin/iso20022/common.kt2261
-rw-r--r--ebics/src/main/kotlin/iso20022/pain_001_001_11.kt490
-rw-r--r--ebics/src/main/kotlin/iso20022/pain_002_001_13.kt480
-rw-r--r--ebics/src/main/kotlin/iso20022/utils.kt32
-rw-r--r--ebics/src/main/resources/xsd/camt.052.001.02.xsd1299
-rw-r--r--ebics/src/main/resources/xsd/camt.053.001.02.xsd1299
-rw-r--r--ebics/src/main/resources/xsd/camt.054.001.02.xsd1240
-rw-r--r--ebics/src/main/resources/xsd/camt.054.001.04.xsd1709
-rw-r--r--ebics/src/main/resources/xsd/camt.054.001.08.xsd2009
-rw-r--r--ebics/src/main/resources/xsd/camt.054.001.11.xsd2078
-rw-r--r--ebics/src/main/resources/xsd/pain.001.001.11.xsd1244
-rw-r--r--ebics/src/test/kotlin/Iso20022Test.kt43
-rw-r--r--ebics/src/test/sample/200519_camt054-Credit_P_CH2909000000250094239_1110092691_0_2019042421291293.xml65
-rw-r--r--ebics/src/test/sample/200519_camt054-Debit_P_CH2909000000250094239_1110092692_0_2019042401501580.xml68
-rw-r--r--nexus/build.gradle3
-rw-r--r--nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt406
-rw-r--r--testbench/build.gradle3
-rw-r--r--testbench/src/main/kotlin/Main.kt2
-rw-r--r--testbench/src/test/kotlin/ParsingTest.kt76
31 files changed, 15424 insertions, 4488 deletions
diff --git a/Makefile b/Makefile
index 9a63ae7e..d0665d94 100644
--- a/Makefile
+++ b/Makefile
@@ -110,6 +110,10 @@ bank-test: install-nobuild-bank-files
nexus-test: install-nobuild-nexus-files
./gradlew :nexus:test --tests $(test) -i
+.PHONY: ebics-test
+ebics-test:
+ ./gradlew :ebics:test --tests $(test) -i
+
.PHONY: testbench-test
testbench-test: install-nobuild-bank-files install-nobuild-nexus-files
./gradlew :testbench:test --tests $(test) -i
diff --git a/codegen/codegen.py b/codegen/codegen.py
new file mode 100644
index 00000000..d8b2fe4b
--- /dev/null
+++ b/codegen/codegen.py
@@ -0,0 +1,76 @@
+"""Generate code to parse ISO 20022 messages"""
+
+import xsd
+import codeset
+
+ktBase = """/*
+ * This file is part of LibEuFin.
+ * 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
+ * published by the Free Software Foundation; either version 3, or
+ * (at your option) any later version.
+
+ * LibEuFin is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+ * Public License for more details.
+
+ * You should have received a copy of the GNU Affero General Public
+ * License along with LibEuFin; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>
+ */
+
+// THIS FILE IS GENERATED, DO NOT EDIT
+
+package tech.libeufin.ebics.iso20022
+
+"""
+
+codesets = codeset.extract()
+
+schemas = ["pain.001.001.11", "pain.002.001.13", "camt.054.001.08", "camt.054.001.04"]
+# Parse each schema
+parsed = [xsd.parse(name) for name in schemas]
+
+# Replace codeset with appropriate types
+usedCodeset = {}
+def replaceCodeset(ty: xsd.Type) -> xsd.Type:
+ if isinstance(ty, xsd.Primitive):
+ set = codesets.get(ty.name, None)
+ if set is not None:
+ usedCodeset[ty.name] = set
+ return xsd.Enumeration(ty.name, None)
+ return ty
+parsed = [{name:replaceCodeset(ty) for name, ty in found.items()} for found in parsed]
+
+# Find commons types and check similarly named types are equals
+types = {}
+common = {}
+for found in parsed:
+ for ty in found.values():
+ prev = types.get(ty.name, None)
+ if prev is not None:
+ if prev == ty:
+ common[ty.name] = ty
+ else:
+ print(f"Schema clash: {prev} != {ty}")
+ else:
+ types[ty.name] = ty
+
+
+# Gen code for used code sets
+with open("ebics/src/main/kotlin/iso20022/codesets.kt", "w") as f:
+ f.write(ktBase + codeset.codegen(list(usedCodeset.values())))
+
+# Keep only types unique to each schema
+unique = [
+ [value for name, value in types.items() if name not in common] for types in parsed
+]
+with open("ebics/src/main/kotlin/iso20022/common.kt", "w") as f:
+ f.write(ktBase + xsd.codegen(list(common.values()), types))
+for schema, inner in zip(schemas, unique):
+ name = schema.replace(".", "_")
+ with open(f"ebics/src/main/kotlin/iso20022/{name}.kt", "w") as f:
+ f.write(ktBase + xsd.codegen(inner, types))
diff --git a/codegen/codeset.py b/codegen/codeset.py
new file mode 100644
index 00000000..03f8a343
--- /dev/null
+++ b/codegen/codeset.py
@@ -0,0 +1,88 @@
+"""Extract and generate Kotlin code for ISO 20022 code sets"""
+
+from dataclasses import dataclass
+import requests
+from zipfile import ZipFile
+from io import BytesIO
+import polars as pl
+
+
+@dataclass
+class Code:
+ """ISO 20022 code"""
+
+ value: str
+ isoCode: str
+ description: str
+
+
+@dataclass
+class CodeSet:
+ """ISO 20022 code set"""
+
+ name: str
+ values: list[Code]
+ description: str
+
+
+def extract() -> dict[str, CodeSet]:
+ """Extract latest code set from specification"""
+ # Get XLSX zip file from server
+ r = requests.get(
+ "https://www.iso20022.org/sites/default/files/media/file/ExternalCodeSets_XLSX.zip"
+ )
+ assert r.status_code == 200
+
+ # Unzip the XLSX file
+ zip = ZipFile(BytesIO(r.content))
+ files = zip.namelist()
+ assert len(files) == 1
+ file = zip.open(files[0])
+
+ # Parse excel
+ descriptions = {
+ k: v
+ for k, v in pl.read_excel(file, sheet_name="CodeSetsDefinition")
+ .select(["Code Set", "Code Set Definition"])
+ .rows()
+ }
+ codes = (
+ pl.read_excel(file, sheet_name="AllCodeSets")
+ .lazy()
+ .filter(pl.col("Status") != "Obsolete")
+ .sort(["Code Set", "Code Value"])
+ .collect()
+ )
+ sets = {}
+ for name, codes in codes.partition_by("Code Set", as_dict=True).items():
+ description = descriptions[name].split("\n", 1)[0].rstrip("_x000D_").strip(".")
+ values = []
+
+ for row in codes.rows(named=True):
+ (value, isoCode, definition) = (
+ row["Code Value"],
+ row["Code Name"],
+ row["Code Definition"].split("\n", 1)[0].rstrip().replace('"', '\\"'),
+ )
+ # ISO 20022 allow code value starting with digits which is incompatible with Java
+ if value[0].isdigit():
+ value = f"_{value}"
+ values.append(Code(value, isoCode, definition))
+
+ sets[name] = CodeSet(name, values, description)
+
+ return sets
+
+
+def codegen(sets: list[CodeSet]) -> str:
+ """Generate kotlin code for the code sets"""
+ kt = ""
+ for set in sets:
+ kt += f"\n/** {set.description} */"
+ kt += (
+ f"\nenum class {set.name}(val isoCode: String, val description: String) {{"
+ )
+ for code in set.values:
+ kt += f'\n\t{code.value}("{code.isoCode}", "{code.description}"),'
+ kt += "\n}\n"
+ return kt
diff --git a/codegen/schema.py b/codegen/schema.py
new file mode 100644
index 00000000..6943e59c
--- /dev/null
+++ b/codegen/schema.py
@@ -0,0 +1,171 @@
+"""Manipulate ISO 20022 schemas"""
+
+import dataclasses
+from dataclasses import dataclass
+import xsd
+
+
+@dataclass
+class Primitive:
+ type: xsd.Kind
+ restriction: dict[str, str]
+
+
+@dataclass
+class Enumeration:
+ values: list[str] | None
+
+
+@dataclass
+class Attribute:
+ type: Primitive | Enumeration
+ required: bool
+
+
+@dataclass
+class Simple:
+ type: Primitive | Enumeration
+ attributes: dict[str, Attribute]
+
+
+@dataclass
+class Property:
+ type: "Type"
+ min: int
+ max: int
+
+
+@dataclass
+class Sequence:
+ properties: dict[str, Property]
+
+
+@dataclass
+class Choice:
+ choices: dict[str, Property]
+
+
+@dataclass
+class Any:
+ pass
+
+
+Type = Primitive | Simple | Enumeration | Sequence | Choice | Any
+
+
+def _json_attribute(attr: Attribute, name: str):
+ if not attr.required:
+ name = f"{name}?"
+
+ return _json(attr.type, name)
+
+
+def _json_property(property: Property, name: str):
+ if property.max != 1:
+ name = f"{name}[{property.min}:{property.max}]"
+ elif property.min == 0:
+ name = f"{name}?"
+
+ return _json(property.type, name)
+
+
+def _json(ty: Type, name: str):
+ """Generate a json object from any type"""
+ if isinstance(ty, Primitive):
+ return (name, dataclasses.asdict(ty))
+ elif isinstance(ty, Simple):
+ (name, type) = _json(ty.type, name)
+ return (
+ name,
+ {
+ "type": type,
+ "attribute": {
+ k: v
+ for k, v in [
+ _json_attribute(attr, name)
+ for name, attr in ty.attributes.items()
+ ]
+ },
+ },
+ )
+ elif isinstance(ty, Enumeration):
+ return (name, ty.values)
+ elif isinstance(ty, Sequence):
+ return (
+ name,
+ {
+ k: v
+ for k, v in [
+ _json_property(property, name)
+ for name, property in ty.properties.items()
+ ]
+ },
+ )
+ elif isinstance(ty, Choice):
+ return (
+ name,
+ {
+ k: v
+ for k, v in [
+ _json_property(property, name)
+ for name, property in ty.choices.items()
+ ]
+ },
+ )
+ elif isinstance(ty, Any):
+ return (name, "any")
+ else:
+ raise Exception(f"unexpected type {ty}")
+
+
+def _build(ty: xsd.Type, types: dict[str, xsd.Type]) -> Type:
+ def _inner_simple(name: str) -> Primitive | Enumeration:
+ inner = types[name]
+ assert isinstance(inner, xsd.Primitive | xsd.Enumeration), f"{ty}"
+ built = _build(inner, types)
+ assert isinstance(built, Primitive | Enumeration)
+ return built
+
+ def _inner(name: str) -> Type:
+ return _build(types[name], types)
+
+ if isinstance(ty, xsd.Primitive):
+ return Primitive(ty.type, ty.restriction)
+ elif isinstance(ty, xsd.Simple):
+ return Simple(
+ _inner_simple(ty.type),
+ {
+ attr.name: Attribute(_inner_simple(attr.type), attr.required)
+ for attr in ty.attributes
+ },
+ )
+ elif isinstance(ty, xsd.Enumeration):
+ return Enumeration(ty.values)
+ elif isinstance(ty, xsd.Sequence):
+ return Sequence(
+ {
+ property.name: Property(
+ _inner(property.type), property.min, property.max
+ )
+ for property in ty.properties
+ }
+ )
+ elif isinstance(ty, xsd.Choice):
+ return Choice(
+ {
+ choice.name: Property(_inner(choice.type), choice.min, choice.max)
+ for choice in ty.choices
+ }
+ )
+ elif isinstance(ty, xsd.Any):
+ return Any()
+ else:
+ raise Exception(f"unexpected type {ty}")
+
+
+def build(schema: str, types: dict[str, xsd.Type]) -> Sequence:
+ """Build a schema tree from a parsed XML schema"""
+ root = types[schema.replace(".", "_")]
+ root = _build(root, types)
+ assert isinstance(root, Sequence)
+ return root
diff --git a/codegen/xsd.py b/codegen/xsd.py
new file mode 100644
index 00000000..0ba906bd
--- /dev/null
+++ b/codegen/xsd.py
@@ -0,0 +1,407 @@
+"""Parse ISO 20022 XMS Schema"""
+
+from dataclasses import dataclass
+from enum import Enum
+import xml.etree.ElementTree as ET
+from typing import Union
+
+
+class Kind(str, Enum):
+ string = "xs:string"
+ boolean = "xs:boolean"
+ decimal = "xs:decimal"
+ datetime = "xs:datetime"
+ date = "xs:date"
+ gyear = "xs:gYear"
+ gyearmonth = "xs:gYearMonth"
+ base64Binary = "xs:base64Binary"
+
+
+@dataclass
+class Primitive:
+ name: str
+ type: Kind
+ restriction: dict[str, str]
+
+
+@dataclass
+class Enumeration:
+ name: str
+ values: list[str] | None # None if codeset
+
+
+@dataclass
+class Attribute:
+ name: str
+ type: str
+ required: bool
+
+
+@dataclass
+class Simple:
+ name: str
+ type: str
+ attributes: list[Attribute]
+
+
+@dataclass
+class Property:
+ name: str
+ type: str
+ min: int
+ max: int
+
+
+@dataclass
+class Sequence:
+ name: str
+ properties: list[Property]
+
+
+@dataclass
+class Choice:
+ name: str
+ choices: list[Property]
+ inline: bool
+
+
+@dataclass
+class Any:
+ name: str
+
+
+Type = Primitive | Simple | Enumeration | Sequence | Choice | Any
+
+xs = "{http://www.w3.org/2001/XMLSchema}"
+
+
+def _tag(el: ET.Element, tag: str) -> bool:
+ return el.tag == f"{xs}{tag}"
+
+
+def _attrib(el: ET.Element, *args: Union[str, tuple[str, Any | None]]) -> list[str]:
+ """Parse attributes and assert all element attributes have been consumed"""
+ attribs = []
+ for arg in args:
+ if isinstance(arg, str):
+ attribs.append(el.attrib.pop(arg))
+ else:
+ attribs.append(el.attrib.pop(arg[0], arg[1]))
+ assert not el.attrib, f"{el.attrib}"
+ return attribs
+
+
+def _single(el: ET.Element, tag: str | None = None) -> ET.Element:
+ """Assert element only contains one child"""
+ children = iter(el)
+ child = next(children)
+ assert next(children, None) is None, f"{el.tag}"
+ if tag is not None:
+ assert child.tag == f"{xs}{tag}", f"{child.tag} != {xs}{tag}"
+ return child
+
+
+def _simple(el: ET.Element) -> Primitive | Enumeration:
+ """Parse a simple XSD type"""
+ [name] = _attrib(el, "name")
+ el = _single(el, "restriction")
+ [base] = _attrib(el, "base")
+
+ match base:
+ case "xs:string":
+ type = Kind.string
+ case "xs:decimal":
+ type = Kind.decimal
+ case "xs:boolean":
+ type = Kind.boolean
+ case "xs:date":
+ type = Kind.date
+ case "xs:dateTime":
+ type = Kind.datetime
+ case "xs:base64Binary":
+ type = Kind.base64Binary
+ case "xs:gYear":
+ type = Kind.gyear
+ case "xs:gYearMonth":
+ type = Kind.gyearmonth
+ case _:
+ raise Exception(f"unsupported base {base}")
+
+ # Check if enum of simple
+ if len(el) > 0 and _tag(el[0], "enumeration"):
+
+ def value(enum) -> str:
+ assert _tag(enum, "enumeration")
+ return _attrib(enum, "value")[0]
+
+ values = [value(enum) for enum in el]
+ return Enumeration(name, values)
+ else:
+ restrictions = {
+ child.tag.lstrip(xs): _attrib(child, "value")[0] for child in el
+ }
+ return Primitive(name, type, restrictions)
+
+
+def _element(el: ET.Element) -> Property:
+ """Parse an XSD element"""
+ assert _tag(el, "element")
+ [name, type, min, max] = _attrib(
+ el, "name", "type", ("minOccurs", None), ("maxOccurs", None)
+ )
+ match min:
+ case None | "1":
+ min = 1
+ case "0":
+ min = 0
+ case _:
+ raise Exception(f"unsupported min {min}")
+ match max:
+ case None | "1":
+ max = 1
+ case "unbounded":
+ max = 0
+ case max if max.isdigit():
+ max = int(max)
+ case _:
+ raise Exception(f"unsupported max {max}")
+
+ return Property(name, type, min, max)
+
+
+def _attribute(el: ET.Element) -> Attribute:
+ """Parse an XSD attribute"""
+ assert _tag(el, "attribute")
+ [name, type, use] = _attrib(el, "name", "type", ("use", None))
+
+ match use:
+ case None:
+ required = False
+ case "required":
+ required = True
+ case _:
+ raise Exception(f"unsupported use {use}")
+
+ return Attribute(name, type, required)
+
+
+def _complex(el: ET.Element) -> Type:
+ [name] = _attrib(el, "name")
+ el = _single(el)
+ if _tag(el, "simpleContent"):
+ el = _single(el, "extension")
+ [base] = _attrib(el, "base")
+ attributes = [_attribute(child) for child in el]
+ return Simple(name, base, attributes)
+ elif _tag(el, "choice"):
+ _attrib(el)
+ choices = [_element(child) for child in el]
+ return Choice(name, choices, False)
+ elif _tag(el, "sequence"):
+ if len(el) == 1 and _tag(el[0], "any"):
+ return Any(name)
+ elif len(el) == 1 and _tag(el[0], "choice"):
+ el = _single(el, "choice")
+ _attrib(el)
+ choices = [_element(child) for child in el]
+ return Choice(name, choices, False)
+ else:
+ _attrib(el)
+ properties = [_element(child) for child in el]
+ return Sequence(name, properties)
+ else:
+ raise Exception(f"unsupported complex type {name}:{el.tag}")
+
+
+def parse(schema: str) -> dict[str, Type]:
+ tree = ET.parse(f"ebics/src/main/resources/xsd/{schema}.xsd")
+
+ # Parse types
+ root = tree.getroot()
+ assert _tag(root, "schema")
+ assert root.attrib["targetNamespace"] == f"urn:iso:std:iso:20022:tech:xsd:{schema}"
+ items = iter(root)
+ assert next(items).tag == f"{xs}element"
+ types: dict[str, Type] = {}
+ for type in items:
+ if _tag(type, "complexType"):
+ type = _complex(type)
+ elif _tag(type, "simpleType"):
+ type = _simple(type)
+ else:
+ raise Exception(f"unsupported type {type.tag}")
+ if type.name == "Document":
+ type.name = schema.replace(".", "_")
+ assert type.name not in types, f"{schema} {type.name}"
+ types[type.name] = type
+ return types
+
+
+def _codegen_attribute(ty: Type, name: str) -> str:
+ if isinstance(ty, Primitive):
+ match ty.type:
+ case Kind.string:
+ return f'.getValue("{name}")'
+ raise Exception(f"Unexpected attribute type {ty}")
+
+
+def _codegen_from_text(ty: Type) -> str:
+ if isinstance(ty, Primitive):
+ match ty.type:
+ case Kind.string:
+ action = ""
+ case Kind.decimal:
+ action = ".xmlFloat()"
+ case Kind.boolean:
+ action = ".xmlBoolean()"
+ case Kind.base64Binary:
+ action = ".xmlBase64Binary()"
+ case Kind.date:
+ action = ".toDate()"
+ case Kind.datetime:
+ action = ".toDateTime()"
+ case Kind.gyear:
+ action = ".toYear()"
+ case Kind.gyearmonth:
+ action = ".toYearMonth()"
+ return f"text(){action}"
+ elif isinstance(ty, Enumeration):
+ return (
+ f"{ty.name}.valueOf(text())"
+ if ty.values is not None
+ else f"text().xmlCodeSet<{ty.name}>()"
+ )
+ elif isinstance(ty, Any):
+ return "skipContents()"
+ else:
+ return f"{ty.name}.parse(this)"
+
+
+def _codegen_from_element(ty: Type, name: str, min: int, max: int) -> str:
+ if max != 1:
+ child = f'children("{name}"'
+ if min != 0:
+ child += f", minCount={min}, "
+ if max != 0:
+ child += f", maxCount={max}"
+ child += ")"
+ elif min == 0:
+ child = f'childOrNull("{name}")'
+ else:
+ child = f'child("{name}")'
+ return f"{child} {{ {_codegen_from_text(ty)} }}"
+
+
+def _codegen_type(ty: Type) -> str:
+ if isinstance(ty, Primitive):
+ match ty.type:
+ case Kind.string:
+ return "String"
+ case Kind.decimal:
+ return "Float"
+ case Kind.boolean:
+ return "Boolean"
+ case Kind.base64Binary:
+ return "ByteArray"
+ case Kind.date:
+ return "LocalDate"
+ case Kind.datetime:
+ return "LocalDateTime"
+ case Kind.gyear:
+ return "Year"
+ case Kind.gyearmonth:
+ return "YearMonth"
+ elif isinstance(ty, Any):
+ return "Unit"
+ else:
+ return ty.name
+
+
+def _codegen(ty: Type, types: dict[str, Type]) -> str:
+ def link(name: Type | Attribute | Property) -> Type:
+ return types[name.type]
+
+ if isinstance(ty, Primitive | Any):
+ kt = ""
+ elif isinstance(ty, Simple):
+ kt = f"data class {ty.name}(\n"
+ for attr in ty.attributes:
+ kt += f"\tval {attr.name}: {_codegen_type(link(attr))}{'' if attr.required else '?'},\n"
+ kt += f"\tval value: {_codegen_type(link(ty))}\n"
+ kt += ") {\n"
+ kt += "\tcompanion object {\n"
+ kt += f"\t\tfun parse(k: Konsumer): {ty.name} = {ty.name}(\n"
+ for attr in ty.attributes:
+ kt += f"\t\t\tk.attributes{_codegen_attribute(link(attr), attr.name)},\n"
+ kt += f"\t\t\tk.{_codegen_from_text(link(ty))}\n"
+ kt += "\t\t)\n"
+ kt += "\t}\n"
+ kt += "}\n"
+ kt += "\n"
+ elif isinstance(ty, Enumeration):
+ if ty.values is None:
+ kt = ""
+ else:
+ kt = f"enum class {ty.name} {{\n"
+ for value in ty.values:
+ kt += f"\t{value},\n"
+ kt += "}\n"
+ kt += "\n"
+ elif isinstance(ty, Sequence):
+
+ def propertyKt(property: Property) -> str:
+ kt = f"val {property.name}: "
+ if property.max != 1:
+ kt += "List<"
+ kt += _codegen_type(link(property))
+ if property.max != 1:
+ kt += ">"
+ elif property.min == 0:
+ kt += "?"
+ return kt
+
+ kt = f"data class {ty.name}(\n"
+ for property in ty.properties:
+ kt += f"\t{propertyKt(property)},\n"
+ kt += ") {\n"
+ kt += "\tcompanion object {\n"
+ kt += f"\t\tfun parse(k: Konsumer): {ty.name} = {ty.name}(\n"
+ for property in ty.properties:
+ kt += f"\t\t\tk.{_codegen_from_element(link(property), property.name, property.min, property.max)},\n"
+ kt += "\t\t)\n"
+ kt += "\t}\n"
+ kt += "}\n"
+ kt += "\n"
+ elif isinstance(ty, Choice):
+ names = [f'"{choice.name}"' for choice in ty.choices]
+ kt = f"sealed interface {ty.name} {{\n"
+ for choice in ty.choices:
+ kt += "\t@JvmInline\n"
+ kt += f"\tvalue class {choice.name}(val value: {_codegen_type(link(choice))}): {ty.name}\n"
+ kt += "\n"
+ kt += "\tcompanion object {\n"
+ kt += f"\t\tfun parse(k: Konsumer): {ty.name} = k.child(Names.of({', '.join(names)})) {{\n"
+ kt += "\t\t\twhen (localName) {\n"
+ for choice in ty.choices:
+ kt += f'\t\t\t\t"{choice.name}" -> {choice.name}({_codegen_from_text(link(choice))})\n'
+ kt += '\t\t\t\telse -> throw Error("Impossible")\n'
+ kt += "\t\t\t}\n"
+ kt += "\t\t}\n"
+ kt += "\t}\n"
+ kt += "}\n"
+ kt += "\n"
+ else:
+ raise Exception(f"{ty}")
+ return kt
+
+
+def codegen(types: list[Type], all: dict[str, Type]):
+ # Generate kotlin class
+ kt = "import java.time.*\n"
+ kt += "import java.util.*\n"
+ kt += "import com.gitlab.mvysny.konsumexml.*\n"
+ kt += "\n"
+ kt += "\n"
+ for ty in types:
+ kt += _codegen(ty, all)
+ return kt
diff --git a/ebics/build.gradle b/ebics/build.gradle
index 59a3c51b..169793dc 100644
--- a/ebics/build.gradle
+++ b/ebics/build.gradle
@@ -22,6 +22,9 @@ dependencies {
implementation("jakarta.xml.bind:jakarta.xml.bind-api:2.3.3")
implementation("org.glassfish.jaxb:jaxb-runtime:2.3.9")
implementation("org.apache.santuario:xmlsec:2.3.4")
+
+ // XML parser
+ implementation("com.gitlab.mvysny.konsume-xml:konsume-xml:1.1")
implementation("io.ktor:ktor-http:$ktor_version")
implementation("org.jetbrains.kotlin:kotlin-test:$kotlin_version")
diff --git a/ebics/import.py b/ebics/import.py
deleted file mode 100644
index f9e90e10..00000000
--- a/ebics/import.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# Update EBICS constants file using latest external code sets files
-
-import requests
-from zipfile import ZipFile
-from io import BytesIO
-import polars as pl
-
-# Get XLSX zip file from server
-r = requests.get(
- "https://www.iso20022.org/sites/default/files/media/file/ExternalCodeSets_XLSX.zip"
-)
-assert r.status_code == 200
-
-# Unzip the XLSX file
-zip = ZipFile(BytesIO(r.content))
-files = zip.namelist()
-assert len(files) == 1
-file = zip.open(files[0])
-
-# 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 = f"""/*
- * This file is part of LibEuFin.
- * 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
- * published by the Free Software Foundation; either version 3, or
- * (at your option) any later version.
-
- * LibEuFin is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
- * Public License for more details.
-
- * You should have received a copy of the GNU Affero General Public
- * License along with LibEuFin; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>
- */
-
-// THIS FILE IS GENERATED, DO NOT EDIT
-
-package tech.libeufin.ebics
-
-{extractCodeSet("ExternalStatusReason1Code", "ExternalStatusReasonCode")}
-
-{extractCodeSet("ExternalPaymentGroupStatus1Code", "ExternalPaymentGroupStatusCode")}
-"""
-with open("src/main/kotlin/EbicsCodeSets.kt", "w") as file1:
- file1.write(kt)
diff --git a/ebics/src/main/kotlin/EbicsCodeSets.kt b/ebics/src/main/kotlin/EbicsCodeSets.kt
deleted file mode 100644
index 5f8b2b08..00000000
--- a/ebics/src/main/kotlin/EbicsCodeSets.kt
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * This file is part of LibEuFin.
- * 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
- * published by the Free Software Foundation; either version 3, or
- * (at your option) any later version.
-
- * LibEuFin is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
- * Public License for more details.
-
- * You should have received a copy of the GNU Affero General Public
- * License along with LibEuFin; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>
- */
-
-// THIS FILE IS GENERATED, DO NOT EDIT
-
-package tech.libeufin.ebics
-
-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."),
- 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."),
- AC05("ClosedDebtorAccountNumber", "Debtor account number closed"),
- 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."),
- 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."),
- 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."),
- 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."),
- 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."),
- AGNT("IncorrectAgent", "Agent in the payment workflow is incorrect"),
- 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."),
- 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."),
- AM09("WrongAmount", "Amount received is not the amount agreed or expected"),
- 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"),
- AM14("AmountExceedsAgreedLimit", "Transaction amount exceeds limits agreed between bank and client"),
- 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."),
- 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)."),
- 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."),
- BE08("MissingDebtorName", "Debtor name is missing"),
- 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."),
- 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."),
- 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."),
- 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."),
- 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"),
- CH09("MandateChangesNotAllowed", "Mandate changes are not allowed"),
- CH10("InformationOnMandateChangesMissing", "Information on mandate changes are missing"),
- CH11("CreditorIdentifierIncorrect", "Value in Creditor Identifier is incorrect"),
- CH12("CreditorIdentifierNotUnambiguouslyAtTransaction-Level", "Creditor Identifier is ambiguous at Transaction Level"),
- CH13("OriginalDebtorAccountIsNotToBeUsed", "Original Debtor Account is not to be used"),
- CH14("OriginalDebtorAgentIsNotToBeUsed", "Original Debtor Agent is not to be used"),
- CH15("ElementContentIncludesMoreThan140Characters", "Content Remittance Information/Structured includes more than 140 characters"),
- CH16("ElementContentFormallyIncorrect", "Content is incorrect"),
- CH17("ElementNotAdmitted", "Element is not allowed"),
- CH19("ValuesWillBeSetToNextTARGETday", "Values in Interbank Settlement Date or Requested Collection Date will be set to the next TARGET day"),
- 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."),
- 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."),
- 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"),
- DS03("OrderNotCancelled", "The user’s attempt to cancel the order was not successful"),
- DS04("OrderRejected", "The order was rejected by the bank side (for reasons concerning content)"),
- DS05("OrderForwardedForPostprocessing", "The order was correct and could be forwarded for postprocessing"),
- DS06("TransferOrder", "The order was transferred to VEU"),
- 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."),
- 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."),
- 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."),
- 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."),
- 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"),
- DS27("UserNotYetActivated", "The user is not yet activated (technically)"),
- DT01("InvalidDate", "Invalid date (eg, wrong or missing settlement date)"),
- 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."),
- 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."),
- DUPL("DuplicatePayment", "Payment is a duplicate of another payment"),
- 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."),
- 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."),
- 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"),
- FF07("InvalidPurpose", "Purpose is missing or invalid"),
- 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."),
- MD01("NoMandate", "No Mandate"),
- 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."),
- 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."),
- 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."),
- 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."),
- 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."),
- 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."),
- 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."),
- 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."),
- TS04("TransferToSignByHand", "The order was transferred to pass by accompanying note signed by hand"),
- UCRD("UnknownCreditor", "Unknown Creditor."),
- UPAY("UnduePayment", "Payment is not justified."),
-}
-
-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/ebics/src/main/kotlin/XmlCombinators.kt b/ebics/src/main/kotlin/XmlCombinators.kt
index d9cc77b2..819f604f 100644
--- a/ebics/src/main/kotlin/XmlCombinators.kt
+++ b/ebics/src/main/kotlin/XmlCombinators.kt
@@ -20,8 +20,6 @@
package tech.libeufin.ebics
import com.sun.xml.txw2.output.IndentingXMLStreamWriter
-import org.w3c.dom.Document
-import org.w3c.dom.Element
import java.io.StringWriter
import javax.xml.stream.XMLOutputFactory
import javax.xml.stream.XMLStreamWriter
@@ -105,80 +103,4 @@ fun constructXml(indent: Boolean = false, f: XmlDocumentBuilder.() -> Unit): Str
f(b)
writer.writeEndDocument()
return "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n${stream.buffer.toString()}"
-}
-
-class DestructionError(m: String) : Exception(m)
-
-private fun Element.getChildElements(ns: String, tag: String): List<Element> {
- val elements = mutableListOf<Element>()
- for (i in 0..this.childNodes.length) {
- val el = this.childNodes.item(i)
- if (el !is Element) {
- continue
- }
- if (ns != "*" && el.namespaceURI != ns) {
- continue
- }
- if (tag != "*" && el.localName != tag) {
- continue
- }
- elements.add(el)
- }
- return elements
-}
-
-class XmlElementDestructor internal constructor(val focusElement: Element) {
- fun <T> requireOnlyChild(f: XmlElementDestructor.(e: Element) -> T): T {
- val children = focusElement.getChildElements("*", "*")
- if (children.size != 1) throw DestructionError("expected singleton child tag")
- val destr = XmlElementDestructor(children[0])
- return f(destr, children[0])
- }
-
- fun <T> mapEachChildNamed(s: String, f: XmlElementDestructor.() -> T): List<T> {
- val res = mutableListOf<T>()
- val els = focusElement.getChildElements("*", s)
- for (child in els) {
- val destr = XmlElementDestructor(child)
- res.add(f(destr))
- }
- return res
- }
-
- fun <T> requireUniqueChildNamed(s: String, f: XmlElementDestructor.() -> T): T {
- val cl = focusElement.getChildElements("*", s)
- if (cl.size != 1) {
- throw DestructionError("expected exactly one unique $s child, got ${cl.size} instead at ${focusElement}")
- }
- val el = cl[0]
- val destr = XmlElementDestructor(el)
- return f(destr)
- }
-
- fun <T> maybeUniqueChildNamed(s: String, f: XmlElementDestructor.() -> T): T? {
- val cl = focusElement.getChildElements("*", s)
- if (cl.size > 1) {
- throw DestructionError("expected at most one unique $s child, got ${cl.size} instead")
- }
- if (cl.size == 1) {
- val el = cl[0]
- val destr = XmlElementDestructor(el)
- return f(destr)
- }
- return null
- }
-}
-
-class XmlDocumentDestructor internal constructor(val d: Document) {
- fun <T> requireRootElement(name: String, f: XmlElementDestructor.() -> T): T {
- if (this.d.documentElement.tagName != name) {
- throw DestructionError("expected '$name' tag")
- }
- val destr = XmlElementDestructor(d.documentElement)
- return f(destr)
- }
-}
-
-fun <T> destructXml(d: Document, f: XmlDocumentDestructor.() -> T): T {
- return f(XmlDocumentDestructor(d))
-}
+} \ No newline at end of file
diff --git a/ebics/src/main/kotlin/iso20022/camt_054_001_04.kt b/ebics/src/main/kotlin/iso20022/camt_054_001_04.kt
new file mode 100644
index 00000000..053b5b52
--- /dev/null
+++ b/ebics/src/main/kotlin/iso20022/camt_054_001_04.kt
@@ -0,0 +1,1329 @@
+/*
+ * This file is part of LibEuFin.
+ * 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
+ * published by the Free Software Foundation; either version 3, or
+ * (at your option) any later version.
+
+ * LibEuFin is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+ * Public License for more details.
+
+ * You should have received a copy of the GNU Affero General Public
+ * License along with LibEuFin; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>
+ */
+
+// THIS FILE IS GENERATED, DO NOT EDIT
+
+package tech.libeufin.ebics.iso20022
+
+import java.time.*
+import java.util.*
+import com.gitlab.mvysny.konsumexml.*
+
+
+data class AccountInterest2(
+ val Tp: InterestType1Choice?,
+ val Rate: List<Rate3>,
+ val FrToDt: DateTimePeriodDetails?,
+ val Rsn: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): AccountInterest2 = AccountInterest2(
+ k.childOrNull("Tp") { InterestType1Choice.parse(this) },
+ k.children("Rate") { Rate3.parse(this) },
+ k.childOrNull("FrToDt") { DateTimePeriodDetails.parse(this) },
+ k.childOrNull("Rsn") { text() },
+ )
+ }
+}
+
+data class AccountNotification7(
+ val Id: String,
+ val NtfctnPgntn: Pagination?,
+ val ElctrncSeqNb: Float?,
+ val LglSeqNb: Float?,
+ val CreDtTm: LocalDateTime,
+ val FrToDt: DateTimePeriodDetails?,
+ val CpyDplctInd: CopyDuplicate1Code?,
+ val RptgSrc: ReportingSource1Choice?,
+ val Acct: CashAccount25,
+ val RltdAcct: CashAccount24?,
+ val Intrst: List<AccountInterest2>,
+ val TxsSummry: TotalTransactions4?,
+ val Ntry: List<ReportEntry4>,
+ val AddtlNtfctnInf: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): AccountNotification7 = AccountNotification7(
+ k.child("Id") { text() },
+ k.childOrNull("NtfctnPgntn") { Pagination.parse(this) },
+ k.childOrNull("ElctrncSeqNb") { text().xmlFloat() },
+ k.childOrNull("LglSeqNb") { text().xmlFloat() },
+ k.child("CreDtTm") { text().toDateTime() },
+ k.childOrNull("FrToDt") { DateTimePeriodDetails.parse(this) },
+ k.childOrNull("CpyDplctInd") { CopyDuplicate1Code.valueOf(text()) },
+ k.childOrNull("RptgSrc") { ReportingSource1Choice.parse(this) },
+ k.child("Acct") { CashAccount25.parse(this) },
+ k.childOrNull("RltdAcct") { CashAccount24.parse(this) },
+ k.children("Intrst") { AccountInterest2.parse(this) },
+ k.childOrNull("TxsSummry") { TotalTransactions4.parse(this) },
+ k.children("Ntry") { ReportEntry4.parse(this) },
+ k.childOrNull("AddtlNtfctnInf") { text() },
+ )
+ }
+}
+
+data class BankToCustomerDebitCreditNotificationV04(
+ val GrpHdr: GroupHeader58,
+ val Ntfctn: List<AccountNotification7>,
+ val SplmtryData: List<SupplementaryData1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): BankToCustomerDebitCreditNotificationV04 = BankToCustomerDebitCreditNotificationV04(
+ k.child("GrpHdr") { GroupHeader58.parse(this) },
+ k.children("Ntfctn", minCount=1, ) { AccountNotification7.parse(this) },
+ k.children("SplmtryData") { SupplementaryData1.parse(this) },
+ )
+ }
+}
+
+data class BranchAndFinancialInstitutionIdentification5(
+ val FinInstnId: FinancialInstitutionIdentification8,
+ val BrnchId: BranchData2?,
+) {
+ companion object {
+ fun parse(k: Konsumer): BranchAndFinancialInstitutionIdentification5 = BranchAndFinancialInstitutionIdentification5(
+ k.child("FinInstnId") { FinancialInstitutionIdentification8.parse(this) },
+ k.childOrNull("BrnchId") { BranchData2.parse(this) },
+ )
+ }
+}
+
+data class BranchData2(
+ val Id: String?,
+ val Nm: String?,
+ val PstlAdr: PostalAddress6?,
+) {
+ companion object {
+ fun parse(k: Konsumer): BranchData2 = BranchData2(
+ k.childOrNull("Id") { text() },
+ k.childOrNull("Nm") { text() },
+ k.childOrNull("PstlAdr") { PostalAddress6.parse(this) },
+ )
+ }
+}
+
+data class CardAggregated1(
+ val AddtlSvc: CardPaymentServiceType2Code?,
+ val TxCtgy: String?,
+ val SaleRcncltnId: String?,
+ val SeqNbRg: CardSequenceNumberRange1?,
+ val TxDtRg: DateOrDateTimePeriodChoice?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CardAggregated1 = CardAggregated1(
+ k.childOrNull("AddtlSvc") { CardPaymentServiceType2Code.valueOf(text()) },
+ k.childOrNull("TxCtgy") { text() },
+ k.childOrNull("SaleRcncltnId") { text() },
+ k.childOrNull("SeqNbRg") { CardSequenceNumberRange1.parse(this) },
+ k.childOrNull("TxDtRg") { DateOrDateTimePeriodChoice.parse(this) },
+ )
+ }
+}
+
+data class CardEntry1(
+ val Card: PaymentCard4?,
+ val POI: PointOfInteraction1?,
+ val AggtdNtry: CardAggregated1?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CardEntry1 = CardEntry1(
+ k.childOrNull("Card") { PaymentCard4.parse(this) },
+ k.childOrNull("POI") { PointOfInteraction1.parse(this) },
+ k.childOrNull("AggtdNtry") { CardAggregated1.parse(this) },
+ )
+ }
+}
+
+data class CardIndividualTransaction1(
+ val AddtlSvc: CardPaymentServiceType2Code?,
+ val TxCtgy: String?,
+ val SaleRcncltnId: String?,
+ val SaleRefNb: String?,
+ val SeqNb: String?,
+ val TxId: TransactionIdentifier1?,
+ val Pdct: Product2?,
+ val VldtnDt: LocalDate?,
+ val VldtnSeqNb: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CardIndividualTransaction1 = CardIndividualTransaction1(
+ k.childOrNull("AddtlSvc") { CardPaymentServiceType2Code.valueOf(text()) },
+ k.childOrNull("TxCtgy") { text() },
+ k.childOrNull("SaleRcncltnId") { text() },
+ k.childOrNull("SaleRefNb") { text() },
+ k.childOrNull("SeqNb") { text() },
+ k.childOrNull("TxId") { TransactionIdentifier1.parse(this) },
+ k.childOrNull("Pdct") { Product2.parse(this) },
+ k.childOrNull("VldtnDt") { text().toDate() },
+ k.childOrNull("VldtnSeqNb") { text() },
+ )
+ }
+}
+
+data class CardTransaction1(
+ val Card: PaymentCard4?,
+ val POI: PointOfInteraction1?,
+ val Tx: CardTransaction1Choice?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CardTransaction1 = CardTransaction1(
+ k.childOrNull("Card") { PaymentCard4.parse(this) },
+ k.childOrNull("POI") { PointOfInteraction1.parse(this) },
+ k.childOrNull("Tx") { CardTransaction1Choice.parse(this) },
+ )
+ }
+}
+
+sealed interface CardTransaction1Choice {
+ @JvmInline
+ value class Aggtd(val value: CardAggregated1): CardTransaction1Choice
+ @JvmInline
+ value class Indv(val value: CardIndividualTransaction1): CardTransaction1Choice
+
+ companion object {
+ fun parse(k: Konsumer): CardTransaction1Choice = k.child(Names.of("Aggtd", "Indv")) {
+ when (localName) {
+ "Aggtd" -> Aggtd(CardAggregated1.parse(this))
+ "Indv" -> Indv(CardIndividualTransaction1.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class CashAccount24(
+ val Id: AccountIdentification4Choice,
+ val Tp: CashAccountType2Choice?,
+ val Ccy: String?,
+ val Nm: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CashAccount24 = CashAccount24(
+ k.child("Id") { AccountIdentification4Choice.parse(this) },
+ k.childOrNull("Tp") { CashAccountType2Choice.parse(this) },
+ k.childOrNull("Ccy") { text() },
+ k.childOrNull("Nm") { text() },
+ )
+ }
+}
+
+data class CashAccount25(
+ val Id: AccountIdentification4Choice,
+ val Tp: CashAccountType2Choice?,
+ val Ccy: String?,
+ val Nm: String?,
+ val Ownr: PartyIdentification43?,
+ val Svcr: BranchAndFinancialInstitutionIdentification5?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CashAccount25 = CashAccount25(
+ k.child("Id") { AccountIdentification4Choice.parse(this) },
+ k.childOrNull("Tp") { CashAccountType2Choice.parse(this) },
+ k.childOrNull("Ccy") { text() },
+ k.childOrNull("Nm") { text() },
+ k.childOrNull("Ownr") { PartyIdentification43.parse(this) },
+ k.childOrNull("Svcr") { BranchAndFinancialInstitutionIdentification5.parse(this) },
+ )
+ }
+}
+
+data class CashBalanceAvailability2(
+ val Dt: CashBalanceAvailabilityDate1,
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val CdtDbtInd: CreditDebitCode,
+) {
+ companion object {
+ fun parse(k: Konsumer): CashBalanceAvailability2 = CashBalanceAvailability2(
+ k.child("Dt") { CashBalanceAvailabilityDate1.parse(this) },
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.child("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ )
+ }
+}
+
+sealed interface CashBalanceAvailabilityDate1 {
+ @JvmInline
+ value class NbOfDays(val value: String): CashBalanceAvailabilityDate1
+ @JvmInline
+ value class ActlDt(val value: LocalDate): CashBalanceAvailabilityDate1
+
+ companion object {
+ fun parse(k: Konsumer): CashBalanceAvailabilityDate1 = k.child(Names.of("NbOfDays", "ActlDt")) {
+ when (localName) {
+ "NbOfDays" -> NbOfDays(text())
+ "ActlDt" -> ActlDt(text().toDate())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class Charges4(
+ val TtlChrgsAndTaxAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val Rcrd: List<ChargesRecord2>,
+) {
+ companion object {
+ fun parse(k: Konsumer): Charges4 = Charges4(
+ k.childOrNull("TtlChrgsAndTaxAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.children("Rcrd") { ChargesRecord2.parse(this) },
+ )
+ }
+}
+
+data class ChargesRecord2(
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val CdtDbtInd: CreditDebitCode?,
+ val ChrgInclInd: Boolean?,
+ val Tp: ChargeType3Choice?,
+ val Rate: Float?,
+ val Br: ChargeBearerType1Code?,
+ val Agt: BranchAndFinancialInstitutionIdentification5?,
+ val Tax: TaxCharges2?,
+) {
+ companion object {
+ fun parse(k: Konsumer): ChargesRecord2 = ChargesRecord2(
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ k.childOrNull("ChrgInclInd") { text().xmlBoolean() },
+ k.childOrNull("Tp") { ChargeType3Choice.parse(this) },
+ k.childOrNull("Rate") { text().xmlFloat() },
+ k.childOrNull("Br") { ChargeBearerType1Code.valueOf(text()) },
+ k.childOrNull("Agt") { BranchAndFinancialInstitutionIdentification5.parse(this) },
+ k.childOrNull("Tax") { TaxCharges2.parse(this) },
+ )
+ }
+}
+
+data class ContactDetails2(
+ val NmPrfx: NamePrefix1Code?,
+ val Nm: String?,
+ val PhneNb: String?,
+ val MobNb: String?,
+ val FaxNb: String?,
+ val EmailAdr: String?,
+ val Othr: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): ContactDetails2 = ContactDetails2(
+ k.childOrNull("NmPrfx") { NamePrefix1Code.valueOf(text()) },
+ k.childOrNull("Nm") { text() },
+ k.childOrNull("PhneNb") { text() },
+ k.childOrNull("MobNb") { text() },
+ k.childOrNull("FaxNb") { text() },
+ k.childOrNull("EmailAdr") { text() },
+ k.childOrNull("Othr") { text() },
+ )
+ }
+}
+
+data class CurrencyAndAmountRange2(
+ val Amt: ImpliedCurrencyAmountRangeChoice,
+ val CdtDbtInd: CreditDebitCode?,
+ val Ccy: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): CurrencyAndAmountRange2 = CurrencyAndAmountRange2(
+ k.child("Amt") { ImpliedCurrencyAmountRangeChoice.parse(this) },
+ k.childOrNull("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ k.child("Ccy") { text() },
+ )
+ }
+}
+
+sealed interface DateAndDateTimeChoice {
+ @JvmInline
+ value class Dt(val value: LocalDate): DateAndDateTimeChoice
+ @JvmInline
+ value class DtTm(val value: LocalDateTime): DateAndDateTimeChoice
+
+ companion object {
+ fun parse(k: Konsumer): DateAndDateTimeChoice = k.child(Names.of("Dt", "DtTm")) {
+ when (localName) {
+ "Dt" -> Dt(text().toDate())
+ "DtTm" -> DtTm(text().toDateTime())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class DateAndPlaceOfBirth(
+ val BirthDt: LocalDate,
+ val PrvcOfBirth: String?,
+ val CityOfBirth: String,
+ val CtryOfBirth: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): DateAndPlaceOfBirth = DateAndPlaceOfBirth(
+ k.child("BirthDt") { text().toDate() },
+ k.childOrNull("PrvcOfBirth") { text() },
+ k.child("CityOfBirth") { text() },
+ k.child("CtryOfBirth") { text() },
+ )
+ }
+}
+
+sealed interface DateOrDateTimePeriodChoice {
+ @JvmInline
+ value class Dt(val value: DatePeriodDetails): DateOrDateTimePeriodChoice
+ @JvmInline
+ value class DtTm(val value: DateTimePeriodDetails): DateOrDateTimePeriodChoice
+
+ companion object {
+ fun parse(k: Konsumer): DateOrDateTimePeriodChoice = k.child(Names.of("Dt", "DtTm")) {
+ when (localName) {
+ "Dt" -> Dt(DatePeriodDetails.parse(this))
+ "DtTm" -> DtTm(DateTimePeriodDetails.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class DatePeriodDetails(
+ val FrDt: LocalDate,
+ val ToDt: LocalDate,
+) {
+ companion object {
+ fun parse(k: Konsumer): DatePeriodDetails = DatePeriodDetails(
+ k.child("FrDt") { text().toDate() },
+ k.child("ToDt") { text().toDate() },
+ )
+ }
+}
+
+data class DateTimePeriodDetails(
+ val FrDtTm: LocalDateTime,
+ val ToDtTm: LocalDateTime,
+) {
+ companion object {
+ fun parse(k: Konsumer): DateTimePeriodDetails = DateTimePeriodDetails(
+ k.child("FrDtTm") { text().toDateTime() },
+ k.child("ToDtTm") { text().toDateTime() },
+ )
+ }
+}
+
+data class camt_054_001_04(
+ val BkToCstmrDbtCdtNtfctn: BankToCustomerDebitCreditNotificationV04,
+) {
+ companion object {
+ fun parse(k: Konsumer): camt_054_001_04 = camt_054_001_04(
+ k.child("BkToCstmrDbtCdtNtfctn") { BankToCustomerDebitCreditNotificationV04.parse(this) },
+ )
+ }
+}
+
+enum class DocumentType5Code {
+ MSIN,
+ CNFA,
+ DNFA,
+ CINV,
+ CREN,
+ DEBN,
+ HIRI,
+ SBIN,
+ CMCN,
+ SOAC,
+ DISP,
+ BOLD,
+ VCHR,
+ AROI,
+ TSUT,
+}
+
+data class EntryDetails3(
+ val Btch: BatchInformation2?,
+ val TxDtls: List<EntryTransaction4>,
+) {
+ companion object {
+ fun parse(k: Konsumer): EntryDetails3 = EntryDetails3(
+ k.childOrNull("Btch") { BatchInformation2.parse(this) },
+ k.children("TxDtls") { EntryTransaction4.parse(this) },
+ )
+ }
+}
+
+enum class EntryStatus2Code {
+ BOOK,
+ PDNG,
+ INFO,
+}
+
+data class EntryTransaction4(
+ val Refs: TransactionReferences3?,
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val CdtDbtInd: CreditDebitCode,
+ val AmtDtls: AmountAndCurrencyExchange3?,
+ val Avlbty: List<CashBalanceAvailability2>,
+ val BkTxCd: BankTransactionCodeStructure4?,
+ val Chrgs: Charges4?,
+ val Intrst: TransactionInterest3?,
+ val RltdPties: TransactionParties3?,
+ val RltdAgts: TransactionAgents3?,
+ val Purp: Purpose2Choice?,
+ val RltdRmtInf: List<RemittanceLocation2>,
+ val RmtInf: RemittanceInformation7?,
+ val RltdDts: TransactionDates2?,
+ val RltdPric: TransactionPrice3Choice?,
+ val RltdQties: List<TransactionQuantities2Choice>,
+ val FinInstrmId: SecurityIdentification14?,
+ val Tax: TaxInformation3?,
+ val RtrInf: PaymentReturnReason2?,
+ val CorpActn: CorporateAction9?,
+ val SfkpgAcct: SecuritiesAccount13?,
+ val CshDpst: List<CashDeposit1>,
+ val CardTx: CardTransaction1?,
+ val AddtlTxInf: String?,
+ val SplmtryData: List<SupplementaryData1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): EntryTransaction4 = EntryTransaction4(
+ k.childOrNull("Refs") { TransactionReferences3.parse(this) },
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.child("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ k.childOrNull("AmtDtls") { AmountAndCurrencyExchange3.parse(this) },
+ k.children("Avlbty") { CashBalanceAvailability2.parse(this) },
+ k.childOrNull("BkTxCd") { BankTransactionCodeStructure4.parse(this) },
+ k.childOrNull("Chrgs") { Charges4.parse(this) },
+ k.childOrNull("Intrst") { TransactionInterest3.parse(this) },
+ k.childOrNull("RltdPties") { TransactionParties3.parse(this) },
+ k.childOrNull("RltdAgts") { TransactionAgents3.parse(this) },
+ k.childOrNull("Purp") { Purpose2Choice.parse(this) },
+ k.children("RltdRmtInf", maxCount=10) { RemittanceLocation2.parse(this) },
+ k.childOrNull("RmtInf") { RemittanceInformation7.parse(this) },
+ k.childOrNull("RltdDts") { TransactionDates2.parse(this) },
+ k.childOrNull("RltdPric") { TransactionPrice3Choice.parse(this) },
+ k.children("RltdQties") { TransactionQuantities2Choice.parse(this) },
+ k.childOrNull("FinInstrmId") { SecurityIdentification14.parse(this) },
+ k.childOrNull("Tax") { TaxInformation3.parse(this) },
+ k.childOrNull("RtrInf") { PaymentReturnReason2.parse(this) },
+ k.childOrNull("CorpActn") { CorporateAction9.parse(this) },
+ k.childOrNull("SfkpgAcct") { SecuritiesAccount13.parse(this) },
+ k.children("CshDpst") { CashDeposit1.parse(this) },
+ k.childOrNull("CardTx") { CardTransaction1.parse(this) },
+ k.childOrNull("AddtlTxInf") { text() },
+ k.children("SplmtryData") { SupplementaryData1.parse(this) },
+ )
+ }
+}
+
+data class FinancialInstitutionIdentification8(
+ val BICFI: String?,
+ val ClrSysMmbId: ClearingSystemMemberIdentification2?,
+ val Nm: String?,
+ val PstlAdr: PostalAddress6?,
+ val Othr: GenericFinancialIdentification1?,
+) {
+ companion object {
+ fun parse(k: Konsumer): FinancialInstitutionIdentification8 = FinancialInstitutionIdentification8(
+ k.childOrNull("BICFI") { text() },
+ k.childOrNull("ClrSysMmbId") { ClearingSystemMemberIdentification2.parse(this) },
+ k.childOrNull("Nm") { text() },
+ k.childOrNull("PstlAdr") { PostalAddress6.parse(this) },
+ k.childOrNull("Othr") { GenericFinancialIdentification1.parse(this) },
+ )
+ }
+}
+
+sealed interface FinancialInstrumentQuantityChoice {
+ @JvmInline
+ value class Unit(val value: Float): FinancialInstrumentQuantityChoice
+ @JvmInline
+ value class FaceAmt(val value: Float): FinancialInstrumentQuantityChoice
+ @JvmInline
+ value class AmtsdVal(val value: Float): FinancialInstrumentQuantityChoice
+
+ companion object {
+ fun parse(k: Konsumer): FinancialInstrumentQuantityChoice = k.child(Names.of("Unit", "FaceAmt", "AmtsdVal")) {
+ when (localName) {
+ "Unit" -> Unit(text().xmlFloat())
+ "FaceAmt" -> FaceAmt(text().xmlFloat())
+ "AmtsdVal" -> AmtsdVal(text().xmlFloat())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class FromToAmountRange(
+ val FrAmt: AmountRangeBoundary1,
+ val ToAmt: AmountRangeBoundary1,
+) {
+ companion object {
+ fun parse(k: Konsumer): FromToAmountRange = FromToAmountRange(
+ k.child("FrAmt") { AmountRangeBoundary1.parse(this) },
+ k.child("ToAmt") { AmountRangeBoundary1.parse(this) },
+ )
+ }
+}
+
+data class GenericIdentification20(
+ val Id: String,
+ val Issr: String,
+ val SchmeNm: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GenericIdentification20 = GenericIdentification20(
+ k.child("Id") { text() },
+ k.child("Issr") { text() },
+ k.childOrNull("SchmeNm") { text() },
+ )
+ }
+}
+
+data class GroupHeader58(
+ val MsgId: String,
+ val CreDtTm: LocalDateTime,
+ val MsgRcpt: PartyIdentification43?,
+ val MsgPgntn: Pagination?,
+ val OrgnlBizQry: OriginalBusinessQuery1?,
+ val AddtlInf: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GroupHeader58 = GroupHeader58(
+ k.child("MsgId") { text() },
+ k.child("CreDtTm") { text().toDateTime() },
+ k.childOrNull("MsgRcpt") { PartyIdentification43.parse(this) },
+ k.childOrNull("MsgPgntn") { Pagination.parse(this) },
+ k.childOrNull("OrgnlBizQry") { OriginalBusinessQuery1.parse(this) },
+ k.childOrNull("AddtlInf") { text() },
+ )
+ }
+}
+
+sealed interface ImpliedCurrencyAmountRangeChoice {
+ @JvmInline
+ value class FrAmt(val value: AmountRangeBoundary1): ImpliedCurrencyAmountRangeChoice
+ @JvmInline
+ value class ToAmt(val value: AmountRangeBoundary1): ImpliedCurrencyAmountRangeChoice
+ @JvmInline
+ value class FrToAmt(val value: FromToAmountRange): ImpliedCurrencyAmountRangeChoice
+ @JvmInline
+ value class EQAmt(val value: Float): ImpliedCurrencyAmountRangeChoice
+ @JvmInline
+ value class NEQAmt(val value: Float): ImpliedCurrencyAmountRangeChoice
+
+ companion object {
+ fun parse(k: Konsumer): ImpliedCurrencyAmountRangeChoice = k.child(Names.of("FrAmt", "ToAmt", "FrToAmt", "EQAmt", "NEQAmt")) {
+ when (localName) {
+ "FrAmt" -> FrAmt(AmountRangeBoundary1.parse(this))
+ "ToAmt" -> ToAmt(AmountRangeBoundary1.parse(this))
+ "FrToAmt" -> FrToAmt(FromToAmountRange.parse(this))
+ "EQAmt" -> EQAmt(text().xmlFloat())
+ "NEQAmt" -> NEQAmt(text().xmlFloat())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class InterestRecord1(
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val CdtDbtInd: CreditDebitCode,
+ val Tp: InterestType1Choice?,
+ val Rate: Rate3?,
+ val FrToDt: DateTimePeriodDetails?,
+ val Rsn: String?,
+ val Tax: TaxCharges2?,
+) {
+ companion object {
+ fun parse(k: Konsumer): InterestRecord1 = InterestRecord1(
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.child("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ k.childOrNull("Tp") { InterestType1Choice.parse(this) },
+ k.childOrNull("Rate") { Rate3.parse(this) },
+ k.childOrNull("FrToDt") { DateTimePeriodDetails.parse(this) },
+ k.childOrNull("Rsn") { text() },
+ k.childOrNull("Tax") { TaxCharges2.parse(this) },
+ )
+ }
+}
+
+data class NameAndAddress10(
+ val Nm: String,
+ val Adr: PostalAddress6,
+) {
+ companion object {
+ fun parse(k: Konsumer): NameAndAddress10 = NameAndAddress10(
+ k.child("Nm") { text() },
+ k.child("Adr") { PostalAddress6.parse(this) },
+ )
+ }
+}
+
+enum class NamePrefix1Code {
+ DOCT,
+ MIST,
+ MISS,
+ MADM,
+}
+
+data class OrganisationIdentification8(
+ val AnyBIC: String?,
+ val Othr: List<GenericOrganisationIdentification1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): OrganisationIdentification8 = OrganisationIdentification8(
+ k.childOrNull("AnyBIC") { text() },
+ k.children("Othr") { GenericOrganisationIdentification1.parse(this) },
+ )
+ }
+}
+
+data class Pagination(
+ val PgNb: String,
+ val LastPgInd: Boolean,
+) {
+ companion object {
+ fun parse(k: Konsumer): Pagination = Pagination(
+ k.child("PgNb") { text() },
+ k.child("LastPgInd") { text().xmlBoolean() },
+ )
+ }
+}
+
+sealed interface Party11Choice {
+ @JvmInline
+ value class OrgId(val value: OrganisationIdentification8): Party11Choice
+ @JvmInline
+ value class PrvtId(val value: PersonIdentification5): Party11Choice
+
+ companion object {
+ fun parse(k: Konsumer): Party11Choice = k.child(Names.of("OrgId", "PrvtId")) {
+ when (localName) {
+ "OrgId" -> OrgId(OrganisationIdentification8.parse(this))
+ "PrvtId" -> PrvtId(PersonIdentification5.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class PartyIdentification43(
+ val Nm: String?,
+ val PstlAdr: PostalAddress6?,
+ val Id: Party11Choice?,
+ val CtryOfRes: String?,
+ val CtctDtls: ContactDetails2?,
+) {
+ companion object {
+ fun parse(k: Konsumer): PartyIdentification43 = PartyIdentification43(
+ k.childOrNull("Nm") { text() },
+ k.childOrNull("PstlAdr") { PostalAddress6.parse(this) },
+ k.childOrNull("Id") { Party11Choice.parse(this) },
+ k.childOrNull("CtryOfRes") { text() },
+ k.childOrNull("CtctDtls") { ContactDetails2.parse(this) },
+ )
+ }
+}
+
+data class PaymentReturnReason2(
+ val OrgnlBkTxCd: BankTransactionCodeStructure4?,
+ val Orgtr: PartyIdentification43?,
+ val Rsn: ReturnReason5Choice?,
+ val AddtlInf: List<String>,
+) {
+ companion object {
+ fun parse(k: Konsumer): PaymentReturnReason2 = PaymentReturnReason2(
+ k.childOrNull("OrgnlBkTxCd") { BankTransactionCodeStructure4.parse(this) },
+ k.childOrNull("Orgtr") { PartyIdentification43.parse(this) },
+ k.childOrNull("Rsn") { ReturnReason5Choice.parse(this) },
+ k.children("AddtlInf") { text() },
+ )
+ }
+}
+
+data class PersonIdentification5(
+ val DtAndPlcOfBirth: DateAndPlaceOfBirth?,
+ val Othr: List<GenericPersonIdentification1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): PersonIdentification5 = PersonIdentification5(
+ k.childOrNull("DtAndPlcOfBirth") { DateAndPlaceOfBirth.parse(this) },
+ k.children("Othr") { GenericPersonIdentification1.parse(this) },
+ )
+ }
+}
+
+data class PostalAddress6(
+ val AdrTp: AddressType2Code?,
+ val Dept: String?,
+ val SubDept: String?,
+ val StrtNm: String?,
+ val BldgNb: String?,
+ val PstCd: String?,
+ val TwnNm: String?,
+ val CtrySubDvsn: String?,
+ val Ctry: String?,
+ val AdrLine: List<String>,
+) {
+ companion object {
+ fun parse(k: Konsumer): PostalAddress6 = PostalAddress6(
+ k.childOrNull("AdrTp") { AddressType2Code.valueOf(text()) },
+ k.childOrNull("Dept") { text() },
+ k.childOrNull("SubDept") { text() },
+ k.childOrNull("StrtNm") { text() },
+ k.childOrNull("BldgNb") { text() },
+ k.childOrNull("PstCd") { text() },
+ k.childOrNull("TwnNm") { text() },
+ k.childOrNull("CtrySubDvsn") { text() },
+ k.childOrNull("Ctry") { text() },
+ k.children("AdrLine", maxCount=7) { text() },
+ )
+ }
+}
+
+data class Price2(
+ val Tp: YieldedOrValueType1Choice,
+ val Val: PriceRateOrAmountChoice,
+) {
+ companion object {
+ fun parse(k: Konsumer): Price2 = Price2(
+ k.child("Tp") { YieldedOrValueType1Choice.parse(this) },
+ k.child("Val") { PriceRateOrAmountChoice.parse(this) },
+ )
+ }
+}
+
+sealed interface PriceRateOrAmountChoice {
+ @JvmInline
+ value class Rate(val value: Float): PriceRateOrAmountChoice
+ @JvmInline
+ value class Amt(val value: ActiveOrHistoricCurrencyAnd13DecimalAmount): PriceRateOrAmountChoice
+
+ companion object {
+ fun parse(k: Konsumer): PriceRateOrAmountChoice = k.child(Names.of("Rate", "Amt")) {
+ when (localName) {
+ "Rate" -> Rate(text().xmlFloat())
+ "Amt" -> Amt(ActiveOrHistoricCurrencyAnd13DecimalAmount.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class ProprietaryAgent3(
+ val Tp: String,
+ val Agt: BranchAndFinancialInstitutionIdentification5,
+) {
+ companion object {
+ fun parse(k: Konsumer): ProprietaryAgent3 = ProprietaryAgent3(
+ k.child("Tp") { text() },
+ k.child("Agt") { BranchAndFinancialInstitutionIdentification5.parse(this) },
+ )
+ }
+}
+
+data class ProprietaryDate2(
+ val Tp: String,
+ val Dt: DateAndDateTimeChoice,
+) {
+ companion object {
+ fun parse(k: Konsumer): ProprietaryDate2 = ProprietaryDate2(
+ k.child("Tp") { text() },
+ k.child("Dt") { DateAndDateTimeChoice.parse(this) },
+ )
+ }
+}
+
+data class ProprietaryParty3(
+ val Tp: String,
+ val Pty: PartyIdentification43,
+) {
+ companion object {
+ fun parse(k: Konsumer): ProprietaryParty3 = ProprietaryParty3(
+ k.child("Tp") { text() },
+ k.child("Pty") { PartyIdentification43.parse(this) },
+ )
+ }
+}
+
+data class Rate3(
+ val Tp: RateType4Choice,
+ val VldtyRg: CurrencyAndAmountRange2?,
+) {
+ companion object {
+ fun parse(k: Konsumer): Rate3 = Rate3(
+ k.child("Tp") { RateType4Choice.parse(this) },
+ k.childOrNull("VldtyRg") { CurrencyAndAmountRange2.parse(this) },
+ )
+ }
+}
+
+data class ReferredDocumentInformation3(
+ val Tp: ReferredDocumentType2?,
+ val Nb: String?,
+ val RltdDt: LocalDate?,
+) {
+ companion object {
+ fun parse(k: Konsumer): ReferredDocumentInformation3 = ReferredDocumentInformation3(
+ k.childOrNull("Tp") { ReferredDocumentType2.parse(this) },
+ k.childOrNull("Nb") { text() },
+ k.childOrNull("RltdDt") { text().toDate() },
+ )
+ }
+}
+
+sealed interface ReferredDocumentType1Choice {
+ @JvmInline
+ value class Cd(val value: DocumentType5Code): ReferredDocumentType1Choice
+ @JvmInline
+ value class Prtry(val value: String): ReferredDocumentType1Choice
+
+ companion object {
+ fun parse(k: Konsumer): ReferredDocumentType1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(DocumentType5Code.valueOf(text()))
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class ReferredDocumentType2(
+ val CdOrPrtry: ReferredDocumentType1Choice,
+ val Issr: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): ReferredDocumentType2 = ReferredDocumentType2(
+ k.child("CdOrPrtry") { ReferredDocumentType1Choice.parse(this) },
+ k.childOrNull("Issr") { text() },
+ )
+ }
+}
+
+data class RemittanceInformation7(
+ val Ustrd: List<String>,
+ val Strd: List<StructuredRemittanceInformation9>,
+) {
+ companion object {
+ fun parse(k: Konsumer): RemittanceInformation7 = RemittanceInformation7(
+ k.children("Ustrd") { text() },
+ k.children("Strd") { StructuredRemittanceInformation9.parse(this) },
+ )
+ }
+}
+
+data class RemittanceLocation2(
+ val RmtId: String?,
+ val RmtLctnMtd: RemittanceLocationMethod2Code?,
+ val RmtLctnElctrncAdr: String?,
+ val RmtLctnPstlAdr: NameAndAddress10?,
+) {
+ companion object {
+ fun parse(k: Konsumer): RemittanceLocation2 = RemittanceLocation2(
+ k.childOrNull("RmtId") { text() },
+ k.childOrNull("RmtLctnMtd") { RemittanceLocationMethod2Code.valueOf(text()) },
+ k.childOrNull("RmtLctnElctrncAdr") { text() },
+ k.childOrNull("RmtLctnPstlAdr") { NameAndAddress10.parse(this) },
+ )
+ }
+}
+
+data class ReportEntry4(
+ val NtryRef: String?,
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val CdtDbtInd: CreditDebitCode,
+ val RvslInd: Boolean?,
+ val Sts: EntryStatus2Code,
+ val BookgDt: DateAndDateTimeChoice?,
+ val ValDt: DateAndDateTimeChoice?,
+ val AcctSvcrRef: String?,
+ val Avlbty: List<CashBalanceAvailability2>,
+ val BkTxCd: BankTransactionCodeStructure4,
+ val ComssnWvrInd: Boolean?,
+ val AddtlInfInd: MessageIdentification2?,
+ val AmtDtls: AmountAndCurrencyExchange3?,
+ val Chrgs: Charges4?,
+ val TechInptChanl: TechnicalInputChannel1Choice?,
+ val Intrst: TransactionInterest3?,
+ val CardTx: CardEntry1?,
+ val NtryDtls: List<EntryDetails3>,
+ val AddtlNtryInf: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): ReportEntry4 = ReportEntry4(
+ k.childOrNull("NtryRef") { text() },
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.child("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ k.childOrNull("RvslInd") { text().xmlBoolean() },
+ k.child("Sts") { EntryStatus2Code.valueOf(text()) },
+ k.childOrNull("BookgDt") { DateAndDateTimeChoice.parse(this) },
+ k.childOrNull("ValDt") { DateAndDateTimeChoice.parse(this) },
+ k.childOrNull("AcctSvcrRef") { text() },
+ k.children("Avlbty") { CashBalanceAvailability2.parse(this) },
+ k.child("BkTxCd") { BankTransactionCodeStructure4.parse(this) },
+ k.childOrNull("ComssnWvrInd") { text().xmlBoolean() },
+ k.childOrNull("AddtlInfInd") { MessageIdentification2.parse(this) },
+ k.childOrNull("AmtDtls") { AmountAndCurrencyExchange3.parse(this) },
+ k.childOrNull("Chrgs") { Charges4.parse(this) },
+ k.childOrNull("TechInptChanl") { TechnicalInputChannel1Choice.parse(this) },
+ k.childOrNull("Intrst") { TransactionInterest3.parse(this) },
+ k.childOrNull("CardTx") { CardEntry1.parse(this) },
+ k.children("NtryDtls") { EntryDetails3.parse(this) },
+ k.childOrNull("AddtlNtryInf") { text() },
+ )
+ }
+}
+
+data class SecuritiesAccount13(
+ val Id: String,
+ val Tp: GenericIdentification20?,
+ val Nm: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): SecuritiesAccount13 = SecuritiesAccount13(
+ k.child("Id") { text() },
+ k.childOrNull("Tp") { GenericIdentification20.parse(this) },
+ k.childOrNull("Nm") { text() },
+ )
+ }
+}
+
+data class SecurityIdentification14(
+ val ISIN: String?,
+ val OthrId: List<OtherIdentification1>,
+ val Desc: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): SecurityIdentification14 = SecurityIdentification14(
+ k.childOrNull("ISIN") { text() },
+ k.children("OthrId") { OtherIdentification1.parse(this) },
+ k.childOrNull("Desc") { text() },
+ )
+ }
+}
+
+data class StructuredRemittanceInformation9(
+ val RfrdDocInf: List<ReferredDocumentInformation3>,
+ val RfrdDocAmt: RemittanceAmount2?,
+ val CdtrRefInf: CreditorReferenceInformation2?,
+ val Invcr: PartyIdentification43?,
+ val Invcee: PartyIdentification43?,
+ val AddtlRmtInf: List<String>,
+) {
+ companion object {
+ fun parse(k: Konsumer): StructuredRemittanceInformation9 = StructuredRemittanceInformation9(
+ k.children("RfrdDocInf") { ReferredDocumentInformation3.parse(this) },
+ k.childOrNull("RfrdDocAmt") { RemittanceAmount2.parse(this) },
+ k.childOrNull("CdtrRefInf") { CreditorReferenceInformation2.parse(this) },
+ k.childOrNull("Invcr") { PartyIdentification43.parse(this) },
+ k.childOrNull("Invcee") { PartyIdentification43.parse(this) },
+ k.children("AddtlRmtInf", maxCount=3) { text() },
+ )
+ }
+}
+
+data class TaxAmount1(
+ val Rate: Float?,
+ val TaxblBaseAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val TtlAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val Dtls: List<TaxRecordDetails1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxAmount1 = TaxAmount1(
+ k.childOrNull("Rate") { text().xmlFloat() },
+ k.childOrNull("TaxblBaseAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("TtlAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.children("Dtls") { TaxRecordDetails1.parse(this) },
+ )
+ }
+}
+
+data class TaxInformation3(
+ val Cdtr: TaxParty1?,
+ val Dbtr: TaxParty2?,
+ val AdmstnZn: String?,
+ val RefNb: String?,
+ val Mtd: String?,
+ val TtlTaxblBaseAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val TtlTaxAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val Dt: LocalDate?,
+ val SeqNb: Float?,
+ val Rcrd: List<TaxRecord1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxInformation3 = TaxInformation3(
+ k.childOrNull("Cdtr") { TaxParty1.parse(this) },
+ k.childOrNull("Dbtr") { TaxParty2.parse(this) },
+ k.childOrNull("AdmstnZn") { text() },
+ k.childOrNull("RefNb") { text() },
+ k.childOrNull("Mtd") { text() },
+ k.childOrNull("TtlTaxblBaseAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("TtlTaxAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("Dt") { text().toDate() },
+ k.childOrNull("SeqNb") { text().xmlFloat() },
+ k.children("Rcrd") { TaxRecord1.parse(this) },
+ )
+ }
+}
+
+data class TaxPeriod1(
+ val Yr: LocalDate?,
+ val Tp: TaxRecordPeriod1Code?,
+ val FrToDt: DatePeriodDetails?,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxPeriod1 = TaxPeriod1(
+ k.childOrNull("Yr") { text().toDate() },
+ k.childOrNull("Tp") { TaxRecordPeriod1Code.valueOf(text()) },
+ k.childOrNull("FrToDt") { DatePeriodDetails.parse(this) },
+ )
+ }
+}
+
+data class TaxRecord1(
+ val Tp: String?,
+ val Ctgy: String?,
+ val CtgyDtls: String?,
+ val DbtrSts: String?,
+ val CertId: String?,
+ val FrmsCd: String?,
+ val Prd: TaxPeriod1?,
+ val TaxAmt: TaxAmount1?,
+ val AddtlInf: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxRecord1 = TaxRecord1(
+ k.childOrNull("Tp") { text() },
+ k.childOrNull("Ctgy") { text() },
+ k.childOrNull("CtgyDtls") { text() },
+ k.childOrNull("DbtrSts") { text() },
+ k.childOrNull("CertId") { text() },
+ k.childOrNull("FrmsCd") { text() },
+ k.childOrNull("Prd") { TaxPeriod1.parse(this) },
+ k.childOrNull("TaxAmt") { TaxAmount1.parse(this) },
+ k.childOrNull("AddtlInf") { text() },
+ )
+ }
+}
+
+data class TaxRecordDetails1(
+ val Prd: TaxPeriod1?,
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxRecordDetails1 = TaxRecordDetails1(
+ k.childOrNull("Prd") { TaxPeriod1.parse(this) },
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ )
+ }
+}
+
+data class TotalTransactions4(
+ val TtlNtries: NumberAndSumOfTransactions4?,
+ val TtlCdtNtries: NumberAndSumOfTransactions1?,
+ val TtlDbtNtries: NumberAndSumOfTransactions1?,
+ val TtlNtriesPerBkTxCd: List<TotalsPerBankTransactionCode3>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TotalTransactions4 = TotalTransactions4(
+ k.childOrNull("TtlNtries") { NumberAndSumOfTransactions4.parse(this) },
+ k.childOrNull("TtlCdtNtries") { NumberAndSumOfTransactions1.parse(this) },
+ k.childOrNull("TtlDbtNtries") { NumberAndSumOfTransactions1.parse(this) },
+ k.children("TtlNtriesPerBkTxCd") { TotalsPerBankTransactionCode3.parse(this) },
+ )
+ }
+}
+
+data class TotalsPerBankTransactionCode3(
+ val NbOfNtries: String?,
+ val Sum: Float?,
+ val TtlNetNtry: AmountAndDirection35?,
+ val FcstInd: Boolean?,
+ val BkTxCd: BankTransactionCodeStructure4,
+ val Avlbty: List<CashBalanceAvailability2>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TotalsPerBankTransactionCode3 = TotalsPerBankTransactionCode3(
+ k.childOrNull("NbOfNtries") { text() },
+ k.childOrNull("Sum") { text().xmlFloat() },
+ k.childOrNull("TtlNetNtry") { AmountAndDirection35.parse(this) },
+ k.childOrNull("FcstInd") { text().xmlBoolean() },
+ k.child("BkTxCd") { BankTransactionCodeStructure4.parse(this) },
+ k.children("Avlbty") { CashBalanceAvailability2.parse(this) },
+ )
+ }
+}
+
+data class TransactionAgents3(
+ val DbtrAgt: BranchAndFinancialInstitutionIdentification5?,
+ val CdtrAgt: BranchAndFinancialInstitutionIdentification5?,
+ val IntrmyAgt1: BranchAndFinancialInstitutionIdentification5?,
+ val IntrmyAgt2: BranchAndFinancialInstitutionIdentification5?,
+ val IntrmyAgt3: BranchAndFinancialInstitutionIdentification5?,
+ val RcvgAgt: BranchAndFinancialInstitutionIdentification5?,
+ val DlvrgAgt: BranchAndFinancialInstitutionIdentification5?,
+ val IssgAgt: BranchAndFinancialInstitutionIdentification5?,
+ val SttlmPlc: BranchAndFinancialInstitutionIdentification5?,
+ val Prtry: List<ProprietaryAgent3>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TransactionAgents3 = TransactionAgents3(
+ k.childOrNull("DbtrAgt") { BranchAndFinancialInstitutionIdentification5.parse(this) },
+ k.childOrNull("CdtrAgt") { BranchAndFinancialInstitutionIdentification5.parse(this) },
+ k.childOrNull("IntrmyAgt1") { BranchAndFinancialInstitutionIdentification5.parse(this) },
+ k.childOrNull("IntrmyAgt2") { BranchAndFinancialInstitutionIdentification5.parse(this) },
+ k.childOrNull("IntrmyAgt3") { BranchAndFinancialInstitutionIdentification5.parse(this) },
+ k.childOrNull("RcvgAgt") { BranchAndFinancialInstitutionIdentification5.parse(this) },
+ k.childOrNull("DlvrgAgt") { BranchAndFinancialInstitutionIdentification5.parse(this) },
+ k.childOrNull("IssgAgt") { BranchAndFinancialInstitutionIdentification5.parse(this) },
+ k.childOrNull("SttlmPlc") { BranchAndFinancialInstitutionIdentification5.parse(this) },
+ k.children("Prtry") { ProprietaryAgent3.parse(this) },
+ )
+ }
+}
+
+data class TransactionDates2(
+ val AccptncDtTm: LocalDateTime?,
+ val TradActvtyCtrctlSttlmDt: LocalDate?,
+ val TradDt: LocalDate?,
+ val IntrBkSttlmDt: LocalDate?,
+ val StartDt: LocalDate?,
+ val EndDt: LocalDate?,
+ val TxDtTm: LocalDateTime?,
+ val Prtry: List<ProprietaryDate2>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TransactionDates2 = TransactionDates2(
+ k.childOrNull("AccptncDtTm") { text().toDateTime() },
+ k.childOrNull("TradActvtyCtrctlSttlmDt") { text().toDate() },
+ k.childOrNull("TradDt") { text().toDate() },
+ k.childOrNull("IntrBkSttlmDt") { text().toDate() },
+ k.childOrNull("StartDt") { text().toDate() },
+ k.childOrNull("EndDt") { text().toDate() },
+ k.childOrNull("TxDtTm") { text().toDateTime() },
+ k.children("Prtry") { ProprietaryDate2.parse(this) },
+ )
+ }
+}
+
+data class TransactionInterest3(
+ val TtlIntrstAndTaxAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val Rcrd: List<InterestRecord1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TransactionInterest3 = TransactionInterest3(
+ k.childOrNull("TtlIntrstAndTaxAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.children("Rcrd") { InterestRecord1.parse(this) },
+ )
+ }
+}
+
+data class TransactionParties3(
+ val InitgPty: PartyIdentification43?,
+ val Dbtr: PartyIdentification43?,
+ val DbtrAcct: CashAccount24?,
+ val UltmtDbtr: PartyIdentification43?,
+ val Cdtr: PartyIdentification43?,
+ val CdtrAcct: CashAccount24?,
+ val UltmtCdtr: PartyIdentification43?,
+ val TradgPty: PartyIdentification43?,
+ val Prtry: List<ProprietaryParty3>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TransactionParties3 = TransactionParties3(
+ k.childOrNull("InitgPty") { PartyIdentification43.parse(this) },
+ k.childOrNull("Dbtr") { PartyIdentification43.parse(this) },
+ k.childOrNull("DbtrAcct") { CashAccount24.parse(this) },
+ k.childOrNull("UltmtDbtr") { PartyIdentification43.parse(this) },
+ k.childOrNull("Cdtr") { PartyIdentification43.parse(this) },
+ k.childOrNull("CdtrAcct") { CashAccount24.parse(this) },
+ k.childOrNull("UltmtCdtr") { PartyIdentification43.parse(this) },
+ k.childOrNull("TradgPty") { PartyIdentification43.parse(this) },
+ k.children("Prtry") { ProprietaryParty3.parse(this) },
+ )
+ }
+}
+
+sealed interface TransactionPrice3Choice {
+ @JvmInline
+ value class DealPric(val value: Price2): TransactionPrice3Choice
+ @JvmInline
+ value class Prtry(val value: ProprietaryPrice2): TransactionPrice3Choice
+
+ companion object {
+ fun parse(k: Konsumer): TransactionPrice3Choice = k.child(Names.of("DealPric", "Prtry")) {
+ when (localName) {
+ "DealPric" -> DealPric(Price2.parse(this))
+ "Prtry" -> Prtry(ProprietaryPrice2.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+sealed interface TransactionQuantities2Choice {
+ @JvmInline
+ value class Qty(val value: FinancialInstrumentQuantityChoice): TransactionQuantities2Choice
+ @JvmInline
+ value class OrgnlAndCurFaceAmt(val value: OriginalAndCurrentQuantities1): TransactionQuantities2Choice
+ @JvmInline
+ value class Prtry(val value: ProprietaryQuantity1): TransactionQuantities2Choice
+
+ companion object {
+ fun parse(k: Konsumer): TransactionQuantities2Choice = k.child(Names.of("Qty", "OrgnlAndCurFaceAmt", "Prtry")) {
+ when (localName) {
+ "Qty" -> Qty(FinancialInstrumentQuantityChoice.parse(this))
+ "OrgnlAndCurFaceAmt" -> OrgnlAndCurFaceAmt(OriginalAndCurrentQuantities1.parse(this))
+ "Prtry" -> Prtry(ProprietaryQuantity1.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class TransactionReferences3(
+ val MsgId: String?,
+ val AcctSvcrRef: String?,
+ val PmtInfId: String?,
+ val InstrId: String?,
+ val EndToEndId: String?,
+ val TxId: String?,
+ val MndtId: String?,
+ val ChqNb: String?,
+ val ClrSysRef: String?,
+ val AcctOwnrTxId: String?,
+ val AcctSvcrTxId: String?,
+ val MktInfrstrctrTxId: String?,
+ val PrcgId: String?,
+ val Prtry: List<ProprietaryReference1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TransactionReferences3 = TransactionReferences3(
+ k.childOrNull("MsgId") { text() },
+ k.childOrNull("AcctSvcrRef") { text() },
+ k.childOrNull("PmtInfId") { text() },
+ k.childOrNull("InstrId") { text() },
+ k.childOrNull("EndToEndId") { text() },
+ k.childOrNull("TxId") { text() },
+ k.childOrNull("MndtId") { text() },
+ k.childOrNull("ChqNb") { text() },
+ k.childOrNull("ClrSysRef") { text() },
+ k.childOrNull("AcctOwnrTxId") { text() },
+ k.childOrNull("AcctSvcrTxId") { text() },
+ k.childOrNull("MktInfrstrctrTxId") { text() },
+ k.childOrNull("PrcgId") { text() },
+ k.children("Prtry") { ProprietaryReference1.parse(this) },
+ )
+ }
+}
+
diff --git a/ebics/src/main/kotlin/iso20022/camt_054_001_08.kt b/ebics/src/main/kotlin/iso20022/camt_054_001_08.kt
new file mode 100644
index 00000000..fd29a803
--- /dev/null
+++ b/ebics/src/main/kotlin/iso20022/camt_054_001_08.kt
@@ -0,0 +1,1217 @@
+/*
+ * This file is part of LibEuFin.
+ * 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
+ * published by the Free Software Foundation; either version 3, or
+ * (at your option) any later version.
+
+ * LibEuFin is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+ * Public License for more details.
+
+ * You should have received a copy of the GNU Affero General Public
+ * License along with LibEuFin; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>
+ */
+
+// THIS FILE IS GENERATED, DO NOT EDIT
+
+package tech.libeufin.ebics.iso20022
+
+import java.time.*
+import java.util.*
+import com.gitlab.mvysny.konsumexml.*
+
+
+data class AccountInterest4(
+ val Tp: InterestType1Choice?,
+ val Rate: List<Rate4>,
+ val FrToDt: DateTimePeriod1?,
+ val Rsn: String?,
+ val Tax: TaxCharges2?,
+) {
+ companion object {
+ fun parse(k: Konsumer): AccountInterest4 = AccountInterest4(
+ k.childOrNull("Tp") { InterestType1Choice.parse(this) },
+ k.children("Rate") { Rate4.parse(this) },
+ k.childOrNull("FrToDt") { DateTimePeriod1.parse(this) },
+ k.childOrNull("Rsn") { text() },
+ k.childOrNull("Tax") { TaxCharges2.parse(this) },
+ )
+ }
+}
+
+data class AccountNotification17(
+ val Id: String,
+ val NtfctnPgntn: Pagination1?,
+ val ElctrncSeqNb: Float?,
+ val RptgSeq: SequenceRange1Choice?,
+ val LglSeqNb: Float?,
+ val CreDtTm: LocalDateTime?,
+ val FrToDt: DateTimePeriod1?,
+ val CpyDplctInd: CopyDuplicate1Code?,
+ val RptgSrc: ReportingSource1Choice?,
+ val Acct: CashAccount39,
+ val RltdAcct: CashAccount38?,
+ val Intrst: List<AccountInterest4>,
+ val TxsSummry: TotalTransactions6?,
+ val Ntry: List<ReportEntry10>,
+ val AddtlNtfctnInf: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): AccountNotification17 = AccountNotification17(
+ k.child("Id") { text() },
+ k.childOrNull("NtfctnPgntn") { Pagination1.parse(this) },
+ k.childOrNull("ElctrncSeqNb") { text().xmlFloat() },
+ k.childOrNull("RptgSeq") { SequenceRange1Choice.parse(this) },
+ k.childOrNull("LglSeqNb") { text().xmlFloat() },
+ k.childOrNull("CreDtTm") { text().toDateTime() },
+ k.childOrNull("FrToDt") { DateTimePeriod1.parse(this) },
+ k.childOrNull("CpyDplctInd") { CopyDuplicate1Code.valueOf(text()) },
+ k.childOrNull("RptgSrc") { ReportingSource1Choice.parse(this) },
+ k.child("Acct") { CashAccount39.parse(this) },
+ k.childOrNull("RltdAcct") { CashAccount38.parse(this) },
+ k.children("Intrst") { AccountInterest4.parse(this) },
+ k.childOrNull("TxsSummry") { TotalTransactions6.parse(this) },
+ k.children("Ntry") { ReportEntry10.parse(this) },
+ k.childOrNull("AddtlNtfctnInf") { text() },
+ )
+ }
+}
+
+data class ActiveOrHistoricCurrencyAndAmountRange2(
+ val Amt: ImpliedCurrencyAmountRange1Choice,
+ val CdtDbtInd: CreditDebitCode?,
+ val Ccy: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): ActiveOrHistoricCurrencyAndAmountRange2 = ActiveOrHistoricCurrencyAndAmountRange2(
+ k.child("Amt") { ImpliedCurrencyAmountRange1Choice.parse(this) },
+ k.childOrNull("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ k.child("Ccy") { text() },
+ )
+ }
+}
+
+enum class AttendanceContext1Code {
+ ATTD,
+ SATT,
+ UATT,
+}
+
+enum class AuthenticationEntity1Code {
+ ICCD,
+ AGNT,
+ MERC,
+}
+
+enum class AuthenticationMethod1Code {
+ UKNW,
+ BYPS,
+ NPIN,
+ FPIN,
+ CPSG,
+ PPSG,
+ MANU,
+ MERC,
+ SCRT,
+ SNCT,
+ SCNL,
+}
+
+data class BankToCustomerDebitCreditNotificationV08(
+ val GrpHdr: GroupHeader81,
+ val Ntfctn: List<AccountNotification17>,
+ val SplmtryData: List<SupplementaryData1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): BankToCustomerDebitCreditNotificationV08 = BankToCustomerDebitCreditNotificationV08(
+ k.child("GrpHdr") { GroupHeader81.parse(this) },
+ k.children("Ntfctn", minCount=1, ) { AccountNotification17.parse(this) },
+ k.children("SplmtryData") { SupplementaryData1.parse(this) },
+ )
+ }
+}
+
+data class CardAggregated2(
+ val AddtlSvc: CardPaymentServiceType2Code?,
+ val TxCtgy: String?,
+ val SaleRcncltnId: String?,
+ val SeqNbRg: CardSequenceNumberRange1?,
+ val TxDtRg: DateOrDateTimePeriod1Choice?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CardAggregated2 = CardAggregated2(
+ k.childOrNull("AddtlSvc") { CardPaymentServiceType2Code.valueOf(text()) },
+ k.childOrNull("TxCtgy") { text() },
+ k.childOrNull("SaleRcncltnId") { text() },
+ k.childOrNull("SeqNbRg") { CardSequenceNumberRange1.parse(this) },
+ k.childOrNull("TxDtRg") { DateOrDateTimePeriod1Choice.parse(this) },
+ )
+ }
+}
+
+data class CardEntry4(
+ val Card: PaymentCard4?,
+ val POI: PointOfInteraction1?,
+ val AggtdNtry: CardAggregated2?,
+ val PrePdAcct: CashAccount38?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CardEntry4 = CardEntry4(
+ k.childOrNull("Card") { PaymentCard4.parse(this) },
+ k.childOrNull("POI") { PointOfInteraction1.parse(this) },
+ k.childOrNull("AggtdNtry") { CardAggregated2.parse(this) },
+ k.childOrNull("PrePdAcct") { CashAccount38.parse(this) },
+ )
+ }
+}
+
+data class CardIndividualTransaction2(
+ val ICCRltdData: String?,
+ val PmtCntxt: PaymentContext3?,
+ val AddtlSvc: CardPaymentServiceType2Code?,
+ val TxCtgy: String?,
+ val SaleRcncltnId: String?,
+ val SaleRefNb: String?,
+ val RePresntmntRsn: ExternalRePresentmentReason1Code?,
+ val SeqNb: String?,
+ val TxId: TransactionIdentifier1?,
+ val Pdct: Product2?,
+ val VldtnDt: LocalDate?,
+ val VldtnSeqNb: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CardIndividualTransaction2 = CardIndividualTransaction2(
+ k.childOrNull("ICCRltdData") { text() },
+ k.childOrNull("PmtCntxt") { PaymentContext3.parse(this) },
+ k.childOrNull("AddtlSvc") { CardPaymentServiceType2Code.valueOf(text()) },
+ k.childOrNull("TxCtgy") { text() },
+ k.childOrNull("SaleRcncltnId") { text() },
+ k.childOrNull("SaleRefNb") { text() },
+ k.childOrNull("RePresntmntRsn") { text().xmlCodeSet<ExternalRePresentmentReason1Code>() },
+ k.childOrNull("SeqNb") { text() },
+ k.childOrNull("TxId") { TransactionIdentifier1.parse(this) },
+ k.childOrNull("Pdct") { Product2.parse(this) },
+ k.childOrNull("VldtnDt") { text().toDate() },
+ k.childOrNull("VldtnSeqNb") { text() },
+ )
+ }
+}
+
+data class CardTransaction17(
+ val Card: PaymentCard4?,
+ val POI: PointOfInteraction1?,
+ val Tx: CardTransaction3Choice?,
+ val PrePdAcct: CashAccount38?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CardTransaction17 = CardTransaction17(
+ k.childOrNull("Card") { PaymentCard4.parse(this) },
+ k.childOrNull("POI") { PointOfInteraction1.parse(this) },
+ k.childOrNull("Tx") { CardTransaction3Choice.parse(this) },
+ k.childOrNull("PrePdAcct") { CashAccount38.parse(this) },
+ )
+ }
+}
+
+sealed interface CardTransaction3Choice {
+ @JvmInline
+ value class Aggtd(val value: CardAggregated2): CardTransaction3Choice
+ @JvmInline
+ value class Indv(val value: CardIndividualTransaction2): CardTransaction3Choice
+
+ companion object {
+ fun parse(k: Konsumer): CardTransaction3Choice = k.child(Names.of("Aggtd", "Indv")) {
+ when (localName) {
+ "Aggtd" -> Aggtd(CardAggregated2.parse(this))
+ "Indv" -> Indv(CardIndividualTransaction2.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class CardholderAuthentication2(
+ val AuthntcnMtd: AuthenticationMethod1Code,
+ val AuthntcnNtty: AuthenticationEntity1Code,
+) {
+ companion object {
+ fun parse(k: Konsumer): CardholderAuthentication2 = CardholderAuthentication2(
+ k.child("AuthntcnMtd") { AuthenticationMethod1Code.valueOf(text()) },
+ k.child("AuthntcnNtty") { AuthenticationEntity1Code.valueOf(text()) },
+ )
+ }
+}
+
+data class CashAccount38(
+ val Id: AccountIdentification4Choice,
+ val Tp: CashAccountType2Choice?,
+ val Ccy: String?,
+ val Nm: String?,
+ val Prxy: ProxyAccountIdentification1?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CashAccount38 = CashAccount38(
+ k.child("Id") { AccountIdentification4Choice.parse(this) },
+ k.childOrNull("Tp") { CashAccountType2Choice.parse(this) },
+ k.childOrNull("Ccy") { text() },
+ k.childOrNull("Nm") { text() },
+ k.childOrNull("Prxy") { ProxyAccountIdentification1.parse(this) },
+ )
+ }
+}
+
+data class CashAccount39(
+ val Id: AccountIdentification4Choice,
+ val Tp: CashAccountType2Choice?,
+ val Ccy: String?,
+ val Nm: String?,
+ val Prxy: ProxyAccountIdentification1?,
+ val Ownr: PartyIdentification135?,
+ val Svcr: BranchAndFinancialInstitutionIdentification6?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CashAccount39 = CashAccount39(
+ k.child("Id") { AccountIdentification4Choice.parse(this) },
+ k.childOrNull("Tp") { CashAccountType2Choice.parse(this) },
+ k.childOrNull("Ccy") { text() },
+ k.childOrNull("Nm") { text() },
+ k.childOrNull("Prxy") { ProxyAccountIdentification1.parse(this) },
+ k.childOrNull("Ownr") { PartyIdentification135.parse(this) },
+ k.childOrNull("Svcr") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ )
+ }
+}
+
+data class CashAvailability1(
+ val Dt: CashAvailabilityDate1Choice,
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val CdtDbtInd: CreditDebitCode,
+) {
+ companion object {
+ fun parse(k: Konsumer): CashAvailability1 = CashAvailability1(
+ k.child("Dt") { CashAvailabilityDate1Choice.parse(this) },
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.child("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ )
+ }
+}
+
+sealed interface CashAvailabilityDate1Choice {
+ @JvmInline
+ value class NbOfDays(val value: String): CashAvailabilityDate1Choice
+ @JvmInline
+ value class ActlDt(val value: LocalDate): CashAvailabilityDate1Choice
+
+ companion object {
+ fun parse(k: Konsumer): CashAvailabilityDate1Choice = k.child(Names.of("NbOfDays", "ActlDt")) {
+ when (localName) {
+ "NbOfDays" -> NbOfDays(text())
+ "ActlDt" -> ActlDt(text().toDate())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class Charges6(
+ val TtlChrgsAndTaxAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val Rcrd: List<ChargesRecord3>,
+) {
+ companion object {
+ fun parse(k: Konsumer): Charges6 = Charges6(
+ k.childOrNull("TtlChrgsAndTaxAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.children("Rcrd") { ChargesRecord3.parse(this) },
+ )
+ }
+}
+
+data class ChargesRecord3(
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val CdtDbtInd: CreditDebitCode?,
+ val ChrgInclInd: Boolean?,
+ val Tp: ChargeType3Choice?,
+ val Rate: Float?,
+ val Br: ChargeBearerType1Code?,
+ val Agt: BranchAndFinancialInstitutionIdentification6?,
+ val Tax: TaxCharges2?,
+) {
+ companion object {
+ fun parse(k: Konsumer): ChargesRecord3 = ChargesRecord3(
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ k.childOrNull("ChrgInclInd") { text().xmlBoolean() },
+ k.childOrNull("Tp") { ChargeType3Choice.parse(this) },
+ k.childOrNull("Rate") { text().xmlFloat() },
+ k.childOrNull("Br") { ChargeBearerType1Code.valueOf(text()) },
+ k.childOrNull("Agt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("Tax") { TaxCharges2.parse(this) },
+ )
+ }
+}
+
+sealed interface DateOrDateTimePeriod1Choice {
+ @JvmInline
+ value class Dt(val value: DatePeriod2): DateOrDateTimePeriod1Choice
+ @JvmInline
+ value class DtTm(val value: DateTimePeriod1): DateOrDateTimePeriod1Choice
+
+ companion object {
+ fun parse(k: Konsumer): DateOrDateTimePeriod1Choice = k.child(Names.of("Dt", "DtTm")) {
+ when (localName) {
+ "Dt" -> Dt(DatePeriod2.parse(this))
+ "DtTm" -> DtTm(DateTimePeriod1.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class DateTimePeriod1(
+ val FrDtTm: LocalDateTime,
+ val ToDtTm: LocalDateTime,
+) {
+ companion object {
+ fun parse(k: Konsumer): DateTimePeriod1 = DateTimePeriod1(
+ k.child("FrDtTm") { text().toDateTime() },
+ k.child("ToDtTm") { text().toDateTime() },
+ )
+ }
+}
+
+data class camt_054_001_08(
+ val BkToCstmrDbtCdtNtfctn: BankToCustomerDebitCreditNotificationV08,
+) {
+ companion object {
+ fun parse(k: Konsumer): camt_054_001_08 = camt_054_001_08(
+ k.child("BkToCstmrDbtCdtNtfctn") { BankToCustomerDebitCreditNotificationV08.parse(this) },
+ )
+ }
+}
+
+data class EntryDetails9(
+ val Btch: BatchInformation2?,
+ val TxDtls: List<EntryTransaction10>,
+) {
+ companion object {
+ fun parse(k: Konsumer): EntryDetails9 = EntryDetails9(
+ k.childOrNull("Btch") { BatchInformation2.parse(this) },
+ k.children("TxDtls") { EntryTransaction10.parse(this) },
+ )
+ }
+}
+
+sealed interface EntryStatus1Choice {
+ @JvmInline
+ value class Cd(val value: ExternalEntryStatus1Code): EntryStatus1Choice
+ @JvmInline
+ value class Prtry(val value: String): EntryStatus1Choice
+
+ companion object {
+ fun parse(k: Konsumer): EntryStatus1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalEntryStatus1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class EntryTransaction10(
+ val Refs: TransactionReferences6?,
+ val Amt: ActiveOrHistoricCurrencyAndAmount?,
+ val CdtDbtInd: CreditDebitCode?,
+ val AmtDtls: AmountAndCurrencyExchange3?,
+ val Avlbty: List<CashAvailability1>,
+ val BkTxCd: BankTransactionCodeStructure4?,
+ val Chrgs: Charges6?,
+ val Intrst: TransactionInterest4?,
+ val RltdPties: TransactionParties6?,
+ val RltdAgts: TransactionAgents5?,
+ val LclInstrm: LocalInstrument2Choice?,
+ val Purp: Purpose2Choice?,
+ val RltdRmtInf: List<RemittanceLocation7>,
+ val RmtInf: RemittanceInformation16?,
+ val RltdDts: TransactionDates3?,
+ val RltdPric: TransactionPrice4Choice?,
+ val RltdQties: List<TransactionQuantities3Choice>,
+ val FinInstrmId: SecurityIdentification19?,
+ val Tax: TaxInformation8?,
+ val RtrInf: PaymentReturnReason5?,
+ val CorpActn: CorporateAction9?,
+ val SfkpgAcct: SecuritiesAccount19?,
+ val CshDpst: List<CashDeposit1>,
+ val CardTx: CardTransaction17?,
+ val AddtlTxInf: String?,
+ val SplmtryData: List<SupplementaryData1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): EntryTransaction10 = EntryTransaction10(
+ k.childOrNull("Refs") { TransactionReferences6.parse(this) },
+ k.childOrNull("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ k.childOrNull("AmtDtls") { AmountAndCurrencyExchange3.parse(this) },
+ k.children("Avlbty") { CashAvailability1.parse(this) },
+ k.childOrNull("BkTxCd") { BankTransactionCodeStructure4.parse(this) },
+ k.childOrNull("Chrgs") { Charges6.parse(this) },
+ k.childOrNull("Intrst") { TransactionInterest4.parse(this) },
+ k.childOrNull("RltdPties") { TransactionParties6.parse(this) },
+ k.childOrNull("RltdAgts") { TransactionAgents5.parse(this) },
+ k.childOrNull("LclInstrm") { LocalInstrument2Choice.parse(this) },
+ k.childOrNull("Purp") { Purpose2Choice.parse(this) },
+ k.children("RltdRmtInf", maxCount=10) { RemittanceLocation7.parse(this) },
+ k.childOrNull("RmtInf") { RemittanceInformation16.parse(this) },
+ k.childOrNull("RltdDts") { TransactionDates3.parse(this) },
+ k.childOrNull("RltdPric") { TransactionPrice4Choice.parse(this) },
+ k.children("RltdQties") { TransactionQuantities3Choice.parse(this) },
+ k.childOrNull("FinInstrmId") { SecurityIdentification19.parse(this) },
+ k.childOrNull("Tax") { TaxInformation8.parse(this) },
+ k.childOrNull("RtrInf") { PaymentReturnReason5.parse(this) },
+ k.childOrNull("CorpActn") { CorporateAction9.parse(this) },
+ k.childOrNull("SfkpgAcct") { SecuritiesAccount19.parse(this) },
+ k.children("CshDpst") { CashDeposit1.parse(this) },
+ k.childOrNull("CardTx") { CardTransaction17.parse(this) },
+ k.childOrNull("AddtlTxInf") { text() },
+ k.children("SplmtryData") { SupplementaryData1.parse(this) },
+ )
+ }
+}
+
+sealed interface FinancialInstrumentQuantity1Choice {
+ @JvmInline
+ value class Unit(val value: Float): FinancialInstrumentQuantity1Choice
+ @JvmInline
+ value class FaceAmt(val value: Float): FinancialInstrumentQuantity1Choice
+ @JvmInline
+ value class AmtsdVal(val value: Float): FinancialInstrumentQuantity1Choice
+
+ companion object {
+ fun parse(k: Konsumer): FinancialInstrumentQuantity1Choice = k.child(Names.of("Unit", "FaceAmt", "AmtsdVal")) {
+ when (localName) {
+ "Unit" -> Unit(text().xmlFloat())
+ "FaceAmt" -> FaceAmt(text().xmlFloat())
+ "AmtsdVal" -> AmtsdVal(text().xmlFloat())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class FromToAmountRange1(
+ val FrAmt: AmountRangeBoundary1,
+ val ToAmt: AmountRangeBoundary1,
+) {
+ companion object {
+ fun parse(k: Konsumer): FromToAmountRange1 = FromToAmountRange1(
+ k.child("FrAmt") { AmountRangeBoundary1.parse(this) },
+ k.child("ToAmt") { AmountRangeBoundary1.parse(this) },
+ )
+ }
+}
+
+data class GroupHeader81(
+ val MsgId: String,
+ val CreDtTm: LocalDateTime,
+ val MsgRcpt: PartyIdentification135?,
+ val MsgPgntn: Pagination1?,
+ val OrgnlBizQry: OriginalBusinessQuery1?,
+ val AddtlInf: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GroupHeader81 = GroupHeader81(
+ k.child("MsgId") { text() },
+ k.child("CreDtTm") { text().toDateTime() },
+ k.childOrNull("MsgRcpt") { PartyIdentification135.parse(this) },
+ k.childOrNull("MsgPgntn") { Pagination1.parse(this) },
+ k.childOrNull("OrgnlBizQry") { OriginalBusinessQuery1.parse(this) },
+ k.childOrNull("AddtlInf") { text() },
+ )
+ }
+}
+
+sealed interface ImpliedCurrencyAmountRange1Choice {
+ @JvmInline
+ value class FrAmt(val value: AmountRangeBoundary1): ImpliedCurrencyAmountRange1Choice
+ @JvmInline
+ value class ToAmt(val value: AmountRangeBoundary1): ImpliedCurrencyAmountRange1Choice
+ @JvmInline
+ value class FrToAmt(val value: FromToAmountRange1): ImpliedCurrencyAmountRange1Choice
+ @JvmInline
+ value class EQAmt(val value: Float): ImpliedCurrencyAmountRange1Choice
+ @JvmInline
+ value class NEQAmt(val value: Float): ImpliedCurrencyAmountRange1Choice
+
+ companion object {
+ fun parse(k: Konsumer): ImpliedCurrencyAmountRange1Choice = k.child(Names.of("FrAmt", "ToAmt", "FrToAmt", "EQAmt", "NEQAmt")) {
+ when (localName) {
+ "FrAmt" -> FrAmt(AmountRangeBoundary1.parse(this))
+ "ToAmt" -> ToAmt(AmountRangeBoundary1.parse(this))
+ "FrToAmt" -> FrToAmt(FromToAmountRange1.parse(this))
+ "EQAmt" -> EQAmt(text().xmlFloat())
+ "NEQAmt" -> NEQAmt(text().xmlFloat())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class InterestRecord2(
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val CdtDbtInd: CreditDebitCode,
+ val Tp: InterestType1Choice?,
+ val Rate: Rate4?,
+ val FrToDt: DateTimePeriod1?,
+ val Rsn: String?,
+ val Tax: TaxCharges2?,
+) {
+ companion object {
+ fun parse(k: Konsumer): InterestRecord2 = InterestRecord2(
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.child("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ k.childOrNull("Tp") { InterestType1Choice.parse(this) },
+ k.childOrNull("Rate") { Rate4.parse(this) },
+ k.childOrNull("FrToDt") { DateTimePeriod1.parse(this) },
+ k.childOrNull("Rsn") { text() },
+ k.childOrNull("Tax") { TaxCharges2.parse(this) },
+ )
+ }
+}
+
+data class Pagination1(
+ val PgNb: String,
+ val LastPgInd: Boolean,
+) {
+ companion object {
+ fun parse(k: Konsumer): Pagination1 = Pagination1(
+ k.child("PgNb") { text() },
+ k.child("LastPgInd") { text().xmlBoolean() },
+ )
+ }
+}
+
+data class PaymentContext3(
+ val CardPres: Boolean?,
+ val CrdhldrPres: Boolean?,
+ val OnLineCntxt: Boolean?,
+ val AttndncCntxt: AttendanceContext1Code?,
+ val TxEnvt: TransactionEnvironment1Code?,
+ val TxChanl: TransactionChannel1Code?,
+ val AttndntMsgCpbl: Boolean?,
+ val AttndntLang: String?,
+ val CardDataNtryMd: CardDataReading1Code,
+ val FllbckInd: Boolean?,
+ val AuthntcnMtd: CardholderAuthentication2?,
+) {
+ companion object {
+ fun parse(k: Konsumer): PaymentContext3 = PaymentContext3(
+ k.childOrNull("CardPres") { text().xmlBoolean() },
+ k.childOrNull("CrdhldrPres") { text().xmlBoolean() },
+ k.childOrNull("OnLineCntxt") { text().xmlBoolean() },
+ k.childOrNull("AttndncCntxt") { AttendanceContext1Code.valueOf(text()) },
+ k.childOrNull("TxEnvt") { TransactionEnvironment1Code.valueOf(text()) },
+ k.childOrNull("TxChanl") { TransactionChannel1Code.valueOf(text()) },
+ k.childOrNull("AttndntMsgCpbl") { text().xmlBoolean() },
+ k.childOrNull("AttndntLang") { text() },
+ k.child("CardDataNtryMd") { CardDataReading1Code.valueOf(text()) },
+ k.childOrNull("FllbckInd") { text().xmlBoolean() },
+ k.childOrNull("AuthntcnMtd") { CardholderAuthentication2.parse(this) },
+ )
+ }
+}
+
+data class PaymentReturnReason5(
+ val OrgnlBkTxCd: BankTransactionCodeStructure4?,
+ val Orgtr: PartyIdentification135?,
+ val Rsn: ReturnReason5Choice?,
+ val AddtlInf: List<String>,
+) {
+ companion object {
+ fun parse(k: Konsumer): PaymentReturnReason5 = PaymentReturnReason5(
+ k.childOrNull("OrgnlBkTxCd") { BankTransactionCodeStructure4.parse(this) },
+ k.childOrNull("Orgtr") { PartyIdentification135.parse(this) },
+ k.childOrNull("Rsn") { ReturnReason5Choice.parse(this) },
+ k.children("AddtlInf") { text() },
+ )
+ }
+}
+
+data class Price7(
+ val Tp: YieldedOrValueType1Choice,
+ val Val: PriceRateOrAmount3Choice,
+) {
+ companion object {
+ fun parse(k: Konsumer): Price7 = Price7(
+ k.child("Tp") { YieldedOrValueType1Choice.parse(this) },
+ k.child("Val") { PriceRateOrAmount3Choice.parse(this) },
+ )
+ }
+}
+
+sealed interface PriceRateOrAmount3Choice {
+ @JvmInline
+ value class Rate(val value: Float): PriceRateOrAmount3Choice
+ @JvmInline
+ value class Amt(val value: ActiveOrHistoricCurrencyAnd13DecimalAmount): PriceRateOrAmount3Choice
+
+ companion object {
+ fun parse(k: Konsumer): PriceRateOrAmount3Choice = k.child(Names.of("Rate", "Amt")) {
+ when (localName) {
+ "Rate" -> Rate(text().xmlFloat())
+ "Amt" -> Amt(ActiveOrHistoricCurrencyAnd13DecimalAmount.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class ProprietaryAgent4(
+ val Tp: String,
+ val Agt: BranchAndFinancialInstitutionIdentification6,
+) {
+ companion object {
+ fun parse(k: Konsumer): ProprietaryAgent4 = ProprietaryAgent4(
+ k.child("Tp") { text() },
+ k.child("Agt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ )
+ }
+}
+
+data class ProprietaryDate3(
+ val Tp: String,
+ val Dt: DateAndDateTime2Choice,
+) {
+ companion object {
+ fun parse(k: Konsumer): ProprietaryDate3 = ProprietaryDate3(
+ k.child("Tp") { text() },
+ k.child("Dt") { DateAndDateTime2Choice.parse(this) },
+ )
+ }
+}
+
+data class ProprietaryParty5(
+ val Tp: String,
+ val Pty: Party40Choice,
+) {
+ companion object {
+ fun parse(k: Konsumer): ProprietaryParty5 = ProprietaryParty5(
+ k.child("Tp") { text() },
+ k.child("Pty") { Party40Choice.parse(this) },
+ )
+ }
+}
+
+data class Rate4(
+ val Tp: RateType4Choice,
+ val VldtyRg: ActiveOrHistoricCurrencyAndAmountRange2?,
+) {
+ companion object {
+ fun parse(k: Konsumer): Rate4 = Rate4(
+ k.child("Tp") { RateType4Choice.parse(this) },
+ k.childOrNull("VldtyRg") { ActiveOrHistoricCurrencyAndAmountRange2.parse(this) },
+ )
+ }
+}
+
+data class RemittanceInformation16(
+ val Ustrd: List<String>,
+ val Strd: List<StructuredRemittanceInformation16>,
+) {
+ companion object {
+ fun parse(k: Konsumer): RemittanceInformation16 = RemittanceInformation16(
+ k.children("Ustrd") { text() },
+ k.children("Strd") { StructuredRemittanceInformation16.parse(this) },
+ )
+ }
+}
+
+data class ReportEntry10(
+ val NtryRef: String?,
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val CdtDbtInd: CreditDebitCode,
+ val RvslInd: Boolean?,
+ val Sts: EntryStatus1Choice,
+ val BookgDt: DateAndDateTime2Choice?,
+ val ValDt: DateAndDateTime2Choice?,
+ val AcctSvcrRef: String?,
+ val Avlbty: List<CashAvailability1>,
+ val BkTxCd: BankTransactionCodeStructure4,
+ val ComssnWvrInd: Boolean?,
+ val AddtlInfInd: MessageIdentification2?,
+ val AmtDtls: AmountAndCurrencyExchange3?,
+ val Chrgs: Charges6?,
+ val TechInptChanl: TechnicalInputChannel1Choice?,
+ val Intrst: TransactionInterest4?,
+ val CardTx: CardEntry4?,
+ val NtryDtls: List<EntryDetails9>,
+ val AddtlNtryInf: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): ReportEntry10 = ReportEntry10(
+ k.childOrNull("NtryRef") { text() },
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.child("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ k.childOrNull("RvslInd") { text().xmlBoolean() },
+ k.child("Sts") { EntryStatus1Choice.parse(this) },
+ k.childOrNull("BookgDt") { DateAndDateTime2Choice.parse(this) },
+ k.childOrNull("ValDt") { DateAndDateTime2Choice.parse(this) },
+ k.childOrNull("AcctSvcrRef") { text() },
+ k.children("Avlbty") { CashAvailability1.parse(this) },
+ k.child("BkTxCd") { BankTransactionCodeStructure4.parse(this) },
+ k.childOrNull("ComssnWvrInd") { text().xmlBoolean() },
+ k.childOrNull("AddtlInfInd") { MessageIdentification2.parse(this) },
+ k.childOrNull("AmtDtls") { AmountAndCurrencyExchange3.parse(this) },
+ k.childOrNull("Chrgs") { Charges6.parse(this) },
+ k.childOrNull("TechInptChanl") { TechnicalInputChannel1Choice.parse(this) },
+ k.childOrNull("Intrst") { TransactionInterest4.parse(this) },
+ k.childOrNull("CardTx") { CardEntry4.parse(this) },
+ k.children("NtryDtls") { EntryDetails9.parse(this) },
+ k.childOrNull("AddtlNtryInf") { text() },
+ )
+ }
+}
+
+data class SecuritiesAccount19(
+ val Id: String,
+ val Tp: GenericIdentification30?,
+ val Nm: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): SecuritiesAccount19 = SecuritiesAccount19(
+ k.child("Id") { text() },
+ k.childOrNull("Tp") { GenericIdentification30.parse(this) },
+ k.childOrNull("Nm") { text() },
+ )
+ }
+}
+
+data class SecurityIdentification19(
+ val ISIN: String?,
+ val OthrId: List<OtherIdentification1>,
+ val Desc: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): SecurityIdentification19 = SecurityIdentification19(
+ k.childOrNull("ISIN") { text() },
+ k.children("OthrId") { OtherIdentification1.parse(this) },
+ k.childOrNull("Desc") { text() },
+ )
+ }
+}
+
+data class SequenceRange1(
+ val FrSeq: String,
+ val ToSeq: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): SequenceRange1 = SequenceRange1(
+ k.child("FrSeq") { text() },
+ k.child("ToSeq") { text() },
+ )
+ }
+}
+
+sealed interface SequenceRange1Choice {
+ @JvmInline
+ value class FrSeq(val value: String): SequenceRange1Choice
+ @JvmInline
+ value class ToSeq(val value: String): SequenceRange1Choice
+ @JvmInline
+ value class FrToSeq(val value: SequenceRange1): SequenceRange1Choice
+ @JvmInline
+ value class EQSeq(val value: String): SequenceRange1Choice
+ @JvmInline
+ value class NEQSeq(val value: String): SequenceRange1Choice
+
+ companion object {
+ fun parse(k: Konsumer): SequenceRange1Choice = k.child(Names.of("FrSeq", "ToSeq", "FrToSeq", "EQSeq", "NEQSeq")) {
+ when (localName) {
+ "FrSeq" -> FrSeq(text())
+ "ToSeq" -> ToSeq(text())
+ "FrToSeq" -> FrToSeq(SequenceRange1.parse(this))
+ "EQSeq" -> EQSeq(text())
+ "NEQSeq" -> NEQSeq(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class StructuredRemittanceInformation16(
+ val RfrdDocInf: List<ReferredDocumentInformation7>,
+ val RfrdDocAmt: RemittanceAmount2?,
+ val CdtrRefInf: CreditorReferenceInformation2?,
+ val Invcr: PartyIdentification135?,
+ val Invcee: PartyIdentification135?,
+ val TaxRmt: TaxInformation7?,
+ val GrnshmtRmt: Garnishment3?,
+ val AddtlRmtInf: List<String>,
+) {
+ companion object {
+ fun parse(k: Konsumer): StructuredRemittanceInformation16 = StructuredRemittanceInformation16(
+ k.children("RfrdDocInf") { ReferredDocumentInformation7.parse(this) },
+ k.childOrNull("RfrdDocAmt") { RemittanceAmount2.parse(this) },
+ k.childOrNull("CdtrRefInf") { CreditorReferenceInformation2.parse(this) },
+ k.childOrNull("Invcr") { PartyIdentification135.parse(this) },
+ k.childOrNull("Invcee") { PartyIdentification135.parse(this) },
+ k.childOrNull("TaxRmt") { TaxInformation7.parse(this) },
+ k.childOrNull("GrnshmtRmt") { Garnishment3.parse(this) },
+ k.children("AddtlRmtInf", maxCount=3) { text() },
+ )
+ }
+}
+
+data class TaxAmount2(
+ val Rate: Float?,
+ val TaxblBaseAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val TtlAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val Dtls: List<TaxRecordDetails2>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxAmount2 = TaxAmount2(
+ k.childOrNull("Rate") { text().xmlFloat() },
+ k.childOrNull("TaxblBaseAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("TtlAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.children("Dtls") { TaxRecordDetails2.parse(this) },
+ )
+ }
+}
+
+data class TaxInformation7(
+ val Cdtr: TaxParty1?,
+ val Dbtr: TaxParty2?,
+ val UltmtDbtr: TaxParty2?,
+ val AdmstnZone: String?,
+ val RefNb: String?,
+ val Mtd: String?,
+ val TtlTaxblBaseAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val TtlTaxAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val Dt: LocalDate?,
+ val SeqNb: Float?,
+ val Rcrd: List<TaxRecord2>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxInformation7 = TaxInformation7(
+ k.childOrNull("Cdtr") { TaxParty1.parse(this) },
+ k.childOrNull("Dbtr") { TaxParty2.parse(this) },
+ k.childOrNull("UltmtDbtr") { TaxParty2.parse(this) },
+ k.childOrNull("AdmstnZone") { text() },
+ k.childOrNull("RefNb") { text() },
+ k.childOrNull("Mtd") { text() },
+ k.childOrNull("TtlTaxblBaseAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("TtlTaxAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("Dt") { text().toDate() },
+ k.childOrNull("SeqNb") { text().xmlFloat() },
+ k.children("Rcrd") { TaxRecord2.parse(this) },
+ )
+ }
+}
+
+data class TaxInformation8(
+ val Cdtr: TaxParty1?,
+ val Dbtr: TaxParty2?,
+ val AdmstnZone: String?,
+ val RefNb: String?,
+ val Mtd: String?,
+ val TtlTaxblBaseAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val TtlTaxAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val Dt: LocalDate?,
+ val SeqNb: Float?,
+ val Rcrd: List<TaxRecord2>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxInformation8 = TaxInformation8(
+ k.childOrNull("Cdtr") { TaxParty1.parse(this) },
+ k.childOrNull("Dbtr") { TaxParty2.parse(this) },
+ k.childOrNull("AdmstnZone") { text() },
+ k.childOrNull("RefNb") { text() },
+ k.childOrNull("Mtd") { text() },
+ k.childOrNull("TtlTaxblBaseAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("TtlTaxAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("Dt") { text().toDate() },
+ k.childOrNull("SeqNb") { text().xmlFloat() },
+ k.children("Rcrd") { TaxRecord2.parse(this) },
+ )
+ }
+}
+
+data class TaxPeriod2(
+ val Yr: LocalDate?,
+ val Tp: TaxRecordPeriod1Code?,
+ val FrToDt: DatePeriod2?,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxPeriod2 = TaxPeriod2(
+ k.childOrNull("Yr") { text().toDate() },
+ k.childOrNull("Tp") { TaxRecordPeriod1Code.valueOf(text()) },
+ k.childOrNull("FrToDt") { DatePeriod2.parse(this) },
+ )
+ }
+}
+
+data class TaxRecord2(
+ val Tp: String?,
+ val Ctgy: String?,
+ val CtgyDtls: String?,
+ val DbtrSts: String?,
+ val CertId: String?,
+ val FrmsCd: String?,
+ val Prd: TaxPeriod2?,
+ val TaxAmt: TaxAmount2?,
+ val AddtlInf: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxRecord2 = TaxRecord2(
+ k.childOrNull("Tp") { text() },
+ k.childOrNull("Ctgy") { text() },
+ k.childOrNull("CtgyDtls") { text() },
+ k.childOrNull("DbtrSts") { text() },
+ k.childOrNull("CertId") { text() },
+ k.childOrNull("FrmsCd") { text() },
+ k.childOrNull("Prd") { TaxPeriod2.parse(this) },
+ k.childOrNull("TaxAmt") { TaxAmount2.parse(this) },
+ k.childOrNull("AddtlInf") { text() },
+ )
+ }
+}
+
+data class TaxRecordDetails2(
+ val Prd: TaxPeriod2?,
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxRecordDetails2 = TaxRecordDetails2(
+ k.childOrNull("Prd") { TaxPeriod2.parse(this) },
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ )
+ }
+}
+
+data class TotalTransactions6(
+ val TtlNtries: NumberAndSumOfTransactions4?,
+ val TtlCdtNtries: NumberAndSumOfTransactions1?,
+ val TtlDbtNtries: NumberAndSumOfTransactions1?,
+ val TtlNtriesPerBkTxCd: List<TotalsPerBankTransactionCode5>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TotalTransactions6 = TotalTransactions6(
+ k.childOrNull("TtlNtries") { NumberAndSumOfTransactions4.parse(this) },
+ k.childOrNull("TtlCdtNtries") { NumberAndSumOfTransactions1.parse(this) },
+ k.childOrNull("TtlDbtNtries") { NumberAndSumOfTransactions1.parse(this) },
+ k.children("TtlNtriesPerBkTxCd") { TotalsPerBankTransactionCode5.parse(this) },
+ )
+ }
+}
+
+data class TotalsPerBankTransactionCode5(
+ val NbOfNtries: String?,
+ val Sum: Float?,
+ val TtlNetNtry: AmountAndDirection35?,
+ val CdtNtries: NumberAndSumOfTransactions1?,
+ val DbtNtries: NumberAndSumOfTransactions1?,
+ val FcstInd: Boolean?,
+ val BkTxCd: BankTransactionCodeStructure4,
+ val Avlbty: List<CashAvailability1>,
+ val Dt: DateAndDateTime2Choice?,
+) {
+ companion object {
+ fun parse(k: Konsumer): TotalsPerBankTransactionCode5 = TotalsPerBankTransactionCode5(
+ k.childOrNull("NbOfNtries") { text() },
+ k.childOrNull("Sum") { text().xmlFloat() },
+ k.childOrNull("TtlNetNtry") { AmountAndDirection35.parse(this) },
+ k.childOrNull("CdtNtries") { NumberAndSumOfTransactions1.parse(this) },
+ k.childOrNull("DbtNtries") { NumberAndSumOfTransactions1.parse(this) },
+ k.childOrNull("FcstInd") { text().xmlBoolean() },
+ k.child("BkTxCd") { BankTransactionCodeStructure4.parse(this) },
+ k.children("Avlbty") { CashAvailability1.parse(this) },
+ k.childOrNull("Dt") { DateAndDateTime2Choice.parse(this) },
+ )
+ }
+}
+
+data class TransactionAgents5(
+ val InstgAgt: BranchAndFinancialInstitutionIdentification6?,
+ val InstdAgt: BranchAndFinancialInstitutionIdentification6?,
+ val DbtrAgt: BranchAndFinancialInstitutionIdentification6?,
+ val CdtrAgt: BranchAndFinancialInstitutionIdentification6?,
+ val IntrmyAgt1: BranchAndFinancialInstitutionIdentification6?,
+ val IntrmyAgt2: BranchAndFinancialInstitutionIdentification6?,
+ val IntrmyAgt3: BranchAndFinancialInstitutionIdentification6?,
+ val RcvgAgt: BranchAndFinancialInstitutionIdentification6?,
+ val DlvrgAgt: BranchAndFinancialInstitutionIdentification6?,
+ val IssgAgt: BranchAndFinancialInstitutionIdentification6?,
+ val SttlmPlc: BranchAndFinancialInstitutionIdentification6?,
+ val Prtry: List<ProprietaryAgent4>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TransactionAgents5 = TransactionAgents5(
+ k.childOrNull("InstgAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("InstdAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("DbtrAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("CdtrAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("IntrmyAgt1") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("IntrmyAgt2") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("IntrmyAgt3") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("RcvgAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("DlvrgAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("IssgAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("SttlmPlc") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.children("Prtry") { ProprietaryAgent4.parse(this) },
+ )
+ }
+}
+
+enum class TransactionChannel1Code {
+ MAIL,
+ TLPH,
+ ECOM,
+ TVPY,
+}
+
+data class TransactionDates3(
+ val AccptncDtTm: LocalDateTime?,
+ val TradActvtyCtrctlSttlmDt: LocalDate?,
+ val TradDt: LocalDate?,
+ val IntrBkSttlmDt: LocalDate?,
+ val StartDt: LocalDate?,
+ val EndDt: LocalDate?,
+ val TxDtTm: LocalDateTime?,
+ val Prtry: List<ProprietaryDate3>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TransactionDates3 = TransactionDates3(
+ k.childOrNull("AccptncDtTm") { text().toDateTime() },
+ k.childOrNull("TradActvtyCtrctlSttlmDt") { text().toDate() },
+ k.childOrNull("TradDt") { text().toDate() },
+ k.childOrNull("IntrBkSttlmDt") { text().toDate() },
+ k.childOrNull("StartDt") { text().toDate() },
+ k.childOrNull("EndDt") { text().toDate() },
+ k.childOrNull("TxDtTm") { text().toDateTime() },
+ k.children("Prtry") { ProprietaryDate3.parse(this) },
+ )
+ }
+}
+
+enum class TransactionEnvironment1Code {
+ MERC,
+ PRIV,
+ PUBL,
+}
+
+data class TransactionInterest4(
+ val TtlIntrstAndTaxAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val Rcrd: List<InterestRecord2>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TransactionInterest4 = TransactionInterest4(
+ k.childOrNull("TtlIntrstAndTaxAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.children("Rcrd") { InterestRecord2.parse(this) },
+ )
+ }
+}
+
+data class TransactionParties6(
+ val InitgPty: Party40Choice?,
+ val Dbtr: Party40Choice?,
+ val DbtrAcct: CashAccount38?,
+ val UltmtDbtr: Party40Choice?,
+ val Cdtr: Party40Choice?,
+ val CdtrAcct: CashAccount38?,
+ val UltmtCdtr: Party40Choice?,
+ val TradgPty: Party40Choice?,
+ val Prtry: List<ProprietaryParty5>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TransactionParties6 = TransactionParties6(
+ k.childOrNull("InitgPty") { Party40Choice.parse(this) },
+ k.childOrNull("Dbtr") { Party40Choice.parse(this) },
+ k.childOrNull("DbtrAcct") { CashAccount38.parse(this) },
+ k.childOrNull("UltmtDbtr") { Party40Choice.parse(this) },
+ k.childOrNull("Cdtr") { Party40Choice.parse(this) },
+ k.childOrNull("CdtrAcct") { CashAccount38.parse(this) },
+ k.childOrNull("UltmtCdtr") { Party40Choice.parse(this) },
+ k.childOrNull("TradgPty") { Party40Choice.parse(this) },
+ k.children("Prtry") { ProprietaryParty5.parse(this) },
+ )
+ }
+}
+
+sealed interface TransactionPrice4Choice {
+ @JvmInline
+ value class DealPric(val value: Price7): TransactionPrice4Choice
+ @JvmInline
+ value class Prtry(val value: ProprietaryPrice2): TransactionPrice4Choice
+
+ companion object {
+ fun parse(k: Konsumer): TransactionPrice4Choice = k.child(Names.of("DealPric", "Prtry")) {
+ when (localName) {
+ "DealPric" -> DealPric(Price7.parse(this))
+ "Prtry" -> Prtry(ProprietaryPrice2.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+sealed interface TransactionQuantities3Choice {
+ @JvmInline
+ value class Qty(val value: FinancialInstrumentQuantity1Choice): TransactionQuantities3Choice
+ @JvmInline
+ value class OrgnlAndCurFaceAmt(val value: OriginalAndCurrentQuantities1): TransactionQuantities3Choice
+ @JvmInline
+ value class Prtry(val value: ProprietaryQuantity1): TransactionQuantities3Choice
+
+ companion object {
+ fun parse(k: Konsumer): TransactionQuantities3Choice = k.child(Names.of("Qty", "OrgnlAndCurFaceAmt", "Prtry")) {
+ when (localName) {
+ "Qty" -> Qty(FinancialInstrumentQuantity1Choice.parse(this))
+ "OrgnlAndCurFaceAmt" -> OrgnlAndCurFaceAmt(OriginalAndCurrentQuantities1.parse(this))
+ "Prtry" -> Prtry(ProprietaryQuantity1.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class TransactionReferences6(
+ val MsgId: String?,
+ val AcctSvcrRef: String?,
+ val PmtInfId: String?,
+ val InstrId: String?,
+ val EndToEndId: String?,
+ val UETR: String?,
+ val TxId: String?,
+ val MndtId: String?,
+ val ChqNb: String?,
+ val ClrSysRef: String?,
+ val AcctOwnrTxId: String?,
+ val AcctSvcrTxId: String?,
+ val MktInfrstrctrTxId: String?,
+ val PrcgId: String?,
+ val Prtry: List<ProprietaryReference1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TransactionReferences6 = TransactionReferences6(
+ k.childOrNull("MsgId") { text() },
+ k.childOrNull("AcctSvcrRef") { text() },
+ k.childOrNull("PmtInfId") { text() },
+ k.childOrNull("InstrId") { text() },
+ k.childOrNull("EndToEndId") { text() },
+ k.childOrNull("UETR") { text() },
+ k.childOrNull("TxId") { text() },
+ k.childOrNull("MndtId") { text() },
+ k.childOrNull("ChqNb") { text() },
+ k.childOrNull("ClrSysRef") { text() },
+ k.childOrNull("AcctOwnrTxId") { text() },
+ k.childOrNull("AcctSvcrTxId") { text() },
+ k.childOrNull("MktInfrstrctrTxId") { text() },
+ k.childOrNull("PrcgId") { text() },
+ k.children("Prtry") { ProprietaryReference1.parse(this) },
+ )
+ }
+}
+
diff --git a/ebics/src/main/kotlin/iso20022/codesets.kt b/ebics/src/main/kotlin/iso20022/codesets.kt
new file mode 100644
index 00000000..65030453
--- /dev/null
+++ b/ebics/src/main/kotlin/iso20022/codesets.kt
@@ -0,0 +1,1355 @@
+/*
+ * This file is part of LibEuFin.
+ * 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
+ * published by the Free Software Foundation; either version 3, or
+ * (at your option) any later version.
+
+ * LibEuFin is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+ * Public License for more details.
+
+ * You should have received a copy of the GNU Affero General Public
+ * License along with LibEuFin; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>
+ */
+
+// THIS FILE IS GENERATED, DO NOT EDIT
+
+package tech.libeufin.ebics.iso20022
+
+
+/** Specifies the external account identification scheme name code in the format of character string with a maximum length of 4 characters */
+enum class ExternalAccountIdentification1Code(val isoCode: String, val description: String) {
+ AIIN("IssuerIdentificationNumber", "Issuer Identification Number (IIN) - identifies a card issuing institution in an international interchange environment. Issued by ABA (American Bankers Association)."),
+ BBAN("BBANIdentifier", "Basic Bank Account Number (BBAN) - identifier used nationally by financial institutions, ie, in individual countries, generally as part of a National Account Numbering Scheme(s), to uniquely identify the account of a customer."),
+ CUID("CHIPSUniversalIdentifier", "(United States) Clearing House Interbank Payments System (CHIPS) Universal Identification (UID) - identifies entities that own accounts at CHIPS participating financial institutions, through which CHIPS payments are effected. The CHIPS UID is assigned by the New York Clearing House."),
+ UPIC("UPICIdentifier", "Universal Payment Identification Code (UPIC) - identifier used by the New York Clearing House to mask confidential data, such as bank accounts and bank routing numbers. UPIC numbers remain with business customers, regardless of banking relationship changes."),
+}
+
+/** Specifies the nature, or use, of the cash account in the format of character string with a maximum length of 4 characters */
+enum class ExternalCashAccountType1Code(val isoCode: String, val description: String) {
+ CACC("Current", "Account used to post debits and credits when no specific account has been nominated."),
+ CARD("CardAccount", "Account used for credit card payments."),
+ CASH("CashPayment", "Account used for the payment of cash."),
+ CHAR("Charges", "Account used for charges if different from the account for"),
+ CISH("CashIncome", "Account used for payment of income if different from the current cash account"),
+ COMM("Commission", "Account used for commission if different from the account"),
+ CPAC("ClearingParticipantSettlementAccount", "Account used to post settlement debit and credit entries on behalf of a designated Clearing Participant."),
+ LLSV("LimitedLiquiditySavingsAccount", "Account used for savings with special interest and withdrawal terms."),
+ LOAN("Loan", "Account used for loans."),
+ MGLD("MarginalLending", "Account used for a marginal lending facility."),
+ MOMA("MoneyMarket", "Account used for money markets if different from the cash"),
+ NFCA("NonResidentForeignCurrencyAccount", "Non-Resident Individual / Entity Foreign Current held domestically."),
+ NREX("NonResidentExternal", "Account used for non-resident external."),
+ ODFT("Overdraft", "Account is used for overdrafts."),
+ ONDP("OverNightDeposit", "Account used for overnight deposits."),
+ OTHR("OtherAccount", "Account not otherwise specified."),
+ SACC("Settlement", "Account used to post debit and credit entries, as a result of transactions cleared and settled through a specific clearing and settlement system."),
+ SLRY("Salary", "Accounts used for salary payments."),
+ SVGS("Savings", "Account used for savings."),
+ TAXE("Tax", "Account used for taxes if different from the account for"),
+ TRAN("TransactingAccount", "A transacting account is the most basic type of bank account that you can get. The main difference between transaction and cheque accounts is that you usually do not get a cheque book with your transacting account and neither are you offered an overdraft facility."),
+ TRAS("CashTrading", "Account used for trading if different from the current cash"),
+ VACC("VirtualAccount", "Account created virtually to facilitate collection and reconciliation."),
+}
+
+/** Specifies the category purpose, as published in an external category purpose code list */
+enum class ExternalCategoryPurpose1Code(val isoCode: String, val description: String) {
+ BONU("BonusPayment", "Transaction is the payment of a bonus."),
+ CASH("CashManagementTransfer", "Transaction is a general cash management instruction."),
+ CBLK("CardBulkClearing", "A service that is settling money for a bulk of card transactions, while referring to a specific transaction file or other information like terminal ID, card acceptor ID or other transaction details."),
+ CCRD("CreditCardPayment", "Transaction is related to a payment of credit card."),
+ CGWV("CarrierGuardedWholesaleValuables", "Transaction is a payment towards a Party for the collection of cash by the Cash in Transit company."),
+ CIPC("CashInPreCredit", "Transaction is a direct debit for a cash order of notes and/or coins."),
+ CONC("CashOutNotesCoins", "Transaction is a direct debit for a cash order of notes and/or coins."),
+ CORT("TradeSettlementPayment", "Transaction is related to settlement of a trade, eg a foreign exchange deal or a securities transaction."),
+ DCRD("DebitCardPayment", "Transaction is related to a payment of debit card."),
+ DIVI("Dividend", "Transaction is the payment of dividends."),
+ DVPM("DeliverAgainstPayment", "Code used to pre-advise the account servicer of a forthcoming deliver against payment instruction."),
+ EPAY("Epayment", "Transaction is related to ePayment."),
+ FCDT("ForeignCurrencyDomesticTransfer", "Foreign Currency Transaction that is processed between two domestic financial institutions."),
+ FCIN("FeeCollectionAndInterest", "Transaction is related to the payment of a fee and interest."),
+ FCOL("FeeCollection", "A service that is settling card transaction related fees between two parties."),
+ GOVT("GovernmentPayment", "Transaction is a payment to or from a government department."),
+ GP2P("PersontoPersonPayment", "General Person-to-Person Payment. Debtor and Creditor are natural persons."),
+ HEDG("Hedging", "Transaction is related to the payment of a hedging operation."),
+ ICCP("IrrevocableCreditCardPayment", "Transaction is reimbursement of credit card payment."),
+ IDCP("IrrevocableDebitCardPayment", "Transaction is reimbursement of debit card payment."),
+ INTC("IntraCompanyPayment", "Transaction is an intra-company payment, ie, a payment between two companies belonging to the same group."),
+ INTE("Interest", "Transaction is the payment of interest."),
+ LBOX("LockboxTransactions", "Transaction is related to identify cash handling via Night Safe or Lockbox by bank or vendor on behalf of a physical store."),
+ LOAN("Loan", "Transaction is related to the transfer of a loan to a borrower."),
+ MP2B("Commercial", "Mobile P2B Payment"),
+ MP2P("Consumer", "Mobile P2P Payment"),
+ OTHR("OtherPayment", "Other payment purpose."),
+ PENS("PensionPayment", "Transaction is the payment of pension."),
+ RPRE("Represented", "Collection used to re-present previously reversed or returned direct debit transactions."),
+ RRCT("ReimbursementReceivedCreditTransfer", "Transaction is related to a reimbursement for commercial reasons of a correctly received credit transfer."),
+ RVPM("ReceiveAgainstPayment", "Code used to pre-advise the account servicer of a forthcoming receive against payment instruction."),
+ SALA("SalaryPayment", "Transaction is the payment of salaries."),
+ SECU("Securities", "Transaction is the payment of securities."),
+ SSBE("SocialSecurityBenefit", "Transaction is a social security benefit, ie payment made by a government to support individuals."),
+ SUPP("SupplierPayment", "Transaction is related to a payment to a supplier."),
+ SWEP("CashManagementSweepAccount", "Classification: Cash Management. Transaction relates to a cash management instruction, requesting a sweep of the account of the Debtor above an agreed floor amount, up to a target or zero balance._x000D_"),
+ TAXS("TaxPayment", "Transaction is the payment of taxes."),
+ TOPG("CashManagementTopAccount", "Classification: Cash Management. Transaction relates to a cash management instruction, requesting to top the account of the Creditor above a certain floor amount, up to a target or zero balance. _x000D_"),
+ TRAD("Trade", "Transaction is related to the payment of a trade finance transaction."),
+ TREA("TreasuryPayment", "Transaction is related to treasury operations. E.g. financial contract settlement."),
+ VATX("ValueAddedTaxPayment", "Transaction is the payment of value added tax."),
+ VOST("CrossborderMIPayments", "Transaction to be processed as a domestic payment instruction originated from a foreign bank."),
+ WHLD("WithHolding", "Transaction is the payment of withholding tax."),
+ ZABA("CashManagementZeroBalanceAccount", "Transaction relates to a cash management instruction, requesting to zero balance the account of the Debtor._x000D_"),
+}
+
+/** Specifies the clearing system identification code, as published in an external clearing system identification code list */
+enum class ExternalClearingSystemIdentification1Code(val isoCode: String, val description: String) {
+ ATBLZ("AustrianBankleitzahl", "Bank Branch code used in Austria"),
+ AUBSB("AustralianBankStateBranchCodeBSB", "Bank Branch code used in Australia"),
+ CACPA("CanadianPaymentsAssociationPaymentRoutingNumber", "Bank Branch code used in Canada"),
+ CHBCC("SwissFinancialInstitutionIdentificationShort", "Financial Institution Identification (IID) used in Switzerland, without check digit"),
+ CHSIC("SwissFinancialInstitutionIdentificationLong", "Financial Institution Identification (IID) used in Switzerland, including check digit"),
+ CNAPS("CNAPSIdentifier", "Bank Branch code used in China"),
+ CNCIP("CrossBorderInterbankPaymentSystem", "Chinese Cross-border Interbank Payment System (CIPS) Identifier."),
+ DEBLZ("GermanBankleitzahl", "Bank Branch code used in Germany"),
+ ESNCC("SpanishDomesticInterbankingCode", "Bank Branch code used in Spain"),
+ GBDSC("UKDomesticSortCode", "Bank Branch code used in the UK"),
+ GRBIC("HelenicBankIdentificationCode", "Bank Branch code used in Greece"),
+ HKNCC("HongKongBankCode", "Bank Branch code used in Hong Kong"),
+ IENCC("IrishNationalClearingCode", "Bank Branch code used in Ireland"),
+ INFSC("IndianFinancialSystemCode", "Bank Branch code used in India"),
+ ITNCC("ItalianDomesticIdentificationCode", "Bank Branch code used in Italy"),
+ JPZGN("JapanZenginClearingCode", "Bank Branch code used in Japan"),
+ KRBOK("SouthKoreaCentralBankIdentificationCode", "Participant Institution code used by BOK-Wire+ in South Korea."),
+ MZBMO("BancoDeMocambiqueRTGS", "Banco de Mocambique RTGS system."),
+ NZNCC("NewZealandNationalClearingCode", "Bank Branch code used in New Zealand"),
+ NZRSA("NewZealandRTGSClearingCode", "RTGS settlement account used in New Zealand."),
+ PLKNR("PolishNationalClearingCode", "Bank Branch code used in Poland"),
+ PTNCC("PortugueseNationalClearingCode", "Bank Branch code used in Portugal"),
+ RUCBC("RussianCentralBankIdentificationCode", "Bank Branch code used in Russia"),
+ SESBA("SwedenBankgiroClearingCode", "Bank Branch code used in Sweden"),
+ SGIBG("IBGSortCode", "Bank Branch code used in Singapore"),
+ THCBC("ThaiCentralBankIdentificationCode", "Bank Identification code used in Thailand"),
+ TWNCC("FinancialInstitutionCode", "Bank Branch code used in Taiwan"),
+ USABA("UnitedStatesRoutingNumberFedwireNACHA", "Routing Transit number assigned by the ABA for US financial institutons"),
+ USPID("CHIPSParticipantIdentifier", "Bank identifier used by CHIPs in the US"),
+ ZANCC("SouthAfricanNationalClearingCode", "Bank Branch code used in South Africa"),
+}
+
+/** Specifies further instructions concerning the processing of a payment instruction, as provided to the creditor agent */
+enum class ExternalCreditorAgentInstruction1Code(val isoCode: String, val description: String) {
+ CHQB("PayCreditorByCheque", "(Ultimate) creditor must be paid by cheque."),
+ HOLD("HoldCashForCreditor", "Amount of money must be held for the (ultimate) creditor, who will call. Pay on identification."),
+ PHOB("PhoneBeneficiary", "Please advise/contact (ultimate) creditor/claimant by phone."),
+ PRTK("PayerTokenRequested", "Indicates that a payer token is requested/used."),
+ RECI("ReceiverCustomerInformation", "Further information regarding the intended recipient."),
+ SEID("SecondaryIdentification", "Use of Secondary Identification of Creditor Account (which may relate to Head Office Collection Account, Building Society Roll Number or Credit Card Primary Account Number)."),
+ TELB("Telecom", "Please advise/contact (ultimate) creditor/claimant by the most efficient means of telecommunication."),
+ 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."),
+ TOKN("Token", "Token information."),
+ VLTK("TokenValidation", "Additional validation information to be used in conjunction with the token."),
+}
+
+/** Specifies further instructions concerning the processing of a payment instruction, as provided to the creditor agent */
+enum class ExternalDebtorAgentInstruction1Code(val isoCode: String, val description: String) {
+ CHQB("PayCreditorByCheque", "(Ultimate) creditor must be paid by cheque."),
+ HOLD("HoldCashForCreditor", "Amount of money must be held for the (ultimate) creditor, who will call. Pay on identification."),
+ PHOB("PhoneBeneficiary", "Please advise/contact (ultimate) creditor/claimant by phone."),
+ PRTK("PayerTokenRequested", "Indicates that a payer token is requested/used."),
+ TELB("Telecom", "Please advise/contact (ultimate) creditor/claimant by the most efficient means of telecommunication."),
+ TOKN("Token", "Token information."),
+ VLTK("TokenValidation", "Additional validation information to be used in conjunction with the token."),
+}
+
+/** Specifies the nature, or use, of the amount in the format of character string with a maximum length of 4 characters */
+enum class ExternalDiscountAmountType1Code(val isoCode: String, val description: String) {
+ APDS("AdditionalPromotionalDiscount", "Addition discount based on third-party agreed business promotional activity, i.e., extra 10 percent discount for 15 days)"),
+ STDS("StandingDiscount", "Discount based on volume purchased."),
+ TMDS("TermsDiscount", "Discount based on terms negotiated for payment within a specified time period, i.e., 2/10 Net 30 (2 percent discount if paid in 10 days; otherwise, net amount is due in 30 days)."),
+}
+
+/** Specifies the document line type as published in an external document type code list */
+enum class ExternalDocumentLineType1Code(val isoCode: String, val description: String) {
+ ADPI("AdditionalProductIdentificationAssignedByTheManufacturer", "Line item reference is an additional product identification assigned by the manufacturer."),
+ AISB("AlternateISBN", "Line item reference is an alternate International Standard Book Number (ISBN)."),
+ ASNB("AssetNumber", "Line item reference is an asset number."),
+ CTNB("CatalogNumber", "Line item reference is a catalog number."),
+ DBSP("DunBradstreetStandardProductAndServiceCode", "Line item reference is Dun & Bradstreet Standard Product and Service code."),
+ EANN("EuropeanArticleNumberEAN2551", "Line item reference is an European Article Number (EAN)."),
+ EINB("EquipmentIdentificationNumber", "Line item reference is an equipment identification number."),
+ GSNB("GeneralSpecificationNumber", "Line item reference is a general specification number."),
+ HIBC("HIBCHealthCareIndustryBarCode", "Line item reference is a Health Care Industry Bar Code (HIBC)"),
+ ISBN("InternationalStandardBookNumberISBN", "Line item reference is an International Standard Book Number (ISBN)."),
+ LTNB("LotNumber", "Line item reference is a lot number."),
+ MDNB("ModelNumber", "Line item reference is a model number"),
+ PRNB("PartNumber", "Line item reference is a part reference number."),
+ PTCD("ProductTypeCode", "Line item reference is a product type code."),
+ SKNB("StockNumber", "Line item reference is a stock number."),
+ STNB("StyleNumber", "Line item reference is a style number."),
+ TONB("TechnicalOrderNumber", "Line item reference is a technical order number."),
+ UPCC("UPCConsumerPackageCode", "Line item reference is an UPC consumer package code."),
+ UPNB("UniversalProductNumber", "Line item reference is an Universal Product Number."),
+}
+
+/** Specifies the garnishment type as published in an external document type code list */
+enum class ExternalGarnishmentType1Code(val isoCode: String, val description: String) {
+ GNCS("GarnishmentForChildSupport", "Garnishment from a third party payer for Child Support"),
+ GNDP("GarnishmentForChildSupportFromDirectPayer", "Garnishment from a direct payer for Child Support"),
+ GTPP("GarnishmentToTaxingAgency", "Garnishment from a third party payer to taxing agency"),
+}
+
+/** Specifies the external local instrument code in the format of character string with a maximum length of 35 characters */
+enum class ExternalLocalInstrument1Code(val isoCode: String, val description: String) {
+ _04("PreauthorisedDirectDebitDE", "Transaction is related to a direct debit that is pre authorised (Abbuchungsauftrag)."),
+ _05("NonPreauthorisedDirectDebitDE", "Transaction is related to a direct debit that is not pre authorised (Einzugsermächtigung)."),
+ _08("PreauthorisedDirectDebitOrdinaireNormalClearing4Day", "Transaction is related to a direct debit that is pre authorised (Avis de Prélèvement)."),
+ _19("BusinessToCustomerDirectDebit", "Transaction is related to a business-to-customer direct debit (CSB19)."),
+ _58("BusinessToBusinessDirectDebit", "Transaction is related to a business-to-business direct debit (CSB58)."),
+ _60("RecoveredBillofExchangeorPromissoryNote", "LCR - Lettre de Change Relevé (Recovered Bill of Exchange) and BOR - Billet à Orde Relevé (Promissory Note)"),
+ _82("NonPreauthorisedDirectDebitAT", "Transaction is related to a direct debit that is not pre authorised (Einzugsermächtigung)."),
+ _83("PreauthorisedDirectDebitAT", "Transaction is related to a direct debit that is pre authorised (Abbuchungsauftrag)."),
+ _85("PreauthorisedDirectDebitAccéléréAcceleratedClearing2DayOrdinaireNormalClearing4Day", "Transaction is related to an urgent direct debit that is pre authorised (Avis de Prélèvement accéléré)."),
+ _89("PreauthorisedDirectDebitVérifiéVerifiedClearing", "Transaction is related to an urgent direct debit that is pre authorised (Avis de Prélèvement vérifié)."),
+ ACCEPT("PaymentViaAcceptgiroOwnedByCurrence", "Transaction is related to payments via Acceptgiro owned by Currence."),
+ ADD("AuthenticatedDirectDebit", "Transaction is authenticated direct debit for domestic use."),
+ ARC("AccountsReceivableCheck", "Transaction is related to accounts receivable check."),
+ ASTI("AncillarySystemTransferInitiation", "Indicates that the payment is sent by an authorized third party on behalf of the participant."),
+ B2B("SEPABusinessToBusinessDirectDebit", "Transaction is related to SEPA business to business direct debit."),
+ B2BAMIPM("SEPAB2BDirectDebitAMI", "SEPA B2B Direct Debit AMI based on a paper mandate"),
+ BACP("BackupPayment", "Indicates that the payment was initiated manually using a GUI (Graphical User Interface)."),
+ BPA("BatchPaymentsAruba", "Transaction is related to an Instant Credit Transfer under the rules of the Centrale Bank van Aruba, based on the EPC SCT Inst scheme, with a specific batch time-out delay."),
+ BSE("PaperlessChequeCollection", "Transaction is related to the German Paperless Cheque Collection procedure “Belegloser Scheckeinzug - BSE”"),
+ CARD("CardClearing", "Transaction is related to card clearing."),
+ CCD("CashConcentrationOrDisbursementCorporateCounterparty", "Transaction is related to cash concentration or disbursement corporate counterparty."),
+ CCI("CashConcentrationIntragroup", "Transaction is related to an intra-group bank initiated cash management payment"),
+ CHN("TruncatedChecks", "Transaction is related to truncated checks."),
+ CIE("CustomerInitiatedEntry", "A credit entry initiated by or on behalf of the holder of a consumer account"),
+ CLSCCPERX("CLSClearedFXForEurex", "Transaction is related to the CLSClearedFX service for Eurex."),
+ CLSCCPLCH("CLSClearedFXForLCH", "Transaction is related to the CLSClearedFX service for London Exchange Clearing House."),
+ COR1("SEPADirectDebit1DaySettlement", "Optional shorter time cycle (D-1) for SEPA Core Direct Debit"),
+ CORAMIPM("SEPACoreDirectDebitAMI", "SEPA Core Direct Debit AMI based on a paper mandate"),
+ CORE("SEPADirectDebitCore", "Transaction is related to SEPA direct debit -core."),
+ CPP("CashPerPost", "Transaction is related to cash per post."),
+ CR1AMIPM("SEPACoreD1DirectDebitAMI", "Optional shorter time cycle (D-1) for SEPA Core Direct Debit AMI based on a paper mandate"),
+ CTP("CreditTransferPreferred", "Request-to-pay preferred payment via Credit Transfer but Instant Credit Transfer is also possible."),
+ CTX("CorporateTradeExchange", "Transaction is related to corporate trade exchange."),
+ DDFA("DirectDebitFixedAmount", "SEPA Fixed Amount Direct Debit"),
+ DDMC("DirectDebitConfirmedElectronicMandate", "Transaction is related to a direct debit instruction authorized under a confirmed electronic mandate."),
+ DDMP("DirectDebitPaperMandateWithPaperAuthorization", "Transaction is related to a direct debit instruction authorized under a paper based mandate, supported by paper authorization signed by the debtor."),
+ DDMU("DirectDebitUnconfirmedElectronicMandate", "Transaction is related to a direct debit instruction authorized under an unconfirmed electronic mandate requiring confirmation by the debtor."),
+ DDNR("CoreNoRefund", "SEPA Core Direct Debit with ‘no refund’ option"),
+ DDT("DirectDebits", "Transaction is related to direct debits."),
+ FADAMIPM("SEPAFADirectDebitAMI", "SEPA Fixed Amount Direct Debit AMI based on a paper mandate"),
+ FDP("ForwardDatedPayment", "Type of Payment used within the New Payments Architecture (UK). Forward-dated payments are one-off payments sent and received on a pre-arranged date, set-up by the customer in advance, for example, to pay a bill."),
+ GST("TruncatedCreditTransfers", "Transaction is related to truncated credit transfers."),
+ IAT("InternationalACH", "Transaction is related to international ACH."),
+ ICMC("IncidentManagementCorrection", "Transaction is related to an Incident Management Correction procedure based on the DD infrastructure."),
+ IDEAL("PaymentsViaInternetOwnedByCurrence", "Transaction is related to payments via internet owned by Currence."),
+ IMD("ImmediatePayment", "Type of Payment used within the New Payments Architecture (UK). Immediate Payments are used for payments initiated by customers using channels such as internet, mobile or telephone banking, where the customer wants the payment to be effected immediately."),
+ IN("CrossBorderCustomerCreditTransfer", "Transaction is related to cross border customer credit transfer."),
+ INST("InstantCreditTransfer", "Transaction is related to an Instant Credit Transfer."),
+ INSTIDEAL("PaymentsViaInternetOwnedByCurrenceUsingInstantCreditTransfer", "Transaction is related to payments via internet owned by Currence which uses an Instant Credit Transfer."),
+ INSTNT01("InstantCreditTransferNotTimeCritical", "The transaction is related to a regular Credit Transfer and will be instantly processed under the Dutch AOS on top of the EPC SCT scheme."),
+ INSTNT01IDEAL("PaymentsViaInternetOwnedByCurrenceUsingInstantCreditTransferNotTimeCritical", "Transaction is related to payments via internet owned by Currence which uses a regular Credit Transfer and will be instantly processed under the Dutch AOS on top of the EPC SCT scheme."),
+ INSTTC01("InstantCreditTransferTimeCritical", "The transaction is related to an Instant Credit Transfer under the rules of the Dutch AOS on top of the EPC SCT Inst scheme."),
+ INSTTC01IDEAL("PaymentsViaInternetOwnedByCurrenceUsingInstantCreditTransferTimeCritical", "Transaction is related to payments via internet owned by Currence which uses an Instant Credit Transfer under the rules of the Dutch AOS on top of the EPC SCT Inst scheme."),
+ IPA("InstantPaymentsAruba", "Transaction is related to an Instant Credit Transfer under the rules of the Centrale Bank van Aruba, based on the EPC SCT Inst scheme."),
+ ISE("ImageBasedChequeCollection", "Transaction is related to the German Image-based Cheque Collection Procedure “Imagegestützter Scheckeinzug - ISE”"),
+ ITP("InstantCreditTransferPreferred", "Request-to-pay preferred payment via Instant Credit Transfer but Credit Transfer is also possible."),
+ MANP("MandatedPayment", "Indicates that the payment is sent by responsible Central Bank on behalf of the participant in case of contingency."),
+ MDP("MultiDayPayment", "Type of New Payments Architecture (NPA) payment. Payments are processed over a three-day cycle and available to customers early in the morning of Day 3."),
+ NLDO("DutchDomesticBulkPayment", "Transaction is related to a Domestic payment initiated by PAIN.001"),
+ NLGOV("DirectDebitInitiatedByTheGovernmentWithSpecialConditions", "Transaction is related to direct debit scheme owned by the NVB."),
+ NLUP("DutchUrgentPayment", "Transaction is related to a Domestic payment initiated by PAIN.001"),
+ ONCL("Overnight", "Transaction is related to overnight clearing."),
+ PERI("PaymentWithERI", "Credit transfer contains Extended Remittance Information (ERI) as defined within the applicable scheme."),
+ POP("PointOfPurchase", "Transaction is related to point-of-purchase."),
+ POS("PointOfSale", "Transaction is related to point-of-sale."),
+ PPD("PrearrangedPaymentOrDepositConsumerCounterparty", "Transaction is related to prearranged payment or deposit consumer counterparty."),
+ RCK("RepresentedCheckEntry", "Transaction is related to re-presented check entry."),
+ RDD("ReturnedDirectDebits", "Transaction is related to returned direct debits."),
+ RIBA("NonPreauthorisedDirectDebitRIBA", "Transaction is related to a non-pre authorised collection (RIBA)."),
+ RIDO("PreauthorisedRevocableDirectDebit", "Transaction is related to a direct debit that is pre authorised and revocable (RID Ordinario)."),
+ RIDV("PreauthorisedRevocableUrgentDirectDebit", "Transaction is related to an urgent direct debit that is pre authorised and revocable (RID Veloce)."),
+ RTR("ReturnedCreditTransfers", "Transaction is related to returned credit transfers."),
+ SBTI("SettlementBankTransferInitiation", "Indicates that the payment is submitted to move liquidity to the technical account - dedicated to real-time settlement in an external system (for example ancillary system) . The payment is processed in a separate payment queue besides the normal processing."),
+ SCN("RevokedTruncatedChecks", "Transaction is related to revoked truncated checks."),
+ SDCL("SameDayClearedPayments", "Transaction is related to New Zealand High Value Clearing System (HVCS) same day clearing payments."),
+ SDD("RevokedDirectDebits", "Transaction is related to revoked direct debits."),
+ SDN("PaymentsViaStandaardDigitaleNota", "Transaction is related to payments via a ‘Standaard Digitale Nota’ InvoiceAcceptgiro payment."),
+ SGT("RevokedTruncatedCreditTransfers", "Transaction is related to revoked truncated credit transfers."),
+ SOP("StandingOrderPayment", "Standing Orders are regular payments of a fixed amount paid to the same recipient on a specified date, for example, to pay rent."),
+ SRD("RevokedReturnedDirectDebits", "Transaction is related to revoked returned direct debits."),
+ SRT("RevokedReturnedCreditTransfers", "Transaction is related to revoked returned credit transfers"),
+ STR("RevokedCreditTransfers", "Transaction is related to revoked credit transfers"),
+ TEL("TelephoneInitiatedEntry", "Transaction is related to telephone initiated entry."),
+ TRF("CreditTransfers", "Transaction is related to credit transfers"),
+ UDD("UnauthenticatedDirectDebit", "Transaction is unauthenticated direct debit for domestic use."),
+ WEB("InternetInitiatedEntry", "Transaction is related to internet initiated entry."),
+}
+
+/** Specifies the external organisation identification scheme name code in the format of character string with a maximum length of 4 characters */
+enum class ExternalOrganisationIdentification1Code(val isoCode: String, val description: String) {
+ BANK("BankPartyIdentification", "Unique and unambiguous assignment made by a specific bank or similar financial institution to identify a relationship as defined between the bank and its client."),
+ BDID("BusinessDomainIdentifier", "Identifier of the business domain in which the organisation is active."),
+ BOID("BusinessOtherIdentification", "Other identification of the organisation."),
+ CBID("CentralBankIdentificationNumber", "A unique identification number assigned by a central bank to identify an organisation."),
+ CHID("ClearingIdentificationNumber", "A unique identification number assigned by a clearing house to identify an organisation"),
+ CINC("CertificateOfIncorporationNumber", "A unique identification number assigned by a designated authority to a certificate of incorporation and used to identify an organisation."),
+ COID("CountryIdentificationCode", "Country authority given organisation identification (e.g., corporate registration number)"),
+ CUST("CustomerNumber", "Number assigned by an issuer to identify a customer."),
+ DUNS("DataUniversalNumberingSystem", "A unique identification number provided by Dun & Bradstreet to identify an organisation."),
+ EMPL("EmployerIdentificationNumber", "Number assigned by a registration authority to an employer."),
+ GS1G("GS1GLNIdentifier", "Global Location Number. A non-significant reference number used to identify legal entities, functional entities, or physical entities according to GS1 numbering scheme rules.The number is used to retrieve detailed information that is linked to it."),
+ SREN("SIREN", "The SIREN number is a 9 digit code assigned by INSEE, the French National Institute for Statistics and Economic Studies, to identify an organisation in France."),
+ SRET("SIRET", "The SIRET number is a 14 digit code assigned by INSEE, the French National Institute for Statistics and Economic Studies, to identify an organisation unit in France. It consists of the SIREN number, followed by a five digit classification number, to identify the local geographical unit of that entity"),
+ TXID("TaxIdentificationNumber", "Number assigned by a tax authority to identify an organisation."),
+}
+
+/** Specifies the external person identification scheme name code in the format of character string with a maximum length of 4 characters */
+enum class ExternalPersonIdentification1Code(val isoCode: String, val description: String) {
+ ARNU("AlienRegistrationNumber", "Number assigned by a social security agency to identify a non-resident person."),
+ CCPT("PassportNumber", "Number assigned by an authority to identify the passport number of a person."),
+ CUST("CustomerIdentificationNumber", "Number assigned by an issuer to identify a customer."),
+ DRLC("DriversLicenseNumber", "Number assigned by an authority to identify a driver's license."),
+ EMPL("EmployeeIdentificationNumber", "Number assigned by a registration authority to an employee."),
+ NIDN("NationalIdentityNumber", "Number assigned by an authority to identify the national identity number of a person."),
+ POID("PersonCommercialIdentification", "Commercial identification of the person."),
+ SOSE("SocialSecurityNumber", "Number assigned by an authority to identify the social security number of a person."),
+ TELE("TelephoneNumber", "Number assigned by a telephone or mobile phone operator to identify a person. A person may have multiple phone numbers."),
+ TXID("TaxIdentificationNumber", "Number assigned by a tax authority to identify a person."),
+}
+
+/** Specifies the external proxy account type code, as published in the proxy account type external code set */
+enum class ExternalProxyAccountType1Code(val isoCode: String, val description: String) {
+ BIID("BillerSubscriberIdentification", "Billers of specific utilities could register for a Biller Identification as supported in the clearing scheme, and use this identification for collections (applied for corporate account proxy)."),
+ CCPT("PassportNumber", "Unique government-issued Identification used as account proxy to identify the individual (for example for government charges, road taxes, vaccination charges) and typically linked to the individual's bank account"),
+ CINC("CertificateOfIncorporationNumber", "Corporate Identification issued by a national institution or regulator, used as account proxy."),
+ COID("CountryAuthorityIdentification", "Identification issued by a national institution or regulator (different from a national scheme like a clearing provider), used as account proxy (applied for corporate or individual account proxy)."),
+ COTX("CorporateTaxIdentification", "Unique government-issued tax Identification used as account proxy to identify the corporate (for example for government tax) and typically linked to the corporate bank account (applied for corporate account proxy)."),
+ CUST("CustomerIdentificationNumber", "Any other customer identification number issued by a corporate, bank or other organization, used as account proxy."),
+ DNAM("DomainName", "Internationalised internet domain name."),
+ DRLC("DriverLicenseNumber", "Unique government-issued Identification used as account proxy to identify the individual (for example for government charges, road taxes and tolls,vaccination charges) and typically linked to the individual's bank account (applied for individual account proxy)."),
+ EIDN("ElectronicIdentification", "Government-issued Identification (different from a passport Identification or a national Identification). Used as account proxy to identify the individual (for example for public benefits) and typically linked to the individual's bank account (applied for individual account proxy)."),
+ EMAL("EmailAddress", "Internationalised address of an electronic mail box for internet messages."),
+ EWAL("EWalletIdentification", "Market-adopted prepaid instruments like e-Wallets, payments to / from e-wallets from / to bank accounts (applied for corporate or individual account proxy)."),
+ LEIC("LegalEntityIdentifierCode", "Legal Entity Identifier used as account proxy (applied for corporate account proxy)."),
+ MBNO("MobilePhoneNumber", "Mobile phone number in the format specified by the “The international public telecommunication numbering plan ITU- T E 164\" (applied for corporate or individual account proxy)."),
+ NIDN("NationalIdentificationNumber", "Unique government-issued Identification used as account proxy to identify the individual or corporate for example for public benefits, government subsidies) and typically linked to the individual's / corporate bank account."),
+ PVTX("IndividualTaxIdentification", "Unique government-issued tax Identification used as account proxy to identify the individual for example for government tax) and typically linked to the individual's bank account (applied for individual account proxy)."),
+ SHID("SchemeIdentificationNumber", "Account proxy issued by a payment scheme (applied for corporate or individual account proxy)."),
+ SOSE("SocialSecurityNumber", "Unique government-issued Identification used as account proxy to identify the individual (for example for public benefits) and typically linked to the individual's bank account (applied for individual account proxy)."),
+ TELE("TelephoneNumber", "A telephone number in the format specified by the 'The international public telecommunication numbering plan ITU-T E.164."),
+ TOKN("TokenIdentification", "Electronic Identification used, for example, to mask an account number as a means of data secrecy."),
+ UBIL("UtilitiesSubscriptionIdentification", "Subscriber Identification for utilities and services. As opposed to a biller Identification, this identification is used for the subscriber of the service (applied for corporate or individual account proxy)."),
+ VIPN("VehicleIdentificationPlateNumber", "Account proxy for receiving insurance claims, pay insurance premium, road tax payments, traffic tickets etc.(applied for corporate or individual account proxy)."),
+}
+
+/** Specifies the external purpose code in the format of character string with a maximum length of 4 characters */
+enum class ExternalPurpose1Code(val isoCode: String, val description: String) {
+ ACCT("AccountManagement", "Transaction moves funds between 2 accounts of same account holder at the same bank."),
+ ADCS("AdvisoryDonationCopyrightServices", "Payments for donation, sponsorship, advisory, intellectual and other copyright services."),
+ ADMG("AdministrativeManagement", "Transaction is related to a payment associated with administrative management."),
+ ADVA("AdvancePayment", "Transaction is an advance payment."),
+ AEMP("ActiveEmploymentPolicy", "Payment concerning active employment policy."),
+ AGRT("AgriculturalTransfer", "Transaction is related to the agricultural domain."),
+ AIRB("Air", "Transaction is a payment for air transport related business."),
+ ALLW("Allowance", "Transaction is the payment of allowances."),
+ ALMY("AlimonyPayment", "Transaction is the payment of alimony."),
+ AMEX("Amex", "Card Settlement-Settlement of AMEX transactions."),
+ ANNI("Annuity", "Transaction settles annuity related to credit, insurance, investments, other.n"),
+ ANTS("AnesthesiaServices", "Transaction is a payment for anesthesia services."),
+ AREN("AccountsReceivablesEntry", "Transaction is related to a payment associated with an Account Receivable Entry"),
+ AUCO("AuthenticatedCollections", "Utilities-Settlement of Authenticated Collections transactions."),
+ B112("TrailerFeePayment", "US mutual fund trailer fee (12b-1) payment"),
+ BBSC("BabyBonusScheme", "Transaction is related to a payment made as incentive to encourage parents to have more children"),
+ BCDM("BearerChequeDomestic", "Transaction is the payment of a domestic bearer cheque."),
+ BCFG("BearerChequeForeign", "Transaction is the payment of a foreign bearer cheque."),
+ BECH("ChildBenefit", "Transaction is related to a payment made to assist parent/guardian to maintain child."),
+ BENE("UnemploymentDisabilityBenefit", "Transaction is related to a payment to a person who is unemployed/disabled."),
+ BEXP("BusinessExpenses", "Transaction is related to a payment of business expenses."),
+ BFWD("BondForward", "Cash collateral related to any securities traded out beyond 3 days which include treasury notes, JGBs and Gilts."),
+ BKDF("BankLoanDelayedDrawFunding", "Delayed draw funding. Certain issuers may utilize delayed draw loans whereby the lender is committed to fund cash"),
+ BKFE("BankLoanFees", "Bank loan fees. Cash activity related to specific bank loan fees, including (a) agent / assignment fees; (b) amendment fees; (c) commitment fees; (d) consent fees; (e) cost of carry fees; (f) delayed compensation fees; (g)"),
+ BKFM("BankLoanFundingMemo", "Bank loan funding memo. Net cash movement for the loan contract final notification when sent separately from the"),
+ BKIP("BankLoanAccruedInterestPayment", "Accrued interest payments. Specific to bank loans."),
+ BKPP("BankLoanPrincipalPaydown", "Principal paydowns. Specific to bank loans"),
+ BLDM("BuildingMaintenance", "Transaction is related to a payment associated with building maintenance."),
+ BNET("BondForwardNetting", "Bond Forward pair-off cash net movement"),
+ BOCE("BackOfficeConversionEntry", "Transaction is related to a payment associated with a Back Office Conversion Entry"),
+ BOND("Bonds", "Securities Lending-Settlement of Bond transaction."),
+ BONU("BonusPayment.", "Transaction is related to payment of a bonus."),
+ BR12("TrailerFeeRebate", "US mutual fund trailer fee (12b-1) rebate payment"),
+ BUSB("Bus", "Transaction is a payment for bus transport related business."),
+ CABD("CorporateActions-Bonds", "Securities Lending-Settlement of Corporate Actions: Bonds transactions."),
+ CAEQ("CorporateActions-Equities", "Securities Lending-Settlement of Corporate Actions: Equities transactions."),
+ CAFI("CustodianManagementFeeInhouse", "Transaction is the payment of custodian account management fee where custodian bank and current account servicing bank coincide"),
+ CASH("CashManagementTransfer", "Transaction is a general cash management instruction."),
+ CBCR("CreditCard", "Card Settlement-Settlement of Credit Card transactions."),
+ CBFF("CapitalBuilding", "Transaction is related to capital building fringe fortune, ie capital building in general"),
+ CBFR("CapitalBuildingRetirement", "Transaction is related to capital building fringe fortune for retirement"),
+ CBLK("CardBulkClearing", "A Service that is settling money for a bulk of card transactions, while referring to a specific transaction file or other information like terminal ID, card acceptor ID or other transaction details."),
+ CBTV("CableTVBill", "Transaction is related to a payment of cable TV bill."),
+ CCHD("CashCompensationHelplessnessDisability", "Payments made by Government institute related to cash compensation, helplessness, disability. These payments are made by the Government institution as a social benefit in addition to regularly paid salary or pension."),
+ CCIR("CrossCurrencyIRS", "Cash Collateral related to a Cross Currency Interest Rate Swap, indicating the exchange of fixed interest payments in one currency for those in another."),
+ CCPC("CCPClearedInitialMargin", "Cash Collateral associated with an ISDA or Central Clearing Agreement that is covering the initial margin requirements for OTC trades clearing through a CCP."),
+ CCPM("CCPClearedVariationMargin", "Cash Collateral associated with an ISDA or Central Clearing Agreement that is covering the variation margin requirements for OTC trades clearing through a CCP."),
+ CCRD("CreditCardPayment", "Transaction is related to a payment of credit card account."),
+ CCSM("CCPClearedInitialMarginSegregatedCash", "CCP Segregated initial margin: Initial margin on OTC Derivatives cleared through a CCP that requires segregation"),
+ CDBL("CreditCardBill", "Transaction is related to a payment of credit card bill."),
+ CDCB("CardPaymentWithCashBack", "Purchase of Goods and Services with additional Cash disbursement at the POI (Cashback)"),
+ CDCD("CashDisbursementCashSettlement", "ATM Cash Withdrawal in an unattended or Cash Advance in an attended environment (POI or bank counter)"),
+ CDCS("CashDisbursementWithSurcharging", "ATM Cash Withdrawal in an unattended or Cash Advance in an attended environment (POI or bank counter) with surcharging."),
+ CDDP("CardDeferredPayment", "A combined service which enables the card acceptor to perform an authorisation for a temporary amount and a completion for the final amount within a limited time frame. Deferred Payment is only available in the unattended environment."),
+ CDEP("CreditDefaultEventPayment", "Payment related to a credit default event"),
+ CDOC("OriginalCredit", "A service which allows the card acceptor to effect a credit to a cardholder' account. Unlike a Merchant Refund, an Original Credit is not preceded by a card payment. This service is used for example for crediting winnings from gaming."),
+ CDQC("QuasiCash", "Purchase of Goods which are equivalent to cash like coupons in casinos."),
+ CFDI("CapitalFallingDueInhouse", "Transaction is the payment of capital falling due where custodian bank and current account servicing bank coincide"),
+ CFEE("CancellationFee", "Transaction is related to a payment of cancellation fee."),
+ CGDD("CardGeneratedDirectDebit", "Transaction is related to a direct debit where the mandate was generated by using data from a payment card at the point of sale."),
+ CHAR("CharityPayment", "Transaction is a payment for charity reasons."),
+ CLPR("CarLoanPrincipalRepayment", "Transaction is a payment of car loan principal payment."),
+ CMDT("CommodityTransfer", "Transaction is payment of commodities."),
+ COLL("CollectionPayment", "Transaction is a collection of funds initiated via a credit transfer or direct debit."),
+ COMC("CommercialPayment", "Transaction is related to a payment of commercial credit or debit. (formerly CommercialCredit)"),
+ COMM("Commission", "Transaction is payment of commission."),
+ COMP("CompensationPayment", "Transaction is related to the payment of a compensation relating to interest loss/value date adjustment and can include fees."),
+ COMT("ConsumerThirdPartyConsolidatedPayment", "Transaction is a payment used by a third party who can collect funds to pay on behalf of consumers, ie credit counseling or bill payment companies."),
+ CORT("TradeSettlementPayment", "Transaction is related to settlement of a trade, e.g. a foreign exchange deal or a securities transaction."),
+ COST("Costs", "Transaction is related to payment of costs."),
+ CPEN("CashPenalties", "Cash penalties related to securities transaction, including CSDR Settlement Discipline Regime."),
+ CPKC("CarparkCharges", "Transaction is related to carpark charges."),
+ CPYR("Copyright", "Transaction is payment of copyright."),
+ CRDS("CreditDefaultSwap", "Cash collateral related to trading of credit default swap."),
+ CRPR("CrossProduct", "Cash collateral related to a combination of various types of trades."),
+ CRSP("CreditSupport", "Cash collateral related to cash lending/borrowing; letter of Credit; signing of master agreement."),
+ CRTL("CreditLine", "Cash collateral related to opening of a credit line before trading."),
+ CSDB("CashDisbursementCashManagement", "Transaction is related to cash disbursement."),
+ CSLP("CompanySocialLoanPaymentToBank", "Transaction is a payment by a company to a bank for financing social loans to employees."),
+ CVCF("ConvalescentCareFacility", "Transaction is a payment for convalescence care facility services."),
+ DBCR("DebitCard", "Card Settlement-Settlement of Debit Card transactions."),
+ DBTC("DebitCollectionPayment", "Collection of funds initiated via a debit transfer."),
+ DCRD("DebitCardPayment", "Transaction is related to a debit card payment."),
+ DEBT("ChargesBorneByDebtor", "Purpose of payment is the settlement of charges payable by the debtor in relation to an underlying customer credit transfer."),
+ DEPD("DependentSupportPayment", "Transaction is related to a payment concerning dependent support, for example child support or support for a person substantially financially dependent on the support provider."),
+ DEPT("Deposit", "Transaction is releted to a payment of deposit."),
+ DERI("Derivatives", "Transaction is related to a derivatives transaction"),
+ DICL("Diners", "Card Settlement-Settlement of Diners transactions."),
+ DIVD("Dividend", "Transaction is payment of dividends."),
+ DMEQ("DurableMedicaleEquipment", "Transaction is a payment is for use of durable medical equipment."),
+ DNTS("DentalServices", "Transaction is a payment for dental services."),
+ DSMT("PrintedOrderDisbursement", "Transaction is the payment of a disbursement due to a specific type of printed order for a payment of a specified sum, issued by a bank or a post office (Zahlungsanweisung zur Verrechnung)"),
+ DVPM("DeliverAgainstPayment", "Code used to pre-advise the account servicer of a forthcoming deliver against payment instruction."),
+ ECPG("GuaranteedEPayment", "E-Commerce payment with payment guarantee of the issuing bank."),
+ ECPR("EPaymentReturn", "E-Commerce payment return."),
+ ECPU("NonGuaranteedEPayment", "E-Commerce payment without payment guarantee of the issuing bank."),
+ EDUC("Education", "Transaction is related to a payment of study/tuition fees."),
+ EFTC("LowValueCredit", "Utilities-Settlement of Low value Credit transactions."),
+ EFTD("LowValueDebit", "Utilities-Settlement of Low value Debit transactions."),
+ ELEC("ElectricityBill", "Transaction is related to a payment of electricity bill."),
+ ENRG("Energies", "Transaction is related to a utility operation."),
+ EPAY("Epayment", "Transaction is related to ePayment."),
+ EQPT("EquityOption", "Cash collateral related to trading of equity option (Also known as stock options)."),
+ EQTS("Equities", "Securities Lending-Settlement of Equities transactions."),
+ EQUS("EquitySwap", "Cash collateral related to equity swap trades where the return of an equity is exchanged for either a fixed or a floating rate of interest."),
+ ESTX("EstateTax", "Transaction is related to a payment of estate tax."),
+ ETUP("EPurseTopUp", "Transaction is related to a Service that is first reserving money from a card account and then is loading an e-purse application by this amount."),
+ EXPT("ExoticOption", "Cash collateral related to trading of an exotic option for example a non-standard option."),
+ EXTD("ExchangeTradedDerivatives", "Cash collateral related to trading of exchanged traded derivatives in general (Opposite to Over the Counter (OTC))."),
+ FACT("FactorUpdateRelatedPayment", "Payment related to a factor update"),
+ FAND("FinancialAidInCaseOfNaturalDisaster", "Financial aid by State authorities for abolition of consequences of natural disasters."),
+ FCOL("FeeCollection", "A Service that is settling card transaction related fees between two parties."),
+ FCPM("LatePaymentOfFeesAndCharges", "Transaction is the payment for late fees & charges. E.g Credit card charges"),
+ FEES("PaymentOfFees", "Payment of fees/charges."),
+ FERB("Ferry", "Transaction is a payment for ferry related business."),
+ FIXI("FixedIncome", "Cash collateral related to a fixed income instrument"),
+ FLCR("FleetCard", "Card Settlement-Settlement of Fleet transactions."),
+ FNET("FuturesNettingPayment", "Cash associated with a netting of futures payments. Refer to CCPM codeword for netting of initial and variation margin through a CCP"),
+ FORW("ForwardForeignExchange", "FX trades with a value date in the future."),
+ FREX("ForeignExchange", "Transaction is related to a foreign exchange operation."),
+ FUTR("Futures", "Cash related to futures trading activity."),
+ FWBC("ForwardBrokerOwnedCashCollateral", "Cash collateral payment against a Master Forward Agreement (MFA) where the cash is held in a segregated account and is not available for use by the client. Includes any instruments with a forward settling date such TBAs, repurchase agreements and bond forwards"),
+ FWCC("ForwardClientOwnedCashCollateral", "Cash collateral payment against a Master Forward Agreement (MFA) where the cash is owned and may be used by the client when returned. Includes any instruments with a forward settling date such TBAs, repurchase agreements and bond forwards"),
+ FWLV("ForeignWorkerLevy", "Transaction is related to a payment of Foreign Worker Levy"),
+ FWSB("ForwardBrokerOwnedCashCollateralSegregated", "Any cash payment related to the collateral for a Master Agreement forward, which is segregated, and not available for use by the client. Example master agreement forwards include TBA, repo and Bond Forwards."),
+ FWSC("ForwardClientOwnedSegregatedCashCollateral", "Any cash payment related to the collateral for a Master agreement forward, which is owned by the client and is available for use by the client when it is returned to them from the segregated account. Example master agreement forwards include TBA, repo and Bond Forwards."),
+ FXNT("ForeignExchangeRelatedNetting", "FX netting if cash is moved by separate wire instead of within the closing FX instruction"),
+ GAFA("GovernmentFamilyAllowance", "Salary and Benefits-Allowance from government to support family."),
+ GAHO("GovernmentHousingAllowance", "Salary and Benefits-Allowance from government to individuals to support payments of housing."),
+ GAMB("GamblingOrWageringPayment", "General-Payments towards a purchase or winnings received from gambling, betting or other wagering activities."),
+ GASB("GasBill", "Transaction is related to a payment of gas bill."),
+ GDDS("PurchaseSaleOfGoods", "Transaction is related to purchase and sale of goods."),
+ GDSV("PurchaseSaleOfGoodsAndServices", "Transaction is related to purchase and sale of goods and services."),
+ GFRP("GuaranteeFundRightsPayment", "Compensation to unemployed persons during insolvency procedures."),
+ GIFT("Gift", "Payment with no commercial or statutory purpose."),
+ GOVI("GovernmentInsurance", "Transaction is related to a payment of government insurance."),
+ GOVT("GovernmentPayment", "Transaction is a payment to or from a government department."),
+ GSCB("PurchaseSaleOfGoodsAndServicesWithCashBack", "Transaction is related to purchase and sale of goods and services with cash back."),
+ GSTX("GoodsServicesTax", "Transaction is the payment of Goods & Services Tax"),
+ GVEA("AustrianGovernmentEmployeesCategoryA", "Transaction is payment to category A Austrian government employees."),
+ GVEB("AustrianGovernmentEmployeesCategoryB", "Transaction is payment to category B Austrian government employees."),
+ GVEC("AustrianGovernmentEmployeesCategoryC", "Transaction is payment to category C Austrian government employees."),
+ GVED("AustrianGovernmentEmployeesCategoryD", "Transaction is payment to category D Austrian government employees."),
+ GWLT("GovermentWarLegislationTransfer", "Payment to victims of war violence and to disabled soldiers."),
+ HEDG("Hedging", "Transaction is related to a hedging operation."),
+ HLRP("PropertyLoanRepayment", "Transaction is related to a payment of property loan."),
+ HLST("PropertyLoanSettlement", "Transaction is related to the settlement of a property loan."),
+ HLTC("HomeHealthCare", "Transaction is a payment for home health care services."),
+ HLTI("HealthInsurance", "Transaction is a payment of health insurance."),
+ HREC("HousingRelatedContribution", "Transaction is a contribution by an employer to the housing expenditures (purchase, construction, renovation) of the employees within a tax free fringe benefit system"),
+ HSPC("HospitalCare", "Transaction is a payment for hospital care services."),
+ HSTX("HousingTax", "Transaction is related to a payment of housing tax."),
+ ICCP("IrrevocableCreditCardPayment", "Transaction is reimbursement of credit card payment."),
+ ICRF("IntermediateCareFacility", "Transaction is a payment for intermediate care facility services."),
+ IDCP("IrrevocableDebitCardPayment", "Transaction is reimbursement of debit card payment."),
+ IHRP("InstalmentHirePurchaseAgreement", "Transaction is payment for an installment/hire-purchase agreement."),
+ INPC("InsurancePremiumCar", "Transaction is a payment of car insurance premium."),
+ INPR("InsurancePremiumRefund", "Transaction is related to an insurance premium refund."),
+ INSC("PaymentOfInsuranceClaim", "Transaction is related to the payment of an insurance claim."),
+ INSM("Installment", "Transaction is related to a payment of an installment."),
+ INSU("InsurancePremium", "Transaction is payment of an insurance premium."),
+ INTC("IntraCompanyPayment", "Transaction is an intra-company payment, ie, a payment between two companies belonging to the same group."),
+ INTE("Interest", "Transaction is payment of interest."),
+ INTP("IntraPartyPayment", "Transaction is a payment between two accounts belonging to the same party (intra-party payment), where party is a natural person (identified by a private ID, not organisation ID)."),
+ INTX("IncomeTax", "Transaction is related to a payment of income tax."),
+ INVS("InvestmentAndSecurities", "Transaction is for the payment of mutual funds, investment products and shares"),
+ IPAY("InstantPayments", "Transaction in which the amount is available to the payee immediately."),
+ IPCA("InstantPaymentsCancellation", "Transaction in which the Return of the amount is fully returned."),
+ IPDO("InstantPaymentsForDonations", "Transaction in which the amount is available to the payee immediately, done for donations, with sending the address data of the payer."),
+ IPEA("InstantPaymentsInECommerceWithoutAddressData", "Transaction in which the amount is available to the payee immediately, done in E-commerce, without sending the address data of the payer."),
+ IPEC("InstantPaymentsInECommerceWithAddressData", "Transaction in which the amount is available to the payee immediately, done in E-commerce, with sending the address data of the payer."),
+ IPEW("InstantPaymentsInECommerce", "Transaction in which the amount is available to the payee immediately, done in E-commerce."),
+ IPPS("InstantPaymentsAtPOS", "Transaction in which the amount is available to the payee immediately, done at POS."),
+ IPRT("InstantPaymentsReturn", "Transaction in which the Return of the amount is fully or partial returned."),
+ IPU2("InstantPaymentsUnattendedVendingMachineWith2FA", "Transaction is made via an unattending vending machine by using 2-factor-authentification."),
+ IPUW("InstantPaymentsUnattendedVendingMachineWithout2FA", "Transaction is made via an unattending vending machine by without using 2-factor-authentification."),
+ IVPT("InvoicePayment", "Transaction is the payment for invoices."),
+ LBIN("LendingBuyInNetting", "Net payment related to a buy-in. When an investment manager is bought in on a sell trade that fails due to a failed securities lending recall, the IM may seize the underlying collateral to pay for the buy-in. Any difference between the value of the collateral and the sell proceeds would be paid or received under this code"),
+ LBRI("LaborInsurance", "Transaction is a payment of labor insurance."),
+ LCOL("LendingCashCollateralFreeMovement", "Free movement of cash collateral. Cash collateral paid by the borrower is done separately from the delivery of the shares at loan opening or return of collateral done separately from return of the loaned security. Note: common when the currency of the security is different the currency of the cash collateral."),
+ LFEE("LendingFees", "Fee payments, other than rebates, for securities lending. Includes (a) exclusive fees; (b) transaction fees; (c)"),
+ LICF("LicenseFee", "Transaction is payment of a license fee."),
+ LIFI("LifeInsurance", "Transaction is a payment of life insurance."),
+ LIMA("LiquidityManagement", "Bank initiated account transfer to support zero target balance management, pooling or sweeping."),
+ LMEQ("LendingEquityMarkedToMarketCashCollateral", "Cash collateral payments resulting from the marked-to-market of a portfolio of loaned equity securities"),
+ LMFI("LendingFixedIncomeMarkedToMarketCashCollateral", "Cash collateral payments resulting from the marked-to-market of a portfolio of loaned fixed income securities"),
+ LMRK("LendingUnspecifiedTypeOfMarkedToMarketCashCollateral", "Cash collateral payments resulting from the marked-to-market of a portfolio of loaned securities where the instrument"),
+ LOAN("Loan", "Transaction is related to transfer of loan to borrower."),
+ LOAR("LoanRepayment", "Transaction is related to repayment of loan to lender."),
+ LOTT("LotteryPayment", "General-Payment towards a purchase or winnings received from lottery activities."),
+ LREB("LendingRebatePayments", "Securities lending rebate payments"),
+ LREV("LendingRevenuePayments", "Revenue payments made by the lending agent to the client"),
+ LSFL("LendingClaimPayment", "Payments made by a borrower to a lending agent to satisfy claims made by the investment manager related to sell fails from late loan recall deliveries"),
+ LTCF("LongTermCareFacility", "Transaction is a payment for long-term care facility services."),
+ MAFC("MedicalAidFundContribution", "Transaction is contribution to medical aid fund."),
+ MARF("MedicalAidRefund", "Transaction is related to a medical aid refund."),
+ MARG("DailyMarginOnListedDerivatives", "Daily margin on listed derivatives – not segregated as collateral associated with an FCM agreement. Examples"),
+ MBSB("MBSBrokerOwnedCashCollateral", "MBS Broker Owned Segregated (40Act/Dodd Frank) Cash Collateral - Any cash payment related to the collateral for a Mortgage Back Security, which is segregated, and not available for use by the client."),
+ MBSC("MBSClientOwnedCashCollateral", "MBS Client Owned Cash Segregated (40Act/Dodd Frank) Cash Collateral - Any cash payment related to the collateral for a Mortgage Back Security, which is owned by the client and is available for use by the client when it is returned to them from the segregated account"),
+ MCDM("MultiCurrenyChequeDomestic", "Transaction is the payment of a domestic multi-currency cheque"),
+ MCFG("MultiCurrenyChequeForeign", "Transaction is the payment of a foreign multi-currency cheque"),
+ MDCS("MedicalServices", "Transaction is a payment for medical care services."),
+ MGCC("FuturesInitialMargin", "Initial futures margin. Where such payment is owned by the client and is available for use by them on return"),
+ MGSC("FuturesInitialMarginClientOwnedSegregatedCashCollateral", "Margin Client Owned Segregated Cash Collateral - Any cash payment related to the collateral for initial futures margin, which is owned by the client and is available for use by the client when it is returned to them from the segregated account."),
+ MOMA("MoneyMarket", "Securities Lending-ettlement of Money Market PCH."),
+ MP2B("MobileP2BPayment", "A service which enables a user to use an app on its mobile to pay a merchant or other business payees by initiating a payment message. Within this context, the account information or an alias of the payee might be transported through different channels to the app, for example QR Code, NFC, Bluetooth, other Networks."),
+ MP2P("MobileP2PPayment", "A service which enables a user to use an app on its mobile to initiate moving funds from his/her bank account to another person’s bank account while not using the account number but an alias information like an MSISDN as account addressing information in his/her app."),
+ MSVC("MultipleServiceTypes", "Transaction is related to a payment for multiple service types."),
+ MTUP("MobileTopUp", "A Service that is first reserving money from a card account and then is loading a prepaid mobile phone amount by this amount."),
+ NETT("Netting", "Transaction is related to a netting operation."),
+ NITX("NetIncomeTax", "Transaction is related to a payment of net income tax."),
+ NOWS("NotOtherwiseSpecified", "Transaction is related to a payment for type of services not specified elsewhere."),
+ NWCH("NetworkCharge", "Transaction is related to a payment of network charges."),
+ NWCM("NetworkCommunication", "Transaction is related to a payment of network communication."),
+ OCCC("ClientOwnedOCCPledgedCollateral", "Client owned collateral identified as eligible for OCC pledging"),
+ OCDM("OrderChequeDomestic", "Transaction is the payment of a domestic order cheque"),
+ OCFG("OrderChequeForeign", "Transaction is the payment of a foreign order cheque"),
+ OFEE("OpeningFee", "Transaction is related to a payment of opening fee."),
+ OPBC("OTCOptionBrokerOwnedCashCollateral", "Cash collateral payment for OTC options associated with an FCM agreement. Where such payment is segregated and not available for use by the client"),
+ OPCC("OTCOptionClientOwnedCashCollateral", "Cash collateral payment for OTC options associated with an FCM agreement. Where such payment is not segregated and is available for use by the client upon return"),
+ OPSB("OTCOptionBrokerOwnedSegregatedCashCollateral", "Option Broker Owned Segregated Cash Collateral - Any cash payment related to the collateral for an OTC option, which is segregated, and not available for use by the client."),
+ OPSC("OTCOptionClientOwnedCashSegregatedCashCollateral", "Option Client Owned Cash Segregated Cash Collateral - Any cash payment related to the collateral for an OTC option, which is owned by the client and is available for use by the client when it is returned to them from the segregated account"),
+ OPTN("FXOption", "Cash collateral related to trading of option on Foreign Exchange."),
+ OTCD("OTCDerivatives", "Cash collateral related to Over-the-counter (OTC) Derivatives in general for example contracts which are traded and privately negotiated."),
+ OTHR("Other", "Other payment purpose."),
+ OTLC("OtherTelecomRelatedBill", "Transaction is related to a payment of other telecom related bill."),
+ PADD("PreauthorizedDebit", "Transaction is related to a pre-authorized debit origination"),
+ PAYR("Payroll", "Transaction is related to the payment of payroll."),
+ PCOM("PropertyCompletionPayment", "Final payment to complete the purchase of a property."),
+ PDEP("PropertyDeposit", "Payment of the deposit required towards purchase of a property."),
+ PEFC("PensionFundContribution", "Transaction is contribution to pension fund."),
+ PENO("PaymentBasedOnEnforcementOrder", "Payment based on enforcement orders except those arising from judicial alimony decrees."),
+ PENS("PensionPayment", "Transaction is the payment of pension."),
+ PHON("TelephoneBill", "Transaction is related to a payment of telephone bill."),
+ PLDS("PropertyLoanDisbursement", "Payment of funds from a lender as part of the issuance of a property loan."),
+ PLRF("PropertyLoanRefinancing", "Transfer or extension of a property financing arrangement to a new deal or loan provider, without change of ownership of property."),
+ POPE("PointOfPurchaseEntry", "Transaction is related to a payment associated with a Point of Purchase Entry."),
+ PPTI("PropertyInsurance", "Transaction is a payment of property insurance."),
+ PRCP("PricePayment", "Transaction is related to a payment of a price."),
+ PRME("PreciousMetal", "Transaction is related to a precious metal operation."),
+ PTSP("PaymentTerms", "Transaction is related to payment terms specifications"),
+ PTXP("PropertyTax", "Transaction is related to a payment of property tax."),
+ RAPI("RapidPaymentInstruction", "Instant Payments-Settlement of Rapid Payment Instruction (RPI) transactions."),
+ RCKE("RepresentedCheckEntry", "Transaction is related to a payment associated with a re-presented check entry"),
+ RCPT("ReceiptPayment", "Transaction is related to a payment of receipt."),
+ RDTX("RoadTax", "Transaction is related to a payment of road tax."),
+ REBT("Rebate", "Transaction is the payment of a rebate."),
+ REFU("Refund", "Transaction is the payment of a refund."),
+ RELG("RentalLeaseGeneral", "Transaction is for general rental/lease."),
+ RENT("Rent", "Transaction is the payment of rent."),
+ REOD("AccountOverdraftRepayment", "Transaction is for account overdraft repayment"),
+ REPO("RepurchaseAgreement", "Cash collateral related to a repurchase agreement transaction."),
+ RETL("RetailPayment", "Retail payment including e-commerce and online shopping."),
+ RHBS("RehabilitationSupport", "Benefit for the duration of occupational rehabilitation."),
+ RIMB("ReimbursementOfAPreviousErroneousTransaction", "Transaction is related to a reimbursement of a previous erroneous transaction."),
+ RINP("RecurringInstallmentPayment", "Transaction is related to a payment of a recurring installment made at regular intervals."),
+ RLWY("Railway", "Transaction is a payment for railway transport related business."),
+ ROYA("Royalties", "Transaction is the payment of royalties."),
+ RPBC("BilateralRepoBrokerOwnedCollateral", "Bi-lateral repo broker owned collateral associated with a repo master agreement – GMRA or MRA Master Repo"),
+ RPCC("RepoClientOwnedCollateral", "Repo client owned collateral associated with a repo master agreement – GMRA or MRA Master Repo Agreements"),
+ RPNT("BilateralRepoInternetNetting", "Bi-lateral repo interest net/bulk payment at rollover/pair-off or other closing scenarios where applicable"),
+ RPSB("BilateralRepoBrokerOwnedSegregatedCashCollateral", "Bi-lateral repo broker owned segregated cash collateral associated with a repo master agreement"),
+ RPSC("BilateralRepoClientOwnedSegregatedCashCollateral", "Repo client owned segregated collateral associated with a repo master agreement"),
+ RRBN("RoundRobin", "Cash payment resulting from a Round Robin"),
+ RRCT("ReimbursementReceivedCreditTransfer", "Transaction is related to a reimbursement for commercial reasons of a correctly received credit transfer."),
+ RRTP("RelatedRequestToPay", "Transaction is related to a Request to Pay."),
+ RVPM("ReceiveAgainstPayment", "Code used to pre-advise the account servicer of a forthcoming receive against payment instruction."),
+ RVPO("ReverseRepurchaseAgreement", "Cash collateral related to a reverse repurchase agreement transaction."),
+ SALA("SalaryPayment", "Transaction is the payment of salaries."),
+ SASW("ATM", "Card Settlement-Settlement of ATM transactions."),
+ SAVG("Savings", "Transfer to savings/retirement account."),
+ SBSC("SecuritiesBuySellSellBuyBack", "Cash collateral related to a Securities Buy Sell Sell Buy Back"),
+ SCIE("SingleCurrencyIRSExotic", "Cash collateral related to Exotic single currency interest rate swap."),
+ SCIR("SingleCurrencyIRS", "Cash collateral related to Single Currency Interest Rate Swap."),
+ SCRP("SecuritiesCrossProducts", "Cash collateral related to Combination of securities-related exposure types."),
+ SCVE("PurchaseSaleOfServices", "Transaction is related to purchase and sale of services."),
+ SECU("Securities", "Transaction is the payment of securities."),
+ SEPI("SecuritiesPurchaseInhouse", "Transaction is the payment of a purchase of securities where custodian bank and current account servicing bank coincide"),
+ SERV("ServiceCharges", "Transaction is related to service charges charged by a service provider."),
+ SHBC("BrokerOwnedCollateralShortSale", "Short Sale broker owned collateral associated with a prime broker agreement"),
+ SHCC("ClientOwnedCollateralShortSale", "Short Sale client owned collateral associated with a prime brokerage agreement"),
+ SHSL("ShortSell", "Cash Collateral related to a Short Sell"),
+ SLEB("SecuritiesLendingAndBorrowing", "Cash collateral related to Securities lending and borrowing."),
+ SLOA("SecuredLoan", "Cash collateral related to a Secured loan."),
+ SLPI("PaymentSlipInstruction", "Transaction is payment of a well formatted payment slip."),
+ SPLT("SplitPayments", "Split payments. To be used when cash and security movements for a security trade settlement are instructed"),
+ SPSP("SalaryPensionSumPayment", "Salary or pension payment for more months in one amount or a delayed payment of salaries or pensions."),
+ SSBE("SocialSecurityBenefit", "Transaction is a social security benefit, ie payment made by a government to support individuals."),
+ STDY("Study", "Transaction is related to a payment of study/tuition costs."),
+ SUBS("Subscription", "Transaction is related to a payment of information or entertainment services either in printed or electronic form."),
+ SUPP("SupplierPayment", "Transaction is related to a payment to a supplier."),
+ SWBC("SwapBrokerOwnedCashCollateral", "Cash collateral payment for swaps associated with an ISDA agreement. . Where such payment is segregated and"),
+ SWCC("SwapClientOwnedCashCollateral", "Cash collateral payment for swaps associated with an ISDA agreement. Where such payment is not segregated and"),
+ SWFP("SwapContractFinalPayment", "Final payments for a swap contract"),
+ SWPP("SwapContractPartialPayment", "Partial payment for a swap contract"),
+ SWPT("Swaption", "Cash collateral related to an option on interest rate swap."),
+ SWRS("SwapContractResetPayment", "Reset payment for a swap contract"),
+ SWSB("SwapsBrokerOwnedSegregatedCashCollateral", "Swaps Broker Owned Segregated Cash Collateral - Any cash payment related to the collateral for Swap margin ,"),
+ SWSC("SwapsClientOwnedSegregatedCashCollateral", "Swaps Client Owned Segregated Cash Collateral - Any cash payment related to the collateral for Swap margin,"),
+ SWUF("SwapContractUpfrontPayment", "Upfront payment for a swap contract"),
+ TAXR("TaxRefund", "Transaction is the refund of a tax payment or obligation."),
+ TAXS("TaxPayment", "Transaction is the payment of taxes."),
+ TBAN("TBAPairOffNetting", "TBA pair-off cash wire net movement"),
+ TBAS("ToBeAnnounced", "Cash collateral related to a To Be Announced (TBA)"),
+ TBBC("TBABrokerOwnedCashCollateral", "Cash collateral payment (segregated) for TBA securities associated with a TBA Master Agreement. Where such payment is segregated and not available for use by the client."),
+ TBCC("TBAClientOwnedCashCollateral", "Cash collateral payment (for use by client)for TBA securities associated with a TBA Master Agreement. Where such payment is not segregated and is available for use by the client upon return."),
+ TBIL("TelecommunicationsBill", "Transaction is related to a payment of telecommunications related bill."),
+ TCSC("TownCouncilServiceCharges", "Transaction is related to a payment associated with charges levied by a town council."),
+ TELI("TelephoneInitiatedTransaction", "Transaction is related to a payment initiated via telephone."),
+ TLRF("NonUSMutualFundTrailerFeePayment", "Any non-US mutual fund trailer fee (retrocession) payment (use ISIN to determine onshore versus offshore designation)"),
+ TLRR("NonUSMutualFundTrailerFeeRebatePayment", "Any non-US mutual fund trailer fee (retrocession) rebate payment (use ISIN to determine onshore versus offshore designation)"),
+ TMPG("TMPGClaimPayment", "Cash payment resulting from a TMPG Claim"),
+ TPRI("TriPartyRepoInterest", "Tri-Party Repo related interest"),
+ TPRP("TriPartyRepoNetting", "Tri-party Repo related net gain/loss cash movement"),
+ TRAD("Commercial", "Transaction is related to a trade services operation."),
+ TRCP("TreasuryCrossProduct", "Cash collateral related to a combination of treasury-related exposure types."),
+ TREA("TreasuryPayment", "Transaction is related to treasury operations."),
+ TRFD("TrustFund", "Transaction is related to a payment of a trust fund."),
+ TRNC("TruncatedPaymentSlip", "Transaction is payment of a beneficiary prefilled payment slip where beneficiary to payer information is truncated."),
+ TRPT("RoadPricing", "Transaction is for the payment to top-up pre-paid card and electronic road pricing for the purpose of transportation"),
+ TRVC("TravellerCheque", "Transaction is the payment of a travellers cheque"),
+ UBIL("Utilities", "Transaction is for the payment to common utility provider that provide gas, water and/or electricity."),
+ UNIT("UnitTrustPurchase", "Transaction is purchase of Unit Trust"),
+ VATX("ValueAddedTaxPayment", "Transaction is the payment of value added tax."),
+ VIEW("VisionCare", "Transaction is a payment for vision care services."),
+ WEBI("InternetInitiatedTransaction", "Transaction is related to a payment initiated via internet."),
+ WHLD("WithHolding", "Transaction is related to a payment of withholding tax."),
+ WTER("WaterBill", "Transaction is related to a payment of water bill."),
+}
+
+/** Specifies the external service level code in the format of character string with a maximum length of 4 characters */
+enum class ExternalServiceLevel1Code(val isoCode: String, val description: String) {
+ BKTR("BookTransaction", "Payment through internal book transfer."),
+ EOLO("EuroOneLegOut", "Payment is executed following a Euro One-Leg Out Scheme."),
+ G001("TrackedCustomerCreditTransfer", "Tracked Customer Credit Transfer."),
+ G002("TrackedStopAndRecall", "Tracked Stop and Recall"),
+ G003("TrackedOutboundCorporateTransfer", "Tracked Outbound Corporate Transfer."),
+ G004("TrackedFinancialInstitutionTransfer", "Tracked Financial Institution Transfer."),
+ G005("TrackedInstantCustomerCreditTransfer", "Tracked Instant Customer Credit Transfer._x000D_"),
+ G006("TrackedCaseManagement", "Specifies the service conditions applicable to a tracked exceptions and investigations case."),
+ G007("TrackedInboundCustomerCreditTransfer", "Specifies the service level for a tracked inbound customer credit transfer."),
+ G009("TrackedLowValueCrossBorderCustomerCreditTransfer", "Specifies the service level for a tracked low-value cross-border customer credit transfer."),
+ INST("InstantCreditTransferOrInstantDirectDebit", "Used for payment initiation to identify that a Payment or Direct Debit initiation must be executed as an instant or real-time payment instrument."),
+ NPCA("NordicPaymentsCouncilAreaTransfer", "Payments must be executed following the NPC Area Payment scheme."),
+ NUGP("NonurgentPriorityPayment", "Payment must be executed as a non-urgent transaction with priority settlement."),
+ NURG("NonurgentPayment", "Payment must be executed as a non-urgent transaction, which is typically identified as an ACH or low value transaction."),
+ PRPT("EBAPriorityService", "Transaction must be processed according to the EBA Priority Service."),
+ SDVA("SameDayValue", "Payment must be executed with same day value to the creditor."),
+ SEPA("SingleEuroPaymentsArea", "Payment must be executed following the Single Euro Payments Area scheme."),
+ SRTP("ServiceRequestToPay", "Request to Pay (RTP) transaction refers to an RTP scheme (such as for example the SEPA Request to Pay (SRTP) scheme)."),
+ SVAT("ScheckVerarbeitungAustria", "Scheck Verarbeitung Austria (Cheque Processing)."),
+ SVDE("DomesticChequeClearingAndSettlement", "Payment execution following the cheque agreement and traveller cheque agreement of the German Banking Industry Committee (Die Deutsche Kreditwirtschaft - DK) and Deutsche Bundesbank – Scheck Verrechnung Deutschland"),
+ URGP("UrgentPayment", "Payment must be executed as an urgent transaction cleared through a real-time gross settlement system, which is typically identified as a wire or high value transaction."),
+ URNS("UrgentPaymentNetSettlement", "Payment must be executed as an urgent transaction cleared through a real-time net settlement system, which is typically identified as a wire or high value transaction."),
+ WFSM("WaitForSettlement", "Transaction is to be treated as an advice and only applied to the account of the creditor or next agent after settlement of the cover has been confirmed."),
+}
+
+/** Specifies the nature, or use, of the amount in the format of character string with a maximum length of 4 characters */
+enum class ExternalTaxAmountType1Code(val isoCode: String, val description: String) {
+ CITY("CityTax", "Tax accessed by city jurisdications within a country."),
+ CNTY("CountyTax", "Tax accessed by county jurisdications within a country."),
+ LOCL("LocalTax", "Tax accessed by local jurisdications within a country."),
+ PROV("ProvinceTax", "Tax accessed by province jurisdications within a country."),
+ STAT("StateTax", "Tax accessed by state jurisdications within a country."),
+}
+
+/** Specifies the cash clearing system, as published in an external cash clearing system code list */
+enum class ExternalCashClearingSystem1Code(val isoCode: String, val description: String) {
+ ABE("EBAEuro1Step1", "EBA Euro1/Step1."),
+ ACH("ACH", "Automated Clearing House. Payment system that clears cash transfers and settles the proceeds in a lump sum, usually on a multilateral netting basis."),
+ ACS("CanadaACSS", "Canadian Dollar (CAD) - Automated Clearing Settlement System (ACSS)"),
+ AIP("Albania", "AL (Albania) - Albania Interbank Payment System."),
+ ART("Austrian", "AT (Austria) - Austrian RTGS."),
+ AVP("NewZealand", "NZ (New Zealand) - New Zealand Assured Value Payments."),
+ AZM("Azerbaijan", "AZ (Azerbaijan) - Azerbaijan Interbank Payment System (AZIPS)."),
+ B27("P27", "P27 Clearing – Batch Payment Platform."),
+ BAP("BosniaHerzegovina", "BA (Bosnia and Herzegovina)."),
+ BCC("SwedenBGC", "SE (Sweden) - Sweden BGC Clearing CUG."),
+ BCE("Ecuador", "EC (Ecuador) - Ecuadorian Central Payment System (Sistema Central de Pagos Ecuatoriano)"),
+ BDS("Barbados", "BB (Barbados) - Barbados RTGS (CBRTGS)."),
+ BEL("Belgium", "BE (Belgium) - Belgium RTGS (ELLIPS)."),
+ BGN("Bulgaria", "BG (Bulgaria) - Bulgaria RTGS."),
+ BHS("Bahamas", "BS (Bahamas) - Bahamas RTGS."),
+ BIS("Botswana", "BW (Botswana) - Botswana Interbank Settlement System."),
+ BOF("Finland", "FI (Finland) - RTGS (BOF)."),
+ BOJ("BankOfJapanNet", "the Bank of Japan clearing system."),
+ BOK("KoreaBOKWire", "KR (South Korea) – Korean Won RTGS (BOK-Wire+)."),
+ BRL("Italy", "IT (Italy) - Italy RTGS (BIREL)."),
+ BSP("Philippines", "PH (Philippines) - Philippines Payment System."),
+ CAD("CanadaCAD", "CA (Canada) - Canadian Large Value Transfer System (LVTS)"),
+ CAM("SpainCAM", "ES (Spain)."),
+ CBA("CentralBankOfArubaCSM", "AW (Aruba) - Central Bank of Aruba CSM"),
+ CBC("CentraleBankVanCuraçaoEnSintMaartenCSM", "CW (Curaçao), SX (Sint Maarten) Central Bank of Curaçao and Sint Maarten CSM"),
+ CBJ("Ireland", "IE (Ireland) - Irish RTGS (IRIS)."),
+ CCE("Peru", "Real-Time Payment System Peru"),
+ CHI("USTCHChips", "US - The Clearing House CHIPS"),
+ CHP("UnitedKingdom", "GB (UK) - British Euro RTGS (CHAPS)."),
+ CIP("China", "Cross-border Interbank Payment System (CIPS)"),
+ CIS("CentralInteroperabilityService", "Central Interoperability Service of the EACHA Clearing Cooperative, for exchanging SEPA payments between Automated Clearing Houses in the EEA."),
+ COE("ColumbiaCEDEC", "CO (Columbia) - Colombian Electronic Cheque System named CEDEC (Compensación Electrónica De Cheques)."),
+ COI("ColumbiaCENIT", "CO (Columbia) - Colombian Central Bank´s ACH named CENIT (Compensación Electrónica Nacional Interbancaria)."),
+ COU("ColumbiaCUD", "CO (Columbia) - Colombian RTGS System named CUD (Cuentas de Depósito)."),
+ DDK("DenmarkDDK", "DK (Denmark) - Danish Krone RTGS (KRONOS)"),
+ DKC("Denmark", "DK (Denmark) - Danish Euro RTGS (KRONOS)"),
+ EBA("EBAEuro1", "EBA Euro1."),
+ ELS("GermanyELS", "DE (Germany)."),
+ EMZ("Germany", "Elektronischer Massenzahlungsverkehr (EMZ)"),
+ EPM("ECB", "ECB (European Central Bank) - ECB Payment Mechanism."),
+ EPN("USTCHEPN", "US - The Clearing House EPN"),
+ ERP("EBAStep1", "EBA step 1 (members)."),
+ FDA("USFedACH", "US (United States) - Federal Reserve Banks Automated Clearing House Service."),
+ FDN("USFedNow", "US (United States) - Federal Reserve Banks FedNow Service."),
+ FDW("USFedwireFunds", "US (United States) - Federal Reserve Banks Fedwire Funds Service."),
+ FEY("ForeignExchangeYenClearing", "JP (Japan) the Foreign Exchange Yen Clearing system (FEYCS). It is the Japanese electronic interbank system for sending guaranteed and unconditional yen payments of FX deals for same day settlement from one settlement bank, on behalf of itself or its customers, to another settlement bank."),
+ FPS("FasterPaymentsServices", "Faster Payments Service in UK."),
+ GIS("Ghana", "GH (Ghana) - Ghana Interbank Settlement System (GISS)."),
+ HKL("HongKongCHATS", "Hong Kong Clearing House Automated Transfer System (CHATS)."),
+ HKS("HongKongFPS", "Hong Kong Faster Payment System or FPS. A system owned and operated by the HKICL, to provide instant clearing and settlement payment services."),
+ HRK("Croatia", "HR (Croatia) - HSVP."),
+ HRM("Greece", "GR (Greece) - Greek RTGS (HERMES)."),
+ HUF("Hungary", "HU (Hungary) - VIBER."),
+ I27("P27RealTime", "P27 Clearing – Instant Payment Platform."),
+ IBP("SpainIberpayInstantPayments", "ES - Spain - Iberpay Instant Payments"),
+ IMP("IndiaImmediatePaymentService", "India Immediate Payment Service"),
+ INC("DEandNLEquens", "DE and NL - Equens"),
+ ISG("Iceland", "IS (Iceland) – Icelandic krona RTGS (MBK)."),
+ ISW("NGInterswitch", "NG (Nigeria) - Interswitch."),
+ JOD("Jordan", "JO (Jordan) - Jordan RTGS."),
+ KPS("Kenya", "KE (Kenya) - Kenyan Electronic Payment Settlement System."),
+ KTS("PapuaNewGuineaKATS", "PG (Papua New Guinea) – Kina Automated Transfer System RTGS (KATS RTGS)."),
+ LGS("Luxemburg", "LU (Luxemburg) - Luxembourg RTGS (LIPS)."),
+ LKB("SriLanka", "LK (Sri Lanka) - Sri Lanka (Lankasettle)."),
+ LVL("Latvia", "LV (Latvia)."),
+ LVT("CanadaLVTS", "CA (Canada) - Large Value Transfer System (LVTS)."),
+ LYX("LynxCanada", "CA (Canada) Lynx High Value Payment System."),
+ MEP("Singapore", "SG (Singapore) - Singapore RTGS (MEPS+)."),
+ MOC("BancoDeMocambiqueRTGS", "Banco de Mocambique RTGS system."),
+ MOS("SouthAfrica", "ZA (South Africa) - South-African Multiple Option Settlement."),
+ MQQ("MacaoRTGS", "Macao Real Time Gross Settlement System"),
+ MRS("Malta", "MT (Malta) - Malta Realtime Interbank Settlement System."),
+ MUP("Mauritius", "MU (Mauritius)."),
+ NAM("Namibia", "NA (Namibian) - Namibian Interbank Settlement System."),
+ NBO("NorwayRTGS", "NO - Norway NOK RTGS Norges Bank"),
+ NOC("Norway", "NO (Norway)."),
+ NOR("NorwayNICSReal", "NICS Real (Norway)"),
+ NPP("AustraliaNPP", "AU (Australia) - New Payments Platform (NPP)."),
+ NSS("USNSS", "US (United States) - Federal Reserve Banks National Settlement Service."),
+ NZE("NewZealandRTGS", "NZ (New Zealand) – New Zealand Dollar RTGS (ESAS)"),
+ PCH("Switzerland", "CH (Switzerland)."),
+ PDS("AustraliaPDS", "AU (Australia)."),
+ PEG("Egypt", "EG (Egypt)."),
+ PNS("FrancePNS", "FR (France)."),
+ PSA("AustrianCSM", "AT (Austria) – Austrian CSM."),
+ PTR("Angola", "AO (Angola) - Angola RTGS."),
+ PVE("Venezuela", "Ve (Venezuela)."),
+ RBM("ReserveBankOfMalawiRTGS", "Malawi – Malawi Interbank Transfer and Settlement System."),
+ RIX("RIXRTGSSverigesRiksbank", "SE (Sweden) – SEK RTGS (RIX)."),
+ ROL("RomaniaEPO", "RO (Romania) - Romanian Electronic Payment Operations RT."),
+ RON("RomaniaRTGS", "RO- Romania RON RTGS National Bank of Romania."),
+ ROS("RomaniaGSRS", "RO (Romania) - Romanian GSRS."),
+ RTG("RTGS", "Real Time Gross Settlement System. Payment system that simultaneously clears individual transfers and settles them in central bank money."),
+ RTP("GermanyRTGSPlus", "DE (Germany)."),
+ RTR("RTRCanada", "CA (Canada) Real Time Rail Payment System."),
+ SCL("RPSAndSEPAClearer", "DE – SEPA-Clearer of the Retail Payment System operated by Deutsche Bundesbank"),
+ SCP("Chili", "CL (Chile) - Chilean Interbank Payment System."),
+ SCR("SingaporeSCRIPS", "SG (Singapore) - Singapore RTGS (SCRIPS)."),
+ SEC("SwedenSEC", "SE (Sweden) - Swedish Euro RTGS (SEC)."),
+ SEU("euroSIC", "CH (Switzerland) – Swiss EUR RTGS named euroSIC."),
+ SIC("SIC", "CH (Switzerland) – Swiss CHF RTGS named SIC."),
+ SIP("SICIP", "CH (Switzerland) – Swiss Instant Payment service in CHF operated by SIX Interbank Clearing."),
+ SIT("Slovania", "SI (Slovenia)."),
+ SLB("SpainES", "ES (Spain) - Spanish RTGS (SLBE)."),
+ SPG("Portugal", "PT (Portugal) - Portuguese RTGS (SPGT)."),
+ SRB("SORBNET3", "Narodowy Bank Polski RTGS System."),
+ SSK("SwedenSSK", "SE (Sweden) - SEK RTGS (RIX)."),
+ ST2("EBAClearingSTEP2", "EBA Clearing STEP 2."),
+ STG("UnitedKingdomGBP", "UK (United Kingdom) - CHAPS Sterling RTGS."),
+ TBF("FranceFR", "FR (France) - French RTGS (TBF)."),
+ TCH("USTCHRealTime", "US - The Clearing House Real-TimePayment System"),
+ TGT("Target", "Target."),
+ THB("Thailand", "TH (Thailand) - Thailand Payment System (BAHTNET)."),
+ THN("Thailand-NITMX", "TH (Thailand) - National ITMX Payment System"),
+ TIS("Tanzania", "TZ (Tanzania) - Tanzania Interbank Settlement System (TISS)."),
+ TOP("Netherlands", "NL (Netherlands) - Dutch RTGS (TOP)"),
+ TTD("TrinidadAndTobago", "TT (Trinidad and Tobago ) - Trinidad and Tobago SAFE-TT."),
+ TWP("TaiwanRTGS", "Taiwan Real-Time Gross Settlement System."),
+ UBE("CanadaUSBE", "United States Dollar (USD) – US Bulk Exchange Clearing System (USBE)"),
+ UIS("Uganda", "UG (Uganda) - Uganda National Interbank Settlement System."),
+ UKD("UnitedKingdomUKD", "UK (United Kingdom) – Pay.UK Sterling Domestic."),
+ UPI("IndiaUnifiedPaymentsInterface", "India Unified Payments Interface."),
+ VCS("VocaLink", "VocaLink Clearing System"),
+ XCT("EBASTEP2XCT", "EBA step 2."),
+ ZEN("Zengin", "JP (Japan) the Zengin system. The electronic payment system for domestic third party transfers managed by the Tokyo Bankers Association."),
+ ZET("Zimbabwe", "ZW (Zimbabwe) - Zimbabwe Electronic Transfer & Settlement System."),
+ ZIS("Zambia", "ZM (Zambia) - Zambian Interbank Payment &Settlement System."),
+}
+
+/** Specifies the nature, or use, of the charges in the format of character string with a maximum length of 4 characters */
+enum class ExternalChargeType1Code(val isoCode: String, val description: String) {
+ AMND("Amendment", "Payment order was changed based on request to do so from the (original) sending bank or as a result of receiving amended information from the (original) sending bank."),
+ BRKF("BrokerageFee", "Fee paid to a broker for services provided."),
+ BTCH("Batch", "Fee paid for processing a batch of transactions."),
+ CFEE("CancellationFee", "Used when fees are assessed for cancellation of a payment."),
+ CLEF("ClearingFee", "Used when fees are assessed for standard processing of financial institution type transfers."),
+ COMM("Commission", "Fee paid for services provided."),
+ DEBT("BorneByDebtor", "Claim is being submitted in response to receiving a customer credit transfer with DEBT in Charge Bearer code."),
+ INTE("Interest", "Interest related charges."),
+ INVS("Investigation", "Charges related to the processing of an investigation case/inquiry."),
+ NSTP("NonSTPCharges", "Charge for a payment that required an intervention during processing."),
+ SUMM("Summation", "Summation of individual fees."),
+ TELE("TelecommunicationCharges", "Charges relating to the most appropriate and efficient means of telecommunications available, for example, SWIFT, telex, telephone, facsimile, as determined by the party executing the payment instruction."),
+}
+
+/** Specifies the status of a group of payment instructions, as published in an external payment group status code set */
+enum class ExternalPaymentGroupStatus1Code(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."),
+}
+
+/** Specifies the status of an individual payment instructions, as published in an external payment transaction status code set */
+enum class ExternalPaymentTransactionStatus1Code(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."),
+ ACFC("AcceptedFundsChecked", "Preceding check of technical validation and customer profile was successful and an automatic funds check was positive."),
+ ACIS("AcceptedandChequeIssued", "Payment instruction to issue a cheque has been accepted, and the cheque has been issued but not yet been deposited or cleared."),
+ ACPD("AcceptedClearingProcessed", "Status of transaction released from the Debtor Agent and accepted by the clearing."),
+ ACSC("AcceptedSettlementCompletedDebitorAccount", "Settlement completed."),
+ ACSP("AcceptedSettlementInProcess", "All preceding checks such as technical validation and customer profile were successful and therefore the payment instruction 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."),
+ ACWP("AcceptedWithoutPosting", "Payment instruction included in the credit transfer is accepted without being posted to the creditor customer’s account."),
+ BLCK("Blocked", "Payment transaction previously reported with status 'ACWP' is blocked, for example, funds will neither be posted to the Creditor's account, nor be returned to the Debtor."),
+ CANC("Cancelled", "Payment initiation has been successfully cancelled after having received a request for cancellation."),
+ CPUC("CashPickedUpByCreditor", "Cash has been picked up by the Creditor."),
+ PATC("PartiallyAcceptedTechnicalCorrect", "Payment initiation needs multiple authentications, where some but not yet all have been performed. Syntactical and semantical validations are successful."),
+ PDNG("Pending", "Payment instruction is pending. Further checks and status update will be performed."),
+ PRES("Presented", "Request for Payment has been presented to the Debtor."),
+ RCVD("Received", "Payment instruction has been received."),
+ RJCT("Rejected", "Payment instruction has been rejected."),
+}
+
+/** Specifies the status reason, as published in an external status reason code list */
+enum class ExternalStatusReason1Code(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."),
+ 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."),
+ AC05("ClosedDebtorAccountNumber", "Debtor account number closed"),
+ 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."),
+ 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."),
+ 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."),
+ 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."),
+ 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."),
+ AGNT("IncorrectAgent", "Agent in the payment workflow is incorrect"),
+ 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."),
+ 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."),
+ AM09("WrongAmount", "Amount received is not the amount agreed or expected"),
+ 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"),
+ AM14("AmountExceedsAgreedLimit", "Transaction amount exceeds limits agreed between bank and client"),
+ 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."),
+ 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)."),
+ 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."),
+ BE08("MissingDebtorName", "Debtor name is missing"),
+ 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."),
+ 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."),
+ 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."),
+ 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."),
+ 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"),
+ CH09("MandateChangesNotAllowed", "Mandate changes are not allowed"),
+ CH10("InformationOnMandateChangesMissing", "Information on mandate changes are missing"),
+ CH11("CreditorIdentifierIncorrect", "Value in Creditor Identifier is incorrect"),
+ CH12("CreditorIdentifierNotUnambiguouslyAtTransaction-Level", "Creditor Identifier is ambiguous at Transaction Level"),
+ CH13("OriginalDebtorAccountIsNotToBeUsed", "Original Debtor Account is not to be used"),
+ CH14("OriginalDebtorAgentIsNotToBeUsed", "Original Debtor Agent is not to be used"),
+ CH15("ElementContentIncludesMoreThan140Characters", "Content Remittance Information/Structured includes more than 140 characters"),
+ CH16("ElementContentFormallyIncorrect", "Content is incorrect"),
+ CH17("ElementNotAdmitted", "Element is not allowed"),
+ CH19("ValuesWillBeSetToNextTARGETday", "Values in Interbank Settlement Date or Requested Collection Date will be set to the next TARGET day"),
+ 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."),
+ 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."),
+ 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"),
+ DS03("OrderNotCancelled", "The user’s attempt to cancel the order was not successful"),
+ DS04("OrderRejected", "The order was rejected by the bank side (for reasons concerning content)"),
+ DS05("OrderForwardedForPostprocessing", "The order was correct and could be forwarded for postprocessing"),
+ DS06("TransferOrder", "The order was transferred to VEU"),
+ 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."),
+ 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."),
+ 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."),
+ 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."),
+ 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"),
+ DS27("UserNotYetActivated", "The user is not yet activated (technically)"),
+ DT01("InvalidDate", "Invalid date (eg, wrong or missing settlement date)"),
+ 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."),
+ 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."),
+ DUPL("DuplicatePayment", "Payment is a duplicate of another payment"),
+ 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."),
+ 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."),
+ 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"),
+ FF07("InvalidPurpose", "Purpose is missing or invalid"),
+ 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."),
+ MD01("NoMandate", "No Mandate"),
+ 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."),
+ 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."),
+ 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."),
+ 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."),
+ 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."),
+ 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."),
+ 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."),
+ 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."),
+ TS04("TransferToSignByHand", "The order was transferred to pass by accompanying note signed by hand"),
+ UCRD("UnknownCreditor", "Unknown Creditor."),
+ UPAY("UnduePayment", "Payment is not justified."),
+}
+
+/** Specifies the status of an entry on the books of the account servicer, as published in an external code set */
+enum class ExternalEntryStatus1Code(val isoCode: String, val description: String) {
+ BOOK("Booked", "Booked means that the transfer of money has been completed between account servicer and account owner."),
+ FUTR("Future", "Entry is on the books of the account servicer and value will be applied to the account owner at a future date and time."),
+ INFO("Information", "Entry is only provided for information, and no booking on the account owner's account in the account servicer's ledger has been performed."),
+ PDNG("Pending", "Booking on the account owner's account in the account servicer's ledger has not been completed."),
+}
+
+/** Specifies the external financial instrument identification type scheme name code in the format of character string with a maximum length of 4 characters */
+enum class ExternalFinancialInstrumentIdentificationType1Code(val isoCode: String, val description: String) {
+ BELC("CodeSRWSecretariaatVoorRoerendeWaardenOrSVMSecrétariatDesValeursMobilières", "National securities identification number for BE issued by the National Numbering Association SIX Telekurs Belgium."),
+ BLOM("Bloomberg", "Ticker-like code assigned by Bloomberg to identify financial instruments."),
+ CCCD("OtherNationalSecuritiesIdentificationNumber", "National Securities Identification Number issued by the National Numbering Association for a country for which no specific financial instrument identification type code already yet. The first two letters of the code represents the country code (for example, EGDC for Egyptian NSIN). To be used only until the code is added to the ISO ExternalFinancialInstrumentIdentificationType1Code list."),
+ CCDC("BondIdentificationCodeListChina", "National Bond identification number for China issued by CHINA CENTRAL DEPOSITORY & CLEARING CO., Limited."),
+ CMED("ChicagoMercantileExchangeCME", "Ticker-like code assigned by the Chicago Mercantile Exchange to identify listed-derivatives instruments."),
+ COMM("CommonCode", "National securities identification number for ICSDs issued by the National Numbering Association Clearstream and Euroclear."),
+ CTAC("ConsolidatedTapeAssociationCTA", "Ticker-like code assigned by the Consolidated Tape Association to identify financial instruments."),
+ CUSP("CommitteeOnUniformSecurityIdentificationProceduresCUSIP", "National securities identification number for US and CA issued by the National Numbering Association Standard & Poor´s - CUSIP Global Services."),
+ DTID("DigitalTokenIdentifier", "Digital Token Identifier, as defined in ISO 24165."),
+ FIGC("FinancialInstrumentGlobalIdentifierComposite", "A Financial Instrument Global Identifier Composite (FIGC) is a unique, persistent twelve character string that serves to identify financial instruments across asset classes at the composite level, is associated with one or more FIGI venue level ID’s and a single Share Class level ID."),
+ FIGG("FinancialInstrumentGlobalIdentifierShareClass", "A Financial Instrument Global Identifier Share Class (FIGG) is a unique, persistent twelve character string that serves to identify financial instruments across asset classes at the global share class level, and is associated with one or more Composite level ID’s."),
+ FIGI("FinancialInstrumentGlobalIdentifier", "A Financial Instrument Global Identifier (FIGI) is a unique, persistent twelve character string that serves to identify financial instruments across asset classes at the venue level. It is associated with one Composite ID."),
+ ISDU("ISDAAndFpMLProductURLInSecurityID", "URL in Description to identify OTC derivatives instruments."),
+ ISDX("ISDAAndFpMLProductSpecificationXMLInEncodedSecurityDesc", "XML in Description to identify OTC derivatives instruments."),
+ LCHD("LCHClearnet", "Ticker-like code assigned by LCH to identify listed-derivatives instruments."),
+ OCCS("OptionsClearingCorpOCC", "Ticker-like code assigned by the Options Clearing Corporation to identify financial instruments."),
+ OPRA("OptionsPriceReportingAuthorityOPRA", "Ticker-like code assigned by the Options Price Reporting Authority to identify financial instruments."),
+ RCMD("MarkitRedCode", "Ticker-like code assigned by Markit to identify listed-derivatives instruments."),
+ RICC("ReutersInstrumentCodeRIC", "Ticker-like code assigned by Thomson Reuters to identify financial instruments."),
+ SEDL("StockExchangeDailyOfficialListSEDOL", "National securities identification number for GB issued by the National Numbering Association London Stock Exchange."),
+ SICC("SecuritiesIdentificationCodeCommittee", "National securities identification number for JP issued by the National Numbering Association 6 Stock Exchanges and JASDEC (Securities Identification Ticker-like code Committee)"),
+ TIKR("TickerSymbolTS", "Ticker Code assigned by an exchange to identify financial instruments."),
+ VALO("VALOR", "National securities identification number for CH and LI issued by the National Numbering Association SIX Telekurs Ltd."),
+ WKNR("WertpapierkennummerWKN", "National securities identification number for DE issued by the National Numbering Association WM Datenservice."),
+}
+
+/** Specifies the external representment reason code in the format of character string with a maximum length of 4 characters. The list of valid codes is an external code list published separately */
+enum class ExternalRePresentmentReason1Code(val isoCode: String, val description: String) {
+ AMCR("AmountCorrected", "Amount corrected due to proof of transaction"),
+ CLSD("CardAuthenticationLiabilityShiftDenied", "Liability Shift to acquirer due to missing card authentication method denied"),
+ CRPI("CreditPreviouslyIssued", "Credit previously issued"),
+ OTVA("OriginalTransactionValid", "Original transaction was valid"),
+ VLSD("VerificationLiabilityShiftDenied", "Liability Shift to acquirer due to missing cardholder verification method denied"),
+}
+
+/** Specifies the reporting source, as published in an external reporting source code list */
+enum class ExternalReportingSource1Code(val isoCode: String, val description: String) {
+ ACCT("Accounting", "Statement or Report is based on accounting data."),
+ ARPF("AccountReconciliationSystemFull", "An account reconciliation system that provides full reconciliation that usually addresses checks"),
+ ARPP("AccountReconciliationSystemPartial", "An account reconciliation system that provides partial reconciliation that usually addresses checks"),
+ CTDB("ControlledDisbursementSystem", "A sub-application that reports presentment totals"),
+ CUST("Custody", "Statement or Report is based on custody data."),
+ DEPT("DepositSystem", "Cash or deposit accounting system"),
+ DPCS("DepositConcentrationSystem", "Deposit system that reports what has been collected from various financial institutions"),
+ LKBX("Lockbox", "Processing system that captures and reports check data in a lockbox environment."),
+ MIBO("MIBackOffice", "Transaction submitted directly from PMI (Payment Market Infrastructure back-office system."),
+ PFRE("ParticipantFrontEnd", "Transactions submitted directly from participant / PSO (Payment System Operator) applications."),
+ RCPT("Receipts", "A system that reports consolidated remittance information obtained from various , i.e., ACH, wires, lockbox, etc."),
+}
+
+/** Specifies the return reason, as published in an external return reason code list */
+enum class ExternalReturnReason1Code(val isoCode: String, val description: String) {
+ AC01("IncorrectAccountNumber", "Format of the account number specified is not correct"),
+ AC02("InvalidDebtorAccountNumber", "Debtor account number invalid or missing."),
+ AC03("InvalidCreditorAccountNumber", "Wrong IBAN in SCT"),
+ AC04("ClosedAccountNumber", "Account number specified has been closed on the bank of account's books"),
+ AC06("BlockedAccount", "Account specified is blocked, prohibiting posting of transactions against it."),
+ AC07("ClosedCreditorAccountNumber", "Creditor account number closed."),
+ AC13("InvalidDebtorAccountType", "Debtor account type is missing or invalid"),
+ AC14("InvalidAgent", "An agent in the payment chain is invalid."),
+ AC15("AccountDetailsChanged", "Account details have changed."),
+ AC16("AccountInSequestration", "Account is in sequestration."),
+ AC17("AccountInLiquidation", "Account is in liquidation."),
+ 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"),
+ AG07("UnsuccesfulDirectDebit", "Debtor account cannot be debited for a generic reason._x000D_"),
+ AGNT("IncorrectAgent", "Agent in the payment workflow is incorrect."),
+ 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."),
+ 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."),
+ AM09("WrongAmount", "Amount received is not the amount agreed or expected"),
+ AM10("InvalidControlSum", "Sum of instructed amounts does not equal the control sum."),
+ ARDT("AlreadyReturnedTransaction", "Already returned original SCT"),
+ BE01("InconsistenWithEndCustomer", "Identification of end customer is not consistent with associated account number, organisation ID or private ID."),
+ 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."),
+ BE08("BankError", "Returned as a result of a bank error."),
+ BE10("InvalidDebtorCountry", "Debtor country code is missing or invalid."),
+ BE11("InvalidCreditorCountry", "Creditor country code is 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."),
+ CN01("AuthorisationCancelled", "Authorisation is cancelled."),
+ CNOR("CreditorBankIsNotRegistered", "Creditor bank is not registered under this BIC in the CSM"),
+ CNPC("CashNotPickedUp", "Cash not picked up by Creditor or cash could not be delivered to Creditor"),
+ CURR("IncorrectCurrency", "Currency of the payment is incorrect"),
+ CUST("RequestedByCustomer", "Cancellation requested by the Debtor"),
+ DC04("NoCustomerCreditTransferReceived", "Return of Covering Settlement due to the underlying Credit Transfer details not being received."),
+ DNOR("DebtorBankIsNotRegistered", "Debtor bank is not registered under this BIC in the CSM"),
+ DS28("ReturnForTechnicalReason", "Return following technical problems resulting in erroneous transaction."),
+ DT01("InvalidDate", "Invalid date (eg, wrong settlement date)"),
+ DT02("ChequeExpired", "Cheque has been issued but not deposited and is considered expired."),
+ DT04("FutureDateNotSupported", "Future date not supported."),
+ DUPL("DuplicatePayment", "Payment is a duplicate of another payment."),
+ ED01("CorrespondentBankNotPossible", "Correspondent bank not possible."),
+ ED03("BalanceInfoRequest", "Balance of payments complementary info is requested"),
+ ED05("SettlementFailed", "Settlement of the transaction has failed."),
+ EMVL("EMVLiabilityShift", "The card payment is fraudulent and was not processed with EMV technology for an EMV card."),
+ ERIN("ERIOptionNotSupported", "The Extended Remittance Information (ERI) option is not supported."),
+ FF03("InvalidPaymentTypeInformation", "Payment Type Information is missing or invalid._x000D_"),
+ 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."),
+ FF07("InvalidPurpose", "Purpose is missing or invalid."),
+ FOCR("FollowingCancellationRequest", "Return following a cancellation request"),
+ FR01("Fraud", "Returned as a result of fraud."),
+ FRTR("FinalResponseMandateCancelled", "Final response/tracking is recalled as mandate is cancelled."),
+ 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."),
+ MD01("NoMandate", "No Mandate"),
+ 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."),
+ 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."),
+ NOAS("NoAnswerFromCustomer", "No response from Beneficiary"),
+ NOCM("NotCompliant", "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."),
+ NOOR("NoOriginalTransactionReceived", "Original SCT never received"),
+ PINL("PINLiabilityShift", "The card payment is fraudulent (lost and stolen fraud) and was processed as EMV transaction without PIN verification."),
+ RC01("BankIdentifierIncorrect", "Bank Identifier code specified in the message has an incorrect format (formerly IncorrectFormatForRoutingCode)."),
+ RC03("InvalidDebtorBankIdentifier", "Debtor bank identifier is invalid or missing."),
+ RC04("InvalidCreditorBankIdentifier", "Creditor bank identifier is invalid or missing."),
+ RC07("InvalidCreditorBICIdentifier", "Incorrrect BIC of the beneficiary Bank in the SCTR"),
+ RC08("InvalidClearingSystemMemberIdentifier", "ClearingSystemMemberidentifier is invalid or missing._x000D_"),
+ RC11("InvalidIntermediaryAgent", "Intermediary Agent is invalid or missing."),
+ 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."),
+ 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."),
+ RR11("InvalidDebtorAgentServiceIdentification", "Invalid or missing identification of a bank proprietary service."),
+ RR12("InvalidPartyIdentification", "Invalid or missing identification required within a particular country or payment type."),
+ RUTA("ReturnUponUnableToApply", "Return following investigation request and no remediation possible."),
+ SL01("SpecificServiceOfferedByDebtorAgent", "Due to specific service offered by the Debtor Agent"),
+ SL02("SpecificServiceOfferedByCreditorAgent", "Due to specific service offered by the Creditor Agent"),
+ 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."),
+ SP01("PaymentStopped", "Payment is stopped by account holder."),
+ SP02("PreviouslyStopped", "Previously stopped by means of a stop payment advise."),
+ SVNR("ServiceNotRendered", "The card payment is returned since a cash amount rendered was not correct or goods or a service was not rendered to the customer, e.g. in an e-commerce situation."),
+ TM01("CutOffTime", "Associated message was received after agreed processing cut-off time."),
+ TRAC("RemovedFromTracking", "Return following direct debit being removed from tracking process."),
+ UPAY("UnduePayment", "Payment is not justified."),
+}
+
+/** Specifies the technical input channel, as published in an external technical input channel code list */
+enum class ExternalTechnicalInputChannel1Code(val isoCode: String, val description: String) {
+ FAXI("Fax", "Technical Input Channel is fax or facsimile"),
+ PAPR("Paper", "Technical Input Channel is paper"),
+ TAPE("Tape", "Technical Input Channel is tape"),
+ WEBI("Internet", "Technical Input Channel is internet"),
+}
diff --git a/ebics/src/main/kotlin/iso20022/common.kt b/ebics/src/main/kotlin/iso20022/common.kt
new file mode 100644
index 00000000..cccd390d
--- /dev/null
+++ b/ebics/src/main/kotlin/iso20022/common.kt
@@ -0,0 +1,2261 @@
+/*
+ * This file is part of LibEuFin.
+ * 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
+ * published by the Free Software Foundation; either version 3, or
+ * (at your option) any later version.
+
+ * LibEuFin is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+ * Public License for more details.
+
+ * You should have received a copy of the GNU Affero General Public
+ * License along with LibEuFin; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>
+ */
+
+// THIS FILE IS GENERATED, DO NOT EDIT
+
+package tech.libeufin.ebics.iso20022
+
+import java.time.*
+import java.util.*
+import com.gitlab.mvysny.konsumexml.*
+
+
+sealed interface AccountIdentification4Choice {
+ @JvmInline
+ value class IBAN(val value: String): AccountIdentification4Choice
+ @JvmInline
+ value class Othr(val value: GenericAccountIdentification1): AccountIdentification4Choice
+
+ companion object {
+ fun parse(k: Konsumer): AccountIdentification4Choice = k.child(Names.of("IBAN", "Othr")) {
+ when (localName) {
+ "IBAN" -> IBAN(text())
+ "Othr" -> Othr(GenericAccountIdentification1.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+sealed interface AccountSchemeName1Choice {
+ @JvmInline
+ value class Cd(val value: ExternalAccountIdentification1Code): AccountSchemeName1Choice
+ @JvmInline
+ value class Prtry(val value: String): AccountSchemeName1Choice
+
+ companion object {
+ fun parse(k: Konsumer): AccountSchemeName1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalAccountIdentification1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class ActiveOrHistoricCurrencyAndAmount(
+ val Ccy: String,
+ val value: Float
+) {
+ companion object {
+ fun parse(k: Konsumer): ActiveOrHistoricCurrencyAndAmount = ActiveOrHistoricCurrencyAndAmount(
+ k.attributes.getValue("Ccy"),
+ k.text().xmlFloat()
+ )
+ }
+}
+
+enum class AddressType2Code {
+ ADDR,
+ PBOX,
+ HOME,
+ BIZZ,
+ MLTO,
+ DLVY,
+}
+
+sealed interface AddressType3Choice {
+ @JvmInline
+ value class Cd(val value: AddressType2Code): AddressType3Choice
+ @JvmInline
+ value class Prtry(val value: GenericIdentification30): AddressType3Choice
+
+ companion object {
+ fun parse(k: Konsumer): AddressType3Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(AddressType2Code.valueOf(text()))
+ "Prtry" -> Prtry(GenericIdentification30.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+sealed interface AmountType4Choice {
+ @JvmInline
+ value class InstdAmt(val value: ActiveOrHistoricCurrencyAndAmount): AmountType4Choice
+ @JvmInline
+ value class EqvtAmt(val value: EquivalentAmount2): AmountType4Choice
+
+ companion object {
+ fun parse(k: Konsumer): AmountType4Choice = k.child(Names.of("InstdAmt", "EqvtAmt")) {
+ when (localName) {
+ "InstdAmt" -> InstdAmt(ActiveOrHistoricCurrencyAndAmount.parse(this))
+ "EqvtAmt" -> EqvtAmt(EquivalentAmount2.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class BranchAndFinancialInstitutionIdentification6(
+ val FinInstnId: FinancialInstitutionIdentification18,
+ val BrnchId: BranchData3?,
+) {
+ companion object {
+ fun parse(k: Konsumer): BranchAndFinancialInstitutionIdentification6 = BranchAndFinancialInstitutionIdentification6(
+ k.child("FinInstnId") { FinancialInstitutionIdentification18.parse(this) },
+ k.childOrNull("BrnchId") { BranchData3.parse(this) },
+ )
+ }
+}
+
+data class BranchData3(
+ val Id: String?,
+ val LEI: String?,
+ val Nm: String?,
+ val PstlAdr: PostalAddress24?,
+) {
+ companion object {
+ fun parse(k: Konsumer): BranchData3 = BranchData3(
+ k.childOrNull("Id") { text() },
+ k.childOrNull("LEI") { text() },
+ k.childOrNull("Nm") { text() },
+ k.childOrNull("PstlAdr") { PostalAddress24.parse(this) },
+ )
+ }
+}
+
+data class CashAccount40(
+ val Id: AccountIdentification4Choice?,
+ val Tp: CashAccountType2Choice?,
+ val Ccy: String?,
+ val Nm: String?,
+ val Prxy: ProxyAccountIdentification1?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CashAccount40 = CashAccount40(
+ k.childOrNull("Id") { AccountIdentification4Choice.parse(this) },
+ k.childOrNull("Tp") { CashAccountType2Choice.parse(this) },
+ k.childOrNull("Ccy") { text() },
+ k.childOrNull("Nm") { text() },
+ k.childOrNull("Prxy") { ProxyAccountIdentification1.parse(this) },
+ )
+ }
+}
+
+sealed interface CashAccountType2Choice {
+ @JvmInline
+ value class Cd(val value: ExternalCashAccountType1Code): CashAccountType2Choice
+ @JvmInline
+ value class Prtry(val value: String): CashAccountType2Choice
+
+ companion object {
+ fun parse(k: Konsumer): CashAccountType2Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalCashAccountType1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+sealed interface CategoryPurpose1Choice {
+ @JvmInline
+ value class Cd(val value: ExternalCategoryPurpose1Code): CategoryPurpose1Choice
+ @JvmInline
+ value class Prtry(val value: String): CategoryPurpose1Choice
+
+ companion object {
+ fun parse(k: Konsumer): CategoryPurpose1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalCategoryPurpose1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+enum class ChargeBearerType1Code {
+ DEBT,
+ CRED,
+ SHAR,
+ SLEV,
+}
+
+sealed interface ClearingSystemIdentification2Choice {
+ @JvmInline
+ value class Cd(val value: ExternalClearingSystemIdentification1Code): ClearingSystemIdentification2Choice
+ @JvmInline
+ value class Prtry(val value: String): ClearingSystemIdentification2Choice
+
+ companion object {
+ fun parse(k: Konsumer): ClearingSystemIdentification2Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalClearingSystemIdentification1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class ClearingSystemMemberIdentification2(
+ val ClrSysId: ClearingSystemIdentification2Choice?,
+ val MmbId: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): ClearingSystemMemberIdentification2 = ClearingSystemMemberIdentification2(
+ k.childOrNull("ClrSysId") { ClearingSystemIdentification2Choice.parse(this) },
+ k.child("MmbId") { text() },
+ )
+ }
+}
+
+data class Contact4(
+ val NmPrfx: NamePrefix2Code?,
+ val Nm: String?,
+ val PhneNb: String?,
+ val MobNb: String?,
+ val FaxNb: String?,
+ val EmailAdr: String?,
+ val EmailPurp: String?,
+ val JobTitl: String?,
+ val Rspnsblty: String?,
+ val Dept: String?,
+ val Othr: List<OtherContact1>,
+ val PrefrdMtd: PreferredContactMethod1Code?,
+) {
+ companion object {
+ fun parse(k: Konsumer): Contact4 = Contact4(
+ k.childOrNull("NmPrfx") { NamePrefix2Code.valueOf(text()) },
+ k.childOrNull("Nm") { text() },
+ k.childOrNull("PhneNb") { text() },
+ k.childOrNull("MobNb") { text() },
+ k.childOrNull("FaxNb") { text() },
+ k.childOrNull("EmailAdr") { text() },
+ k.childOrNull("EmailPurp") { text() },
+ k.childOrNull("JobTitl") { text() },
+ k.childOrNull("Rspnsblty") { text() },
+ k.childOrNull("Dept") { text() },
+ k.children("Othr") { OtherContact1.parse(this) },
+ k.childOrNull("PrefrdMtd") { PreferredContactMethod1Code.valueOf(text()) },
+ )
+ }
+}
+
+enum class CreditDebitCode {
+ CRDT,
+ DBIT,
+}
+
+data class CreditTransferMandateData1(
+ val MndtId: String?,
+ val Tp: MandateTypeInformation2?,
+ val DtOfSgntr: LocalDate?,
+ val DtOfVrfctn: LocalDateTime?,
+ val ElctrncSgntr: ByteArray?,
+ val FrstPmtDt: LocalDate?,
+ val FnlPmtDt: LocalDate?,
+ val Frqcy: Frequency36Choice?,
+ val Rsn: MandateSetupReason1Choice?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CreditTransferMandateData1 = CreditTransferMandateData1(
+ k.childOrNull("MndtId") { text() },
+ k.childOrNull("Tp") { MandateTypeInformation2.parse(this) },
+ k.childOrNull("DtOfSgntr") { text().toDate() },
+ k.childOrNull("DtOfVrfctn") { text().toDateTime() },
+ k.childOrNull("ElctrncSgntr") { text().xmlBase64Binary() },
+ k.childOrNull("FrstPmtDt") { text().toDate() },
+ k.childOrNull("FnlPmtDt") { text().toDate() },
+ k.childOrNull("Frqcy") { Frequency36Choice.parse(this) },
+ k.childOrNull("Rsn") { MandateSetupReason1Choice.parse(this) },
+ )
+ }
+}
+
+data class CreditorReferenceInformation2(
+ val Tp: CreditorReferenceType2?,
+ val Ref: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CreditorReferenceInformation2 = CreditorReferenceInformation2(
+ k.childOrNull("Tp") { CreditorReferenceType2.parse(this) },
+ k.childOrNull("Ref") { text() },
+ )
+ }
+}
+
+sealed interface CreditorReferenceType1Choice {
+ @JvmInline
+ value class Cd(val value: DocumentType3Code): CreditorReferenceType1Choice
+ @JvmInline
+ value class Prtry(val value: String): CreditorReferenceType1Choice
+
+ companion object {
+ fun parse(k: Konsumer): CreditorReferenceType1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(DocumentType3Code.valueOf(text()))
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class CreditorReferenceType2(
+ val CdOrPrtry: CreditorReferenceType1Choice,
+ val Issr: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CreditorReferenceType2 = CreditorReferenceType2(
+ k.child("CdOrPrtry") { CreditorReferenceType1Choice.parse(this) },
+ k.childOrNull("Issr") { text() },
+ )
+ }
+}
+
+sealed interface DateAndDateTime2Choice {
+ @JvmInline
+ value class Dt(val value: LocalDate): DateAndDateTime2Choice
+ @JvmInline
+ value class DtTm(val value: LocalDateTime): DateAndDateTime2Choice
+
+ companion object {
+ fun parse(k: Konsumer): DateAndDateTime2Choice = k.child(Names.of("Dt", "DtTm")) {
+ when (localName) {
+ "Dt" -> Dt(text().toDate())
+ "DtTm" -> DtTm(text().toDateTime())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class DateAndPlaceOfBirth1(
+ val BirthDt: LocalDate,
+ val PrvcOfBirth: String?,
+ val CityOfBirth: String,
+ val CtryOfBirth: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): DateAndPlaceOfBirth1 = DateAndPlaceOfBirth1(
+ k.child("BirthDt") { text().toDate() },
+ k.childOrNull("PrvcOfBirth") { text() },
+ k.child("CityOfBirth") { text() },
+ k.child("CtryOfBirth") { text() },
+ )
+ }
+}
+
+data class DatePeriod2(
+ val FrDt: LocalDate,
+ val ToDt: LocalDate,
+) {
+ companion object {
+ fun parse(k: Konsumer): DatePeriod2 = DatePeriod2(
+ k.child("FrDt") { text().toDate() },
+ k.child("ToDt") { text().toDate() },
+ )
+ }
+}
+
+data class DiscountAmountAndType1(
+ val Tp: DiscountAmountType1Choice?,
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+) {
+ companion object {
+ fun parse(k: Konsumer): DiscountAmountAndType1 = DiscountAmountAndType1(
+ k.childOrNull("Tp") { DiscountAmountType1Choice.parse(this) },
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ )
+ }
+}
+
+sealed interface DiscountAmountType1Choice {
+ @JvmInline
+ value class Cd(val value: ExternalDiscountAmountType1Code): DiscountAmountType1Choice
+ @JvmInline
+ value class Prtry(val value: String): DiscountAmountType1Choice
+
+ companion object {
+ fun parse(k: Konsumer): DiscountAmountType1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalDiscountAmountType1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class DocumentAdjustment1(
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val CdtDbtInd: CreditDebitCode?,
+ val Rsn: String?,
+ val AddtlInf: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): DocumentAdjustment1 = DocumentAdjustment1(
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ k.childOrNull("Rsn") { text() },
+ k.childOrNull("AddtlInf") { text() },
+ )
+ }
+}
+
+data class DocumentLineIdentification1(
+ val Tp: DocumentLineType1?,
+ val Nb: String?,
+ val RltdDt: LocalDate?,
+) {
+ companion object {
+ fun parse(k: Konsumer): DocumentLineIdentification1 = DocumentLineIdentification1(
+ k.childOrNull("Tp") { DocumentLineType1.parse(this) },
+ k.childOrNull("Nb") { text() },
+ k.childOrNull("RltdDt") { text().toDate() },
+ )
+ }
+}
+
+data class DocumentLineInformation1(
+ val Id: List<DocumentLineIdentification1>,
+ val Desc: String?,
+ val Amt: RemittanceAmount3?,
+) {
+ companion object {
+ fun parse(k: Konsumer): DocumentLineInformation1 = DocumentLineInformation1(
+ k.children("Id", minCount=1, ) { DocumentLineIdentification1.parse(this) },
+ k.childOrNull("Desc") { text() },
+ k.childOrNull("Amt") { RemittanceAmount3.parse(this) },
+ )
+ }
+}
+
+data class DocumentLineType1(
+ val CdOrPrtry: DocumentLineType1Choice,
+ val Issr: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): DocumentLineType1 = DocumentLineType1(
+ k.child("CdOrPrtry") { DocumentLineType1Choice.parse(this) },
+ k.childOrNull("Issr") { text() },
+ )
+ }
+}
+
+sealed interface DocumentLineType1Choice {
+ @JvmInline
+ value class Cd(val value: ExternalDocumentLineType1Code): DocumentLineType1Choice
+ @JvmInline
+ value class Prtry(val value: String): DocumentLineType1Choice
+
+ companion object {
+ fun parse(k: Konsumer): DocumentLineType1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalDocumentLineType1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+enum class DocumentType3Code {
+ RADM,
+ RPIN,
+ FXDR,
+ DISP,
+ PUOR,
+ SCOR,
+}
+
+enum class DocumentType6Code {
+ MSIN,
+ CNFA,
+ DNFA,
+ CINV,
+ CREN,
+ DEBN,
+ HIRI,
+ SBIN,
+ CMCN,
+ SOAC,
+ DISP,
+ BOLD,
+ VCHR,
+ AROI,
+ TSUT,
+ PUOR,
+}
+
+data class EquivalentAmount2(
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val CcyOfTrf: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): EquivalentAmount2 = EquivalentAmount2(
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.child("CcyOfTrf") { text() },
+ )
+ }
+}
+
+sealed interface FinancialIdentificationSchemeName1Choice {
+ @JvmInline
+ value class Cd(val value: String): FinancialIdentificationSchemeName1Choice
+ @JvmInline
+ value class Prtry(val value: String): FinancialIdentificationSchemeName1Choice
+
+ companion object {
+ fun parse(k: Konsumer): FinancialIdentificationSchemeName1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class FinancialInstitutionIdentification18(
+ val BICFI: String?,
+ val ClrSysMmbId: ClearingSystemMemberIdentification2?,
+ val LEI: String?,
+ val Nm: String?,
+ val PstlAdr: PostalAddress24?,
+ val Othr: GenericFinancialIdentification1?,
+) {
+ companion object {
+ fun parse(k: Konsumer): FinancialInstitutionIdentification18 = FinancialInstitutionIdentification18(
+ k.childOrNull("BICFI") { text() },
+ k.childOrNull("ClrSysMmbId") { ClearingSystemMemberIdentification2.parse(this) },
+ k.childOrNull("LEI") { text() },
+ k.childOrNull("Nm") { text() },
+ k.childOrNull("PstlAdr") { PostalAddress24.parse(this) },
+ k.childOrNull("Othr") { GenericFinancialIdentification1.parse(this) },
+ )
+ }
+}
+
+sealed interface Frequency36Choice {
+ @JvmInline
+ value class Tp(val value: Frequency6Code): Frequency36Choice
+ @JvmInline
+ value class Prd(val value: FrequencyPeriod1): Frequency36Choice
+ @JvmInline
+ value class PtInTm(val value: FrequencyAndMoment1): Frequency36Choice
+
+ companion object {
+ fun parse(k: Konsumer): Frequency36Choice = k.child(Names.of("Tp", "Prd", "PtInTm")) {
+ when (localName) {
+ "Tp" -> Tp(Frequency6Code.valueOf(text()))
+ "Prd" -> Prd(FrequencyPeriod1.parse(this))
+ "PtInTm" -> PtInTm(FrequencyAndMoment1.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+enum class Frequency6Code {
+ YEAR,
+ MNTH,
+ QURT,
+ MIAN,
+ WEEK,
+ DAIL,
+ ADHO,
+ INDA,
+ FRTN,
+}
+
+data class FrequencyAndMoment1(
+ val Tp: Frequency6Code,
+ val PtInTm: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): FrequencyAndMoment1 = FrequencyAndMoment1(
+ k.child("Tp") { Frequency6Code.valueOf(text()) },
+ k.child("PtInTm") { text() },
+ )
+ }
+}
+
+data class FrequencyPeriod1(
+ val Tp: Frequency6Code,
+ val CntPerPrd: Float,
+) {
+ companion object {
+ fun parse(k: Konsumer): FrequencyPeriod1 = FrequencyPeriod1(
+ k.child("Tp") { Frequency6Code.valueOf(text()) },
+ k.child("CntPerPrd") { text().xmlFloat() },
+ )
+ }
+}
+
+data class Garnishment3(
+ val Tp: GarnishmentType1,
+ val Grnshee: PartyIdentification135?,
+ val GrnshmtAdmstr: PartyIdentification135?,
+ val RefNb: String?,
+ val Dt: LocalDate?,
+ val RmtdAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val FmlyMdclInsrncInd: Boolean?,
+ val MplyeeTermntnInd: Boolean?,
+) {
+ companion object {
+ fun parse(k: Konsumer): Garnishment3 = Garnishment3(
+ k.child("Tp") { GarnishmentType1.parse(this) },
+ k.childOrNull("Grnshee") { PartyIdentification135.parse(this) },
+ k.childOrNull("GrnshmtAdmstr") { PartyIdentification135.parse(this) },
+ k.childOrNull("RefNb") { text() },
+ k.childOrNull("Dt") { text().toDate() },
+ k.childOrNull("RmtdAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("FmlyMdclInsrncInd") { text().xmlBoolean() },
+ k.childOrNull("MplyeeTermntnInd") { text().xmlBoolean() },
+ )
+ }
+}
+
+data class GarnishmentType1(
+ val CdOrPrtry: GarnishmentType1Choice,
+ val Issr: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GarnishmentType1 = GarnishmentType1(
+ k.child("CdOrPrtry") { GarnishmentType1Choice.parse(this) },
+ k.childOrNull("Issr") { text() },
+ )
+ }
+}
+
+sealed interface GarnishmentType1Choice {
+ @JvmInline
+ value class Cd(val value: ExternalGarnishmentType1Code): GarnishmentType1Choice
+ @JvmInline
+ value class Prtry(val value: String): GarnishmentType1Choice
+
+ companion object {
+ fun parse(k: Konsumer): GarnishmentType1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalGarnishmentType1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class GenericAccountIdentification1(
+ val Id: String,
+ val SchmeNm: AccountSchemeName1Choice?,
+ val Issr: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GenericAccountIdentification1 = GenericAccountIdentification1(
+ k.child("Id") { text() },
+ k.childOrNull("SchmeNm") { AccountSchemeName1Choice.parse(this) },
+ k.childOrNull("Issr") { text() },
+ )
+ }
+}
+
+data class GenericFinancialIdentification1(
+ val Id: String,
+ val SchmeNm: FinancialIdentificationSchemeName1Choice?,
+ val Issr: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GenericFinancialIdentification1 = GenericFinancialIdentification1(
+ k.child("Id") { text() },
+ k.childOrNull("SchmeNm") { FinancialIdentificationSchemeName1Choice.parse(this) },
+ k.childOrNull("Issr") { text() },
+ )
+ }
+}
+
+data class GenericIdentification30(
+ val Id: String,
+ val Issr: String,
+ val SchmeNm: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GenericIdentification30 = GenericIdentification30(
+ k.child("Id") { text() },
+ k.child("Issr") { text() },
+ k.childOrNull("SchmeNm") { text() },
+ )
+ }
+}
+
+data class GenericOrganisationIdentification1(
+ val Id: String,
+ val SchmeNm: OrganisationIdentificationSchemeName1Choice?,
+ val Issr: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GenericOrganisationIdentification1 = GenericOrganisationIdentification1(
+ k.child("Id") { text() },
+ k.childOrNull("SchmeNm") { OrganisationIdentificationSchemeName1Choice.parse(this) },
+ k.childOrNull("Issr") { text() },
+ )
+ }
+}
+
+data class GenericPersonIdentification1(
+ val Id: String,
+ val SchmeNm: PersonIdentificationSchemeName1Choice?,
+ val Issr: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GenericPersonIdentification1 = GenericPersonIdentification1(
+ k.child("Id") { text() },
+ k.childOrNull("SchmeNm") { PersonIdentificationSchemeName1Choice.parse(this) },
+ k.childOrNull("Issr") { text() },
+ )
+ }
+}
+
+sealed interface LocalInstrument2Choice {
+ @JvmInline
+ value class Cd(val value: ExternalLocalInstrument1Code): LocalInstrument2Choice
+ @JvmInline
+ value class Prtry(val value: String): LocalInstrument2Choice
+
+ companion object {
+ fun parse(k: Konsumer): LocalInstrument2Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalLocalInstrument1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+sealed interface MandateClassification1Choice {
+ @JvmInline
+ value class Cd(val value: MandateClassification1Code): MandateClassification1Choice
+ @JvmInline
+ value class Prtry(val value: String): MandateClassification1Choice
+
+ companion object {
+ fun parse(k: Konsumer): MandateClassification1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(MandateClassification1Code.valueOf(text()))
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+enum class MandateClassification1Code {
+ FIXE,
+ USGB,
+ VARI,
+}
+
+sealed interface MandateSetupReason1Choice {
+ @JvmInline
+ value class Cd(val value: String): MandateSetupReason1Choice
+ @JvmInline
+ value class Prtry(val value: String): MandateSetupReason1Choice
+
+ companion object {
+ fun parse(k: Konsumer): MandateSetupReason1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class MandateTypeInformation2(
+ val SvcLvl: ServiceLevel8Choice?,
+ val LclInstrm: LocalInstrument2Choice?,
+ val CtgyPurp: CategoryPurpose1Choice?,
+ val Clssfctn: MandateClassification1Choice?,
+) {
+ companion object {
+ fun parse(k: Konsumer): MandateTypeInformation2 = MandateTypeInformation2(
+ k.childOrNull("SvcLvl") { ServiceLevel8Choice.parse(this) },
+ k.childOrNull("LclInstrm") { LocalInstrument2Choice.parse(this) },
+ k.childOrNull("CtgyPurp") { CategoryPurpose1Choice.parse(this) },
+ k.childOrNull("Clssfctn") { MandateClassification1Choice.parse(this) },
+ )
+ }
+}
+
+enum class NamePrefix2Code {
+ DOCT,
+ MADM,
+ MISS,
+ MIST,
+ MIKS,
+}
+
+data class OrganisationIdentification29(
+ val AnyBIC: String?,
+ val LEI: String?,
+ val Othr: List<GenericOrganisationIdentification1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): OrganisationIdentification29 = OrganisationIdentification29(
+ k.childOrNull("AnyBIC") { text() },
+ k.childOrNull("LEI") { text() },
+ k.children("Othr") { GenericOrganisationIdentification1.parse(this) },
+ )
+ }
+}
+
+sealed interface OrganisationIdentificationSchemeName1Choice {
+ @JvmInline
+ value class Cd(val value: ExternalOrganisationIdentification1Code): OrganisationIdentificationSchemeName1Choice
+ @JvmInline
+ value class Prtry(val value: String): OrganisationIdentificationSchemeName1Choice
+
+ companion object {
+ fun parse(k: Konsumer): OrganisationIdentificationSchemeName1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalOrganisationIdentification1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class OtherContact1(
+ val ChanlTp: String,
+ val Id: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): OtherContact1 = OtherContact1(
+ k.child("ChanlTp") { text() },
+ k.childOrNull("Id") { text() },
+ )
+ }
+}
+
+sealed interface Party38Choice {
+ @JvmInline
+ value class OrgId(val value: OrganisationIdentification29): Party38Choice
+ @JvmInline
+ value class PrvtId(val value: PersonIdentification13): Party38Choice
+
+ companion object {
+ fun parse(k: Konsumer): Party38Choice = k.child(Names.of("OrgId", "PrvtId")) {
+ when (localName) {
+ "OrgId" -> OrgId(OrganisationIdentification29.parse(this))
+ "PrvtId" -> PrvtId(PersonIdentification13.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class PartyIdentification135(
+ val Nm: String?,
+ val PstlAdr: PostalAddress24?,
+ val Id: Party38Choice?,
+ val CtryOfRes: String?,
+ val CtctDtls: Contact4?,
+) {
+ companion object {
+ fun parse(k: Konsumer): PartyIdentification135 = PartyIdentification135(
+ k.childOrNull("Nm") { text() },
+ k.childOrNull("PstlAdr") { PostalAddress24.parse(this) },
+ k.childOrNull("Id") { Party38Choice.parse(this) },
+ k.childOrNull("CtryOfRes") { text() },
+ k.childOrNull("CtctDtls") { Contact4.parse(this) },
+ )
+ }
+}
+
+data class PersonIdentification13(
+ val DtAndPlcOfBirth: DateAndPlaceOfBirth1?,
+ val Othr: List<GenericPersonIdentification1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): PersonIdentification13 = PersonIdentification13(
+ k.childOrNull("DtAndPlcOfBirth") { DateAndPlaceOfBirth1.parse(this) },
+ k.children("Othr") { GenericPersonIdentification1.parse(this) },
+ )
+ }
+}
+
+sealed interface PersonIdentificationSchemeName1Choice {
+ @JvmInline
+ value class Cd(val value: ExternalPersonIdentification1Code): PersonIdentificationSchemeName1Choice
+ @JvmInline
+ value class Prtry(val value: String): PersonIdentificationSchemeName1Choice
+
+ companion object {
+ fun parse(k: Konsumer): PersonIdentificationSchemeName1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalPersonIdentification1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class PostalAddress24(
+ val AdrTp: AddressType3Choice?,
+ val Dept: String?,
+ val SubDept: String?,
+ val StrtNm: String?,
+ val BldgNb: String?,
+ val BldgNm: String?,
+ val Flr: String?,
+ val PstBx: String?,
+ val Room: String?,
+ val PstCd: String?,
+ val TwnNm: String?,
+ val TwnLctnNm: String?,
+ val DstrctNm: String?,
+ val CtrySubDvsn: String?,
+ val Ctry: String?,
+ val AdrLine: List<String>,
+) {
+ companion object {
+ fun parse(k: Konsumer): PostalAddress24 = PostalAddress24(
+ k.childOrNull("AdrTp") { AddressType3Choice.parse(this) },
+ k.childOrNull("Dept") { text() },
+ k.childOrNull("SubDept") { text() },
+ k.childOrNull("StrtNm") { text() },
+ k.childOrNull("BldgNb") { text() },
+ k.childOrNull("BldgNm") { text() },
+ k.childOrNull("Flr") { text() },
+ k.childOrNull("PstBx") { text() },
+ k.childOrNull("Room") { text() },
+ k.childOrNull("PstCd") { text() },
+ k.childOrNull("TwnNm") { text() },
+ k.childOrNull("TwnLctnNm") { text() },
+ k.childOrNull("DstrctNm") { text() },
+ k.childOrNull("CtrySubDvsn") { text() },
+ k.childOrNull("Ctry") { text() },
+ k.children("AdrLine", maxCount=7) { text() },
+ )
+ }
+}
+
+enum class PreferredContactMethod1Code {
+ LETT,
+ MAIL,
+ PHON,
+ FAXX,
+ CELL,
+}
+
+enum class Priority2Code {
+ HIGH,
+ NORM,
+}
+
+data class ProxyAccountIdentification1(
+ val Tp: ProxyAccountType1Choice?,
+ val Id: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): ProxyAccountIdentification1 = ProxyAccountIdentification1(
+ k.childOrNull("Tp") { ProxyAccountType1Choice.parse(this) },
+ k.child("Id") { text() },
+ )
+ }
+}
+
+sealed interface ProxyAccountType1Choice {
+ @JvmInline
+ value class Cd(val value: ExternalProxyAccountType1Code): ProxyAccountType1Choice
+ @JvmInline
+ value class Prtry(val value: String): ProxyAccountType1Choice
+
+ companion object {
+ fun parse(k: Konsumer): ProxyAccountType1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalProxyAccountType1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+sealed interface Purpose2Choice {
+ @JvmInline
+ value class Cd(val value: ExternalPurpose1Code): Purpose2Choice
+ @JvmInline
+ value class Prtry(val value: String): Purpose2Choice
+
+ companion object {
+ fun parse(k: Konsumer): Purpose2Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalPurpose1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class ReferredDocumentInformation7(
+ val Tp: ReferredDocumentType4?,
+ val Nb: String?,
+ val RltdDt: LocalDate?,
+ val LineDtls: List<DocumentLineInformation1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): ReferredDocumentInformation7 = ReferredDocumentInformation7(
+ k.childOrNull("Tp") { ReferredDocumentType4.parse(this) },
+ k.childOrNull("Nb") { text() },
+ k.childOrNull("RltdDt") { text().toDate() },
+ k.children("LineDtls") { DocumentLineInformation1.parse(this) },
+ )
+ }
+}
+
+sealed interface ReferredDocumentType3Choice {
+ @JvmInline
+ value class Cd(val value: DocumentType6Code): ReferredDocumentType3Choice
+ @JvmInline
+ value class Prtry(val value: String): ReferredDocumentType3Choice
+
+ companion object {
+ fun parse(k: Konsumer): ReferredDocumentType3Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(DocumentType6Code.valueOf(text()))
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class ReferredDocumentType4(
+ val CdOrPrtry: ReferredDocumentType3Choice,
+ val Issr: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): ReferredDocumentType4 = ReferredDocumentType4(
+ k.child("CdOrPrtry") { ReferredDocumentType3Choice.parse(this) },
+ k.childOrNull("Issr") { text() },
+ )
+ }
+}
+
+data class RemittanceAmount2(
+ val DuePyblAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val DscntApldAmt: List<DiscountAmountAndType1>,
+ val CdtNoteAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val TaxAmt: List<TaxAmountAndType1>,
+ val AdjstmntAmtAndRsn: List<DocumentAdjustment1>,
+ val RmtdAmt: ActiveOrHistoricCurrencyAndAmount?,
+) {
+ companion object {
+ fun parse(k: Konsumer): RemittanceAmount2 = RemittanceAmount2(
+ k.childOrNull("DuePyblAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.children("DscntApldAmt") { DiscountAmountAndType1.parse(this) },
+ k.childOrNull("CdtNoteAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.children("TaxAmt") { TaxAmountAndType1.parse(this) },
+ k.children("AdjstmntAmtAndRsn") { DocumentAdjustment1.parse(this) },
+ k.childOrNull("RmtdAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ )
+ }
+}
+
+data class RemittanceAmount3(
+ val DuePyblAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val DscntApldAmt: List<DiscountAmountAndType1>,
+ val CdtNoteAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val TaxAmt: List<TaxAmountAndType1>,
+ val AdjstmntAmtAndRsn: List<DocumentAdjustment1>,
+ val RmtdAmt: ActiveOrHistoricCurrencyAndAmount?,
+) {
+ companion object {
+ fun parse(k: Konsumer): RemittanceAmount3 = RemittanceAmount3(
+ k.childOrNull("DuePyblAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.children("DscntApldAmt") { DiscountAmountAndType1.parse(this) },
+ k.childOrNull("CdtNoteAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.children("TaxAmt") { TaxAmountAndType1.parse(this) },
+ k.children("AdjstmntAmtAndRsn") { DocumentAdjustment1.parse(this) },
+ k.childOrNull("RmtdAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ )
+ }
+}
+
+data class RemittanceInformation21(
+ val Ustrd: List<String>,
+ val Strd: List<StructuredRemittanceInformation17>,
+) {
+ companion object {
+ fun parse(k: Konsumer): RemittanceInformation21 = RemittanceInformation21(
+ k.children("Ustrd") { text() },
+ k.children("Strd") { StructuredRemittanceInformation17.parse(this) },
+ )
+ }
+}
+
+sealed interface ServiceLevel8Choice {
+ @JvmInline
+ value class Cd(val value: ExternalServiceLevel1Code): ServiceLevel8Choice
+ @JvmInline
+ value class Prtry(val value: String): ServiceLevel8Choice
+
+ companion object {
+ fun parse(k: Konsumer): ServiceLevel8Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalServiceLevel1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class StructuredRemittanceInformation17(
+ val RfrdDocInf: List<ReferredDocumentInformation7>,
+ val RfrdDocAmt: RemittanceAmount2?,
+ val CdtrRefInf: CreditorReferenceInformation2?,
+ val Invcr: PartyIdentification135?,
+ val Invcee: PartyIdentification135?,
+ val TaxRmt: TaxData1?,
+ val GrnshmtRmt: Garnishment3?,
+ val AddtlRmtInf: List<String>,
+) {
+ companion object {
+ fun parse(k: Konsumer): StructuredRemittanceInformation17 = StructuredRemittanceInformation17(
+ k.children("RfrdDocInf") { ReferredDocumentInformation7.parse(this) },
+ k.childOrNull("RfrdDocAmt") { RemittanceAmount2.parse(this) },
+ k.childOrNull("CdtrRefInf") { CreditorReferenceInformation2.parse(this) },
+ k.childOrNull("Invcr") { PartyIdentification135.parse(this) },
+ k.childOrNull("Invcee") { PartyIdentification135.parse(this) },
+ k.childOrNull("TaxRmt") { TaxData1.parse(this) },
+ k.childOrNull("GrnshmtRmt") { Garnishment3.parse(this) },
+ k.children("AddtlRmtInf", maxCount=3) { text() },
+ )
+ }
+}
+
+data class SupplementaryData1(
+ val PlcAndNm: String?,
+ val Envlp: Unit,
+) {
+ companion object {
+ fun parse(k: Konsumer): SupplementaryData1 = SupplementaryData1(
+ k.childOrNull("PlcAndNm") { text() },
+ k.child("Envlp") { skipContents() },
+ )
+ }
+}
+
+data class TaxAmount3(
+ val Rate: Float?,
+ val TaxblBaseAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val TtlAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val Dtls: List<TaxRecordDetails3>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxAmount3 = TaxAmount3(
+ k.childOrNull("Rate") { text().xmlFloat() },
+ k.childOrNull("TaxblBaseAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("TtlAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.children("Dtls") { TaxRecordDetails3.parse(this) },
+ )
+ }
+}
+
+data class TaxAmountAndType1(
+ val Tp: TaxAmountType1Choice?,
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxAmountAndType1 = TaxAmountAndType1(
+ k.childOrNull("Tp") { TaxAmountType1Choice.parse(this) },
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ )
+ }
+}
+
+sealed interface TaxAmountType1Choice {
+ @JvmInline
+ value class Cd(val value: ExternalTaxAmountType1Code): TaxAmountType1Choice
+ @JvmInline
+ value class Prtry(val value: String): TaxAmountType1Choice
+
+ companion object {
+ fun parse(k: Konsumer): TaxAmountType1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalTaxAmountType1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class TaxAuthorisation1(
+ val Titl: String?,
+ val Nm: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxAuthorisation1 = TaxAuthorisation1(
+ k.childOrNull("Titl") { text() },
+ k.childOrNull("Nm") { text() },
+ )
+ }
+}
+
+data class TaxData1(
+ val Cdtr: TaxParty1?,
+ val Dbtr: TaxParty2?,
+ val UltmtDbtr: TaxParty2?,
+ val AdmstnZone: String?,
+ val RefNb: String?,
+ val Mtd: String?,
+ val TtlTaxblBaseAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val TtlTaxAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val Dt: LocalDate?,
+ val SeqNb: Float?,
+ val Rcrd: List<TaxRecord3>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxData1 = TaxData1(
+ k.childOrNull("Cdtr") { TaxParty1.parse(this) },
+ k.childOrNull("Dbtr") { TaxParty2.parse(this) },
+ k.childOrNull("UltmtDbtr") { TaxParty2.parse(this) },
+ k.childOrNull("AdmstnZone") { text() },
+ k.childOrNull("RefNb") { text() },
+ k.childOrNull("Mtd") { text() },
+ k.childOrNull("TtlTaxblBaseAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("TtlTaxAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("Dt") { text().toDate() },
+ k.childOrNull("SeqNb") { text().xmlFloat() },
+ k.children("Rcrd") { TaxRecord3.parse(this) },
+ )
+ }
+}
+
+data class TaxParty1(
+ val TaxId: String?,
+ val RegnId: String?,
+ val TaxTp: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxParty1 = TaxParty1(
+ k.childOrNull("TaxId") { text() },
+ k.childOrNull("RegnId") { text() },
+ k.childOrNull("TaxTp") { text() },
+ )
+ }
+}
+
+data class TaxParty2(
+ val TaxId: String?,
+ val RegnId: String?,
+ val TaxTp: String?,
+ val Authstn: TaxAuthorisation1?,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxParty2 = TaxParty2(
+ k.childOrNull("TaxId") { text() },
+ k.childOrNull("RegnId") { text() },
+ k.childOrNull("TaxTp") { text() },
+ k.childOrNull("Authstn") { TaxAuthorisation1.parse(this) },
+ )
+ }
+}
+
+data class TaxPeriod3(
+ val Yr: Year?,
+ val Tp: TaxRecordPeriod1Code?,
+ val FrToDt: DatePeriod2?,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxPeriod3 = TaxPeriod3(
+ k.childOrNull("Yr") { text().toYear() },
+ k.childOrNull("Tp") { TaxRecordPeriod1Code.valueOf(text()) },
+ k.childOrNull("FrToDt") { DatePeriod2.parse(this) },
+ )
+ }
+}
+
+data class TaxRecord3(
+ val Tp: String?,
+ val Ctgy: String?,
+ val CtgyDtls: String?,
+ val DbtrSts: String?,
+ val CertId: String?,
+ val FrmsCd: String?,
+ val Prd: TaxPeriod3?,
+ val TaxAmt: TaxAmount3?,
+ val AddtlInf: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxRecord3 = TaxRecord3(
+ k.childOrNull("Tp") { text() },
+ k.childOrNull("Ctgy") { text() },
+ k.childOrNull("CtgyDtls") { text() },
+ k.childOrNull("DbtrSts") { text() },
+ k.childOrNull("CertId") { text() },
+ k.childOrNull("FrmsCd") { text() },
+ k.childOrNull("Prd") { TaxPeriod3.parse(this) },
+ k.childOrNull("TaxAmt") { TaxAmount3.parse(this) },
+ k.childOrNull("AddtlInf") { text() },
+ )
+ }
+}
+
+data class TaxRecordDetails3(
+ val Prd: TaxPeriod3?,
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxRecordDetails3 = TaxRecordDetails3(
+ k.childOrNull("Prd") { TaxPeriod3.parse(this) },
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ )
+ }
+}
+
+enum class TaxRecordPeriod1Code {
+ MM01,
+ MM02,
+ MM03,
+ MM04,
+ MM05,
+ MM06,
+ MM07,
+ MM08,
+ MM09,
+ MM10,
+ MM11,
+ MM12,
+ QTR1,
+ QTR2,
+ QTR3,
+ QTR4,
+ HLF1,
+ HLF2,
+}
+
+data class ActiveCurrencyAndAmount(
+ val Ccy: String,
+ val value: Float
+) {
+ companion object {
+ fun parse(k: Konsumer): ActiveCurrencyAndAmount = ActiveCurrencyAndAmount(
+ k.attributes.getValue("Ccy"),
+ k.text().xmlFloat()
+ )
+ }
+}
+
+sealed interface ChargeType3Choice {
+ @JvmInline
+ value class Cd(val value: ExternalChargeType1Code): ChargeType3Choice
+ @JvmInline
+ value class Prtry(val value: GenericIdentification3): ChargeType3Choice
+
+ companion object {
+ fun parse(k: Konsumer): ChargeType3Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalChargeType1Code>())
+ "Prtry" -> Prtry(GenericIdentification3.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class GenericIdentification3(
+ val Id: String,
+ val Issr: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GenericIdentification3 = GenericIdentification3(
+ k.child("Id") { text() },
+ k.childOrNull("Issr") { text() },
+ )
+ }
+}
+
+data class NameAndAddress16(
+ val Nm: String,
+ val Adr: PostalAddress24,
+) {
+ companion object {
+ fun parse(k: Konsumer): NameAndAddress16 = NameAndAddress16(
+ k.child("Nm") { text() },
+ k.child("Adr") { PostalAddress24.parse(this) },
+ )
+ }
+}
+
+sealed interface Party40Choice {
+ @JvmInline
+ value class Pty(val value: PartyIdentification135): Party40Choice
+ @JvmInline
+ value class Agt(val value: BranchAndFinancialInstitutionIdentification6): Party40Choice
+
+ companion object {
+ fun parse(k: Konsumer): Party40Choice = k.child(Names.of("Pty", "Agt")) {
+ when (localName) {
+ "Pty" -> Pty(PartyIdentification135.parse(this))
+ "Agt" -> Agt(BranchAndFinancialInstitutionIdentification6.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class RemittanceLocation7(
+ val RmtId: String?,
+ val RmtLctnDtls: List<RemittanceLocationData1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): RemittanceLocation7 = RemittanceLocation7(
+ k.childOrNull("RmtId") { text() },
+ k.children("RmtLctnDtls") { RemittanceLocationData1.parse(this) },
+ )
+ }
+}
+
+data class RemittanceLocationData1(
+ val Mtd: RemittanceLocationMethod2Code,
+ val ElctrncAdr: String?,
+ val PstlAdr: NameAndAddress16?,
+) {
+ companion object {
+ fun parse(k: Konsumer): RemittanceLocationData1 = RemittanceLocationData1(
+ k.child("Mtd") { RemittanceLocationMethod2Code.valueOf(text()) },
+ k.childOrNull("ElctrncAdr") { text() },
+ k.childOrNull("PstlAdr") { NameAndAddress16.parse(this) },
+ )
+ }
+}
+
+enum class RemittanceLocationMethod2Code {
+ FAXI,
+ EDIC,
+ URID,
+ EMAL,
+ POST,
+ SMSM,
+}
+
+data class ActiveOrHistoricCurrencyAnd13DecimalAmount(
+ val Ccy: String,
+ val value: Float
+) {
+ companion object {
+ fun parse(k: Konsumer): ActiveOrHistoricCurrencyAnd13DecimalAmount = ActiveOrHistoricCurrencyAnd13DecimalAmount(
+ k.attributes.getValue("Ccy"),
+ k.text().xmlFloat()
+ )
+ }
+}
+
+data class AmountAndCurrencyExchange3(
+ val InstdAmt: AmountAndCurrencyExchangeDetails3?,
+ val TxAmt: AmountAndCurrencyExchangeDetails3?,
+ val CntrValAmt: AmountAndCurrencyExchangeDetails3?,
+ val AnncdPstngAmt: AmountAndCurrencyExchangeDetails3?,
+ val PrtryAmt: List<AmountAndCurrencyExchangeDetails4>,
+) {
+ companion object {
+ fun parse(k: Konsumer): AmountAndCurrencyExchange3 = AmountAndCurrencyExchange3(
+ k.childOrNull("InstdAmt") { AmountAndCurrencyExchangeDetails3.parse(this) },
+ k.childOrNull("TxAmt") { AmountAndCurrencyExchangeDetails3.parse(this) },
+ k.childOrNull("CntrValAmt") { AmountAndCurrencyExchangeDetails3.parse(this) },
+ k.childOrNull("AnncdPstngAmt") { AmountAndCurrencyExchangeDetails3.parse(this) },
+ k.children("PrtryAmt") { AmountAndCurrencyExchangeDetails4.parse(this) },
+ )
+ }
+}
+
+data class AmountAndCurrencyExchangeDetails3(
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val CcyXchg: CurrencyExchange5?,
+) {
+ companion object {
+ fun parse(k: Konsumer): AmountAndCurrencyExchangeDetails3 = AmountAndCurrencyExchangeDetails3(
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("CcyXchg") { CurrencyExchange5.parse(this) },
+ )
+ }
+}
+
+data class AmountAndCurrencyExchangeDetails4(
+ val Tp: String,
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val CcyXchg: CurrencyExchange5?,
+) {
+ companion object {
+ fun parse(k: Konsumer): AmountAndCurrencyExchangeDetails4 = AmountAndCurrencyExchangeDetails4(
+ k.child("Tp") { text() },
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("CcyXchg") { CurrencyExchange5.parse(this) },
+ )
+ }
+}
+
+data class AmountAndDirection35(
+ val Amt: Float,
+ val CdtDbtInd: CreditDebitCode,
+) {
+ companion object {
+ fun parse(k: Konsumer): AmountAndDirection35 = AmountAndDirection35(
+ k.child("Amt") { text().xmlFloat() },
+ k.child("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ )
+ }
+}
+
+data class AmountRangeBoundary1(
+ val BdryAmt: Float,
+ val Incl: Boolean,
+) {
+ companion object {
+ fun parse(k: Konsumer): AmountRangeBoundary1 = AmountRangeBoundary1(
+ k.child("BdryAmt") { text().xmlFloat() },
+ k.child("Incl") { text().xmlBoolean() },
+ )
+ }
+}
+
+data class BankTransactionCodeStructure4(
+ val Domn: BankTransactionCodeStructure5?,
+ val Prtry: ProprietaryBankTransactionCodeStructure1?,
+) {
+ companion object {
+ fun parse(k: Konsumer): BankTransactionCodeStructure4 = BankTransactionCodeStructure4(
+ k.childOrNull("Domn") { BankTransactionCodeStructure5.parse(this) },
+ k.childOrNull("Prtry") { ProprietaryBankTransactionCodeStructure1.parse(this) },
+ )
+ }
+}
+
+data class BankTransactionCodeStructure5(
+ val Cd: String,
+ val Fmly: BankTransactionCodeStructure6,
+) {
+ companion object {
+ fun parse(k: Konsumer): BankTransactionCodeStructure5 = BankTransactionCodeStructure5(
+ k.child("Cd") { text() },
+ k.child("Fmly") { BankTransactionCodeStructure6.parse(this) },
+ )
+ }
+}
+
+data class BankTransactionCodeStructure6(
+ val Cd: String,
+ val SubFmlyCd: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): BankTransactionCodeStructure6 = BankTransactionCodeStructure6(
+ k.child("Cd") { text() },
+ k.child("SubFmlyCd") { text() },
+ )
+ }
+}
+
+data class BatchInformation2(
+ val MsgId: String?,
+ val PmtInfId: String?,
+ val NbOfTxs: String?,
+ val TtlAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val CdtDbtInd: CreditDebitCode?,
+) {
+ companion object {
+ fun parse(k: Konsumer): BatchInformation2 = BatchInformation2(
+ k.childOrNull("MsgId") { text() },
+ k.childOrNull("PmtInfId") { text() },
+ k.childOrNull("NbOfTxs") { text() },
+ k.childOrNull("TtlAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("CdtDbtInd") { CreditDebitCode.valueOf(text()) },
+ )
+ }
+}
+
+enum class CSCManagement1Code {
+ PRST,
+ BYPS,
+ UNRD,
+ NCSC,
+}
+
+enum class CardDataReading1Code {
+ TAGC,
+ PHYS,
+ BRCD,
+ MGST,
+ CICC,
+ DFLE,
+ CTLS,
+ ECTL,
+}
+
+enum class CardPaymentServiceType2Code {
+ AGGR,
+ DCCV,
+ GRTT,
+ INSP,
+ LOYT,
+ NRES,
+ PUCO,
+ RECP,
+ SOAF,
+ UNAF,
+ VCAU,
+}
+
+data class CardSecurityInformation1(
+ val CSCMgmt: CSCManagement1Code,
+ val CSCVal: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CardSecurityInformation1 = CardSecurityInformation1(
+ k.child("CSCMgmt") { CSCManagement1Code.valueOf(text()) },
+ k.childOrNull("CSCVal") { text() },
+ )
+ }
+}
+
+data class CardSequenceNumberRange1(
+ val FrstTx: String?,
+ val LastTx: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CardSequenceNumberRange1 = CardSequenceNumberRange1(
+ k.childOrNull("FrstTx") { text() },
+ k.childOrNull("LastTx") { text() },
+ )
+ }
+}
+
+enum class CardholderVerificationCapability1Code {
+ MNSG,
+ NPIN,
+ FCPN,
+ FEPN,
+ FDSG,
+ FBIO,
+ MNVR,
+ FBIG,
+ APKI,
+ PKIS,
+ CHDT,
+ SCEC,
+}
+
+data class CashDeposit1(
+ val NoteDnmtn: ActiveCurrencyAndAmount,
+ val NbOfNotes: String,
+ val Amt: ActiveCurrencyAndAmount,
+) {
+ companion object {
+ fun parse(k: Konsumer): CashDeposit1 = CashDeposit1(
+ k.child("NoteDnmtn") { ActiveCurrencyAndAmount.parse(this) },
+ k.child("NbOfNotes") { text() },
+ k.child("Amt") { ActiveCurrencyAndAmount.parse(this) },
+ )
+ }
+}
+
+enum class CopyDuplicate1Code {
+ CODU,
+ COPY,
+ DUPL,
+}
+
+data class CorporateAction9(
+ val EvtTp: String,
+ val EvtId: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): CorporateAction9 = CorporateAction9(
+ k.child("EvtTp") { text() },
+ k.child("EvtId") { text() },
+ )
+ }
+}
+
+data class CurrencyExchange5(
+ val SrcCcy: String,
+ val TrgtCcy: String?,
+ val UnitCcy: String?,
+ val XchgRate: Float,
+ val CtrctId: String?,
+ val QtnDt: LocalDateTime?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CurrencyExchange5 = CurrencyExchange5(
+ k.child("SrcCcy") { text() },
+ k.childOrNull("TrgtCcy") { text() },
+ k.childOrNull("UnitCcy") { text() },
+ k.child("XchgRate") { text().xmlFloat() },
+ k.childOrNull("CtrctId") { text() },
+ k.childOrNull("QtnDt") { text().toDateTime() },
+ )
+ }
+}
+
+data class DisplayCapabilities1(
+ val DispTp: UserInterface2Code,
+ val NbOfLines: String,
+ val LineWidth: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): DisplayCapabilities1 = DisplayCapabilities1(
+ k.child("DispTp") { UserInterface2Code.valueOf(text()) },
+ k.child("NbOfLines") { text() },
+ k.child("LineWidth") { text() },
+ )
+ }
+}
+
+data class GenericIdentification1(
+ val Id: String,
+ val SchmeNm: String?,
+ val Issr: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GenericIdentification1 = GenericIdentification1(
+ k.child("Id") { text() },
+ k.childOrNull("SchmeNm") { text() },
+ k.childOrNull("Issr") { text() },
+ )
+ }
+}
+
+data class GenericIdentification32(
+ val Id: String,
+ val Tp: PartyType3Code?,
+ val Issr: PartyType4Code?,
+ val ShrtNm: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GenericIdentification32 = GenericIdentification32(
+ k.child("Id") { text() },
+ k.childOrNull("Tp") { PartyType3Code.valueOf(text()) },
+ k.childOrNull("Issr") { PartyType4Code.valueOf(text()) },
+ k.childOrNull("ShrtNm") { text() },
+ )
+ }
+}
+
+sealed interface IdentificationSource3Choice {
+ @JvmInline
+ value class Cd(val value: ExternalFinancialInstrumentIdentificationType1Code): IdentificationSource3Choice
+ @JvmInline
+ value class Prtry(val value: String): IdentificationSource3Choice
+
+ companion object {
+ fun parse(k: Konsumer): IdentificationSource3Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalFinancialInstrumentIdentificationType1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+sealed interface InterestType1Choice {
+ @JvmInline
+ value class Cd(val value: InterestType1Code): InterestType1Choice
+ @JvmInline
+ value class Prtry(val value: String): InterestType1Choice
+
+ companion object {
+ fun parse(k: Konsumer): InterestType1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(InterestType1Code.valueOf(text()))
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+enum class InterestType1Code {
+ INDY,
+ OVRN,
+}
+
+data class MessageIdentification2(
+ val MsgNmId: String?,
+ val MsgId: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): MessageIdentification2 = MessageIdentification2(
+ k.childOrNull("MsgNmId") { text() },
+ k.childOrNull("MsgId") { text() },
+ )
+ }
+}
+
+data class NumberAndSumOfTransactions1(
+ val NbOfNtries: String?,
+ val Sum: Float?,
+) {
+ companion object {
+ fun parse(k: Konsumer): NumberAndSumOfTransactions1 = NumberAndSumOfTransactions1(
+ k.childOrNull("NbOfNtries") { text() },
+ k.childOrNull("Sum") { text().xmlFloat() },
+ )
+ }
+}
+
+data class NumberAndSumOfTransactions4(
+ val NbOfNtries: String?,
+ val Sum: Float?,
+ val TtlNetNtry: AmountAndDirection35?,
+) {
+ companion object {
+ fun parse(k: Konsumer): NumberAndSumOfTransactions4 = NumberAndSumOfTransactions4(
+ k.childOrNull("NbOfNtries") { text() },
+ k.childOrNull("Sum") { text().xmlFloat() },
+ k.childOrNull("TtlNetNtry") { AmountAndDirection35.parse(this) },
+ )
+ }
+}
+
+enum class OnLineCapability1Code {
+ OFLN,
+ ONLN,
+ SMON,
+}
+
+data class OriginalAndCurrentQuantities1(
+ val FaceAmt: Float,
+ val AmtsdVal: Float,
+) {
+ companion object {
+ fun parse(k: Konsumer): OriginalAndCurrentQuantities1 = OriginalAndCurrentQuantities1(
+ k.child("FaceAmt") { text().xmlFloat() },
+ k.child("AmtsdVal") { text().xmlFloat() },
+ )
+ }
+}
+
+data class OriginalBusinessQuery1(
+ val MsgId: String,
+ val MsgNmId: String?,
+ val CreDtTm: LocalDateTime?,
+) {
+ companion object {
+ fun parse(k: Konsumer): OriginalBusinessQuery1 = OriginalBusinessQuery1(
+ k.child("MsgId") { text() },
+ k.childOrNull("MsgNmId") { text() },
+ k.childOrNull("CreDtTm") { text().toDateTime() },
+ )
+ }
+}
+
+data class OtherIdentification1(
+ val Id: String,
+ val Sfx: String?,
+ val Tp: IdentificationSource3Choice,
+) {
+ companion object {
+ fun parse(k: Konsumer): OtherIdentification1 = OtherIdentification1(
+ k.child("Id") { text() },
+ k.childOrNull("Sfx") { text() },
+ k.child("Tp") { IdentificationSource3Choice.parse(this) },
+ )
+ }
+}
+
+enum class POIComponentType1Code {
+ SOFT,
+ EMVK,
+ EMVO,
+ MRIT,
+ CHIT,
+ SECM,
+ PEDV,
+}
+
+enum class PartyType3Code {
+ OPOI,
+ MERC,
+ ACCP,
+ ITAG,
+ ACQR,
+ CISS,
+ DLIS,
+}
+
+enum class PartyType4Code {
+ MERC,
+ ACCP,
+ ITAG,
+ ACQR,
+ CISS,
+ TAXH,
+}
+
+data class PaymentCard4(
+ val PlainCardData: PlainCardData1?,
+ val CardCtryCd: String?,
+ val CardBrnd: GenericIdentification1?,
+ val AddtlCardData: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): PaymentCard4 = PaymentCard4(
+ k.childOrNull("PlainCardData") { PlainCardData1.parse(this) },
+ k.childOrNull("CardCtryCd") { text() },
+ k.childOrNull("CardBrnd") { GenericIdentification1.parse(this) },
+ k.childOrNull("AddtlCardData") { text() },
+ )
+ }
+}
+
+data class PlainCardData1(
+ val PAN: String,
+ val CardSeqNb: String?,
+ val FctvDt: YearMonth?,
+ val XpryDt: YearMonth,
+ val SvcCd: String?,
+ val TrckData: List<TrackData1>,
+ val CardSctyCd: CardSecurityInformation1?,
+) {
+ companion object {
+ fun parse(k: Konsumer): PlainCardData1 = PlainCardData1(
+ k.child("PAN") { text() },
+ k.childOrNull("CardSeqNb") { text() },
+ k.childOrNull("FctvDt") { text().toYearMonth() },
+ k.child("XpryDt") { text().toYearMonth() },
+ k.childOrNull("SvcCd") { text() },
+ k.children("TrckData") { TrackData1.parse(this) },
+ k.childOrNull("CardSctyCd") { CardSecurityInformation1.parse(this) },
+ )
+ }
+}
+
+data class PointOfInteraction1(
+ val Id: GenericIdentification32,
+ val SysNm: String?,
+ val GrpId: String?,
+ val Cpblties: PointOfInteractionCapabilities1?,
+ val Cmpnt: List<PointOfInteractionComponent1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): PointOfInteraction1 = PointOfInteraction1(
+ k.child("Id") { GenericIdentification32.parse(this) },
+ k.childOrNull("SysNm") { text() },
+ k.childOrNull("GrpId") { text() },
+ k.childOrNull("Cpblties") { PointOfInteractionCapabilities1.parse(this) },
+ k.children("Cmpnt") { PointOfInteractionComponent1.parse(this) },
+ )
+ }
+}
+
+data class PointOfInteractionCapabilities1(
+ val CardRdngCpblties: List<CardDataReading1Code>,
+ val CrdhldrVrfctnCpblties: List<CardholderVerificationCapability1Code>,
+ val OnLineCpblties: OnLineCapability1Code?,
+ val DispCpblties: List<DisplayCapabilities1>,
+ val PrtLineWidth: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): PointOfInteractionCapabilities1 = PointOfInteractionCapabilities1(
+ k.children("CardRdngCpblties") { CardDataReading1Code.valueOf(text()) },
+ k.children("CrdhldrVrfctnCpblties") { CardholderVerificationCapability1Code.valueOf(text()) },
+ k.childOrNull("OnLineCpblties") { OnLineCapability1Code.valueOf(text()) },
+ k.children("DispCpblties") { DisplayCapabilities1.parse(this) },
+ k.childOrNull("PrtLineWidth") { text() },
+ )
+ }
+}
+
+data class PointOfInteractionComponent1(
+ val POICmpntTp: POIComponentType1Code,
+ val ManfctrId: String?,
+ val Mdl: String?,
+ val VrsnNb: String?,
+ val SrlNb: String?,
+ val ApprvlNb: List<String>,
+) {
+ companion object {
+ fun parse(k: Konsumer): PointOfInteractionComponent1 = PointOfInteractionComponent1(
+ k.child("POICmpntTp") { POIComponentType1Code.valueOf(text()) },
+ k.childOrNull("ManfctrId") { text() },
+ k.childOrNull("Mdl") { text() },
+ k.childOrNull("VrsnNb") { text() },
+ k.childOrNull("SrlNb") { text() },
+ k.children("ApprvlNb") { text() },
+ )
+ }
+}
+
+enum class PriceValueType1Code {
+ DISC,
+ PREM,
+ PARV,
+}
+
+data class Product2(
+ val PdctCd: String,
+ val UnitOfMeasr: UnitOfMeasure1Code?,
+ val PdctQty: Float?,
+ val UnitPric: Float?,
+ val PdctAmt: Float?,
+ val TaxTp: String?,
+ val AddtlPdctInf: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): Product2 = Product2(
+ k.child("PdctCd") { text() },
+ k.childOrNull("UnitOfMeasr") { UnitOfMeasure1Code.valueOf(text()) },
+ k.childOrNull("PdctQty") { text().xmlFloat() },
+ k.childOrNull("UnitPric") { text().xmlFloat() },
+ k.childOrNull("PdctAmt") { text().xmlFloat() },
+ k.childOrNull("TaxTp") { text() },
+ k.childOrNull("AddtlPdctInf") { text() },
+ )
+ }
+}
+
+data class ProprietaryBankTransactionCodeStructure1(
+ val Cd: String,
+ val Issr: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): ProprietaryBankTransactionCodeStructure1 = ProprietaryBankTransactionCodeStructure1(
+ k.child("Cd") { text() },
+ k.childOrNull("Issr") { text() },
+ )
+ }
+}
+
+data class ProprietaryPrice2(
+ val Tp: String,
+ val Pric: ActiveOrHistoricCurrencyAndAmount,
+) {
+ companion object {
+ fun parse(k: Konsumer): ProprietaryPrice2 = ProprietaryPrice2(
+ k.child("Tp") { text() },
+ k.child("Pric") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ )
+ }
+}
+
+data class ProprietaryQuantity1(
+ val Tp: String,
+ val Qty: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): ProprietaryQuantity1 = ProprietaryQuantity1(
+ k.child("Tp") { text() },
+ k.child("Qty") { text() },
+ )
+ }
+}
+
+data class ProprietaryReference1(
+ val Tp: String,
+ val Ref: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): ProprietaryReference1 = ProprietaryReference1(
+ k.child("Tp") { text() },
+ k.child("Ref") { text() },
+ )
+ }
+}
+
+sealed interface RateType4Choice {
+ @JvmInline
+ value class Pctg(val value: Float): RateType4Choice
+ @JvmInline
+ value class Othr(val value: String): RateType4Choice
+
+ companion object {
+ fun parse(k: Konsumer): RateType4Choice = k.child(Names.of("Pctg", "Othr")) {
+ when (localName) {
+ "Pctg" -> Pctg(text().xmlFloat())
+ "Othr" -> Othr(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+sealed interface ReportingSource1Choice {
+ @JvmInline
+ value class Cd(val value: ExternalReportingSource1Code): ReportingSource1Choice
+ @JvmInline
+ value class Prtry(val value: String): ReportingSource1Choice
+
+ companion object {
+ fun parse(k: Konsumer): ReportingSource1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalReportingSource1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+sealed interface ReturnReason5Choice {
+ @JvmInline
+ value class Cd(val value: ExternalReturnReason1Code): ReturnReason5Choice
+ @JvmInline
+ value class Prtry(val value: String): ReturnReason5Choice
+
+ companion object {
+ fun parse(k: Konsumer): ReturnReason5Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalReturnReason1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class TaxCharges2(
+ val Id: String?,
+ val Rate: Float?,
+ val Amt: ActiveOrHistoricCurrencyAndAmount?,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxCharges2 = TaxCharges2(
+ k.childOrNull("Id") { text() },
+ k.childOrNull("Rate") { text().xmlFloat() },
+ k.childOrNull("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ )
+ }
+}
+
+sealed interface TechnicalInputChannel1Choice {
+ @JvmInline
+ value class Cd(val value: ExternalTechnicalInputChannel1Code): TechnicalInputChannel1Choice
+ @JvmInline
+ value class Prtry(val value: String): TechnicalInputChannel1Choice
+
+ companion object {
+ fun parse(k: Konsumer): TechnicalInputChannel1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalTechnicalInputChannel1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class TrackData1(
+ val TrckNb: String?,
+ val TrckVal: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): TrackData1 = TrackData1(
+ k.childOrNull("TrckNb") { text() },
+ k.child("TrckVal") { text() },
+ )
+ }
+}
+
+data class TransactionIdentifier1(
+ val TxDtTm: LocalDateTime,
+ val TxRef: String,
+) {
+ companion object {
+ fun parse(k: Konsumer): TransactionIdentifier1 = TransactionIdentifier1(
+ k.child("TxDtTm") { text().toDateTime() },
+ k.child("TxRef") { text() },
+ )
+ }
+}
+
+enum class UnitOfMeasure1Code {
+ PIEC,
+ TONS,
+ FOOT,
+ GBGA,
+ USGA,
+ GRAM,
+ INCH,
+ KILO,
+ PUND,
+ METR,
+ CMET,
+ MMET,
+ LITR,
+ CELI,
+ MILI,
+ GBOU,
+ USOU,
+ GBQA,
+ USQA,
+ GBPI,
+ USPI,
+ MILE,
+ KMET,
+ YARD,
+ SQKI,
+ HECT,
+ ARES,
+ SMET,
+ SCMT,
+ SMIL,
+ SQMI,
+ SQYA,
+ SQFO,
+ SQIN,
+ ACRE,
+}
+
+enum class UserInterface2Code {
+ MDSP,
+ CDSP,
+}
+
+sealed interface YieldedOrValueType1Choice {
+ @JvmInline
+ value class Yldd(val value: Boolean): YieldedOrValueType1Choice
+ @JvmInline
+ value class ValTp(val value: PriceValueType1Code): YieldedOrValueType1Choice
+
+ companion object {
+ fun parse(k: Konsumer): YieldedOrValueType1Choice = k.child(Names.of("Yldd", "ValTp")) {
+ when (localName) {
+ "Yldd" -> Yldd(text().xmlBoolean())
+ "ValTp" -> ValTp(PriceValueType1Code.valueOf(text()))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
diff --git a/ebics/src/main/kotlin/iso20022/pain_001_001_11.kt b/ebics/src/main/kotlin/iso20022/pain_001_001_11.kt
new file mode 100644
index 00000000..9e2b868c
--- /dev/null
+++ b/ebics/src/main/kotlin/iso20022/pain_001_001_11.kt
@@ -0,0 +1,490 @@
+/*
+ * This file is part of LibEuFin.
+ * 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
+ * published by the Free Software Foundation; either version 3, or
+ * (at your option) any later version.
+
+ * LibEuFin is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+ * Public License for more details.
+
+ * You should have received a copy of the GNU Affero General Public
+ * License along with LibEuFin; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>
+ */
+
+// THIS FILE IS GENERATED, DO NOT EDIT
+
+package tech.libeufin.ebics.iso20022
+
+import java.time.*
+import java.util.*
+import com.gitlab.mvysny.konsumexml.*
+
+
+data class AdviceType1(
+ val CdtAdvc: AdviceType1Choice?,
+ val DbtAdvc: AdviceType1Choice?,
+) {
+ companion object {
+ fun parse(k: Konsumer): AdviceType1 = AdviceType1(
+ k.childOrNull("CdtAdvc") { AdviceType1Choice.parse(this) },
+ k.childOrNull("DbtAdvc") { AdviceType1Choice.parse(this) },
+ )
+ }
+}
+
+sealed interface AdviceType1Choice {
+ @JvmInline
+ value class Cd(val value: AdviceType1Code): AdviceType1Choice
+ @JvmInline
+ value class Prtry(val value: String): AdviceType1Choice
+
+ companion object {
+ fun parse(k: Konsumer): AdviceType1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(AdviceType1Code.valueOf(text()))
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+enum class AdviceType1Code {
+ ADWD,
+ ADND,
+}
+
+sealed interface Authorisation1Choice {
+ @JvmInline
+ value class Cd(val value: Authorisation1Code): Authorisation1Choice
+ @JvmInline
+ value class Prtry(val value: String): Authorisation1Choice
+
+ companion object {
+ fun parse(k: Konsumer): Authorisation1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(Authorisation1Code.valueOf(text()))
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+enum class Authorisation1Code {
+ AUTH,
+ FDET,
+ FSUM,
+ ILEV,
+}
+
+data class Cheque11(
+ val ChqTp: ChequeType2Code?,
+ val ChqNb: String?,
+ val ChqFr: NameAndAddress16?,
+ val DlvryMtd: ChequeDeliveryMethod1Choice?,
+ val DlvrTo: NameAndAddress16?,
+ val InstrPrty: Priority2Code?,
+ val ChqMtrtyDt: LocalDate?,
+ val FrmsCd: String?,
+ val MemoFld: List<String>,
+ val RgnlClrZone: String?,
+ val PrtLctn: String?,
+ val Sgntr: List<String>,
+) {
+ companion object {
+ fun parse(k: Konsumer): Cheque11 = Cheque11(
+ k.childOrNull("ChqTp") { ChequeType2Code.valueOf(text()) },
+ k.childOrNull("ChqNb") { text() },
+ k.childOrNull("ChqFr") { NameAndAddress16.parse(this) },
+ k.childOrNull("DlvryMtd") { ChequeDeliveryMethod1Choice.parse(this) },
+ k.childOrNull("DlvrTo") { NameAndAddress16.parse(this) },
+ k.childOrNull("InstrPrty") { Priority2Code.valueOf(text()) },
+ k.childOrNull("ChqMtrtyDt") { text().toDate() },
+ k.childOrNull("FrmsCd") { text() },
+ k.children("MemoFld", maxCount=2) { text() },
+ k.childOrNull("RgnlClrZone") { text() },
+ k.childOrNull("PrtLctn") { text() },
+ k.children("Sgntr", maxCount=5) { text() },
+ )
+ }
+}
+
+enum class ChequeDelivery1Code {
+ MLDB,
+ MLCD,
+ MLFA,
+ CRDB,
+ CRCD,
+ CRFA,
+ PUDB,
+ PUCD,
+ PUFA,
+ RGDB,
+ RGCD,
+ RGFA,
+}
+
+sealed interface ChequeDeliveryMethod1Choice {
+ @JvmInline
+ value class Cd(val value: ChequeDelivery1Code): ChequeDeliveryMethod1Choice
+ @JvmInline
+ value class Prtry(val value: String): ChequeDeliveryMethod1Choice
+
+ companion object {
+ fun parse(k: Konsumer): ChequeDeliveryMethod1Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(ChequeDelivery1Code.valueOf(text()))
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+enum class ChequeType2Code {
+ CCHQ,
+ CCCH,
+ BCHQ,
+ DRFT,
+ ELDR,
+}
+
+data class CreditTransferTransaction54(
+ val PmtId: PaymentIdentification6,
+ val PmtTpInf: PaymentTypeInformation26?,
+ val Amt: AmountType4Choice,
+ val XchgRateInf: ExchangeRate1?,
+ val ChrgBr: ChargeBearerType1Code?,
+ val MndtRltdInf: CreditTransferMandateData1?,
+ val ChqInstr: Cheque11?,
+ val UltmtDbtr: PartyIdentification135?,
+ val IntrmyAgt1: BranchAndFinancialInstitutionIdentification6?,
+ val IntrmyAgt1Acct: CashAccount40?,
+ val IntrmyAgt2: BranchAndFinancialInstitutionIdentification6?,
+ val IntrmyAgt2Acct: CashAccount40?,
+ val IntrmyAgt3: BranchAndFinancialInstitutionIdentification6?,
+ val IntrmyAgt3Acct: CashAccount40?,
+ val CdtrAgt: BranchAndFinancialInstitutionIdentification6?,
+ val CdtrAgtAcct: CashAccount40?,
+ val Cdtr: PartyIdentification135?,
+ val CdtrAcct: CashAccount40?,
+ val UltmtCdtr: PartyIdentification135?,
+ val InstrForCdtrAgt: List<InstructionForCreditorAgent3>,
+ val InstrForDbtrAgt: InstructionForDebtorAgent1?,
+ val Purp: Purpose2Choice?,
+ val RgltryRptg: List<RegulatoryReporting3>,
+ val Tax: TaxInformation10?,
+ val RltdRmtInf: List<RemittanceLocation7>,
+ val RmtInf: RemittanceInformation21?,
+ val SplmtryData: List<SupplementaryData1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): CreditTransferTransaction54 = CreditTransferTransaction54(
+ k.child("PmtId") { PaymentIdentification6.parse(this) },
+ k.childOrNull("PmtTpInf") { PaymentTypeInformation26.parse(this) },
+ k.child("Amt") { AmountType4Choice.parse(this) },
+ k.childOrNull("XchgRateInf") { ExchangeRate1.parse(this) },
+ k.childOrNull("ChrgBr") { ChargeBearerType1Code.valueOf(text()) },
+ k.childOrNull("MndtRltdInf") { CreditTransferMandateData1.parse(this) },
+ k.childOrNull("ChqInstr") { Cheque11.parse(this) },
+ k.childOrNull("UltmtDbtr") { PartyIdentification135.parse(this) },
+ k.childOrNull("IntrmyAgt1") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("IntrmyAgt1Acct") { CashAccount40.parse(this) },
+ k.childOrNull("IntrmyAgt2") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("IntrmyAgt2Acct") { CashAccount40.parse(this) },
+ k.childOrNull("IntrmyAgt3") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("IntrmyAgt3Acct") { CashAccount40.parse(this) },
+ k.childOrNull("CdtrAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("CdtrAgtAcct") { CashAccount40.parse(this) },
+ k.childOrNull("Cdtr") { PartyIdentification135.parse(this) },
+ k.childOrNull("CdtrAcct") { CashAccount40.parse(this) },
+ k.childOrNull("UltmtCdtr") { PartyIdentification135.parse(this) },
+ k.children("InstrForCdtrAgt") { InstructionForCreditorAgent3.parse(this) },
+ k.childOrNull("InstrForDbtrAgt") { InstructionForDebtorAgent1.parse(this) },
+ k.childOrNull("Purp") { Purpose2Choice.parse(this) },
+ k.children("RgltryRptg", maxCount=10) { RegulatoryReporting3.parse(this) },
+ k.childOrNull("Tax") { TaxInformation10.parse(this) },
+ k.children("RltdRmtInf", maxCount=10) { RemittanceLocation7.parse(this) },
+ k.childOrNull("RmtInf") { RemittanceInformation21.parse(this) },
+ k.children("SplmtryData") { SupplementaryData1.parse(this) },
+ )
+ }
+}
+
+data class CustomerCreditTransferInitiationV11(
+ val GrpHdr: GroupHeader95,
+ val PmtInf: List<PaymentInstruction40>,
+ val SplmtryData: List<SupplementaryData1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): CustomerCreditTransferInitiationV11 = CustomerCreditTransferInitiationV11(
+ k.child("GrpHdr") { GroupHeader95.parse(this) },
+ k.children("PmtInf", minCount=1, ) { PaymentInstruction40.parse(this) },
+ k.children("SplmtryData") { SupplementaryData1.parse(this) },
+ )
+ }
+}
+
+data class pain_001_001_11(
+ val CstmrCdtTrfInitn: CustomerCreditTransferInitiationV11,
+) {
+ companion object {
+ fun parse(k: Konsumer): pain_001_001_11 = pain_001_001_11(
+ k.child("CstmrCdtTrfInitn") { CustomerCreditTransferInitiationV11.parse(this) },
+ )
+ }
+}
+
+data class ExchangeRate1(
+ val UnitCcy: String?,
+ val XchgRate: Float?,
+ val RateTp: ExchangeRateType1Code?,
+ val CtrctId: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): ExchangeRate1 = ExchangeRate1(
+ k.childOrNull("UnitCcy") { text() },
+ k.childOrNull("XchgRate") { text().xmlFloat() },
+ k.childOrNull("RateTp") { ExchangeRateType1Code.valueOf(text()) },
+ k.childOrNull("CtrctId") { text() },
+ )
+ }
+}
+
+enum class ExchangeRateType1Code {
+ SPOT,
+ SALE,
+ AGRD,
+}
+
+data class GroupHeader95(
+ val MsgId: String,
+ val CreDtTm: LocalDateTime,
+ val Authstn: List<Authorisation1Choice>,
+ val NbOfTxs: String,
+ val CtrlSum: Float?,
+ val InitgPty: PartyIdentification135,
+ val FwdgAgt: BranchAndFinancialInstitutionIdentification6?,
+ val InitnSrc: PaymentInitiationSource1?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GroupHeader95 = GroupHeader95(
+ k.child("MsgId") { text() },
+ k.child("CreDtTm") { text().toDateTime() },
+ k.children("Authstn", maxCount=2) { Authorisation1Choice.parse(this) },
+ k.child("NbOfTxs") { text() },
+ k.childOrNull("CtrlSum") { text().xmlFloat() },
+ k.child("InitgPty") { PartyIdentification135.parse(this) },
+ k.childOrNull("FwdgAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("InitnSrc") { PaymentInitiationSource1.parse(this) },
+ )
+ }
+}
+
+data class InstructionForCreditorAgent3(
+ val Cd: ExternalCreditorAgentInstruction1Code?,
+ val InstrInf: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): InstructionForCreditorAgent3 = InstructionForCreditorAgent3(
+ k.childOrNull("Cd") { text().xmlCodeSet<ExternalCreditorAgentInstruction1Code>() },
+ k.childOrNull("InstrInf") { text() },
+ )
+ }
+}
+
+data class InstructionForDebtorAgent1(
+ val Cd: ExternalDebtorAgentInstruction1Code?,
+ val InstrInf: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): InstructionForDebtorAgent1 = InstructionForDebtorAgent1(
+ k.childOrNull("Cd") { text().xmlCodeSet<ExternalDebtorAgentInstruction1Code>() },
+ k.childOrNull("InstrInf") { text() },
+ )
+ }
+}
+
+data class PaymentIdentification6(
+ val InstrId: String?,
+ val EndToEndId: String,
+ val UETR: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): PaymentIdentification6 = PaymentIdentification6(
+ k.childOrNull("InstrId") { text() },
+ k.child("EndToEndId") { text() },
+ k.childOrNull("UETR") { text() },
+ )
+ }
+}
+
+data class PaymentInitiationSource1(
+ val Nm: String,
+ val Prvdr: String?,
+ val Vrsn: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): PaymentInitiationSource1 = PaymentInitiationSource1(
+ k.child("Nm") { text() },
+ k.childOrNull("Prvdr") { text() },
+ k.childOrNull("Vrsn") { text() },
+ )
+ }
+}
+
+data class PaymentInstruction40(
+ val PmtInfId: String,
+ val PmtMtd: PaymentMethod3Code,
+ val ReqdAdvcTp: AdviceType1?,
+ val BtchBookg: Boolean?,
+ val NbOfTxs: String?,
+ val CtrlSum: Float?,
+ val PmtTpInf: PaymentTypeInformation26?,
+ val ReqdExctnDt: DateAndDateTime2Choice,
+ val PoolgAdjstmntDt: LocalDate?,
+ val Dbtr: PartyIdentification135,
+ val DbtrAcct: CashAccount40,
+ val DbtrAgt: BranchAndFinancialInstitutionIdentification6,
+ val DbtrAgtAcct: CashAccount40?,
+ val InstrForDbtrAgt: String?,
+ val UltmtDbtr: PartyIdentification135?,
+ val ChrgBr: ChargeBearerType1Code?,
+ val ChrgsAcct: CashAccount40?,
+ val ChrgsAcctAgt: BranchAndFinancialInstitutionIdentification6?,
+ val CdtTrfTxInf: List<CreditTransferTransaction54>,
+) {
+ companion object {
+ fun parse(k: Konsumer): PaymentInstruction40 = PaymentInstruction40(
+ k.child("PmtInfId") { text() },
+ k.child("PmtMtd") { PaymentMethod3Code.valueOf(text()) },
+ k.childOrNull("ReqdAdvcTp") { AdviceType1.parse(this) },
+ k.childOrNull("BtchBookg") { text().xmlBoolean() },
+ k.childOrNull("NbOfTxs") { text() },
+ k.childOrNull("CtrlSum") { text().xmlFloat() },
+ k.childOrNull("PmtTpInf") { PaymentTypeInformation26.parse(this) },
+ k.child("ReqdExctnDt") { DateAndDateTime2Choice.parse(this) },
+ k.childOrNull("PoolgAdjstmntDt") { text().toDate() },
+ k.child("Dbtr") { PartyIdentification135.parse(this) },
+ k.child("DbtrAcct") { CashAccount40.parse(this) },
+ k.child("DbtrAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("DbtrAgtAcct") { CashAccount40.parse(this) },
+ k.childOrNull("InstrForDbtrAgt") { text() },
+ k.childOrNull("UltmtDbtr") { PartyIdentification135.parse(this) },
+ k.childOrNull("ChrgBr") { ChargeBearerType1Code.valueOf(text()) },
+ k.childOrNull("ChrgsAcct") { CashAccount40.parse(this) },
+ k.childOrNull("ChrgsAcctAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.children("CdtTrfTxInf", minCount=1, ) { CreditTransferTransaction54.parse(this) },
+ )
+ }
+}
+
+enum class PaymentMethod3Code {
+ CHK,
+ TRF,
+ TRA,
+}
+
+data class PaymentTypeInformation26(
+ val InstrPrty: Priority2Code?,
+ val SvcLvl: List<ServiceLevel8Choice>,
+ val LclInstrm: LocalInstrument2Choice?,
+ val CtgyPurp: CategoryPurpose1Choice?,
+) {
+ companion object {
+ fun parse(k: Konsumer): PaymentTypeInformation26 = PaymentTypeInformation26(
+ k.childOrNull("InstrPrty") { Priority2Code.valueOf(text()) },
+ k.children("SvcLvl") { ServiceLevel8Choice.parse(this) },
+ k.childOrNull("LclInstrm") { LocalInstrument2Choice.parse(this) },
+ k.childOrNull("CtgyPurp") { CategoryPurpose1Choice.parse(this) },
+ )
+ }
+}
+
+data class RegulatoryAuthority2(
+ val Nm: String?,
+ val Ctry: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): RegulatoryAuthority2 = RegulatoryAuthority2(
+ k.childOrNull("Nm") { text() },
+ k.childOrNull("Ctry") { text() },
+ )
+ }
+}
+
+data class RegulatoryReporting3(
+ val DbtCdtRptgInd: RegulatoryReportingType1Code?,
+ val Authrty: RegulatoryAuthority2?,
+ val Dtls: List<StructuredRegulatoryReporting3>,
+) {
+ companion object {
+ fun parse(k: Konsumer): RegulatoryReporting3 = RegulatoryReporting3(
+ k.childOrNull("DbtCdtRptgInd") { RegulatoryReportingType1Code.valueOf(text()) },
+ k.childOrNull("Authrty") { RegulatoryAuthority2.parse(this) },
+ k.children("Dtls") { StructuredRegulatoryReporting3.parse(this) },
+ )
+ }
+}
+
+enum class RegulatoryReportingType1Code {
+ CRED,
+ DEBT,
+ BOTH,
+}
+
+data class StructuredRegulatoryReporting3(
+ val Tp: String?,
+ val Dt: LocalDate?,
+ val Ctry: String?,
+ val Cd: String?,
+ val Amt: ActiveOrHistoricCurrencyAndAmount?,
+ val Inf: List<String>,
+) {
+ companion object {
+ fun parse(k: Konsumer): StructuredRegulatoryReporting3 = StructuredRegulatoryReporting3(
+ k.childOrNull("Tp") { text() },
+ k.childOrNull("Dt") { text().toDate() },
+ k.childOrNull("Ctry") { text() },
+ k.childOrNull("Cd") { text() },
+ k.childOrNull("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.children("Inf") { text() },
+ )
+ }
+}
+
+data class TaxInformation10(
+ val Cdtr: TaxParty1?,
+ val Dbtr: TaxParty2?,
+ val AdmstnZone: String?,
+ val RefNb: String?,
+ val Mtd: String?,
+ val TtlTaxblBaseAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val TtlTaxAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val Dt: LocalDate?,
+ val SeqNb: Float?,
+ val Rcrd: List<TaxRecord3>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TaxInformation10 = TaxInformation10(
+ k.childOrNull("Cdtr") { TaxParty1.parse(this) },
+ k.childOrNull("Dbtr") { TaxParty2.parse(this) },
+ k.childOrNull("AdmstnZone") { text() },
+ k.childOrNull("RefNb") { text() },
+ k.childOrNull("Mtd") { text() },
+ k.childOrNull("TtlTaxblBaseAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("TtlTaxAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("Dt") { text().toDate() },
+ k.childOrNull("SeqNb") { text().xmlFloat() },
+ k.children("Rcrd") { TaxRecord3.parse(this) },
+ )
+ }
+}
+
diff --git a/ebics/src/main/kotlin/iso20022/pain_002_001_13.kt b/ebics/src/main/kotlin/iso20022/pain_002_001_13.kt
new file mode 100644
index 00000000..c719898f
--- /dev/null
+++ b/ebics/src/main/kotlin/iso20022/pain_002_001_13.kt
@@ -0,0 +1,480 @@
+/*
+ * This file is part of LibEuFin.
+ * 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
+ * published by the Free Software Foundation; either version 3, or
+ * (at your option) any later version.
+
+ * LibEuFin is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+ * Public License for more details.
+
+ * You should have received a copy of the GNU Affero General Public
+ * License along with LibEuFin; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>
+ */
+
+// THIS FILE IS GENERATED, DO NOT EDIT
+
+package tech.libeufin.ebics.iso20022
+
+import java.time.*
+import java.util.*
+import com.gitlab.mvysny.konsumexml.*
+
+
+data class AmendmentInformationDetails14(
+ val OrgnlMndtId: String?,
+ val OrgnlCdtrSchmeId: PartyIdentification135?,
+ val OrgnlCdtrAgt: BranchAndFinancialInstitutionIdentification6?,
+ val OrgnlCdtrAgtAcct: CashAccount40?,
+ val OrgnlDbtr: PartyIdentification135?,
+ val OrgnlDbtrAcct: CashAccount40?,
+ val OrgnlDbtrAgt: BranchAndFinancialInstitutionIdentification6?,
+ val OrgnlDbtrAgtAcct: CashAccount40?,
+ val OrgnlFnlColltnDt: LocalDate?,
+ val OrgnlFrqcy: Frequency36Choice?,
+ val OrgnlRsn: MandateSetupReason1Choice?,
+ val OrgnlTrckgDays: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): AmendmentInformationDetails14 = AmendmentInformationDetails14(
+ k.childOrNull("OrgnlMndtId") { text() },
+ k.childOrNull("OrgnlCdtrSchmeId") { PartyIdentification135.parse(this) },
+ k.childOrNull("OrgnlCdtrAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("OrgnlCdtrAgtAcct") { CashAccount40.parse(this) },
+ k.childOrNull("OrgnlDbtr") { PartyIdentification135.parse(this) },
+ k.childOrNull("OrgnlDbtrAcct") { CashAccount40.parse(this) },
+ k.childOrNull("OrgnlDbtrAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("OrgnlDbtrAgtAcct") { CashAccount40.parse(this) },
+ k.childOrNull("OrgnlFnlColltnDt") { text().toDate() },
+ k.childOrNull("OrgnlFrqcy") { Frequency36Choice.parse(this) },
+ k.childOrNull("OrgnlRsn") { MandateSetupReason1Choice.parse(this) },
+ k.childOrNull("OrgnlTrckgDays") { text() },
+ )
+ }
+}
+
+data class Charges12(
+ val Amt: ActiveOrHistoricCurrencyAndAmount,
+ val Agt: BranchAndFinancialInstitutionIdentification6,
+ val Tp: ChargeType3Choice?,
+) {
+ companion object {
+ fun parse(k: Konsumer): Charges12 = Charges12(
+ k.child("Amt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.child("Agt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("Tp") { ChargeType3Choice.parse(this) },
+ )
+ }
+}
+
+enum class ClearingChannel2Code {
+ RTGS,
+ RTNS,
+ MPNS,
+ BOOK,
+}
+
+sealed interface ClearingSystemIdentification3Choice {
+ @JvmInline
+ value class Cd(val value: ExternalCashClearingSystem1Code): ClearingSystemIdentification3Choice
+ @JvmInline
+ value class Prtry(val value: String): ClearingSystemIdentification3Choice
+
+ companion object {
+ fun parse(k: Konsumer): ClearingSystemIdentification3Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalCashClearingSystem1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class CurrencyExchange13(
+ val SrcCcy: String,
+ val TrgtCcy: String,
+ val XchgRate: Float,
+ val UnitCcy: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): CurrencyExchange13 = CurrencyExchange13(
+ k.child("SrcCcy") { text() },
+ k.child("TrgtCcy") { text() },
+ k.child("XchgRate") { text().xmlFloat() },
+ k.childOrNull("UnitCcy") { text() },
+ )
+ }
+}
+
+data class CustomerPaymentStatusReportV13(
+ val GrpHdr: GroupHeader86,
+ val OrgnlGrpInfAndSts: OriginalGroupHeader17,
+ val OrgnlPmtInfAndSts: List<OriginalPaymentInstruction45>,
+ val SplmtryData: List<SupplementaryData1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): CustomerPaymentStatusReportV13 = CustomerPaymentStatusReportV13(
+ k.child("GrpHdr") { GroupHeader86.parse(this) },
+ k.child("OrgnlGrpInfAndSts") { OriginalGroupHeader17.parse(this) },
+ k.children("OrgnlPmtInfAndSts") { OriginalPaymentInstruction45.parse(this) },
+ k.children("SplmtryData") { SupplementaryData1.parse(this) },
+ )
+ }
+}
+
+data class pain_002_001_13(
+ val CstmrPmtStsRpt: CustomerPaymentStatusReportV13,
+) {
+ companion object {
+ fun parse(k: Konsumer): pain_002_001_13 = pain_002_001_13(
+ k.child("CstmrPmtStsRpt") { CustomerPaymentStatusReportV13.parse(this) },
+ )
+ }
+}
+
+data class GroupHeader86(
+ val MsgId: String,
+ val CreDtTm: LocalDateTime,
+ val InitgPty: PartyIdentification135?,
+ val FwdgAgt: BranchAndFinancialInstitutionIdentification6?,
+ val DbtrAgt: BranchAndFinancialInstitutionIdentification6?,
+ val CdtrAgt: BranchAndFinancialInstitutionIdentification6?,
+) {
+ companion object {
+ fun parse(k: Konsumer): GroupHeader86 = GroupHeader86(
+ k.child("MsgId") { text() },
+ k.child("CreDtTm") { text().toDateTime() },
+ k.childOrNull("InitgPty") { PartyIdentification135.parse(this) },
+ k.childOrNull("FwdgAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("DbtrAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("CdtrAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ )
+ }
+}
+
+sealed interface MandateRelatedData2Choice {
+ @JvmInline
+ value class DrctDbtMndt(val value: MandateRelatedInformation15): MandateRelatedData2Choice
+ @JvmInline
+ value class CdtTrfMndt(val value: CreditTransferMandateData1): MandateRelatedData2Choice
+
+ companion object {
+ fun parse(k: Konsumer): MandateRelatedData2Choice = k.child(Names.of("DrctDbtMndt", "CdtTrfMndt")) {
+ when (localName) {
+ "DrctDbtMndt" -> DrctDbtMndt(MandateRelatedInformation15.parse(this))
+ "CdtTrfMndt" -> CdtTrfMndt(CreditTransferMandateData1.parse(this))
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class MandateRelatedInformation15(
+ val MndtId: String?,
+ val DtOfSgntr: LocalDate?,
+ val AmdmntInd: Boolean?,
+ val AmdmntInfDtls: AmendmentInformationDetails14?,
+ val ElctrncSgntr: String?,
+ val FrstColltnDt: LocalDate?,
+ val FnlColltnDt: LocalDate?,
+ val Frqcy: Frequency36Choice?,
+ val Rsn: MandateSetupReason1Choice?,
+ val TrckgDays: String?,
+) {
+ companion object {
+ fun parse(k: Konsumer): MandateRelatedInformation15 = MandateRelatedInformation15(
+ k.childOrNull("MndtId") { text() },
+ k.childOrNull("DtOfSgntr") { text().toDate() },
+ k.childOrNull("AmdmntInd") { text().xmlBoolean() },
+ k.childOrNull("AmdmntInfDtls") { AmendmentInformationDetails14.parse(this) },
+ k.childOrNull("ElctrncSgntr") { text() },
+ k.childOrNull("FrstColltnDt") { text().toDate() },
+ k.childOrNull("FnlColltnDt") { text().toDate() },
+ k.childOrNull("Frqcy") { Frequency36Choice.parse(this) },
+ k.childOrNull("Rsn") { MandateSetupReason1Choice.parse(this) },
+ k.childOrNull("TrckgDays") { text() },
+ )
+ }
+}
+
+data class NumberOfTransactionsPerStatus5(
+ val DtldNbOfTxs: String,
+ val DtldSts: ExternalPaymentTransactionStatus1Code,
+ val DtldCtrlSum: Float?,
+) {
+ companion object {
+ fun parse(k: Konsumer): NumberOfTransactionsPerStatus5 = NumberOfTransactionsPerStatus5(
+ k.child("DtldNbOfTxs") { text() },
+ k.child("DtldSts") { text().xmlCodeSet<ExternalPaymentTransactionStatus1Code>() },
+ k.childOrNull("DtldCtrlSum") { text().xmlFloat() },
+ )
+ }
+}
+
+data class OriginalGroupHeader17(
+ val OrgnlMsgId: String,
+ val OrgnlMsgNmId: String,
+ val OrgnlCreDtTm: LocalDateTime?,
+ val OrgnlNbOfTxs: String?,
+ val OrgnlCtrlSum: Float?,
+ val GrpSts: ExternalPaymentGroupStatus1Code?,
+ val StsRsnInf: List<StatusReasonInformation12>,
+ val NbOfTxsPerSts: List<NumberOfTransactionsPerStatus5>,
+) {
+ companion object {
+ fun parse(k: Konsumer): OriginalGroupHeader17 = OriginalGroupHeader17(
+ k.child("OrgnlMsgId") { text() },
+ k.child("OrgnlMsgNmId") { text() },
+ k.childOrNull("OrgnlCreDtTm") { text().toDateTime() },
+ k.childOrNull("OrgnlNbOfTxs") { text() },
+ k.childOrNull("OrgnlCtrlSum") { text().xmlFloat() },
+ k.childOrNull("GrpSts") { text().xmlCodeSet<ExternalPaymentGroupStatus1Code>() },
+ k.children("StsRsnInf") { StatusReasonInformation12.parse(this) },
+ k.children("NbOfTxsPerSts") { NumberOfTransactionsPerStatus5.parse(this) },
+ )
+ }
+}
+
+data class OriginalPaymentInstruction45(
+ val OrgnlPmtInfId: String,
+ val OrgnlNbOfTxs: String?,
+ val OrgnlCtrlSum: Float?,
+ val PmtInfSts: ExternalPaymentGroupStatus1Code?,
+ val StsRsnInf: List<StatusReasonInformation12>,
+ val NbOfTxsPerSts: List<NumberOfTransactionsPerStatus5>,
+ val TxInfAndSts: List<PaymentTransaction144>,
+) {
+ companion object {
+ fun parse(k: Konsumer): OriginalPaymentInstruction45 = OriginalPaymentInstruction45(
+ k.child("OrgnlPmtInfId") { text() },
+ k.childOrNull("OrgnlNbOfTxs") { text() },
+ k.childOrNull("OrgnlCtrlSum") { text().xmlFloat() },
+ k.childOrNull("PmtInfSts") { text().xmlCodeSet<ExternalPaymentGroupStatus1Code>() },
+ k.children("StsRsnInf") { StatusReasonInformation12.parse(this) },
+ k.children("NbOfTxsPerSts") { NumberOfTransactionsPerStatus5.parse(this) },
+ k.children("TxInfAndSts") { PaymentTransaction144.parse(this) },
+ )
+ }
+}
+
+data class OriginalTransactionReference35(
+ val IntrBkSttlmAmt: ActiveOrHistoricCurrencyAndAmount?,
+ val Amt: AmountType4Choice?,
+ val IntrBkSttlmDt: LocalDate?,
+ val ReqdColltnDt: LocalDate?,
+ val ReqdExctnDt: DateAndDateTime2Choice?,
+ val CdtrSchmeId: PartyIdentification135?,
+ val SttlmInf: SettlementInstruction11?,
+ val PmtTpInf: PaymentTypeInformation27?,
+ val PmtMtd: PaymentMethod4Code?,
+ val MndtRltdInf: MandateRelatedData2Choice?,
+ val RmtInf: RemittanceInformation21?,
+ val UltmtDbtr: Party40Choice?,
+ val Dbtr: Party40Choice?,
+ val DbtrAcct: CashAccount40?,
+ val DbtrAgt: BranchAndFinancialInstitutionIdentification6?,
+ val DbtrAgtAcct: CashAccount40?,
+ val CdtrAgt: BranchAndFinancialInstitutionIdentification6?,
+ val CdtrAgtAcct: CashAccount40?,
+ val Cdtr: Party40Choice?,
+ val CdtrAcct: CashAccount40?,
+ val UltmtCdtr: Party40Choice?,
+ val Purp: Purpose2Choice?,
+) {
+ companion object {
+ fun parse(k: Konsumer): OriginalTransactionReference35 = OriginalTransactionReference35(
+ k.childOrNull("IntrBkSttlmAmt") { ActiveOrHistoricCurrencyAndAmount.parse(this) },
+ k.childOrNull("Amt") { AmountType4Choice.parse(this) },
+ k.childOrNull("IntrBkSttlmDt") { text().toDate() },
+ k.childOrNull("ReqdColltnDt") { text().toDate() },
+ k.childOrNull("ReqdExctnDt") { DateAndDateTime2Choice.parse(this) },
+ k.childOrNull("CdtrSchmeId") { PartyIdentification135.parse(this) },
+ k.childOrNull("SttlmInf") { SettlementInstruction11.parse(this) },
+ k.childOrNull("PmtTpInf") { PaymentTypeInformation27.parse(this) },
+ k.childOrNull("PmtMtd") { PaymentMethod4Code.valueOf(text()) },
+ k.childOrNull("MndtRltdInf") { MandateRelatedData2Choice.parse(this) },
+ k.childOrNull("RmtInf") { RemittanceInformation21.parse(this) },
+ k.childOrNull("UltmtDbtr") { Party40Choice.parse(this) },
+ k.childOrNull("Dbtr") { Party40Choice.parse(this) },
+ k.childOrNull("DbtrAcct") { CashAccount40.parse(this) },
+ k.childOrNull("DbtrAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("DbtrAgtAcct") { CashAccount40.parse(this) },
+ k.childOrNull("CdtrAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("CdtrAgtAcct") { CashAccount40.parse(this) },
+ k.childOrNull("Cdtr") { Party40Choice.parse(this) },
+ k.childOrNull("CdtrAcct") { CashAccount40.parse(this) },
+ k.childOrNull("UltmtCdtr") { Party40Choice.parse(this) },
+ k.childOrNull("Purp") { Purpose2Choice.parse(this) },
+ )
+ }
+}
+
+enum class PaymentMethod4Code {
+ CHK,
+ TRF,
+ DD,
+ TRA,
+}
+
+data class PaymentTransaction144(
+ val StsId: String?,
+ val OrgnlInstrId: String?,
+ val OrgnlEndToEndId: String?,
+ val OrgnlUETR: String?,
+ val TxSts: ExternalPaymentTransactionStatus1Code?,
+ val StsRsnInf: List<StatusReasonInformation12>,
+ val ChrgsInf: List<Charges12>,
+ val TrckrData: TrackerData1?,
+ val AccptncDtTm: LocalDateTime?,
+ val AcctSvcrRef: String?,
+ val ClrSysRef: String?,
+ val OrgnlTxRef: OriginalTransactionReference35?,
+ val SplmtryData: List<SupplementaryData1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): PaymentTransaction144 = PaymentTransaction144(
+ k.childOrNull("StsId") { text() },
+ k.childOrNull("OrgnlInstrId") { text() },
+ k.childOrNull("OrgnlEndToEndId") { text() },
+ k.childOrNull("OrgnlUETR") { text() },
+ k.childOrNull("TxSts") { text().xmlCodeSet<ExternalPaymentTransactionStatus1Code>() },
+ k.children("StsRsnInf") { StatusReasonInformation12.parse(this) },
+ k.children("ChrgsInf") { Charges12.parse(this) },
+ k.childOrNull("TrckrData") { TrackerData1.parse(this) },
+ k.childOrNull("AccptncDtTm") { text().toDateTime() },
+ k.childOrNull("AcctSvcrRef") { text() },
+ k.childOrNull("ClrSysRef") { text() },
+ k.childOrNull("OrgnlTxRef") { OriginalTransactionReference35.parse(this) },
+ k.children("SplmtryData") { SupplementaryData1.parse(this) },
+ )
+ }
+}
+
+data class PaymentTypeInformation27(
+ val InstrPrty: Priority2Code?,
+ val ClrChanl: ClearingChannel2Code?,
+ val SvcLvl: List<ServiceLevel8Choice>,
+ val LclInstrm: LocalInstrument2Choice?,
+ val SeqTp: SequenceType3Code?,
+ val CtgyPurp: CategoryPurpose1Choice?,
+) {
+ companion object {
+ fun parse(k: Konsumer): PaymentTypeInformation27 = PaymentTypeInformation27(
+ k.childOrNull("InstrPrty") { Priority2Code.valueOf(text()) },
+ k.childOrNull("ClrChanl") { ClearingChannel2Code.valueOf(text()) },
+ k.children("SvcLvl") { ServiceLevel8Choice.parse(this) },
+ k.childOrNull("LclInstrm") { LocalInstrument2Choice.parse(this) },
+ k.childOrNull("SeqTp") { SequenceType3Code.valueOf(text()) },
+ k.childOrNull("CtgyPurp") { CategoryPurpose1Choice.parse(this) },
+ )
+ }
+}
+
+enum class SequenceType3Code {
+ FRST,
+ RCUR,
+ FNAL,
+ OOFF,
+ RPRE,
+}
+
+data class SettlementInstruction11(
+ val SttlmMtd: SettlementMethod1Code,
+ val SttlmAcct: CashAccount40?,
+ val ClrSys: ClearingSystemIdentification3Choice?,
+ val InstgRmbrsmntAgt: BranchAndFinancialInstitutionIdentification6?,
+ val InstgRmbrsmntAgtAcct: CashAccount40?,
+ val InstdRmbrsmntAgt: BranchAndFinancialInstitutionIdentification6?,
+ val InstdRmbrsmntAgtAcct: CashAccount40?,
+ val ThrdRmbrsmntAgt: BranchAndFinancialInstitutionIdentification6?,
+ val ThrdRmbrsmntAgtAcct: CashAccount40?,
+) {
+ companion object {
+ fun parse(k: Konsumer): SettlementInstruction11 = SettlementInstruction11(
+ k.child("SttlmMtd") { SettlementMethod1Code.valueOf(text()) },
+ k.childOrNull("SttlmAcct") { CashAccount40.parse(this) },
+ k.childOrNull("ClrSys") { ClearingSystemIdentification3Choice.parse(this) },
+ k.childOrNull("InstgRmbrsmntAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("InstgRmbrsmntAgtAcct") { CashAccount40.parse(this) },
+ k.childOrNull("InstdRmbrsmntAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("InstdRmbrsmntAgtAcct") { CashAccount40.parse(this) },
+ k.childOrNull("ThrdRmbrsmntAgt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("ThrdRmbrsmntAgtAcct") { CashAccount40.parse(this) },
+ )
+ }
+}
+
+enum class SettlementMethod1Code {
+ INDA,
+ INGA,
+ COVE,
+ CLRG,
+}
+
+sealed interface StatusReason6Choice {
+ @JvmInline
+ value class Cd(val value: ExternalStatusReason1Code): StatusReason6Choice
+ @JvmInline
+ value class Prtry(val value: String): StatusReason6Choice
+
+ companion object {
+ fun parse(k: Konsumer): StatusReason6Choice = k.child(Names.of("Cd", "Prtry")) {
+ when (localName) {
+ "Cd" -> Cd(text().xmlCodeSet<ExternalStatusReason1Code>())
+ "Prtry" -> Prtry(text())
+ else -> throw Error("Impossible")
+ }
+ }
+ }
+}
+
+data class StatusReasonInformation12(
+ val Orgtr: PartyIdentification135?,
+ val Rsn: StatusReason6Choice?,
+ val AddtlInf: List<String>,
+) {
+ companion object {
+ fun parse(k: Konsumer): StatusReasonInformation12 = StatusReasonInformation12(
+ k.childOrNull("Orgtr") { PartyIdentification135.parse(this) },
+ k.childOrNull("Rsn") { StatusReason6Choice.parse(this) },
+ k.children("AddtlInf") { text() },
+ )
+ }
+}
+
+data class TrackerData1(
+ val ConfdDt: DateAndDateTime2Choice,
+ val ConfdAmt: ActiveCurrencyAndAmount,
+ val TrckrRcrd: List<TrackerRecord1>,
+) {
+ companion object {
+ fun parse(k: Konsumer): TrackerData1 = TrackerData1(
+ k.child("ConfdDt") { DateAndDateTime2Choice.parse(this) },
+ k.child("ConfdAmt") { ActiveCurrencyAndAmount.parse(this) },
+ k.children("TrckrRcrd", minCount=1, ) { TrackerRecord1.parse(this) },
+ )
+ }
+}
+
+data class TrackerRecord1(
+ val Agt: BranchAndFinancialInstitutionIdentification6,
+ val ChrgBr: ChargeBearerType1Code?,
+ val ChrgsAmt: ActiveCurrencyAndAmount?,
+ val XchgRateData: CurrencyExchange13?,
+) {
+ companion object {
+ fun parse(k: Konsumer): TrackerRecord1 = TrackerRecord1(
+ k.child("Agt") { BranchAndFinancialInstitutionIdentification6.parse(this) },
+ k.childOrNull("ChrgBr") { ChargeBearerType1Code.valueOf(text()) },
+ k.childOrNull("ChrgsAmt") { ActiveCurrencyAndAmount.parse(this) },
+ k.childOrNull("XchgRateData") { CurrencyExchange13.parse(this) },
+ )
+ }
+}
+
diff --git a/ebics/src/main/kotlin/iso20022/utils.kt b/ebics/src/main/kotlin/iso20022/utils.kt
new file mode 100644
index 00000000..9e65be00
--- /dev/null
+++ b/ebics/src/main/kotlin/iso20022/utils.kt
@@ -0,0 +1,32 @@
+/*
+ * This file is part of LibEuFin.
+ * 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
+ * published by the Free Software Foundation; either version 3, or
+ * (at your option) any later version.
+ *
+ * LibEuFin is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+ * Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with LibEuFin; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>
+ */
+
+package tech.libeufin.ebics.iso20022
+
+import java.time.format.*
+import java.time.*
+
+/** Handle escaped enum variant due to Java limitation */
+inline fun <reified T : kotlin.Enum<T>> String.xmlCodeSet(): T
+ = java.lang.Enum.valueOf(T::class.java, if (this[0].isDigit()) "_$this" else this)
+
+fun String.toDate(): LocalDate = LocalDate.parse(this, DateTimeFormatter.ISO_DATE)
+fun String.toDateTime(): LocalDateTime = LocalDateTime.parse(this, DateTimeFormatter.ISO_DATE_TIME)
+fun String.toYearMonth(): YearMonth = YearMonth.parse(this, DateTimeFormatter.ISO_DATE)
+fun String.toYear(): Year = Year.parse(this, DateTimeFormatter.ISO_DATE) \ No newline at end of file
diff --git a/ebics/src/main/resources/xsd/camt.052.001.02.xsd b/ebics/src/main/resources/xsd/camt.052.001.02.xsd
deleted file mode 100644
index 52abd831..00000000
--- a/ebics/src/main/resources/xsd/camt.052.001.02.xsd
+++ /dev/null
@@ -1,1299 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Mit XMLSpy v2008 rel. 2 (http://www.altova.com) von Wenzel (SIZ Bonn) bearbeitet -->
-<!--Generated by SWIFTStandards Workstation (build:R6.1.0.2) on 2009 Jan 08 17:30:53-->
-<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:camt.052.001.02" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:iso:std:iso:20022:tech:xsd:camt.052.001.02" elementFormDefault="qualified">
- <xs:element name="Document" type="Document"/>
- <xs:complexType name="AccountIdentification4Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="IBAN" type="IBAN2007Identifier"/>
- <xs:element name="Othr" type="GenericAccountIdentification1"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AccountInterest2">
- <xs:sequence>
- <xs:element name="Tp" type="InterestType1Choice" minOccurs="0"/>
- <xs:element name="Rate" type="Rate3" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="FrToDt" type="DateTimePeriodDetails" minOccurs="0"/>
- <xs:element name="Rsn" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AccountReport11">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="ElctrncSeqNb" type="Number" minOccurs="0"/>
- <xs:element name="LglSeqNb" type="Number" minOccurs="0"/>
- <xs:element name="CreDtTm" type="ISODateTime"/>
- <xs:element name="FrToDt" type="DateTimePeriodDetails" minOccurs="0"/>
- <xs:element name="CpyDplctInd" type="CopyDuplicate1Code" minOccurs="0"/>
- <xs:element name="RptgSrc" type="ReportingSource1Choice" minOccurs="0"/>
- <xs:element name="Acct" type="CashAccount20"/>
- <xs:element name="RltdAcct" type="CashAccount16" minOccurs="0"/>
- <xs:element name="Intrst" type="AccountInterest2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="Bal" type="CashBalance3" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="TxsSummry" type="TotalTransactions2" minOccurs="0"/>
- <xs:element name="Ntry" type="ReportEntry2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="AddtlRptInf" type="Max500Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AccountSchemeName1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalAccountIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="ActiveOrHistoricCurrencyAndAmount_SimpleType">
- <xs:restriction base="xs:decimal">
- <xs:minInclusive value="0"/>
- <xs:fractionDigits value="5"/>
- <xs:totalDigits value="18"/>
- </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,13}"/>
- </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="AlternateSecurityIdentification2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Id" type="Max35Text"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AmountAndCurrencyExchange3">
- <xs:sequence>
- <xs:element name="InstdAmt" type="AmountAndCurrencyExchangeDetails3" minOccurs="0"/>
- <xs:element name="TxAmt" type="AmountAndCurrencyExchangeDetails3" minOccurs="0"/>
- <xs:element name="CntrValAmt" type="AmountAndCurrencyExchangeDetails3" minOccurs="0"/>
- <xs:element name="AnncdPstngAmt" type="AmountAndCurrencyExchangeDetails3" minOccurs="0"/>
- <xs:element name="PrtryAmt" type="AmountAndCurrencyExchangeDetails4" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AmountAndCurrencyExchangeDetails3">
- <xs:sequence>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CcyXchg" type="CurrencyExchange5" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AmountAndCurrencyExchangeDetails4">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CcyXchg" type="CurrencyExchange5" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AmountRangeBoundary1">
- <xs:sequence>
- <xs:element name="BdryAmt" type="ImpliedCurrencyAndAmount"/>
- <xs:element name="Incl" type="YesNoIndicator"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="AnyBICIdentifier">
- <xs:restriction base="xs:string">
- <xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="BICIdentifier">
- <xs:restriction base="xs:string">
- <xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="BalanceSubType1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalBalanceSubType1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BalanceType12">
- <xs:sequence>
- <xs:element name="CdOrPrtry" type="BalanceType5Choice"/>
- <xs:element name="SubTp" type="BalanceSubType1Choice" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="BalanceType12Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="XPCD"/>
- <xs:enumeration value="OPAV"/>
- <xs:enumeration value="ITAV"/>
- <xs:enumeration value="CLAV"/>
- <xs:enumeration value="FWAV"/>
- <xs:enumeration value="CLBD"/>
- <xs:enumeration value="ITBD"/>
- <xs:enumeration value="OPBD"/>
- <xs:enumeration value="PRCD"/>
- <xs:enumeration value="INFO"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="BalanceType5Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="BalanceType12Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BankToCustomerAccountReportV02">
- <xs:sequence>
- <xs:element name="GrpHdr" type="GroupHeader42"/>
- <xs:element name="Rpt" type="AccountReport11" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BankTransactionCodeStructure4">
- <xs:sequence>
- <xs:element name="Domn" type="BankTransactionCodeStructure5" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryBankTransactionCodeStructure1" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BankTransactionCodeStructure5">
- <xs:sequence>
- <xs:element name="Cd" type="ExternalBankTransactionDomain1Code"/>
- <xs:element name="Fmly" type="BankTransactionCodeStructure6"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BankTransactionCodeStructure6">
- <xs:sequence>
- <xs:element name="Cd" type="ExternalBankTransactionFamily1Code"/>
- <xs:element name="SubFmlyCd" type="ExternalBankTransactionSubFamily1Code"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="BaseOneRate">
- <xs:restriction base="xs:decimal">
- <xs:fractionDigits value="10"/>
- <xs:totalDigits value="11"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="BatchInformation2">
- <xs:sequence>
- <xs:element name="MsgId" type="Max35Text" minOccurs="0"/>
- <xs:element name="PmtInfId" type="Max35Text" minOccurs="0"/>
- <xs:element name="NbOfTxs" type="Max15NumericText" minOccurs="0"/>
- <xs:element name="TtlAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BranchAndFinancialInstitutionIdentification4">
- <xs:sequence>
- <xs:element name="FinInstnId" type="FinancialInstitutionIdentification7"/>
- <xs:element name="BrnchId" type="BranchData2" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BranchData2">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text" minOccurs="0"/>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- <xs:element name="PstlAdr" type="PostalAddress6" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashAccount16">
- <xs:sequence>
- <xs:element name="Id" type="AccountIdentification4Choice"/>
- <xs:element name="Tp" type="CashAccountType2" minOccurs="0"/>
- <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
- <xs:element name="Nm" type="Max70Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashAccount20">
- <xs:sequence>
- <xs:element name="Id" type="AccountIdentification4Choice"/>
- <xs:element name="Tp" type="CashAccountType2" minOccurs="0"/>
- <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
- <xs:element name="Nm" type="Max70Text" minOccurs="0"/>
- <xs:element name="Ownr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Svcr" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashAccountType2">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="CashAccountType4Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="CashAccountType4Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="CASH"/>
- <xs:enumeration value="CHAR"/>
- <xs:enumeration value="COMM"/>
- <xs:enumeration value="TAXE"/>
- <xs:enumeration value="CISH"/>
- <xs:enumeration value="TRAS"/>
- <xs:enumeration value="SACC"/>
- <xs:enumeration value="CACC"/>
- <xs:enumeration value="SVGS"/>
- <xs:enumeration value="ONDP"/>
- <xs:enumeration value="MGLD"/>
- <xs:enumeration value="NREX"/>
- <xs:enumeration value="MOMA"/>
- <xs:enumeration value="LOAN"/>
- <xs:enumeration value="SLRY"/>
- <xs:enumeration value="ODFT"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="CashBalance3">
- <xs:sequence>
- <xs:element name="Tp" type="BalanceType12"/>
- <xs:element name="CdtLine" type="CreditLine2" minOccurs="0"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
- <xs:element name="Dt" type="DateAndDateTimeChoice"/>
- <xs:element name="Avlbty" type="CashBalanceAvailability2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashBalanceAvailability2">
- <xs:sequence>
- <xs:element name="Dt" type="CashBalanceAvailabilityDate1"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashBalanceAvailabilityDate1">
- <xs:sequence>
- <xs:choice>
- <xs:element name="NbOfDays" type="Max15PlusSignedNumericText"/>
- <xs:element name="ActlDt" type="ISODate"/>
- </xs:choice>
- </xs:sequence>
- </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:simpleType name="ChargeType1Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="BRKF"/>
- <xs:enumeration value="COMM"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="ChargeType2Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ChargeType1Code"/>
- <xs:element name="Prtry" type="GenericIdentification3"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ChargesInformation6">
- <xs:sequence>
- <xs:element name="TtlChrgsAndTaxAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- <xs:element name="Tp" type="ChargeType2Choice" minOccurs="0"/>
- <xs:element name="Rate" type="PercentageRate" minOccurs="0"/>
- <xs:element name="Br" type="ChargeBearerType1Code" minOccurs="0"/>
- <xs:element name="Pty" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="Tax" type="TaxCharges2" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ClearingSystemIdentification2Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalClearingSystemIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ClearingSystemMemberIdentification2">
- <xs:sequence>
- <xs:element name="ClrSysId" type="ClearingSystemIdentification2Choice" minOccurs="0"/>
- <xs:element name="MmbId" type="Max35Text"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ContactDetails2">
- <xs:sequence>
- <xs:element name="NmPrfx" type="NamePrefix1Code" minOccurs="0"/>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- <xs:element name="PhneNb" type="PhoneNumber" minOccurs="0"/>
- <xs:element name="MobNb" type="PhoneNumber" minOccurs="0"/>
- <xs:element name="FaxNb" type="PhoneNumber" minOccurs="0"/>
- <xs:element name="EmailAdr" type="Max2048Text" minOccurs="0"/>
- <xs:element name="Othr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="CopyDuplicate1Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="CODU"/>
- <xs:enumeration value="COPY"/>
- <xs:enumeration value="DUPL"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="CorporateAction1">
- <xs:sequence>
- <xs:element name="Cd" type="Max35Text" minOccurs="0"/>
- <xs:element name="Nb" type="Max35Text" minOccurs="0"/>
- <xs:element name="Prtry" type="Max35Text" minOccurs="0"/>
- </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="CreditLine2">
- <xs:sequence>
- <xs:element name="Incl" type="TrueFalseIndicator"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CreditorReferenceInformation2">
- <xs:sequence>
- <xs:element name="Tp" type="CreditorReferenceType2" minOccurs="0"/>
- <xs:element name="Ref" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CreditorReferenceType1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="DocumentType3Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CreditorReferenceType2">
- <xs:sequence>
- <xs:element name="CdOrPrtry" type="CreditorReferenceType1Choice"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CurrencyAndAmountRange2">
- <xs:sequence>
- <xs:element name="Amt" type="ImpliedCurrencyAmountRangeChoice"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CurrencyExchange5">
- <xs:sequence>
- <xs:element name="SrcCcy" type="ActiveOrHistoricCurrencyCode"/>
- <xs:element name="TrgtCcy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
- <xs:element name="UnitCcy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
- <xs:element name="XchgRate" type="BaseOneRate"/>
- <xs:element name="CtrctId" type="Max35Text" minOccurs="0"/>
- <xs:element name="QtnDt" type="ISODateTime" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DateAndDateTimeChoice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Dt" type="ISODate"/>
- <xs:element name="DtTm" type="ISODateTime"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DateAndPlaceOfBirth">
- <xs:sequence>
- <xs:element name="BirthDt" type="ISODate"/>
- <xs:element name="PrvcOfBirth" type="Max35Text" minOccurs="0"/>
- <xs:element name="CityOfBirth" type="Max35Text"/>
- <xs:element name="CtryOfBirth" type="CountryCode"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DatePeriodDetails">
- <xs:sequence>
- <xs:element name="FrDt" type="ISODate"/>
- <xs:element name="ToDt" type="ISODate"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DateTimePeriodDetails">
- <xs:sequence>
- <xs:element name="FrDtTm" type="ISODateTime"/>
- <xs:element name="ToDtTm" type="ISODateTime"/>
- </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="Document">
- <xs:sequence>
- <xs:element name="BkToCstmrAcctRpt" type="BankToCustomerAccountReportV02"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DocumentAdjustment1">
- <xs:sequence>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- <xs:element name="Rsn" type="Max4Text" minOccurs="0"/>
- <xs:element name="AddtlInf" type="Max140Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs: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="DocumentType5Code">
- <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:restriction>
- </xs:simpleType>
- <xs:complexType name="EntryDetails1">
- <xs:sequence>
- <xs:element name="Btch" type="BatchInformation2" minOccurs="0"/>
- <xs:element name="TxDtls" type="EntryTransaction2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="EntryStatus2Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="BOOK"/>
- <xs:enumeration value="PDNG"/>
- <xs:enumeration value="INFO"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="EntryTransaction2">
- <xs:sequence>
- <xs:element name="Refs" type="TransactionReferences2" minOccurs="0"/>
- <xs:element name="AmtDtls" type="AmountAndCurrencyExchange3" minOccurs="0"/>
- <xs:element name="Avlbty" type="CashBalanceAvailability2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="BkTxCd" type="BankTransactionCodeStructure4" minOccurs="0"/>
- <xs:element name="Chrgs" type="ChargesInformation6" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="Intrst" type="TransactionInterest2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="RltdPties" type="TransactionParty2" minOccurs="0"/>
- <xs:element name="RltdAgts" type="TransactionAgents2" minOccurs="0"/>
- <xs:element name="Purp" type="Purpose2Choice" minOccurs="0"/>
- <xs:element name="RltdRmtInf" type="RemittanceLocation2" minOccurs="0" maxOccurs="10"/>
- <xs:element name="RmtInf" type="RemittanceInformation5" minOccurs="0"/>
- <xs:element name="RltdDts" type="TransactionDates2" minOccurs="0"/>
- <xs:element name="RltdPric" type="TransactionPrice2Choice" minOccurs="0"/>
- <xs:element name="RltdQties" type="TransactionQuantities1Choice" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="FinInstrmId" type="SecurityIdentification4Choice" minOccurs="0"/>
- <xs:element name="Tax" type="TaxInformation3" minOccurs="0"/>
- <xs:element name="RtrInf" type="ReturnReasonInformation10" minOccurs="0"/>
- <xs:element name="CorpActn" type="CorporateAction1" minOccurs="0"/>
- <xs:element name="SfkpgAcct" type="CashAccount16" minOccurs="0"/>
- <xs:element name="AddtlTxInf" type="Max500Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="ExternalAccountIdentification1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalBalanceSubType1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalBankTransactionDomain1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalBankTransactionFamily1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalBankTransactionSubFamily1Code">
- <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="ExternalFinancialInstitutionIdentification1Code">
- <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="ExternalPersonIdentification1Code">
- <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="ExternalReportingSource1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalReturnReason1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalTechnicalInputChannel1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="FinancialIdentificationSchemeName1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalFinancialInstitutionIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="FinancialInstitutionIdentification7">
- <xs:sequence>
- <xs:element name="BIC" type="BICIdentifier" minOccurs="0"/>
- <xs:element name="ClrSysMmbId" type="ClearingSystemMemberIdentification2" minOccurs="0"/>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- <xs:element name="PstlAdr" type="PostalAddress6" minOccurs="0"/>
- <xs:element name="Othr" type="GenericFinancialIdentification1" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="FinancialInstrumentQuantityChoice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Unit" type="DecimalNumber"/>
- <xs:element name="FaceAmt" type="ImpliedCurrencyAndAmount"/>
- <xs:element name="AmtsdVal" type="ImpliedCurrencyAndAmount"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="FromToAmountRange">
- <xs:sequence>
- <xs:element name="FrAmt" type="AmountRangeBoundary1"/>
- <xs:element name="ToAmt" type="AmountRangeBoundary1"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericAccountIdentification1">
- <xs:sequence>
- <xs:element name="Id" type="Max34Text"/>
- <xs:element name="SchmeNm" type="AccountSchemeName1Choice" minOccurs="0"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericFinancialIdentification1">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="SchmeNm" type="FinancialIdentificationSchemeName1Choice" minOccurs="0"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericIdentification3">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericOrganisationIdentification1">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="SchmeNm" type="OrganisationIdentificationSchemeName1Choice" minOccurs="0"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericPersonIdentification1">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="SchmeNm" type="PersonIdentificationSchemeName1Choice" minOccurs="0"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GroupHeader42">
- <xs:sequence>
- <xs:element name="MsgId" type="Max35Text"/>
- <xs:element name="CreDtTm" type="ISODateTime"/>
- <xs:element name="MsgRcpt" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="MsgPgntn" type="Pagination" minOccurs="0"/>
- <xs:element name="AddtlInf" type="Max500Text" minOccurs="0"/>
- </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="ISINIdentifier">
- <xs:restriction base="xs:string">
- <xs:pattern value="[A-Z0-9]{12,12}"/>
- </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:complexType name="ImpliedCurrencyAmountRangeChoice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="FrAmt" type="AmountRangeBoundary1"/>
- <xs:element name="ToAmt" type="AmountRangeBoundary1"/>
- <xs:element name="FrToAmt" type="FromToAmountRange"/>
- <xs:element name="EQAmt" type="ImpliedCurrencyAndAmount"/>
- <xs:element name="NEQAmt" type="ImpliedCurrencyAndAmount"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="ImpliedCurrencyAndAmount">
- <xs:restriction base="xs:decimal">
- <xs:minInclusive value="0"/>
- <xs:fractionDigits value="5"/>
- <xs:totalDigits value="18"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="InterestType1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="InterestType1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="InterestType1Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="INDY"/>
- <xs:enumeration value="OVRN"/>
- </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="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="Max15PlusSignedNumericText">
- <xs:restriction base="xs:string">
- <xs:pattern value="[+]{0,1}[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="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="Max500Text">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="500"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="Max5NumericText">
- <xs:restriction base="xs:string">
- <xs:pattern value="[0-9]{1,5}"/>
- </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:complexType name="MessageIdentification2">
- <xs:sequence>
- <xs:element name="MsgNmId" type="Max35Text" minOccurs="0"/>
- <xs:element name="MsgId" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="NameAndAddress10">
- <xs:sequence>
- <xs:element name="Nm" type="Max140Text"/>
- <xs:element name="Adr" type="PostalAddress6"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="NamePrefix1Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="DOCT"/>
- <xs:enumeration value="MIST"/>
- <xs:enumeration value="MISS"/>
- <xs:enumeration value="MADM"/>
- </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="NumberAndSumOfTransactions1">
- <xs:sequence>
- <xs:element name="NbOfNtries" type="Max15NumericText" minOccurs="0"/>
- <xs:element name="Sum" type="DecimalNumber" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="NumberAndSumOfTransactions2">
- <xs:sequence>
- <xs:element name="NbOfNtries" type="Max15NumericText" minOccurs="0"/>
- <xs:element name="Sum" type="DecimalNumber" minOccurs="0"/>
- <xs:element name="TtlNetNtryAmt" type="DecimalNumber" minOccurs="0"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="OrganisationIdentification4">
- <xs:sequence>
- <xs:element name="BICOrBEI" type="AnyBICIdentifier" minOccurs="0"/>
- <xs:element name="Othr" type="GenericOrganisationIdentification1" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="OrganisationIdentificationSchemeName1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalOrganisationIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="Pagination">
- <xs:sequence>
- <xs:element name="PgNb" type="Max5NumericText"/>
- <xs:element name="LastPgInd" type="YesNoIndicator"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="Party6Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="OrgId" type="OrganisationIdentification4"/>
- <xs:element name="PrvtId" type="PersonIdentification5"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="PartyIdentification32">
- <xs:sequence>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- <xs:element name="PstlAdr" type="PostalAddress6" minOccurs="0"/>
- <xs:element name="Id" type="Party6Choice" minOccurs="0"/>
- <xs:element name="CtryOfRes" type="CountryCode" minOccurs="0"/>
- <xs:element name="CtctDtls" type="ContactDetails2" minOccurs="0"/>
- </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="PersonIdentification5">
- <xs:sequence>
- <xs:element name="DtAndPlcOfBirth" type="DateAndPlaceOfBirth" minOccurs="0"/>
- <xs:element name="Othr" type="GenericPersonIdentification1" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="PersonIdentificationSchemeName1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalPersonIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </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="PostalAddress6">
- <xs:sequence>
- <xs:element name="AdrTp" type="AddressType2Code" minOccurs="0"/>
- <xs:element name="Dept" type="Max70Text" minOccurs="0"/>
- <xs:element name="SubDept" type="Max70Text" minOccurs="0"/>
- <xs:element name="StrtNm" type="Max70Text" minOccurs="0"/>
- <xs:element name="BldgNb" type="Max16Text" minOccurs="0"/>
- <xs:element name="PstCd" type="Max16Text" minOccurs="0"/>
- <xs:element name="TwnNm" type="Max35Text" minOccurs="0"/>
- <xs:element name="CtrySubDvsn" type="Max35Text" minOccurs="0"/>
- <xs:element name="Ctry" type="CountryCode" minOccurs="0"/>
- <xs:element name="AdrLine" type="Max70Text" minOccurs="0" maxOccurs="7"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryAgent2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Agt" type="BranchAndFinancialInstitutionIdentification4"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryBankTransactionCodeStructure1">
- <xs:sequence>
- <xs:element name="Cd" type="Max35Text"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryDate2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Dt" type="DateAndDateTimeChoice"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryParty2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Pty" type="PartyIdentification32"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryPrice2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Pric" type="ActiveOrHistoricCurrencyAndAmount"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryQuantity1">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Qty" type="Max35Text"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryReference1">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Ref" type="Max35Text"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="Purpose2Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalPurpose1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="Rate3">
- <xs:sequence>
- <xs:element name="Tp" type="RateType4Choice"/>
- <xs:element name="VldtyRg" type="CurrencyAndAmountRange2" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="RateType4Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Pctg" type="PercentageRate"/>
- <xs:element name="Othr" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReferredDocumentInformation3">
- <xs:sequence>
- <xs:element name="Tp" type="ReferredDocumentType2" minOccurs="0"/>
- <xs:element name="Nb" type="Max35Text" minOccurs="0"/>
- <xs:element name="RltdDt" type="ISODate" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReferredDocumentType1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="DocumentType5Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReferredDocumentType2">
- <xs:sequence>
- <xs:element name="CdOrPrtry" type="ReferredDocumentType1Choice"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="RemittanceAmount1">
- <xs:sequence>
- <xs:element name="DuePyblAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="DscntApldAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="CdtNoteAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="TaxAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="AdjstmntAmtAndRsn" type="DocumentAdjustment1" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="RmtdAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="RemittanceInformation5">
- <xs:sequence>
- <xs:element name="Ustrd" type="Max140Text" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="Strd" type="StructuredRemittanceInformation7" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="RemittanceLocation2">
- <xs:sequence>
- <xs:element name="RmtId" type="Max35Text" minOccurs="0"/>
- <xs:element name="RmtLctnMtd" type="RemittanceLocationMethod2Code" minOccurs="0"/>
- <xs:element name="RmtLctnElctrncAdr" type="Max2048Text" minOccurs="0"/>
- <xs:element name="RmtLctnPstlAdr" type="NameAndAddress10" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="RemittanceLocationMethod2Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="FAXI"/>
- <xs:enumeration value="EDIC"/>
- <xs:enumeration value="URID"/>
- <xs:enumeration value="EMAL"/>
- <xs:enumeration value="POST"/>
- <xs:enumeration value="SMSM"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="ReportEntry2">
- <xs:sequence>
- <xs:element name="NtryRef" type="Max35Text" minOccurs="0"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
- <xs:element name="RvslInd" type="TrueFalseIndicator" minOccurs="0"/>
- <xs:element name="Sts" type="EntryStatus2Code"/>
- <xs:element name="BookgDt" type="DateAndDateTimeChoice" minOccurs="0"/>
- <xs:element name="ValDt" type="DateAndDateTimeChoice" minOccurs="0"/>
- <xs:element name="AcctSvcrRef" type="Max35Text" minOccurs="0"/>
- <xs:element name="Avlbty" type="CashBalanceAvailability2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="BkTxCd" type="BankTransactionCodeStructure4"/>
- <xs:element name="ComssnWvrInd" type="YesNoIndicator" minOccurs="0"/>
- <xs:element name="AddtlInfInd" type="MessageIdentification2" minOccurs="0"/>
- <xs:element name="AmtDtls" type="AmountAndCurrencyExchange3" minOccurs="0"/>
- <xs:element name="Chrgs" type="ChargesInformation6" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="TechInptChanl" type="TechnicalInputChannel1Choice" minOccurs="0"/>
- <xs:element name="Intrst" type="TransactionInterest2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="NtryDtls" type="EntryDetails1" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="AddtlNtryInf" type="Max500Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReportingSource1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalReportingSource1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReturnReason5Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalReturnReason1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReturnReasonInformation10">
- <xs:sequence>
- <xs:element name="OrgnlBkTxCd" type="BankTransactionCodeStructure4" minOccurs="0"/>
- <xs:element name="Orgtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Rsn" type="ReturnReason5Choice" minOccurs="0"/>
- <xs:element name="AddtlInf" type="Max105Text" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="SecurityIdentification4Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="ISIN" type="ISINIdentifier"/>
- <xs:element name="Prtry" type="AlternateSecurityIdentification2"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="StructuredRemittanceInformation7">
- <xs:sequence>
- <xs:element name="RfrdDocInf" type="ReferredDocumentInformation3" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="RfrdDocAmt" type="RemittanceAmount1" minOccurs="0"/>
- <xs:element name="CdtrRefInf" type="CreditorReferenceInformation2" minOccurs="0"/>
- <xs:element name="Invcr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Invcee" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="AddtlRmtInf" type="Max140Text" minOccurs="0" maxOccurs="3"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxAmount1">
- <xs:sequence>
- <xs:element name="Rate" type="PercentageRate" minOccurs="0"/>
- <xs:element name="TaxblBaseAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="TtlAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="Dtls" type="TaxRecordDetails1" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxAuthorisation1">
- <xs:sequence>
- <xs:element name="Titl" type="Max35Text" minOccurs="0"/>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxCharges2">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text" minOccurs="0"/>
- <xs:element name="Rate" type="PercentageRate" minOccurs="0"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxInformation3">
- <xs:sequence>
- <xs:element name="Cdtr" type="TaxParty1" minOccurs="0"/>
- <xs:element name="Dbtr" type="TaxParty2" minOccurs="0"/>
- <xs:element name="AdmstnZn" type="Max35Text" minOccurs="0"/>
- <xs:element name="RefNb" type="Max140Text" minOccurs="0"/>
- <xs:element name="Mtd" type="Max35Text" minOccurs="0"/>
- <xs:element name="TtlTaxblBaseAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="TtlTaxAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="Dt" type="ISODate" minOccurs="0"/>
- <xs:element name="SeqNb" type="Number" minOccurs="0"/>
- <xs:element name="Rcrd" type="TaxRecord1" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxParty1">
- <xs:sequence>
- <xs:element name="TaxId" type="Max35Text" minOccurs="0"/>
- <xs:element name="RegnId" type="Max35Text" minOccurs="0"/>
- <xs:element name="TaxTp" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxParty2">
- <xs:sequence>
- <xs:element name="TaxId" type="Max35Text" minOccurs="0"/>
- <xs:element name="RegnId" type="Max35Text" minOccurs="0"/>
- <xs:element name="TaxTp" type="Max35Text" minOccurs="0"/>
- <xs:element name="Authstn" type="TaxAuthorisation1" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxPeriod1">
- <xs:sequence>
- <xs:element name="Yr" type="ISODate" minOccurs="0"/>
- <xs:element name="Tp" type="TaxRecordPeriod1Code" minOccurs="0"/>
- <xs:element name="FrToDt" type="DatePeriodDetails" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxRecord1">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text" minOccurs="0"/>
- <xs:element name="Ctgy" type="Max35Text" minOccurs="0"/>
- <xs:element name="CtgyDtls" type="Max35Text" minOccurs="0"/>
- <xs:element name="DbtrSts" type="Max35Text" minOccurs="0"/>
- <xs:element name="CertId" type="Max35Text" minOccurs="0"/>
- <xs:element name="FrmsCd" type="Max35Text" minOccurs="0"/>
- <xs:element name="Prd" type="TaxPeriod1" minOccurs="0"/>
- <xs:element name="TaxAmt" type="TaxAmount1" minOccurs="0"/>
- <xs:element name="AddtlInf" type="Max140Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxRecordDetails1">
- <xs:sequence>
- <xs:element name="Prd" type="TaxPeriod1" minOccurs="0"/>
- <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="TechnicalInputChannel1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalTechnicalInputChannel1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TotalTransactions2">
- <xs:sequence>
- <xs:element name="TtlNtries" type="NumberAndSumOfTransactions2" minOccurs="0"/>
- <xs:element name="TtlCdtNtries" type="NumberAndSumOfTransactions1" minOccurs="0"/>
- <xs:element name="TtlDbtNtries" type="NumberAndSumOfTransactions1" minOccurs="0"/>
- <xs:element name="TtlNtriesPerBkTxCd" type="TotalsPerBankTransactionCode2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TotalsPerBankTransactionCode2">
- <xs:sequence>
- <xs:element name="NbOfNtries" type="Max15NumericText" minOccurs="0"/>
- <xs:element name="Sum" type="DecimalNumber" minOccurs="0"/>
- <xs:element name="TtlNetNtryAmt" type="DecimalNumber" minOccurs="0"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- <xs:element name="FcstInd" type="TrueFalseIndicator" minOccurs="0"/>
- <xs:element name="BkTxCd" type="BankTransactionCodeStructure4"/>
- <xs:element name="Avlbty" type="CashBalanceAvailability2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionAgents2">
- <xs:sequence>
- <xs:element name="DbtrAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="IntrmyAgt2" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="IntrmyAgt3" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="RcvgAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="DlvrgAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="IssgAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="SttlmPlc" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryAgent2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionDates2">
- <xs:sequence>
- <xs:element name="AccptncDtTm" type="ISODateTime" minOccurs="0"/>
- <xs:element name="TradActvtyCtrctlSttlmDt" type="ISODate" minOccurs="0"/>
- <xs:element name="TradDt" type="ISODate" minOccurs="0"/>
- <xs:element name="IntrBkSttlmDt" type="ISODate" minOccurs="0"/>
- <xs:element name="StartDt" type="ISODate" minOccurs="0"/>
- <xs:element name="EndDt" type="ISODate" minOccurs="0"/>
- <xs:element name="TxDtTm" type="ISODateTime" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryDate2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionInterest2">
- <xs:sequence>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
- <xs:element name="Tp" type="InterestType1Choice" minOccurs="0"/>
- <xs:element name="Rate" type="Rate3" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="FrToDt" type="DateTimePeriodDetails" minOccurs="0"/>
- <xs:element name="Rsn" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionParty2">
- <xs:sequence>
- <xs:element name="InitgPty" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Dbtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="DbtrAcct" type="CashAccount16" minOccurs="0"/>
- <xs:element name="UltmtDbtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Cdtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="CdtrAcct" type="CashAccount16" minOccurs="0"/>
- <xs:element name="UltmtCdtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="TradgPty" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryParty2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionPrice2Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="DealPric" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="Prtry" type="ProprietaryPrice2" maxOccurs="unbounded"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionQuantities1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Qty" type="FinancialInstrumentQuantityChoice"/>
- <xs:element name="Prtry" type="ProprietaryQuantity1"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionReferences2">
- <xs:sequence>
- <xs:element name="MsgId" type="Max35Text" minOccurs="0"/>
- <xs:element name="AcctSvcrRef" type="Max35Text" minOccurs="0"/>
- <xs:element name="PmtInfId" type="Max35Text" minOccurs="0"/>
- <xs:element name="InstrId" type="Max35Text" minOccurs="0"/>
- <xs:element name="EndToEndId" type="Max35Text" minOccurs="0"/>
- <xs:element name="TxId" type="Max35Text" minOccurs="0"/>
- <xs:element name="MndtId" type="Max35Text" minOccurs="0"/>
- <xs:element name="ChqNb" type="Max35Text" minOccurs="0"/>
- <xs:element name="ClrSysRef" type="Max35Text" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryReference1" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="TrueFalseIndicator">
- <xs:restriction base="xs:boolean"/>
- </xs:simpleType>
- <xs:simpleType name="YesNoIndicator">
- <xs:restriction base="xs:boolean"/>
- </xs:simpleType>
-</xs:schema>
diff --git a/ebics/src/main/resources/xsd/camt.053.001.02.xsd b/ebics/src/main/resources/xsd/camt.053.001.02.xsd
deleted file mode 100644
index 0dc3b77e..00000000
--- a/ebics/src/main/resources/xsd/camt.053.001.02.xsd
+++ /dev/null
@@ -1,1299 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Mit XMLSpy v2008 rel. 2 (http://www.altova.com) von Wenzel (SIZ Bonn) bearbeitet -->
-<!--Generated by SWIFTStandards Workstation (build:R6.1.0.2) on 2009 Jan 08 17:30:53-->
-<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:iso:std:iso:20022:tech:xsd:camt.053.001.02" elementFormDefault="qualified">
- <xs:element name="Document" type="Document"/>
- <xs:complexType name="AccountIdentification4Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="IBAN" type="IBAN2007Identifier"/>
- <xs:element name="Othr" type="GenericAccountIdentification1"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AccountInterest2">
- <xs:sequence>
- <xs:element name="Tp" type="InterestType1Choice" minOccurs="0"/>
- <xs:element name="Rate" type="Rate3" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="FrToDt" type="DateTimePeriodDetails" minOccurs="0"/>
- <xs:element name="Rsn" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AccountSchemeName1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalAccountIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AccountStatement2">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="ElctrncSeqNb" type="Number" minOccurs="0"/>
- <xs:element name="LglSeqNb" type="Number" minOccurs="0"/>
- <xs:element name="CreDtTm" type="ISODateTime"/>
- <xs:element name="FrToDt" type="DateTimePeriodDetails" minOccurs="0"/>
- <xs:element name="CpyDplctInd" type="CopyDuplicate1Code" minOccurs="0"/>
- <xs:element name="RptgSrc" type="ReportingSource1Choice" minOccurs="0"/>
- <xs:element name="Acct" type="CashAccount20"/>
- <xs:element name="RltdAcct" type="CashAccount16" minOccurs="0"/>
- <xs:element name="Intrst" type="AccountInterest2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="Bal" type="CashBalance3" maxOccurs="unbounded"/>
- <xs:element name="TxsSummry" type="TotalTransactions2" minOccurs="0"/>
- <xs:element name="Ntry" type="ReportEntry2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="AddtlStmtInf" type="Max500Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="ActiveOrHistoricCurrencyAndAmount_SimpleType">
- <xs:restriction base="xs:decimal">
- <xs:minInclusive value="0"/>
- <xs:fractionDigits value="5"/>
- <xs:totalDigits value="18"/>
- </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,13}"/>
- </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="AlternateSecurityIdentification2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Id" type="Max35Text"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AmountAndCurrencyExchange3">
- <xs:sequence>
- <xs:element name="InstdAmt" type="AmountAndCurrencyExchangeDetails3" minOccurs="0"/>
- <xs:element name="TxAmt" type="AmountAndCurrencyExchangeDetails3" minOccurs="0"/>
- <xs:element name="CntrValAmt" type="AmountAndCurrencyExchangeDetails3" minOccurs="0"/>
- <xs:element name="AnncdPstngAmt" type="AmountAndCurrencyExchangeDetails3" minOccurs="0"/>
- <xs:element name="PrtryAmt" type="AmountAndCurrencyExchangeDetails4" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AmountAndCurrencyExchangeDetails3">
- <xs:sequence>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CcyXchg" type="CurrencyExchange5" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AmountAndCurrencyExchangeDetails4">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CcyXchg" type="CurrencyExchange5" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AmountRangeBoundary1">
- <xs:sequence>
- <xs:element name="BdryAmt" type="ImpliedCurrencyAndAmount"/>
- <xs:element name="Incl" type="YesNoIndicator"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="AnyBICIdentifier">
- <xs:restriction base="xs:string">
- <xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="BICIdentifier">
- <xs:restriction base="xs:string">
- <xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="BalanceSubType1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalBalanceSubType1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BalanceType12">
- <xs:sequence>
- <xs:element name="CdOrPrtry" type="BalanceType5Choice"/>
- <xs:element name="SubTp" type="BalanceSubType1Choice" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="BalanceType12Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="XPCD"/>
- <xs:enumeration value="OPAV"/>
- <xs:enumeration value="ITAV"/>
- <xs:enumeration value="CLAV"/>
- <xs:enumeration value="FWAV"/>
- <xs:enumeration value="CLBD"/>
- <xs:enumeration value="ITBD"/>
- <xs:enumeration value="OPBD"/>
- <xs:enumeration value="PRCD"/>
- <xs:enumeration value="INFO"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="BalanceType5Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="BalanceType12Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BankToCustomerStatementV02">
- <xs:sequence>
- <xs:element name="GrpHdr" type="GroupHeader42"/>
- <xs:element name="Stmt" type="AccountStatement2" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BankTransactionCodeStructure4">
- <xs:sequence>
- <xs:element name="Domn" type="BankTransactionCodeStructure5" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryBankTransactionCodeStructure1" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BankTransactionCodeStructure5">
- <xs:sequence>
- <xs:element name="Cd" type="ExternalBankTransactionDomain1Code"/>
- <xs:element name="Fmly" type="BankTransactionCodeStructure6"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BankTransactionCodeStructure6">
- <xs:sequence>
- <xs:element name="Cd" type="ExternalBankTransactionFamily1Code"/>
- <xs:element name="SubFmlyCd" type="ExternalBankTransactionSubFamily1Code"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="BaseOneRate">
- <xs:restriction base="xs:decimal">
- <xs:fractionDigits value="10"/>
- <xs:totalDigits value="11"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="BatchInformation2">
- <xs:sequence>
- <xs:element name="MsgId" type="Max35Text" minOccurs="0"/>
- <xs:element name="PmtInfId" type="Max35Text" minOccurs="0"/>
- <xs:element name="NbOfTxs" type="Max15NumericText" minOccurs="0"/>
- <xs:element name="TtlAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BranchAndFinancialInstitutionIdentification4">
- <xs:sequence>
- <xs:element name="FinInstnId" type="FinancialInstitutionIdentification7"/>
- <xs:element name="BrnchId" type="BranchData2" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BranchData2">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text" minOccurs="0"/>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- <xs:element name="PstlAdr" type="PostalAddress6" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashAccount16">
- <xs:sequence>
- <xs:element name="Id" type="AccountIdentification4Choice"/>
- <xs:element name="Tp" type="CashAccountType2" minOccurs="0"/>
- <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
- <xs:element name="Nm" type="Max70Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashAccount20">
- <xs:sequence>
- <xs:element name="Id" type="AccountIdentification4Choice"/>
- <xs:element name="Tp" type="CashAccountType2" minOccurs="0"/>
- <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
- <xs:element name="Nm" type="Max70Text" minOccurs="0"/>
- <xs:element name="Ownr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Svcr" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashAccountType2">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="CashAccountType4Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="CashAccountType4Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="CASH"/>
- <xs:enumeration value="CHAR"/>
- <xs:enumeration value="COMM"/>
- <xs:enumeration value="TAXE"/>
- <xs:enumeration value="CISH"/>
- <xs:enumeration value="TRAS"/>
- <xs:enumeration value="SACC"/>
- <xs:enumeration value="CACC"/>
- <xs:enumeration value="SVGS"/>
- <xs:enumeration value="ONDP"/>
- <xs:enumeration value="MGLD"/>
- <xs:enumeration value="NREX"/>
- <xs:enumeration value="MOMA"/>
- <xs:enumeration value="LOAN"/>
- <xs:enumeration value="SLRY"/>
- <xs:enumeration value="ODFT"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="CashBalance3">
- <xs:sequence>
- <xs:element name="Tp" type="BalanceType12"/>
- <xs:element name="CdtLine" type="CreditLine2" minOccurs="0"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
- <xs:element name="Dt" type="DateAndDateTimeChoice"/>
- <xs:element name="Avlbty" type="CashBalanceAvailability2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashBalanceAvailability2">
- <xs:sequence>
- <xs:element name="Dt" type="CashBalanceAvailabilityDate1"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashBalanceAvailabilityDate1">
- <xs:sequence>
- <xs:choice>
- <xs:element name="NbOfDays" type="Max15PlusSignedNumericText"/>
- <xs:element name="ActlDt" type="ISODate"/>
- </xs:choice>
- </xs:sequence>
- </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:simpleType name="ChargeType1Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="BRKF"/>
- <xs:enumeration value="COMM"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="ChargeType2Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ChargeType1Code"/>
- <xs:element name="Prtry" type="GenericIdentification3"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ChargesInformation6">
- <xs:sequence>
- <xs:element name="TtlChrgsAndTaxAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- <xs:element name="Tp" type="ChargeType2Choice" minOccurs="0"/>
- <xs:element name="Rate" type="PercentageRate" minOccurs="0"/>
- <xs:element name="Br" type="ChargeBearerType1Code" minOccurs="0"/>
- <xs:element name="Pty" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="Tax" type="TaxCharges2" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ClearingSystemIdentification2Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalClearingSystemIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ClearingSystemMemberIdentification2">
- <xs:sequence>
- <xs:element name="ClrSysId" type="ClearingSystemIdentification2Choice" minOccurs="0"/>
- <xs:element name="MmbId" type="Max35Text"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ContactDetails2">
- <xs:sequence>
- <xs:element name="NmPrfx" type="NamePrefix1Code" minOccurs="0"/>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- <xs:element name="PhneNb" type="PhoneNumber" minOccurs="0"/>
- <xs:element name="MobNb" type="PhoneNumber" minOccurs="0"/>
- <xs:element name="FaxNb" type="PhoneNumber" minOccurs="0"/>
- <xs:element name="EmailAdr" type="Max2048Text" minOccurs="0"/>
- <xs:element name="Othr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="CopyDuplicate1Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="CODU"/>
- <xs:enumeration value="COPY"/>
- <xs:enumeration value="DUPL"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="CorporateAction1">
- <xs:sequence>
- <xs:element name="Cd" type="Max35Text" minOccurs="0"/>
- <xs:element name="Nb" type="Max35Text" minOccurs="0"/>
- <xs:element name="Prtry" type="Max35Text" minOccurs="0"/>
- </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="CreditLine2">
- <xs:sequence>
- <xs:element name="Incl" type="TrueFalseIndicator"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CreditorReferenceInformation2">
- <xs:sequence>
- <xs:element name="Tp" type="CreditorReferenceType2" minOccurs="0"/>
- <xs:element name="Ref" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CreditorReferenceType1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="DocumentType3Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CreditorReferenceType2">
- <xs:sequence>
- <xs:element name="CdOrPrtry" type="CreditorReferenceType1Choice"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CurrencyAndAmountRange2">
- <xs:sequence>
- <xs:element name="Amt" type="ImpliedCurrencyAmountRangeChoice"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CurrencyExchange5">
- <xs:sequence>
- <xs:element name="SrcCcy" type="ActiveOrHistoricCurrencyCode"/>
- <xs:element name="TrgtCcy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
- <xs:element name="UnitCcy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
- <xs:element name="XchgRate" type="BaseOneRate"/>
- <xs:element name="CtrctId" type="Max35Text" minOccurs="0"/>
- <xs:element name="QtnDt" type="ISODateTime" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DateAndDateTimeChoice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Dt" type="ISODate"/>
- <xs:element name="DtTm" type="ISODateTime"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DateAndPlaceOfBirth">
- <xs:sequence>
- <xs:element name="BirthDt" type="ISODate"/>
- <xs:element name="PrvcOfBirth" type="Max35Text" minOccurs="0"/>
- <xs:element name="CityOfBirth" type="Max35Text"/>
- <xs:element name="CtryOfBirth" type="CountryCode"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DatePeriodDetails">
- <xs:sequence>
- <xs:element name="FrDt" type="ISODate"/>
- <xs:element name="ToDt" type="ISODate"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DateTimePeriodDetails">
- <xs:sequence>
- <xs:element name="FrDtTm" type="ISODateTime"/>
- <xs:element name="ToDtTm" type="ISODateTime"/>
- </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="Document">
- <xs:sequence>
- <xs:element name="BkToCstmrStmt" type="BankToCustomerStatementV02"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DocumentAdjustment1">
- <xs:sequence>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- <xs:element name="Rsn" type="Max4Text" minOccurs="0"/>
- <xs:element name="AddtlInf" type="Max140Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs: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="DocumentType5Code">
- <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:restriction>
- </xs:simpleType>
- <xs:complexType name="EntryDetails1">
- <xs:sequence>
- <xs:element name="Btch" type="BatchInformation2" minOccurs="0"/>
- <xs:element name="TxDtls" type="EntryTransaction2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="EntryStatus2Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="BOOK"/>
- <xs:enumeration value="PDNG"/>
- <xs:enumeration value="INFO"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="EntryTransaction2">
- <xs:sequence>
- <xs:element name="Refs" type="TransactionReferences2" minOccurs="0"/>
- <xs:element name="AmtDtls" type="AmountAndCurrencyExchange3" minOccurs="0"/>
- <xs:element name="Avlbty" type="CashBalanceAvailability2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="BkTxCd" type="BankTransactionCodeStructure4" minOccurs="0"/>
- <xs:element name="Chrgs" type="ChargesInformation6" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="Intrst" type="TransactionInterest2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="RltdPties" type="TransactionParty2" minOccurs="0"/>
- <xs:element name="RltdAgts" type="TransactionAgents2" minOccurs="0"/>
- <xs:element name="Purp" type="Purpose2Choice" minOccurs="0"/>
- <xs:element name="RltdRmtInf" type="RemittanceLocation2" minOccurs="0" maxOccurs="10"/>
- <xs:element name="RmtInf" type="RemittanceInformation5" minOccurs="0"/>
- <xs:element name="RltdDts" type="TransactionDates2" minOccurs="0"/>
- <xs:element name="RltdPric" type="TransactionPrice2Choice" minOccurs="0"/>
- <xs:element name="RltdQties" type="TransactionQuantities1Choice" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="FinInstrmId" type="SecurityIdentification4Choice" minOccurs="0"/>
- <xs:element name="Tax" type="TaxInformation3" minOccurs="0"/>
- <xs:element name="RtrInf" type="ReturnReasonInformation10" minOccurs="0"/>
- <xs:element name="CorpActn" type="CorporateAction1" minOccurs="0"/>
- <xs:element name="SfkpgAcct" type="CashAccount16" minOccurs="0"/>
- <xs:element name="AddtlTxInf" type="Max500Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="ExternalAccountIdentification1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalBalanceSubType1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalBankTransactionDomain1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalBankTransactionFamily1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalBankTransactionSubFamily1Code">
- <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="ExternalFinancialInstitutionIdentification1Code">
- <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="ExternalPersonIdentification1Code">
- <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="ExternalReportingSource1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalReturnReason1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalTechnicalInputChannel1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="FinancialIdentificationSchemeName1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalFinancialInstitutionIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="FinancialInstitutionIdentification7">
- <xs:sequence>
- <xs:element name="BIC" type="BICIdentifier" minOccurs="0"/>
- <xs:element name="ClrSysMmbId" type="ClearingSystemMemberIdentification2" minOccurs="0"/>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- <xs:element name="PstlAdr" type="PostalAddress6" minOccurs="0"/>
- <xs:element name="Othr" type="GenericFinancialIdentification1" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="FinancialInstrumentQuantityChoice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Unit" type="DecimalNumber"/>
- <xs:element name="FaceAmt" type="ImpliedCurrencyAndAmount"/>
- <xs:element name="AmtsdVal" type="ImpliedCurrencyAndAmount"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="FromToAmountRange">
- <xs:sequence>
- <xs:element name="FrAmt" type="AmountRangeBoundary1"/>
- <xs:element name="ToAmt" type="AmountRangeBoundary1"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericAccountIdentification1">
- <xs:sequence>
- <xs:element name="Id" type="Max34Text"/>
- <xs:element name="SchmeNm" type="AccountSchemeName1Choice" minOccurs="0"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericFinancialIdentification1">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="SchmeNm" type="FinancialIdentificationSchemeName1Choice" minOccurs="0"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericIdentification3">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericOrganisationIdentification1">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="SchmeNm" type="OrganisationIdentificationSchemeName1Choice" minOccurs="0"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericPersonIdentification1">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="SchmeNm" type="PersonIdentificationSchemeName1Choice" minOccurs="0"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GroupHeader42">
- <xs:sequence>
- <xs:element name="MsgId" type="Max35Text"/>
- <xs:element name="CreDtTm" type="ISODateTime"/>
- <xs:element name="MsgRcpt" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="MsgPgntn" type="Pagination" minOccurs="0"/>
- <xs:element name="AddtlInf" type="Max500Text" minOccurs="0"/>
- </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="ISINIdentifier">
- <xs:restriction base="xs:string">
- <xs:pattern value="[A-Z0-9]{12,12}"/>
- </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:complexType name="ImpliedCurrencyAmountRangeChoice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="FrAmt" type="AmountRangeBoundary1"/>
- <xs:element name="ToAmt" type="AmountRangeBoundary1"/>
- <xs:element name="FrToAmt" type="FromToAmountRange"/>
- <xs:element name="EQAmt" type="ImpliedCurrencyAndAmount"/>
- <xs:element name="NEQAmt" type="ImpliedCurrencyAndAmount"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="ImpliedCurrencyAndAmount">
- <xs:restriction base="xs:decimal">
- <xs:minInclusive value="0"/>
- <xs:fractionDigits value="5"/>
- <xs:totalDigits value="18"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="InterestType1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="InterestType1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="InterestType1Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="INDY"/>
- <xs:enumeration value="OVRN"/>
- </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="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="Max15PlusSignedNumericText">
- <xs:restriction base="xs:string">
- <xs:pattern value="[+]{0,1}[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="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="Max500Text">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="500"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="Max5NumericText">
- <xs:restriction base="xs:string">
- <xs:pattern value="[0-9]{1,5}"/>
- </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:complexType name="MessageIdentification2">
- <xs:sequence>
- <xs:element name="MsgNmId" type="Max35Text" minOccurs="0"/>
- <xs:element name="MsgId" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="NameAndAddress10">
- <xs:sequence>
- <xs:element name="Nm" type="Max140Text"/>
- <xs:element name="Adr" type="PostalAddress6"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="NamePrefix1Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="DOCT"/>
- <xs:enumeration value="MIST"/>
- <xs:enumeration value="MISS"/>
- <xs:enumeration value="MADM"/>
- </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="NumberAndSumOfTransactions1">
- <xs:sequence>
- <xs:element name="NbOfNtries" type="Max15NumericText" minOccurs="0"/>
- <xs:element name="Sum" type="DecimalNumber" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="NumberAndSumOfTransactions2">
- <xs:sequence>
- <xs:element name="NbOfNtries" type="Max15NumericText" minOccurs="0"/>
- <xs:element name="Sum" type="DecimalNumber" minOccurs="0"/>
- <xs:element name="TtlNetNtryAmt" type="DecimalNumber" minOccurs="0"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="OrganisationIdentification4">
- <xs:sequence>
- <xs:element name="BICOrBEI" type="AnyBICIdentifier" minOccurs="0"/>
- <xs:element name="Othr" type="GenericOrganisationIdentification1" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="OrganisationIdentificationSchemeName1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalOrganisationIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="Pagination">
- <xs:sequence>
- <xs:element name="PgNb" type="Max5NumericText"/>
- <xs:element name="LastPgInd" type="YesNoIndicator"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="Party6Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="OrgId" type="OrganisationIdentification4"/>
- <xs:element name="PrvtId" type="PersonIdentification5"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="PartyIdentification32">
- <xs:sequence>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- <xs:element name="PstlAdr" type="PostalAddress6" minOccurs="0"/>
- <xs:element name="Id" type="Party6Choice" minOccurs="0"/>
- <xs:element name="CtryOfRes" type="CountryCode" minOccurs="0"/>
- <xs:element name="CtctDtls" type="ContactDetails2" minOccurs="0"/>
- </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="PersonIdentification5">
- <xs:sequence>
- <xs:element name="DtAndPlcOfBirth" type="DateAndPlaceOfBirth" minOccurs="0"/>
- <xs:element name="Othr" type="GenericPersonIdentification1" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="PersonIdentificationSchemeName1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalPersonIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </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="PostalAddress6">
- <xs:sequence>
- <xs:element name="AdrTp" type="AddressType2Code" minOccurs="0"/>
- <xs:element name="Dept" type="Max70Text" minOccurs="0"/>
- <xs:element name="SubDept" type="Max70Text" minOccurs="0"/>
- <xs:element name="StrtNm" type="Max70Text" minOccurs="0"/>
- <xs:element name="BldgNb" type="Max16Text" minOccurs="0"/>
- <xs:element name="PstCd" type="Max16Text" minOccurs="0"/>
- <xs:element name="TwnNm" type="Max35Text" minOccurs="0"/>
- <xs:element name="CtrySubDvsn" type="Max35Text" minOccurs="0"/>
- <xs:element name="Ctry" type="CountryCode" minOccurs="0"/>
- <xs:element name="AdrLine" type="Max70Text" minOccurs="0" maxOccurs="7"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryAgent2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Agt" type="BranchAndFinancialInstitutionIdentification4"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryBankTransactionCodeStructure1">
- <xs:sequence>
- <xs:element name="Cd" type="Max35Text"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryDate2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Dt" type="DateAndDateTimeChoice"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryParty2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Pty" type="PartyIdentification32"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryPrice2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Pric" type="ActiveOrHistoricCurrencyAndAmount"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryQuantity1">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Qty" type="Max35Text"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryReference1">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Ref" type="Max35Text"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="Purpose2Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalPurpose1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="Rate3">
- <xs:sequence>
- <xs:element name="Tp" type="RateType4Choice"/>
- <xs:element name="VldtyRg" type="CurrencyAndAmountRange2" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="RateType4Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Pctg" type="PercentageRate"/>
- <xs:element name="Othr" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReferredDocumentInformation3">
- <xs:sequence>
- <xs:element name="Tp" type="ReferredDocumentType2" minOccurs="0"/>
- <xs:element name="Nb" type="Max35Text" minOccurs="0"/>
- <xs:element name="RltdDt" type="ISODate" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReferredDocumentType1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="DocumentType5Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReferredDocumentType2">
- <xs:sequence>
- <xs:element name="CdOrPrtry" type="ReferredDocumentType1Choice"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="RemittanceAmount1">
- <xs:sequence>
- <xs:element name="DuePyblAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="DscntApldAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="CdtNoteAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="TaxAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="AdjstmntAmtAndRsn" type="DocumentAdjustment1" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="RmtdAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="RemittanceInformation5">
- <xs:sequence>
- <xs:element name="Ustrd" type="Max140Text" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="Strd" type="StructuredRemittanceInformation7" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="RemittanceLocation2">
- <xs:sequence>
- <xs:element name="RmtId" type="Max35Text" minOccurs="0"/>
- <xs:element name="RmtLctnMtd" type="RemittanceLocationMethod2Code" minOccurs="0"/>
- <xs:element name="RmtLctnElctrncAdr" type="Max2048Text" minOccurs="0"/>
- <xs:element name="RmtLctnPstlAdr" type="NameAndAddress10" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="RemittanceLocationMethod2Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="FAXI"/>
- <xs:enumeration value="EDIC"/>
- <xs:enumeration value="URID"/>
- <xs:enumeration value="EMAL"/>
- <xs:enumeration value="POST"/>
- <xs:enumeration value="SMSM"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="ReportEntry2">
- <xs:sequence>
- <xs:element name="NtryRef" type="Max35Text" minOccurs="0"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
- <xs:element name="RvslInd" type="TrueFalseIndicator" minOccurs="0"/>
- <xs:element name="Sts" type="EntryStatus2Code"/>
- <xs:element name="BookgDt" type="DateAndDateTimeChoice" minOccurs="0"/>
- <xs:element name="ValDt" type="DateAndDateTimeChoice" minOccurs="0"/>
- <xs:element name="AcctSvcrRef" type="Max35Text" minOccurs="0"/>
- <xs:element name="Avlbty" type="CashBalanceAvailability2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="BkTxCd" type="BankTransactionCodeStructure4"/>
- <xs:element name="ComssnWvrInd" type="YesNoIndicator" minOccurs="0"/>
- <xs:element name="AddtlInfInd" type="MessageIdentification2" minOccurs="0"/>
- <xs:element name="AmtDtls" type="AmountAndCurrencyExchange3" minOccurs="0"/>
- <xs:element name="Chrgs" type="ChargesInformation6" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="TechInptChanl" type="TechnicalInputChannel1Choice" minOccurs="0"/>
- <xs:element name="Intrst" type="TransactionInterest2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="NtryDtls" type="EntryDetails1" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="AddtlNtryInf" type="Max500Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReportingSource1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalReportingSource1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReturnReason5Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalReturnReason1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReturnReasonInformation10">
- <xs:sequence>
- <xs:element name="OrgnlBkTxCd" type="BankTransactionCodeStructure4" minOccurs="0"/>
- <xs:element name="Orgtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Rsn" type="ReturnReason5Choice" minOccurs="0"/>
- <xs:element name="AddtlInf" type="Max105Text" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="SecurityIdentification4Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="ISIN" type="ISINIdentifier"/>
- <xs:element name="Prtry" type="AlternateSecurityIdentification2"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="StructuredRemittanceInformation7">
- <xs:sequence>
- <xs:element name="RfrdDocInf" type="ReferredDocumentInformation3" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="RfrdDocAmt" type="RemittanceAmount1" minOccurs="0"/>
- <xs:element name="CdtrRefInf" type="CreditorReferenceInformation2" minOccurs="0"/>
- <xs:element name="Invcr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Invcee" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="AddtlRmtInf" type="Max140Text" minOccurs="0" maxOccurs="3"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxAmount1">
- <xs:sequence>
- <xs:element name="Rate" type="PercentageRate" minOccurs="0"/>
- <xs:element name="TaxblBaseAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="TtlAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="Dtls" type="TaxRecordDetails1" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxAuthorisation1">
- <xs:sequence>
- <xs:element name="Titl" type="Max35Text" minOccurs="0"/>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxCharges2">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text" minOccurs="0"/>
- <xs:element name="Rate" type="PercentageRate" minOccurs="0"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxInformation3">
- <xs:sequence>
- <xs:element name="Cdtr" type="TaxParty1" minOccurs="0"/>
- <xs:element name="Dbtr" type="TaxParty2" minOccurs="0"/>
- <xs:element name="AdmstnZn" type="Max35Text" minOccurs="0"/>
- <xs:element name="RefNb" type="Max140Text" minOccurs="0"/>
- <xs:element name="Mtd" type="Max35Text" minOccurs="0"/>
- <xs:element name="TtlTaxblBaseAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="TtlTaxAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="Dt" type="ISODate" minOccurs="0"/>
- <xs:element name="SeqNb" type="Number" minOccurs="0"/>
- <xs:element name="Rcrd" type="TaxRecord1" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxParty1">
- <xs:sequence>
- <xs:element name="TaxId" type="Max35Text" minOccurs="0"/>
- <xs:element name="RegnId" type="Max35Text" minOccurs="0"/>
- <xs:element name="TaxTp" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxParty2">
- <xs:sequence>
- <xs:element name="TaxId" type="Max35Text" minOccurs="0"/>
- <xs:element name="RegnId" type="Max35Text" minOccurs="0"/>
- <xs:element name="TaxTp" type="Max35Text" minOccurs="0"/>
- <xs:element name="Authstn" type="TaxAuthorisation1" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxPeriod1">
- <xs:sequence>
- <xs:element name="Yr" type="ISODate" minOccurs="0"/>
- <xs:element name="Tp" type="TaxRecordPeriod1Code" minOccurs="0"/>
- <xs:element name="FrToDt" type="DatePeriodDetails" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxRecord1">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text" minOccurs="0"/>
- <xs:element name="Ctgy" type="Max35Text" minOccurs="0"/>
- <xs:element name="CtgyDtls" type="Max35Text" minOccurs="0"/>
- <xs:element name="DbtrSts" type="Max35Text" minOccurs="0"/>
- <xs:element name="CertId" type="Max35Text" minOccurs="0"/>
- <xs:element name="FrmsCd" type="Max35Text" minOccurs="0"/>
- <xs:element name="Prd" type="TaxPeriod1" minOccurs="0"/>
- <xs:element name="TaxAmt" type="TaxAmount1" minOccurs="0"/>
- <xs:element name="AddtlInf" type="Max140Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxRecordDetails1">
- <xs:sequence>
- <xs:element name="Prd" type="TaxPeriod1" minOccurs="0"/>
- <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="TechnicalInputChannel1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalTechnicalInputChannel1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TotalTransactions2">
- <xs:sequence>
- <xs:element name="TtlNtries" type="NumberAndSumOfTransactions2" minOccurs="0"/>
- <xs:element name="TtlCdtNtries" type="NumberAndSumOfTransactions1" minOccurs="0"/>
- <xs:element name="TtlDbtNtries" type="NumberAndSumOfTransactions1" minOccurs="0"/>
- <xs:element name="TtlNtriesPerBkTxCd" type="TotalsPerBankTransactionCode2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TotalsPerBankTransactionCode2">
- <xs:sequence>
- <xs:element name="NbOfNtries" type="Max15NumericText" minOccurs="0"/>
- <xs:element name="Sum" type="DecimalNumber" minOccurs="0"/>
- <xs:element name="TtlNetNtryAmt" type="DecimalNumber" minOccurs="0"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- <xs:element name="FcstInd" type="TrueFalseIndicator" minOccurs="0"/>
- <xs:element name="BkTxCd" type="BankTransactionCodeStructure4"/>
- <xs:element name="Avlbty" type="CashBalanceAvailability2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionAgents2">
- <xs:sequence>
- <xs:element name="DbtrAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="IntrmyAgt2" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="IntrmyAgt3" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="RcvgAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="DlvrgAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="IssgAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="SttlmPlc" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryAgent2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionDates2">
- <xs:sequence>
- <xs:element name="AccptncDtTm" type="ISODateTime" minOccurs="0"/>
- <xs:element name="TradActvtyCtrctlSttlmDt" type="ISODate" minOccurs="0"/>
- <xs:element name="TradDt" type="ISODate" minOccurs="0"/>
- <xs:element name="IntrBkSttlmDt" type="ISODate" minOccurs="0"/>
- <xs:element name="StartDt" type="ISODate" minOccurs="0"/>
- <xs:element name="EndDt" type="ISODate" minOccurs="0"/>
- <xs:element name="TxDtTm" type="ISODateTime" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryDate2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionInterest2">
- <xs:sequence>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
- <xs:element name="Tp" type="InterestType1Choice" minOccurs="0"/>
- <xs:element name="Rate" type="Rate3" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="FrToDt" type="DateTimePeriodDetails" minOccurs="0"/>
- <xs:element name="Rsn" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionParty2">
- <xs:sequence>
- <xs:element name="InitgPty" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Dbtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="DbtrAcct" type="CashAccount16" minOccurs="0"/>
- <xs:element name="UltmtDbtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Cdtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="CdtrAcct" type="CashAccount16" minOccurs="0"/>
- <xs:element name="UltmtCdtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="TradgPty" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryParty2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionPrice2Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="DealPric" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="Prtry" type="ProprietaryPrice2" maxOccurs="unbounded"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionQuantities1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Qty" type="FinancialInstrumentQuantityChoice"/>
- <xs:element name="Prtry" type="ProprietaryQuantity1"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionReferences2">
- <xs:sequence>
- <xs:element name="MsgId" type="Max35Text" minOccurs="0"/>
- <xs:element name="AcctSvcrRef" type="Max35Text" minOccurs="0"/>
- <xs:element name="PmtInfId" type="Max35Text" minOccurs="0"/>
- <xs:element name="InstrId" type="Max35Text" minOccurs="0"/>
- <xs:element name="EndToEndId" type="Max35Text" minOccurs="0"/>
- <xs:element name="TxId" type="Max35Text" minOccurs="0"/>
- <xs:element name="MndtId" type="Max35Text" minOccurs="0"/>
- <xs:element name="ChqNb" type="Max35Text" minOccurs="0"/>
- <xs:element name="ClrSysRef" type="Max35Text" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryReference1" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="TrueFalseIndicator">
- <xs:restriction base="xs:boolean"/>
- </xs:simpleType>
- <xs:simpleType name="YesNoIndicator">
- <xs:restriction base="xs:boolean"/>
- </xs:simpleType>
-</xs:schema>
diff --git a/ebics/src/main/resources/xsd/camt.054.001.02.xsd b/ebics/src/main/resources/xsd/camt.054.001.02.xsd
deleted file mode 100644
index b284c6dd..00000000
--- a/ebics/src/main/resources/xsd/camt.054.001.02.xsd
+++ /dev/null
@@ -1,1240 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Mit XMLSpy v2008 rel. 2 (http://www.altova.com) von Wenzel (SIZ Bonn) bearbeitet -->
-<!--Generated by SWIFTStandards Workstation (build:R6.1.0.2) on 2009 Jan 08 17:30:53-->
-<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:iso:std:iso:20022:tech:xsd:camt.054.001.02" elementFormDefault="qualified">
- <xs:element name="Document" type="Document"/>
- <xs:complexType name="AccountIdentification4Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="IBAN" type="IBAN2007Identifier"/>
- <xs:element name="Othr" type="GenericAccountIdentification1"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AccountInterest2">
- <xs:sequence>
- <xs:element name="Tp" type="InterestType1Choice" minOccurs="0"/>
- <xs:element name="Rate" type="Rate3" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="FrToDt" type="DateTimePeriodDetails" minOccurs="0"/>
- <xs:element name="Rsn" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AccountNotification2">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="ElctrncSeqNb" type="Number" minOccurs="0"/>
- <xs:element name="LglSeqNb" type="Number" minOccurs="0"/>
- <xs:element name="CreDtTm" type="ISODateTime"/>
- <xs:element name="FrToDt" type="DateTimePeriodDetails" minOccurs="0"/>
- <xs:element name="CpyDplctInd" type="CopyDuplicate1Code" minOccurs="0"/>
- <xs:element name="RptgSrc" type="ReportingSource1Choice" minOccurs="0"/>
- <xs:element name="Acct" type="CashAccount20"/>
- <xs:element name="RltdAcct" type="CashAccount16" minOccurs="0"/>
- <xs:element name="Intrst" type="AccountInterest2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="TxsSummry" type="TotalTransactions2" minOccurs="0"/>
- <xs:element name="Ntry" type="ReportEntry2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="AddtlNtfctnInf" type="Max500Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AccountSchemeName1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalAccountIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="ActiveOrHistoricCurrencyAndAmount_SimpleType">
- <xs:restriction base="xs:decimal">
- <xs:minInclusive value="0"/>
- <xs:fractionDigits value="5"/>
- <xs:totalDigits value="18"/>
- </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,13}"/>
- </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="AlternateSecurityIdentification2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Id" type="Max35Text"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AmountAndCurrencyExchange3">
- <xs:sequence>
- <xs:element name="InstdAmt" type="AmountAndCurrencyExchangeDetails3" minOccurs="0"/>
- <xs:element name="TxAmt" type="AmountAndCurrencyExchangeDetails3" minOccurs="0"/>
- <xs:element name="CntrValAmt" type="AmountAndCurrencyExchangeDetails3" minOccurs="0"/>
- <xs:element name="AnncdPstngAmt" type="AmountAndCurrencyExchangeDetails3" minOccurs="0"/>
- <xs:element name="PrtryAmt" type="AmountAndCurrencyExchangeDetails4" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AmountAndCurrencyExchangeDetails3">
- <xs:sequence>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CcyXchg" type="CurrencyExchange5" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AmountAndCurrencyExchangeDetails4">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CcyXchg" type="CurrencyExchange5" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="AmountRangeBoundary1">
- <xs:sequence>
- <xs:element name="BdryAmt" type="ImpliedCurrencyAndAmount"/>
- <xs:element name="Incl" type="YesNoIndicator"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="AnyBICIdentifier">
- <xs:restriction base="xs:string">
- <xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="BICIdentifier">
- <xs:restriction base="xs:string">
- <xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="BankToCustomerDebitCreditNotificationV02">
- <xs:sequence>
- <xs:element name="GrpHdr" type="GroupHeader42"/>
- <xs:element name="Ntfctn" type="AccountNotification2" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BankTransactionCodeStructure4">
- <xs:sequence>
- <xs:element name="Domn" type="BankTransactionCodeStructure5" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryBankTransactionCodeStructure1" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BankTransactionCodeStructure5">
- <xs:sequence>
- <xs:element name="Cd" type="ExternalBankTransactionDomain1Code"/>
- <xs:element name="Fmly" type="BankTransactionCodeStructure6"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BankTransactionCodeStructure6">
- <xs:sequence>
- <xs:element name="Cd" type="ExternalBankTransactionFamily1Code"/>
- <xs:element name="SubFmlyCd" type="ExternalBankTransactionSubFamily1Code"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="BaseOneRate">
- <xs:restriction base="xs:decimal">
- <xs:fractionDigits value="10"/>
- <xs:totalDigits value="11"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="BatchInformation2">
- <xs:sequence>
- <xs:element name="MsgId" type="Max35Text" minOccurs="0"/>
- <xs:element name="PmtInfId" type="Max35Text" minOccurs="0"/>
- <xs:element name="NbOfTxs" type="Max15NumericText" minOccurs="0"/>
- <xs:element name="TtlAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BranchAndFinancialInstitutionIdentification4">
- <xs:sequence>
- <xs:element name="FinInstnId" type="FinancialInstitutionIdentification7"/>
- <xs:element name="BrnchId" type="BranchData2" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="BranchData2">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text" minOccurs="0"/>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- <xs:element name="PstlAdr" type="PostalAddress6" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashAccount16">
- <xs:sequence>
- <xs:element name="Id" type="AccountIdentification4Choice"/>
- <xs:element name="Tp" type="CashAccountType2" minOccurs="0"/>
- <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
- <xs:element name="Nm" type="Max70Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashAccount20">
- <xs:sequence>
- <xs:element name="Id" type="AccountIdentification4Choice"/>
- <xs:element name="Tp" type="CashAccountType2" minOccurs="0"/>
- <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
- <xs:element name="Nm" type="Max70Text" minOccurs="0"/>
- <xs:element name="Ownr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Svcr" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashAccountType2">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="CashAccountType4Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="CashAccountType4Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="CASH"/>
- <xs:enumeration value="CHAR"/>
- <xs:enumeration value="COMM"/>
- <xs:enumeration value="TAXE"/>
- <xs:enumeration value="CISH"/>
- <xs:enumeration value="TRAS"/>
- <xs:enumeration value="SACC"/>
- <xs:enumeration value="CACC"/>
- <xs:enumeration value="SVGS"/>
- <xs:enumeration value="ONDP"/>
- <xs:enumeration value="MGLD"/>
- <xs:enumeration value="NREX"/>
- <xs:enumeration value="MOMA"/>
- <xs:enumeration value="LOAN"/>
- <xs:enumeration value="SLRY"/>
- <xs:enumeration value="ODFT"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="CashBalanceAvailability2">
- <xs:sequence>
- <xs:element name="Dt" type="CashBalanceAvailabilityDate1"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CashBalanceAvailabilityDate1">
- <xs:sequence>
- <xs:choice>
- <xs:element name="NbOfDays" type="Max15PlusSignedNumericText"/>
- <xs:element name="ActlDt" type="ISODate"/>
- </xs:choice>
- </xs:sequence>
- </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:simpleType name="ChargeType1Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="BRKF"/>
- <xs:enumeration value="COMM"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="ChargeType2Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ChargeType1Code"/>
- <xs:element name="Prtry" type="GenericIdentification3"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ChargesInformation6">
- <xs:sequence>
- <xs:element name="TtlChrgsAndTaxAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- <xs:element name="Tp" type="ChargeType2Choice" minOccurs="0"/>
- <xs:element name="Rate" type="PercentageRate" minOccurs="0"/>
- <xs:element name="Br" type="ChargeBearerType1Code" minOccurs="0"/>
- <xs:element name="Pty" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="Tax" type="TaxCharges2" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ClearingSystemIdentification2Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalClearingSystemIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ClearingSystemMemberIdentification2">
- <xs:sequence>
- <xs:element name="ClrSysId" type="ClearingSystemIdentification2Choice" minOccurs="0"/>
- <xs:element name="MmbId" type="Max35Text"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ContactDetails2">
- <xs:sequence>
- <xs:element name="NmPrfx" type="NamePrefix1Code" minOccurs="0"/>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- <xs:element name="PhneNb" type="PhoneNumber" minOccurs="0"/>
- <xs:element name="MobNb" type="PhoneNumber" minOccurs="0"/>
- <xs:element name="FaxNb" type="PhoneNumber" minOccurs="0"/>
- <xs:element name="EmailAdr" type="Max2048Text" minOccurs="0"/>
- <xs:element name="Othr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="CopyDuplicate1Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="CODU"/>
- <xs:enumeration value="COPY"/>
- <xs:enumeration value="DUPL"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="CorporateAction1">
- <xs:sequence>
- <xs:element name="Cd" type="Max35Text" minOccurs="0"/>
- <xs:element name="Nb" type="Max35Text" minOccurs="0"/>
- <xs:element name="Prtry" type="Max35Text" minOccurs="0"/>
- </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="CreditorReferenceInformation2">
- <xs:sequence>
- <xs:element name="Tp" type="CreditorReferenceType2" minOccurs="0"/>
- <xs:element name="Ref" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CreditorReferenceType1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="DocumentType3Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CreditorReferenceType2">
- <xs:sequence>
- <xs:element name="CdOrPrtry" type="CreditorReferenceType1Choice"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CurrencyAndAmountRange2">
- <xs:sequence>
- <xs:element name="Amt" type="ImpliedCurrencyAmountRangeChoice"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="CurrencyExchange5">
- <xs:sequence>
- <xs:element name="SrcCcy" type="ActiveOrHistoricCurrencyCode"/>
- <xs:element name="TrgtCcy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
- <xs:element name="UnitCcy" type="ActiveOrHistoricCurrencyCode" minOccurs="0"/>
- <xs:element name="XchgRate" type="BaseOneRate"/>
- <xs:element name="CtrctId" type="Max35Text" minOccurs="0"/>
- <xs:element name="QtnDt" type="ISODateTime" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DateAndDateTimeChoice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Dt" type="ISODate"/>
- <xs:element name="DtTm" type="ISODateTime"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DateAndPlaceOfBirth">
- <xs:sequence>
- <xs:element name="BirthDt" type="ISODate"/>
- <xs:element name="PrvcOfBirth" type="Max35Text" minOccurs="0"/>
- <xs:element name="CityOfBirth" type="Max35Text"/>
- <xs:element name="CtryOfBirth" type="CountryCode"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DatePeriodDetails">
- <xs:sequence>
- <xs:element name="FrDt" type="ISODate"/>
- <xs:element name="ToDt" type="ISODate"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DateTimePeriodDetails">
- <xs:sequence>
- <xs:element name="FrDtTm" type="ISODateTime"/>
- <xs:element name="ToDtTm" type="ISODateTime"/>
- </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="Document">
- <xs:sequence>
- <xs:element name="BkToCstmrDbtCdtNtfctn" type="BankToCustomerDebitCreditNotificationV02"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="DocumentAdjustment1">
- <xs:sequence>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- <xs:element name="Rsn" type="Max4Text" minOccurs="0"/>
- <xs:element name="AddtlInf" type="Max140Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs: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="DocumentType5Code">
- <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:restriction>
- </xs:simpleType>
- <xs:complexType name="EntryDetails1">
- <xs:sequence>
- <xs:element name="Btch" type="BatchInformation2" minOccurs="0"/>
- <xs:element name="TxDtls" type="EntryTransaction2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="EntryStatus2Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="BOOK"/>
- <xs:enumeration value="PDNG"/>
- <xs:enumeration value="INFO"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="EntryTransaction2">
- <xs:sequence>
- <xs:element name="Refs" type="TransactionReferences2" minOccurs="0"/>
- <xs:element name="AmtDtls" type="AmountAndCurrencyExchange3" minOccurs="0"/>
- <xs:element name="Avlbty" type="CashBalanceAvailability2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="BkTxCd" type="BankTransactionCodeStructure4" minOccurs="0"/>
- <xs:element name="Chrgs" type="ChargesInformation6" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="Intrst" type="TransactionInterest2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="RltdPties" type="TransactionParty2" minOccurs="0"/>
- <xs:element name="RltdAgts" type="TransactionAgents2" minOccurs="0"/>
- <xs:element name="Purp" type="Purpose2Choice" minOccurs="0"/>
- <xs:element name="RltdRmtInf" type="RemittanceLocation2" minOccurs="0" maxOccurs="10"/>
- <xs:element name="RmtInf" type="RemittanceInformation5" minOccurs="0"/>
- <xs:element name="RltdDts" type="TransactionDates2" minOccurs="0"/>
- <xs:element name="RltdPric" type="TransactionPrice2Choice" minOccurs="0"/>
- <xs:element name="RltdQties" type="TransactionQuantities1Choice" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="FinInstrmId" type="SecurityIdentification4Choice" minOccurs="0"/>
- <xs:element name="Tax" type="TaxInformation3" minOccurs="0"/>
- <xs:element name="RtrInf" type="ReturnReasonInformation10" minOccurs="0"/>
- <xs:element name="CorpActn" type="CorporateAction1" minOccurs="0"/>
- <xs:element name="SfkpgAcct" type="CashAccount16" minOccurs="0"/>
- <xs:element name="AddtlTxInf" type="Max500Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="ExternalAccountIdentification1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalBankTransactionDomain1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalBankTransactionFamily1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalBankTransactionSubFamily1Code">
- <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="ExternalFinancialInstitutionIdentification1Code">
- <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="ExternalPersonIdentification1Code">
- <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="ExternalReportingSource1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalReturnReason1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="ExternalTechnicalInputChannel1Code">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="4"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="FinancialIdentificationSchemeName1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalFinancialInstitutionIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="FinancialInstitutionIdentification7">
- <xs:sequence>
- <xs:element name="BIC" type="BICIdentifier" minOccurs="0"/>
- <xs:element name="ClrSysMmbId" type="ClearingSystemMemberIdentification2" minOccurs="0"/>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- <xs:element name="PstlAdr" type="PostalAddress6" minOccurs="0"/>
- <xs:element name="Othr" type="GenericFinancialIdentification1" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="FinancialInstrumentQuantityChoice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Unit" type="DecimalNumber"/>
- <xs:element name="FaceAmt" type="ImpliedCurrencyAndAmount"/>
- <xs:element name="AmtsdVal" type="ImpliedCurrencyAndAmount"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="FromToAmountRange">
- <xs:sequence>
- <xs:element name="FrAmt" type="AmountRangeBoundary1"/>
- <xs:element name="ToAmt" type="AmountRangeBoundary1"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericAccountIdentification1">
- <xs:sequence>
- <xs:element name="Id" type="Max34Text"/>
- <xs:element name="SchmeNm" type="AccountSchemeName1Choice" minOccurs="0"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericFinancialIdentification1">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="SchmeNm" type="FinancialIdentificationSchemeName1Choice" minOccurs="0"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericIdentification3">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericOrganisationIdentification1">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="SchmeNm" type="OrganisationIdentificationSchemeName1Choice" minOccurs="0"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GenericPersonIdentification1">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text"/>
- <xs:element name="SchmeNm" type="PersonIdentificationSchemeName1Choice" minOccurs="0"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="GroupHeader42">
- <xs:sequence>
- <xs:element name="MsgId" type="Max35Text"/>
- <xs:element name="CreDtTm" type="ISODateTime"/>
- <xs:element name="MsgRcpt" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="MsgPgntn" type="Pagination" minOccurs="0"/>
- <xs:element name="AddtlInf" type="Max500Text" minOccurs="0"/>
- </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="ISINIdentifier">
- <xs:restriction base="xs:string">
- <xs:pattern value="[A-Z0-9]{12,12}"/>
- </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:complexType name="ImpliedCurrencyAmountRangeChoice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="FrAmt" type="AmountRangeBoundary1"/>
- <xs:element name="ToAmt" type="AmountRangeBoundary1"/>
- <xs:element name="FrToAmt" type="FromToAmountRange"/>
- <xs:element name="EQAmt" type="ImpliedCurrencyAndAmount"/>
- <xs:element name="NEQAmt" type="ImpliedCurrencyAndAmount"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="ImpliedCurrencyAndAmount">
- <xs:restriction base="xs:decimal">
- <xs:minInclusive value="0"/>
- <xs:fractionDigits value="5"/>
- <xs:totalDigits value="18"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="InterestType1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="InterestType1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="InterestType1Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="INDY"/>
- <xs:enumeration value="OVRN"/>
- </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="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="Max15PlusSignedNumericText">
- <xs:restriction base="xs:string">
- <xs:pattern value="[+]{0,1}[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="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="Max500Text">
- <xs:restriction base="xs:string">
- <xs:minLength value="1"/>
- <xs:maxLength value="500"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:simpleType name="Max5NumericText">
- <xs:restriction base="xs:string">
- <xs:pattern value="[0-9]{1,5}"/>
- </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:complexType name="MessageIdentification2">
- <xs:sequence>
- <xs:element name="MsgNmId" type="Max35Text" minOccurs="0"/>
- <xs:element name="MsgId" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="NameAndAddress10">
- <xs:sequence>
- <xs:element name="Nm" type="Max140Text"/>
- <xs:element name="Adr" type="PostalAddress6"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="NamePrefix1Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="DOCT"/>
- <xs:enumeration value="MIST"/>
- <xs:enumeration value="MISS"/>
- <xs:enumeration value="MADM"/>
- </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="NumberAndSumOfTransactions1">
- <xs:sequence>
- <xs:element name="NbOfNtries" type="Max15NumericText" minOccurs="0"/>
- <xs:element name="Sum" type="DecimalNumber" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="NumberAndSumOfTransactions2">
- <xs:sequence>
- <xs:element name="NbOfNtries" type="Max15NumericText" minOccurs="0"/>
- <xs:element name="Sum" type="DecimalNumber" minOccurs="0"/>
- <xs:element name="TtlNetNtryAmt" type="DecimalNumber" minOccurs="0"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="OrganisationIdentification4">
- <xs:sequence>
- <xs:element name="BICOrBEI" type="AnyBICIdentifier" minOccurs="0"/>
- <xs:element name="Othr" type="GenericOrganisationIdentification1" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="OrganisationIdentificationSchemeName1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalOrganisationIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="Pagination">
- <xs:sequence>
- <xs:element name="PgNb" type="Max5NumericText"/>
- <xs:element name="LastPgInd" type="YesNoIndicator"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="Party6Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="OrgId" type="OrganisationIdentification4"/>
- <xs:element name="PrvtId" type="PersonIdentification5"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="PartyIdentification32">
- <xs:sequence>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- <xs:element name="PstlAdr" type="PostalAddress6" minOccurs="0"/>
- <xs:element name="Id" type="Party6Choice" minOccurs="0"/>
- <xs:element name="CtryOfRes" type="CountryCode" minOccurs="0"/>
- <xs:element name="CtctDtls" type="ContactDetails2" minOccurs="0"/>
- </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="PersonIdentification5">
- <xs:sequence>
- <xs:element name="DtAndPlcOfBirth" type="DateAndPlaceOfBirth" minOccurs="0"/>
- <xs:element name="Othr" type="GenericPersonIdentification1" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="PersonIdentificationSchemeName1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalPersonIdentification1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </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="PostalAddress6">
- <xs:sequence>
- <xs:element name="AdrTp" type="AddressType2Code" minOccurs="0"/>
- <xs:element name="Dept" type="Max70Text" minOccurs="0"/>
- <xs:element name="SubDept" type="Max70Text" minOccurs="0"/>
- <xs:element name="StrtNm" type="Max70Text" minOccurs="0"/>
- <xs:element name="BldgNb" type="Max16Text" minOccurs="0"/>
- <xs:element name="PstCd" type="Max16Text" minOccurs="0"/>
- <xs:element name="TwnNm" type="Max35Text" minOccurs="0"/>
- <xs:element name="CtrySubDvsn" type="Max35Text" minOccurs="0"/>
- <xs:element name="Ctry" type="CountryCode" minOccurs="0"/>
- <xs:element name="AdrLine" type="Max70Text" minOccurs="0" maxOccurs="7"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryAgent2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Agt" type="BranchAndFinancialInstitutionIdentification4"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryBankTransactionCodeStructure1">
- <xs:sequence>
- <xs:element name="Cd" type="Max35Text"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryDate2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Dt" type="DateAndDateTimeChoice"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryParty2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Pty" type="PartyIdentification32"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryPrice2">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Pric" type="ActiveOrHistoricCurrencyAndAmount"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryQuantity1">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Qty" type="Max35Text"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ProprietaryReference1">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text"/>
- <xs:element name="Ref" type="Max35Text"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="Purpose2Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalPurpose1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="Rate3">
- <xs:sequence>
- <xs:element name="Tp" type="RateType4Choice"/>
- <xs:element name="VldtyRg" type="CurrencyAndAmountRange2" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="RateType4Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Pctg" type="PercentageRate"/>
- <xs:element name="Othr" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReferredDocumentInformation3">
- <xs:sequence>
- <xs:element name="Tp" type="ReferredDocumentType2" minOccurs="0"/>
- <xs:element name="Nb" type="Max35Text" minOccurs="0"/>
- <xs:element name="RltdDt" type="ISODate" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReferredDocumentType1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="DocumentType5Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReferredDocumentType2">
- <xs:sequence>
- <xs:element name="CdOrPrtry" type="ReferredDocumentType1Choice"/>
- <xs:element name="Issr" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="RemittanceAmount1">
- <xs:sequence>
- <xs:element name="DuePyblAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="DscntApldAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="CdtNoteAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="TaxAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="AdjstmntAmtAndRsn" type="DocumentAdjustment1" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="RmtdAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="RemittanceInformation5">
- <xs:sequence>
- <xs:element name="Ustrd" type="Max140Text" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="Strd" type="StructuredRemittanceInformation7" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="RemittanceLocation2">
- <xs:sequence>
- <xs:element name="RmtId" type="Max35Text" minOccurs="0"/>
- <xs:element name="RmtLctnMtd" type="RemittanceLocationMethod2Code" minOccurs="0"/>
- <xs:element name="RmtLctnElctrncAdr" type="Max2048Text" minOccurs="0"/>
- <xs:element name="RmtLctnPstlAdr" type="NameAndAddress10" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="RemittanceLocationMethod2Code">
- <xs:restriction base="xs:string">
- <xs:enumeration value="FAXI"/>
- <xs:enumeration value="EDIC"/>
- <xs:enumeration value="URID"/>
- <xs:enumeration value="EMAL"/>
- <xs:enumeration value="POST"/>
- <xs:enumeration value="SMSM"/>
- </xs:restriction>
- </xs:simpleType>
- <xs:complexType name="ReportEntry2">
- <xs:sequence>
- <xs:element name="NtryRef" type="Max35Text" minOccurs="0"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
- <xs:element name="RvslInd" type="TrueFalseIndicator" minOccurs="0"/>
- <xs:element name="Sts" type="EntryStatus2Code"/>
- <xs:element name="BookgDt" type="DateAndDateTimeChoice" minOccurs="0"/>
- <xs:element name="ValDt" type="DateAndDateTimeChoice" minOccurs="0"/>
- <xs:element name="AcctSvcrRef" type="Max35Text" minOccurs="0"/>
- <xs:element name="Avlbty" type="CashBalanceAvailability2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="BkTxCd" type="BankTransactionCodeStructure4"/>
- <xs:element name="ComssnWvrInd" type="YesNoIndicator" minOccurs="0"/>
- <xs:element name="AddtlInfInd" type="MessageIdentification2" minOccurs="0"/>
- <xs:element name="AmtDtls" type="AmountAndCurrencyExchange3" minOccurs="0"/>
- <xs:element name="Chrgs" type="ChargesInformation6" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="TechInptChanl" type="TechnicalInputChannel1Choice" minOccurs="0"/>
- <xs:element name="Intrst" type="TransactionInterest2" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="NtryDtls" type="EntryDetails1" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="AddtlNtryInf" type="Max500Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReportingSource1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalReportingSource1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReturnReason5Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalReturnReason1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="ReturnReasonInformation10">
- <xs:sequence>
- <xs:element name="OrgnlBkTxCd" type="BankTransactionCodeStructure4" minOccurs="0"/>
- <xs:element name="Orgtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Rsn" type="ReturnReason5Choice" minOccurs="0"/>
- <xs:element name="AddtlInf" type="Max105Text" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="SecurityIdentification4Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="ISIN" type="ISINIdentifier"/>
- <xs:element name="Prtry" type="AlternateSecurityIdentification2"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="StructuredRemittanceInformation7">
- <xs:sequence>
- <xs:element name="RfrdDocInf" type="ReferredDocumentInformation3" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="RfrdDocAmt" type="RemittanceAmount1" minOccurs="0"/>
- <xs:element name="CdtrRefInf" type="CreditorReferenceInformation2" minOccurs="0"/>
- <xs:element name="Invcr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Invcee" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="AddtlRmtInf" type="Max140Text" minOccurs="0" maxOccurs="3"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxAmount1">
- <xs:sequence>
- <xs:element name="Rate" type="PercentageRate" minOccurs="0"/>
- <xs:element name="TaxblBaseAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="TtlAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="Dtls" type="TaxRecordDetails1" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxAuthorisation1">
- <xs:sequence>
- <xs:element name="Titl" type="Max35Text" minOccurs="0"/>
- <xs:element name="Nm" type="Max140Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxCharges2">
- <xs:sequence>
- <xs:element name="Id" type="Max35Text" minOccurs="0"/>
- <xs:element name="Rate" type="PercentageRate" minOccurs="0"/>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxInformation3">
- <xs:sequence>
- <xs:element name="Cdtr" type="TaxParty1" minOccurs="0"/>
- <xs:element name="Dbtr" type="TaxParty2" minOccurs="0"/>
- <xs:element name="AdmstnZn" type="Max35Text" minOccurs="0"/>
- <xs:element name="RefNb" type="Max140Text" minOccurs="0"/>
- <xs:element name="Mtd" type="Max35Text" minOccurs="0"/>
- <xs:element name="TtlTaxblBaseAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="TtlTaxAmt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/>
- <xs:element name="Dt" type="ISODate" minOccurs="0"/>
- <xs:element name="SeqNb" type="Number" minOccurs="0"/>
- <xs:element name="Rcrd" type="TaxRecord1" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxParty1">
- <xs:sequence>
- <xs:element name="TaxId" type="Max35Text" minOccurs="0"/>
- <xs:element name="RegnId" type="Max35Text" minOccurs="0"/>
- <xs:element name="TaxTp" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxParty2">
- <xs:sequence>
- <xs:element name="TaxId" type="Max35Text" minOccurs="0"/>
- <xs:element name="RegnId" type="Max35Text" minOccurs="0"/>
- <xs:element name="TaxTp" type="Max35Text" minOccurs="0"/>
- <xs:element name="Authstn" type="TaxAuthorisation1" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxPeriod1">
- <xs:sequence>
- <xs:element name="Yr" type="ISODate" minOccurs="0"/>
- <xs:element name="Tp" type="TaxRecordPeriod1Code" minOccurs="0"/>
- <xs:element name="FrToDt" type="DatePeriodDetails" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxRecord1">
- <xs:sequence>
- <xs:element name="Tp" type="Max35Text" minOccurs="0"/>
- <xs:element name="Ctgy" type="Max35Text" minOccurs="0"/>
- <xs:element name="CtgyDtls" type="Max35Text" minOccurs="0"/>
- <xs:element name="DbtrSts" type="Max35Text" minOccurs="0"/>
- <xs:element name="CertId" type="Max35Text" minOccurs="0"/>
- <xs:element name="FrmsCd" type="Max35Text" minOccurs="0"/>
- <xs:element name="Prd" type="TaxPeriod1" minOccurs="0"/>
- <xs:element name="TaxAmt" type="TaxAmount1" minOccurs="0"/>
- <xs:element name="AddtlInf" type="Max140Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TaxRecordDetails1">
- <xs:sequence>
- <xs:element name="Prd" type="TaxPeriod1" minOccurs="0"/>
- <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="TechnicalInputChannel1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Cd" type="ExternalTechnicalInputChannel1Code"/>
- <xs:element name="Prtry" type="Max35Text"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TotalTransactions2">
- <xs:sequence>
- <xs:element name="TtlNtries" type="NumberAndSumOfTransactions2" minOccurs="0"/>
- <xs:element name="TtlCdtNtries" type="NumberAndSumOfTransactions1" minOccurs="0"/>
- <xs:element name="TtlDbtNtries" type="NumberAndSumOfTransactions1" minOccurs="0"/>
- <xs:element name="TtlNtriesPerBkTxCd" type="TotalsPerBankTransactionCode2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TotalsPerBankTransactionCode2">
- <xs:sequence>
- <xs:element name="NbOfNtries" type="Max15NumericText" minOccurs="0"/>
- <xs:element name="Sum" type="DecimalNumber" minOccurs="0"/>
- <xs:element name="TtlNetNtryAmt" type="DecimalNumber" minOccurs="0"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode" minOccurs="0"/>
- <xs:element name="FcstInd" type="TrueFalseIndicator" minOccurs="0"/>
- <xs:element name="BkTxCd" type="BankTransactionCodeStructure4"/>
- <xs:element name="Avlbty" type="CashBalanceAvailability2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionAgents2">
- <xs:sequence>
- <xs:element name="DbtrAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="IntrmyAgt2" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="IntrmyAgt3" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="RcvgAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="DlvrgAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="IssgAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="SttlmPlc" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryAgent2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionDates2">
- <xs:sequence>
- <xs:element name="AccptncDtTm" type="ISODateTime" minOccurs="0"/>
- <xs:element name="TradActvtyCtrctlSttlmDt" type="ISODate" minOccurs="0"/>
- <xs:element name="TradDt" type="ISODate" minOccurs="0"/>
- <xs:element name="IntrBkSttlmDt" type="ISODate" minOccurs="0"/>
- <xs:element name="StartDt" type="ISODate" minOccurs="0"/>
- <xs:element name="EndDt" type="ISODate" minOccurs="0"/>
- <xs:element name="TxDtTm" type="ISODateTime" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryDate2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionInterest2">
- <xs:sequence>
- <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
- <xs:element name="Tp" type="InterestType1Choice" minOccurs="0"/>
- <xs:element name="Rate" type="Rate3" minOccurs="0" maxOccurs="unbounded"/>
- <xs:element name="FrToDt" type="DateTimePeriodDetails" minOccurs="0"/>
- <xs:element name="Rsn" type="Max35Text" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionParty2">
- <xs:sequence>
- <xs:element name="InitgPty" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Dbtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="DbtrAcct" type="CashAccount16" minOccurs="0"/>
- <xs:element name="UltmtDbtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Cdtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="CdtrAcct" type="CashAccount16" minOccurs="0"/>
- <xs:element name="UltmtCdtr" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="TradgPty" type="PartyIdentification32" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryParty2" minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionPrice2Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="DealPric" type="ActiveOrHistoricCurrencyAndAmount"/>
- <xs:element name="Prtry" type="ProprietaryPrice2" maxOccurs="unbounded"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionQuantities1Choice">
- <xs:sequence>
- <xs:choice>
- <xs:element name="Qty" type="FinancialInstrumentQuantityChoice"/>
- <xs:element name="Prtry" type="ProprietaryQuantity1"/>
- </xs:choice>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="TransactionReferences2">
- <xs:sequence>
- <xs:element name="MsgId" type="Max35Text" minOccurs="0"/>
- <xs:element name="AcctSvcrRef" type="Max35Text" minOccurs="0"/>
- <xs:element name="PmtInfId" type="Max35Text" minOccurs="0"/>
- <xs:element name="InstrId" type="Max35Text" minOccurs="0"/>
- <xs:element name="EndToEndId" type="Max35Text" minOccurs="0"/>
- <xs:element name="TxId" type="Max35Text" minOccurs="0"/>
- <xs:element name="MndtId" type="Max35Text" minOccurs="0"/>
- <xs:element name="ChqNb" type="Max35Text" minOccurs="0"/>
- <xs:element name="ClrSysRef" type="Max35Text" minOccurs="0"/>
- <xs:element name="Prtry" type="ProprietaryReference1" minOccurs="0"/>
- </xs:sequence>
- </xs:complexType>
- <xs:simpleType name="TrueFalseIndicator">
- <xs:restriction base="xs:boolean"/>
- </xs:simpleType>
- <xs:simpleType name="YesNoIndicator">
- <xs:restriction base="xs:boolean"/>
- </xs:simpleType>
-</xs:schema>
diff --git a/ebics/src/main/resources/xsd/camt.054.001.04.xsd b/ebics/src/main/resources/xsd/camt.054.001.04.xsd
new file mode 100644
index 00000000..cfd50262
--- /dev/null
+++ b/ebics/src/main/resources/xsd/camt.054.001.04.xsd
@@ -0,0 +1,1709 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Generated by Standards Editor (build:R1.0.41.3) on 2013 Mar 05 13:39:37, ISO 20022 version : 2013-->
+<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04">
+ <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="AccountInterest2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="InterestType1Choice"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Rate" type="Rate3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrToDt" type="DateTimePeriodDetails"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AccountNotification7">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="NtfctnPgntn" type="Pagination"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ElctrncSeqNb" type="Number"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="LglSeqNb" type="Number"/>
+ <xs:element name="CreDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrToDt" type="DateTimePeriodDetails"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CpyDplctInd" type="CopyDuplicate1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RptgSrc" type="ReportingSource1Choice"/>
+ <xs:element name="Acct" type="CashAccount25"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdAcct" type="CashAccount24"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Intrst" type="AccountInterest2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxsSummry" type="TotalTransactions4"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Ntry" type="ReportEntry4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlNtfctnInf" type="Max500Text"/>
+ </xs:sequence>
+ </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="ActiveOrHistoricCurrencyAnd13DecimalAmount_SimpleType">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="13"/>
+ <xs:totalDigits value="18"/>
+ <xs:minInclusive value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ActiveOrHistoricCurrencyAnd13DecimalAmount">
+ <xs:simpleContent>
+ <xs:extension base="ActiveOrHistoricCurrencyAnd13DecimalAmount_SimpleType">
+ <xs:attribute name="Ccy" type="ActiveOrHistoricCurrencyCode" use="required"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ <xs:simpleType name="ActiveOrHistoricCurrencyAndAmount_SimpleType">
+ <xs:restriction base="xs:decimal">
+ <xs: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="AmountAndCurrencyExchange3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstdAmt" type="AmountAndCurrencyExchangeDetails3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxAmt" type="AmountAndCurrencyExchangeDetails3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CntrValAmt" type="AmountAndCurrencyExchangeDetails3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AnncdPstngAmt" type="AmountAndCurrencyExchangeDetails3"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="PrtryAmt" type="AmountAndCurrencyExchangeDetails4"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AmountAndCurrencyExchangeDetails3">
+ <xs:sequence>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CcyXchg" type="CurrencyExchange5"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AmountAndCurrencyExchangeDetails4">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CcyXchg" type="CurrencyExchange5"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AmountAndDirection35">
+ <xs:sequence>
+ <xs:element name="Amt" type="NonNegativeDecimalNumber"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AmountRangeBoundary1">
+ <xs:sequence>
+ <xs:element name="BdryAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element name="Incl" type="YesNoIndicator"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="AnyBICIdentifier">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="BICFIIdentifier">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="BankToCustomerDebitCreditNotificationV04">
+ <xs:sequence>
+ <xs:element name="GrpHdr" type="GroupHeader58"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="Ntfctn" type="AccountNotification7"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="SplmtryData" type="SupplementaryData1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="BankTransactionCodeStructure4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Domn" type="BankTransactionCodeStructure5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Prtry" type="ProprietaryBankTransactionCodeStructure1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="BankTransactionCodeStructure5">
+ <xs:sequence>
+ <xs:element name="Cd" type="ExternalBankTransactionDomain1Code"/>
+ <xs:element name="Fmly" type="BankTransactionCodeStructure6"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="BankTransactionCodeStructure6">
+ <xs:sequence>
+ <xs:element name="Cd" type="ExternalBankTransactionFamily1Code"/>
+ <xs:element name="SubFmlyCd" type="ExternalBankTransactionSubFamily1Code"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="BaseOneRate">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="10"/>
+ <xs:totalDigits value="11"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="BatchInformation2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtInfId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="NbOfTxs" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlAmt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtDbtInd" type="CreditDebitCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="BranchAndFinancialInstitutionIdentification5">
+ <xs:sequence>
+ <xs:element name="FinInstnId" type="FinancialInstitutionIdentification8"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="BrnchId" type="BranchData2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="BranchData2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nm" type="Max140Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PstlAdr" type="PostalAddress6"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="CSCManagement1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="PRST"/>
+ <xs:enumeration value="BYPS"/>
+ <xs:enumeration value="UNRD"/>
+ <xs:enumeration value="NCSC"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CardAggregated1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlSvc" type="CardPaymentServiceType2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxCtgy" type="ExternalCardTransactionCategory1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SaleRcncltnId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SeqNbRg" type="CardSequenceNumberRange1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxDtRg" type="DateOrDateTimePeriodChoice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="CardDataReading1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="TAGC"/>
+ <xs:enumeration value="PHYS"/>
+ <xs:enumeration value="BRCD"/>
+ <xs:enumeration value="MGST"/>
+ <xs:enumeration value="CICC"/>
+ <xs:enumeration value="DFLE"/>
+ <xs:enumeration value="CTLS"/>
+ <xs:enumeration value="ECTL"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CardEntry1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Card" type="PaymentCard4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="POI" type="PointOfInteraction1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AggtdNtry" type="CardAggregated1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CardIndividualTransaction1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlSvc" type="CardPaymentServiceType2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxCtgy" type="ExternalCardTransactionCategory1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SaleRcncltnId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SaleRefNb" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SeqNb" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxId" type="TransactionIdentifier1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Pdct" type="Product2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="VldtnDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="VldtnSeqNb" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="CardPaymentServiceType2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="AGGR"/>
+ <xs:enumeration value="DCCV"/>
+ <xs:enumeration value="GRTT"/>
+ <xs:enumeration value="INSP"/>
+ <xs:enumeration value="LOYT"/>
+ <xs:enumeration value="NRES"/>
+ <xs:enumeration value="PUCO"/>
+ <xs:enumeration value="RECP"/>
+ <xs:enumeration value="SOAF"/>
+ <xs:enumeration value="UNAF"/>
+ <xs:enumeration value="VCAU"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CardSecurityInformation1">
+ <xs:sequence>
+ <xs:element name="CSCMgmt" type="CSCManagement1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CSCVal" type="Min3Max4NumericText"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CardSequenceNumberRange1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrstTx" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="LastTx" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CardTransaction1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Card" type="PaymentCard4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="POI" type="PointOfInteraction1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tx" type="CardTransaction1Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CardTransaction1Choice">
+ <xs:choice>
+ <xs:element name="Aggtd" type="CardAggregated1"/>
+ <xs:element name="Indv" type="CardIndividualTransaction1"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="CardholderVerificationCapability1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MNSG"/>
+ <xs:enumeration value="NPIN"/>
+ <xs:enumeration value="FCPN"/>
+ <xs:enumeration value="FEPN"/>
+ <xs:enumeration value="FDSG"/>
+ <xs:enumeration value="FBIO"/>
+ <xs:enumeration value="MNVR"/>
+ <xs:enumeration value="FBIG"/>
+ <xs:enumeration value="APKI"/>
+ <xs:enumeration value="PKIS"/>
+ <xs:enumeration value="CHDT"/>
+ <xs:enumeration value="SCEC"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CashAccount24">
+ <xs:sequence>
+ <xs:element 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:sequence>
+ </xs:complexType>
+ <xs:complexType name="CashAccount25">
+ <xs:sequence>
+ <xs:element 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="Ownr" type="PartyIdentification43"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Svcr" type="BranchAndFinancialInstitutionIdentification5"/>
+ </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="CashBalanceAvailability2">
+ <xs:sequence>
+ <xs:element name="Dt" type="CashBalanceAvailabilityDate1"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CashBalanceAvailabilityDate1">
+ <xs:sequence>
+ <xs:choice>
+ <xs:element name="NbOfDays" type="Max15PlusSignedNumericText"/>
+ <xs:element name="ActlDt" type="ISODate"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CashDeposit1">
+ <xs:sequence>
+ <xs:element name="NoteDnmtn" type="ActiveCurrencyAndAmount"/>
+ <xs:element name="NbOfNotes" type="Max15NumericText"/>
+ <xs:element name="Amt" type="ActiveCurrencyAndAmount"/>
+ </xs:sequence>
+ </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:simpleType name="ChargeIncludedIndicator">
+ <xs:restriction base="xs:boolean"/>
+ </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="Charges4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlChrgsAndTaxAmt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Rcrd" type="ChargesRecord2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ChargesRecord2">
+ <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="ChrgInclInd" type="ChargeIncludedIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="ChargeType3Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rate" type="PercentageRate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Br" type="ChargeBearerType1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Agt" type="BranchAndFinancialInstitutionIdentification5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxCharges2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <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="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="ContactDetails2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NmPrfx" type="NamePrefix1Code"/>
+ <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="Othr" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="CopyDuplicate1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CODU"/>
+ <xs:enumeration value="COPY"/>
+ <xs:enumeration value="DUPL"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CorporateAction9">
+ <xs:sequence>
+ <xs:element name="EvtTp" type="Max35Text"/>
+ <xs:element name="EvtId" type="Max35Text"/>
+ </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="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="CurrencyAndAmountRange2">
+ <xs:sequence>
+ <xs:element name="Amt" type="ImpliedCurrencyAmountRangeChoice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtDbtInd" type="CreditDebitCode"/>
+ <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CurrencyExchange5">
+ <xs:sequence>
+ <xs:element name="SrcCcy" type="ActiveOrHistoricCurrencyCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TrgtCcy" type="ActiveOrHistoricCurrencyCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UnitCcy" type="ActiveOrHistoricCurrencyCode"/>
+ <xs:element name="XchgRate" type="BaseOneRate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtrctId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="QtnDt" type="ISODateTime"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DateAndDateTimeChoice">
+ <xs:choice>
+ <xs:element name="Dt" type="ISODate"/>
+ <xs:element name="DtTm" type="ISODateTime"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="DateAndPlaceOfBirth">
+ <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="DateOrDateTimePeriodChoice">
+ <xs:choice>
+ <xs:element name="Dt" type="DatePeriodDetails"/>
+ <xs:element name="DtTm" type="DateTimePeriodDetails"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="DatePeriodDetails">
+ <xs:sequence>
+ <xs:element name="FrDt" type="ISODate"/>
+ <xs:element name="ToDt" type="ISODate"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DateTimePeriodDetails">
+ <xs:sequence>
+ <xs:element name="FrDtTm" type="ISODateTime"/>
+ <xs:element name="ToDtTm" type="ISODateTime"/>
+ </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="DisplayCapabilities1">
+ <xs:sequence>
+ <xs:element name="DispTp" type="UserInterface2Code"/>
+ <xs:element name="NbOfLines" type="Max3NumericText"/>
+ <xs:element name="LineWidth" type="Max3NumericText"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Document">
+ <xs:sequence>
+ <xs:element name="BkToCstmrDbtCdtNtfctn" type="BankToCustomerDebitCreditNotificationV04"/>
+ </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: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="DocumentType5Code">
+ <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:restriction>
+ </xs:simpleType>
+ <xs:complexType name="EntryDetails3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Btch" type="BatchInformation2"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="TxDtls" type="EntryTransaction4"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="EntryStatus2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="BOOK"/>
+ <xs:enumeration value="PDNG"/>
+ <xs:enumeration value="INFO"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="EntryTransaction4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Refs" type="TransactionReferences3"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AmtDtls" type="AmountAndCurrencyExchange3"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Avlbty" type="CashBalanceAvailability2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="BkTxCd" type="BankTransactionCodeStructure4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Chrgs" type="Charges4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Intrst" type="TransactionInterest3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdPties" type="TransactionParties3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdAgts" type="TransactionAgents3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Purp" type="Purpose2Choice"/>
+ <xs:element maxOccurs="10" minOccurs="0" name="RltdRmtInf" type="RemittanceLocation2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtInf" type="RemittanceInformation7"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdDts" type="TransactionDates2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdPric" type="TransactionPrice3Choice"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="RltdQties" type="TransactionQuantities2Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FinInstrmId" type="SecurityIdentification14"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxInformation3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RtrInf" type="PaymentReturnReason2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CorpActn" type="CorporateAction9"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SfkpgAcct" type="SecuritiesAccount13"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="CshDpst" type="CashDeposit1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardTx" type="CardTransaction1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlTxInf" type="Max500Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="SplmtryData" type="SupplementaryData1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="Exact1NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Exact3NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{3}"/>
+ </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="ExternalBankTransactionDomain1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalBankTransactionFamily1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalBankTransactionSubFamily1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalCardTransactionCategory1Code">
+ <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="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="ExternalFinancialInstitutionIdentification1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalFinancialInstrumentIdentificationType1Code">
+ <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="ExternalPersonIdentification1Code">
+ <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="ExternalReportingSource1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalReturnReason1Code">
+ <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:simpleType name="ExternalTechnicalInputChannel1Code">
+ <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="FinancialInstitutionIdentification8">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="BICFI" type="BICFIIdentifier"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ClrSysMmbId" type="ClearingSystemMemberIdentification2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nm" type="Max140Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PstlAdr" type="PostalAddress6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Othr" type="GenericFinancialIdentification1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="FinancialInstrumentQuantityChoice">
+ <xs:choice>
+ <xs:element name="Unit" type="DecimalNumber"/>
+ <xs:element name="FaceAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element name="AmtsdVal" type="ImpliedCurrencyAndAmount"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="FromToAmountRange">
+ <xs:sequence>
+ <xs:element name="FrAmt" type="AmountRangeBoundary1"/>
+ <xs:element name="ToAmt" type="AmountRangeBoundary1"/>
+ </xs:sequence>
+ </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="GenericIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SchmeNm" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="GenericIdentification20">
+ <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="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="GenericIdentification32">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="PartyType3Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr" type="PartyType4Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ShrtNm" 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="GroupHeader58">
+ <xs:sequence>
+ <xs:element name="MsgId" type="Max35Text"/>
+ <xs:element name="CreDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgRcpt" type="PartyIdentification43"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgPgntn" type="Pagination"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlBizQry" type="OriginalBusinessQuery1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlInf" type="Max500Text"/>
+ </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="ISINIdentifier">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z0-9]{12,12}"/>
+ </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="ISOYearMonth">
+ <xs:restriction base="xs:gYearMonth"/>
+ </xs:simpleType>
+ <xs:complexType name="IdentificationSource3Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalFinancialInstrumentIdentificationType1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="ImpliedCurrencyAmountRangeChoice">
+ <xs:choice>
+ <xs:element name="FrAmt" type="AmountRangeBoundary1"/>
+ <xs:element name="ToAmt" type="AmountRangeBoundary1"/>
+ <xs:element name="FrToAmt" type="FromToAmountRange"/>
+ <xs:element name="EQAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element name="NEQAmt" type="ImpliedCurrencyAndAmount"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="ImpliedCurrencyAndAmount">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="5"/>
+ <xs:totalDigits value="18"/>
+ <xs:minInclusive value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="InterestRecord1">
+ <xs:sequence>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="InterestType1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rate" type="Rate3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrToDt" type="DateTimePeriodDetails"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxCharges2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="InterestType1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="InterestType1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="InterestType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="INDY"/>
+ <xs:enumeration value="OVRN"/>
+ </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="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="Max15PlusSignedNumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[\+]{0,1}[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="Max3NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{1,3}"/>
+ </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="Max500Text">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="500"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max5NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{1,5}"/>
+ </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:complexType name="MessageIdentification2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgNmId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgId" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="Min2Max3NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{2,3}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Min3Max4NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{3,4}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Min8Max28NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{8,28}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="NameAndAddress10">
+ <xs:sequence>
+ <xs:element name="Nm" type="Max140Text"/>
+ <xs:element name="Adr" type="PostalAddress6"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="NamePrefix1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="DOCT"/>
+ <xs:enumeration value="MIST"/>
+ <xs:enumeration value="MISS"/>
+ <xs:enumeration value="MADM"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="NonNegativeDecimalNumber">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="17"/>
+ <xs:totalDigits value="18"/>
+ <xs:minInclusive value="0"/>
+ </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="NumberAndSumOfTransactions1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NbOfNtries" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Sum" type="DecimalNumber"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="NumberAndSumOfTransactions4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NbOfNtries" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Sum" type="DecimalNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlNetNtry" type="AmountAndDirection35"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="OnLineCapability1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="OFLN"/>
+ <xs:enumeration value="ONLN"/>
+ <xs:enumeration value="SMON"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="OrganisationIdentification8">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="AnyBIC" type="AnyBICIdentifier"/>
+ <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="OriginalAndCurrentQuantities1">
+ <xs:sequence>
+ <xs:element name="FaceAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element name="AmtsdVal" type="ImpliedCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="OriginalBusinessQuery1">
+ <xs:sequence>
+ <xs:element name="MsgId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgNmId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CreDtTm" type="ISODateTime"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="OtherIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Sfx" type="Max16Text"/>
+ <xs:element name="Tp" type="IdentificationSource3Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="POIComponentType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="SOFT"/>
+ <xs:enumeration value="EMVK"/>
+ <xs:enumeration value="EMVO"/>
+ <xs:enumeration value="MRIT"/>
+ <xs:enumeration value="CHIT"/>
+ <xs:enumeration value="SECM"/>
+ <xs:enumeration value="PEDV"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="Pagination">
+ <xs:sequence>
+ <xs:element name="PgNb" type="Max5NumericText"/>
+ <xs:element name="LastPgInd" type="YesNoIndicator"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Party11Choice">
+ <xs:choice>
+ <xs:element name="OrgId" type="OrganisationIdentification8"/>
+ <xs:element name="PrvtId" type="PersonIdentification5"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="PartyIdentification43">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nm" type="Max140Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PstlAdr" type="PostalAddress6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Id" type="Party11Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtryOfRes" type="CountryCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtctDtls" type="ContactDetails2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="PartyType3Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="OPOI"/>
+ <xs:enumeration value="MERC"/>
+ <xs:enumeration value="ACCP"/>
+ <xs:enumeration value="ITAG"/>
+ <xs:enumeration value="ACQR"/>
+ <xs:enumeration value="CISS"/>
+ <xs:enumeration value="DLIS"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="PartyType4Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MERC"/>
+ <xs:enumeration value="ACCP"/>
+ <xs:enumeration value="ITAG"/>
+ <xs:enumeration value="ACQR"/>
+ <xs:enumeration value="CISS"/>
+ <xs:enumeration value="TAXH"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="PaymentCard4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="PlainCardData" type="PlainCardData1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardCtryCd" type="Exact3NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardBrnd" type="GenericIdentification1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlCardData" type="Max70Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PaymentReturnReason2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlBkTxCd" type="BankTransactionCodeStructure4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Orgtr" type="PartyIdentification43"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn" type="ReturnReason5Choice"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="AddtlInf" type="Max105Text"/>
+ </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="PersonIdentification5">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="DtAndPlcOfBirth" type="DateAndPlaceOfBirth"/>
+ <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="PlainCardData1">
+ <xs:sequence>
+ <xs:element name="PAN" type="Min8Max28NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardSeqNb" type="Min2Max3NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FctvDt" type="ISOYearMonth"/>
+ <xs:element name="XpryDt" type="ISOYearMonth"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SvcCd" type="Exact3NumericText"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="TrckData" type="TrackData1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardSctyCd" type="CardSecurityInformation1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PointOfInteraction1">
+ <xs:sequence>
+ <xs:element name="Id" type="GenericIdentification32"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SysNm" type="Max70Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="GrpId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Cpblties" type="PointOfInteractionCapabilities1"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Cmpnt" type="PointOfInteractionComponent1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PointOfInteractionCapabilities1">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="CardRdngCpblties" type="CardDataReading1Code"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="CrdhldrVrfctnCpblties" type="CardholderVerificationCapability1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OnLineCpblties" type="OnLineCapability1Code"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="DispCpblties" type="DisplayCapabilities1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PrtLineWidth" type="Max3NumericText"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PointOfInteractionComponent1">
+ <xs:sequence>
+ <xs:element name="POICmpntTp" type="POIComponentType1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ManfctrId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Mdl" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="VrsnNb" type="Max16Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SrlNb" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="ApprvlNb" type="Max70Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PostalAddress6">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="AdrTp" type="AddressType2Code"/>
+ <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="PstCd" type="Max16Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TwnNm" 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:complexType name="Price2">
+ <xs:sequence>
+ <xs:element name="Tp" type="YieldedOrValueType1Choice"/>
+ <xs:element name="Val" type="PriceRateOrAmountChoice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PriceRateOrAmountChoice">
+ <xs:choice>
+ <xs:element name="Rate" type="PercentageRate"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAnd13DecimalAmount"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="PriceValueType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="DISC"/>
+ <xs:enumeration value="PREM"/>
+ <xs:enumeration value="PARV"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="Product2">
+ <xs:sequence>
+ <xs:element name="PdctCd" type="Max70Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UnitOfMeasr" type="UnitOfMeasure1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PdctQty" type="DecimalNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UnitPric" type="ImpliedCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PdctAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TaxTp" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlPdctInf" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryAgent3">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Agt" type="BranchAndFinancialInstitutionIdentification5"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryBankTransactionCodeStructure1">
+ <xs:sequence>
+ <xs:element name="Cd" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryDate2">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Dt" type="DateAndDateTimeChoice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryParty3">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Pty" type="PartyIdentification43"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryPrice2">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Pric" type="ActiveOrHistoricCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryQuantity1">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Qty" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryReference1">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Ref" type="Max35Text"/>
+ </xs:sequence>
+ </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="Rate3">
+ <xs:sequence>
+ <xs:element name="Tp" type="RateType4Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="VldtyRg" type="CurrencyAndAmountRange2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RateType4Choice">
+ <xs:choice>
+ <xs:element name="Pctg" type="PercentageRate"/>
+ <xs:element name="Othr" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="ReferredDocumentInformation3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="ReferredDocumentType2"/>
+ <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="ReferredDocumentType1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="DocumentType5Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="ReferredDocumentType2">
+ <xs:sequence>
+ <xs:element name="CdOrPrtry" type="ReferredDocumentType1Choice"/>
+ <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="RemittanceInformation7">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Ustrd" type="Max140Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Strd" type="StructuredRemittanceInformation9"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RemittanceLocation2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtLctnMtd" type="RemittanceLocationMethod2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtLctnElctrncAdr" type="Max2048Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtLctnPstlAdr" type="NameAndAddress10"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="RemittanceLocationMethod2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="FAXI"/>
+ <xs:enumeration value="EDIC"/>
+ <xs:enumeration value="URID"/>
+ <xs:enumeration value="EMAL"/>
+ <xs:enumeration value="POST"/>
+ <xs:enumeration value="SMSM"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ReportEntry4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NtryRef" type="Max35Text"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RvslInd" type="TrueFalseIndicator"/>
+ <xs:element name="Sts" type="EntryStatus2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="BookgDt" type="DateAndDateTimeChoice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ValDt" type="DateAndDateTimeChoice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AcctSvcrRef" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Avlbty" type="CashBalanceAvailability2"/>
+ <xs:element name="BkTxCd" type="BankTransactionCodeStructure4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ComssnWvrInd" type="YesNoIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlInfInd" type="MessageIdentification2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AmtDtls" type="AmountAndCurrencyExchange3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Chrgs" type="Charges4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TechInptChanl" type="TechnicalInputChannel1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Intrst" type="TransactionInterest3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardTx" type="CardEntry1"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="NtryDtls" type="EntryDetails3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlNtryInf" type="Max500Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ReportingSource1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalReportingSource1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="ReturnReason5Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalReturnReason1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="SecuritiesAccount13">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="GenericIdentification20"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nm" type="Max70Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="SecurityIdentification14">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="ISIN" type="ISINIdentifier"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="OthrId" type="OtherIdentification1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Desc" type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="StructuredRemittanceInformation9">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="RfrdDocInf" type="ReferredDocumentInformation3"/>
+ <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="PartyIdentification43"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Invcee" type="PartyIdentification43"/>
+ <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="TaxAmount1">
+ <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="TaxRecordDetails1"/>
+ </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="TaxCharges2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rate" type="PercentageRate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxInformation3">
+ <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="AdmstnZn" 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="TaxRecord1"/>
+ </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="TaxPeriod1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Yr" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="TaxRecordPeriod1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrToDt" type="DatePeriodDetails"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxRecord1">
+ <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="TaxPeriod1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TaxAmt" type="TaxAmount1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlInf" type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxRecordDetails1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Prd" type="TaxPeriod1"/>
+ <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="TechnicalInputChannel1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalTechnicalInputChannel1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="TotalTransactions4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlNtries" type="NumberAndSumOfTransactions4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlCdtNtries" type="NumberAndSumOfTransactions1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlDbtNtries" type="NumberAndSumOfTransactions1"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="TtlNtriesPerBkTxCd" type="TotalsPerBankTransactionCode3"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TotalsPerBankTransactionCode3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NbOfNtries" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Sum" type="DecimalNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlNetNtry" type="AmountAndDirection35"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FcstInd" type="TrueFalseIndicator"/>
+ <xs:element name="BkTxCd" type="BankTransactionCodeStructure4"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Avlbty" type="CashBalanceAvailability2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TrackData1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TrckNb" type="Exact1NumericText"/>
+ <xs:element name="TrckVal" type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionAgents3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtrAgt" type="BranchAndFinancialInstitutionIdentification5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt2" type="BranchAndFinancialInstitutionIdentification5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt3" type="BranchAndFinancialInstitutionIdentification5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RcvgAgt" type="BranchAndFinancialInstitutionIdentification5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DlvrgAgt" type="BranchAndFinancialInstitutionIdentification5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IssgAgt" type="BranchAndFinancialInstitutionIdentification5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SttlmPlc" type="BranchAndFinancialInstitutionIdentification5"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Prtry" type="ProprietaryAgent3"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionDates2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="AccptncDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TradActvtyCtrctlSttlmDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TradDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrBkSttlmDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="StartDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="EndDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Prtry" type="ProprietaryDate2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionIdentifier1">
+ <xs:sequence>
+ <xs:element name="TxDtTm" type="ISODateTime"/>
+ <xs:element name="TxRef" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionInterest3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlIntrstAndTaxAmt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Rcrd" type="InterestRecord1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionParties3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="InitgPty" type="PartyIdentification43"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Dbtr" type="PartyIdentification43"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtrAcct" type="CashAccount24"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UltmtDbtr" type="PartyIdentification43"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Cdtr" type="PartyIdentification43"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrAcct" type="CashAccount24"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UltmtCdtr" type="PartyIdentification43"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TradgPty" type="PartyIdentification43"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Prtry" type="ProprietaryParty3"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionPrice3Choice">
+ <xs:choice>
+ <xs:element name="DealPric" type="Price2"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="Prtry" type="ProprietaryPrice2"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="TransactionQuantities2Choice">
+ <xs:choice>
+ <xs:element name="Qty" type="FinancialInstrumentQuantityChoice"/>
+ <xs:element name="OrgnlAndCurFaceAmt" type="OriginalAndCurrentQuantities1"/>
+ <xs:element name="Prtry" type="ProprietaryQuantity1"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="TransactionReferences3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AcctSvcrRef" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtInfId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstrId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="EndToEndId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MndtId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChqNb" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ClrSysRef" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AcctOwnrTxId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AcctSvcrTxId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MktInfrstrctrTxId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PrcgId" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Prtry" type="ProprietaryReference1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="TrueFalseIndicator">
+ <xs:restriction base="xs:boolean"/>
+ </xs:simpleType>
+ <xs:simpleType name="UnitOfMeasure1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="PIEC"/>
+ <xs:enumeration value="TONS"/>
+ <xs:enumeration value="FOOT"/>
+ <xs:enumeration value="GBGA"/>
+ <xs:enumeration value="USGA"/>
+ <xs:enumeration value="GRAM"/>
+ <xs:enumeration value="INCH"/>
+ <xs:enumeration value="KILO"/>
+ <xs:enumeration value="PUND"/>
+ <xs:enumeration value="METR"/>
+ <xs:enumeration value="CMET"/>
+ <xs:enumeration value="MMET"/>
+ <xs:enumeration value="LITR"/>
+ <xs:enumeration value="CELI"/>
+ <xs:enumeration value="MILI"/>
+ <xs:enumeration value="GBOU"/>
+ <xs:enumeration value="USOU"/>
+ <xs:enumeration value="GBQA"/>
+ <xs:enumeration value="USQA"/>
+ <xs:enumeration value="GBPI"/>
+ <xs:enumeration value="USPI"/>
+ <xs:enumeration value="MILE"/>
+ <xs:enumeration value="KMET"/>
+ <xs:enumeration value="YARD"/>
+ <xs:enumeration value="SQKI"/>
+ <xs:enumeration value="HECT"/>
+ <xs:enumeration value="ARES"/>
+ <xs:enumeration value="SMET"/>
+ <xs:enumeration value="SCMT"/>
+ <xs:enumeration value="SMIL"/>
+ <xs:enumeration value="SQMI"/>
+ <xs:enumeration value="SQYA"/>
+ <xs:enumeration value="SQFO"/>
+ <xs:enumeration value="SQIN"/>
+ <xs:enumeration value="ACRE"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="UserInterface2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MDSP"/>
+ <xs:enumeration value="CDSP"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="YesNoIndicator">
+ <xs:restriction base="xs:boolean"/>
+ </xs:simpleType>
+ <xs:complexType name="YieldedOrValueType1Choice">
+ <xs:choice>
+ <xs:element name="Yldd" type="YesNoIndicator"/>
+ <xs:element name="ValTp" type="PriceValueType1Code"/>
+ </xs:choice>
+ </xs:complexType>
+</xs:schema>
diff --git a/ebics/src/main/resources/xsd/camt.054.001.08.xsd b/ebics/src/main/resources/xsd/camt.054.001.08.xsd
new file mode 100644
index 00000000..10bb3e14
--- /dev/null
+++ b/ebics/src/main/resources/xsd/camt.054.001.08.xsd
@@ -0,0 +1,2009 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Generated by Standards Editor (build:R1.6.15) on 2019 Feb 14 10:58:06, ISO 20022 version : 2013-->
+<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:iso:std:iso:20022:tech:xsd:camt.054.001.08">
+ <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="AccountInterest4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="InterestType1Choice"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Rate" type="Rate4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrToDt" type="DateTimePeriod1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxCharges2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AccountNotification17">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="NtfctnPgntn" type="Pagination1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ElctrncSeqNb" type="Number"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RptgSeq" type="SequenceRange1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="LglSeqNb" type="Number"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CreDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrToDt" type="DateTimePeriod1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CpyDplctInd" type="CopyDuplicate1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RptgSrc" type="ReportingSource1Choice"/>
+ <xs:element name="Acct" type="CashAccount39"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdAcct" type="CashAccount38"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Intrst" type="AccountInterest4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxsSummry" type="TotalTransactions6"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Ntry" type="ReportEntry10"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlNtfctnInf" type="Max500Text"/>
+ </xs:sequence>
+ </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="ActiveOrHistoricCurrencyAnd13DecimalAmount_SimpleType">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="13"/>
+ <xs:totalDigits value="18"/>
+ <xs:minInclusive value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ActiveOrHistoricCurrencyAnd13DecimalAmount">
+ <xs:simpleContent>
+ <xs:extension base="ActiveOrHistoricCurrencyAnd13DecimalAmount_SimpleType">
+ <xs:attribute name="Ccy" type="ActiveOrHistoricCurrencyCode" use="required"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ <xs:simpleType name="ActiveOrHistoricCurrencyAndAmount_SimpleType">
+ <xs:restriction base="xs:decimal">
+ <xs: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:complexType name="ActiveOrHistoricCurrencyAndAmountRange2">
+ <xs:sequence>
+ <xs:element name="Amt" type="ImpliedCurrencyAmountRange1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtDbtInd" type="CreditDebitCode"/>
+ <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode"/>
+ </xs:sequence>
+ </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="AmountAndCurrencyExchange3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstdAmt" type="AmountAndCurrencyExchangeDetails3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxAmt" type="AmountAndCurrencyExchangeDetails3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CntrValAmt" type="AmountAndCurrencyExchangeDetails3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AnncdPstngAmt" type="AmountAndCurrencyExchangeDetails3"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="PrtryAmt" type="AmountAndCurrencyExchangeDetails4"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AmountAndCurrencyExchangeDetails3">
+ <xs:sequence>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CcyXchg" type="CurrencyExchange5"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AmountAndCurrencyExchangeDetails4">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CcyXchg" type="CurrencyExchange5"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AmountAndDirection35">
+ <xs:sequence>
+ <xs:element name="Amt" type="NonNegativeDecimalNumber"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AmountRangeBoundary1">
+ <xs:sequence>
+ <xs:element name="BdryAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element name="Incl" type="YesNoIndicator"/>
+ </xs:sequence>
+ </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="AttendanceContext1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="ATTD"/>
+ <xs:enumeration value="SATT"/>
+ <xs:enumeration value="UATT"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="AuthenticationEntity1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="ICCD"/>
+ <xs:enumeration value="AGNT"/>
+ <xs:enumeration value="MERC"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="AuthenticationMethod1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="UKNW"/>
+ <xs:enumeration value="BYPS"/>
+ <xs:enumeration value="NPIN"/>
+ <xs:enumeration value="FPIN"/>
+ <xs:enumeration value="CPSG"/>
+ <xs:enumeration value="PPSG"/>
+ <xs:enumeration value="MANU"/>
+ <xs:enumeration value="MERC"/>
+ <xs:enumeration value="SCRT"/>
+ <xs:enumeration value="SNCT"/>
+ <xs:enumeration value="SCNL"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="BICFIDec2014Identifier">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z0-9]{4,4}[A-Z]{2,2}[A-Z0-9]{2,2}([A-Z0-9]{3,3}){0,1}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="BankToCustomerDebitCreditNotificationV08">
+ <xs:sequence>
+ <xs:element name="GrpHdr" type="GroupHeader81"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="Ntfctn" type="AccountNotification17"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="SplmtryData" type="SupplementaryData1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="BankTransactionCodeStructure4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Domn" type="BankTransactionCodeStructure5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Prtry" type="ProprietaryBankTransactionCodeStructure1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="BankTransactionCodeStructure5">
+ <xs:sequence>
+ <xs:element name="Cd" type="ExternalBankTransactionDomain1Code"/>
+ <xs:element name="Fmly" type="BankTransactionCodeStructure6"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="BankTransactionCodeStructure6">
+ <xs:sequence>
+ <xs:element name="Cd" type="ExternalBankTransactionFamily1Code"/>
+ <xs:element name="SubFmlyCd" type="ExternalBankTransactionSubFamily1Code"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="BaseOneRate">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="10"/>
+ <xs:totalDigits value="11"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="BatchInformation2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtInfId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="NbOfTxs" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlAmt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtDbtInd" type="CreditDebitCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <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:simpleType name="CSCManagement1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="PRST"/>
+ <xs:enumeration value="BYPS"/>
+ <xs:enumeration value="UNRD"/>
+ <xs:enumeration value="NCSC"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CardAggregated2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlSvc" type="CardPaymentServiceType2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxCtgy" type="ExternalCardTransactionCategory1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SaleRcncltnId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SeqNbRg" type="CardSequenceNumberRange1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxDtRg" type="DateOrDateTimePeriod1Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="CardDataReading1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="TAGC"/>
+ <xs:enumeration value="PHYS"/>
+ <xs:enumeration value="BRCD"/>
+ <xs:enumeration value="MGST"/>
+ <xs:enumeration value="CICC"/>
+ <xs:enumeration value="DFLE"/>
+ <xs:enumeration value="CTLS"/>
+ <xs:enumeration value="ECTL"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CardEntry4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Card" type="PaymentCard4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="POI" type="PointOfInteraction1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AggtdNtry" type="CardAggregated2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PrePdAcct" type="CashAccount38"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CardIndividualTransaction2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="ICCRltdData" type="Max1025Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtCntxt" type="PaymentContext3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlSvc" type="CardPaymentServiceType2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxCtgy" type="ExternalCardTransactionCategory1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SaleRcncltnId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SaleRefNb" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RePresntmntRsn" type="ExternalRePresentmentReason1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SeqNb" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxId" type="TransactionIdentifier1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Pdct" type="Product2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="VldtnDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="VldtnSeqNb" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="CardPaymentServiceType2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="AGGR"/>
+ <xs:enumeration value="DCCV"/>
+ <xs:enumeration value="GRTT"/>
+ <xs:enumeration value="INSP"/>
+ <xs:enumeration value="LOYT"/>
+ <xs:enumeration value="NRES"/>
+ <xs:enumeration value="PUCO"/>
+ <xs:enumeration value="RECP"/>
+ <xs:enumeration value="SOAF"/>
+ <xs:enumeration value="UNAF"/>
+ <xs:enumeration value="VCAU"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CardSecurityInformation1">
+ <xs:sequence>
+ <xs:element name="CSCMgmt" type="CSCManagement1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CSCVal" type="Min3Max4NumericText"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CardSequenceNumberRange1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrstTx" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="LastTx" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CardTransaction17">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Card" type="PaymentCard4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="POI" type="PointOfInteraction1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tx" type="CardTransaction3Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PrePdAcct" type="CashAccount38"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CardTransaction3Choice">
+ <xs:choice>
+ <xs:element name="Aggtd" type="CardAggregated2"/>
+ <xs:element name="Indv" type="CardIndividualTransaction2"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="CardholderAuthentication2">
+ <xs:sequence>
+ <xs:element name="AuthntcnMtd" type="AuthenticationMethod1Code"/>
+ <xs:element name="AuthntcnNtty" type="AuthenticationEntity1Code"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="CardholderVerificationCapability1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MNSG"/>
+ <xs:enumeration value="NPIN"/>
+ <xs:enumeration value="FCPN"/>
+ <xs:enumeration value="FEPN"/>
+ <xs:enumeration value="FDSG"/>
+ <xs:enumeration value="FBIO"/>
+ <xs:enumeration value="MNVR"/>
+ <xs:enumeration value="FBIG"/>
+ <xs:enumeration value="APKI"/>
+ <xs:enumeration value="PKIS"/>
+ <xs:enumeration value="CHDT"/>
+ <xs:enumeration value="SCEC"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CashAccount38">
+ <xs:sequence>
+ <xs:element 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="CashAccount39">
+ <xs:sequence>
+ <xs:element 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:element maxOccurs="1" minOccurs="0" name="Ownr" type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Svcr" type="BranchAndFinancialInstitutionIdentification6"/>
+ </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="CashAvailability1">
+ <xs:sequence>
+ <xs:element name="Dt" type="CashAvailabilityDate1Choice"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CashAvailabilityDate1Choice">
+ <xs:choice>
+ <xs:element name="NbOfDays" type="Max15PlusSignedNumericText"/>
+ <xs:element name="ActlDt" type="ISODate"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="CashDeposit1">
+ <xs:sequence>
+ <xs:element name="NoteDnmtn" type="ActiveCurrencyAndAmount"/>
+ <xs:element name="NbOfNotes" type="Max15NumericText"/>
+ <xs:element name="Amt" type="ActiveCurrencyAndAmount"/>
+ </xs:sequence>
+ </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:simpleType name="ChargeIncludedIndicator">
+ <xs:restriction base="xs:boolean"/>
+ </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="Charges6">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlChrgsAndTaxAmt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Rcrd" type="ChargesRecord3"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ChargesRecord3">
+ <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="ChrgInclInd" type="ChargeIncludedIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="ChargeType3Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rate" type="PercentageRate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Br" type="ChargeBearerType1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Agt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxCharges2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <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="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="CopyDuplicate1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CODU"/>
+ <xs:enumeration value="COPY"/>
+ <xs:enumeration value="DUPL"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CorporateAction9">
+ <xs:sequence>
+ <xs:element name="EvtTp" type="Max35Text"/>
+ <xs:element name="EvtId" type="Max35Text"/>
+ </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="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="CurrencyExchange5">
+ <xs:sequence>
+ <xs:element name="SrcCcy" type="ActiveOrHistoricCurrencyCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TrgtCcy" type="ActiveOrHistoricCurrencyCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UnitCcy" type="ActiveOrHistoricCurrencyCode"/>
+ <xs:element name="XchgRate" type="BaseOneRate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtrctId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="QtnDt" type="ISODateTime"/>
+ </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="DateOrDateTimePeriod1Choice">
+ <xs:choice>
+ <xs:element name="Dt" type="DatePeriod2"/>
+ <xs:element name="DtTm" type="DateTimePeriod1"/>
+ </xs:choice>
+ </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:complexType name="DateTimePeriod1">
+ <xs:sequence>
+ <xs:element name="FrDtTm" type="ISODateTime"/>
+ <xs:element name="ToDtTm" type="ISODateTime"/>
+ </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="DisplayCapabilities1">
+ <xs:sequence>
+ <xs:element name="DispTp" type="UserInterface2Code"/>
+ <xs:element name="NbOfLines" type="Max3NumericText"/>
+ <xs:element name="LineWidth" type="Max3NumericText"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Document">
+ <xs:sequence>
+ <xs:element name="BkToCstmrDbtCdtNtfctn" type="BankToCustomerDebitCreditNotificationV08"/>
+ </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="EntryDetails9">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Btch" type="BatchInformation2"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="TxDtls" type="EntryTransaction10"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="EntryStatus1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalEntryStatus1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="EntryTransaction10">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Refs" type="TransactionReferences6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtDbtInd" type="CreditDebitCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AmtDtls" type="AmountAndCurrencyExchange3"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Avlbty" type="CashAvailability1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="BkTxCd" type="BankTransactionCodeStructure4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Chrgs" type="Charges6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Intrst" type="TransactionInterest4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdPties" type="TransactionParties6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdAgts" type="TransactionAgents5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="LclInstrm" type="LocalInstrument2Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Purp" type="Purpose2Choice"/>
+ <xs:element maxOccurs="10" minOccurs="0" name="RltdRmtInf" type="RemittanceLocation7"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtInf" type="RemittanceInformation16"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdDts" type="TransactionDates3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdPric" type="TransactionPrice4Choice"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="RltdQties" type="TransactionQuantities3Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FinInstrmId" type="SecurityIdentification19"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxInformation8"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RtrInf" type="PaymentReturnReason5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CorpActn" type="CorporateAction9"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SfkpgAcct" type="SecuritiesAccount19"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="CshDpst" type="CashDeposit1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardTx" type="CardTransaction17"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlTxInf" type="Max500Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="SplmtryData" type="SupplementaryData1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="Exact1NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Exact3NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{3}"/>
+ </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="ExternalBankTransactionDomain1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalBankTransactionFamily1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalBankTransactionSubFamily1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalCardTransactionCategory1Code">
+ <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="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="ExternalEntryStatus1Code">
+ <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="ExternalFinancialInstrumentIdentificationType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalGarnishmentType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalLocalInstrument1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="35"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalOrganisationIdentification1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalPersonIdentification1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalProxyAccountType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalPurpose1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalRePresentmentReason1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalReportingSource1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalReturnReason1Code">
+ <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:simpleType name="ExternalTechnicalInputChannel1Code">
+ <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="FinancialInstrumentQuantity1Choice">
+ <xs:choice>
+ <xs:element name="Unit" type="DecimalNumber"/>
+ <xs:element name="FaceAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element name="AmtsdVal" type="ImpliedCurrencyAndAmount"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="FromToAmountRange1">
+ <xs:sequence>
+ <xs:element name="FrAmt" type="AmountRangeBoundary1"/>
+ <xs:element name="ToAmt" type="AmountRangeBoundary1"/>
+ </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="GenericIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SchmeNm" type="Max35Text"/>
+ <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="GenericIdentification32">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="PartyType3Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr" type="PartyType4Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ShrtNm" 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="GroupHeader81">
+ <xs:sequence>
+ <xs:element name="MsgId" type="Max35Text"/>
+ <xs:element name="CreDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgRcpt" type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgPgntn" type="Pagination1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlBizQry" type="OriginalBusinessQuery1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlInf" type="Max500Text"/>
+ </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="ISINOct2015Identifier">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z]{2,2}[A-Z0-9]{9,9}[0-9]{1,1}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ISO2ALanguageCode">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[a-z]{2,2}"/>
+ </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="ISOYearMonth">
+ <xs:restriction base="xs:gYearMonth"/>
+ </xs:simpleType>
+ <xs:complexType name="IdentificationSource3Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalFinancialInstrumentIdentificationType1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="ImpliedCurrencyAmountRange1Choice">
+ <xs:choice>
+ <xs:element name="FrAmt" type="AmountRangeBoundary1"/>
+ <xs:element name="ToAmt" type="AmountRangeBoundary1"/>
+ <xs:element name="FrToAmt" type="FromToAmountRange1"/>
+ <xs:element name="EQAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element name="NEQAmt" type="ImpliedCurrencyAndAmount"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="ImpliedCurrencyAndAmount">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="5"/>
+ <xs:totalDigits value="18"/>
+ <xs:minInclusive value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="InterestRecord2">
+ <xs:sequence>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="InterestType1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rate" type="Rate4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrToDt" type="DateTimePeriod1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxCharges2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="InterestType1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="InterestType1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="InterestType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="INDY"/>
+ <xs:enumeration value="OVRN"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="LEIIdentifier">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z0-9]{18,18}[0-9]{2,2}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="LocalInstrument2Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalLocalInstrument1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="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="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="Max15PlusSignedNumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[\+]{0,1}[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="Max3NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{1,3}"/>
+ </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="Max500Text">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="500"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max5NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{1,5}"/>
+ </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:complexType name="MessageIdentification2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgNmId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgId" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="Min2Max3NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{2,3}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Min3Max4NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{3,4}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Min8Max28NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{8,28}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="NameAndAddress16">
+ <xs:sequence>
+ <xs:element name="Nm" type="Max140Text"/>
+ <xs:element name="Adr" type="PostalAddress24"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="NamePrefix2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="DOCT"/>
+ <xs:enumeration value="MADM"/>
+ <xs:enumeration value="MISS"/>
+ <xs:enumeration value="MIST"/>
+ <xs:enumeration value="MIKS"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="NonNegativeDecimalNumber">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="17"/>
+ <xs:totalDigits value="18"/>
+ <xs:minInclusive value="0"/>
+ </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="NumberAndSumOfTransactions1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NbOfNtries" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Sum" type="DecimalNumber"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="NumberAndSumOfTransactions4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NbOfNtries" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Sum" type="DecimalNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlNetNtry" type="AmountAndDirection35"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="OnLineCapability1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="OFLN"/>
+ <xs:enumeration value="ONLN"/>
+ <xs:enumeration value="SMON"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <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="OriginalAndCurrentQuantities1">
+ <xs:sequence>
+ <xs:element name="FaceAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element name="AmtsdVal" type="ImpliedCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="OriginalBusinessQuery1">
+ <xs:sequence>
+ <xs:element name="MsgId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgNmId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CreDtTm" type="ISODateTime"/>
+ </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="OtherIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Sfx" type="Max16Text"/>
+ <xs:element name="Tp" type="IdentificationSource3Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="POIComponentType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="SOFT"/>
+ <xs:enumeration value="EMVK"/>
+ <xs:enumeration value="EMVO"/>
+ <xs:enumeration value="MRIT"/>
+ <xs:enumeration value="CHIT"/>
+ <xs:enumeration value="SECM"/>
+ <xs:enumeration value="PEDV"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="Pagination1">
+ <xs:sequence>
+ <xs:element name="PgNb" type="Max5NumericText"/>
+ <xs:element name="LastPgInd" type="YesNoIndicator"/>
+ </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="PartyType3Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="OPOI"/>
+ <xs:enumeration value="MERC"/>
+ <xs:enumeration value="ACCP"/>
+ <xs:enumeration value="ITAG"/>
+ <xs:enumeration value="ACQR"/>
+ <xs:enumeration value="CISS"/>
+ <xs:enumeration value="DLIS"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="PartyType4Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MERC"/>
+ <xs:enumeration value="ACCP"/>
+ <xs:enumeration value="ITAG"/>
+ <xs:enumeration value="ACQR"/>
+ <xs:enumeration value="CISS"/>
+ <xs:enumeration value="TAXH"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="PaymentCard4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="PlainCardData" type="PlainCardData1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardCtryCd" type="Exact3NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardBrnd" type="GenericIdentification1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlCardData" type="Max70Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PaymentContext3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardPres" type="TrueFalseIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CrdhldrPres" type="TrueFalseIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OnLineCntxt" type="TrueFalseIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AttndncCntxt" type="AttendanceContext1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxEnvt" type="TransactionEnvironment1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxChanl" type="TransactionChannel1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AttndntMsgCpbl" type="TrueFalseIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AttndntLang" type="ISO2ALanguageCode"/>
+ <xs:element name="CardDataNtryMd" type="CardDataReading1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FllbckInd" type="TrueFalseIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AuthntcnMtd" type="CardholderAuthentication2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PaymentReturnReason5">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlBkTxCd" type="BankTransactionCodeStructure4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Orgtr" type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn" type="ReturnReason5Choice"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="AddtlInf" type="Max105Text"/>
+ </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="PlainCardData1">
+ <xs:sequence>
+ <xs:element name="PAN" type="Min8Max28NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardSeqNb" type="Min2Max3NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FctvDt" type="ISOYearMonth"/>
+ <xs:element name="XpryDt" type="ISOYearMonth"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SvcCd" type="Exact3NumericText"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="TrckData" type="TrackData1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardSctyCd" type="CardSecurityInformation1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PointOfInteraction1">
+ <xs:sequence>
+ <xs:element name="Id" type="GenericIdentification32"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SysNm" type="Max70Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="GrpId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Cpblties" type="PointOfInteractionCapabilities1"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Cmpnt" type="PointOfInteractionComponent1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PointOfInteractionCapabilities1">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="CardRdngCpblties" type="CardDataReading1Code"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="CrdhldrVrfctnCpblties" type="CardholderVerificationCapability1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OnLineCpblties" type="OnLineCapability1Code"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="DispCpblties" type="DisplayCapabilities1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PrtLineWidth" type="Max3NumericText"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PointOfInteractionComponent1">
+ <xs:sequence>
+ <xs:element name="POICmpntTp" type="POIComponentType1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ManfctrId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Mdl" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="VrsnNb" type="Max16Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SrlNb" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="ApprvlNb" type="Max70Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <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:complexType name="Price7">
+ <xs:sequence>
+ <xs:element name="Tp" type="YieldedOrValueType1Choice"/>
+ <xs:element name="Val" type="PriceRateOrAmount3Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PriceRateOrAmount3Choice">
+ <xs:choice>
+ <xs:element name="Rate" type="PercentageRate"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAnd13DecimalAmount"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="PriceValueType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="DISC"/>
+ <xs:enumeration value="PREM"/>
+ <xs:enumeration value="PARV"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="Product2">
+ <xs:sequence>
+ <xs:element name="PdctCd" type="Max70Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UnitOfMeasr" type="UnitOfMeasure1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PdctQty" type="DecimalNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UnitPric" type="ImpliedCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PdctAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TaxTp" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlPdctInf" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryAgent4">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Agt" type="BranchAndFinancialInstitutionIdentification6"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryBankTransactionCodeStructure1">
+ <xs:sequence>
+ <xs:element name="Cd" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryDate3">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Dt" type="DateAndDateTime2Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryParty5">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Pty" type="Party40Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryPrice2">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Pric" type="ActiveOrHistoricCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryQuantity1">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Qty" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryReference1">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Ref" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <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="Rate4">
+ <xs:sequence>
+ <xs:element name="Tp" type="RateType4Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="VldtyRg" type="ActiveOrHistoricCurrencyAndAmountRange2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RateType4Choice">
+ <xs:choice>
+ <xs:element name="Pctg" type="PercentageRate"/>
+ <xs:element name="Othr" 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="RemittanceInformation16">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Ustrd" type="Max140Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Strd" type="StructuredRemittanceInformation16"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RemittanceLocation7">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtId" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="RmtLctnDtls" type="RemittanceLocationData1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RemittanceLocationData1">
+ <xs:sequence>
+ <xs:element name="Mtd" type="RemittanceLocationMethod2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ElctrncAdr" type="Max2048Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PstlAdr" type="NameAndAddress16"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="RemittanceLocationMethod2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="FAXI"/>
+ <xs:enumeration value="EDIC"/>
+ <xs:enumeration value="URID"/>
+ <xs:enumeration value="EMAL"/>
+ <xs:enumeration value="POST"/>
+ <xs:enumeration value="SMSM"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ReportEntry10">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NtryRef" type="Max35Text"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RvslInd" type="TrueFalseIndicator"/>
+ <xs:element name="Sts" type="EntryStatus1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="BookgDt" type="DateAndDateTime2Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ValDt" type="DateAndDateTime2Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AcctSvcrRef" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Avlbty" type="CashAvailability1"/>
+ <xs:element name="BkTxCd" type="BankTransactionCodeStructure4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ComssnWvrInd" type="YesNoIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlInfInd" type="MessageIdentification2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AmtDtls" type="AmountAndCurrencyExchange3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Chrgs" type="Charges6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TechInptChanl" type="TechnicalInputChannel1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Intrst" type="TransactionInterest4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardTx" type="CardEntry4"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="NtryDtls" type="EntryDetails9"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlNtryInf" type="Max500Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ReportingSource1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalReportingSource1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="ReturnReason5Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalReturnReason1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="SecuritiesAccount19">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="GenericIdentification30"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nm" type="Max70Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="SecurityIdentification19">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="ISIN" type="ISINOct2015Identifier"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="OthrId" type="OtherIdentification1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Desc" type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="SequenceRange1">
+ <xs:sequence>
+ <xs:element name="FrSeq" type="Max35Text"/>
+ <xs:element name="ToSeq" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="SequenceRange1Choice">
+ <xs:choice>
+ <xs:element name="FrSeq" type="Max35Text"/>
+ <xs:element name="ToSeq" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="FrToSeq" type="SequenceRange1"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="EQSeq" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="NEQSeq" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="StructuredRemittanceInformation16">
+ <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="TaxInformation7"/>
+ <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="TaxAmount2">
+ <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="TaxRecordDetails2"/>
+ </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="TaxCharges2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rate" type="PercentageRate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxInformation7">
+ <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="TaxRecord2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxInformation8">
+ <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="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="TaxRecord2"/>
+ </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="TaxPeriod2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Yr" type="ISODate"/>
+ <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="TaxRecord2">
+ <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="TaxPeriod2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TaxAmt" type="TaxAmount2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlInf" type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TaxRecordDetails2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Prd" type="TaxPeriod2"/>
+ <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="TechnicalInputChannel1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalTechnicalInputChannel1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="TotalTransactions6">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlNtries" type="NumberAndSumOfTransactions4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlCdtNtries" type="NumberAndSumOfTransactions1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlDbtNtries" type="NumberAndSumOfTransactions1"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="TtlNtriesPerBkTxCd" type="TotalsPerBankTransactionCode5"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TotalsPerBankTransactionCode5">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NbOfNtries" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Sum" type="DecimalNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlNetNtry" type="AmountAndDirection35"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtNtries" type="NumberAndSumOfTransactions1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtNtries" type="NumberAndSumOfTransactions1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FcstInd" type="TrueFalseIndicator"/>
+ <xs:element name="BkTxCd" type="BankTransactionCodeStructure4"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Avlbty" type="CashAvailability1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Dt" type="DateAndDateTime2Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TrackData1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TrckNb" type="Exact1NumericText"/>
+ <xs:element name="TrckVal" type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionAgents5">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstgAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstdAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtrAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt2" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt3" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RcvgAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DlvrgAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IssgAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SttlmPlc" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Prtry" type="ProprietaryAgent4"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="TransactionChannel1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MAIL"/>
+ <xs:enumeration value="TLPH"/>
+ <xs:enumeration value="ECOM"/>
+ <xs:enumeration value="TVPY"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="TransactionDates3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="AccptncDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TradActvtyCtrctlSttlmDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TradDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrBkSttlmDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="StartDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="EndDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Prtry" type="ProprietaryDate3"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="TransactionEnvironment1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MERC"/>
+ <xs:enumeration value="PRIV"/>
+ <xs:enumeration value="PUBL"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="TransactionIdentifier1">
+ <xs:sequence>
+ <xs:element name="TxDtTm" type="ISODateTime"/>
+ <xs:element name="TxRef" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionInterest4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlIntrstAndTaxAmt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Rcrd" type="InterestRecord2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionParties6">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="InitgPty" type="Party40Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Dbtr" type="Party40Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtrAcct" type="CashAccount38"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UltmtDbtr" type="Party40Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Cdtr" type="Party40Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrAcct" type="CashAccount38"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UltmtCdtr" type="Party40Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TradgPty" type="Party40Choice"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Prtry" type="ProprietaryParty5"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionPrice4Choice">
+ <xs:choice>
+ <xs:element name="DealPric" type="Price7"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="Prtry" type="ProprietaryPrice2"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="TransactionQuantities3Choice">
+ <xs:choice>
+ <xs:element name="Qty" type="FinancialInstrumentQuantity1Choice"/>
+ <xs:element name="OrgnlAndCurFaceAmt" type="OriginalAndCurrentQuantities1"/>
+ <xs:element name="Prtry" type="ProprietaryQuantity1"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="TransactionReferences6">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AcctSvcrRef" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtInfId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstrId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="EndToEndId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UETR" type="UUIDv4Identifier"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MndtId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChqNb" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ClrSysRef" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AcctOwnrTxId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AcctSvcrTxId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MktInfrstrctrTxId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PrcgId" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Prtry" type="ProprietaryReference1"/>
+ </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:simpleType name="UnitOfMeasure1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="PIEC"/>
+ <xs:enumeration value="TONS"/>
+ <xs:enumeration value="FOOT"/>
+ <xs:enumeration value="GBGA"/>
+ <xs:enumeration value="USGA"/>
+ <xs:enumeration value="GRAM"/>
+ <xs:enumeration value="INCH"/>
+ <xs:enumeration value="KILO"/>
+ <xs:enumeration value="PUND"/>
+ <xs:enumeration value="METR"/>
+ <xs:enumeration value="CMET"/>
+ <xs:enumeration value="MMET"/>
+ <xs:enumeration value="LITR"/>
+ <xs:enumeration value="CELI"/>
+ <xs:enumeration value="MILI"/>
+ <xs:enumeration value="GBOU"/>
+ <xs:enumeration value="USOU"/>
+ <xs:enumeration value="GBQA"/>
+ <xs:enumeration value="USQA"/>
+ <xs:enumeration value="GBPI"/>
+ <xs:enumeration value="USPI"/>
+ <xs:enumeration value="MILE"/>
+ <xs:enumeration value="KMET"/>
+ <xs:enumeration value="YARD"/>
+ <xs:enumeration value="SQKI"/>
+ <xs:enumeration value="HECT"/>
+ <xs:enumeration value="ARES"/>
+ <xs:enumeration value="SMET"/>
+ <xs:enumeration value="SCMT"/>
+ <xs:enumeration value="SMIL"/>
+ <xs:enumeration value="SQMI"/>
+ <xs:enumeration value="SQYA"/>
+ <xs:enumeration value="SQFO"/>
+ <xs:enumeration value="SQIN"/>
+ <xs:enumeration value="ACRE"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="UserInterface2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MDSP"/>
+ <xs:enumeration value="CDSP"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="YesNoIndicator">
+ <xs:restriction base="xs:boolean"/>
+ </xs:simpleType>
+ <xs:complexType name="YieldedOrValueType1Choice">
+ <xs:choice>
+ <xs:element name="Yldd" type="YesNoIndicator"/>
+ <xs:element name="ValTp" type="PriceValueType1Code"/>
+ </xs:choice>
+ </xs:complexType>
+</xs:schema>
diff --git a/ebics/src/main/resources/xsd/camt.054.001.11.xsd b/ebics/src/main/resources/xsd/camt.054.001.11.xsd
new file mode 100644
index 00000000..3325bcaf
--- /dev/null
+++ b/ebics/src/main/resources/xsd/camt.054.001.11.xsd
@@ -0,0 +1,2078 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Generated by Standards Editor (build:R1.6.22) on 2023 Feb 09 10:13:07, ISO 20022 version : 2013-->
+<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.11" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:iso:std:iso:20022:tech:xsd:camt.054.001.11">
+ <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="AccountInterest4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="InterestType1Choice"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Rate" type="Rate4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrToDt" type="DateTimePeriod1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxCharges2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AccountNotification21">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="NtfctnPgntn" type="Pagination1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ElctrncSeqNb" type="Number"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RptgSeq" type="SequenceRange1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="LglSeqNb" type="Number"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CreDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrToDt" type="DateTimePeriod1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CpyDplctInd" type="CopyDuplicate1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RptgSrc" type="ReportingSource1Choice"/>
+ <xs:element name="Acct" type="CashAccount41"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdAcct" type="CashAccount40"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Intrst" type="AccountInterest4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxsSummry" type="TotalTransactions6"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Ntry" type="ReportEntry13"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlNtfctnInf" type="Max500Text"/>
+ </xs:sequence>
+ </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="ActiveOrHistoricCurrencyAnd13DecimalAmount_SimpleType">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="13"/>
+ <xs:totalDigits value="18"/>
+ <xs:minInclusive value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ActiveOrHistoricCurrencyAnd13DecimalAmount">
+ <xs:simpleContent>
+ <xs:extension base="ActiveOrHistoricCurrencyAnd13DecimalAmount_SimpleType">
+ <xs:attribute name="Ccy" type="ActiveOrHistoricCurrencyCode" use="required"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ <xs:simpleType name="ActiveOrHistoricCurrencyAndAmount_SimpleType">
+ <xs:restriction base="xs:decimal">
+ <xs: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:complexType name="ActiveOrHistoricCurrencyAndAmountRange2">
+ <xs:sequence>
+ <xs:element name="Amt" type="ImpliedCurrencyAmountRange1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtDbtInd" type="CreditDebitCode"/>
+ <xs:element name="Ccy" type="ActiveOrHistoricCurrencyCode"/>
+ </xs:sequence>
+ </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="AmountAndCurrencyExchange4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstdAmt" type="AmountAndCurrencyExchangeDetails5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxAmt" type="AmountAndCurrencyExchangeDetails5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CntrValAmt" type="AmountAndCurrencyExchangeDetails5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AnncdPstngAmt" type="AmountAndCurrencyExchangeDetails5"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="PrtryAmt" type="AmountAndCurrencyExchangeDetails6"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AmountAndCurrencyExchangeDetails5">
+ <xs:sequence>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CcyXchg" type="CurrencyExchange24"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AmountAndCurrencyExchangeDetails6">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CcyXchg" type="CurrencyExchange24"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AmountAndDirection35">
+ <xs:sequence>
+ <xs:element name="Amt" type="NonNegativeDecimalNumber"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AmountRangeBoundary1">
+ <xs:sequence>
+ <xs:element name="BdryAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element name="Incl" type="YesNoIndicator"/>
+ </xs:sequence>
+ </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="AttendanceContext1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="ATTD"/>
+ <xs:enumeration value="SATT"/>
+ <xs:enumeration value="UATT"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="AuthenticationEntity1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="ICCD"/>
+ <xs:enumeration value="AGNT"/>
+ <xs:enumeration value="MERC"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="AuthenticationMethod1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="UKNW"/>
+ <xs:enumeration value="BYPS"/>
+ <xs:enumeration value="NPIN"/>
+ <xs:enumeration value="FPIN"/>
+ <xs:enumeration value="CPSG"/>
+ <xs:enumeration value="PPSG"/>
+ <xs:enumeration value="MANU"/>
+ <xs:enumeration value="MERC"/>
+ <xs:enumeration value="SCRT"/>
+ <xs:enumeration value="SNCT"/>
+ <xs:enumeration value="SCNL"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="BICFIDec2014Identifier">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z0-9]{4,4}[A-Z]{2,2}[A-Z0-9]{2,2}([A-Z0-9]{3,3}){0,1}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="BankToCustomerDebitCreditNotificationV11">
+ <xs:sequence>
+ <xs:element name="GrpHdr" type="GroupHeader81"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="Ntfctn" type="AccountNotification21"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="SplmtryData" type="SupplementaryData1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="BankTransactionCodeStructure4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Domn" type="BankTransactionCodeStructure5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Prtry" type="ProprietaryBankTransactionCodeStructure1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="BankTransactionCodeStructure5">
+ <xs:sequence>
+ <xs:element name="Cd" type="ExternalBankTransactionDomain1Code"/>
+ <xs:element name="Fmly" type="BankTransactionCodeStructure6"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="BankTransactionCodeStructure6">
+ <xs:sequence>
+ <xs:element name="Cd" type="ExternalBankTransactionFamily1Code"/>
+ <xs:element name="SubFmlyCd" type="ExternalBankTransactionSubFamily1Code"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="BaseOneRate">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="10"/>
+ <xs:totalDigits value="11"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="BatchInformation2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtInfId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="NbOfTxs" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlAmt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtDbtInd" type="CreditDebitCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <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:simpleType name="CSCManagement1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="PRST"/>
+ <xs:enumeration value="BYPS"/>
+ <xs:enumeration value="UNRD"/>
+ <xs:enumeration value="NCSC"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CardAggregated2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlSvc" type="CardPaymentServiceType2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxCtgy" type="ExternalCardTransactionCategory1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SaleRcncltnId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SeqNbRg" type="CardSequenceNumberRange1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxDtRg" type="DateOrDateTimePeriod1Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="CardDataReading1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="TAGC"/>
+ <xs:enumeration value="PHYS"/>
+ <xs:enumeration value="BRCD"/>
+ <xs:enumeration value="MGST"/>
+ <xs:enumeration value="CICC"/>
+ <xs:enumeration value="DFLE"/>
+ <xs:enumeration value="CTLS"/>
+ <xs:enumeration value="ECTL"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CardEntry5">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Card" type="PaymentCard4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="POI" type="PointOfInteraction1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AggtdNtry" type="CardAggregated2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PrePdAcct" type="CashAccount40"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CardIndividualTransaction2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="ICCRltdData" type="Max1025Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtCntxt" type="PaymentContext3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlSvc" type="CardPaymentServiceType2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxCtgy" type="ExternalCardTransactionCategory1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SaleRcncltnId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SaleRefNb" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RePresntmntRsn" type="ExternalRePresentmentReason1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SeqNb" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxId" type="TransactionIdentifier1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Pdct" type="Product2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="VldtnDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="VldtnSeqNb" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="CardPaymentServiceType2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="AGGR"/>
+ <xs:enumeration value="DCCV"/>
+ <xs:enumeration value="GRTT"/>
+ <xs:enumeration value="INSP"/>
+ <xs:enumeration value="LOYT"/>
+ <xs:enumeration value="NRES"/>
+ <xs:enumeration value="PUCO"/>
+ <xs:enumeration value="RECP"/>
+ <xs:enumeration value="SOAF"/>
+ <xs:enumeration value="UNAF"/>
+ <xs:enumeration value="VCAU"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CardSecurityInformation1">
+ <xs:sequence>
+ <xs:element name="CSCMgmt" type="CSCManagement1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CSCVal" type="Min3Max4NumericText"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CardSequenceNumberRange1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrstTx" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="LastTx" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CardTransaction18">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Card" type="PaymentCard4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="POI" type="PointOfInteraction1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tx" type="CardTransaction3Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PrePdAcct" type="CashAccount40"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CardTransaction3Choice">
+ <xs:choice>
+ <xs:element name="Aggtd" type="CardAggregated2"/>
+ <xs:element name="Indv" type="CardIndividualTransaction2"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="CardholderAuthentication2">
+ <xs:sequence>
+ <xs:element name="AuthntcnMtd" type="AuthenticationMethod1Code"/>
+ <xs:element name="AuthntcnNtty" type="AuthenticationEntity1Code"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="CardholderVerificationCapability1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MNSG"/>
+ <xs:enumeration value="NPIN"/>
+ <xs:enumeration value="FCPN"/>
+ <xs:enumeration value="FEPN"/>
+ <xs:enumeration value="FDSG"/>
+ <xs:enumeration value="FBIO"/>
+ <xs:enumeration value="MNVR"/>
+ <xs:enumeration value="FBIG"/>
+ <xs:enumeration value="APKI"/>
+ <xs:enumeration value="PKIS"/>
+ <xs:enumeration value="CHDT"/>
+ <xs:enumeration value="SCEC"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <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="CashAccount41">
+ <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:element maxOccurs="1" minOccurs="0" name="Ownr" type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Svcr" type="BranchAndFinancialInstitutionIdentification6"/>
+ </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="CashAvailability1">
+ <xs:sequence>
+ <xs:element name="Dt" type="CashAvailabilityDate1Choice"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CashAvailabilityDate1Choice">
+ <xs:choice>
+ <xs:element name="NbOfDays" type="Max15PlusSignedNumericText"/>
+ <xs:element name="ActlDt" type="ISODate"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="CashDeposit1">
+ <xs:sequence>
+ <xs:element name="NoteDnmtn" type="ActiveCurrencyAndAmount"/>
+ <xs:element name="NbOfNotes" type="Max15NumericText"/>
+ <xs:element name="Amt" type="ActiveCurrencyAndAmount"/>
+ </xs:sequence>
+ </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:simpleType name="ChargeIncludedIndicator">
+ <xs:restriction base="xs:boolean"/>
+ </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="Charges6">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlChrgsAndTaxAmt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Rcrd" type="ChargesRecord3"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ChargesRecord3">
+ <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="ChrgInclInd" type="ChargeIncludedIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="ChargeType3Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rate" type="PercentageRate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Br" type="ChargeBearerType1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Agt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxCharges2"/>
+ </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="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="CopyDuplicate1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CODU"/>
+ <xs:enumeration value="COPY"/>
+ <xs:enumeration value="DUPL"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="CorporateAction9">
+ <xs:sequence>
+ <xs:element name="EvtTp" type="Max35Text"/>
+ <xs:element name="EvtId" type="Max35Text"/>
+ </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="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="CurrencyExchange24">
+ <xs:sequence>
+ <xs:element name="SrcCcy" type="ActiveOrHistoricCurrencyCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TrgtCcy" type="ActiveOrHistoricCurrencyCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UnitCcy" type="ActiveOrHistoricCurrencyCode"/>
+ <xs:element name="XchgRate" type="BaseOneRate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtrctId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="QtnDt" type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="XchgRateBase" type="PositiveNumber"/>
+ </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="DateOrDateTimePeriod1Choice">
+ <xs:choice>
+ <xs:element name="Dt" type="DatePeriod2"/>
+ <xs:element name="DtTm" type="DateTimePeriod1"/>
+ </xs:choice>
+ </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:complexType name="DateTimePeriod1">
+ <xs:sequence>
+ <xs:element name="FrDtTm" type="ISODateTime"/>
+ <xs:element name="ToDtTm" type="ISODateTime"/>
+ </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="DisplayCapabilities1">
+ <xs:sequence>
+ <xs:element name="DispTp" type="UserInterface2Code"/>
+ <xs:element name="NbOfLines" type="Max3NumericText"/>
+ <xs:element name="LineWidth" type="Max3NumericText"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="Document">
+ <xs:sequence>
+ <xs:element name="BkToCstmrDbtCdtNtfctn" type="BankToCustomerDebitCreditNotificationV11"/>
+ </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="EntryDetails12">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Btch" type="BatchInformation2"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="TxDtls" type="EntryTransaction13"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="EntryStatus1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalEntryStatus1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="EntryTransaction13">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Refs" type="TransactionReferences6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtDbtInd" type="CreditDebitCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AmtDtls" type="AmountAndCurrencyExchange4"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Avlbty" type="CashAvailability1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="BkTxCd" type="BankTransactionCodeStructure4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Chrgs" type="Charges6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Intrst" type="TransactionInterest4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdPties" type="TransactionParties9"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdAgts" type="TransactionAgents5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="LclInstrm" type="LocalInstrument2Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtTpInf" type="PaymentTypeInformation27"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Purp" type="Purpose2Choice"/>
+ <xs:element maxOccurs="10" minOccurs="0" name="RltdRmtInf" type="RemittanceLocation7"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtInf" type="RemittanceInformation21"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdDts" type="TransactionDates3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RltdPric" type="TransactionPrice4Choice"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="RltdQties" type="TransactionQuantities3Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FinInstrmId" type="SecurityIdentification19"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxInformation10"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RtrInf" type="PaymentReturnReason5"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CorpActn" type="CorporateAction9"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SfkpgAcct" type="SecuritiesAccount19"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="CshDpst" type="CashDeposit1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardTx" type="CardTransaction18"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlTxInf" type="Max500Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="SplmtryData" type="SupplementaryData1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="Exact1NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Exact3NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{3}"/>
+ </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="ExternalBankTransactionDomain1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalBankTransactionFamily1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalBankTransactionSubFamily1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalCardTransactionCategory1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalCashAccountType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalCategoryPurpose1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="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="ExternalEntryStatus1Code">
+ <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="ExternalFinancialInstrumentIdentificationType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalGarnishmentType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalLocalInstrument1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="35"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalOrganisationIdentification1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalPersonIdentification1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalProxyAccountType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalPurpose1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalRePresentmentReason1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalReportingSource1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalReturnReason1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalServiceLevel1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalTaxAmountType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalTechnicalInputChannel1Code">
+ <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="FinancialInstrumentQuantity1Choice">
+ <xs:choice>
+ <xs:element name="Unit" type="DecimalNumber"/>
+ <xs:element name="FaceAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element name="AmtsdVal" type="ImpliedCurrencyAndAmount"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="FromToAmountRange1">
+ <xs:sequence>
+ <xs:element name="FrAmt" type="AmountRangeBoundary1"/>
+ <xs:element name="ToAmt" type="AmountRangeBoundary1"/>
+ </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="GenericIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SchmeNm" type="Max35Text"/>
+ <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="GenericIdentification32">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="PartyType3Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr" type="PartyType4Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ShrtNm" 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="GroupHeader81">
+ <xs:sequence>
+ <xs:element name="MsgId" type="Max35Text"/>
+ <xs:element name="CreDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgRcpt" type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgPgntn" type="Pagination1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlBizQry" type="OriginalBusinessQuery1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlInf" type="Max500Text"/>
+ </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="ISINOct2015Identifier">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z]{2,2}[A-Z0-9]{9,9}[0-9]{1,1}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ISO2ALanguageCode">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[a-z]{2,2}"/>
+ </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="ISOYearMonth">
+ <xs:restriction base="xs:gYearMonth"/>
+ </xs:simpleType>
+ <xs:complexType name="IdentificationSource3Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalFinancialInstrumentIdentificationType1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="ImpliedCurrencyAmountRange1Choice">
+ <xs:choice>
+ <xs:element name="FrAmt" type="AmountRangeBoundary1"/>
+ <xs:element name="ToAmt" type="AmountRangeBoundary1"/>
+ <xs:element name="FrToAmt" type="FromToAmountRange1"/>
+ <xs:element name="EQAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element name="NEQAmt" type="ImpliedCurrencyAndAmount"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="ImpliedCurrencyAndAmount">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="5"/>
+ <xs:totalDigits value="18"/>
+ <xs:minInclusive value="0"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="InterestRecord2">
+ <xs:sequence>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="InterestType1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rate" type="Rate4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrToDt" type="DateTimePeriod1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxCharges2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="InterestType1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="InterestType1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="InterestType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="INDY"/>
+ <xs:enumeration value="OVRN"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="LEIIdentifier">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z0-9]{18,18}[0-9]{2,2}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="LocalInstrument2Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalLocalInstrument1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="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="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="Max15PlusSignedNumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[\+]{0,1}[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="Max3NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{1,3}"/>
+ </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="Max500Text">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="500"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max5NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{1,5}"/>
+ </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:complexType name="MessageIdentification2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgNmId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgId" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="Min2Max3NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{2,3}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Min3Max4NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{3,4}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Min8Max28NumericText">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[0-9]{8,28}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="NameAndAddress16">
+ <xs:sequence>
+ <xs:element name="Nm" type="Max140Text"/>
+ <xs:element name="Adr" type="PostalAddress24"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="NamePrefix2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="DOCT"/>
+ <xs:enumeration value="MADM"/>
+ <xs:enumeration value="MISS"/>
+ <xs:enumeration value="MIST"/>
+ <xs:enumeration value="MIKS"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="NonNegativeDecimalNumber">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="17"/>
+ <xs:totalDigits value="18"/>
+ <xs:minInclusive value="0"/>
+ </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="NumberAndSumOfTransactions1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NbOfNtries" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Sum" type="DecimalNumber"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="NumberAndSumOfTransactions4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NbOfNtries" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Sum" type="DecimalNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlNetNtry" type="AmountAndDirection35"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="OnLineCapability1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="OFLN"/>
+ <xs:enumeration value="ONLN"/>
+ <xs:enumeration value="SMON"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <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="OriginalAndCurrentQuantities1">
+ <xs:sequence>
+ <xs:element name="FaceAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element name="AmtsdVal" type="ImpliedCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="OriginalBusinessQuery1">
+ <xs:sequence>
+ <xs:element name="MsgId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgNmId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CreDtTm" type="ISODateTime"/>
+ </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="OtherIdentification1">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Sfx" type="Max16Text"/>
+ <xs:element name="Tp" type="IdentificationSource3Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="POIComponentType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="SOFT"/>
+ <xs:enumeration value="EMVK"/>
+ <xs:enumeration value="EMVO"/>
+ <xs:enumeration value="MRIT"/>
+ <xs:enumeration value="CHIT"/>
+ <xs:enumeration value="SECM"/>
+ <xs:enumeration value="PEDV"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="Pagination1">
+ <xs:sequence>
+ <xs:element name="PgNb" type="Max5NumericText"/>
+ <xs:element name="LastPgInd" type="YesNoIndicator"/>
+ </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="PartyType3Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="OPOI"/>
+ <xs:enumeration value="MERC"/>
+ <xs:enumeration value="ACCP"/>
+ <xs:enumeration value="ITAG"/>
+ <xs:enumeration value="ACQR"/>
+ <xs:enumeration value="CISS"/>
+ <xs:enumeration value="DLIS"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="PartyType4Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MERC"/>
+ <xs:enumeration value="ACCP"/>
+ <xs:enumeration value="ITAG"/>
+ <xs:enumeration value="ACQR"/>
+ <xs:enumeration value="CISS"/>
+ <xs:enumeration value="TAXH"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="PaymentCard4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="PlainCardData" type="PlainCardData1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardCtryCd" type="Exact3NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardBrnd" type="GenericIdentification1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlCardData" type="Max70Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PaymentContext3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardPres" type="TrueFalseIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CrdhldrPres" type="TrueFalseIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OnLineCntxt" type="TrueFalseIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AttndncCntxt" type="AttendanceContext1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxEnvt" type="TransactionEnvironment1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxChanl" type="TransactionChannel1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AttndntMsgCpbl" type="TrueFalseIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AttndntLang" type="ISO2ALanguageCode"/>
+ <xs:element name="CardDataNtryMd" type="CardDataReading1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FllbckInd" type="TrueFalseIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AuthntcnMtd" type="CardholderAuthentication2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PaymentReturnReason5">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="OrgnlBkTxCd" type="BankTransactionCodeStructure4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Orgtr" type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rsn" type="ReturnReason5Choice"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="AddtlInf" type="Max105Text"/>
+ </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="PlainCardData1">
+ <xs:sequence>
+ <xs:element name="PAN" type="Min8Max28NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardSeqNb" type="Min2Max3NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FctvDt" type="ISOYearMonth"/>
+ <xs:element name="XpryDt" type="ISOYearMonth"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SvcCd" type="Exact3NumericText"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="TrckData" type="TrackData1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardSctyCd" type="CardSecurityInformation1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PointOfInteraction1">
+ <xs:sequence>
+ <xs:element name="Id" type="GenericIdentification32"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SysNm" type="Max70Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="GrpId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Cpblties" type="PointOfInteractionCapabilities1"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Cmpnt" type="PointOfInteractionComponent1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PointOfInteractionCapabilities1">
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="CardRdngCpblties" type="CardDataReading1Code"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="CrdhldrVrfctnCpblties" type="CardholderVerificationCapability1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="OnLineCpblties" type="OnLineCapability1Code"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="DispCpblties" type="DisplayCapabilities1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PrtLineWidth" type="Max3NumericText"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PointOfInteractionComponent1">
+ <xs:sequence>
+ <xs:element name="POICmpntTp" type="POIComponentType1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ManfctrId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Mdl" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="VrsnNb" type="Max16Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SrlNb" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="ApprvlNb" type="Max70Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="PositiveNumber">
+ <xs:restriction base="xs:decimal">
+ <xs:fractionDigits value="0"/>
+ <xs:totalDigits value="18"/>
+ <xs:minInclusive value="1"/>
+ </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:complexType name="Price7">
+ <xs:sequence>
+ <xs:element name="Tp" type="YieldedOrValueType1Choice"/>
+ <xs:element name="Val" type="PriceRateOrAmount3Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PriceRateOrAmount3Choice">
+ <xs:choice>
+ <xs:element name="Rate" type="PercentageRate"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAnd13DecimalAmount"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="PriceValueType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="DISC"/>
+ <xs:enumeration value="PREM"/>
+ <xs:enumeration value="PARV"/>
+ </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="Product2">
+ <xs:sequence>
+ <xs:element name="PdctCd" type="Max70Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UnitOfMeasr" type="UnitOfMeasure1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PdctQty" type="DecimalNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UnitPric" type="ImpliedCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PdctAmt" type="ImpliedCurrencyAndAmount"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TaxTp" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlPdctInf" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryAgent4">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Agt" type="BranchAndFinancialInstitutionIdentification6"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryBankTransactionCodeStructure1">
+ <xs:sequence>
+ <xs:element name="Cd" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Issr" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryDate3">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Dt" type="DateAndDateTime2Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryParty5">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Pty" type="Party40Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryPrice2">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Pric" type="ActiveOrHistoricCurrencyAndAmount"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryQuantity1">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Qty" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ProprietaryReference1">
+ <xs:sequence>
+ <xs:element name="Tp" type="Max35Text"/>
+ <xs:element name="Ref" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <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="Rate4">
+ <xs:sequence>
+ <xs:element name="Tp" type="RateType4Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="VldtyRg" type="ActiveOrHistoricCurrencyAndAmountRange2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RateType4Choice">
+ <xs:choice>
+ <xs:element name="Pctg" type="PercentageRate"/>
+ <xs:element name="Othr" 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:complexType name="RemittanceLocation7">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtId" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="RmtLctnDtls" type="RemittanceLocationData1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RemittanceLocationData1">
+ <xs:sequence>
+ <xs:element name="Mtd" type="RemittanceLocationMethod2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ElctrncAdr" type="Max2048Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PstlAdr" type="NameAndAddress16"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="RemittanceLocationMethod2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="FAXI"/>
+ <xs:enumeration value="EDIC"/>
+ <xs:enumeration value="URID"/>
+ <xs:enumeration value="EMAL"/>
+ <xs:enumeration value="POST"/>
+ <xs:enumeration value="SMSM"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ReportEntry13">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NtryRef" type="Max35Text"/>
+ <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="CdtDbtInd" type="CreditDebitCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RvslInd" type="TrueFalseIndicator"/>
+ <xs:element name="Sts" type="EntryStatus1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="BookgDt" type="DateAndDateTime2Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ValDt" type="DateAndDateTime2Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AcctSvcrRef" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Avlbty" type="CashAvailability1"/>
+ <xs:element name="BkTxCd" type="BankTransactionCodeStructure4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ComssnWvrInd" type="YesNoIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlInfInd" type="MessageIdentification2"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AmtDtls" type="AmountAndCurrencyExchange4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Chrgs" type="Charges6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TechInptChanl" type="TechnicalInputChannel1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Intrst" type="TransactionInterest4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CardTx" type="CardEntry5"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="NtryDtls" type="EntryDetails12"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AddtlNtryInf" type="Max500Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ReportingSource1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalReportingSource1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="ReturnReason5Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalReturnReason1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="SecuritiesAccount19">
+ <xs:sequence>
+ <xs:element name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="GenericIdentification30"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nm" type="Max70Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="SecurityIdentification19">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="ISIN" type="ISINOct2015Identifier"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="OthrId" type="OtherIdentification1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Desc" type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="SequenceRange1">
+ <xs:sequence>
+ <xs:element name="FrSeq" type="Max35Text"/>
+ <xs:element name="ToSeq" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="SequenceRange1Choice">
+ <xs:choice>
+ <xs:element name="FrSeq" type="Max35Text"/>
+ <xs:element name="ToSeq" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="FrToSeq" type="SequenceRange1"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="EQSeq" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="NEQSeq" type="Max35Text"/>
+ </xs:choice>
+ </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="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="TaxCharges2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Id" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Rate" type="PercentageRate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ </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="TaxInformation10">
+ <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="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="TechnicalInputChannel1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalTechnicalInputChannel1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="TotalTransactions6">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlNtries" type="NumberAndSumOfTransactions4"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlCdtNtries" type="NumberAndSumOfTransactions1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlDbtNtries" type="NumberAndSumOfTransactions1"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="TtlNtriesPerBkTxCd" type="TotalsPerBankTransactionCode5"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TotalsPerBankTransactionCode5">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="NbOfNtries" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Sum" type="DecimalNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlNetNtry" type="AmountAndDirection35"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtNtries" type="NumberAndSumOfTransactions1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtNtries" type="NumberAndSumOfTransactions1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FcstInd" type="TrueFalseIndicator"/>
+ <xs:element name="BkTxCd" type="BankTransactionCodeStructure4"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Avlbty" type="CashAvailability1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Dt" type="DateAndDateTime2Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TrackData1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TrckNb" type="Exact1NumericText"/>
+ <xs:element name="TrckVal" type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionAgents5">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstgAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstdAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtrAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt2" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt3" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RcvgAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DlvrgAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IssgAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="SttlmPlc" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Prtry" type="ProprietaryAgent4"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="TransactionChannel1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MAIL"/>
+ <xs:enumeration value="TLPH"/>
+ <xs:enumeration value="ECOM"/>
+ <xs:enumeration value="TVPY"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="TransactionDates3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="AccptncDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TradActvtyCtrctlSttlmDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TradDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrBkSttlmDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="StartDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="EndDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Prtry" type="ProprietaryDate3"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="TransactionEnvironment1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MERC"/>
+ <xs:enumeration value="PRIV"/>
+ <xs:enumeration value="PUBL"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="TransactionIdentifier1">
+ <xs:sequence>
+ <xs:element name="TxDtTm" type="ISODateTime"/>
+ <xs:element name="TxRef" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionInterest4">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="TtlIntrstAndTaxAmt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Rcrd" type="InterestRecord2"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionParties9">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="InitgPty" 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="UltmtDbtr" type="Party40Choice"/>
+ <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="TradgPty" type="Party40Choice"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Prtry" type="ProprietaryParty5"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TransactionPrice4Choice">
+ <xs:choice>
+ <xs:element name="DealPric" type="Price7"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="Prtry" type="ProprietaryPrice2"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="TransactionQuantities3Choice">
+ <xs:choice>
+ <xs:element name="Qty" type="FinancialInstrumentQuantity1Choice"/>
+ <xs:element name="OrgnlAndCurFaceAmt" type="OriginalAndCurrentQuantities1"/>
+ <xs:element name="Prtry" type="ProprietaryQuantity1"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="TransactionReferences6">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="MsgId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AcctSvcrRef" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtInfId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstrId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="EndToEndId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UETR" type="UUIDv4Identifier"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="TxId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MndtId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChqNb" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ClrSysRef" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AcctOwnrTxId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="AcctSvcrTxId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MktInfrstrctrTxId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PrcgId" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Prtry" type="ProprietaryReference1"/>
+ </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:simpleType name="UnitOfMeasure1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="PIEC"/>
+ <xs:enumeration value="TONS"/>
+ <xs:enumeration value="FOOT"/>
+ <xs:enumeration value="GBGA"/>
+ <xs:enumeration value="USGA"/>
+ <xs:enumeration value="GRAM"/>
+ <xs:enumeration value="INCH"/>
+ <xs:enumeration value="KILO"/>
+ <xs:enumeration value="PUND"/>
+ <xs:enumeration value="METR"/>
+ <xs:enumeration value="CMET"/>
+ <xs:enumeration value="MMET"/>
+ <xs:enumeration value="LITR"/>
+ <xs:enumeration value="CELI"/>
+ <xs:enumeration value="MILI"/>
+ <xs:enumeration value="GBOU"/>
+ <xs:enumeration value="USOU"/>
+ <xs:enumeration value="GBQA"/>
+ <xs:enumeration value="USQA"/>
+ <xs:enumeration value="GBPI"/>
+ <xs:enumeration value="USPI"/>
+ <xs:enumeration value="MILE"/>
+ <xs:enumeration value="KMET"/>
+ <xs:enumeration value="YARD"/>
+ <xs:enumeration value="SQKI"/>
+ <xs:enumeration value="HECT"/>
+ <xs:enumeration value="ARES"/>
+ <xs:enumeration value="SMET"/>
+ <xs:enumeration value="SCMT"/>
+ <xs:enumeration value="SMIL"/>
+ <xs:enumeration value="SQMI"/>
+ <xs:enumeration value="SQYA"/>
+ <xs:enumeration value="SQFO"/>
+ <xs:enumeration value="SQIN"/>
+ <xs:enumeration value="ACRE"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="UserInterface2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MDSP"/>
+ <xs:enumeration value="CDSP"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="YesNoIndicator">
+ <xs:restriction base="xs:boolean"/>
+ </xs:simpleType>
+ <xs:complexType name="YieldedOrValueType1Choice">
+ <xs:choice>
+ <xs:element name="Yldd" type="YesNoIndicator"/>
+ <xs:element name="ValTp" type="PriceValueType1Code"/>
+ </xs:choice>
+ </xs:complexType>
+</xs:schema>
diff --git a/ebics/src/main/resources/xsd/pain.001.001.11.xsd b/ebics/src/main/resources/xsd/pain.001.001.11.xsd
new file mode 100644
index 00000000..bfd15751
--- /dev/null
+++ b/ebics/src/main/resources/xsd/pain.001.001.11.xsd
@@ -0,0 +1,1244 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--Generated by Standards Editor (build:R1.6.16) on 2021 Feb 16 20:44:59, ISO 20022 version : 2013-->
+<xs:schema xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.11" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:iso:std:iso:20022:tech:xsd:pain.001.001.11">
+ <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="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="AdviceType1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtAdvc" type="AdviceType1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtAdvc" type="AdviceType1Choice"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="AdviceType1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="AdviceType1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="AdviceType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="ADWD"/>
+ <xs:enumeration value="ADND"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="AmountType4Choice">
+ <xs:choice>
+ <xs:element name="InstdAmt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element name="EqvtAmt" type="EquivalentAmount2"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="AnyBICDec2014Identifier">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Z0-9]{4,4}[A-Z]{2,2}[A-Z0-9]{2,2}([A-Z0-9]{3,3}){0,1}"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="Authorisation1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="Authorisation1Code"/>
+ <xs:element name="Prtry" type="Max128Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="Authorisation1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="AUTH"/>
+ <xs:enumeration value="FDET"/>
+ <xs:enumeration value="FSUM"/>
+ <xs:enumeration value="ILEV"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="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:simpleType name="BatchBookingIndicator">
+ <xs:restriction base="xs:boolean"/>
+ </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="Cheque11">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChqTp" type="ChequeType2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChqNb" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChqFr" type="NameAndAddress16"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DlvryMtd" type="ChequeDeliveryMethod1Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DlvrTo" type="NameAndAddress16"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstrPrty" type="Priority2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChqMtrtyDt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FrmsCd" type="Max35Text"/>
+ <xs:element maxOccurs="2" minOccurs="0" name="MemoFld" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RgnlClrZone" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PrtLctn" type="Max35Text"/>
+ <xs:element maxOccurs="5" minOccurs="0" name="Sgntr" type="Max70Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="ChequeDelivery1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="MLDB"/>
+ <xs:enumeration value="MLCD"/>
+ <xs:enumeration value="MLFA"/>
+ <xs:enumeration value="CRDB"/>
+ <xs:enumeration value="CRCD"/>
+ <xs:enumeration value="CRFA"/>
+ <xs:enumeration value="PUDB"/>
+ <xs:enumeration value="PUCD"/>
+ <xs:enumeration value="PUFA"/>
+ <xs:enumeration value="RGDB"/>
+ <xs:enumeration value="RGCD"/>
+ <xs:enumeration value="RGFA"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ChequeDeliveryMethod1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ChequeDelivery1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:simpleType name="ChequeType2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CCHQ"/>
+ <xs:enumeration value="CCCH"/>
+ <xs:enumeration value="BCHQ"/>
+ <xs:enumeration value="DRFT"/>
+ <xs:enumeration value="ELDR"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="ClearingSystemIdentification2Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalClearingSystemIdentification1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="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="CreditTransferTransaction54">
+ <xs:sequence>
+ <xs:element name="PmtId" type="PaymentIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtTpInf" type="PaymentTypeInformation26"/>
+ <xs:element name="Amt" type="AmountType4Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="XchgRateInf" type="ExchangeRate1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChrgBr" type="ChargeBearerType1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="MndtRltdInf" type="CreditTransferMandateData1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChqInstr" type="Cheque11"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UltmtDbtr" type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt1Acct" type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt2" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt2Acct" type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt3" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="IntrmyAgt3Acct" 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="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CdtrAcct" type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UltmtCdtr" type="PartyIdentification135"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="InstrForCdtrAgt" type="InstructionForCreditorAgent3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstrForDbtrAgt" type="InstructionForDebtorAgent1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Purp" type="Purpose2Choice"/>
+ <xs:element maxOccurs="10" minOccurs="0" name="RgltryRptg" type="RegulatoryReporting3"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tax" type="TaxInformation10"/>
+ <xs:element maxOccurs="10" minOccurs="0" name="RltdRmtInf" type="RemittanceLocation7"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtInf" type="RemittanceInformation21"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="SplmtryData" type="SupplementaryData1"/>
+ </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="CustomerCreditTransferInitiationV11">
+ <xs:sequence>
+ <xs:element name="GrpHdr" type="GroupHeader95"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="PmtInf" type="PaymentInstruction40"/>
+ <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="CstmrCdtTrfInitn" type="CustomerCreditTransferInitiationV11"/>
+ </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:complexType name="ExchangeRate1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="UnitCcy" type="ActiveOrHistoricCurrencyCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="XchgRate" type="BaseOneRate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="RateTp" type="ExchangeRateType1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtrctId" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="ExchangeRateType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="SPOT"/>
+ <xs:enumeration value="SALE"/>
+ <xs:enumeration value="AGRD"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalAccountIdentification1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalCashAccountType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalCategoryPurpose1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalClearingSystemIdentification1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="5"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalCreditorAgentInstruction1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalDebtorAgentInstruction1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </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="ExternalPersonIdentification1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalProxyAccountType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalPurpose1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalServiceLevel1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="ExternalTaxAmountType1Code">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="4"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="FinancialIdentificationSchemeName1Choice">
+ <xs:choice>
+ <xs:element name="Cd" type="ExternalFinancialInstitutionIdentification1Code"/>
+ <xs:element name="Prtry" type="Max35Text"/>
+ </xs:choice>
+ </xs:complexType>
+ <xs:complexType name="FinancialInstitutionIdentification18">
+ <xs:sequence>
+ <xs:element 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="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="GroupHeader95">
+ <xs:sequence>
+ <xs:element name="MsgId" type="Max35Text"/>
+ <xs:element name="CreDtTm" type="ISODateTime"/>
+ <xs:element maxOccurs="2" minOccurs="0" name="Authstn" type="Authorisation1Choice"/>
+ <xs:element name="NbOfTxs" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtrlSum" type="DecimalNumber"/>
+ <xs:element name="InitgPty" type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="FwdgAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InitnSrc" type="PaymentInitiationSource1"/>
+ </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:complexType name="InstructionForCreditorAgent3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Cd" type="ExternalCreditorAgentInstruction1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstrInf" type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="InstructionForDebtorAgent1">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Cd" type="ExternalDebtorAgentInstruction1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstrInf" type="Max140Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <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="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="Max10KBinary">
+ <xs:restriction base="xs:base64Binary">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="10240"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="Max10Text">
+ <xs:restriction base="xs:string">
+ <xs:minLength value="1"/>
+ <xs:maxLength value="10"/>
+ </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:complexType name="NameAndAddress16">
+ <xs:sequence>
+ <xs:element name="Nm" type="Max140Text"/>
+ <xs:element name="Adr" type="PostalAddress24"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="NamePrefix2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="DOCT"/>
+ <xs:enumeration value="MADM"/>
+ <xs:enumeration value="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="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="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="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:complexType name="PaymentIdentification6">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstrId" type="Max35Text"/>
+ <xs:element name="EndToEndId" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UETR" type="UUIDv4Identifier"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PaymentInitiationSource1">
+ <xs:sequence>
+ <xs:element name="Nm" type="Max140Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Prvdr" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Vrsn" type="Max35Text"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="PaymentInstruction40">
+ <xs:sequence>
+ <xs:element name="PmtInfId" type="Max35Text"/>
+ <xs:element name="PmtMtd" type="PaymentMethod3Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ReqdAdvcTp" type="AdviceType1"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="BtchBookg" type="BatchBookingIndicator"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="NbOfTxs" type="Max15NumericText"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="CtrlSum" type="DecimalNumber"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PmtTpInf" type="PaymentTypeInformation26"/>
+ <xs:element name="ReqdExctnDt" type="DateAndDateTime2Choice"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PoolgAdjstmntDt" type="ISODate"/>
+ <xs:element name="Dbtr" type="PartyIdentification135"/>
+ <xs:element name="DbtrAcct" type="CashAccount40"/>
+ <xs:element name="DbtrAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtrAgtAcct" type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstrForDbtrAgt" type="Max140Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="UltmtDbtr" type="PartyIdentification135"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChrgBr" type="ChargeBearerType1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChrgsAcct" type="CashAccount40"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ChrgsAcctAgt" type="BranchAndFinancialInstitutionIdentification6"/>
+ <xs:element maxOccurs="unbounded" minOccurs="1" name="CdtTrfTxInf" type="CreditTransferTransaction54"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="PaymentMethod3Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CHK"/>
+ <xs:enumeration value="TRF"/>
+ <xs:enumeration value="TRA"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="PaymentTypeInformation26">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="InstrPrty" type="Priority2Code"/>
+ <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="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="RegulatoryAuthority2">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Nm" type="Max140Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Ctry" type="CountryCode"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RegulatoryReporting3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="DbtCdtRptgInd" type="RegulatoryReportingType1Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Authrty" type="RegulatoryAuthority2"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Dtls" type="StructuredRegulatoryReporting3"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="RegulatoryReportingType1Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="CRED"/>
+ <xs:enumeration value="DEBT"/>
+ <xs:enumeration value="BOTH"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <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:complexType name="RemittanceLocation7">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="RmtId" type="Max35Text"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="RmtLctnDtls" type="RemittanceLocationData1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="RemittanceLocationData1">
+ <xs:sequence>
+ <xs:element name="Mtd" type="RemittanceLocationMethod2Code"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="ElctrncAdr" type="Max2048Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="PstlAdr" type="NameAndAddress16"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="RemittanceLocationMethod2Code">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="FAXI"/>
+ <xs:enumeration value="EDIC"/>
+ <xs:enumeration value="URID"/>
+ <xs:enumeration value="EMAL"/>
+ <xs:enumeration value="POST"/>
+ <xs:enumeration value="SMSM"/>
+ </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="StructuredRegulatoryReporting3">
+ <xs:sequence>
+ <xs:element maxOccurs="1" minOccurs="0" name="Tp" type="Max35Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Dt" type="ISODate"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Ctry" type="CountryCode"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Cd" type="Max10Text"/>
+ <xs:element maxOccurs="1" minOccurs="0" name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/>
+ <xs:element maxOccurs="unbounded" minOccurs="0" name="Inf" type="Max35Text"/>
+ </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="TaxInformation10">
+ <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="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: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>
diff --git a/ebics/src/test/kotlin/Iso20022Test.kt b/ebics/src/test/kotlin/Iso20022Test.kt
new file mode 100644
index 00000000..725ef215
--- /dev/null
+++ b/ebics/src/test/kotlin/Iso20022Test.kt
@@ -0,0 +1,43 @@
+/*
+ * This file is part of LibEuFin.
+ * 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
+ * published by the Free Software Foundation; either version 3, or
+ * (at your option) any later version.
+
+ * LibEuFin is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+ * Public License for more details.
+
+ * You should have received a copy of the GNU Affero General Public
+ * License along with LibEuFin; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>
+ */
+
+import tech.libeufin.ebics.iso20022.*
+import org.junit.Test
+import java.nio.file.*
+import kotlin.io.path.*
+import com.gitlab.mvysny.konsumexml.*
+
+class Iso20022Test {
+
+ @Test
+ fun sample() {
+ for (file in Path("src/test/sample").listDirectoryEntries()) {
+ file.inputStream().konsumeXml().use {
+ it.child("Document") {
+ val schema = name.namespaceURI.removePrefix("urn:iso:std:iso:20022:tech:xsd:")
+ when (schema) {
+ "camt.054.001.08" -> camt_054_001_08.parse(this)
+ "camt.054.001.04" -> camt_054_001_04.parse(this)
+ else -> throw Exception("Unsupported document schema $schema")
+ }
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/ebics/src/test/sample/200519_camt054-Credit_P_CH2909000000250094239_1110092691_0_2019042421291293.xml b/ebics/src/test/sample/200519_camt054-Credit_P_CH2909000000250094239_1110092691_0_2019042421291293.xml
new file mode 100644
index 00000000..5d9acb73
--- /dev/null
+++ b/ebics/src/test/sample/200519_camt054-Credit_P_CH2909000000250094239_1110092691_0_2019042421291293.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04 file:///C:/Users/alihodzica/Desktop/camt.054/camt.054.001.04.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>201904245375204223076552</MsgId>
+ <CreDtTm>2019-04-24T21:28:58</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/1.6/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20190424375204223076553</Id>
+ <CreDtTm>2019-04-24T21:28:58</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2019-04-24T21:28:58</FrDtTm>
+ <ToDtTm>2019-04-24T21:28:58</ToDtTm>
+ </FrToDt>
+ <RptgSrc>
+ <Prtry>CDTN</Prtry>
+ </RptgSrc>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <Amt Ccy="CHF">1500.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2019-04-24</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2019-04-25</Dt>
+ </ValDt>
+ <AcctSvcrRef>074820002ZZ9J42U</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>RCDT</Cd>
+ <SubFmlyCd>VCOM</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+ <AcctSvcrRef>074820002ZZ9J42U</AcctSvcrRef>
+ </Refs>
+ <Amt Ccy="CHF">1500.00</Amt>
+ <CdtDbtInd>CRDT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>SAMMELGUTSCHRIFT ESR VERARBEITUNG VOM 24.04.2019 KUNDENNUMMER 01-429580-3 PAKET ID: 180315CH00000HPA</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git a/ebics/src/test/sample/200519_camt054-Debit_P_CH2909000000250094239_1110092692_0_2019042401501580.xml b/ebics/src/test/sample/200519_camt054-Debit_P_CH2909000000250094239_1110092692_0_2019042401501580.xml
new file mode 100644
index 00000000..c5cfc7a9
--- /dev/null
+++ b/ebics/src/test/sample/200519_camt054-Debit_P_CH2909000000250094239_1110092692_0_2019042401501580.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Document xmlns="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:camt.054.001.04 file:///C:/Users/alihodzica/Desktop/camt.054/camt.054.001.04.xsd">
+ <BkToCstmrDbtCdtNtfctn>
+ <GrpHdr>
+ <MsgId>20190424375204222704046</MsgId>
+ <CreDtTm>2014-04-25T01:49:54</CreDtTm>
+ <MsgPgntn>
+ <PgNb>1</PgNb>
+ <LastPgInd>true</LastPgInd>
+ </MsgPgntn>
+ <AddtlInf>SPS/1.6/PROD</AddtlInf>
+ </GrpHdr>
+ <Ntfctn>
+ <Id>20190424375204222704047</Id>
+ <CreDtTm>2019-04-25T01:49:54</CreDtTm>
+ <FrToDt>
+ <FrDtTm>2019-04-25T01:49:54</FrDtTm>
+ <ToDtTm>2019-04-25T01:49:54</ToDtTm>
+ </FrToDt>
+ <RptgSrc>
+ <Prtry>DBTN</Prtry>
+ </RptgSrc>
+ <Acct>
+ <Id>
+ <IBAN>CH2909000000250094239</IBAN>
+ </Id>
+ <Ownr>
+ <Nm>Robert Schneider SA Grands magasins Biel/Bienne</Nm>
+ </Ownr>
+ </Acct>
+ <Ntry>
+ <Amt Ccy="CHF">913.00</Amt>
+ <CdtDbtInd>DBIT</CdtDbtInd>
+ <RvslInd>false</RvslInd>
+ <Sts>BOOK</Sts>
+ <BookgDt>
+ <Dt>2019-04-25</Dt>
+ </BookgDt>
+ <ValDt>
+ <Dt>2019-04-25</Dt>
+ </ValDt>
+ <AcctSvcrRef>074820002ZU1EQ0K</AcctSvcrRef>
+ <BkTxCd>
+ <Domn>
+ <Cd>PMNT</Cd>
+ <Fmly>
+ <Cd>ICDT</Cd>
+ <SubFmlyCd>AUTT</SubFmlyCd>
+ </Fmly>
+ </Domn>
+ </BkTxCd>
+ <NtryDtls>
+ <TxDtls>
+ <Refs>
+ <MsgId>20190424-000369773</MsgId>
+ <AcctSvcrRef>25-1120172999-2</AcctSvcrRef>
+ <PmtInfId>30003101</PmtInfId>
+ <EndToEndId>20190424001255000100006</EndToEndId>
+ </Refs>
+ <Amt Ccy="CHF">913.00</Amt>
+ <CdtDbtInd>DBIT</CdtDbtInd>
+ </TxDtls>
+ </NtryDtls>
+ <AddtlNtryInf>GIRO POST CH5109000000250092291 Bernasconi Maria Place de la Gare 12 2502 Biel/Bienne SENDER REFERENZ: 30003101</AddtlNtryInf>
+ </Ntry>
+ </Ntfctn>
+ </BkToCstmrDbtCdtNtfctn>
+</Document>
diff --git a/nexus/build.gradle b/nexus/build.gradle
index 3d6c6c7c..ddddf44e 100644
--- a/nexus/build.gradle
+++ b/nexus/build.gradle
@@ -26,6 +26,9 @@ dependencies {
// XML parsing/binding and encryption
implementation("jakarta.xml.bind:jakarta.xml.bind-api:2.3.3")
+
+ // XML parser
+ implementation("com.gitlab.mvysny.konsume-xml:konsume-xml:1.1")
// Compression
implementation("org.apache.commons:commons-compress:1.25.0")
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt b/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt
index 005b010d..e9a9efcc 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/Iso20022.kt
@@ -19,12 +19,12 @@
package tech.libeufin.nexus
import tech.libeufin.common.*
+import tech.libeufin.ebics.iso20022.*
import tech.libeufin.ebics.*
import java.net.URLEncoder
-import java.time.Instant
-import java.time.ZoneId
-import java.time.ZonedDateTime
+import java.time.*
import java.time.format.DateTimeFormatter
+import com.gitlab.mvysny.konsumexml.*
/**
@@ -169,7 +169,7 @@ fun createPain001(
data class CustomerAck(
val actionType: String,
- val code: ExternalStatusReasonCode?,
+ val code: ExternalStatusReason1Code?,
val timestamp: Instant
) {
override fun toString(): String {
@@ -186,68 +186,61 @@ data class CustomerAck(
* @param xml pain.002 input document
*/
fun parseCustomerAck(xml: String): List<CustomerAck> {
- val notifDoc = XMLUtil.parseStringIntoDom(xml)
- return destructXml(notifDoc) {
- requireRootElement("Document") {
- requireUniqueChildNamed("CstmrPmtStsRpt") {
- mapEachChildNamed("OrgnlPmtInfAndSts") {
- val actionType = requireUniqueChildNamed("OrgnlPmtInfId") {
- focusElement.textContent
- }
-
- requireUniqueChildNamed("StsRsnInf") {
- var timestamp: Instant? = null;
- requireUniqueChildNamed("Orgtr") {
- requireUniqueChildNamed("Id") {
- requireUniqueChildNamed("OrgId") {
- mapEachChildNamed("Othr") {
- val value = requireUniqueChildNamed("Id") {
- focusElement.textContent
- }
- val key = requireUniqueChildNamed("SchmeNm") {
- requireUniqueChildNamed("Prtry") {
- focusElement.textContent
- }
- }
- when (key) {
- "TimeStamp" -> {
- timestamp = parseCamtTime(value.trimEnd('Z')) // TODO better date parsing
- }
- // TODO extract ids ?
- }
- }
- }
- }
- }
- val code = maybeUniqueChildNamed("Rsn") {
- requireUniqueChildNamed("Cd") {
- ExternalStatusReasonCode.valueOf(focusElement.textContent)
- }
- }
- CustomerAck(actionType, code, timestamp!!)
- }
- }
+ val doc = xml.konsumeXml().use {
+ it.child("Document") {
+ logger.debug("HAC ${name.namespaceURI}")
+ pain_002_001_13.parse(this)
+ }
+ }
+ return doc.CstmrPmtStsRpt.OrgnlPmtInfAndSts.map {
+ val actionType = it.OrgnlPmtInfId
+ val code = it.StsRsnInf[0].Rsn?.let {
+ when (it) {
+ is StatusReason6Choice.Cd -> it.value
+ is StatusReason6Choice.Prtry -> null // TODO handle proprietary code
}
}
+ var timestamp: Instant? = null;
+ (it.StsRsnInf[0].Orgtr!!.Id!! as Party38Choice.OrgId).value.Othr.map {
+ val id = (it.SchmeNm!! as OrganisationIdentificationSchemeName1Choice.Prtry).value
+ if (id == "TimeStamp") {
+ timestamp = parseCamtTime(it.Id.trimEnd('Z'))
+ }
+ }
+ CustomerAck(actionType, code, timestamp!!)
}
}
+data class TransactionStatus(
+ val status: ExternalPaymentTransactionStatus1Code,
+ val reasons: List<Reason>
+)
+
data class PaymentStatus(
val msgId: String,
- val code: ExternalPaymentGroupStatusCode,
- val reasons: List<Reason>
+ val status: ExternalPaymentGroupStatus1Code,
+ val reasons: List<Reason>,
+ val txs: TransactionStatus?,
) {
override fun toString(): String {
- var builder = "'${msgId}' ${code.isoCode} '${code.description}'"
- for (reason in reasons) {
- builder += " - ${reason.code.isoCode} '${reason.code.description}'"
+ val builder = StringBuilder("'${msgId}' - ")
+ if (txs != null) {
+ builder.append("${txs.status.isoCode} '${txs.status.description}'")
+ for (reason in txs.reasons) {
+ builder.append(" - ${reason.code.isoCode} '${reason.code.description}'")
+ }
+ } else {
+ builder.append("${status.isoCode} '${status.description}'")
+ for (reason in reasons) {
+ builder.append(" - ${reason.code.isoCode} '${reason.code.description}'")
+ }
}
- return builder
+ return builder.toString()
}
}
data class Reason (
- val code: ExternalStatusReasonCode,
+ val code: ExternalStatusReason1Code,
val information: String
)
@@ -257,49 +250,53 @@ data class Reason (
* @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)
- }
+ fun StatusReasonInformation12.reason(): Reason {
+ val code = Rsn?.let { it ->
+ when (it) {
+ is StatusReason6Choice.Cd -> it.value
+ is StatusReason6Choice.Prtry -> null // TODO handle proprietary code
}
- // TODO parse information
- Reason(code, "")
}
+ return Reason(code!!, AddtlInf.joinToString("\n"))
}
- 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)
- }
- }
+ val doc = xml.konsumeXml().use {
+ it.child("Document") {
+ logger.debug("payment status ${name.namespaceURI}")
+ pain_002_001_13.parse(this)
+ }
+ }
+ val msgId = doc.CstmrPmtStsRpt.OrgnlGrpInfAndSts.OrgnlMsgId
+ val msgCode = doc.CstmrPmtStsRpt.OrgnlGrpInfAndSts.GrpSts
+ val msgReasons = doc.CstmrPmtStsRpt.OrgnlGrpInfAndSts.StsRsnInf.map { it.reason() }
+ require(doc.CstmrPmtStsRpt.OrgnlPmtInfAndSts.size <= 1) // TODO will we handle batch status latter
+ val paymentInfo = doc.CstmrPmtStsRpt.OrgnlPmtInfAndSts.firstOrNull()?.run {
+ val code = PmtInfSts!!
+ val reasons = StsRsnInf.map { it.reason() }
+ require(doc.CstmrPmtStsRpt.OrgnlPmtInfAndSts.size <= 1) // TODO will we handle batch status latter
+ val transactionInfo = TxInfAndSts.firstOrNull()?.run {
+ val code = TxSts!!
+ val reasons = StsRsnInf.map { it.reason() }
+ TransactionStatus(code, reasons)
}
+ Triple(code, reasons, transactionInfo)
}
+
+ // TODO handle multi level code better
+ return if (paymentInfo != null) {
+ val (code, reasons, transactionInfo) = paymentInfo
+ PaymentStatus(msgId, code, reasons, transactionInfo)
+ } else {
+ PaymentStatus(msgId, msgCode!!, msgReasons, null)
+ }
+}
+
+fun ActiveOrHistoricCurrencyAndAmount.talerAmount(acceptedCurrency: String): TalerAmount {
+ /**
+ * FIXME: test by sending non-CHF to PoFi and see which currency gets here.
+ */
+ if (Ccy != acceptedCurrency) throw Exception("Currency $Ccy not supported")
+ return TalerAmount("$Ccy:$value")
}
/**
@@ -316,129 +313,148 @@ fun parseTxNotif(
incoming: MutableList<IncomingPayment>,
outgoing: MutableList<OutgoingPayment>
) {
- notificationForEachTx(notifXml) { bookDate ->
- val kind = requireUniqueChildNamed("CdtDbtInd") {
- focusElement.textContent
- }
- val amount: TalerAmount = requireUniqueChildNamed("Amt") {
- val currency = focusElement.getAttribute("Ccy")
- /**
- * FIXME: test by sending non-CHF to PoFi and see which currency gets here.
- */
- if (currency != acceptedCurrency) throw Exception("Currency $currency not supported")
- TalerAmount("$currency:${focusElement.textContent}")
+ val doc = notifXml.konsumeXml().use {
+ it.child("Document") {
+ val schema = name.namespaceURI.removePrefix("urn:iso:std:iso:20022:tech:xsd:")
+ when (schema) {
+ "camt.054.001.08" -> camt_054_001_08.parse(this)
+ "camt.054.001.04" -> camt_054_001_04.parse(this)
+ else -> throw Exception("Unsupported camt.054 schema $schema")
+ }
}
- when (kind) {
- "CRDT" -> {
- val bankId: String = requireUniqueChildNamed("Refs") {
- requireUniqueChildNamed("AcctSvcrRef") {
- focusElement.textContent
+ }
+ // TODO document null assertion of throw erro with human friendly message
+ when (doc) {
+ is camt_054_001_08 -> {
+ for (notification in doc.BkToCstmrDbtCdtNtfctn.Ntfctn) {
+ for (entry in notification.Ntry) {
+ require(ExternalEntryStatus1Code.BOOK == (entry.Sts as EntryStatus1Choice.Cd).value)
+ val rawDate = entry.BookgDt!! // Not null as BOOK
+ val bookDate = when(rawDate) {
+ is DateAndDateTime2Choice.Dt -> rawDate.value.atStartOfDay().toInstant(ZoneOffset.UTC)
+ is DateAndDateTime2Choice.DtTm -> rawDate.value.toInstant(ZoneOffset.UTC)
}
- }
- // Obtaining payment subject.
- val subject = maybeUniqueChildNamed("RmtInf") {
- val subject = StringBuilder()
- mapEachChildNamed("Ustrd") {
- val piece = focusElement.textContent
- subject.append(piece)
+ if (entry.RvslInd ?: false) {
+ logger.error("Reversal transaction")
+ break;
}
- subject
- }
- if (subject == null) {
- logger.debug("Skip notification '$bankId', missing subject")
- return@notificationForEachTx
- }
+ for (batch in entry.NtryDtls) {
+ for (tx in batch.TxDtls) {
+ val amount = tx.Amt!!.talerAmount(acceptedCurrency)
+
+ when (tx.CdtDbtInd!!) {
+ CreditDebitCode.CRDT -> {
+ val bankId = tx.Refs!!.AcctSvcrRef!!
+ // Obtaining payment subject.
+ val subject = tx.RmtInf?.let {it.Ustrd.joinToString("") }
+ if (subject == null) {
+ logger.error("No subject")
+ break;
+ }
+
+ // Obtaining the payer's details
+ val iban = (tx.RltdPties!!.DbtrAcct!!.Id as AccountIdentification4Choice.IBAN).value
+ val debtorPayto = StringBuilder("payto://iban/$iban")
+ val debitor = tx.RltdPties!!.Dbtr
+ if (debitor != null) {
+ val name = (debitor as Party40Choice.Pty).value.Nm
+ if (name != null) {
+ val urlEncName = URLEncoder.encode(name, "utf-8")
+ debtorPayto.append("?receiver-name=$urlEncName")
+ }
+ }
- // Obtaining the payer's details
- val debtorPayto = StringBuilder("payto://iban/")
- requireUniqueChildNamed("RltdPties") {
- requireUniqueChildNamed("DbtrAcct") {
- requireUniqueChildNamed("Id") {
- requireUniqueChildNamed("IBAN") {
- debtorPayto.append(focusElement.textContent)
- }
- }
- }
- // warn: it might need the postal address too..
- requireUniqueChildNamed("Dbtr") {
- maybeUniqueChildNamed("Pty") {
- requireUniqueChildNamed("Nm") {
- val urlEncName = URLEncoder.encode(focusElement.textContent, "utf-8")
- debtorPayto.append("?receiver-name=$urlEncName")
+ incoming.add(
+ IncomingPayment(
+ amount = amount,
+ bankId = bankId,
+ debitPaytoUri = debtorPayto.toString(),
+ executionTime = bookDate,
+ wireTransferSubject = subject
+ )
+ )
+ }
+ CreditDebitCode.DBIT -> {
+ val messageId = tx.Refs!!.MsgId!!
+ outgoing.add(
+ OutgoingPayment(
+ amount = amount,
+ messageId = messageId,
+ executionTime = bookDate
+ )
+ )
+ }
}
}
}
}
- incoming.add(
- IncomingPayment(
- amount = amount,
- bankId = bankId,
- debitPaytoUri = debtorPayto.toString(),
- executionTime = bookDate,
- wireTransferSubject = subject.toString()
- )
- )
}
- "DBIT" -> {
- val messageId = requireUniqueChildNamed("Refs") {
- requireUniqueChildNamed("MsgId") {
- focusElement.textContent
+ }
+ is camt_054_001_04 -> {
+ for (notification in doc.BkToCstmrDbtCdtNtfctn.Ntfctn) {
+ for (entry in notification.Ntry) {
+ assert(entry.Sts == EntryStatus2Code.BOOK)
+ val rawDate = entry.BookgDt!! // Not null as BOOK
+ val bookDate = when(rawDate) {
+ is DateAndDateTimeChoice.Dt -> rawDate.value.atStartOfDay().toInstant(ZoneOffset.UTC)
+ is DateAndDateTimeChoice.DtTm -> rawDate.value.toInstant(ZoneOffset.UTC)
}
- }
-
- outgoing.add(
- OutgoingPayment(
- amount = amount,
- messageId = messageId,
- executionTime = bookDate
- )
- )
- }
- else -> throw Exception("Unknown transaction notification kind '$kind'")
- }
- }
-}
-
-/**
- * Navigates the camt.054 (Detailavisierung) until its leaves, where
- * then it invokes the related parser, according to the payment direction.
- *
- * @param notifXml the input document.
- * @return any incoming payment as a list of [IncomingPayment]
- */
-private fun notificationForEachTx(
- notifXml: String,
- directionLambda: XmlElementDestructor.(Instant) -> Unit
-) {
- val notifDoc = XMLUtil.parseStringIntoDom(notifXml)
- destructXml(notifDoc) {
- requireRootElement("Document") {
- requireUniqueChildNamed("BkToCstmrDbtCdtNtfctn") {
- mapEachChildNamed("Ntfctn") {
- mapEachChildNamed("Ntry") {
- requireUniqueChildNamed("Sts") {
- if (focusElement.textContent != "BOOK") {
- requireUniqueChildNamed("Cd") {
- if (focusElement.textContent != "BOOK")
- throw Exception("Found non booked transaction, " +
- "stop parsing. Status was: ${focusElement.textContent}"
+ if (entry.RvslInd ?: false) {
+ logger.error("Reversal transaction")
+ break;
+ }
+ for (batch in entry.NtryDtls) {
+ for (tx in batch.TxDtls) {
+ val amount = tx.Amt!!.talerAmount(acceptedCurrency)
+
+ when (tx.CdtDbtInd!!) {
+ CreditDebitCode.CRDT -> {
+ val bankId = tx.Refs!!.AcctSvcrRef!!
+ // Obtaining payment subject.
+ val subject = tx.RmtInf?.let {it.Ustrd.joinToString("") }
+ if (subject == null) {
+ logger.error("No subject")
+ break;
+ }
+
+ // Obtaining the payer's details
+ val iban = (tx.RltdPties!!.DbtrAcct!!.Id as AccountIdentification4Choice.IBAN).value
+ val debtorPayto = StringBuilder("payto://iban/$iban")
+ val debitor = tx.RltdPties!!.Dbtr
+ if (debitor != null) {
+ val name = debitor.Nm
+ if (name != null) {
+ val urlEncName = URLEncoder.encode(name, "utf-8")
+ debtorPayto.append("?receiver-name=$urlEncName")
+ }
+ }
+
+ incoming.add(
+ IncomingPayment(
+ amount = amount,
+ bankId = bankId,
+ debitPaytoUri = debtorPayto.toString(),
+ executionTime = bookDate,
+ wireTransferSubject = subject
)
+ )
+ }
+ CreditDebitCode.DBIT -> {
+ val messageId = tx.Refs!!.MsgId!!
+ outgoing.add(
+ OutgoingPayment(
+ amount = amount,
+ messageId = messageId,
+ executionTime = bookDate
+ )
+ )
}
- }
- }
- val bookDate: Instant = requireUniqueChildNamed("BookgDt") {
- requireUniqueChildNamed("Dt") {
- parseBookDate(focusElement.textContent)
- }
- }
- mapEachChildNamed("NtryDtls") {
- mapEachChildNamed("TxDtls") {
- directionLambda(this, bookDate)
}
}
}
}
}
}
+ else -> throw Exception("Unexpected camt.054 document ${doc::class.simpleName}")
}
} \ No newline at end of file
diff --git a/testbench/build.gradle b/testbench/build.gradle
index 93fb6a46..da79241d 100644
--- a/testbench/build.gradle
+++ b/testbench/build.gradle
@@ -27,6 +27,9 @@ dependencies {
implementation("io.ktor:ktor-server-test-host:$ktor_version")
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktor_version")
implementation("org.jetbrains.kotlin:kotlin-test:$kotlin_version")
+
+ // XML parser
+ implementation("com.gitlab.mvysny.konsume-xml:konsume-xml:1.1")
}
application {
diff --git a/testbench/src/main/kotlin/Main.kt b/testbench/src/main/kotlin/Main.kt
index 076d5001..efa2300f 100644
--- a/testbench/src/main/kotlin/Main.kt
+++ b/testbench/src/main/kotlin/Main.kt
@@ -219,7 +219,7 @@ class Cli : CliktCommand("Run integration tests on banks provider") {
.assertOk("ebics-setup should succeed the second time")
}
- val arg = ask("testbench >")!!.trim()
+ val arg = ask("testbench> ")!!.trim()
if (arg == "exit") break
val cmd = cmds[arg]
if (cmd != null) {
diff --git a/testbench/src/test/kotlin/ParsingTest.kt b/testbench/src/test/kotlin/ParsingTest.kt
new file mode 100644
index 00000000..fa89f387
--- /dev/null
+++ b/testbench/src/test/kotlin/ParsingTest.kt
@@ -0,0 +1,76 @@
+/*
+ * This file is part of LibEuFin.
+ * 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
+ * published by the Free Software Foundation; either version 3, or
+ * (at your option) any later version.
+
+ * LibEuFin is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+ * Public License for more details.
+
+ * You should have received a copy of the GNU Affero General Public
+ * License along with LibEuFin; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>
+ */
+
+import tech.libeufin.nexus.*
+import org.junit.Test
+import java.nio.file.*
+import kotlin.io.path.*
+import com.gitlab.mvysny.konsumexml.*
+
+class ParsingTest {
+ @Test
+ fun sample() {
+ for (file in Path("../ebics/src/test/sample").listDirectoryEntries()) {
+ val str = file.readText()
+ val schema = str.konsumeXml().use {
+ it.child("Document") {
+ val schema = name.namespaceURI.removePrefix("urn:iso:std:iso:20022:tech:xsd:")
+ skipContents()
+ schema
+ }
+ }
+ when (schema) {
+ "camt.054.001.08", "camt.054.001.04" -> {
+ parseTxNotif(str, "CHF", mutableListOf(), mutableListOf())
+ }
+ else -> throw Exception("Unsupported document schema $schema")
+ }
+ }
+ }
+
+ @Test
+ fun logs() {
+ for (platform in Path("test").listDirectoryEntries()) {
+ for (file in platform.listDirectoryEntries()) {
+ val fetch = file.resolve("fetch")
+ if (file.isDirectory() && fetch.exists()) {
+ for (log in fetch.listDirectoryEntries()) {
+ val str = log.readText()
+ val schema = str.konsumeXml().use {
+ it.child("Document") {
+ val schema = name.namespaceURI.removePrefix("urn:iso:std:iso:20022:tech:xsd:")
+ skipContents()
+ schema
+ }
+ }
+ val name = log.toString()
+ println(name)
+ if (name.contains("HAC")) {
+ parseCustomerAck(str)
+ } else if (schema.contains("pain.002")) {
+ parseCustomerPaymentStatusReport(str)
+ } else {
+ parseTxNotif(str, "CHF", mutableListOf(), mutableListOf())
+ }
+ }
+ }
+ }
+ }
+ }
+} \ No newline at end of file