<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="OLASApplicationSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:l="http://www.legiti-mate.com" targetNamespace="http://www.legiti-mate.com" elementFormDefault="qualified" attributeFormDefault="qualified">
  <xs:annotation>    
    <xs:documentation xml:lang="en">
      This schema defines the structure for operating licence applications. 
    </xs:documentation>
  </xs:annotation>
  <xs:element name="response">    
		<xs:complexType>
			<xs:sequence>
				<xs:element name="application" type="l:application" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="message" type="l:message" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="application">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        An operating licence application incl. applicant, recipt and licence details (if applicable)
      </xs:documentation>
    </xs:annotation>
		<xs:sequence>
			<xs:element name="applicationid" type="xs:long"/>
			<xs:element name="applicationnumber" type="xs:string"/>
			<xs:element name="applicationdate" type="xs:date"/>
			<xs:element name="applicationstatus" type="xs:string"/>
			<xs:element name="applicationtype" type="xs:string"/>
			<xs:element name="applicant" type="l:person" minOccurs="1"/>
			<xs:element name="receipt" type="l:receipt" minOccurs="1"/>
			<xs:element name="licence" type="l:licence" minOccurs="0" maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="licence">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        An operating licence incl. status, related vehicle, operator and service types associated to the licence
      </xs:documentation>
    </xs:annotation>
		<xs:sequence>
			<xs:element name="licenceid" type="xs:long"/>      
			<xs:element name="licencenumber" type="xs:string"/>
			<xs:element name="licencedate" type="xs:date"/>
			<xs:element name="licencestatus" type="xs:string"/>
			<xs:element name="startdate" type="xs:date"/>
			<xs:element name="enddate" type="xs:date"/>
			<xs:element name="certificatenumber" type="xs:string"/>
			<xs:element name="vehicle" type="l:vehicle" minOccurs="1" maxOccurs="1"/>
			<xs:element name="operator" type="l:person" minOccurs="1" maxOccurs="1"/>
      <xs:element name="licenceservicetype" type="l:licenceservicetype" minOccurs="1" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
  <xs:complexType name="licenceservicetype">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        A service type i.e. Minibus taxi-type service and the routes/conditions associated to the service type for the licence
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="licenceservicetypeid" type="xs:long"/>
      <xs:element name="servicetypedescription" type="xs:string"/>
      <xs:element name="route" type="l:route" minOccurs="1" maxOccurs="unbounded"/>
      <xs:element name="servicecondition" type="l:servicecondition" minOccurs="1" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="route">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        A route record
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="routeid" type="xs:long"/>
      <xs:element name="routename" type="xs:string"/>
      <xs:element name="nationalroutenumber" type="xs:string"/>
      <xs:element name="boardroutenumber" type="xs:string"/>
      <xs:element name="routedescription" type="xs:string"/>
      <xs:element name="routelengthkm" type="xs:long" nillable="true"/>
      <xs:element name="origin" type="l:place"/>
      <xs:element name="destination" type="l:place"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="servicecondition">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        A service condition i.e. "The authority is reviewable at any time." record
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="serviceconditionid" type="xs:long"/>
      <xs:element name="description" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="place">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        A place record including the type of place i.e. Intersection
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="placeid" type="xs:long"/>
      <xs:element name="description" type="xs:string"/>
      <xs:element name="placetype" type="xs:string"/>      
    </xs:sequence>
  </xs:complexType>
	<xs:complexType name="receipt">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        A receipt record
      </xs:documentation>
    </xs:annotation>
		<xs:sequence>
			<xs:element name="receiptid" type="xs:long"/>
			<xs:element name="cashierreceiptnumber" type="xs:string" nillable="true"/>
			<xs:element name="nltisreceiptnumber" type="xs:string" nillable="true"/>
			<xs:element name="receiptdate" type="xs:date"/>
			<xs:element name="receipttotal" type="xs:decimal" nillable="true"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="person">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        A person record
      </xs:documentation>
    </xs:annotation>
		<xs:sequence>
			<xs:element name="personid" type="xs:long"/>
			<xs:element name="idnumber" type="xs:string"/>
      <xs:element name="idtype" type="xs:string"/>
      <xs:element name="idtypedescription" type="xs:string"/>
			<xs:element name="firstname" type="xs:string"/>
			<xs:element name="lastname" type="xs:string"/>
			<xs:element name="initials" type="xs:string"/>
			<xs:element name="incometaxnumber" type="xs:string" nillable="true"/>
			<xs:element name="telephonenumber" type="xs:string" nillable="true"/>
			<xs:element name="faxnumber" type="xs:string" nillable="true"/>
			<xs:element name="cellnumber" type="xs:string" nillable="true"/>
			<xs:element name="emailaddress" type="xs:string" nillable="true"/>
			<xs:element name="active" type="xs:boolean" nillable="true"/>
			<xs:element name="association" type="l:association" minOccurs="1" maxOccurs="1"/>
			<xs:element name="postaladdress" type="l:address" minOccurs="1" maxOccurs="1"/>
			<xs:element name="physicaladdress" type="l:address" minOccurs="1" maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="association">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        An association record
      </xs:documentation>
    </xs:annotation>
		<xs:sequence>
			<xs:element name="associationid" type="xs:long"/>
			<xs:element name="associationname" type="xs:string"/>
			<xs:element name="associationstatus" type="xs:string"/>
			<xs:element name="postaladdress" type="l:address" minOccurs="1" maxOccurs="1"/>
			<xs:element name="physicaladdress" type="l:address" minOccurs="1" maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="address">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        An address record
      </xs:documentation>
    </xs:annotation>
		<xs:sequence>
			<xs:element name="addressid" type="xs:long"/>
			<xs:element name="province" type="xs:string"/>
			<xs:element name="addressline1" type="xs:string"/>
			<xs:element name="addressline2" type="xs:string" nillable="true"/>
			<xs:element name="addressline3" type="xs:string" nillable="true"/>
			<xs:element name="pocode" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="vehicle">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        A vehicle record
      </xs:documentation>
    </xs:annotation>
		<xs:sequence>
			<xs:element name="vehicleid" type="xs:long"/>
			<xs:element name="vehiclestatus" type="xs:string"/>
			<xs:element name="vehiclemake" type="xs:string"/>
			<xs:element name="registrationnumber" type="xs:string"/>
			<xs:element name="chassisnumber" type="xs:string"/>
			<xs:element name="enginenumber" type="xs:string"/>
			<xs:element name="grossmass" type="xs:string"/>
			<xs:element name="seatingcapacity" type="xs:string"/>
			<xs:element name="cofexpiry" type="xs:string"/>
			<xs:element name="cofreferencenumber" type="xs:string"/>
			<xs:element name="natisnumber" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
  <xs:complexType name="message">
    <xs:annotation>
      <xs:documentation xml:lang="en">
        A message record
      </xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="messagetype">
        <xs:annotation>
          <xs:documentation>Represents a the message type. The allowed values are Error, Information, Warning and Success</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="Error"/>
            <xs:enumeration value="Information"/>
            <xs:enumeration value="Warning"/>
            <xs:enumeration value="Success"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="description" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>
