libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit 92dcf07c794da7cd5d6e39c4033d7c78d7c9f052
parent 574db786cd75b055df6e633aaac58dbd6355dadb
Author: MS <ms@taler.net>
Date:   Tue,  7 Jul 2020 18:14:55 +0200

Add Pain validation to tests.

Diffstat:
Anexus/src/test/kotlin/PainTest.kt | 33+++++++++++++++++++++++++++++++++
Msandbox/src/test/kotlin/CamtTest.kt | 2+-
Mutil/src/main/kotlin/XMLUtil.kt | 3++-
Autil/src/main/resources/xsd/pain.001.001.03.xsd | 923+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 959 insertions(+), 2 deletions(-)

diff --git a/nexus/src/test/kotlin/PainTest.kt b/nexus/src/test/kotlin/PainTest.kt @@ -0,0 +1,32 @@ +import ch.qos.logback.core.joran.spi.XMLUtil +import org.junit.Test +import tech.libeufin.nexus.iso20022.NexusPaymentInitiationData +import tech.libeufin.nexus.iso20022.createPain001document +import kotlin.test.assertTrue + +class PainTest { + + @Test + fun validationTest() { + val xml = createPain001document( + NexusPaymentInitiationData( + debtorIban = "GB33BUKB20201222222222", + debtorBic = "BUKBGB33", + debtorName = "Oliver Smith", + currency = "EUR", + amount = "1", + creditorIban = "GB33BUKB20201222222222", + creditorName = "Oliver Smith", + messageId = "message id", + paymentInformationId = "payment information id", + preparationTimestamp = 0, + subject = "subject", + instructionId = "instruction id", + endToEndId = "end to end id" + ) + ) + assertTrue { + tech.libeufin.util.XMLUtil.validateFromString(xml) + } + } +} +\ No newline at end of file diff --git a/sandbox/src/test/kotlin/CamtTest.kt b/sandbox/src/test/kotlin/CamtTest.kt @@ -7,7 +7,7 @@ import kotlin.test.assertTrue class CamtTest { @Test - fun camtTest() { + fun validationTest() { val payment = RawPayment( creditorIban = "GB33BUKB20201222222222", creditorName = "Oliver Smith", diff --git a/util/src/main/kotlin/XMLUtil.kt b/util/src/main/kotlin/XMLUtil.kt @@ -158,7 +158,8 @@ class XMLUtil private constructor() { "xsd/ebics_hev.xsd", "xsd/camt.052.001.02.xsd", "xsd/camt.053.001.02.xsd", - "xsd/camt.054.001.02.xsd" + "xsd/camt.054.001.02.xsd", + "xsd/pain.001.001.03.xsd" ).map { val stream = classLoader.getResourceAsStream(it) ?: throw FileNotFoundException("Schema file $it not found.") diff --git a/util/src/main/resources/xsd/pain.001.001.03.xsd b/util/src/main/resources/xsd/pain.001.001.03.xsd @@ -0,0 +1,922 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- edited with XMLSpy v2011 rel. 3 sp1 (x64) (http://www.altova.com) by Antero Mäenpää (XMLdation.com Oy) --> +<!--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:pain.001.001.03" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" 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="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,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="AmountType3Choice"> + <xs:sequence> + <xs:choice> + <xs:element name="InstdAmt" type="ActiveOrHistoricCurrencyAndAmount"/> + <xs:element name="EqvtAmt" type="EquivalentAmount2"/> + </xs:choice> + </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:complexType name="Authorisation1Choice"> + <xs:sequence> + <xs:choice> + <xs:element name="Cd" type="Authorisation1Code"/> + <xs:element name="Prtry" type="Max128Text"/> + </xs:choice> + </xs:sequence> + </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="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: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="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="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="CategoryPurpose1Choice"> + <xs:sequence> + <xs:choice> + <xs:element name="Cd" type="ExternalCategoryPurpose1Code"/> + <xs:element name="Prtry" type="Max35Text"/> + </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:complexType name="Cheque6"> + <xs:sequence> + <xs:element name="ChqTp" type="ChequeType2Code" minOccurs="0"/> + <xs:element name="ChqNb" type="Max35Text" minOccurs="0"/> + <xs:element name="ChqFr" type="NameAndAddress10" minOccurs="0"/> + <xs:element name="DlvryMtd" type="ChequeDeliveryMethod1Choice" minOccurs="0"/> + <xs:element name="DlvrTo" type="NameAndAddress10" minOccurs="0"/> + <xs:element name="InstrPrty" type="Priority2Code" minOccurs="0"/> + <xs:element name="ChqMtrtyDt" type="ISODate" minOccurs="0"/> + <xs:element name="FrmsCd" type="Max35Text" minOccurs="0"/> + <xs:element name="MemoFld" type="Max35Text" minOccurs="0" maxOccurs="2"/> + <xs:element name="RgnlClrZone" type="Max35Text" minOccurs="0"/> + <xs:element name="PrtLctn" type="Max35Text" minOccurs="0"/> + </xs: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:sequence> + <xs:choice> + <xs:element name="Cd" type="ChequeDelivery1Code"/> + <xs:element name="Prtry" type="Max35Text"/> + </xs:choice> + </xs:sequence> + </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: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="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="CreditTransferTransactionInformation10"> + <xs:sequence> + <xs:element name="PmtId" type="PaymentIdentification1"/> + <xs:element name="PmtTpInf" type="PaymentTypeInformation19" minOccurs="0"/> + <xs:element name="Amt" type="AmountType3Choice"/> + <xs:element name="XchgRateInf" type="ExchangeRateInformation1" minOccurs="0"/> + <xs:element name="ChrgBr" type="ChargeBearerType1Code" minOccurs="0"/> + <xs:element name="ChqInstr" type="Cheque6" minOccurs="0"/> + <xs:element name="UltmtDbtr" type="PartyIdentification32" minOccurs="0"/> + <xs:element name="IntrmyAgt1" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/> + <xs:element name="IntrmyAgt1Acct" type="CashAccount16" minOccurs="0"/> + <xs:element name="IntrmyAgt2" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/> + <xs:element name="IntrmyAgt2Acct" type="CashAccount16" minOccurs="0"/> + <xs:element name="IntrmyAgt3" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/> + <xs:element name="IntrmyAgt3Acct" type="CashAccount16" minOccurs="0"/> + <xs:element name="CdtrAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/> + <xs:element name="CdtrAgtAcct" type="CashAccount16" 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="InstrForCdtrAgt" type="InstructionForCreditorAgent1" minOccurs="0" maxOccurs="unbounded"/> + <xs:element name="InstrForDbtrAgt" type="Max140Text" minOccurs="0"/> + <xs:element name="Purp" type="Purpose2Choice" minOccurs="0"/> + <xs:element name="RgltryRptg" type="RegulatoryReporting3" minOccurs="0" maxOccurs="10"/> + <xs:element name="Tax" type="TaxInformation3" minOccurs="0"/> + <xs:element name="RltdRmtInf" type="RemittanceLocation2" minOccurs="0" maxOccurs="10"/> + <xs:element name="RmtInf" type="RemittanceInformation5" 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="CustomerCreditTransferInitiationV03"> + <xs:sequence> + <xs:element name="GrpHdr" type="GroupHeader32"/> + <xs:element name="PmtInf" type="PaymentInstructionInformation3" maxOccurs="unbounded"/> + </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: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="CstmrCdtTrfInitn" type="CustomerCreditTransferInitiationV03"/> + </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="EquivalentAmount2"> + <xs:sequence> + <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount"/> + <xs:element name="CcyOfTrf" type="ActiveOrHistoricCurrencyCode"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="ExchangeRateInformation1"> + <xs:sequence> + <xs:element name="XchgRate" type="BaseOneRate" minOccurs="0"/> + <xs:element name="RateTp" type="ExchangeRateType1Code" minOccurs="0"/> + <xs:element name="CtrctId" type="Max35Text" minOccurs="0"/> + </xs:sequence> + </xs:complexType> + <xs:simpleType name="ExchangeRateType1Code"> + <xs:restriction base="xs:string"> + <xs:enumeration value="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="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="ExternalFinancialInstitutionIdentification1Code"> + <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="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: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="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="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="GroupHeader32"> + <xs:sequence> + <xs:element name="MsgId" type="Max35Text"/> + <xs:element name="CreDtTm" type="ISODateTime"/> + <xs:element name="Authstn" type="Authorisation1Choice" minOccurs="0" maxOccurs="2"/> + <xs:element name="NbOfTxs" type="Max15NumericText"/> + <xs:element name="CtrlSum" type="DecimalNumber" minOccurs="0"/> + <xs:element name="InitgPty" type="PartyIdentification32"/> + <xs:element name="FwdgAgt" type="BranchAndFinancialInstitutionIdentification4" 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="ISODate"> + <xs:restriction base="xs:date"/> + </xs:simpleType> + <xs:simpleType name="ISODateTime"> + <xs:restriction base="xs:dateTime"/> + </xs:simpleType> + <xs:simpleType name="Instruction3Code"> + <xs:restriction base="xs:string"> + <xs:enumeration value="CHQB"/> + <xs:enumeration value="HOLD"/> + <xs:enumeration value="PHOB"/> + <xs:enumeration value="TELB"/> + </xs:restriction> + </xs:simpleType> + <xs:complexType name="InstructionForCreditorAgent1"> + <xs:sequence> + <xs:element name="Cd" type="Instruction3Code" minOccurs="0"/> + <xs:element name="InstrInf" type="Max140Text" minOccurs="0"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="LocalInstrument2Choice"> + <xs:sequence> + <xs:choice> + <xs:element name="Cd" type="ExternalLocalInstrument1Code"/> + <xs:element name="Prtry" type="Max35Text"/> + </xs:choice> + </xs:sequence> + </xs:complexType> + <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="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="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="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="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:complexType name="PaymentIdentification1"> + <xs:sequence> + <xs:element name="InstrId" type="Max35Text" minOccurs="0"/> + <xs:element name="EndToEndId" type="Max35Text"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="PaymentInstructionInformation3"> + <xs:sequence> + <xs:element name="PmtInfId" type="Max35Text"/> + <xs:element name="PmtMtd" type="PaymentMethod3Code"/> + <xs:element name="BtchBookg" type="BatchBookingIndicator" minOccurs="0"/> + <xs:element name="NbOfTxs" type="Max15NumericText" minOccurs="0"/> + <xs:element name="CtrlSum" type="DecimalNumber" minOccurs="0"/> + <xs:element name="PmtTpInf" type="PaymentTypeInformation19" minOccurs="0"/> + <xs:element name="ReqdExctnDt" type="ISODate"/> + <xs:element name="PoolgAdjstmntDt" type="ISODate" minOccurs="0"/> + <xs:element name="Dbtr" type="PartyIdentification32"/> + <xs:element name="DbtrAcct" type="CashAccount16"/> + <xs:element name="DbtrAgt" type="BranchAndFinancialInstitutionIdentification4"/> + <xs:element name="DbtrAgtAcct" type="CashAccount16" minOccurs="0"/> + <xs:element name="UltmtDbtr" type="PartyIdentification32" minOccurs="0"/> + <xs:element name="ChrgBr" type="ChargeBearerType1Code" minOccurs="0"/> + <xs:element name="ChrgsAcct" type="CashAccount16" minOccurs="0"/> + <xs:element name="ChrgsAcctAgt" type="BranchAndFinancialInstitutionIdentification4" minOccurs="0"/> + <xs:element name="CdtTrfTxInf" type="CreditTransferTransactionInformation10" maxOccurs="unbounded"/> + </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="PaymentTypeInformation19"> + <xs:sequence> + <xs:element name="InstrPrty" type="Priority2Code" minOccurs="0"/> + <xs:element name="SvcLvl" type="ServiceLevel8Choice" minOccurs="0"/> + <xs:element name="LclInstrm" type="LocalInstrument2Choice" minOccurs="0"/> + <xs:element name="CtgyPurp" type="CategoryPurpose1Choice" 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:simpleType name="Priority2Code"> + <xs:restriction base="xs:string"> + <xs:enumeration value="HIGH"/> + <xs:enumeration value="NORM"/> + </xs:restriction> + </xs:simpleType> + <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="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="RegulatoryAuthority2"> + <xs:sequence> + <xs:element name="Nm" type="Max140Text" minOccurs="0"/> + <xs:element name="Ctry" type="CountryCode" minOccurs="0"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="RegulatoryReporting3"> + <xs:sequence> + <xs:element name="DbtCdtRptgInd" type="RegulatoryReportingType1Code" minOccurs="0"/> + <xs:element name="Authrty" type="RegulatoryAuthority2" minOccurs="0"/> + <xs:element name="Dtls" type="StructuredRegulatoryReporting3" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + <xs:simpleType name="RegulatoryReportingType1Code"> + <xs:restriction base="xs:string"> + <xs:enumeration value="CRED"/> + <xs:enumeration value="DEBT"/> + <xs:enumeration value="BOTH"/> + </xs:restriction> + </xs:simpleType> + <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="ServiceLevel8Choice"> + <xs:sequence> + <xs:choice> + <xs:element name="Cd" type="ExternalServiceLevel1Code"/> + <xs:element name="Prtry" type="Max35Text"/> + </xs:choice> + </xs:sequence> + </xs:complexType> + <xs:complexType name="StructuredRegulatoryReporting3"> + <xs:sequence> + <xs:element name="Tp" type="Max35Text" minOccurs="0"/> + <xs:element name="Dt" type="ISODate" minOccurs="0"/> + <xs:element name="Ctry" type="CountryCode" minOccurs="0"/> + <xs:element name="Cd" type="Max10Text" minOccurs="0"/> + <xs:element name="Amt" type="ActiveOrHistoricCurrencyAndAmount" minOccurs="0"/> + <xs:element name="Inf" type="Max35Text" minOccurs="0" maxOccurs="unbounded"/> + </xs:sequence> + </xs:complexType> + <xs:complexType name="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="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:schema> +\ No newline at end of file