<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:nhis="https://www.his.bg" targetNamespace="https://www.his.bg" elementFormDefault="qualified"
  version="1.13.1">
  <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
  <xs:include schemaLocation="https://www.his.bg/api/v1/NHIS-Nomenclatures.xsd"/>
  <!-- Common data types used in different requests. -->
  <xs:simpleType name="uuid" final="union">
    <xs:annotation>
      <xs:documentation>Базов тип string ограничен до букви (латиница), цифри, и тире с цел репрезантиране на UUID.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-zA-Z0-9\-]+"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="alphanumericString" final="union">
    <xs:annotation>
      <xs:documentation>Базов тип string ограничен до букви (латиница), цифри, тире и празен знак.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-zA-Z0-9\- ]+"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="alphaString" final="union">
    <xs:annotation>
      <xs:documentation>Базов тип string ограничен до букви (латиница и кирилица), тире и празен знак.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-zа-яA-ZА-Я\- ]+"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="numericString" final="union">
    <xs:annotation>
      <xs:documentation>Базов тип string ограничен до цифри.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="[0-9]+"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:complexType name="amount">
    <xs:annotation>
      <xs:documentation>Базов тип децимално число, конфигурирано да описва суми.</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:decimal">
          <xs:totalDigits value="19"/>
          <xs:fractionDigits value="4"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <!-- Common elements used in different requests. -->
  <xs:complexType name="messageSender">
    <xs:annotation>
      <xs:documentation>Тип изпращач на съобщението.</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" type="nhis:CL018" use="required"/>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="messageSenderId">
    <xs:annotation>
      <xs:documentation>ID на изпращача на съобщението - за медицински лица е техния УИН, за други е номер на лечебното заведение</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" use="required">
      <xs:simpleType>
        <xs:restriction base="nhis:alphanumericString">
          <xs:minLength value="1"/>
          <xs:maxLength value="255"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="messageSenderISName">
    <xs:annotation>
      <xs:documentation>Име и версия на информационната система, изпратила съобщението</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:minLength value="1"/>
          <xs:maxLength value="255"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="messageRecipient">
    <xs:annotation>
      <xs:documentation>Тип на получател на съобщението.</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" type="nhis:CL018" use="required"/>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="messageRecipientId">
    <xs:annotation>
      <xs:documentation>ID на получателя на съобщението.</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" use="required">
      <xs:simpleType>
        <xs:restriction base="nhis:alphanumericString">
          <xs:minLength value="1"/>
          <xs:maxLength value="255"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="messageId">
    <xs:annotation>
      <xs:documentation>Уникален идентификатор на съобщението - трябва да бъде ново UUID генерирано към момента на изпращане на съобщението</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" use="required">
      <xs:simpleType>
        <xs:restriction base="nhis:uuid">
          <xs:minLength value="36"/>
          <xs:maxLength value="36"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="messageType">
    <xs:annotation>
      <xs:documentation>Тип на съобщението (винаги във формат XXXX).</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:length value="4"/>
          <xs:pattern value="([RPCIXH][0-9]{3})"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="messageCreatedOn">
    <xs:annotation>
      <xs:documentation>Дата и час на изготвяне на съобщението по ISO 8601 в локално време с часова зона</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" type="xs:dateTime" use="required"/>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="header">
    <xs:annotation>
      <xs:documentation>Носител на системната информация за съобщението.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="sender" type="nhis:messageSender"/>
      <xs:element name="senderId" type="nhis:messageSenderId"/>
      <xs:element name="senderISName" type="nhis:messageSenderISName"/>
      <xs:element name="recipient" type="nhis:messageRecipient"/>
      <xs:element name="recipientId" type="nhis:messageRecipientId"/>
      <xs:element name="messageId" type="nhis:messageId"/>
      <xs:element name="messageType" type="nhis:messageType"/>
      <xs:element name="createdOn" type="nhis:messageCreatedOn"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="contentsBase">
    <xs:annotation>
      <xs:documentation>Носител на бизнес информацията за съобщението.</xs:documentation>
    </xs:annotation>
    <xs:sequence/>
  </xs:complexType>
  <xs:complexType name="nrnBase">
    <xs:annotation>
      <xs:documentation>Национален референтен номер на медицински е-документ, генериран от НЗИС</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" use="required">
      <xs:simpleType>
        <xs:restriction base="nhis:alphanumericString">
          <xs:length value="12"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="timestampBase">
    <xs:annotation>
      <xs:documentation>Общ атрибут за отбелязване на дата и час на събитие</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" type="xs:dateTime" use="required"/>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="warningCode">
    <xs:annotation>
      <xs:documentation>Код на предупреждението</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" use="required">
      <xs:simpleType>
        <xs:restriction base="nhis:alphanumericString">
          <xs:length value="4"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="warningDescription">
    <xs:annotation>
      <xs:documentation>Текстово описание на предупреждението</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:maxLength value="2000"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="warningSource">
    <xs:annotation>
      <xs:documentation>Източник на предупреждението (напр. НЗОК)</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:maxLength value="50"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="warningsBase">
    <xs:annotation>
      <xs:documentation>Предупредителни съобщения към съобщението.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="code" type="nhis:warningCode"/>
      <xs:element name="description" type="nhis:warningDescription"/>
      <xs:element name="source" type="nhis:warningSource"/>
      <xs:element name="nrnTarget" type="nhis:nrnBase"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="messageBase">
    <xs:annotation>
      <xs:documentation>Контейнер на съобщението.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
      <xs:element name="header" type="nhis:header"/>
    </xs:sequence>
  </xs:complexType>
  <!-- Define all elements in 'Error' block -->
  <xs:complexType name="errorType">
    <xs:annotation>
      <xs:documentation>Специфичен код на грешката</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" type="nhis:CL999" use="required"/>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="errorReason">
    <xs:annotation>
      <xs:documentation>Текст, описващ причината за възникване на грешката (на Пр. "некоректно подаден параметър")</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:minLength value="1"/>
          <xs:maxLength value="255"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="errorDescription">
    <xs:annotation>
      <xs:documentation>Допълнителна информация за грешката, ако има такава необходимост</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:maxLength value="2000"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="errorFaultyAttribute">
    <xs:annotation>
      <xs:documentation>Системно име на сгрешения параметър, ако това е типа на грешката</xs:documentation>
    </xs:annotation>
    <xs:attribute name="value" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:minLength value="1"/>
          <xs:maxLength value="255"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="dataType" type="xs:string"/>
  </xs:complexType>
  <xs:complexType name="error">
    <xs:sequence>
      <xs:element name="type" type="nhis:errorType"/>
      <xs:element name="reason" type="nhis:errorReason" minOccurs="0"/>
      <xs:element name="description" type="nhis:errorDescription" minOccurs="0"/>
      <xs:element name="faultyAttribute" type="nhis:errorFaultyAttribute" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>
