<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:simpleType name="EventNameType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="barcodeEvent"/>
			<xs:enumeration value="linkLaunchEvent" />
			<xs:enumeration value="agentforceLaunchEvent" />
		</xs:restriction>
	</xs:simpleType>
	<xs:element name="Process" type="ProcessType"/>

	<xs:complexType name="EntryActionType" mixed="true">
		<xs:choice maxOccurs="unbounded" minOccurs="0">
			<xs:element type="ParametersType" name="Parameters"/>
			<xs:element type="ParameterizedInputsType" name="ParameterizedInputs" minOccurs="0"/>
			<xs:element type="ReturnType" name="Return"/>
			<xs:element type="CaseType" name="Case"/>
			<xs:element type="CaseElseType" name="CaseElse"/>
			<xs:element type="CaseEmptyType" name="CaseEmpty"/>
			<xs:element type="CasesType" name="Cases"/>
			<xs:element type="ReturnValuesType" name="ReturnValues"/>
		</xs:choice>
		<xs:attribute type="xs:string" name="name" use="optional"/>
		<xs:attribute type="xs:string" name="printId" use="optional"/>
		<xs:attribute type="xs:string" name="actionType" use="optional"/>
		<xs:attribute type="xs:string" name="call" use="optional"/>
		<xs:attribute type="xs:string" name="type" use="optional"/>
		<xs:attribute type="xs:string" name="parameter" use="optional"/>
	</xs:complexType>

	<!-- ActionType is super set of EntryActionType. As extension of choice is not possible, going with duplication-->
	<xs:complexType name="ActionType" mixed="true">
		<xs:choice maxOccurs="unbounded" minOccurs="0">
            <xs:element type="MasterListType" name="MasterList"/>
            <xs:element type="DetailObjectType" name="DetailObject"/>
			<xs:element type="ParametersType" name="Parameters"/>
			<xs:element type="ParameterizedInputsType" name="ParameterizedInputs" minOccurs="0"/>
			<xs:element type="ReturnType" name="Return"/>
			<xs:element type="CaseType" name="Case"/>
			<xs:element type="CaseElseType" name="CaseElse"/>
			<xs:element type="TransitionToType" name="TransitionTo"/>
			<xs:element type="CaseEmptyType" name="CaseEmpty"/>
			<xs:element name="UIDescription" type="xs:string" />
			<xs:element name="UIDescriptionLumina" type="xs:string" />
			<xs:element type="ValidationsType" name="Validations" />
			<xs:element type="EventsType" name="Events"/>
			<xs:element type="MessageType" name="Message"/>
			<xs:element type="CasesType" name="Cases"/>
			<xs:element type="ReturnValuesType" name="ReturnValues"/>
			<xs:element type="ExitHandlersType" name="ExitHandlers" minOccurs="0"/>
		</xs:choice>
		<xs:attribute type="xs:string" name="name" use="optional"/>
		<xs:attribute type="xs:string" name="printId" use="optional"/>
		<xs:attribute type="xs:string" name="locale" use="optional"/>
		<xs:attribute type="xs:string" name="showShareButton" use="optional"/>
		<xs:attribute type="xs:string" name="generateAndSave" use="optional"/>
		<xs:attribute type="xs:string" name="watermark" use="optional"/>
		<xs:attribute type="xs:string" name="automaticPageBreak" use="optional"/>
		<xs:attribute type="xs:string" name="actionType" use="optional"/>
		<xs:attribute type="xs:string" name="call" use="optional"/>
		<xs:attribute type="xs:string" name="type" use="optional"/>
		<xs:attribute type="xs:string" name="parameter" use="optional"/>
		<xs:attribute type="xs:string" name="process" use="optional"/>
		<xs:attribute type="xs:string" name="confirmType" use="optional"/>
		<!-- backOnly: on a VALIDATION action, "true" drops Discard/Ignore from the validation-error
		     dialog leaving only Back (enforce correction in place). Absent => unchanged behavior.
		     Strictly typed (lowercase true/false only): a new flag sets the cleaner precedent rather
		     than inheriting the untyped xs:string of legacy boolean attrs. The engine-schema JSON
		     pattern is aligned to the same lowercase set so both validation surfaces agree. -->
		<xs:attribute type="Process_BooleanType" name="backOnly" use="optional"/>
	</xs:complexType>

	<xs:simpleType name="Process_BooleanType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="true"/>
			<xs:enumeration value="false"/>
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="ParameterizedInputsType">
		<xs:sequence>
			<xs:element type="ParameterizedInputType" name="ParameterizedInput" maxOccurs="unbounded" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute type="xs:string" name="name" use="optional"/>
		<xs:attribute type="xs:string" name="dependentName" use="optional"/>
	</xs:complexType>

	<xs:complexType name="ParameterizedInputType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="parameterValue" use="optional"/>
				<xs:attribute type="xs:string" name="parameterType" use="optional"/>
				<xs:attribute type="xs:string" name="dependentValue" use="optional"/>
				<xs:attribute type="xs:string" name="dependentType" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

    <xs:complexType name="SaveType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute type="xs:string" name="type"/>
                <xs:attribute type="xs:string" name="confirmation"/>
                <xs:attribute type="xs:string" name="validate"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>

    <xs:complexType name="CreateType">
        <xs:sequence>
            <xs:element type="WizardProcessType" name="WizardProcess"/>
        </xs:sequence>
        <xs:attribute type="xs:string" name="autoSave"/>
    </xs:complexType>

	<xs:complexType name="DeleteType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="confirmation"/>
				<xs:attribute type="xs:string" name="messageId"/>
				<xs:attribute type="xs:string" name="nextCurrent"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="WizardProcessType">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element type="ParametersType" name="Parameters"/>
			<xs:element type="ReturnValuesType" name="ReturnValues"/>
		</xs:choice>
		<xs:attribute type="xs:string" name="name"/>
		<xs:attribute type="xs:string" name="submitParameter"/>
	</xs:complexType>

    <xs:complexType name="DetailObjectType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element type="SaveType" name="Save"/>
            <xs:element type="CreateType" name="Create"/>
			<xs:element type="DeleteType" name="Delete"/>
        </xs:choice>
        <xs:attribute type="xs:string" name="name"/>
        <xs:attribute type="xs:string" name="objectClass"/>
    </xs:complexType>



    <xs:complexType name="ItemUnselectedType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute type="xs:string" name="type"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="MasterListType">
        <xs:sequence>
            <xs:element type="ItemUnselectedType" name="ItemUnselected">

            </xs:element>
        </xs:sequence>
        <xs:attribute type="xs:string" name="name"/>
    </xs:complexType>
	<xs:complexType name="ValidationsType">
		<xs:sequence>
			<xs:element type="ValidationType" name="Validation" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ValidationType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="name"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="ReturnValuesType">
		<xs:sequence>
			<xs:element type="ReturnType" name="Return" maxOccurs="unbounded" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="MessageType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="messageId" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="CasesType">
		<xs:sequence>
			<xs:element type="CaseType" name="Case" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="TransitionToType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="action" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="CaseType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="value" use="optional"/>
				<xs:attribute type="xs:string" name="action" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="CaseEmptyType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="action" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="CaseElseType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="action" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="EventType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="name" use="optional"/>
				<xs:attribute type="xs:string" name="action" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="ExternalEventType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="EventNameType" name="name" use="optional"/>
				<xs:attribute type="xs:string" name="action" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="EntryActionsType">
		<xs:sequence>
			<xs:element type="EntryActionType" name="Action" maxOccurs="unbounded" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Lead time in days</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="DeclarationsType">
		<xs:sequence>
			<xs:element type="DeclarationType" name="Declaration" maxOccurs="unbounded" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="BodyType">
		<xs:sequence>
			<xs:element type="ActionsType" name="Actions"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ReturnType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="name" use="optional"/>
				<xs:attribute type="xs:string" name="value" use="optional"/>
                <xs:attribute type="xs:string" name="type" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="ActionsType">
		<xs:sequence>
			<xs:element type="ActionType" name="Action" maxOccurs="unbounded" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="DeclarationType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="name" use="optional"/>
				<xs:attribute type="xs:string" name="type" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="ProcessesType">
		<xs:sequence>
			<xs:element type="ProcessType" name="Process" maxOccurs="unbounded" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute type="xs:string" name="defaultProcess" use="optional"/>
		<xs:attribute type="xs:string" name="selectedId" use="optional"/>
	</xs:complexType>

	<xs:complexType name="ProcessType" mixed="true">
		<xs:sequence>
			<xs:element type="EntryType" name="Entry" minOccurs="0"/>
			<xs:element type="BodyType" name="Body" minOccurs="0"/>
			<xs:element type="ExitHandlersType" name="ExitHandlers" minOccurs="0"/>
			<xs:element type="ExternalEventsType" name="ExternalEvents" minOccurs="0" maxOccurs="1"/>
		</xs:sequence>
		<xs:attribute type="xs:string" name="id" use="optional"/>
		<xs:attribute type="xs:string" name="image" use="optional"/>
		<xs:attribute type="xs:string" name="label" use="optional"/>
		<xs:attribute type="xs:string" name="defaultLabel" use="optional"/>
		<xs:attribute type="xs:string" name="action" use="optional"/>
		<xs:attribute type="xs:string" name="process" use="optional"/>
		<xs:attribute type="xs:string" name="name" use="optional"/>
		<xs:attribute type="xs:string" name="defaultAction" use="optional"/>
		<xs:attribute type="xs:string" name="schemaVersion" use="optional"/>
		<xs:attribute type="xs:string" name="ignoreMultiViewStack"/>
		<xs:attribute type="Process_DisableInputValidationTypes" name="disableInputValidation" use="optional"/>
	</xs:complexType>

	<xs:simpleType name="Process_DisableInputValidationTypes">
		<xs:restriction base="xs:string">
			<xs:enumeration value="true"/>
			<xs:enumeration value="false" />
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="ExitHandlersType">
		<xs:sequence>
			<xs:element type="ExitHandlerType" name="ExitHandler" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="OnValidationErrorType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="transitionTo"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="MethodType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="name"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="ExitHandlerType">
		<xs:choice>
			<xs:element type="OnValidationErrorType" name="OnValidationError" minOccurs="0" />
			<xs:element type="MethodType" name="Method" minOccurs="0"/>
		</xs:choice>
		<xs:attribute type="xs:string" name="handlerName"/>
		<xs:attribute type="xs:string" name="type"/>
		<xs:attribute type="xs:string" name="name"/>
	</xs:complexType>


	<xs:complexType name="ExternalEventsType">
		<xs:sequence maxOccurs="2">
			<xs:element type="ExternalEventType" name="Event"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="EntryType">
		<xs:sequence>
			<xs:element type="ProcessContextType" name="ProcessContext"/>
			<xs:element type="EntryActionsType" name="EntryActions"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="CorrelationType">
		<xs:sequence>
			<xs:element type="FiltersType" name="Filters"/>
		</xs:sequence>
		<xs:attribute type="xs:string" name="name" use="optional"/>
		<xs:attribute type="xs:string" name="value" use="optional"/>
		<xs:attribute type="xs:string" name="key" use="optional"/>
		<xs:attribute type="xs:string" name="correlationKey" use="optional"/>
		<xs:attribute type="xs:string" name="prefix" use="optional"/>
		<xs:attribute type="xs:string" name="targetName" use="optional"/>
	</xs:complexType>

	<xs:complexType name="FilterType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="fieldName" use="optional"/>
				<xs:attribute type="xs:string" name="value" use="optional"/>
				<xs:attribute type="xs:string" name="operator" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="FiltersType" mixed="true">
		<xs:sequence>
			<xs:element type="FilterType" name="Filter" maxOccurs="unbounded" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="OrderCriterionType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="fieldName" use="optional"/>
				<xs:attribute type="xs:string" name="direction" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="OrderCriteriaType">
		<xs:sequence>
			<xs:element type="OrderCriterionType" name="OrderCriterion"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="SumType">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute type="xs:string" name="fieldName" use="optional"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="AggregationsType">
		<xs:sequence>
			<xs:element type="SumType" name="Sum" maxOccurs="unbounded" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="InputType">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element type="OrderCriteriaType" name="OrderCriteria" minOccurs="0"/>
			<xs:element type="FiltersType" name="Filters" minOccurs="0"/>
			<xs:element type="CorrelationType" name="Correlation" minOccurs="0"/>
			<xs:element type="AggregationsType" name="Aggregations" minOccurs="0"/>
		</xs:choice>
		<xs:attribute type="xs:string" name="name" use="optional"/>
		<xs:attribute type="xs:string" name="type" use="optional"/>
		<xs:attribute type="xs:string" name="value" use="optional"/>
	</xs:complexType>

	<xs:complexType name="EventsType">
		<xs:choice maxOccurs="unbounded" minOccurs="0">
			<xs:element type="EventType" name="Event"/>
		</xs:choice>
	</xs:complexType>

	<xs:complexType name="ParametersType">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element type="InputType" name="Input" />
			<xs:element type="ProcessesType" name="Processes" />
		</xs:choice>
		<xs:attribute type="xs:string" name="name"/>
	</xs:complexType>
	<xs:complexType name="ProcessContextType">
		<xs:choice minOccurs="0" maxOccurs="unbounded">
			<xs:element type="DeclarationsType" name="Declarations"/>
			<xs:element type="ParametersType" name="Parameters"/>
		</xs:choice>
	</xs:complexType>
</xs:schema>
