<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://diavgeia.gov.gr/schema/model/diavgeia-decision-0.1"
	xmlns:diavgeia="http://diavgeia.gov.gr/schema/model/diavgeia-decision-0.1"
	xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
	elementFormDefault="qualified">

	<xs:complexType name="extraFieldDescription">
		<xs:sequence>			
			<xs:element name="name" type="xs:string"/>
			<xs:element name="label" type="xs:string" />
			<xs:element name="formName" type="xs:string" />
			<xs:element name="required" type="xs:boolean" />
			<xs:element name="validationType" type="xs:string" />
		</xs:sequence>
		<xs:attribute name="uid" type="xs:int" use="required"/>		
	</xs:complexType>
	
	<xs:complexType name="extraFieldDescriptionArray">
		<xs:sequence>
			<xs:element name="extraField" type="diavgeia:extraFieldDescription" minOccurs="1" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>	
	
	<xs:complexType name="extraFieldInstance">
		<xs:sequence>
			<xs:element name="label" type="xs:string" minOccurs="0"/>			
			<xs:element name="value" type="xs:string"/>
		</xs:sequence>
		<xs:attribute name="name" use="required"/>
	</xs:complexType>
	
	<xs:complexType name="decisionTypeDescription">
		<xs:sequence>
			<xs:element name="label" type="xs:string"/>
			<xs:element name="extraFields" type="diavgeia:extraFieldDescriptionArray" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="uid" type="xs:int" use="required"/>
	</xs:complexType>
	
	<xs:complexType name="decisionTypeDescriptionArray">
		<xs:sequence>
			<xs:element name="decisionType" type="diavgeia:decisionTypeDescription" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="tagDescription">
		<xs:sequence>
			<xs:element name="label" type="xs:string"/>			
		</xs:sequence>
		<xs:attribute name="uid" type="xs:int" use="required"/>
	</xs:complexType>

	<xs:complexType name="tagDescriptionArray">
		<xs:sequence>
			<xs:element name="tag" type="diavgeia:tagDescription" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>	

	<xs:complexType name="unitDescription">
		<xs:sequence>
			<xs:element name="label" type="xs:string"/>			
		</xs:sequence>
		<xs:attribute name="uid" type="xs:int" use="required"/>
	</xs:complexType>

	<xs:complexType name="unitDescriptionArray">
		<xs:sequence>
			<xs:element name="unit" type="diavgeia:unitDescription" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>	
	
	<xs:complexType name="organizationDescription">
		<xs:sequence>
			<xs:element name="label" type="xs:string"/>
			<xs:element name="latinName" type="xs:string"/>
			<xs:element name="units" type="diavgeia:unitDescriptionArray" minOccurs="0"/>			
		</xs:sequence>
		<xs:attribute name="uid" type="xs:int" use="required"/>
	</xs:complexType>

	<xs:complexType name="organizationDescriptionArray">
		<xs:sequence>
			<xs:element name="organization" type="diavgeia:organizationDescription" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>	
	
	
	<xs:complexType name="signerDescription">
		<xs:sequence>			
			<xs:element name="firstName" type="xs:string"/>
			<xs:element name="lastName" type="xs:string" />			
			<xs:element name="active" type="xs:boolean" />			
			<xs:element name="title" type="xs:string" />
			<xs:element name="position" type="xs:string"/>
		</xs:sequence>
		<xs:attribute name="uid" type="xs:int" use="required"/>		
	</xs:complexType>	

	<xs:complexType name="signerDescriptionArray">
		<xs:sequence>
			<xs:element name="signer" type="diavgeia:signerDescription" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="fekInfo">
		<xs:sequence>
			<xs:element name="fekNumber" type="xs:string"/>
			<xs:element name="issue" type="xs:string"/>
			<xs:element name="year" type="xs:string"/>
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="tags">
		<xs:sequence maxOccurs="unbounded" minOccurs="0">
			<xs:element name="tagId" type="xs:int"></xs:element>
		</xs:sequence>
	</xs:complexType>	
	
	<xs:complexType name="extraFields">
		<xs:sequence maxOccurs="unbounded" minOccurs="1">
			<xs:element name="extraField" type="diavgeia:extraFieldInstance"></xs:element>
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="decisionMetadata">	
			<xs:sequence>
				<xs:element name="protocolNumber" type="xs:string"/>
				<xs:element name="date" type="xs:date"/>		
				<xs:element name="subject" type="xs:string"/>		
				<xs:element name="email" type="xs:string"/>								
				<xs:element name="organizationId" type="xs:int"/>
				<xs:element name="organizationUnitId" type="xs:int"/>
				<xs:element name="decisionTypeId" type="xs:int"/>
				<xs:element name="tags" type="diavgeia:tags"/>
				<xs:element name="signerId" type="xs:int"/>				
				<xs:element name="extraFields" type="diavgeia:extraFields" minOccurs="0"/>
				<xs:element name="relativeFEK" type="diavgeia:fekInfo" minOccurs="0"/>
				<xs:element name="isCorrectionOfAda" type="xs:string" minOccurs="0"/>
				<xs:element name="isCorrectedByAda" type="xs:string" minOccurs="0"/>
				<xs:element name="relativeAda" type="xs:string" minOccurs="0"/>		
			</xs:sequence>	
	</xs:complexType>
	
	<xs:complexType name="decisionMetadataExpanded">
				<xs:sequence>
				<xs:element name="protocolNumber" type="xs:string"/>
				<xs:element name="date" type="xs:date"/>		
				<xs:element name="subject" type="xs:string"/>		
				<xs:element name="email" type="xs:string"/>								
				<xs:element name="organization" type="diavgeia:organizationDescription"/>
				<xs:element name="organizationUnit" type="diavgeia:unitDescription"/>
				<xs:element name="decisionType" type="diavgeia:decisionTypeDescription"/>
				<xs:element name="tags" type="diavgeia:tagDescriptionArray"/>
				<xs:element name="signer" type="diavgeia:signerDescription"/>				
				<xs:element name="extraFields" type="diavgeia:extraFields" minOccurs="0"/>
				<xs:element name="relativeFEK" type="diavgeia:fekInfo" minOccurs="0"/>
				<xs:element name="isCorrectionOfAda" type="xs:string" minOccurs="0"/>
				<xs:element name="isCorrectedByAda" type="xs:string" minOccurs="0"/>
				<xs:element name="relativeAda" type="xs:string" minOccurs="0"/>
			</xs:sequence>		
	</xs:complexType>
	
	<xs:complexType name="decision">
		<xs:sequence>
			<xs:element name="ada" type="xs:string"/>
			<xs:element name="submissionTimestamp" type="xs:dateTime"/>
			<xs:element name="metadata" type="diavgeia:decisionMetadata"/>
			<xs:element name="url" type="xs:anyURI" minOccurs="0"/>
			<xs:element name="documentUrl" type="xs:anyURI" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="decisionExpanded">
		<xs:sequence>
			<xs:element name="ada" type="xs:string"/>
			<xs:element name="submissionTimestamp" type="xs:dateTime"/>
			<xs:element name="metadata" type="diavgeia:decisionMetadataExpanded"/>
			<xs:element name="url" type="xs:anyURI" minOccurs="0"/>
			<xs:element name="documentUrl" type="xs:anyURI" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>		
	
	<xs:complexType name="hashType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="algorithm" type="xs:string" use="required"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:element name="decisionStoreRequest">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="decisionMetadata" type="diavgeia:decisionMetadata"/>
				<xs:choice>		
					<xs:element name="decisionDocument" type="xs:base64Binary" xmime:expectedContentTypes="application/pdf"/>
					<xs:element name="decisionDocumentURL" type="xs:anyURI"/>
				</xs:choice>
			</xs:sequence>
		</xs:complexType> 
    </xs:element>
    
    <xs:element name="decisionStoreResponse">
    	<xs:complexType>
    		<xs:sequence>
    			<xs:element name="ada" type="xs:string"/>
    			<xs:element name="documentHashOriginal" type="diavgeia:hashType"/>
    			<xs:element name="documentHashSigned" type="diavgeia:hashType"/>
    		</xs:sequence>
    	</xs:complexType>
    </xs:element>    
    	       
   	<xs:element name="getDecisionTypesRequest">
   		<xs:complexType>
   			<xs:sequence>
   				<xs:element name="organizationId" type="xs:int" minOccurs="0"/>
   			</xs:sequence>
   		</xs:complexType>
   	</xs:element>
   	
   	<xs:element name="getDecisionTypesResponse">
   		<xs:complexType>
   			<xs:sequence>
   				<xs:element name="decisionTypes" type="diavgeia:decisionTypeDescriptionArray"/>
   			</xs:sequence>
   		</xs:complexType>
   	</xs:element>

   	<xs:element name="getTagsRequest">
   		<xs:complexType>
   			<xs:sequence>
   				<xs:element name="organizationId" type="xs:int" minOccurs="0"/>
   			</xs:sequence>
   		</xs:complexType>
   	</xs:element>
   	
   	<xs:element name="getTagsResponse">
   		<xs:complexType>
   			<xs:sequence>
   				<xs:element name="tags" type="diavgeia:tagDescriptionArray"/>
   			</xs:sequence>
   		</xs:complexType>
   	</xs:element>
    
    <xs:element name="getSignersRequest">
   		<xs:complexType>
   			<xs:sequence>
   				<xs:element name="organizationId" type="xs:int" minOccurs="0"/>
   			</xs:sequence>
   		</xs:complexType>
   	</xs:element>
   	
   	<xs:element name="getSignersResponse">
   		<xs:complexType>
   			<xs:sequence>
   				<xs:element name="signers" type="diavgeia:signerDescriptionArray"/>
   			</xs:sequence>
   		</xs:complexType>
   	</xs:element>

    <xs:element name="getOrganizationsRequest">
   		<xs:complexType>
   			<xs:sequence>
   				<xs:element name="organizationId" type="xs:int" minOccurs="0"/>
   			</xs:sequence>
   		</xs:complexType>
   	</xs:element>
   	
   	<xs:element name="getOrganizationsResponse">
   		<xs:complexType>
   			<xs:sequence>
   				<xs:element name="organizations" type="diavgeia:organizationDescriptionArray"/>
   			</xs:sequence>
   		</xs:complexType>
   	</xs:element>

    <xs:element name="getUnitsRequest">
   		<xs:complexType>
   			<xs:sequence>
   				<xs:element name="organizationId" type="xs:int" minOccurs="0"/>
   			</xs:sequence>
   		</xs:complexType>
   	</xs:element>
   	
   	<xs:element name="getUnitsResponse">
   		<xs:complexType>
   			<xs:sequence>
   				<xs:element name="organizations" type="diavgeia:organizationDescriptionArray"/>
   			</xs:sequence>
   		</xs:complexType>
   	</xs:element>
    
    <xs:element name="echoRequest">
    	<xs:complexType>
    		<xs:sequence>
    			<xs:element name="message" type="xs:string"/>
    		</xs:sequence>
    	</xs:complexType>
    </xs:element>
    
    <xs:element name="echoResponse">
    	<xs:complexType>
    		<xs:sequence>
    			<xs:element name="message" type="xs:string"/>
    		</xs:sequence>
    	</xs:complexType>
    </xs:element>
	        
</xs:schema>

