<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema elementFormDefault="qualified" version="3.0"
  targetNamespace="http://vipps.no/xmlschema/SettlementReport-3.0.xsd"
  xmlns:vp="http://vipps.no/xmlschema/SettlementReport-3.0.xsd"
  xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:simpleType name="money">
    <xs:restriction base="xs:decimal">
      <xs:fractionDigits value="2" fixed="true"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="positiveMoney">
    <xs:restriction base="vp:money">
      <xs:pattern value="[0-9+].*"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="negativeMoney">
    <xs:restriction base="vp:money">
      <xs:pattern value="(-.+)|(0.00)"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="settlementType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Gross"/>
      <xs:enumeration value="Net"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="FeeDetailsInfo">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="vp:FeeInfo" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="FeeInfo">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="FeeDate" type="xs:date"/>
        <xs:element name="FeeID" type="xs:long"/>
        <xs:element name="FeeAmount" type="vp:money"/>
        <xs:element name="FeeAccount" type="xs:string"/>
        <xs:element name="FeeType" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="PaymentsInfo">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ReportDateFrom" type="xs:date"/>
        <xs:element name="ReportDateTo" type="xs:date"/>
        <xs:element name="SettlementCurrencyCode" type="xs:string"/>
        <xs:element name="ReportReferenceNum" type="xs:string" minOccurs="0"/>
        <xs:element name="SettlementAccountNum" type="xs:string"/>
        <xs:element ref="vp:SettlementInfo" maxOccurs="unbounded"/>
        <xs:element name="NumOfSettlements" type="xs:long"/>
        <xs:element ref="vp:FeeDetailsInfo" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="SettlementDetailsInfo">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="SaleUnitName" type="xs:string"/>
        <xs:element name="SerialNumber" type="xs:string"/>
        <xs:element name="OrganizationName" type="xs:string"/>
        <xs:element name="OrganizationNumber" type="xs:string"/>
        <xs:element name="MainAddress" type="xs:string"/>
        <xs:element name="MainAddressZipCode" type="xs:string"/>
        <xs:element name="MainAddressCity" type="xs:string"/>
        <xs:element name="MainAddressCountryCode" type="xs:string"/>
        <xs:element ref="vp:PaymentsInfo"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!--
  YYYSettlementAmount is the sum of all TransactionYYYAmount within this SettlementInfo.

  SettledAmount is the actual settled amount, net or gross depending on SettlementType.
  -->
  <xs:element name="SettlementInfo">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="SettlementDate" type="xs:date"/>
        <xs:element name="SettlementID" type="xs:long"/>
        <xs:element name="SettlementCurrencyCode" type="xs:string"/>
        <xs:element name="SettlementType" type="vp:settlementType"/>
        <xs:element ref="vp:TransactionInfo" minOccurs="1" maxOccurs="unbounded"/>
        <xs:element name="NumOfTransactions" type="xs:long"/>
        <xs:element name="CaptureSettlementAmount" type="vp:positiveMoney"/>
        <xs:element name="RefundSettlementAmount" type="vp:negativeMoney"/>
        <xs:element name="GrossSettlementAmount" type="vp:money"/>
        <xs:element name="NetSettlementAmount" type="vp:money"/>
        <xs:element name="FeeSettlementAmount" type="vp:positiveMoney"/>
        <xs:element name="SettledAmount" type="vp:money"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="SettlementReport">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="vp:SettlementDetailsInfo" maxOccurs="unbounded"/>
        <xs:element ref="vp:VippsInfo"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <!--
  Capture is always positive or 0.00
  Refund is always negative or 0.00
  Fee is always positive or 0.00
  Gross = Capture + Refund
  Net = Gross - Fee
  -->
  <xs:element name="TransactionInfo">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="TransactionTime" type="xs:dateTime"/>
        <xs:element name="TransactionCaptureAmount" type="vp:positiveMoney"/>
        <xs:element name="TransactionRefundAmount" type="vp:negativeMoney"/>
        <xs:element name="TransactionGrossAmount" type="vp:money"/>
        <xs:element name="TransactionNetAmount" type="vp:money"/>
        <xs:element name="TransactionFeeAmount" type="vp:positiveMoney"/>
        <xs:element name="SettlementCurrencyCode" type="xs:string"/>
        <xs:element name="TransactionID" type="xs:long"/>
        <xs:element name="OrderID" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="VippsInfo">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Name" type="xs:string"/>
        <xs:element name="WebSite" type="xs:anyURI"/>
        <xs:element name="VisitingAddress" type="xs:string"/>
        <xs:element name="PostBox" type="xs:string"/>
        <xs:element name="PostAddress" type="xs:string"/>
        <xs:element name="Country" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>