<!--
==============================================================================
                              paymentService DTD
                     All rights reserved, subject to change

                                   Version 1.4.1

==============================================================================
-->

<!-- ROOT ELEMENT -->
<!-- ============ -->
<!--
The root element paymentService needs two attributes :
- version : The DTD version.
- merchantCode : The code that identifies the merchant

The paymentService can have the following child elements:
- submit : merchants submit information to the payment service like orders or batches
- modify : merchants send modify requests to modify orders or batches
- inquiry: merchants can inquire the status of orders or batches
- reply  : the payment service will always respond with a reply message. Only the payment service can send
           reply messages
- notify : when the payment service sends merchants information about the status of an order, or order- or
           transfer reports, the notify element is used
-->
<!ELEMENT paymentService  ( submit | modify | inquiry | reply | notify | verify)>
<!ATTLIST paymentService  version       ( 1.4 | 1.3 | 1.2 | 1.1 | 1.0 )  #REQUIRED
                          merchantCode NMTOKEN  #IMPLIED >

<!-- CHILD ELEMENTS OF PAYMENTSERVICE ELEMENT -->
<!-- ======================================== -->
<!-- This describes the different services that are provided within
     the Paymentservice
-->
<!ELEMENT submit  (order | orderBatch | shopper | futurePayAgreement | makeFuturePayPayment | identifyMeRequest)>

<!ELEMENT modify  (orderModification | batchModification | accountBatchModification | futurePayAgreementModification)>

<!ELEMENT inquiry (orderInquiry | batchInquiry | accountBatchInquiry | refundableAmountInquiry | shopperAuthentication | priceInquiry | bankAccountInquiry | identifyMeInquiry)>

<!ELEMENT reply   (orderStatus* | batchStatus | error | addressCheckResponse |
                   refundableAmount | accountBatch | shopper | ok |
                   futurePayAgreementStatus | shopperAuthenticationResult | futurePayPaymentResult | pricePoint)>
<!ATTLIST reply   complete (true|false) #IMPLIED >

<!ELEMENT verify  (addressCheck)>

<!--
The payment service can notify merchants if the status of an order changes or to send
order- or transfer reports. This information is not requested by the
merchant. Therefore this type of messages are not reply messages but notify
messages.  Child elements of notify element:
- orderStatusEvent : The orderStatusEvent is sent to report the change of the
                     status of an order
- report           : Order report or transfer report.
-->
<!ELEMENT notify  (orderStatusEvent | report )>
<!ATTLIST notify  messageType  (TransferReport | OrderReport | CaptureReport | EventReport | BatchReport)  #IMPLIED >

<!ELEMENT identifyMeRequest (address, birthDate?, gender?, shopperDocuments?, session?, hcgAdditionalData?)>
<!ATTLIST identifyMeRequest orderCode NMTOKEN #REQUIRED>
<!ELEMENT gender EMPTY>     
<!ATTLIST gender value (F|M) #REQUIRED>
<!ELEMENT shopperDocuments (document1?, document2?, document3?, document4?, document5?, passportData?)> 
<!ELEMENT document1 (idType?, idNumber?, idCode?, idIssuingCountry?, idCountryOfOrigin?, idNationality?, idExpiryDate?, idIssueDate?)> 
<!ELEMENT document2 (idType?, idNumber?, idCode?, idIssuingCountry?, idCountryOfOrigin?, idNationality?, idExpiryDate?, idIssueDate?)> 
<!ELEMENT document3 (idType?, idNumber?, idCode?, idIssuingCountry?, idCountryOfOrigin?, idNationality?, idExpiryDate?, idIssueDate?)> 
<!ELEMENT document4 (idType?, idNumber?, idCode?, idIssuingCountry?, idCountryOfOrigin?, idNationality?, idExpiryDate?, idIssueDate?)> 
<!ELEMENT document5 (idType?, idNumber?, idCode?, idIssuingCountry?, idCountryOfOrigin?, idNationality?, idExpiryDate?, idIssueDate?)> 
<!ELEMENT passportData (MRZLine1?, MRZLine2?, MRZShort?)> 

