<xs:schema xmlns="http://пф.рф/СПАФ/2018-07-09" xmlns:УТ2="http://пф.рф/УТ/2017-08-21" xmlns:АФ4="http://пф.рф/АФ/2017-08-21" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://пф.рф/СПАФ/2018-07-09" elementFormDefault="qualified" attributeFormDefault="unqualified">

	<xs:import namespace="http://пф.рф/УТ/2017-08-21" schemaLocation="ais/%D0%A1%D1%85%D0%B5%D0%BC%D1%8B/%D0%A3%D0%BD%D0%B8%D1%84%D0%A2%D0%B8%D0%BF%D1%8B_2017-08-21.xsd"/>
	<xs:import namespace="http://пф.рф/АФ/2017-08-21" schemaLocation="ais/%D0%A1%D1%85%D0%B5%D0%BC%D1%8B/%D0%A2%D0%B8%D0%BF%D1%8B%D0%90%D0%A4_2017-08-21.xsd"/>

	<xs:annotation>
		<xs:documentation>Схема Описаний сценария проверок форматов СФР</xs:documentation>
	</xs:annotation>
	<xs:element name="СценарийПроверок">
		<xs:annotation>
			<xs:documentation>Корневой элемент. Описание последовательности выполнения базовых логических проверок для документа определенного формата</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:annotation>
				<xs:documentation>Тип описания проверок</xs:documentation>
			</xs:annotation>
			<xs:sequence>
				<xs:element name="ПроверяемыйФормат" type="УТ2:ТипНепустаяСтрока">
					<xs:annotation>
						<xs:documentation>Наименование формата, для которого описываются логические проверки</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="Описание" type="УТ2:ТипНепустаяСтрока">
					<xs:annotation>
						<xs:documentation>Краткое описание для всех проверок</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="КодИнформационногоОбмена" type="УТ2:ТипНепустаяСтрока">
					<xs:annotation>
						<xs:documentation>Код информационного обмена формата, для которого описываются логические проверки. Используется при формировании кода проверки.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="КодДокумента" type="УТ2:ТипНепустаяСтрока">
					<xs:annotation>
						<xs:documentation>Код документа формата, для которого описываются логические проверки. Используется при формировании кода проверки.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="Версия" type="АФ4:ТипНомерВерсии">
					<xs:annotation>
						<xs:documentation>Версия правил проверок</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="ДатаАктуальности" type="xs:date">
					<xs:annotation>
						<xs:documentation>Дата актуальности составления правил проверок</xs:documentation>
					</xs:annotation>
				</xs:element>

				<xs:element name="ПространстваИмен">
					<xs:annotation>
						<xs:documentation>Список всех пространств имен в проверяемом файле</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:annotation>
							<xs:documentation>Список всех пространств имен в проверяемом файле</xs:documentation>
						</xs:annotation>
						<xs:sequence>
							
							<xs:element name="ПространствоИмен" type="ТипПространствоИмен" maxOccurs="unbounded">
								<xs:annotation>
									<xs:documentation>Пространство имен в проверяемом файле</xs:documentation>
								</xs:annotation>
							</xs:element>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
				<xs:element name="КорневойТэг" type="xs:string">
					<xs:annotation>
						<xs:documentation>Имя корневого элемента проверяемого файла</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="Переменные" type="ТипВсеПеременные">
					<xs:annotation>
						<xs:documentation>Описание внешних, передаваемых в качестве аргументов для XQuery, и глобальных в рамках всех проверок, описываемых в данном файле, переменных, как правило используемых в нескольких проверках одновременно</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="Проверки" type="ТипВсеПроверкиСценария">
					<xs:annotation>
						<xs:documentation>Описание функций (глобальных в рамках всех проверок, описываемых в данном файле), как правило используемых в нескольких проверках одновременно</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="ТипВсеПеременные">
		<xs:annotation>
			<xs:documentation>Список всех переменных</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Переменная" type="ТипПеременнаяСценария" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Описание переменной со всеми возможными значениями</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ТипПеременнаяСценария">
		<xs:annotation>
			<xs:documentation>Тип для блока Переменные</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Значения" type="ТипВсеЗначенияПеременной">
				<xs:annotation>
					<xs:documentation>Список возможных значений переменной в рамках документа</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="Наименование" type="УТ2:ТипНепустаяСтрока" use="required">
			<xs:annotation>
				<xs:documentation>Имя переменной  на XQuery</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Тип" type="УТ2:ТипНепустаяСтрока" use="optional">
			<xs:annotation>
				<xs:documentation>Тип переменной  на XQuery. Указывается только для внешних переменных, для внутренних может быть не указан</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Внешняя" type="xs:boolean" use="optional">
			<xs:annotation>
				<xs:documentation>Признак, является ли переменная внешней для XQuery или локальной. Если не указано - по умолчанию считается, что переменная внутренняя</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="Корень" type="xs:boolean" use="optional">
			<xs:annotation>
				<xs:documentation>Признак, является ли переменная корнем БД. Если не указано - по умолчанию считается, что не является</xs:documentation>
			</xs:annotation>
		</xs:attribute>
		<xs:attribute name="ЗагрузитьФайл" type="xs:boolean" use="optional">
			<xs:annotation>
				<xs:documentation>Признак, нужно ли загружать файл. Указывается путь до файла, который нужно загрузить, относительно КАФ</xs:documentation>
			</xs:annotation>
		</xs:attribute>
	</xs:complexType>

	<xs:complexType name="ТипВсеЗначенияПеременной">
		<xs:annotation>
			<xs:documentation>Тип для блока Переменные</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Значение" type="ТипЗначениеПеременной" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Список переменных XQuery</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ТипЗначениеПеременной">
		<xs:annotation>
			<xs:documentation>Описание переменной</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="АФ4:ТипОписаниеПеременной">
				<xs:attribute name="ID" type="xs:integer" use="required">
					<xs:annotation>
						<xs:documentation>Идентификатор значения переменной</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="ТипВсеПроверкиСценария">
		<xs:annotation>
			<xs:documentation>Тип</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Проверка" maxOccurs="unbounded" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Описание правила проверки</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:annotation>
						<xs:documentation>Проверка</xs:documentation>
					</xs:annotation>
					<xs:sequence>
						<xs:element name="Описание" type="УТ2:ТипНепустаяСтрока">
							<xs:annotation>
								<xs:documentation>Текстовое описание проверки.</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="Файл" type="АФ4:XMLФайл">
							<xs:annotation>
								<xs:documentation>Файл с базовыми проверками в формате описания проверок XQuery</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="ВключаемыеПроверки" type="ТипВключаемыеПроверки">
							<xs:annotation>
								<xs:documentation>Список идентификаторов проверок, которые необходимо включить в сценарий проверок</xs:documentation>
							</xs:annotation>
						</xs:element>
						<xs:element name="ИспользуемыеПеременные" minOccurs="0">
							<xs:annotation>
								<xs:documentation>Список переменных, передаваемых в базовые проверки</xs:documentation>
							</xs:annotation>
							<xs:complexType>
								<xs:annotation>
									<xs:documentation>Тип используемые переменные</xs:documentation>
								</xs:annotation>
								<xs:sequence>
									<xs:element name="Переменная" maxOccurs="unbounded" minOccurs="0">
										<xs:annotation>
											<xs:documentation>Описание правила проверки</xs:documentation>
										</xs:annotation>
										<xs:complexType>
											<xs:annotation>
												<xs:documentation>Тип используемые переменные</xs:documentation>
											</xs:annotation>
											<xs:attribute name="Наименование" type="УТ2:ТипНепустаяСтрока" use="required">
												<xs:annotation>
													<xs:documentation>Имя переменной из блока "Переменные"</xs:documentation>
												</xs:annotation>
											</xs:attribute>
											<xs:attribute name="ID" type="xs:integer" use="required">
												<xs:annotation>
													<xs:documentation>Идентификатор значения переменной</xs:documentation>
												</xs:annotation>
											</xs:attribute>
										</xs:complexType>
									</xs:element>
								</xs:sequence>
							</xs:complexType>
						</xs:element>
					</xs:sequence>
					<xs:attribute name="Протоколируемая" type="xs:boolean" use="optional">
						<xs:annotation>
							<xs:documentation>Признак, нужно ли заносить в протокол проверок результаты проверок данного лока. Если не указано - по умолчанию считается, что нужно</xs:documentation>
						</xs:annotation>
					</xs:attribute>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>


	<xs:complexType name="ТипВключаемыеПроверки">
		<xs:annotation>
			<xs:documentation>Тип включаемые исключаемые проверки</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Проверка" type="УТ2:ТипНепустаяСтрока" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>Идентификатор проверки, которую нужно включить в сценарий/исключить из сценария</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ТипПространствоИмен">
		<xs:annotation>
			<xs:documentation>Пространство имен в проверяемом файле</xs:documentation>
		</xs:annotation>
		<xs:simpleContent>
			<xs:extension base="УТ2:ТипНепустаяСтрока">
				<xs:attribute name="Префикс" type="УТ2:ТипНепустаяСтрока" use="optional">
					<xs:annotation>
						<xs:documentation>Префикс пространства имен</xs:documentation>
					</xs:annotation>
				</xs:attribute>
				<xs:attribute name="ПоУмолчанию" default="0" use="optional">
					<xs:annotation>
						<xs:documentation>Является пространством имен по умолчанию</xs:documentation>
					</xs:annotation>
				</xs:attribute>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
</xs:schema>