<?xml version="1.0"?>

<xsd:schema 
	xmlns:imb="http://www.imb.ie" 
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	targetNamespace="http://www.imb.ie" 
	elementFormDefault="qualified"
>

	<xsd:element name="excludedProducts">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="product" type="imb:productType" minOccurs="1" maxOccurs="unbounded" />
			</xsd:sequence>
			<xsd:attribute name="notifyingCompany" type="imb:mandatoryString" use="required" />
		</xsd:complexType>
		<xsd:key name="uniqueNotifierProductCode">
			<xsd:selector xpath="./imb:product" />
			<xsd:field xpath="imb:notifierProductCode"/>
		</xsd:key>
	</xsd:element>

	<xsd:complexType name="productType">
		<xsd:sequence>
			<xsd:element name="notifierProductCode" type="imb:mandatoryString" />
			<xsd:element name="productName" type="imb:mandatoryString" />
			<xsd:element name="strengthAndUnit" type="imb:mandatoryString" />
			<xsd:element name="pharmaceuticalForm" type="imb:mandatoryString" />
			<xsd:element name="packSize" type="imb:mandatoryString" />
			<xsd:element name="numberOfPacks" type="xsd:positiveInteger" />
			<xsd:element name="tradingStyle" type="imb:mandatoryString" />
			<xsd:element name="countryOfAuthorisation" type="xsd:token" minOccurs="0" />
			<xsd:element name="actives" type="imb:activesType">
				<xsd:key name="uniqueActiveIngredient">
					<xsd:selector xpath="./imb:active" />
					<xsd:field xpath="imb:activeIngredient"/>
				</xsd:key>
			</xsd:element>
			<xsd:element name="batches" type="imb:batchesType">
				<xsd:key name="uniqueBatchNumber">
					<xsd:selector xpath="./imb:batch" />
					<xsd:field xpath="imb:batchNumber"/>
				</xsd:key>
			</xsd:element>
			<xsd:element name="productSources" type="imb:productSourcesType">
				<xsd:key name="uniqueCompanyName">
					<xsd:selector xpath="./imb:productSource" />
					<xsd:field xpath="imb:companyName"/>
				</xsd:key>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="activesType">
		<xsd:sequence>
			<xsd:element name="active" type="imb:activeType" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="activeType">
		<xsd:sequence>
			<xsd:element name="activeIngredient" type="imb:mandatoryString" />
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="batchesType">
		<xsd:sequence>
			<xsd:element name="batch" type="imb:batchType" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="batchType">
		<xsd:sequence>
			<xsd:element name="batchNumber" type="imb:mandatoryString" />
			<xsd:element name="expiryDate" type="imb:mandatoryString" />
			<xsd:element name="dateOfReceipt" type="xsd:date" />
			<xsd:element name="customers" type="imb:customersType" minOccurs="0">
				<xsd:key name="uniqueCustomerCode">
					<xsd:selector xpath="./imb:customer" />
					<xsd:field xpath="imb:customerCode"/>
				</xsd:key>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="customersType">
		<xsd:sequence>
			<xsd:element name="customer" type="imb:customerType" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="customerType">
		<xsd:sequence>
			<xsd:element name="customerCode" type="imb:mandatoryString" />
			<xsd:element name="customerName" type="imb:mandatoryString" />
			<xsd:element name="addressLine1" type="xsd:token" minOccurs="0" />
			<xsd:element name="addressLine2" type="xsd:token" minOccurs="0" />
			<xsd:element name="addressLine3" type="xsd:token" minOccurs="0" />
			<xsd:element name="city" type="xsd:token" minOccurs="0" />
			<xsd:element name="postcode" type="xsd:token" minOccurs="0" />
			<xsd:element name="county" type="xsd:token" minOccurs="0" />
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="productSourcesType">
		<xsd:sequence>
			<xsd:element name="productSource" type="imb:productSourceType" minOccurs="1" maxOccurs="unbounded" />
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="productSourceType">
		<xsd:sequence>
			<xsd:element name="productSourceType" type="imb:productSourceTypeType" />
			<xsd:element name="companyName" type="imb:mandatoryString" />
			<xsd:element name="addressLine1" type="xsd:token" minOccurs="0" />
			<xsd:element name="addressLine2" type="xsd:token" minOccurs="0" />
			<xsd:element name="addressLine3" type="xsd:token" minOccurs="0" />
			<xsd:element name="city" type="imb:mandatoryString" />
			<xsd:element name="postcode" type="xsd:token" minOccurs="0" />
			<xsd:element name="country" type="imb:mandatoryString" />
		</xsd:sequence>
	</xsd:complexType>

	<xsd:simpleType name="mandatoryString">
		<xsd:restriction base="xsd:token">
			<xsd:minLength value="1" />
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="positiveDecimal">
		<xsd:restriction base="xsd:decimal">
			<xsd:minExclusive value="0" />
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="productSourceTypeType">
		<xsd:restriction base="xsd:token">
			<xsd:enumeration value="Manufacturer" />
			<xsd:enumeration value="Supplier" />
		</xsd:restriction>
	</xsd:simpleType>

</xsd:schema>