<!ELEMENT idType (#PCDATA )>
<!ELEMENT idNumber (#PCDATA )>
<!ELEMENT idCode (#PCDATA )>
<!ELEMENT idIssuingCountry (#PCDATA )>
<!ELEMENT idCountryOfOrigin (#PCDATA )>
<!ELEMENT idNationality (#PCDATA )>
<!ELEMENT idExpiryDate (date)>
<!ELEMENT idIssueDate (date)>
<!ELEMENT MRZLine1 (#PCDATA )>
<!ELEMENT MRZLine2 (#PCDATA )>
<!ELEMENT MRZShort (#PCDATA )>

<!-- CHILD ELEMENTS OF SUBMIT ELEMENT -->
<!-- ================================ -->
<!ELEMENT order  (	description,
					amount,
					risk?,
					orderContent?,
					(paymentMethodMask | paymentDetails | payAsOrder ),
					shopper?,
					shippingAddress?,
					billingAddress?,
					branchSpecificExtension?,
					redirectPageAttribute?,
					paymentMethodAttribute*,
					echoData?,
					statementNarrative?,
					hcgAdditionalData?,
					thirdPartyData?) >

<!--
Enter risk parameters. All individual risk-score settings
eg. <risk multiply="1.5" avsLevel="C" cvcLevel="B"/>
-->
<!ELEMENT risk EMPTY>
<!ATTLIST risk multiply NMTOKEN  #IMPLIED
               avsLevel NMTOKEN  #IMPLIED
               cvcLevel NMTOKEN  #IMPLIED>


<!ELEMENT pricePoint (	locale,
						pricing,
						comments) >
						
<!ATTLIST pricePoint billedMessages NMTOKEN  #IMPLIED
              		 status NMTOKEN  #IMPLIED>
              		 
<!ELEMENT locale EMPTY>
<!ATTLIST locale countryCode NMTOKEN  #IMPLIED
          		 currencyCode NMTOKEN  #IMPLIED
          		 exponent NMTOKEN  #IMPLIED
          		 exchangeFactor NMTOKEN  #IMPLIED>
              		 
<!ELEMENT pricing EMPTY>
<!ATTLIST pricing 	amount NMTOKEN  #IMPLIED
	          		amountExSalesTax NMTOKEN  #IMPLIED
	          		amountIncSalesTax NMTOKEN  #IMPLIED
	          		amountReceivableGross NMTOKEN  #IMPLIED
	          		amountReceivableNet NMTOKEN  #IMPLIED>
              		 
<!ELEMENT comments (#PCDATA )>
          
<!--
The ordercode is a unique reference for an order. The maximum length is 64
characters. For purchase details the first 15 characters are used.
-->
<!ATTLIST order orderCode CDATA  #IMPLIED
                agreementId NMTOKEN #IMPLIED
				shoppingBasketCode CDATA #IMPLIED
				installationId NMTOKEN #IMPLIED
				shopperLanguageCode NMTOKEN #IMPLIED
				fixContact  (true|false) #IMPLIED
				hideContact (true|false) #IMPLIED
				>

<!--
The echoData element contains information that is used to process the
transaction much faster in case one transaction consists of multiple submit
messages.  If the echoData is supplied in a orderStatus element to the
merchant, the merchant must send the same echoData element back in the next
submit messages if it belonging to the same transaction.  The merchant should
never send its own data in the echoData element.  As such the first submit
never contains an echoData element.  One should not put any restrictions on the
size of the contents of this field.
-->
<!ELEMENT echoData (#PCDATA)>

<!--
An orderBatch contains multiple orders. OrderBatches are processed off-line.

ForeignContent is reserved
Attributes of orderBatch :
- transactions : The exact number of transactions in this batch. There is no
  maximum for the number of transactions in a batch. We strongly suggest not
  to exceed 500 transactions in a batch.
- merchantBatchCode : The merchantBatchCode is a unique reference for a batch.
  The maximum length is 25 characters.
-->
<!ELEMENT orderBatch  ( (order+ ) , foreignContent? )>
<!ATTLIST orderBatch  transactions      NMTOKEN  #REQUIRED
                      merchantBatchCode CDATA    #REQUIRED >
<!--
FuturePay
-->

<!--
Agreement Creation
-->
<!ELEMENT futurePayAgreement ((schedule | limit),
								setUpPayment?,
								paymentDetails,
								address,
								shopperAuthentication?)>


<!ATTLIST futurePayAgreement
		acquisitionCurrencyCode NMTOKEN #REQUIRED
		agreementCurrencyCode NMTOKEN #REQUIRED
		shoppingBasketCode CDATA #REQUIRED
		description CDATA #REQUIRED
		installationId NMTOKEN #REQUIRED
		shopperEmailAddress CDATA #REQUIRED
		shopperLanguageCode CDATA #REQUIRED>

<!-- CHILD ELEMENTS OF futurePayAgreement ELEMENT -->
<!--
Schedule applies to regular agreements
-->
<!ELEMENT schedule (numberOfPayments?,
					agreementInterval?,
					agreementStartDate?,
					(initialAmount?,normalAmount)?)>

<!--
Limit applies to limited agreements
-->
<!ELEMENT limit ((paymentsPerAgreement | paymentsPerInterval |
				valuePerInterval | valuePerAgreement),
					agreementStartDate?,
					agreementEndDate?)>
<!--
Payments per agreement limit
-->
<!ELEMENT paymentsPerAgreement (numberOfPayments?,
								agreementInterval?,
								amountLimit?)>
<!--
Payments per interval limit
-->
<!ELEMENT paymentsPerInterval (numberOfPayments,
								agreementInterval,
								amountLimit?)>
<!--
Value per agreement limit
-->
<!ELEMENT valuePerAgreement (amountLimit)>

<!--
Value per interval limit
-->
<!ELEMENT valuePerInterval (agreementInterval,
								amountLimit)>

<!--
	Presents of setUpPayment indicates there is an associated set up payment
	if the amount is present then the set up payment is taken by futurepay
-->
<!ELEMENT setUpPayment (amount?)>
<!ELEMENT numberOfPayments (#PCDATA)>
<!ELEMENT agreementInterval (interval)>
<!ELEMENT initialAmount (amount)>
<!ELEMENT normalAmount (amount)>
<!ATTLIST normalAmount type (fixed | adjustable) #REQUIRED>
<!ELEMENT amountLimit (amount)>
<!ELEMENT agreementStartDate (date)>
<!ELEMENT agreementEndDate (date)>

<!ELEMENT interval EMPTY>
<!ATTLIST interval unit (day | week | month | year) #REQUIRED
					multiplier NMTOKEN #REQUIRED>


<!ELEMENT futurePayAgreementStatus (shopperAuthentication?)>
<!ATTLIST futurePayAgreementStatus agreementId NMTOKEN #REQUIRED
									status (active |
											complete |
											cancelledByMerchant |
											cancelledByShopper |
											awaitingStartDate |
											attemptLimitReached |
											accountSuspended |
											cardExpiredSuspended |
											waitingSetUpPayment) #REQUIRED>

<!--

FuturePay shopper authentication

-->

<!ELEMENT shopperAuthentication (username,password)>
<!ELEMENT username (#PCDATA)>
<!ELEMENT password (#PCDATA)>

<!ELEMENT shopperAuthenticationResult EMPTY>
<!ATTLIST shopperAuthenticationResult authenticated (yes | no) #REQUIRED>

<!--

FuturePay admin

-->
<!ELEMENT makeFuturePayPayment (amount | amountNoCurrency)>
<!ATTLIST makeFuturePayPayment agreementId NMTOKEN #REQUIRED>

<!ELEMENT futurePayAgreementModification (agreementStartDate | adjustAmount | cancel)>
<!ATTLIST futurePayAgreementModification agreementId NMTOKEN #REQUIRED>

<!ELEMENT adjustAmount (amount | amountNoCurrency)>

<!-- A decimal amount with out a currency value-->
<!ELEMENT amountNoCurrency EMPTY>
<!ATTLIST amountNoCurrency value NMTOKEN #REQUIRED>

<!ELEMENT futurePayPaymentResult (paymentMethod,lastEvent)>
<!ATTLIST futurePayPaymentResult agreementId NMTOKEN #REQUIRED
									orderCode CDATA #REQUIRED>


<!-- CHILD ELEMENTS OF MODIFY ELEMENT -->
<!-- ================================ -->
<!ELEMENT orderModification  (cancel | capture | refund | addBackOfficeCode | addTransactionCertificate | authorise | increaseAuthorisation | cancelOrRefund | defend)>
<!ATTLIST orderModification  orderCode CDATA  #REQUIRED >
<!ELEMENT batchModification  (cancel )>
<!ATTLIST batchModification  merchantBatchCode CDATA  #REQUIRED >
<!ELEMENT accountBatchModification   EMPTY>
<!ATTLIST accountBatchModification action  (END_PERIOD) #REQUIRED
                                   accountType (IN_PROCESS_CAPTURED) #REQUIRED>
<!ELEMENT addTransactionCertificate (cryptogram, ICCTrxStatus, verificationResults)>
<!-- When the value is set to 'yes', a addTransactionCertificate will be  
     processed directly, and not saved as batch.
     Of course the Shoppercell of the authorisation and the addTransactionCertificate  
     should be the same! -->
<!ATTLIST addTransactionCertificate immediate (yes|no) 'no' >

<!-- CHILD ELEMENTS OF INQUIRY ELEMENT -->
<!-- ================================= -->
<!--
The order inquiry element can be used to inquire the status of a specific
order, or the statusses of all orders that are payed using a specific credit
card.
Example of an order inquiry:
<orderInquiry orderCode="ORDER01" />
Example of an inquiry of order statusses belonging to a specific creditcard:
<orderInquiry>
  <cardSearch cardNumber="4111111111111111">
    <startDate>
      <date dayOfMonth="01" month="06" year="2001"/>
    </startDate>
  </cardSearch>
</orderInquiry>
This will return the statusses of all order made with creditcardnumber 4111111111111111
from June 1st 2001 until now.
-->
<!ELEMENT orderInquiry  (cardSearch? | dateSearch? )>
<!ATTLIST orderInquiry  orderCode CDATA  #IMPLIED >
<!ELEMENT batchInquiry EMPTY>
<!ATTLIST batchInquiry  merchantBatchCode CDATA  #REQUIRED >
<!ELEMENT accountBatchInquiry EMPTY>
<!ATTLIST accountBatchInquiry  accountType (IN_PROCESS_CAPTURED)  #REQUIRED
                               batchId NMTOKEN #IMPLIED
                               queryHotBatch (y) #IMPLIED >

<!ELEMENT refundableAmountInquiry  EMPTY>
<!ATTLIST refundableAmountInquiry  orderCode CDATA  #REQUIRED >
<!ELEMENT priceInquiry  EMPTY>
<!ATTLIST priceInquiry  currencyCode NMTOKEN  #IMPLIED
						countryCode NMTOKEN  #IMPLIED 
						maximumBilledMessages NMTOKEN  #IMPLIED >

<!ELEMENT bankAccountInquiry EMPTY>
<!ATTLIST bankAccountInquiry source NMTOKEN #REQUIRED>
<!ATTLIST bankAccountInquiry shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT identifyMeInquiry EMPTY>
<!ATTLIST identifyMeInquiry orderCode CDATA  #REQUIRED >


<!-- CHILD ELEMENTS OF REPLY ELEMENT -->
<!-- =============================== -->
<!-- The ok element represents the new style answer to an order modification -->
<!-- Examples:
	<ok>
		<cancelReceived orderCode="MYORDER123"/>
	</ok>

	<ok>
		<captureReceived orderCode="MYORDER123">
			<amount currencyCode="EUR" value="123" exponent="2"/>
		</captureReceived>
	</ok>

	<ok>
		<refundReceived orderCode="MYORDER123">
			<amount currencyCode="EUR" value="123" exponent="2"/>
		</refundReceived>
	</ok>

	<ok>
		<backofficeCodeReceived orderCode="MYORDER123" backOfficeCode="ABCDE"/>
	</ok>

	<ok>
		<authorisationCodeReceived orderCode="MYORDER123" authorisationCode="AB12ZY"/>
	</ok>

-->
<!ELEMENT ok (localDateTimeAtPOS?,
               (cancelReceived|
				voidReceived|
				captureReceived|
				refundReceived|
				backofficeCodeReceived|
				authorisationCodeReceived|
				transactionCertificateReceived|
				defenceReceived )) >

<!ELEMENT voidReceived EMPTY >
<!ATTLIST voidReceived orderCode CDATA #REQUIRED>

<!ELEMENT cancelReceived EMPTY >
<!ATTLIST cancelReceived orderCode CDATA #REQUIRED>

<!ELEMENT captureReceived (amount) >
<!ATTLIST captureReceived orderCode CDATA #REQUIRED>

<!ELEMENT addTransactionCertificateReceived EMPTY >
<!ATTLIST addTransactionCertificateReceived orderCode CDATA #REQUIRED>

<!ELEMENT refundReceived (amount) >
<!ATTLIST refundReceived orderCode CDATA #REQUIRED>

<!ELEMENT backofficeCodeReceived EMPTY >
<!ATTLIST backofficeCodeReceived orderCode CDATA #REQUIRED
                                 backOfficeCode CDATA #REQUIRED>

<!ELEMENT authorisationCodeReceived EMPTY >
<!ATTLIST authorisationCodeReceived orderCode CDATA #REQUIRED
                                    authorisationCode CDATA #REQUIRED>

<!ELEMENT transactionCertificateReceived EMPTY >
<!ATTLIST transactionCertificateReceived orderCode CDATA #REQUIRED>

<!ELEMENT defenceReceived EMPTY >
<!ATTLIST defenceReceived orderCode CDATA #REQUIRED>

<!ELEMENT orderStatus ( ((reference,bankAccount?) |
						 error |
						 (payment, ((payment* , orderModification?) | journal)) |
						 requestInfo
						), date?, echoData? )>
<!ATTLIST orderStatus  orderCode CDATA  #REQUIRED >

<!--
The element batchStatus represents the status of the batch. When orders are
processed the batch status can contain the orderstatusses of the individual orders.
Attributes of batchStatus :
- transactions: The exact number of transactions in this batch. There is no
  maximum for the number of transactions in a batch.
- merchantBatchCode :  The reference for this batch
- status :  The status of this batch.
-->
<!ELEMENT batchStatus  (orderStatus* , foreignContent? )>
<!ATTLIST batchStatus  settlementBatchId NMTOKEN  #IMPLIED
                       transactions      NMTOKEN  #REQUIRED
                       merchantBatchCode CDATA    #REQUIRED
                       status             (	ORDERS_SAVED |
                                           	PROCESSED |
                                           	PROCESSED_WITH_ERRORS |
                                           	CANCELLED )  #REQUIRED >
<!--
The element error will be returned when an error occurs. The error contains an
error message describing what caused this error.
Attributes of error :
- code : An error code for this error.
Errorcodes can be:
- 1 : ERROR_INTERNAL : please call the payment service
- 2 : ERROR_PARSE : your xml could not be parsed
- 3 : ERROR_ORDER_AMOUNT : either the order or the amount is invalid
- 4 : ERROR_SECURITY : security violation
- 5 : ERROR_INVALID_REQUEST : Error in request (duplicate order, cancel not existing order etc.)
- 6 : ERROR_INVALID_CONTENT : invalid order in orderbatch
- 7 : ERROR_PAYMENT_DETAILS : payment details are not correct (f.i. expiry date in past)
- 8 : ERROR_NOT_AVAILABLE : this service is currently not available, try again later

-->
<!ELEMENT error  (#PCDATA )>
<!ATTLIST error  code  (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 )  #REQUIRED >
<!ELEMENT accountBatch  (periodBeginDate?,periodEndDate?,totalPayments?,paymentAmounts?)>
<!ATTLIST accountBatch batchId CDATA #REQUIRED accountType NMTOKEN #REQUIRED >

<!-- CHILD ELEMENTS OF ACCOUNTBATCH ELEMENT -->
<!-- ================================ -->
<!ELEMENT periodBeginDate  (date)>
<!ELEMENT periodEndDate  (date)>
<!ELEMENT totalPayments (#PCDATA) >
<!ELEMENT paymentAmounts  (amount*)>

<!-- CHILD ELEMENTS OF NOTIFY ELEMENT -->
<!-- ================================ -->
<!ELEMENT orderStatusEvent  (payment , journal )>
<!ATTLIST orderStatusEvent  orderCode CDATA  #REQUIRED
							backOfficeCode CDATA #IMPLIED
							agreementId NMTOKEN #IMPLIED
							shoppingBasketCode CDATA #IMPLIED >

<!ELEMENT report  (lastDate? , creationDate? , fromDate?, untilDate?, (orderStatusEvent | journal )* )>
<!ATTLIST report  reportType             (order | transfer | capture | event | batch)  #REQUIRED
                  batchId                NMTOKEN  #IMPLIED
                  settlementCurrency     NMTOKEN  #IMPLIED
                  accountType            NMTOKEN  #IMPLIED
                  acquirerCode           NMTOKEN  #IMPLIED
                  acquirerAccountCode    NMTOKEN  #IMPLIED
                  brandId  			 	 NMTOKEN  #IMPLIED	 >

<!-- CHILD ELEMENTS OF ORDER ELEMENT -->
<!-- =============================== -->
<!--
The maximum length of description is 50 characters. In case an order with
airline element is used, the first 20 characters should contain the name
of the airline.
-->
<!ELEMENT description  (#PCDATA )>

<!--
Example of an amount element :
(E.g. BEF 12345)
<amount value="12345" currencyCode="BEF" exponent="0"/>
(E.g. USD 123.45)
<amount value="12345" currencyCode="USD" exponent="2"/>
-->
<!ELEMENT amount EMPTY>
<!ATTLIST amount  value					NMTOKEN  #REQUIRED
                  currencyCode			NMTOKEN  #REQUIRED
                  exponent				(0 | 2 | 3 )  #REQUIRED
                  debitCreditIndicator	(debit | credit )  'credit' >
<!ELEMENT orderContent  (#PCDATA )>

<!ELEMENT paymentMethodMask  ( (include ) ,  (include | exclude )* )>

<!ELEMENT paymentDetails  (	(VISA-SSL | ECMC-SSL | BHS-SSL | IKEA-SSL | AMEX-SSL | ELV-SSL |
 							 DINERS-SSL | CB-SSL | AIRPLUS-SSL | UATP-SSL |
							 CARTEBLEUE-SSL | SOLO_GB-SSL|
							 LASER-SSL | DANKORT-SSL | DISCOVER-SSL | JCB-SSL |
							 AURORE-SSL | GECAPITAL-SSL |
							 PERMANENT_SIGNED_DD_NL-FAX|
							 SINGLE_UNSIGNED_DD_NL-SSL|
							 SINGLE_UNSIGNED_DD_ES-SSL|
							 SINGLE_UNSIGNED_DD_FR-SSL|
							 PERMANENT_SIGNED_DD_GB-SSL|
							 PAYOUT-BANK | VME-SSL | PAYPAL-EXPRESS | GIROPAY-SSL | MAESTRO-SSL | SWITCH-SSL |
							 NCPB2B-SSL | NCPSEASON-SSL | NCPGMM-SSL | IDEAL-SSL |ACH-SSL|CARD-SSL | ABAQOOS-SSL |
							 AGMO-SSL | ALIPAY-SSL | ALIPAYMOBILE-SSL| BALOTO-SSL | BANKAXESS-SSL |BANKLINKNORDEA-SSL |
							 BILLINGPARTNER-SSL | CASHU-SSL | DINEROMAIL_7ELEVEN-SSL | DINEROMAIL_OXXO-SSL |
							 DINEROMAIL_ONLINE_BT-SSL | DINEROMAIL_SERVIPAG-SSL | EKONTO-SSL |
							 EPAY-SSL | EUTELLER-SSL | EWIREDK-SSL | EWIRENO-SSL | EWIRESE-SSL | HALCASH-SSL | 
							 IBANQ-SSL | INSTADEBIT-SSL | KONBINI-SSL | LOBANET_AR-SSL | LOBANET_BR-SSL | 
							 LOBANET_CL-SSL | LOBANET_MX-SSL | LOBANET_PE-SSL | LOBANET_UY-SSL | MISTERCASH-SSL |
							 MULTIBANCO-SSL | NEOSURF-SSL | NINETYNINEBILL-SSL | PAGA-SSL | PAGA_VERVE-SSL | PAYSAFECARD-SSL | PAYU-SSL | 
							 PLUSPAY-SSL | POLI-SSL | POLINZ-SSL | POSTEPAY-SSL | PRZELEWY-SSL | QIWI-SSL | SAFETYPAY-SSL | 
							 SID-SSL | SKRILL-SSL | SOFORT-SSL | SPEEDCARD-SSL | SPOROPAY-SSL | SWIFF-SSL | TELEINGRESO-SSL | 
							 TICKETSURF-SSL | TRUSTPAY_CZ-SSL | TRUSTPAY_EE-SSL | TRUSTPAY_SK-SSL | WEBMONEY-SSL | YANDEXMONEY-SSL |
							 ASTROPAYCARD-SSL | BANCOSANTANDER-SSL | BOLETO-SSL | MONETA-SSL | TODITOCARD-SSL |
							 ENVOY_TRANSFER_AUD-BANK | ENVOY_TRANSFER_CAD-BANK | ENVOY_TRANSFER_CHF-BANK | ENVOY_TRANSFER_CZK-BANK |
							 ENVOY_TRANSFER_DKK-BANK | ENVOY_TRANSFER_EUR-BANK | ENVOY_TRANSFER_GBP-BANK | ENVOY_TRANSFER_HKD-BANK |
							 ENVOY_TRANSFER_HUF-BANK | ENVOY_TRANSFER_JPY-BANK | ENVOY_TRANSFER_NOK-BANK | ENVOY_TRANSFER_NZD-BANK |
							 ENVOY_TRANSFER_PLN-BANK | ENVOY_TRANSFER_RUB-BANK | ENVOY_TRANSFER_SEK-BANK | ENVOY_TRANSFER_SGD-BANK | 
							 ENVOY_TRANSFER_THB-BANK | ENVOY_TRANSFER_TRY-BANK | ENVOY_TRANSFER_USD-BANK | ENVOY_TRANSFER_ZAR-BANK |
							 TRANSFER_AT-BANK | TRANSFER_BE-BANK | TRANSFER_CH-BANK | TRANSFER_DE-BANK | TRANSFER_DK-BANK | 
							 TRANSFER_ES-BANK | TRANSFER_FI-BANK | TRANSFER_FR-BANK | TRANSFER_GB-BANK | TRANSFER_GR-BANK | 
							 TRANSFER_IT-BANK | TRANSFER_JP-BANK | TRANSFER_LU-BANK | TRANSFER_NL-BANK | TRANSFER_NO-BANK | 
							 TRANSFER_PL-BANK | TRANSFER_SE-BANK | TRANSFER_US-BANK |
			 
                             (cardNumber, expiryDate, cardHolderName,
                                 (cvc | issueNumber | startDate)?,
                                 EMV_Request?) |

                             (cardSwipe, cvc?)
                            ), localDateTimeAtPOS?, session?, info3DSecure? )>
<!ATTLIST paymentDetails  action  (AUTHORISE | REFUND | OFFLINEAUTHORISE )  'AUTHORISE' >
<!ELEMENT payAsOrder  (amount )>
<!ATTLIST payAsOrder  orderCode CDATA  #REQUIRED
		    merchantCode NMTOKEN  #IMPLIED 
		    cvc NMTOKEN  #IMPLIED>
<!ELEMENT shopper  (shopperEmailAddress? ,
					authenticatedShopperID?,
					bankAccount?,
					browser?,
					session?)>


<!ELEMENT param (#PCDATA)>					
<!ATTLIST param name CDATA #REQUIRED>	
<!ELEMENT hcgAdditionalData (param+)>	


<!ELEMENT shippingAddress  (address )>
<!ELEMENT billingAddress  (address )>
<!ELEMENT branchSpecificExtension (airline|purchase|hotel)>
<!ELEMENT browser (acceptHeader?, userAgentHeader?, httpAcceptLanguage?,httpReferer?)>
<!ATTLIST browser deviceType (0|1)  #IMPLIED>
<!ELEMENT acceptHeader (#PCDATA)>
<!ELEMENT userAgentHeader (#PCDATA)>
<!ELEMENT httpAcceptLanguage (#PCDATA)>
<!ELEMENT httpReferer (#PCDATA)>
<!ELEMENT redirectPageAttribute (fontAttr?, bodyAttr?)>
<!ELEMENT fontAttr (#PCDATA)>
<!ELEMENT bodyAttr (#PCDATA)>

<!--
An info3DSecure element contains the Verified by Visa payment authentication
response data necessary to complete a 3D Secure transaction.
-->
<!ELEMENT info3DSecure (paResponse|(xid,cavv,eci)|attemptedAuthentication)>
<!ELEMENT paResponse (#PCDATA)>
<!ELEMENT xid (#PCDATA)>
<!ELEMENT cavv (#PCDATA)>
<!ELEMENT eci (#PCDATA)>
<!ELEMENT attemptedAuthentication EMPTY>

<!-- =============================== -->

<!-- CHILD ELEMENTS OF ORDERSTATUS ELEMENT -->
<!-- ===================================== -->
<!ELEMENT reference  (#PCDATA )>
<!ATTLIST reference id NMTOKEN  #IMPLIED >
<!-- Element cardNumber in payment is deprecated, use attribute number in paymentMethodDetail.card instead -->
<!ELEMENT payment  (	localDateTimeAtPOS?,
            paymentMethod ,
			paymentMethodDetail? ,
			amount ,
			lastEvent? ,
			AuthorisationId? ,
			ISO8583ReturnCode? ,
			IssuerResponseCode? ,
			CVCResultCode? ,
			AVSResultCode? ,
			AAVAddressResultCode? ,
			AAVPostcodeResultCode? ,
			AAVCardholderNameResultCode? ,
			AAVTelephoneResultCode? ,
			AAVEmailResultCode? ,
			ThreeDSecureResult? ,
			cardHolderName? ,
			issuerCountryCode? ,
			EMV_Response?,
			balance* ,
			cardNumber?,
			hashedCardNumber?,
			riskScore?, 			
			ACHOrderId?,
			checkpointSummary?,
			fraudShieldIndicators?,
			newRoutingNumber?,
			newAccountNumber?,
			newBankAccountType?)>

<!ELEMENT hashedCardNumber (#PCDATA) >
			
<!ELEMENT requestInfo  (request3DSecure)>

<!-- CHILD ELEMENTS OF ORDERBATCH ELEMENT -->
<!-- ==================================== -->
<!-- Reserved for internal use.              -->
<!ELEMENT foreignContent  (#PCDATA )>
<!ATTLIST foreignContent  xml:space  (default | preserve )  'preserve' >


<!-- CHILD ELEMENT OF PaymentService ELEMENT -->
<!ELEMENT addressCheck  (address )>

<!-- CHILD ELEMENT OF Reply ELEMENT -->
<!ELEMENT addressCheckResponse  (address*,
								    addressCheckResponseCode,
									addressCheckMessage )>

<!-- 	AddressCheckResponseCodes:
		ERROR = 1
		PROVIDER_ERROR = 2
		SUCCESS = 3
		SUCCESS_NEW_DATA = 4
		MOVED_NO_NEW_ADDRESS = 5
		MOVED_MAIL_FORWARDED = 6
		UNUSABLE_ADDRESS =7
		MANUAL_CHECK =8           -->
<!ELEMENT addressCheckResponseCode  (#PCDATA )>
<!ELEMENT addressCheckMessage  (#PCDATA )>

<!ELEMENT refundableAmount ( (amount, date? ) | error )>
<!ATTLIST refundableAmount orderCode CDATA  #REQUIRED >

<!-- CHILD ELEMENTS OF ORDERSTATUSEVENT ELEMENT -->
<!-- ========================================== -->
<!ELEMENT journal  (bookingDate , accountTx*, journalReference* )>
<!ATTLIST journal  journalType NMTOKEN  #REQUIRED
                   description CDATA    #IMPLIED
                   note        CDATA    #IMPLIED
                   sent         (y | n )  'n' >

<!-- CHILD ELEMENTS OF PAYMENTMETHODMASK ELEMENT -->
<!-- =========================================== -->
<!ELEMENT include EMPTY>
<!ATTLIST include  code NMTOKEN  #REQUIRED >
<!ELEMENT exclude EMPTY>
<!ATTLIST exclude  code NMTOKEN  #REQUIRED >


<!-- CHILD ELEMENTS OF REQUESTINFO ELEMENT -->
<!-- ===================================== -->
<!--
A request3DSecure is a reply to the merchant on an order with payment details
where the shopper needs to authenticate himself using Verified by Visa
(3D Secure) with the card issuer.

Example of a request3DSecure message:
<reply>
	<orderStatus orderCode='1234'>
		<requestInfo>
			<request3DSecure>
				<paRequest>somebase64encodeddata<paRequest>
				<issuerURL>http://www.xxx.com/xyz.html</issuerURL>
			</request3DSecure>
		</requestInfo>
		<echoData>AABBCC</echoData>
	</orderStatus>
</reply>
-->
<!ELEMENT request3DSecure (paRequest, issuerURL)>
<!ELEMENT paRequest (#PCDATA)>
<!ELEMENT issuerURL (#PCDATA)>

<!-- CHILD ELEMENTS OF PAYMENTDETAILS ELEMENT -->
<!-- ======================================== -->
<!ELEMENT VISA-SSL		 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT ECMC-SSL		 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT BHS-SSL		 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT IKEA-SSL		 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT AMEX-SSL		 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT DINERS-SSL	 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT CB-SSL		 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT CARTEBLEUE-SSL (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT DANKORT-SSL	 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT DISCOVER-SSL	 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT JCB-SSL	 	 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT AURORE-SSL	 (cardNumber, birthDate,  cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT GECAPITAL-SSL	 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT AIRPLUS-SSL	 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT UATP-SSL		 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT SWITCH-SSL	 (cardNumber, expiryDate, cardHolderName, (issueNumber | (startDate, issueNumber?) ), cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT MAESTRO-SSL	 (cardNumber, expiryDate, cardHolderName, startDate?, issueNumber?, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT SOLO_GB-SSL	 (cardNumber, expiryDate, cardHolderName, (issueNumber | (startDate, issueNumber?) ), cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT LASER-SSL		 (cardNumber, expiryDate, cardHolderName, startDate?, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT ELV-SSL	(accountHolderName, bankAccountNr, bankName, bankLocation, bankLocationId, creditScoring?)>
<!ELEMENT ACH-SSL	(authentication | deposit | validation | verification)>
<!ELEMENT PERMANENT_SIGNED_DD_NL-FAX EMPTY>
<!ELEMENT SINGLE_UNSIGNED_DD_NL-SSL (BankAccount_NL)>
<!ELEMENT SINGLE_UNSIGNED_DD_FR-SSL (BankAccount_FR)>
<!ELEMENT SINGLE_UNSIGNED_DD_ES-SSL (bankAccount-ES)>
<!ELEMENT PERMANENT_SIGNED_DD_GB-SSL (bankAccount-GB)>
<!ELEMENT SINGLE_SIGNED_DD_ES-SSL (bankAccount-ES)>
<!ELEMENT PAYOUT-BANK EMPTY>
<!ELEMENT VME-SSL (successURL, failureURL, cancelURL, cardAddress?)>
<!ELEMENT PAYPAL-EXPRESS (successURL, failureURL, cancelURL)>
<!ATTLIST PAYPAL-EXPRESS firstInBillingRun (true|false) #IMPLIED>
<!ELEMENT IDEAL-SSL (successURL, failureURL, cancelURL)>
<!ATTLIST IDEAL-SSL shopperBankCode (ABN_AMRO|ASN|ING|FRIESLAND|RABOBANK|SNS|SNS_REGIO|TRIODOS|VAN_LANSCHOT|KNAB) #REQUIRED>
<!ELEMENT GIROPAY-SSL 	(successURL, failureURL, cancelURL, bankCode)>
<!ELEMENT NCPB2B-SSL		 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT NCPSEASON-SSL		 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT NCPGMM-SSL		 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT CARD-SSL		 (cardNumber, expiryDate, cardHolderName, cvc?, cardAddress?,cardSwipe? )>
<!ELEMENT ABAQOOS-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST ABAQOOS-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT AGMO-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST AGMO-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ALIPAY-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST ALIPAY-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ALIPAYMOBILE-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST ALIPAYMOBILE-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT BALOTO-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST BALOTO-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT BANKAXESS-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST BANKAXESS-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT BANKLINKNORDEA-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST BANKLINKNORDEA-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT BILLINGPARTNER-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST BILLINGPARTNER-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT CASHU-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST CASHU-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT DINEROMAIL_7ELEVEN-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST DINEROMAIL_7ELEVEN-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT DINEROMAIL_OXXO-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST DINEROMAIL_OXXO-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT DINEROMAIL_ONLINE_BT-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST DINEROMAIL_ONLINE_BT-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT DINEROMAIL_SERVIPAG-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST DINEROMAIL_SERVIPAG-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT EKONTO-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST EKONTO-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT EPAY-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST EPAY-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT EUTELLER-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST EUTELLER-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT EWIREDK-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST EWIREDK-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT EWIRENO-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST EWIRENO-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT EWIRESE-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST EWIRESE-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT HALCASH-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST HALCASH-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT INSTADEBIT-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST INSTADEBIT-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT KONBINI-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST KONBINI-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT LOBANET_AR-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST LOBANET_AR-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT LOBANET_BR-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST LOBANET_BR-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT LOBANET_CL-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST LOBANET_CL-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT LOBANET_MX-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST LOBANET_MX-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT LOBANET_PE-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST LOBANET_PE-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT LOBANET_UY-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST LOBANET_UY-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT MISTERCASH-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST MISTERCASH-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT MULTIBANCO-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST MULTIBANCO-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT NEOSURF-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST NEOSURF-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT NINETYNINEBILL-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST NINETYNINEBILL-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT PAYSAFECARD-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST PAYSAFECARD-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT PAGA-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST PAGA-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT PAGA_VERVE-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST PAGA_VERVE-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT PAYU-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST PAYU-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT PLUSPAY-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST PLUSPAY-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT POLI-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST POLI-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT POLINZ-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST POLINZ-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT POSTEPAY-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST POSTEPAY-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT PRZELEWY-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST PRZELEWY-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT QIWI-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST QIWI-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT SAFETYPAY-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST SAFETYPAY-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT SID-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST SID-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT SKRILL-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST SKRILL-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT SOFORT-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST SOFORT-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT SPOROPAY-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST SPOROPAY-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT TELEINGRESO-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST TELEINGRESO-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT TICKETSURF-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST TICKETSURF-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT TRUSTPAY_CZ-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST TRUSTPAY_CZ-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT TRUSTPAY_EE-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST TRUSTPAY_EE-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT TRUSTPAY_SK-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST TRUSTPAY_SK-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT WEBMONEY-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST WEBMONEY-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT YANDEXMONEY-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST YANDEXMONEY-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_AUD-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_AUD-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_CAD-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_CAD-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_CHF-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_CHF-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_CZK-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_CZK-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_DKK-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_DKK-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_EUR-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_EUR-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_GBP-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_GBP-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_HKD-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_HKD-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_HUF-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_HUF-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_JPY-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_JPY-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_NOK-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_NOK-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_NZD-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_NZD-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_PLN-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_PLN-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_RUB-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_RUB-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_SEK-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_SEK-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_SGD-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_SGD-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_THB-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_THB-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_TRY-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_TRY-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_USD-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_USD-BANK shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT ENVOY_TRANSFER_ZAR-BANK EMPTY>
<!ATTLIST ENVOY_TRANSFER_ZAR-BANK shopperCountryCode NMTOKEN #REQUIRED>

<!ELEMENT ASTROPAYCARD-SSL (pan,cvv,expiryDate,successURL, cancelURL, pendingURL)>
<!ATTLIST ASTROPAYCARD-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT SWIFF-SSL (pan, cvv, expiryDate, successURL, cancelURL, pendingURL)>
<!ATTLIST SWIFF-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT pan (#PCDATA )>
<!ELEMENT cvv (#PCDATA )>

<!ELEMENT BANCOSANTANDER-SSL (rut,successURL, cancelURL, pendingURL)>
<!ATTLIST BANCOSANTANDER-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT rut (#PCDATA )>

<!ELEMENT BOLETO-SSL (cpf,successURL, cancelURL, pendingURL)>
<!ATTLIST BOLETO-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT cpf (#PCDATA )>

<!ELEMENT IBANQ-SSL (accountNumber, accountPassword, successURL, cancelURL, pendingURL)>
<!ATTLIST IBANQ-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT MONETA-SSL (accountNumber, accountPassword, successURL, cancelURL, pendingURL)>
<!ATTLIST MONETA-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT accountPassword (#PCDATA )>

<!-- SPEEDCARD-SSL also requires the customerId, 
     which is defined below the thirdPartyData element -->
<!ELEMENT SPEEDCARD-SSL (successURL, cancelURL, pendingURL)>
<!ATTLIST SPEEDCARD-SSL shopperCountryCode NMTOKEN #REQUIRED>

<!ELEMENT TODITOCARD-SSL (pan, pin, successURL, cancelURL, pendingURL)>
<!ATTLIST TODITOCARD-SSL shopperCountryCode NMTOKEN #REQUIRED>
<!ELEMENT pin (#PCDATA )>

<!ELEMENT TRANSFER_AT-BANK EMPTY>
<!ELEMENT TRANSFER_BE-BANK EMPTY>
<!ELEMENT TRANSFER_CH-BANK EMPTY>
<!ELEMENT TRANSFER_DE-BANK EMPTY>
<!ELEMENT TRANSFER_DK-BANK EMPTY>
<!ELEMENT TRANSFER_ES-BANK EMPTY>
<!ELEMENT TRANSFER_FI-BANK EMPTY>
<!ELEMENT TRANSFER_FR-BANK EMPTY>
<!ELEMENT TRANSFER_GB-BANK EMPTY>
<!ELEMENT TRANSFER_GR-BANK EMPTY>
<!ELEMENT TRANSFER_IT-BANK EMPTY>
<!ELEMENT TRANSFER_JP-BANK EMPTY>
<!ELEMENT TRANSFER_LU-BANK EMPTY>
<!ELEMENT TRANSFER_NL-BANK EMPTY>
<!ELEMENT TRANSFER_NO-BANK EMPTY>
<!ELEMENT TRANSFER_PL-BANK EMPTY>
<!ELEMENT TRANSFER_SE-BANK EMPTY>
<!ELEMENT TRANSFER_US-BANK EMPTY>  

<!ELEMENT cardSwipe (track*)>
<!ELEMENT track (#PCDATA)>
<!ATTLIST track number (1|2|3|4) #REQUIRED>

<!ELEMENT localDateTimeAtPOS (date)>

<!ELEMENT session EMPTY>
<!ATTLIST session  shopperIPAddress	NMTOKEN  #IMPLIED
                   id               NMTOKEN  #IMPLIED >
<!-- CHILD ELEMENTS OF PAYPAL-EXPRESS -->
<!ELEMENT successURL (#PCDATA )>
<!ELEMENT failureURL (#PCDATA )>
<!ELEMENT cancelURL (#PCDATA )>

<!-- EXTRA CHILD ELEMENTS FOR ALTERNATIVE PAYMENT METHODS -->
<!ELEMENT pendingURL (#PCDATA )>

<!-- CHILD ELEMENTS OF CB-SSL, CARTEBLEUE-SSL, VISA-SSL, -->
<!-- DISCOVER-SSL, JCB-SSL, LASER-SSL, DANKORT-SSL, JCB-SSL, -->
<!-- ECMC-SSL, AMEX-SSL, DINERS-SSL, AURORE-SSL, GECAPITAL, -->
<!-- NCPB2B-SSL, NCPSEASON-SSL, NCPGMM-SSL, BHS-SSL, IKEA-SSL ELEMENT -->
<!-- =================================================== -->
<!ELEMENT cardNumber  (#PCDATA )>
<!ELEMENT expiryDate  (date )>
<!ELEMENT cardHolderName  (#PCDATA )>
<!ELEMENT cvc  (#PCDATA )>
<!-- the cardAddress element represents the address of -->
<!-- the card holder or, where appliccable, account holder -->
<!ELEMENT cardAddress  (address )>

<!-- CHILD ELEMENTS OF ACH-SSL -->
<!ELEMENT authentication ((licenseNumber, licenseState)?, birthDate?, ssn?, shopperEmailAddress?, firstName, lastName, address)>
<!ELEMENT deposit (authenticationId?, firstName, lastName, bankAccountType, routingNumber, accountNumber, checkNumber?,businessName?, addendaRecord?,doVerification?)>
<!ELEMENT validation (firstName, lastName, bankAccountType, routingNumber, accountNumber, doVerification?)>
<!ELEMENT verification (bankAccountType, routingNumber, accountNumber)>
<!ELEMENT licenseNumber  (#PCDATA)>
<!ELEMENT licenseState  (#PCDATA)>
<!ELEMENT ssn  (#PCDATA)>
<!ELEMENT bankAccountType (#PCDATA)>
<!ELEMENT routingNumber (#PCDATA)>
<!ELEMENT accountNumber (#PCDATA)>
<!ELEMENT checkNumber (#PCDATA)>
<!ELEMENT businessName (#PCDATA)>
<!ELEMENT addendaRecord (#PCDATA)>
<!ELEMENT authenticationId (#PCDATA)>
<!ELEMENT ACHOrderId (#PCDATA)>
<!ELEMENT checkpointSummary (#PCDATA)>
<!ELEMENT fraudShieldIndicators (#PCDATA)>
<!ELEMENT newRoutingNumber (#PCDATA)>
<!ELEMENT newAccountNumber (#PCDATA)>
<!ELEMENT newBankAccountType (#PCDATA)>
<!ELEMENT doVerification EMPTY>

<!-- 	Payment method attribute elements are sent along with the order and can be 
 	used by merchant to supply payment method specific attributes. The payment method
 	implementation, if used, can query and use these attributes for specific order. 
 
 	This functionality is currently being used by ACH payment method for setting 
 	verification and authentication flags. Merchant can send these flags along with
 	order. If shopper uses eCheck payment method then screen can will authentication 
 	fields only if authentication flag is 'Y'  -->
 	
<!ELEMENT paymentMethodAttribute (paymentMethod, attrName, attrValue)>
<!ELEMENT attrName (#PCDATA)>
<!ELEMENT attrValue (#PCDATA)>

<!-- Used to specify the text displayed on the shoppers' statement.  Only supported by certain acquirers -->
<!ELEMENT statementNarrative (#PCDATA)>

<!-- Used to collect merchant-held data 
     required by some 3rd party processors -->
<!ELEMENT thirdPartyData (customerId?)>
<!ELEMENT customerId (#PCDATA )>

<!-- CHILD ELEMENTS of SINGLE_UNSIGNED_DD_NL-SSL -->
<!-- BankAccount_NL is deprecated for use in new elements, instead
     bankAccount-NL must be used.
     Use is still required within a SINGLE_UNSIGNED_DD_NL-SSL element -->
<!ELEMENT BankAccount_NL (bankAccountNr, accountHolderName, accountHolderResidence)>

<!-- CHILD ELEMENTS of SINGLE_UNSIGNED_DD_FR-SSL -->
<!-- The element BankAccount_FR represents a french -->
<!-- bank account which consists of 5 elements:     -->
<!-- the bankCode (code &eacute;tablissement),      -->
<!-- the branchCode (code guichet),                 -->
<!-- the bankAccountNr,                             -->
<!-- the controlCode (cl&eacute; RIB) and           -->
<!-- the accountHolderName                          -->
<!-- BankAccount_FR is deprecated for use in new elements, instead
     bankAccount-FR must be used.
     Use is still required within a SINGLE_UNSIGNED_DD_FR-SSL element -->
<!ELEMENT BankAccount_FR (bankCode, branchCode, bankAccountNr, controlCode, accountHolderName)>

<!-- Convenience container element for country-specific bank accounts. -->
<!ELEMENT bankAccount (
        bankAccount-AT|
        bankAccount-BE|
        bankAccount-CA|
        bankAccount-CH|
        bankAccount-CZ|
        bankAccount-DE|
        bankAccount-DK|
        bankAccount-EE|
        bankAccount-ES|
        bankAccount-FI|
        bankAccount-FR|
        bankAccount-GB|
        bankAccount-GR|
        bankAccount-HU|
		bankAccount-JP|
        bankAccount-HK|
        bankAccount-IE|
        bankAccount-IT|
        bankAccount-LU|
        bankAccount-NL|
        bankAccount-NO|
        bankAccount-PL|
        bankAccount-PT|
        bankAccount-SE|
        bankAccount-SG|
        bankAccount-US|
        bankAccount-ZA
    )>

<!-- Austrian bank account
     bankAccountNr (Kontonummer) 4-11 digits
     branchCode (Bankleitzahl)   5 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-AT (swiftCode?, bankAccountNr, branchCode, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Australian bank account
     bankCode       3 digits
     branchCode     3 digits
     bankAccountNr  9 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-AU (swiftCode?, bankCode, branchCode, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Belgian bank account
     bankCode      3 digits
     bankAccountNr 7 digits
     controlCode   2 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-BE (swiftCode?, bankCode, bankAccountNr, controlCode, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Canadian bank account
     bankCode      4 digits
     branchCode    5 digits
     bankAccountNr 12 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-CA (swiftCode?, bankCode, branchCode, bankAccountNr, bankName, bankAddress, bankCity,  accountHolderName)>
<!-- Swiss bank account
     branchCode (Clearingnummer) 5 digits
     bankAccountNr (Kontonummer) 1-16 digits/characters
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-CH (swiftCode?, branchCode, bankAccountNr, bankName, bankAddress?, bankCity, accountHolderName)>
<!-- Czech republic bank account
     bankCode		4 digits
     branchCode		(First part/prefix) 0-6 digits
     bankAccountNr	(Second part/basic) 2-10 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-CZ (swiftCode?, bankCode, branchCode, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- German bank account
     branchCode (Bankleitzahl)   8 digits
     bankAccountNr (Kontonummer) 1-10 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-DE (swiftCode?, branchCode, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Danish bank account
     bankCode (Registreringsnummer) 4 digits
     bankAccountNr (Kontonummer)    10 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-DK (swiftCode?, bankCode, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Estonian bank account
     bankAccountNr 4-14 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-EE (swiftCode?, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Spanish bank account
     bankCode (Codigo de entidad) 4 digits
     branchCode (Codigo de oficina) 4 digits
     controlCode (Digitos de control) 2 digits
     bankAccountNr (Numero de cuenta) 10 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-ES (swiftCode?, bankCode, branchCode, controlCode, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Finnish bank account
     bankCode      6 digits
     bankAccountNr 2-8 digits (including check-digit)
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-FI (swiftCode?, bankCode, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- French bank account
     bankCode (Code banque)           5 digits
     branchCode (Code guichet)        5 digits
     bankAccountNr (Numero de compte) 11 digits/characters
     controlCode (Cle de controle)    2 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-FR (swiftCode?, bankCode, branchCode, bankAccountNr, bankName?, bankAddress?, bankCity?, controlCode, accountHolderName)>
<!-- UK bank account
     branchCode (Sort Code)     6 digits
     bankAccountNr (Account Number) 7/8 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-GB (swiftCode?, branchCode, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Greek bank account
     bankCode (Kodikos Trapezas)       1-3 digits
     branchCode (Kodikos Katastimatos) 1-4 digits
     bankAccountNr                     8-16 digits/characters
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-GR (swiftCode?, bankCode?, branchCode?, bankAccountNr, bankName, bankAddress?, bankCity, accountHolderName)>
<!-- Hong Kong bank account
     bankCode      3 digits
     branchCode    3 digits
     bankAccountNr 1-10 digits
     bankName      non empty string
     bankAddress   non empty string
     bankCity      non empty string -->
<!ELEMENT bankAccount-HK (swiftCode?, bankCode, branchCode, bankAccountNr, bankName, bankAddress, bankCity, accountHolderName)>
<!-- Hungarian bank account
     bankCode		8 digits (last digit is check digit)
     bankAccountNr	8-16 digits (last digit is check digit)
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-HU (swiftCode?, bankCode, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Irish bank account
     branchCode (Sorting code)      6 digits
     bankAccountNr (Account number) 8 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-IE (swiftCode?, branchCode, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Italian bank account
     controlCode (CIN)               1 letter
     bankCode (ABI code)             5 digits
     branchCode (CAB code)           5 digits
     bankAccountNr (Numero di Conto) 12 digits/characters
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-IT (swiftCode?, controlCode, bankCode, branchCode, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Japanese bank account
     bankCode			numeric bank code
     bankAccountNr		numeric account number (up to 12 digits)
     bankName			bank name in English
     bankNameLocal		bank name in local language
     bankAddress		bank address
     bankCity			bank city
     branchName			branch name in English
     branchNameLocal		branch name in local language
     branchCode			branch code
     accountHolderName		account holder name in English
     accountHolderNameLocal 	account holder name in local language  -->
<!ELEMENT bankAccount-JP (swiftCode?, bankCode, bankAccountNr, bankName?, bankNameLocal?, bankAddress?, bankCity?, branchName?, branchNameLocal?, branchCode?, accountHolderName?, accountHolderNameLocal?)>
<!-- Luxemburgian bank account
     bankCode      3 digits
     bankAccountNr 13 digits
     controlCode   2 digits(IBAN check digits)
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-LU (swiftCode?, controlCode, bankCode, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Dutch bank account
     bankAccountNr (Rekeningnummer) 3-9 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-NL (swiftCode?, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Norwegian bank account
     bankAccountNr (Kontonummer) 11 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-NO (swiftCode?, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- New Zealand bank account
     bankCode       4 digits
     branchCode     3 digits
     bankAccountNr  7 digits
	 controlCode    2 digits(check digits)
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-NZ (swiftCode?, bankCode, branchCode, bankAccountNr, bankName?, bankAddress?, bankCity?, controlCode, accountHolderName)>
<!-- Polish bank account
     bankCode      8 digits
     bankAccountNr 16 digits
     controlCode   2 digits(IBAN check digits)
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-PL (swiftCode?, controlCode, bankCode, bankAccountNr, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Portuguese bank account
     bankCode (Codigo de Banco)       4 digits
     branchCode (Codigo de Balcao)    4 digits
     bankAccountNr (Numero de compte) 11 digits/characters
     controlCode (Cle de controle)    2 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-PT (swiftCode?, bankCode, branchCode, bankAccountNr, controlCode, bankName?, bankAddress?, bankCity?, accountHolderName)>
<!-- Swedish bank account
     bankCode       4-5 digits
     bankAccountNr  1-9 digits
     controlCode    1 digit
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-SE (swiftCode?, bankCode, bankAccountNr, controlCode,bankName?, bankAddress?, bankCity?,  accountHolderName)>
<!-- Singaporean bank account
     bankCode       4 digits
     branchCode     3 digits
     bankAccountNr  9 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string -->
<!ELEMENT bankAccount-SG (swiftCode?, bankCode, branchCode, bankAccountNr, bankName, bankAddress?, bankCity, accountHolderName)>
<!-- US bank account
     branchCode (Sort code) 9 digits
     bankAccountNr          1-17 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string -->
<!ELEMENT bankAccount-US (swiftCode?, branchCode, bankAccountNr, accountHolderName, accountHolderCity,  bankName, bankAddress, bankCity)>
<!-- South African bank account
     branchCode     6 digits
     bankAccountNr  1-9 digits
     bankName       non empty string
     bankAddress    non empty string
     bankCity       non empty string  -->
<!ELEMENT bankAccount-ZA (swiftCode, branchCode, bankAccountNr, bankName, bankAddress?, bankCity?, accountHolderName)>


<!-- name of the account holder -->
<!ELEMENT accountHolderName  (#PCDATA )>
<!-- name of the account holder in local language -->
<!ELEMENT accountHolderNameLocal (#PCDATA)>
<!-- accountHolderResidence is deprecated for new elements,
     use accountHolderCity instead.
     Use still required within a BankAccount_NL element -->
<!ELEMENT accountHolderResidence  (#PCDATA )>
<!-- accountHolderCity replaces accountHolderResidence -->
<!ELEMENT accountHolderCity  (#PCDATA )>
<!-- the SWIFT code of the bank -->
<!ELEMENT swiftCode  (#PCDATA )>
<!-- the bank code -->
<!ELEMENT bankCode  (#PCDATA )>
<!-- the branch code -->
<!ELEMENT branchCode  (#PCDATA )>
<!-- the control code, or check-digit -->
<!ELEMENT controlCode  (#PCDATA )>
<!-- customer's account nr -->
<!ELEMENT bankAccountNr  (#PCDATA )>
<!-- the name of the bank -->
<!ELEMENT bankName  (#PCDATA )>
<!-- the name of the bank in local language -->
<!ELEMENT bankNameLocal (#PCDATA)>
<!-- the city of the bank -->
<!ELEMENT bankCity  (#PCDATA )>
<!-- the addresss of the bank -->
<!ELEMENT bankAddress  (#PCDATA )>
<!-- the name of the branch -->
<!ELEMENT branchName (#PCDATA)>
<!-- the name of the branch in local language -->
<!ELEMENT branchNameLocal (#PCDATA)>

<!-- Location of the bank in Germany -->
<!ELEMENT bankLocation  (#PCDATA )>
<!-- Unique bank code for a bank located in Germany -->
<!ELEMENT bankLocationId (#PCDATA)>

<!-- CHILD ELEMENTS OF creditScoring ELEMENT -->
<!-- credit scoring is only available for merchants -->
<!-- with a  guaranteed payment agreement with InterCard -->
<!ELEMENT creditScoring (birthDate,address)>
<!-- The birthDate element represents the date of birth -->
<!-- of the account holder, which is used in credit scoring -->
<!ELEMENT birthDate	(date)>

<!-- CHILD ELEMENTS OF MAESTRO-SSL, SOLO_GB-SSL ELEMENT -->
<!ELEMENT issueNumber (#PCDATA)>

<!-- CHILD ELEMENT OF paymentDetails ELEMENT -->
<!ELEMENT EMV_Request (application, issuerCardData, terminal,transaction,unpredictable)>

<!ELEMENT application (ICCCryptogramInformation,ICCCryptogramType,ICCAppUsageControl?,
						ICCAppId,cryptogram,interchangeProfile,transactionCounter)>

<!ELEMENT ICCCryptogramInformation (#PCDATA)>
<!ELEMENT ICCCryptogramType (#PCDATA)>
<!ELEMENT ICCAppUsageControl (#PCDATA)>
<!ELEMENT ICCAppId (#PCDATA)>
<!ELEMENT cryptogram (#PCDATA)>
<!ELEMENT interchangeProfile (#PCDATA)>
<!ELEMENT transactionCounter (#PCDATA)>

<!ELEMENT issuerCardData (ICCIssuerActionCode,applicationData,track?,applicationPANSequenceNumber?)>
<!ELEMENT ICCIssuerActionCode (#PCDATA)>
<!ELEMENT applicationData (#PCDATA)>
<!ELEMENT applicationPANSequenceNumber (#PCDATA)>

<!ELEMENT terminal (TAVN,capabilities,verificationResults)>
<!ATTLIST terminal countryCode NMTOKEN #REQUIRED
                   type        NMTOKEN #IMPLIED >

<!ELEMENT TAVN (#PCDATA)>
<!ELEMENT capabilities (#PCDATA)>
<!ELEMENT verificationResults (#PCDATA)>
<!ELEMENT additionalCapabilities (#PCDATA)>

<!ELEMENT transaction (ICCTrxStatus,ICCVerificationType,ICCVerificationResult,reasonForOnline?)>
<!ELEMENT ICCTrxStatus (#PCDATA)>
<!ELEMENT ICCVerificationType (#PCDATA)>
<!ELEMENT ICCVerificationResult (#PCDATA)>
<!ELEMENT reasonForOnline (#PCDATA)>

<!ELEMENT unpredictable (#PCDATA)>



<!ELEMENT EMV_Response (authenticationData,script)>
<!ELEMENT authenticationData (ARPC,authorisationResponseCode,responseAdditionalData)>
<!ELEMENT script (#PCDATA)>
<!ELEMENT ARPC (#PCDATA)>
<!ELEMENT authorisationResponseCode (#PCDATA)>
<!ELEMENT responseAdditionalData (#PCDATA)>

<!-- CHILD ELEMENTS OF JOURNAL ELEMENT -->
<!-- the accountType's AUTHORISED, CAPTURED, IN_PROCESS, FOREX, SETTLED_ACQUIRER_TOTAL are obsolete from version 1.4 and on -->
<!-- ================================= -->
<!ELEMENT accountTx  (amount )>
<!ATTLIST accountTx  accountType  (AUTHORISED |
                                   CAPTURED |
                                   IN_PROCESS |
                                   FOREX |
                                   DEPOSIT |
                                   IN_PROCESS_AUTHORISED |
                                   IN_PROCESS_CAPTURED |
                                   IN_PROCESS_SENT_FOR_AUTH |
                                   PAYOUT |
                                   SETTLED_BIBIT_NET |
                                   SETTLED_BIBIT_COMMISSION |
                                   SETTLED_ACQUIRER_TOTAL )  #REQUIRED
					 batchId NMTOKEN #IMPLIED>

<!ELEMENT journalReference EMPTY>
<!ATTLIST journalReference type      NMTOKEN  #REQUIRED
                           reference CDATA    #IMPLIED >

<!-- CHILD ELEMENTS OF PAYMENT ELEMENT -->
<!-- ================================= -->
<!ELEMENT paymentMethodDetail		(card?)>
<!ELEMENT card	(issueNumber?,expiryDate?)>
<!ATTLIST card	number        CDATA  #IMPLIED
                    hash CDATA #IMPLIED
 					type (creditcard | debitcard) #IMPLIED>
<!ELEMENT balance		(amount )>
<!ATTLIST balance		accountType NMTOKEN  #REQUIRED >
<!ELEMENT paymentMethod		(#PCDATA )>
<!ELEMENT ISO8583ReturnCode	EMPTY>
<!ATTLIST ISO8583ReturnCode	code        NMTOKEN  #REQUIRED
                        	description CDATA    #REQUIRED >
<!ELEMENT IssuerResponseCode	EMPTY>
<!ATTLIST IssuerResponseCode	code        NMTOKEN  #REQUIRED
                        	    description CDATA    #REQUIRED >
<!ELEMENT lastEvent		(#PCDATA )>
<!ELEMENT AuthorisationId EMPTY>
<!ATTLIST AuthorisationId  id NMTOKEN  #REQUIRED >
<!ATTLIST AuthorisationId  by NMTOKEN  #IMPLIED >

<!ELEMENT CVCResultCode	EMPTY>
<!ATTLIST CVCResultCode description NMTOKENS #REQUIRED >
<!ELEMENT AVSResultCode	EMPTY>
<!ATTLIST AVSResultCode description NMTOKENS #REQUIRED >
<!ELEMENT AAVAddressResultCode	EMPTY>
<!ATTLIST AAVAddressResultCode description NMTOKENS #REQUIRED >
<!ELEMENT AAVPostcodeResultCode	EMPTY>
<!ATTLIST AAVPostcodeResultCode description NMTOKENS #REQUIRED >
<!ELEMENT AAVCardholderNameResultCode	EMPTY>
<!ATTLIST AAVCardholderNameResultCode description NMTOKENS #REQUIRED >
<!ELEMENT AAVTelephoneResultCode	EMPTY>
<!ATTLIST AAVTelephoneResultCode description NMTOKENS #REQUIRED >
<!ELEMENT AAVEmailResultCode	EMPTY>
<!ATTLIST AAVEmailResultCode description NMTOKENS #REQUIRED >
<!ELEMENT ThreeDSecureResult	EMPTY>
<!ATTLIST ThreeDSecureResult description NMTOKENS #REQUIRED >
<!ELEMENT issuerCountryCode		(#PCDATA )>

<!ELEMENT riskScore EMPTY>
<!ATTLIST riskScore value CDATA #REQUIRED
					provider CDATA #IMPLIED
					id CDATA #IMPLIED
					message CDATA #IMPLIED >

<!-- CHILD ELEMENTS OF ORDERMODIFICATION ELEMENT -->
<!-- ================================================== -->
<!ELEMENT cancel (localDateTimeAtPOS?)>
<!-- The cancel immediate attribute can only used for EMV transactions.
     If the merchant is not participating in EMV the value is not checked.
     When the value is set to 'yes', a cancel will be processed directly, 
     and not saved as batch.
     Of course the Shoppercell of the authorisation and the cancel should 
     be the same! -->
<!ATTLIST cancel immediate (yes|no) 'no' >
<!ELEMENT cancelOrRefund EMPTY>
<!ELEMENT capture  (localDateTimeAtPOS?, date?, amount, (cryptogram, ICCTrxStatus, verificationResults)?, branchSpecificExtension? )>
<!ATTLIST capture reference CDATA #IMPLIED >
<!ELEMENT defend  (disputeDefence )>
<!ELEMENT refund  (amount, branchSpecificExtension?, reason? )>
<!ATTLIST refund reference CDATA #IMPLIED >
<!ATTLIST refund paymentId CDATA #IMPLIED >
<!ATTLIST refund shopperWebformRefund (true|false) #IMPLIED >
<!ELEMENT addBackOfficeCode EMPTY>
<!ATTLIST addBackOfficeCode backOfficeCode CDATA #REQUIRED >
<!ELEMENT authorise EMPTY>
<!ATTLIST authorise authorisationCode CDATA #REQUIRED >
<!ELEMENT increaseAuthorisation (amount)>


<!-- CHILD ELEMENTS OF DEFEND ELEMENT -->
<!-- ====================================== -->
<!ELEMENT disputeDefence  (#PCDATA )>

<!-- OPTIONAL CHILD ELEMENTS OF REFUND ELEMENT -->
<!-- ====================================== -->
<!ELEMENT reason  (#PCDATA )>

<!-- CHILD ELEMENTS OF ORDERINQUIRY ELEMENT -->
<!-- ====================================== -->
<!ELEMENT cardSearch	(startDate )>
<!ATTLIST cardSearch	cardNumber NMTOKEN  #REQUIRED >
<!ELEMENT dateSearch	(fromDate, untilDate )>
<!ATTLIST dateSearch journalTypeFilter CDATA #IMPLIED>
<!ELEMENT creationDate	(date )>
<!ELEMENT fromDate	(date )>
<!ELEMENT untilDate	(date )>
<!ELEMENT bookingDate	(date )>
<!ELEMENT lastDate	(date )>
<!ELEMENT startDate	(date )>
<!ELEMENT date EMPTY>
<!ATTLIST date  dayOfMonth NMTOKEN  #IMPLIED
                month      NMTOKEN  #REQUIRED
                year       NMTOKEN  #REQUIRED
                hour       NMTOKEN  #IMPLIED
                minute     NMTOKEN  #IMPLIED
                second     NMTOKEN  #IMPLIED >

<!-- CHILD ELEMENTS OF SHOPPER ELEMENT -->
<!-- ===================================== -->
<!ELEMENT shopperEmailAddress		(#PCDATA )>
<!ELEMENT authenticatedShopperID	(#PCDATA )>


<!-- CHILD ELEMENTS OF ALL ADDRESS ELEMENTS -->
<!-- ================================= -->
<!ELEMENT address  (	firstName?,
			lastName?,
			((street, houseName?, houseNumber?, houseNumberExtension?) 
			| (address1, address2?, address3?)),
			postalCode,
			city?,
			state?,
 			countryCode,
			telephoneNumber? )>

<!-- CHILD ELEMENTS OF ADDRESS ELEMENT -->
<!-- ================================= -->
<!ELEMENT firstName		(#PCDATA )>
<!ELEMENT lastName		(#PCDATA )>
<!ELEMENT street		(#PCDATA )>
<!ELEMENT houseName		(#PCDATA )>
<!ELEMENT houseNumber		(#PCDATA )>
<!ELEMENT houseNumberExtension	(#PCDATA )>
<!ELEMENT address1			(#PCDATA )>
<!ELEMENT address2			(#PCDATA )>
<!ELEMENT address3			(#PCDATA )>
<!ELEMENT postalCode		(#PCDATA )>
<!ELEMENT city			(#PCDATA )>
<!ELEMENT state			(#PCDATA )>
<!ELEMENT countryCode		(#PCDATA )>
<!ELEMENT telephoneNumber	(#PCDATA )>


<!-- CHILD ELEMENTS OF ALL TICKET-DETAILS ELEMENTS -->  
<!-- ================================= -->
<!ELEMENT ticketDetails  (bookingSystemTrvl?,
		                  isSeatSale?, 
		                  isWithChild?, 
		                  purchaseType?,
			              isPackageTrvl?,
			              isFlexTicket?, 
			              isInsPurchased?, 
			              secProgTrvl? )>
			
	
			
<!-- CHILD ELEMENTS OF ALL TICKET-DETAILS ELEMENTS -->  
<!-- ================================= -->
<!ELEMENT bookingSystemTrvl		(#PCDATA ) >   
<!ELEMENT isSeatSale  (#PCDATA)>   
<!ELEMENT isWithChild (#PCDATA)>
<!ELEMENT purchaseType (#PCDATA)> 
<!ELEMENT isPackageTrvl	(#PCDATA)>
<!ELEMENT isFlexTicket	(#PCDATA)>    
<!ELEMENT isInsPurchased  (#PCDATA)>
<!ELEMENT secProgTrvl (#PCDATA)>

<!-- CHILD ELEMENTS OF ALL HOTEL ELEMENTS -->
<!-- ================================= -->
<!ELEMENT hotel  (	checkInDate, checkOutDate      )>

<!-- CHILD ELEMENTS OF ALL CHECKINDATE ELEMENTS -->
<!-- ================================= -->
<!ELEMENT checkInDate  (	date	)>

<!-- CHILD ELEMENTS OF ALL CHECKOUTDATE ELEMENTS -->
<!-- ================================= -->
<!ELEMENT checkOutDate  (	date	)>

<!-- CHILD ELEMENTS OF ALL AIRLINE ELEMENTS -->
<!-- ================================= -->
<!ELEMENT airline  (	airlineName,
						passenger,
						(ticket|nonTicket),
						agent )>
<!-- Code, length 3, consists of the IATA airline code -->
<!ATTLIST airline	code NMTOKEN #REQUIRED
					planNumber (03|06|09|12|00) #IMPLIED>

<!-- CHILD ELEMENTS OF ALL AIRLINENAME ELEMENTS -->
<!-- ================================= -->
<!-- Contains the name of an airline as it may appear on a bill -->
<!ELEMENT	airlineName  (	#PCDATA )>

<!-- CHILD ELEMENTS OF ALL PASSENGER ELEMENTS -->
<!-- ================================= -->
<!-- Contains the name of a passenger  -->
<!ELEMENT	passenger  (#PCDATA	)>
<!ELEMENT	isFreqFlyer   (	#PCDATA	)>
<!ATTLIST	passenger	code NMTOKEN #REQUIRED 
                        isFreqFlyer (0|1) #IMPLIED >

<!-- CHILD ELEMENTS OF ALL TICKET ELEMENTS -->
<!-- ================================= -->
<!-- Code consists of the ticket number -->
<!ELEMENT ticket  (	issuer,
					flight*	)>
<!ATTLIST ticket	code NMTOKEN #REQUIRED
					restricted (0|1) #REQUIRED>

<!-- CHILD ELEMENTS OF ALL NONTICKET ELEMENTS -->
<!-- ================================= -->
<!ELEMENT nonTicket  (	#PCDATA	)>

<!-- CHILD ELEMENTS OF ALL AGENT ELEMENTS -->
<!-- ================================= -->
<!-- Code, length 8, consists of the IATA travel agency code -->
<!-- Agent element, contains name of travel agent -->
<!ELEMENT agent	(	#PCDATA )>
<!ATTLIST agent	code NMTOKEN #REQUIRED>

<!-- CHILD ELEMENTS OF ALL ISSUER ELEMENTS -->
<!-- ================================= -->
<!ELEMENT issuer  (	address, ticketDetails?)>

<!-- CHILD ELEMENTS OF ALL FLIGHT ELEMENTS -->
<!-- ================================= -->
<!-- carrierCode, length 2, consists of the IATA carrier code -->
<!ELEMENT flight  (	departureAirport,
					arrivalAirport,
					departureDate,
					fare,
					tax	)>
<!ATTLIST flight	carrierCode NMTOKEN #REQUIRED
					stopOverCode (0|1) #IMPLIED
					flightCode CDATA   #IMPLIED
					isChartered  (0|1) #IMPLIED
					domestic     (0|1) #IMPLIED >

<!-- CHILD ELEMENTS OF ALL DEPARTUREAIRPORT ELEMENTS -->
<!-- ================================= -->
<!-- Consists of the 3 chars IATA airport code -->
<!ELEMENT departureAirport  (	#PCDATA )>

<!-- CHILD ELEMENTS OF ALL ARRIVALAIRPORT ELEMENTS -->
<!-- ================================= -->
<!-- Consists of the 3 chars IATA airport code -->
<!ELEMENT arrivalAirport  (	#PCDATA )>

<!-- CHILD ELEMENTS OF ALL DEPARTUREDATE ELEMENTS -->
<!-- ================================= -->
<!ELEMENT departureDate  (	date	)>

<!-- CHILD ELEMENTS OF ALL FARE ELEMENTS -->
<!-- ================================= -->
<!-- class consists of the single character IATA
		travel class code -->
<!ELEMENT fare 	EMPTY>
<!ATTLIST fare	class NMTOKEN #REQUIRED
				basis NMTOKEN #IMPLIED>

<!-- CHILD ELEMENTS OF ALL FARE ELEMENTS -->
<!-- ================================= -->
<!ELEMENT tax 	(	amount	)	>

<!-- CHILD ELEMENTS OF ALL PURCHASE ELEMENTS -->
<!-- ================================= -->
<!ELEMENT purchase (	costCenter,
						shopperVATNumber,
                        merchantVATNumber,
						purchaseCardAccount?,
						invoiceNumber?,
						invoiceDate?,
						invoiceTreatment?,
						poNumber?,
						customerReference?,
						buyerAddress?,
						item*,
                        freight*,
                        total)>

<!ELEMENT costCenter (#PCDATA)>
<!ELEMENT item (	description,
					commodity,
					netUnitPrice,
					netDiscount,
					grossAmount,
					VAT,
					taxCategory?)>
<!ATTLIST item	quantity NMTOKEN #REQUIRED
				unit NMTOKEN #REQUIRED>

<!ELEMENT freight (	departure,
					destination,
					netAmount,
					grossAmount,
					VAT)>
<!ELEMENT total (	netAmount,
					netDiscount,
					VAT)>
<!-- GRANDCHILD ELEMENTS OF ALL PURCHASE ELEMENTS -->
<!-- ================================= -->
<!-- if Vatnumber doesn't start with two character language code, it may be
prefixed with the destination CountryCode in the case of the Shopper and
with the departure countryCode in case of the merchant VAT number -->

<!ELEMENT shopperVATNumber			(#PCDATA )>
<!ELEMENT merchantVATNumber			(#PCDATA )>
<!ELEMENT purchaseCardAccount		(#PCDATA )>

<!ELEMENT invoiceNumber				(#PCDATA )>
<!ELEMENT invoiceDate	  			(date)>

<!ELEMENT invoiceTreatment			EMPTY>
<!ATTLIST invoiceTreatment  		code  (E | P | S)  #IMPLIED>

<!ELEMENT poNumber					(#PCDATA )>
<!ELEMENT customerReference			(#PCDATA )>
<!ELEMENT buyerAddress				(address )>

<!ELEMENT taxCategory				EMPTY>
<!ATTLIST taxCategory  				code  (A | E | G | S | Z)  #IMPLIED>

<!ELEMENT commodity EMPTY>
<!ATTLIST commodity	code NMTOKEN #REQUIRED>

<!ELEMENT netUnitPrice (amount)>

<!ELEMENT netDiscount (amount)>

<!ELEMENT grossAmount (amount)>

<!ELEMENT netAmount (amount)>

<!ELEMENT VAT EMPTY>
<!ATTLIST VAT percentage NMTOKEN #REQUIRED>

<!ELEMENT 	departure EMPTY>
<!ATTLIST departure 	countryCode NMTOKEN #REQUIRED
						zipCode NMTOKEN #REQUIRED>


<!ELEMENT 	destination EMPTY>
<!ATTLIST destination 	countryCode NMTOKEN #REQUIRED
						zipCode NMTOKEN #REQUIRED>