<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:eMandate="http://www.stuzza.at/namespaces/eMandate/2017"
  xmlns:eMandateInit="urn:iso:std:iso:20022:tech:xsd:pain.009.001.02" xmlns:eMandateAcceptance="urn:iso:std:iso:20022:tech:xsd:pain.012.001.02"
  xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.stuzza.at/namespaces/eMandate/2017"
  elementFormDefault="qualified" attributeFormDefault="unqualified"
>
  <xsd:import namespace="urn:iso:std:iso:20022:tech:xsd:pain.009.001.02" schemaLocation="pain.009.001.02.xsd" />
  <xsd:import namespace="urn:iso:std:iso:20022:tech:xsd:pain.012.001.02" schemaLocation="pain.012.001.02.xsd" />
  <xsd:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="W3C-XMLDSig.xsd" />
  <xsd:element name="MandateServiceInitiationRequest">
    <xsd:annotation>
      <xsd:documentation>mandate initiation request</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="eMandate:MsgBase">
          <xsd:sequence>
          	<xsd:element ref="eMandate:CustomerBIC" minOccurs="0" />
            <xsd:element name="MandateInitiationRequest" type="eMandateInit:Document">
              <xsd:annotation>
                <xsd:documentation>iso mandate initiation</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
            <xsd:element ref="eMandate:MerchantData">
              <xsd:annotation>
                <xsd:documentation>additional merchant related data</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
            <xsd:element ref="eMandate:AuthenticationDetails">
              <xsd:annotation>
                <xsd:documentation>authentication data</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="CustomerBIC">
		<xsd:annotation>
			<xsd:documentation>CustomerBIC for Routing Information</xsd:documentation>
		</xsd:annotation>
		<xsd:simpleType>
			<xsd:restriction base="xsd:string">
				<xsd:minLength value="8"/>
				<xsd:maxLength value="11"/>
				<xsd:pattern value="[A-Z]{6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3}){0,1}"/>
			</xsd:restriction>
		</xsd:simpleType>
	</xsd:element>
  <xsd:element name="MandateServiceInitiationResponse">
    <xsd:annotation>
      <xsd:documentation>mandate initiation response</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="eMandate:MsgBase">
          <xsd:sequence>
            <xsd:element ref="eMandate:StatusReference">
              <xsd:annotation>
                <xsd:documentation>status reference for use in MandateServiceStatusRequest</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
            <xsd:choice>
              <xsd:element ref="eMandate:BankData">
                <xsd:annotation>
                  <xsd:documentation>initiation acceptance data</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
              <xsd:element ref="eMandate:ProcessStatus">
                <xsd:annotation>
                  <xsd:documentation>the status of the process</xsd:documentation>
                </xsd:annotation>
              </xsd:element>
            </xsd:choice>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="MandateServiceStatusRequest">
    <xsd:annotation>
      <xsd:documentation>request for retrieving the status for a specific mandate process</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="eMandate:MsgBase">
          <xsd:sequence>
            <xsd:element ref="eMandate:StatusReference">
              <xsd:annotation>
                <xsd:documentation>the reference got from MandateServiceInitiationResponse top identify a
                  single process</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
            <xsd:element ref="eMandate:AuthenticationDetails">
              <xsd:annotation>
                <xsd:documentation>authentication data</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="MandateServiceStatusResponse">
    <xsd:annotation>
      <xsd:documentation>the status for a specific mandate process</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="eMandate:MsgBase">
          <xsd:sequence>
            <xsd:element name="MandateAcceptanceReport" type="eMandateAcceptance:Document"
              minOccurs="0"
            >
              <xsd:annotation>
                <xsd:documentation>the report when mandate was accepted</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
            <xsd:element ref="eMandate:ProcessStatus">
              <xsd:annotation>
                <xsd:documentation>the status of the process</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
            <xsd:element ref="dsig:Signature" minOccurs="0">
              <xsd:annotation>
                <xsd:documentation>signature from debtorbank or scheme operator</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="ProcessStatus">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Status" minOccurs="0">
          <xsd:annotation>
            <xsd:documentation>the status of the process</xsd:documentation>
          </xsd:annotation>
          <xsd:simpleType>
            <xsd:restriction base="xsd:string">
              <xsd:enumeration value="OK">
                <xsd:annotation>
                  <xsd:documentation>mandate process as defined in initiation has been completed
                  </xsd:documentation>
                </xsd:annotation>
              </xsd:enumeration>
              <xsd:enumeration value="NOK">
                <xsd:annotation>
                  <xsd:documentation>process ended without processing the mandate as given in the initiation
                  </xsd:documentation>
                </xsd:annotation>
              </xsd:enumeration>
              <xsd:enumeration value="UNKNOWN">
                <xsd:annotation>
                  <xsd:documentation>process status is not clear: the process may still be in progress or
                    there was a technical error so that the status is undetermined</xsd:documentation>
                </xsd:annotation>
              </xsd:enumeration>
            </xsd:restriction>
          </xsd:simpleType>
        </xsd:element>
        <xsd:element name="ErrorCode" minOccurs="0">
          <xsd:annotation>
            <xsd:documentation>error description for status NOK</xsd:documentation>
          </xsd:annotation>
          <xsd:simpleType>
            <xsd:restriction base="xsd:string">
              <xsd:enumeration value="001">
                <xsd:annotation>
                  <xsd:documentation>xml invalid: broken or syntactically wrong</xsd:documentation>
                </xsd:annotation>
              </xsd:enumeration>
              <xsd:enumeration value="002">
                <xsd:annotation>
                  <xsd:documentation>xml inconsistent: corresponding data within the xml does not match
                  </xsd:documentation>
                </xsd:annotation>
              </xsd:enumeration>
              <xsd:enumeration value="004">
                <xsd:annotation>
                  <xsd:documentation>authorisation wrong: hash/status reference wrong or even CreditorId
                    (registered) is wrong</xsd:documentation>
                </xsd:annotation>
              </xsd:enumeration>
              <xsd:enumeration value="007">
                <xsd:annotation>
                  <xsd:documentation>type of process not supported</xsd:documentation>
                </xsd:annotation>
              </xsd:enumeration>
              <xsd:enumeration value="008">
                <xsd:annotation>
                  <xsd:documentation>unspecified error: external error with no specific handling by the scheme
                    operator: might be when debtorbank sends inconsistent data which should never be
                  </xsd:documentation>
                </xsd:annotation>
              </xsd:enumeration>
              <xsd:enumeration value="009">
                <xsd:annotation>
                  <xsd:documentation>internal error: an internal error at the scheme operator
                  </xsd:documentation>
                </xsd:annotation>
              </xsd:enumeration>
              <xsd:enumeration value="012">
                <xsd:annotation>
                  <xsd:documentation>process timeout: expiration time exceeded</xsd:documentation>
                </xsd:annotation>
              </xsd:enumeration>
              <xsd:enumeration value="014">
                <xsd:annotation>
                  <xsd:documentation>connection timeout/error: debtor bank may be not reachable
                  </xsd:documentation>
                </xsd:annotation>
              </xsd:enumeration>
            </xsd:restriction>
          </xsd:simpleType>
        </xsd:element>
        <xsd:element name="Message" minOccurs="0">
          <xsd:annotation>
            <xsd:documentation>additional concrete information in form of describing text</xsd:documentation>
          </xsd:annotation>
          <xsd:simpleType>
            <xsd:restriction base="xsd:string">
              <xsd:maxLength value="512" />
            </xsd:restriction>
          </xsd:simpleType>
        </xsd:element>
      </xsd:sequence>
      <xsd:attribute name="from" use="required">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:enumeration value="BANK" />
            <xsd:enumeration value="SO" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="BankData">
    <xsd:annotation>
      <xsd:documentation>data needed by the creditor to continue mandate process</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="RedirectUrl" type="eMandate:Url">
          <xsd:annotation>
            <xsd:documentation>the url to redirect the debtor to for choosing his bank</xsd:documentation>
          </xsd:annotation>
        </xsd:element>
        <xsd:element ref="eMandate:Lang">
          <xsd:annotation>
            <xsd:documentation>language for the banking-gui used by bank</xsd:documentation>
          </xsd:annotation>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="MerchantData">
    <xsd:annotation>
      <xsd:documentation>merchant related data</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="ReturnUrl" type="eMandate:Url">
          <xsd:annotation>
            <xsd:documentation>the url to redirect the debtor to after process has been completed on banking
              side</xsd:documentation>
          </xsd:annotation>
        </xsd:element>
        <xsd:element name="ConfirmationUrl" type="eMandate:Url" minOccurs="0">
          <xsd:annotation>
            <xsd:documentation>the url to receive the mandate acceptance report set by the scheme operator</xsd:documentation>
          </xsd:annotation>
        </xsd:element>        
        <xsd:element ref="eMandate:Lang" minOccurs="0">
          <xsd:annotation>
            <xsd:documentation>language for the banking-gui asked by merchant</xsd:documentation>
          </xsd:annotation>
        </xsd:element>
        <xsd:element name="ExpirationTime" type="xsd:dateTime">
          <xsd:annotation>
            <xsd:documentation>the time after which the process will never ever end in a status OK
            </xsd:documentation>
          </xsd:annotation>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="Lang" type="xsd:language" default="de">
    <xsd:annotation>
      <xsd:documentation>RFC 1766 labgauge specification</xsd:documentation>
    </xsd:annotation>
  </xsd:element>
  <xsd:element name="AuthenticationDetails">
    <xsd:annotation>
      <xsd:documentation>authetication data</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="eMandate:UserId">
          <xsd:annotation>
            <xsd:documentation>the creditors's 'user id from the registration process at the scheme operator
            </xsd:documentation>
          </xsd:annotation>
        </xsd:element>
        <xsd:choice>
          <xsd:element ref="eMandate:SHA256Fingerprint">
            <xsd:annotation>
              <xsd:documentation>the fingerprint calculated concatenating pin</xsd:documentation>
            </xsd:annotation>
          </xsd:element>
          <xsd:element ref="dsig:Signature">
            <xsd:annotation>
              <xsd:documentation>the signature when authenticating via xml dsig instead of fingerprint
              </xsd:documentation>
            </xsd:annotation>
          </xsd:element>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="UserId">
    <xsd:annotation>
      <xsd:documentation>the creditor's user id from the registration process</xsd:documentation>
    </xsd:annotation>
    <xsd:simpleType>
      <xsd:restriction base="xsd:string">
        <xsd:maxLength value="25" />
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:element>
  <xsd:element name="SHA256Fingerprint">
    <xsd:annotation>
      <xsd:documentation>sha256 fingerprint</xsd:documentation>
    </xsd:annotation>
    <xsd:simpleType>
      <xsd:restriction base="eMandate:Hex">
        <xsd:minLength value="64" />
        <xsd:maxLength value="64" />
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:element>
  <xsd:complexType name="MsgBase">
    <xsd:annotation>
      <xsd:documentation>the base structure for every mandate messsage</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="MsgHeader">
        <xsd:annotation>
          <xsd:documentation>the message header which contains the same data for each message in a specific
            process</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="MsgId">
              <xsd:annotation>
                <xsd:documentation>the unique process id, set by creditor</xsd:documentation>
              </xsd:annotation>
              <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                  <xsd:pattern value="[A-Za-z0-9_]{1,35}" />
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:element>
            <xsd:element name="CreDtTm" type="xsd:dateTime">
              <xsd:annotation>
                <xsd:documentation>creation time of the intitiation message</xsd:documentation>
              </xsd:annotation>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="StatusReference">
    <xsd:annotation>
      <xsd:documentation>the reference provided by SO for use in MandateServiceStatusRequest
      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleType>
      <xsd:restriction base="eMandate:Base64">
        <xsd:maxLength value="64" />
      </xsd:restriction>
    </xsd:simpleType>
  </xsd:element>
  <xsd:simpleType name="Base64">
    <xsd:annotation>
      <xsd:documentation>string restricted to base64-characters</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="[a-zA-Z0-9+/=]*" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="Hex">
    <xsd:annotation>
      <xsd:documentation>string restricted to hex-characters</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="[a-fA-F0-9]*" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="Url">
    <xsd:annotation>
      <xsd:documentation>length limited http(s) uri</xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:anyURI">
      <xsd:maxLength value="512" />
      <xsd:pattern value="https?://.*" />
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>