﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
	<xs:element name="CustomerBilling">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="CustomerInfos" minOccurs="1" maxOccurs="1">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="CustomerInfo" minOccurs="1" maxOccurs="unbounded">
								<xs:complexType>
									<xs:sequence>
										<xs:element name="CustomerNo" type="Identifier15" nillable="false">
											<xs:annotation>
												<xs:documentation>Customer number of the customer at the seller</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="RegNo" type="RegNo">
											<xs:annotation>
												<xs:documentation>Customer social security number</xs:documentation>
											</xs:annotation>
										</xs:element>
										<xs:element name="AddressInfo" minOccurs="1" maxOccurs="1">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="Address" type="Address" minOccurs="1" maxOccurs="1"/>
													<xs:element name="E-MailAddress" type="Email" minOccurs="0" maxOccurs="1"/>
													<xs:element name="Cellphone" type="String15" minOccurs="0" maxOccurs="1"/>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
										<xs:element name="PaymentInfo" minOccurs="0" maxOccurs="1">
											<xs:complexType>
												<xs:choice>
													<xs:element name="Clear" minOccurs="0" maxOccurs="1" >
														<xs:annotation>
															<xs:documentation>Erases previously set payment info on customer</xs:documentation>
														</xs:annotation>
													</xs:element>
													<xs:element name="Set" minOccurs="0" maxOccurs="1">
														<xs:annotation>
															<xs:documentation>Sets differing payment info on customer, fully replaces earlier settings</xs:documentation>
														</xs:annotation>
														<xs:complexType>
															<xs:sequence>
																<xs:element name="RecurringCardInfo" type="Card" minOccurs="1" maxOccurs="1">
																	<xs:annotation>
																		<xs:documentation>Info about token and expiry date</xs:documentation>
																	</xs:annotation>
																</xs:element>
															</xs:sequence>
														</xs:complexType>
													</xs:element>
												</xs:choice>
											</xs:complexType>
										</xs:element>
										<xs:element name="BillInfo" minOccurs="0">
											<xs:complexType>
												<xs:sequence>
													<xs:element name="ReferenceInfo" type="ReferenceInfo"/>
													<xs:element name="ContractAmounts">
														<xs:complexType>
															<xs:sequence>
																<xs:element name="ContractAmount" maxOccurs="unbounded">
																	<xs:complexType>
																		<xs:sequence>
																			<xs:element name="ContractId" type="xs:unsignedInt">
																				<xs:annotation>
																					<xs:documentation>Reference to the contract billed</xs:documentation>
																				</xs:annotation>
																			</xs:element>
																			<xs:element name="Amount" type="Amount">
																				<xs:annotation>
																					<xs:documentation>Amount to bill.(Matched against remaining contract value)</xs:documentation>
																				</xs:annotation>
																			</xs:element>
																			<xs:element name="BillingPeriod" type="String35" minOccurs="0">
																				<xs:annotation>
																					<xs:documentation>Billing period in text,  examples: Jan, Januari, 2021-01-01--2021-01-31</xs:documentation>
																				</xs:annotation>
																			</xs:element>
																		</xs:sequence>
																	</xs:complexType>
																</xs:element>
															</xs:sequence>
														</xs:complexType>
													</xs:element>
												</xs:sequence>
											</xs:complexType>
										</xs:element>
									</xs:sequence>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
			<xs:attribute name="Version" type="xs:string" use="required" fixed="2.0"/>
			<xs:attribute name="CreatedDateTime" type="xs:dateTime" use="required">
				<xs:annotation>
					<xs:documentation>Date and time when the file was created</xs:documentation>
				</xs:annotation>
			</xs:attribute>
			<xs:attribute name="CompanyNo" type="CompanyNumber" use="required"/>
			<xs:attribute name="CompanyName" type="xs:string" use="required"/>
		</xs:complexType>
	</xs:element>
	<xs:simpleType name="Money">
		<xs:restriction base="xs:decimal">
			<xs:fractionDigits value="2"/>
			<xs:minInclusive value="-100000000"/>
			<xs:maxInclusive value="100000000"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="Amount">
		<xs:sequence>
			<xs:element name="AmountInclVat" type="Money" nillable="false" minOccurs="1" maxOccurs="1"/>
		</xs:sequence>
		<xs:attribute name="Currency" type="eCurrencyType" use="required"/>
	</xs:complexType>
	<xs:simpleType name="eCurrencyType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="SEK"/>
			<xs:enumeration value="NOK"/>
			<xs:enumeration value="DKK"/>
			<xs:enumeration value="EUR"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="Identifier15">
		<xs:restriction base="xs:string">
			<xs:minLength value="1"/>
			<xs:maxLength value="15"/>
			<xs:pattern value="[a-zA-Z0-9\-]*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ISO3166">
		<xs:restriction base="xs:string">
			<xs:minLength value="2"/>
			<xs:maxLength value="2"/>
			<xs:pattern value="[A-Z]*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="CompanyNumber">
		<xs:restriction base="xs:string">
			<xs:minLength value="1"/>
			<xs:maxLength value="15"/>
			<xs:pattern value="[0-9]*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="String35">
		<xs:restriction base="PXString">
			<xs:maxLength value="35"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="Email">
		<xs:restriction base="PXString">
			<xs:maxLength value="254"/>
			<xs:pattern value="[^@]+@[^\.]+\..+"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="String15">
		<xs:restriction base="PXString">
			<xs:maxLength value="15"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="ZipCode">
		<xs:restriction base="xs:string">
			<xs:maxLength value="9"/>
			<xs:pattern value="[A-Z0-9\-]+"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="String50">
		<xs:restriction base="PXString">
			<xs:minLength value="1"/>
			<xs:maxLength value="50"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="String20">
		<xs:restriction base="PXString">
			<xs:maxLength value="20"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="NameAddressString35">
		<xs:restriction base="PXNameAddressString">
			<xs:minLength value="1"/>
			<xs:maxLength value="35"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="NameAddressString36">
		<xs:restriction base="PXNameAddressString">
			<xs:minLength value="1"/>
			<xs:maxLength value="36"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="NameAddressString27">
		<xs:restriction base="PXNameAddressString">
			<xs:minLength value="1"/>
			<xs:maxLength value="27"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="PXString">
		<xs:restriction base="xs:string">
			<xs:pattern value="[a-zA-Z0-9_:!;&quot;#&lt;&gt;=?\[\]@{}´ %-/À-ÖØ-öø-ú]*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="PXNameAddressString">
		<xs:restriction base="xs:string">
			<xs:pattern value="[a-zA-Z0-9_:!;&quot;#&lt;&gt;=?\[\]@{}´ %-/À-ÖØ-öø-úü]*"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="String74">
		<xs:restriction base="xs:string">
			<xs:maxLength value="74"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="ReferenceInfo">
		<xs:sequence>
			<xs:element name="ExternalBillId" type="String50" nillable="false" minOccurs="1" maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="RegNo">
		<xs:simpleContent>
			<xs:extension base="String15">
				<xs:attribute name="CountryCode" type="ISO3166"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:simpleType name="LegalEntity">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Private"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="Card">
		<xs:sequence>
			<xs:element name="CardReference" type="String50" minOccurs="1" maxOccurs="1"/>
			<xs:element name="ExpiryDate" type="PXExpiryDate" minOccurs="1" maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
	<xs:simpleType name="PXExpiryDate">
		<xs:restriction base="xs:string">
			<xs:length value="5"/>
			<xs:pattern value="(0[1-9]|1[012])/(\d{2})"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="AddressType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="BillingAddress">
				<xs:annotation>
					<xs:documentation>Billing address. Mandatory</xs:documentation>
				</xs:annotation>
			</xs:enumeration>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="NameAddressString72">
		<xs:restriction base="PXNameAddressString">
			<xs:minLength value="1"/>
			<xs:maxLength value="72"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="Address">
		<xs:sequence>
			<xs:element name="Addressee" type="NameAddressString72" minOccurs="1" maxOccurs="1">
				<xs:annotation>
					<xs:documentation>Full name of addressee</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="StreetAddress" type="NameAddressString35" nillable="false" minOccurs="0" maxOccurs="1">
				<xs:annotation>
					<xs:documentation>Street address</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="ZipCode" type="ZipCode" nillable="false" minOccurs="1" maxOccurs="1">
				<xs:annotation>
					<xs:documentation>Zipcode conforming to country standard</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="City" type="NameAddressString27" nillable="false" minOccurs="1" maxOccurs="1">
				<xs:annotation>
					<xs:documentation>City</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="CoAddress" type="NameAddressString35" nillable="false" minOccurs="0" maxOccurs="1">
				<xs:annotation>
					<xs:documentation>Care of address</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="CountryCode" type="ISO3166" minOccurs="1" maxOccurs="1">
				<xs:annotation>
					<xs:documentation>Country code accoriding to ISO 3166</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="AddressType" type="AddressType" use="required">
			<xs:annotation>
				<xs:documentation>Valid address type from enumeration AddressType</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>
</xs:schema>
