<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://minameddelanden.gov.se/schema/Authority"
        elementFormDefault="qualified"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:authority="http://minameddelanden.gov.se/schema/Authority"
        xmlns:recipient="http://minameddelanden.gov.se/schema/Recipient">

    <import schemaLocation="Recipient.xsd" namespace="http://minameddelanden.gov.se/schema/Recipient"></import>

    <simpleType name="SignatoryId">
        <restriction base="string">
            <minLength value="2"/>
            <maxLength value="256"/>
        </restriction>
    </simpleType>

    <simpleType name="UserIdentity">
        <restriction base="string">
            <pattern
                value="(18\d{10}|19\d{10}|20\d{10})|([a-z]{2,2}.*)">
            </pattern>
            <maxLength value="255"></maxLength>
            <minLength value="12"></minLength>
        </restriction>
    </simpleType>

    <complexType name="Person">
        <sequence>
            <element name="Id" type="authority:SignatoryId"
                     minOccurs="1" maxOccurs="1">
            </element>
            <element name="Name" type="string" minOccurs="1" maxOccurs="1"></element>
        </sequence>
    </complexType>

    <simpleType name="AuthorizationStatus">
        <restriction base="string">
            <!-- Inskickad data är tillräcklig för firmateckning -->
            <enumeration value="Complete" />

            <!-- Inskickad data måste kompletteras för firmateckning -->
            <enumeration value="Incomplete" />

            <!-- Firmateckningsreglerna går inte att tolka -->
            <enumeration value="RulesNotSupported" />
        </restriction>
    </simpleType>

    <complexType name="SignatureAuthorizationResult">
        <sequence>
            <element name="Id" type="recipient:RecipientId"
                     minOccurs="0" maxOccurs="1" />
            <element name="SignedBy" type="authority:Person"
                     minOccurs="0" maxOccurs="unbounded"/>
            <element name="Status" type="authority:AuthorizationStatus"
                     minOccurs="0" maxOccurs="1" />
            <element name="Timestamp" type="dateTime" minOccurs="0"
                     maxOccurs="1" />
            <element name="Text" type="string" minOccurs="0"
                     maxOccurs="1" />
            <element name="PossibleSigners" type="authority:Person"
                     minOccurs="0" maxOccurs="unbounded" />
        </sequence>
    </complexType>

    <simpleType name="AccountActions">
        <restriction base="string">
            <enumeration value="Ownership"></enumeration>
            <enumeration value="CancelConsent"></enumeration>
        </restriction>
    </simpleType>

    <complexType name="UserAccessRightsResult">
        <sequence>
            <element name="Rights" type="authority:UserAccessRights"
                     minOccurs="0" maxOccurs="unbounded"/>
            <element name="Problems" type="authority:UserAccessRightsProblem"
                     minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
    </complexType>

    <simpleType name="UserAccessRightsProblemSource">
        <restriction base="string">
            <enumeration value="Bolagsverket"/>
        </restriction>
    </simpleType>

    <simpleType name="UserAccessRightsProblemType">
        <restriction base="string">
            <enumeration value="DataMissing"/>
            <enumeration value="DataUncertain"/>
            <enumeration value="DataUnexpected"/>
            <enumeration value="SourceInaccessible"/>
        </restriction>
    </simpleType>

    <complexType name="UserAccessRightsProblem">
        <sequence>
            <element name="Source" type="authority:UserAccessRightsProblemSource" minOccurs="1" maxOccurs="1"/>
            <element name="Type" type="authority:UserAccessRightsProblemType" minOccurs="1" maxOccurs="1"/>
            <element name="Description" type="string" minOccurs="1" maxOccurs="1"/>
            <element name="ObjectId" type="string" minOccurs="0" maxOccurs="1"/>
        </sequence>
    </complexType>

    <complexType name="UserAccessRights">
        <sequence>
            <element name="Id" type="recipient:RecipientId" minOccurs="1" maxOccurs="1" />
            <element name="OrganizationName" type="string" minOccurs="0" maxOccurs="1" />
            <element name="UserIdentity" type="authority:UserIdentity" minOccurs="1" maxOccurs="1" />
            <element name="GrantedAccess" type="authority:UserActivities" minOccurs="0" maxOccurs="unbounded" />
            <element name="GrantType" type="authority:GrantTypes" minOccurs="1" maxOccurs="1" />
            <element name="Role" type="string" minOccurs="0" maxOccurs="1" />
        </sequence>
    </complexType>

    <simpleType name="UserActivities">
        <restriction base="string">
            <enumeration value="View"></enumeration>
            <enumeration value="ForwardMessage"></enumeration>
            <enumeration value="InitiateAccountAction"></enumeration>
            <enumeration value="InitiateConsentReadAction"></enumeration>
            <enumeration value="InitiateConsentManageAction"></enumeration>
            <enumeration value="EditSettings"></enumeration>
            <enumeration value="EditSettingsFrom"></enumeration>
            <enumeration value="EditSettingsForward"></enumeration>
            <enumeration value="EditSettingsContact"></enumeration>
            <enumeration value="EditSettingsConsent"></enumeration>
            <enumeration value="EditSettingsAddressbook"></enumeration>
            <enumeration value="EditSettingsInactivate"></enumeration>

            <enumeration value="InitiateConsentAction"></enumeration>
        </restriction>
    </simpleType>

    <simpleType name="GrantTypes">
        <restriction base="string">
            <enumeration value="AuthorizedSignatory"></enumeration>
            <enumeration value="AuthorizedRole"></enumeration>
            <enumeration value="ConsentManage"></enumeration>
            <enumeration value="ConsentReadExtendUnread"></enumeration>
            <enumeration value="ConsentRead"></enumeration>
        </restriction>
    </simpleType>
</schema>
