﻿<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="2019-02-11">
  <xsd:element name="NonOpRoyalties">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Header" type="Header" />
        <xsd:element name="Royalties">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="Royalty" type="Royalty" minOccurs="0" maxOccurs="unbounded" />
            </xsd:sequence>
          </xsd:complexType>
          <xsd:unique name="InvoiceIdUnique">
            <xsd:selector xpath="./Royalty" />
            <xsd:field xpath="InvoiceId" />
          </xsd:unique>
          <xsd:unique name="StatementIdUnique">
            <xsd:selector xpath="./Royalty/Properties/Property" />
            <xsd:field xpath="StatementId" />
          </xsd:unique>
          <xsd:unique name="DetailIdUnique">
            <xsd:selector xpath="./Royalty/Properties/Property/Details/Detail" />
            <xsd:field xpath="DetailId" />
          </xsd:unique>
        </xsd:element>
      </xsd:sequence>
      <xsd:attribute name="XmlSchemaVersion" use="required">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:enumeration value="2019-02-11" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:attribute>
    </xsd:complexType>
  </xsd:element>

  <!-- ComplexTypes -->
  <xsd:complexType name="Header">
    <xsd:sequence>
      <xsd:element name="RequestLoginName" type="xsd:string" />
      <xsd:element name="RequestUserId" type="xsd:long" />
      <xsd:element name="RequestBaId" type="xsd:long" />
      <xsd:element name="RequestDate" type="xsd:dateTime" />
      <xsd:element name="RequestMethod" type="xsd:string" />
	    <xsd:element name="EnergyLinkApiTransactionId" type="xsd:long" minOccurs="0" />
      <xsd:element name="RequestUrl" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="RequestHeaders" minOccurs="0" maxOccurs="1">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="RequestHeader" minOccurs="0" maxOccurs="unbounded">
              <xsd:complexType>
                <xsd:sequence>
                  <xsd:element name="Key" type="xsd:string" minOccurs="1" maxOccurs="1" />
                  <xsd:element name="Value" type="xsd:string" minOccurs="1" maxOccurs="1" />
                </xsd:sequence>
              </xsd:complexType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="RequestContent" type="xsd:string" minOccurs="0" maxOccurs="1" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="Royalty">
    <xsd:sequence>
      <xsd:element name="InvoiceId" type="EnergyLinkPrimaryKey" minOccurs="1" maxOccurs="1" />
      <xsd:element name="InvoiceNumber" type="InvoiceNumber" minOccurs="1" maxOccurs="1" />
      <xsd:element name="InvoiceDate" type="xsd:date" minOccurs="1" maxOccurs="1" />
      <xsd:element name="OpAccountingMonth" type="xsd:date" minOccurs="1" maxOccurs="1" />
      <xsd:element name="ReceivedDate" type="xsd:dateTime" minOccurs="1" maxOccurs="1" />
      <xsd:element name="InvoiceStatus" type="InvoiceStatus" minOccurs="1" maxOccurs="1" />
      <xsd:element name="InvoiceStatusDate" type="xsd:dateTime" minOccurs="1" maxOccurs="1" />
      <xsd:element name="IsApproved" type="xsd:boolean" minOccurs="1" maxOccurs="1" />
      <xsd:element name="LastProcessedDate" type="xsd:dateTime" minOccurs="0" maxOccurs="1" />
      <xsd:element name="ActiveVoucherId" type="xsd:long" minOccurs="0" maxOccurs="1" />
      <xsd:element name="VendorNumber" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="Operator" type="Operator" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>
            Values provided by the Operator during upload
            Note: OpOrgId can change if the Invoice is rerouted
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element name="OwnerNumber" type="xsd:string" minOccurs="1" maxOccurs="1" />
      <xsd:element name="Owner" type="Owner" minOccurs="1" maxOccurs="1">
        <xsd:annotation>
          <xsd:documentation>
            Values provided by the Operator during upload
            Note: PrtOrgId can change if the Invoice is rerouted
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element name="RoyaltyAmount" type="Currency" minOccurs="1" maxOccurs="1" />
      <xsd:element name="OtherAmount" type="Currency" minOccurs="0" maxOccurs="1" />
      <xsd:element name="PaymentAmount" type="Currency" minOccurs="0" maxOccurs="1" />
      <xsd:element name="Payments" minOccurs="0" maxOccurs="1">
        <xsd:complexType>
          <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="Payment" type="Payment" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="RoyaltyHistory" minOccurs="0" maxOccurs="1">
        <xsd:complexType>
          <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="RoyaltyHistoryRecord" type="RoyaltyHistoryRecord" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="Properties" minOccurs="0" maxOccurs="1">
        <xsd:complexType>
          <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="Property" type="Property" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="Payment">
    <xsd:sequence>
      <xsd:element name="PaymentReference" type="xsd:string" minOccurs="1" maxOccurs="1" />
      <xsd:element name="PaymentType" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="PaymentAmount" type="xsd:decimal" minOccurs="0" maxOccurs="1" />
      <xsd:element name="PaymentDate" type="xsd:date" minOccurs="0" maxOccurs="1" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="RoyaltyHistoryRecord">
    <xsd:sequence>
      <xsd:element name="ActionTypeDesc"  type="xsd:string" minOccurs="1" maxOccurs="1" />
      <xsd:element name="ActionId" type="EnergyLinkPrimaryKey" minOccurs="0" maxOccurs="1" />
      <xsd:element name="ActionDate" type="xsd:dateTime" minOccurs="0" maxOccurs="1" />
      <xsd:element name="ActionUserName" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="VoucherReference" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="VoucherAccountingMonth" type="xsd:date" minOccurs="0" maxOccurs="1" />
      <xsd:element name="PartnerAmount" type="Currency" minOccurs="0" maxOccurs="1" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="Property">
    <xsd:sequence>
      <xsd:element name="StatementId" type="EnergyLinkPrimaryKey" minOccurs="1" maxOccurs="1" />
      <xsd:element name="CostCenter" type="CostCenter" minOccurs="0" maxOccurs="1" />
      <xsd:element name="FacilityCode" type="PropertyCode" minOccurs="0" maxOccurs="1" />
      <xsd:element name="FacilityDesc" minOccurs="0" maxOccurs="1">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:minLength value="0" />
            <xsd:maxLength value="100" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
      <xsd:element name="AccountXrefTypeIdRev" type="EnergyLinkPrimaryKey" minOccurs="0" maxOccurs="1" />
      <xsd:element name="AccountXrefTypeDescRev" type="xsd:string" minOccurs="0" maxOccurs="1" />
      <xsd:element name="PartnerAmount" type="Currency" minOccurs="1" maxOccurs="1" />
      <xsd:element name="Details" minOccurs="0" maxOccurs="unbounded">
        <xsd:complexType>
          <xsd:sequence minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="Detail" type="Detail" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="Detail">
    <xsd:sequence>
      <xsd:element name="DetailId" type="EnergyLinkPrimaryKey" minOccurs="1" maxOccurs="1" />
      <xsd:element name="AcctMajId" type="EnergyLinkPrimaryKey" minOccurs="1" maxOccurs="1" />
      <xsd:element name="OpProductCode" type="AccountCode" minOccurs="1" maxOccurs="1" />
      <xsd:element name="OpProductDesc" type="AccountDesc" minOccurs="1" maxOccurs="1" />
      <xsd:element name="EnergyLinkProductDesc" type="AccountDesc" minOccurs="1" maxOccurs="1" />
      <xsd:element name="AcctMinId" type="EnergyLinkPrimaryKey" minOccurs="1" maxOccurs="1" />
      <xsd:element name="OpTypeCode" type="AccountCode" minOccurs="1" maxOccurs="1" />
      <xsd:element name="OpTypeDesc" type="AccountDesc" minOccurs="1" maxOccurs="1" />
      <xsd:element name="EnergyLinkTypeDesc" type="AccountDesc" minOccurs="1" maxOccurs="1" />
      <xsd:element name="PrtProductCode" type="AccountCode" minOccurs="0" maxOccurs="1" />
      <xsd:element name="PrtTypeCode" type="AccountCode" minOccurs="0" maxOccurs="1" />
      <xsd:element name="ActivityDate" type="xsd:date" minOccurs="1" maxOccurs="1" />
      <xsd:element name="RoyBase" minOccurs="0" maxOccurs="1"> <!--NET and GROSS -->
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:enumeration value="Sales" />
            <xsd:enumeration value="Prod" />
            <xsd:enumeration value="Input" />
            <xsd:enumeration value="Unknown" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
      <xsd:element name="RoyRateNet" type="Percent" minOccurs="0" maxOccurs="1" /> <!-- NET Only -->
      <xsd:element name="BaseVol" type="Volume" minOccurs="0" maxOccurs="1" />
      <xsd:element name="RoyFactor" type="Percent" minOccurs="0" maxOccurs="1" /> <!-- NET Only -->
      <xsd:element name="RoyVol" type="Volume" minOccurs="0" maxOccurs="1" /> <!-- NET Only -->
      <xsd:element name="Price" type="xsd:decimal" minOccurs="0" maxOccurs="1" /> <!--NET and GROSS -->
      <xsd:element name="SalesAmt" type="Currency" minOccurs="0" maxOccurs="1" /> <!--NET and GROSS -->
      <xsd:element name="Deduction" type="Currency" minOccurs="0" maxOccurs="1" /> <!--NET and GROSS -->
      <xsd:element name="NetSales" type="Currency" minOccurs="0" maxOccurs="1" /> <!-- GROSS Only -->
      <xsd:element name="RoyRateGross" type="Percent" minOccurs="0" maxOccurs="1" /> <!-- GROSS Only -->
      <xsd:element name="RoyOwnerMultiplier" type="Percent" minOccurs="0" maxOccurs="1" /> <!--NET and GROSS -->
      <xsd:element name="PartnerVolume" type="Volume" minOccurs="0" maxOccurs="1" />
      <xsd:element name="PartnerAmount" type="Currency" minOccurs="1" maxOccurs="1" />
      <xsd:element name="IsPPA" type="xsd:boolean" minOccurs="0" maxOccurs="1" default="false" />
      <xsd:element name="TIKorPOB" minOccurs="0" maxOccurs="1">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:enumeration value="TIK"/>
            <xsd:enumeration value="POB"/>
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
      <xsd:element name="LineComment" minOccurs="0" maxOccurs="1">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:minLength value="0" />
            <xsd:maxLength value="1500" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="Operator">
    <xsd:sequence>
      <xsd:element name="OpOrgId" type="EnergyLinkPrimaryKey" minOccurs="1" maxOccurs="1" />
      <xsd:element name="OrgNumber" minOccurs="1" maxOccurs="1">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:minLength value="1" />
            <xsd:maxLength value="20" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
      <xsd:element name="OrgName" type="OrgName" minOccurs="1" maxOccurs="1" />
      <xsd:element name="OrgNameComment" type="OrgNameComment" minOccurs="0" maxOccurs="1" />
      <xsd:element name="Address1" type="Address1" minOccurs="1" maxOccurs="1" />
      <xsd:element name="Address2" type="Address2" minOccurs="0" maxOccurs="1" />
      <xsd:element name="Address3" type="Address3" minOccurs="0" maxOccurs="1" />
      <xsd:element name="City" type="City" minOccurs="1" maxOccurs="1" />
      <xsd:element name="StateProvince" type="StateProvince" minOccurs="1" maxOccurs="1" />
      <xsd:element name="Country" type="Country" minOccurs="1" maxOccurs="1" />
      <xsd:element name="PostalZIP" type="PostalZIP" minOccurs="1" maxOccurs="1" />
      <xsd:element name="Phone" type="PhoneNumber" minOccurs="0" maxOccurs="1" />
      <xsd:element name="Fax" type="PhoneNumber" minOccurs="0" maxOccurs="1" />
      <xsd:element name="TaxRegNumber" type="TaxRegNumber" minOccurs="0" maxOccurs="1" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="Owner">
    <xsd:sequence>
      <xsd:element name="PrtOrgId" type="EnergyLinkPrimaryKey" minOccurs="1" maxOccurs="1" />
      <xsd:element name="OrgNumber" minOccurs="0" maxOccurs="1">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:minLength value="1" />
            <xsd:maxLength value="50" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
      <xsd:element name="VoucherOrgNumber" minOccurs="0" maxOccurs="1">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:minLength value="1" />
            <xsd:maxLength value="50" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
      <xsd:element name="OrgName" type="OrgName" minOccurs="1" maxOccurs="1" />
      <xsd:element name="OrgNameComment" type="OrgNameComment" minOccurs="0" maxOccurs="1" />
      <xsd:element name="Address1" type="Address1" minOccurs="1" maxOccurs="1" />
      <xsd:element name="Address2" type="Address2" minOccurs="0" maxOccurs="1" />
      <xsd:element name="Address3" type="Address3" minOccurs="0" maxOccurs="1" />
      <xsd:element name="City" type="City" minOccurs="0" maxOccurs="1" />
      <xsd:element name="StateProvince" type="StateProvince" minOccurs="0" maxOccurs="1" />
      <xsd:element name="Country" type="Country" minOccurs="0" maxOccurs="1" />
      <xsd:element name="PostalZIP" type="PostalZIP" minOccurs="0" maxOccurs="1" />
      <xsd:element name="Phone" type="PhoneNumber" minOccurs="0" maxOccurs="1" />
      <xsd:element name="Fax" type="PhoneNumber" minOccurs="0" maxOccurs="1" />
      <xsd:element name="TaxRegNumber" type="TaxRegNumber" minOccurs="0" maxOccurs="1" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="CostCenter">
    <xsd:sequence>
      <xsd:element name="CcId" type="EnergyLinkPrimaryKey" minOccurs="1" maxOccurs="1" />
      <xsd:element name="OpCostCenterCode" type="PropertyCode" minOccurs="1" maxOccurs="1" />
      <xsd:element name="OpCostCenterDesc" minOccurs="1" maxOccurs="1">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:minLength value="1" />
            <xsd:maxLength value="100" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
      <xsd:element name="OpCostCenterDesc2" minOccurs="0" maxOccurs="1">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:minLength value="0" />
            <xsd:maxLength value="100" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
      <xsd:element name="OpCostCenterLocation" minOccurs="0" maxOccurs="1">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:minLength value="0" />
            <xsd:maxLength value="40" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
      <xsd:element name="OpUwi" minOccurs="0" maxOccurs="1">
        <xsd:simpleType>
          <xsd:restriction base="xsd:string">
            <xsd:minLength value="0" />
            <xsd:maxLength value="16" />
          </xsd:restriction>
        </xsd:simpleType>
      </xsd:element>
			<xsd:element name="OpStateProvince" type="StateProvince" minOccurs="0" maxOccurs="1" />
      <xsd:element name="CcXrefId" type="EnergyLinkPrimaryKey" minOccurs="0" maxOccurs="1" />
      <xsd:element name="PrtCostCenterCode" type="PropertyCode" minOccurs="0" maxOccurs="1" />
      <xsd:element name="PrtCostCenterActionCode" type="CcActionCode" minOccurs="0" maxOccurs="1" />
    </xsd:sequence>
  </xsd:complexType>
  
  <!-- SimpleTypes -->
  <xsd:simpleType name="EnergyLinkPrimaryKey">
    <xsd:restriction base="xsd:long" />
  </xsd:simpleType>
  <xsd:simpleType name="OrgName">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="1" />
      <xsd:maxLength value="100" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="OrgNameComment">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="0" />
      <xsd:maxLength value="40" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="Address1">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="1" />
      <xsd:maxLength value="40" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="Address2">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="0" />
      <xsd:maxLength value="40" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="Address3">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="0" />
      <xsd:maxLength value="40" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="City">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="1" />
      <xsd:maxLength value="50" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="Country">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="1" />
      <xsd:maxLength value="20" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="StateProvince">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="2" />
      <xsd:maxLength value="3" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="PostalZIP">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="1" />
      <xsd:maxLength value="10" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="PhoneNumber">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="0" />
      <xsd:maxLength value="30" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="TaxRegNumber">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="0" />
      <xsd:maxLength value="15" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="InvoiceNumber">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="1" />
      <xsd:maxLength value="30" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="InvoiceStatus">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Received" />
      <xsd:enumeration value="Viewed" />
      <xsd:enumeration value="ProcessedManually" />
      <xsd:enumeration value="PartiallyApproved" />
      <xsd:enumeration value="Approved" />
      <xsd:enumeration value="AcceptedAsIs" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="PropertyCode">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="1" />
      <xsd:maxLength value="50" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="CcActionCode">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="DisputeNoInterest" />
      <xsd:enumeration value="DisputeSold" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="AccountCode">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="1" />
      <xsd:maxLength value="50" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="AccountDesc">
    <xsd:restriction base="xsd:string">
      <xsd:minLength value="1" />
      <xsd:maxLength value="100" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="Currency">
    <xsd:restriction base="xsd:decimal">
      <xsd:fractionDigits value="2" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="Volume">
    <xsd:restriction base="xsd:decimal">
      <xsd:fractionDigits value="2" />
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="Percent">
    <xsd:restriction base="xsd:decimal">
      <xsd:fractionDigits value="8" />
      <xsd:minInclusive value="0" />
      <xsd:maxInclusive value="100" />
    </xsd:restriction>
  </xsd:simpleType>
</xsd:schema>