Тег (обязательный) <PROTOCOL>, в котором указывается мнемоника протокола. Тег (обязательный) <VER>, в котором указывается версия формата. Тег <CREATE_BY> (необязательный) содержит наименование программы, создавшей экземпляр файла. Тег <APP_BUILD> (необязательный) содержит номер сборки (версии) программы, создавшей экземпляр файла. Тег <CREATE_TIME> (необязательный) содержит дату и время создания файла. Тег <TITLE> (необязательный) содержит строку со смысловым обозначением формата файла. Тег <ЕСР> (необязательный) содержит строку с электронной подписью отправителя. Раздел SENDINFO (тег <SENDINFO>, обязательный) типа docFlowInfoType (определение приведено ниже). Все остальные данные включаются в теге <DATAMAIN>, структура которого определяется конкретным форматом. Соответствие протоколу и схеме, проверка контрольной суммы XML файл должен полностью соответствовать схеме, определенной для протокола, к которому относится этот файл. Не соответствующие схеме файлы не подлежат обработке. При обработке файла осуществляется проверка версии протокола, в случае несоответствия обработку проходят только допустимые версии. При создании файла ПО экспортера должно рассчитать и записать контрольную сумму по методике, описанной в пункте "Алгоритм расчета контрольной суммы" настоящего документа. При обработке файла ПО экспортера также должно проверить соответствие содержания файла контрольной сумме по тому же алгоритму. 5.2. Правила формирования посылок Тег SENDINFO с информацией об экспортируемой посылке данных является обязательным. В теге <HOST_GUID> должен быть указан GUID экспортера. GUID экспортера представляет собой символьный идентификатор участника ДЛО, уникальный в пределах территориальной информационной системы дополнительного лекарственного обеспечения отдельных категорий граждан. При обработке файла необходимо провести проверку допустимости приема файла данного протокола от данного экспортера. В качестве GUID хоста в системе используется ОГРН учреждения экспортера. В случае, если у одного учреждения присутствует несколько хостов экспортеров (например, аптечные пункты одной аптеки) для уникальности к ОГРН в квадратных или круглых добавляется номер хоста внутри данного учреждения. Например: <HOST_GUID>1023101687190[2]</HOST_GUID>. В теге <TARGET_HOST_GUID> должен быть указан GUID импортера, которому предназначена данная посылка. Правила формирования GUID в теге <TARGET_HOST_GUID> те же самые, что и для тега <HOST_GUID>. Посылки от одного экспортера должны последовательно нумероваться, и номер посылки указываться в теге <PACKAGE_NUMBER>. ПО экспортера должно исключить возможность формирования двух разных посылок с одним номером от одного экспортера. ПО, осуществляющее импорт посылок, должно контролировать последовательность обработки посылок и исключить возможность нарушения порядка обработки посылок одного экспортера. Для каждой вновь создаваемой посылки экспортер должен определить новый GUID посылки, который должен быть отражен в теге <SEND_GUID>, а также сохранен для последующего использования. ПО, осуществляющее импорт посылок, обязано контролировать уникальность импорта посылок и исключить возможность обработки посылок с одинаковым GUID. В качестве GUID (Global Unique Identifier) посылки должен использоваться Глобальный Уникальный Идентификатор, используемый в операционной системе Microsoft Windows. GUID представляет собой уникальное псевдослучайное 128-битное значение, которое теоретически не должно повториться. Алгоритм генерации GUID основан на аппаратной части компьютера (параметры BIOS, частота процессора, номер сетевой карты и т.д.) и использует случайные показания внутреннего таймера. Эту запись можно определить в виде строки следующего формата: `{хххххххх-хххх-хххх-хххх-хххххххххххх}` В каждой посылке необходимо указывать GUID предыдущей посылки в теге <PREV_SEND_GUID>. При обработке файла необходимо обеспечивать правило, по которому посылки должны обрабатываться последовательно, т.е. значение тега <PREV_SEND_GUID> должно соответствовать предыдущей принятой посылке. Для первой посылки от экспортера тег <PREV_SEND_GUID> имеет пустое значение. В случае, когда посылка разбивается на несколько файлов, в ней необходимо указывать теги <FILE_NUMBER>, <PREV_FILE_NUMBER>, <NEXT_FILE_NUMBER>, номер текущего файла, предыдущего и последующего. Все файлы посылки имеют сквозную (в рамках посылки) нумерацию. При обработке многофайловой посылки необходимо соблюсти последовательность обработки файлов. 5.3. Формирование XML-файла реестра отказов При формировании XML файла ПО экспортера данных обязано выдержать все требования настоящей спецификации по структуре файла и соответствию его XSD-схеме. После полного формирования файла ППО экспортера обязано проверить сформированный файл на соответствие XSD-схеме. Все данные при формировании файла должны приводиться к форматам, определенным в пункте 6 настоящего документа. Расчет контрольной суммы производится в соответствии с пунктом 8 настоящего документа. 5.4. Контроль версии протокола При приеме реестров отказов ППО ФО в первую очередь должно провести проверку по версии протокола, указанной в принимаемом XML файле. XML файлы без указания версии протокола не должны приниматься ППО ФО. ППО ФО также не должно принимать к обработке XML-файлы с неизвестной ему версией протокола. 5.5. Контроль получателя До начала обработки данных ППО импортера должно проверить, что данная посылка направлена именно ему (контроль GUID хоста получателя). Если указанный GUID получателя не соответствует собственному GUID хоста импортера, посылка должна быть отвергнута в целом. 5.6. Контроль структуры файла Следующим шагом при приемке реестра отказов должна быть проверка полученного XML-файла на соответствие определенной для версии протокола XSD-схеме. При каком-либо несоответствии ППО ФО должно отвергнуть файл в целом и не пытаться осуществлять импорт полученных данных. Для ППО ФО рекомендуется формировать файл обнаруженных ошибок в полученном XML-файле для разбора возможных конфликтных ситуаций. 5.7. Проверка контрольной суммы До начала исполнения импорта ППО ФО обязано рассчитать контрольную сумму по обрабатываемому XML-файлу в соответствии с алгоритмом, указанным в пункте 8 настоящего документа. Рассчитанная контрольная сумма сравнивается с контрольной суммой, указанной в атрибуте chsm корневого тега <MAIN> XML-файла. При несоответствии рассчитанной и указанной контрольных сумм файл должен считаться дефектным и не приниматься к дальнейшей обработке. 6. ФОРМАТЫ ДАННЫХ При записи данных в XML файлах используются типы данных (форматы представления), описанных в спецификации W3.ORG (http://www.w3.org/ 2001/XMLSchema). Используются простые базовые типы, производные (путем введения ограничений) от простых типов и комплексные типы. При создании XML файлов необходимо использовать следующие форматы данных: 6.1. Форматы применяемых простых типов ------------------------------------------------------------------ | XSD Тип | Тип данных | Описание | |-----------|------------|---------------------------------------| |xs:string |Строка |Произвольная строка | |-----------|------------|---------------------------------------| |xs:integer |Целое число |-ХХХХХХХХХХ и +ХХХХХХХХХХ (32 бита) | |-----------|------------|---------------------------------------| |xs:decimal |Дробное |"YYYYY.XXX", где YYYY - целая часть, | | |число |XXX - дробная, разделитель целой и | | | |дробной части "." /точка/ | |-----------|------------|---------------------------------------| |xs:double |Вещественное|Разделитель целой и дробной части "." | | | |/точка/ | |-----------|------------|---------------------------------------| |xs:date |Дата |"ГГГГ-ММ-ДД", например, 2004-09-12 | |-----------|------------|---------------------------------------| |xs:dateTime|Дата+время |"ГГГГ-ММ-ДДТЧЧ:ММ:СС" разделитель даты | | | |и времени - латинская Т, например, | | | |2004-12-31Т23:55:57 | |-----------|------------|---------------------------------------| |xs:long |Целое число |-ХХХХХХХХХХ и +ХХХХХХХХХХ (64 бита) | ------------------------------------------------------------------ 6.2. Производные типы Производный тип: money2 Базовый ТИП: xs:decimal Описание: Тип деньги Производный тип: rесТуре Базовый тип: xs:string Возможные значения для типа: - значение: "I" - значение: "U" - значение: "D" Описание: Тип передаваемой записи. Используется для указания причины, по которой передается запись. I - новая запись, U - измененная запись, D - удаленная запись 6.3. Составные типы Составной тип: docFlowInfoType Описание: Раздел информации для файлов, участвующих в посылке экспорта/импорта. Вложенные теги: Тег: HOST_GUID Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: GUID хоста экспортера. Определяется для каждого экспортера как константа Тег: TARGET_HOST_GUID Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: GUID хоста импортера, которому предназначена эта посылка. Несмотря на то, что тег описан как необязательный, он должен присутствовать в пакетах, соответствующих данному протоколу, для однозначной идентификации Фарм-Организации Тег: SEND_GUID Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: GUID посылки. Создается новый для каждого экземпляра посылки Тег: PREV_SEND_GUID Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: GUID предыдущей посылки Тег: FILE_NUMBER Тип значения: xs:integer Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер файла в посылке. Указывается в случаях, когда посылка разбита на несколько файлов. Нумерация производится, начиная с 1. 1, 2, 3 и т.д. Тег: PREV_FILE_NUMBER Тип значения: xs:integer Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер предыдущего файла в посылке. Указывается в случаях, когда посылка разбита на несколько файлов. В случае, если файл первый в посылке, тег отсутствует Тег: NEXT_FILE_NUMBER Тип значения: xs:integer Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер следующего файла в посылке. Указывается в случаях, когда посылка разбита на несколько файлов. В случае, если файл последний в посылке, тег отсутствует Тег: PACKAGE_NUMBER Тип значения: xs:integer Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер посылки. Указывается в случаях, когда посылки нумеруются 7. СТРУКТУРА ФАЙЛОВ В соответствии со спецификацией формата .XML (www.w3.org): - XML файл должен иметь идентифицирующий тег, указывающий на то, что данный файл является файлом XML формата (первый тег XML-файла); - XML файл, а также каждый его блок должен иметь открывающий и закрывающий теги, указывающие на начало и конец содержания XML-файла (блока). В XML-файле должен быть один и только один корневой тег. В настоящем документе везде далее при описании тегов XML файлов знак + (плюс) перед тегом означает, что выделенный таким образом тег имеет вложенные теги. 7.1. Общие требования Реализация функции обновления данных в качестве экспорта информации предназначена для предоставления в ФО информации об отпущенных по рецептам лекарственных средствах, по которым имеются отказы в оплате. В тегах, описывающих количество (или цену) лекарственного средства, в качестве единицы измерения принято считать упаковку (в соответствии с перечнем зарегистрированных цен на лекарственные средства, которыми обеспечиваются отдельные категории граждан, принятыми приказами Федеральной службы по надзору в сфере здравоохранения и социального развития). В тегах с типом значения "xs:dateTime", описывающих дату и время, в случае отсутствия значения (неопределенного) приняты следующие правила: - для тегов (полей), описывающих дату (и время) какого-либо события, - значение тега должно быть пустым или "1900-01-01Т00:00:00"; - для тегов (полей), описывающих дату (и время) начала какого-либо временного интервала (например, дата включения в справочник), - значение тега должно быть пустым или "1900-01-01Т00:00:00"; - для тегов (полей), описывающих дату (и время) окончания какого-либо временного интервала (например, дата исключения из справочника), - значение тега должно быть пустым или "2222-01-01 Т00:00:00". Общее описание в табличном виде обрамления файлов экспорта: ---------------------------------------------------------------------- | N | Наименование | Обозначение | Примечания | |-----|---------------------------------|---------------|------------| |1. | Корневой раздел | <MAIN> | <*> | |-----|---------------------------------|---------------|------------| |1.1. | Версия формата | <FORMAT_GUID> | <*> | |-----|---------------------------------|---------------|------------| |1.2. | Мнемоника протокола, к которому | <PROTOCOL> | PHARMACY_ | | | принадлежит данный файл | | REESTR_BAD | |-----|---------------------------------|---------------|------------| |1.3. | Версия протокола | <VER> | | |-----|---------------------------------|---------------|------------| |1.4. | Создано программой | <CREATE_BY> | | |-----|---------------------------------|---------------|------------| |1.5. | Версия программы | <APP_BUILD> | <*> | |-----|---------------------------------|---------------|------------| |1.6. | Время создания | <CREATE_TIME> | <*> | |-----|---------------------------------|---------------|------------| |1.7. | Титул протокола | <TITLE> | <*> | |-----|---------------------------------|---------------|------------| |1.8. | Электронная подпись экспортера | <ECP> | <*> | |-----|---------------------------------|---------------|------------| |1.9. | Раздел описания для файлов, | <SENDINFO> | <*> | | | участвующих в экспорте/импорте | | | |-----|---------------------------------|---------------|------------| |1.10.| Передаваемая информация | <DATAMAIN> | <*> | ---------------------------------------------------------------------- -------------------------------- <*> - обязательный тег. Пример общей (заглавной) части XML-файла экспорта данных: <?xml version="1.0" encoding="windows -1251" ?> <MAIN> <FORMAT_GUID>{A66408FF-0DE1-4D9F-982A-9D4F8593DA88}</FORMAT_GUID> <PROTOCOL>PHARMACY_REESTR_BAD</PROTOCOL> <VER>3.0</VER> <CREATE_BY>SprExport - Malibu Library</CREATE_BY> <CREATE_TIME>2005-07-21T15:51:26</CREATE_TIME> <TITLE>Peecтp отказов оплаты</ТIТLЕ> <ECP></ECP> <SENDINFO> <HOST_GUID>1023101687190[2]</HOST_GUID> <SEND_GUID>{aaab74f4-aaf9-44f9-b10b-8c8fc6bdf93e}</SEND_GUID> <PACKAGE_NUMBER>7</PACKAGE_NUMBER> </SENDINFO> +<DATAMAIN> ... </MAIN> 7.2. Описание структуры XML-документа Тег: MAIN Уровень вложенности тега: 1 (корневой) Тип значения: <составной тип, имеет вложенные теги> Атрибуты для MAIN: Имя атрибута: chsm Тип значения: xs:string Описание: Контрольная сумма содержимого тега MAIN Содержимое тега MAIN: Тег: FORMAT_GUID Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Фиксированное значение тега: {F36408FF-0DE1-4D9F-982A-9D4F8593DA88} Описание: GUID формата файлов. Всегда должен иметь значение {F36408FF-0DE1-4D9F-982A-9D4F8593DA88} для версии 3.0 Тег: PROTOCOL Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Фиксированное значение тега: PHARMACY_REESTR_BAD Описание: Мнемоника протокола, к которому принадлежит данный файл. Должен быть PHARMACY_REESTR_BAD Тег: VER Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Фиксированное значение тега: 3.0 Описание: Номер версии формата. Данная версия 3.0 Тег: CREATE_BY Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Название программы, создавшей файл Тег: APP_BUILD Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер сборки программы, создавшей файл Тег: CREATE_TIME Уровень вложенности тега: 2 Тип значения: xs:dateTime Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Время создания экземпляра файла (например, 2004-10-10Т24:59:59) Тег: TITLE Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Наименование документа. Произвольная строка Тег: ЕСР Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Электронная цифровая подпись отправителя Тег: SENDINFO Уровень вложенности тега: 2 Тип значения: docFlowInfoType Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Блок информации для файлов, участвующих в экспортной посылке. См. раздел "Описание общих типов данных" Тег: DATAMAIN Уровень вложенности тега: 2 Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Составной, содержит блок экспортируемой информации. Содержимое тега DATAMAIN: Тег: DOCUMENTS Уровень вложенности тега: 3 Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Список экспортируемых документов Содержимое тега DOCUMENTS: Тег: PHARMACYRECIPE_DOC Уровень вложенности тега: 4 Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Список рецептов Содержимое тега PHARMACYRECIPE_DOC: Тег: PHARMACYRECIPE Уровень вложенности тега: 5 Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): unbounded (неограниченно) Описание: Рецепт, обслуженный в АУ Атрибуты тега PHARMACYRECIPE: Имя атрибута: ор Тип значения: rесТуре Описание: Тип передаваемой записи. Используется для указания причины, по которой передается запись. См. раздел "Описание общих типов данных" Содержимое тега PHARMACYRECIPE: Тег: SS Уровень вложенности тега: 6 Тип значения: xs:string(14) Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: СНИЛС пациента Тег: OKATO_REG Уровень вложенности тега: 6 Тип значения: xs:decimal(5) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Код территории постоянной регистрации гражданина (по ОКАТО) Тег: C_OGRN Уровень вложенности тега: 6 Тип значения: xs:string(15) Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: ОГРН ЛПУ, где выписан рецепт Тег: MCOD Уровень вложенности тега: 6 Тип значения: xs:string(7) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Код ЛПУ в кодировке ТФОМС Тег: PCOD Уровень вложенности тега: 6 Тип значения: xs:string(10) Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Код врача (фельдшера) в ЛПУ, где работает врач, указывается без ОГРН ЛПУ Тег: V_C_OGRN Уровень вложенности тега: 6 Тип значения: xs:string(15) Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: ОГРН ЛПУ, где работает врач Тег: DS Уровень вложенности тега: 6 Тип значения: xs:string(7) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Код диагноза заболевания по Международному Классификатору Болезней (МКБ-10) Тег: S_LR Уровень вложенности тега: 6 Тип значения: xs:string(14) Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Серия рецепта Тег: N_LR Уровень вложенности тега: 6 Тип значения: xs:long Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер рецепта. Лидирующие нули при исполнении импорта не учитываются Тег: DATE_VR Уровень вложенности тега: 6 Тип значения: xs:dateTime Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Дата выписки рецепта Тег: C_FINL Уровень вложенности тега: 6 Тип значения: xs:decimal(1) Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Источник финансирования (1 - Федеральный, 2 - Субъект РФ, 3 - Муниципальный орган) Тег: PR_LR Уровень вложенности тега: 6 Тип значения: xs:integer Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Процент льготы рецепта (1 - 100%, 2 - 50%) Тег: A_COD Уровень вложенности тега: 6 Тип значения: xs:string(6) Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Код аптечного учреждения (пункта отпуска ЛС) без ОГРН Тег: A_OGRN Уровень вложенности тега: 6 Тип значения: xs:string(15) Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: ОГРН аптечного учреждения Тег: NOMK_LS Уровень вложенности тега: 6 Тип значения: xs:decimal(13) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номенклатурный Код отпущенного ЛС Тег: KO_ALL Уровень вложенности тега: 6 Тип значения: xs:decimal(7,3) Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Количество упаковок отпущенного ЛС Тег: DOZ_ME Уровень вложенности тега: 6 Тип значения: xs:decimal(5) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Дозировка ЛС в одной отпущенной упаковке в международных единицах (ME) или единицах действия (ЕД) Тег: C_PFS Уровень вложенности тега: 6 Тип значения: xs:decimal(8) Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Код позиции в перечне Федеральной службы (ФС) Росздравнадзора отпущенного ЛС Тег: DATE_OBR Уровень вложенности тега: 6 Тип значения: xs:dateTime Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Дата обращения пациента в аптеку Тег: DATE_OTP Уровень вложенности тега: 6 Тип значения: xs:dateTime Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Дата отпуска ЛС Тег: SL_ALL Уровень вложенности тега: 6 Тип значения: xs:decimal(11,2) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Сумма возмещения, предъявленная к оплате (руб./коп.) Тег: SL_OP Уровень вложенности тега: 6 Тип значения: xs:decimal(11,2) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Сумма, принятая к оплате (руб./коп.) Тег: FO_OGRN Уровень вложенности тега: 6 Тип значения: xs:string(15) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: ОГРН фарморганизации Тег: Р_КЕК Уровень вложенности тега: 6 Тип значения: xs:decimal(1) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Признак наличия протокола КЭК (0 - нет, 1 - есть) Тег: D_TYPE Уровень вложенности тега: 6 Тип значения: xs:string(3) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: признак Особый случай Тег: N_SCHET Уровень вложенности тега: 6 Тип значения: xs:decimal(10) Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер счета, выписанного фарморганизацией Тег: DATE_SCHET Уровень вложенности тега: 6 Тип значения: xs:date Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Дата выписки счета фарморганизацией Тег: TYPE_SCHET Уровень вложенности тега: 6 Тип значения: xs:decimal(1) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Тип счета: 0 - основной, 1 - дополнительный, 2 - скорректированный Тег: ERR_TYPE Уровень вложенности тега: 6 Тип значения: xs:string(3) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Код причины отказа в оплате Тег: ERR1_TYPE Уровень вложенности тега: 6 Тип значения: xs:string(3) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Код причины отказа в оплате (резерв) Тег: ERR2_TYPE Уровень вложенности тега: 6 Тип значения: xs:string(3) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Код причины отказа в оплате (резерв) Тег: MSG_OTKAZ Уровень вложенности тега: 6 Тип значения: xs:string(150) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Пояснение причины (причин) отказа в оплате Тег: RecipeGUID Уровень вложенности тега: 6 Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Уникальный идентификатор рецепта (GUID). ПО должно формировать уникальный GUID для каждого нового рецепта с целью обеспечения возможности обновления (изменения) данных рецепта при повторном экспорте рецепта 8. АЛГОРИТМ РАСЧЕТА КОНТРОЛЬНОЙ СУММЫ Для расчета контрольной суммы по XML-файлу выделяется строка символов между правой угловой скобкой открывающего тега <MAIN> (не включая ее) и заканчивающаяся левой угловой скобкой закрывающего тега </MAIN> (не включая ее). Символы пробелов, табуляции, возврата каретки и перевода строки не сохраняются в полученной строке и не участвуют в расчете контрольной суммы. Далее по этой строке ведется подсчет контрольной суммы в соответствии с алгоритмом, указанным в пункте 8.1 настоящего документа. Полученное значение заносится в атрибут chsm. 8.1. Алгоритм расчета контрольной суммы по строке символов В расчете контрольной суммы по выделенной строке применяется алгоритм Secure Hash Algorithm (SHA) стандарта Secure Hash Standard (SHS). Алгоритм SHA (Secure Hash Algorithm) стандарта безопасного хеширования (Secure Hash Standard, SHS). В зависимости от выходного хеш-значения выделяют следующие виды SHA: SHA1 - выходное значение 160 бит; SHA256 - выходное значение 256 бит; SHA512 - выходное значение 512 бит; SHA384 - выходное значение 384 бита. Стандарт ИСО - ISO/IEC 10118-3:2004 (http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail? CSNUMBER=39876). Настоящий документ описывает стандарт SHA1. Описание реализации алгоритма SHA1 на языке C++: typedef int HASH[5]; typedef int T512[16]; typedef int T80[80]; typedef int (*LPFNHASH)(int, int, int);// Функции F1, F2, F3 const int K1 = 0x5a827999; const int K2 = 0x6ed9eba1; const int К3 = 0x8f1bbcdc; const int K4 = 0xca62c1d6; unsigned ROL(unsigned a, size_t s) { return a << s | (a >> (sizeof (T)*8 - s)); } int f1(int x, int y, int z) { return x&y | (~x)&z; } /\ / int f2(int x, int y, int z) { return х у z; } int f3(int x, int y, int z) { return x&y | x&z | y&z; } void FillT80(T512 M, T80 W) { size_t t; for(t = 0; t < 16; t++)W[t] = M[t]; /\ /\ / for(; t < 80; t++)W[t] = ROL(W[t-3] W[t-8] W[t-14] W[t-16], 1); } void MainStep(T80 W, size_t t, HASH H, LPFNHASH f, int K) { int tmp = ROL(H[0], 5) + f(H[1], H[2], H[3]) + H[4] + W[t] + K; H[4] = H[3]; H[3] = H[2]; H[2] = ROL(H[1], 30); H[1] = H[0]; H[0] = tmp; } void StepSHA(T512 M, HASH Hr) { T80 W; FillT80(M, W); size_t t; HASH H; memcpy(H, Hr, sizeof(HASH)); for(t = 0; t < 20; t++) MainStep(W, t, H, f1, K1); for(; t < 40; t++) MainStep(W, t, H, f2, K2); for(; t < 60; t++) MainStep(W, t, H, f3, К3); for(; t < 80; t++) MainStep(W, t, H, f2, K4); for(size_t i = 0; i < 5; i++) Hr[i] += H[i]; } Функции F1, F2, F3: F1(X,Y,Z) = (X /\ Y) \/ ((-|X) /\ Z) F2(X,Y,Z) = X (+) Y (+) Z F3(X,Y,Z) = (X /\ Y) \/ (X /\ Z) \/ (Y /\ Z) ROL(X,Y) - циклический сдвиг Х влево на Y разрядов, где: /\ - логическое "И"; \/ - логическое "Или"; -+ - логическое "Не"; (+) - логическое "Исключающее или". Перед запуском алгоритма хеш-значение должно инициализироваться следующими константами: const HASH HASHFIRST = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}; Замечание: тип int хранит байты в обратном порядке. В приведенном примере минимальной единицей памяти является 32-битный блок, поэтому способ хранения на диске неважен. При побайтовой обработке это следует учитывать. Приложение N 3.5 к Методическим рекомендациям по организации информационного взаимодействия между участниками лекарственного обеспечения отдельных категорий граждан при обязательном медицинского страхования (с изменениями и дополнениями) от 21 марта 2006 года СПЕЦИФИКАЦИЯ ПРОТОКОЛА ЭКСПОРТА-ИМПОРТА РЕЕСТРОВ ОСТАТКОВ ЛЕКАРСТВЕННЫХ СРЕДСТВ ПЕРЕЧЕНЬ СОКРАЩЕНИЙ И УСЛОВНЫХ ОБОЗНАЧЕНИЙ ТФОМС Территориальный фонд обязательного медицинского страхования ЦОД Центр обработки данных ЛПУ Лечебно-профилактическое учреждение ФО Фармацевтическая организация АУ Аптечное учреждение ТО ПФР Территориальное отделение пенсионного фонда России ТО УЗ Территориальный орган управления здравоохранения ВР Врачи Нас Население НАС ЛГ Лица, имеющие право на бесплатное дополнительное лекарственное обеспечение СНИЛС Страховой номер индивидуального лицевого счета в системе персонифицированного учета ПФ РФ РВР Персонифицированный реестр выписанных рецептов в ЛПУ РОЛС Персонифицированный реестр лекарственных средств отпущенных гражданам отдельных категорий ЭЦП Электронная цифровая подпись БД База данных СУБД Система управления БД 1. ОБЩИЕ ПОЛОЖЕНИЯ Настоящая спецификация описывает обязательные правила (протокол) экспорта/импорта реестров остатков лекарственных средств и рекомендуемые методики при реализации указанного протокола. 2. ТЕРМИНЫ И ПОНЯТИЯ ППО ЦОД - пакет программного обеспечения, работающий в ЦОД. ППО АУ - пакет программного обеспечения, работающий в АУ. ППО ЛПУ - пакет программного обеспечения, работающий в ЛПУ. Экспортер - сторона, передающая собственные данные в соответствии с настоящей спецификацией для другой стороны. Импортер - сторона, принимающая и использующая в своих целях данные, переданные другой стороной. Реестр остатков ЛС - реестр лекарственных средств, наличествующих в складах АУ на момент выгрузки. 3. ВЕРСИИ ПРОТОКОЛА Настоящая спецификация определяет протокол версии 3.0. В последующем возможно внесение изменений в описываемый протокол. Изменения протокола формируют соответствующую новую версию протокола. Каждый XML-файл по данному протоколу должен нести внутри себя информацию о версии протокола. 4. ВЗАИМОДЕЙСТВИЕ СТОРОН Обмен данными (экспорт/импорт) между АУ, ЛПУ и ЦОД осуществляется на файловом уровне, данные информационного обмена формируются, хранятся и обрабатываются ППО АУ, ППО ЛПУ и ППО ЦОД в виде файлов XML формата. Файлы XML формата содержат структурированный набор блоков информации. Каждый блок информации обозначается соответствующим предопределенным набором тегов. Занесение полученной информации в БД, контроль версии протокола, корректность переданной информации осуществляется ППО ЦОД и ППО ЛПУ. Настоящая версия протокола предусматривает, направление передачи данных от АУ в ЦОД и ЛПУ. Экспортер данных обязан формировать XML-файлы в соответствии с настоящим протоколом. Экспортер несет ответственность за полноту, достоверность и актуальность передаваемых данных. На импортирующую сторону возлагается ответственность за выполнение всех требуемых проверок по целостности принятых данных. ППО АУ формирует XML файл реестра остатков ЛС по данным локальной БД в аптечном учреждении. ППО импортера принимает реестр остатков ЛС в виде XML файла, анализирует его на предмет соответствия настоящей спецификации, формирует перечень предупреждений и перечень критичных ошибок по реестру (дефектную ведомость), разносит полученные данные в экземпляр БД. 4.1. Атрибутивные характеристики остатков ЛС Атрибутивные характеристики остатков лекарственных средств - условно постоянные характеристики. К ним относятся ОГРН и код аптечного учреждения, код позиции в перечне Федеральной службы Росздравнадзора, количество ЛС. 4.2. Назначение Целью обмена информацией является доставка из АУ в ЛПУ и ЦОД реестра остатков лекарственных средств, находящихся в складах АУ. Реестр остатков должен формироваться и передаваться в ЛПУ и ЦОД с периодичностью, установленной Регламентом информационного взаимодействия между участниками территориальной информационной системы дополнительного лекарственного обеспечения отдельных категорий граждан. 5. ОБЯЗАТЕЛЬНЫЕ ПРАВИЛА Настоящая спецификация предусматривает набор обязательных правил при экспорте / импорте реестров остатков ЛС. 5.1. Общие правила представления данных в XML формате Здесь и далее используются определения и спецификации, разработанные международным консорциумом по стандартизации The World Wide Web Consortium (W3C) (http://www.w3.org). Структура XML файлов протоколов и других документов описываются с помощью схем (XML Schema), спецификация которых описана (http://www. w3.org/2001/XMLSchema). Схема для каждого вида документа (XML файла) представляется в виде XSD файла. Структура файла Для всех документов (файлов XML) применяется следующая базовая схема: Тег корневого файла <MAIN chsm=````>. Корневой тег содержит атрибут "chsm" - значение контрольной суммы. Алгоритм расчета контрольной суммы описан в п. 8 данного документа. Тег (обязательный) с идентификатором формата <FORMAT_GUID>, в котором указывается GUID, соответствующий формату. Тег (обязательный) <PROTOCOL>, в котором указывается мнемоника протокола. Тег (обязательный) <VER>, в котором указывается версия формата. Тег <CREATE_BY> (не обязательный) содержит наименование программы, создавшей экземпляр файла. Тег <APP_BUILD> (не обязательный) содержит номер сборки (версии) программы, создавшей экземпляр файла. Тег <CREATE_TIME> (не обязательный), содержит дату и время создания файла. Тег <TITLE> (не обязательный), содержит строку со смысловым обозначением формата файла. Тег <ECP> (не обязательный), содержит двоичные данные с электронной подписью отправителя. Раздел SENDINFO (тег <SENDINFO>, обязательный) типа docFlowInfoType (определение приведено ниже). Все остальные данные включаются в теге <DATAMAIN>, структура которого определяется конкретным форматом. Соответствие протоколу и схеме, проверка контрольной суммы XML файл должен полностью соответствовать схеме, определенной для протокола, к которому относится этот файл. Не соответствующие схеме файлы не подлежат обработке. При обработке файла, осуществляется проверка версии протокола, в случае не соответствия обработку проходят только допустимые версии. При создании файла ПО экспортера должно рассчитать и записать контрольную сумму по методике описанной в пункте "Алгоритм расчета контрольной суммы" настоящего документа. При обработке файла ПО импортера также должно проверить соответствие содержания файла контрольной сумме по тому же алгоритму. 5.2. Правила формирования посылок Тег SENDINFO с информацией об экспортируемой посылке данных является обязательным. В теге <HOST_GUID> должен быть указан GUID экспортера. GUID экспортера представляет собой символьный идентификатор участника уникальный в пределах территориальной информационной системы дополнительного лекарственного обеспечения отдельных категорий граждан. При обработке файла необходимо провести проверку допустимости приема файла данного протокола от данного экспортера. В качестве GUID хоста в системе используется ОГРН учреждения экспортера. В случае если у одного учреждения присутствует несколько хостов экспортеров (например, аптечные пункты одной аптеки) для уникальности к ОГРН в квадратных или круглых добавляется номер хоста внутри данного учреждения. Например: <H0ST_GUID>1023101687190[2]</HOST_GUID>. Посылки от одного экспортера должны последовательно нумероваться и номер посылки указываться в теге <PACKAGE_NUMBER>. ПО экспортера должно исключить возможность формирования двух разных посылок с одним номером от одного экспортера. ПО, осуществляющее импорт посылок, должно контролировать последовательность обработки посылок и исключить возможность нарушения порядка обработки посылок одного экспортера. Для каждой вновь создаваемой посылки, экспортер должен определить новый GUID посылки, который должен быть отражен в теге <SEND_GUID>, а также сохранен для последующего использования. ПО, осуществляющее импорт посылок, обязано контролировать уникальность импорта посылок и исключить возможность обработки посылок с одинаковым GUID. В качестве GUID (Global Unique Identifier) посылки должен использоваться Глобальный Уникальный Идентификатор, используемый в операционной системе Microsoft Windows. GUID представляет собой уникальное псевдослучайное 128-битное значение, которое теоретически не должно повториться. Алгоритм генерации GUID основан на аппаратной части компьютера (параметры BIOS, частота процессора, номер сетевой карты и т.д.) и использует случайные показания внутреннего таймера. Эту запись можно определить в виде строки следующего формата: `{хххххххх-хххх-хххх-хххх-хххххххххххх}` В каждой посылке необходимо указывать GUID предыдущей посылки в теге <PREV_SEND_GUID>. При обработке файла необходимо обеспечивать правило, по которому посылки должны обрабатываться последовательно, т.е. значение тега <PREV_SEND_GUID> должно соответствовать предыдущей принятой посылке. Для первой посылки от экспортера тег <PREV_SEND_GUID> имеет пустое значение. В случае, когда посылка разбивается на несколько файлов, в ней необходимо указывать теги <FILE_NUMBER>, <PREV_FILE_NUMBER>, <NEXT_FILE_NUMBER>, номер текущего файла, предыдущего и последующего. Все файлы посылки имеют сквозную (в рамках посылки) нумерацию. При обработке многофайловой посылки необходимо соблюсти последовательность обработки файлов. 5.3. Формирование XML-файла реестра остатков ЛС При формировании XML файла ПО экспортера данных обязано выдержать все требования настоящей спецификации по структуре файла и соответствию его XSD-схеме. После полного формирования файла ППО экспортера обязано проверить сформированный файл на соответствие XSD-схеме. Все данные при формировании файла должны приводиться к форматам, определенным в пункте 6 настоящего документа. Расчет контрольной суммы производится в соответствии с пунктом 8 настоящего документа. 5.4. Контроль версии протокола При приеме реестров отказов ППО импортера в первую очередь должно провести проверку по версии протокола, указанной в принимаемом XML файле. XML файлы без указания версии протокола не должны приниматься. ППО импортера также не должно принимать к обработке XML-файлы с неизвестной ему версией протокола. Перед обработкой данных реестра необходимо выполнить проверку на существование аптечного учреждения, от которого получен файл обновления данных. В случае отсутствия информации об аптечном учреждении посылка отвергается. 5.5. Контроль структуры файла Следующим шагом при приемке реестра остатков должна быть проверка полученного XML-файла на соответствие определенной для версии протокола XSD-схеме. При каком-либо несоответствии ППО импортера должно отвергнуть файл в целом и не пытаться осуществлять импорт полученных данных. Для ППО ЛПУ и ППО ЦОД рекомендуется формировать файл обнаруженных ошибок в полученном XML-файле для разбора возможных конфликтных ситуаций. 5.6. Проверка контрольной суммы До начала исполнения импорта ППО импортера обязано рассчитать контрольную сумму по обрабатываемому XML-файлу в соответствии с алгоритмом, указанным в пункте 8 настоящего документа. Рассчитанная контрольная сумма сравнивается с контрольной суммой, указанной в атрибуте chsm корневого тега <MAIN> XML-файла. При несоответствии рассчитанной и указанной контрольных сумм, файл должен считаться дефектным и не приниматься к дальнейшей обработке. 6. ФОРМАТЫ ДАННЫХ При записи данных в XML файлах используются типы данных (форматы представления), описанных в спецификации W3.ORG (http://www.w3.org /2001/XMLSchema). Используются простые базовые типы, производные (путем введения ограничений) от простых типов и комплексные типы. При создании XML файлов необходимо использовать следующие форматы данных: 6.1. Форматы применяемых простых типов ---------------------------------------------------------------------- | XSD Тип | Тип данных | Описание | |------------|--------------|----------------------------------------| | xs:string | Строка | Произвольная строка | |------------|--------------|----------------------------------------| | xs:integer | Целое число | | |------------|--------------|----------------------------------------| | xs:decimal | Дробное | "YYYYY.XXX", где YYYY - целая часть, | | | число | XXX - дробная, разделитель целой и | | | | дробной части "." /точка/ | |------------|--------------|----------------------------------------| | xs:double | Вещественное | Разделитель целой и дробной части "." | | | | /точка/ | |------------|--------------|----------------------------------------| | xs:date | Дата | "ГГГГ-ММ-ДД", например, 2004-09-12 | |------------|--------------|----------------------------------------| | xs:dateTime| Дата+время | "ГГГГ-ММ-ДДТЧЧ:ММ:СС" разделитель даты | | | | и времени - латинская Т, например, | | | | 2004-12-31Т23:55:57 | ---------------------------------------------------------------------- 6.2. Производные типы Производный тип: money2 Базовый тип: xs:decimal Описание: Тип деньги Производный тип: recТуре Базовый тип: xs:string Возможные значения для типа: - значение: "I" - значение: "U" - значение: "D" Описание: Тип передаваемой записи. Используется для указания причины, по которой передается запись. I - новая запись, U - измененная запись, D - удаленная запись 6.3. Составные типы Составной тип: docFlowInfoType Описание: Раздел информации для файлов, участвующих в документообороте Вложенные теги: Тег: HOST_GUID Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: GUID хоста экспортера. Определяется для каждого экспортера (АУ) как константа Тег: TARGET_HOST_GUID Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: GUID хоста импортера, которому предназначена эта посылка Тег: SEND_GUID Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: GUID посылки. Создается новый для каждого экземпляра посылки Тег: PREV_SEND_GUID Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: GUID предыдущей посылки Тег: FILE_NUMBER Тип значения: xs:integer Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер файла в посылке. Указывается в случаях, когда посылка разбита на несколько файлов. Нумерация производится, начиная с 1. 1, 2, 3 и т.д. Тег: PREV_FILE_NUMBER Тип значения: xs:integer Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер предыдущего файла в посылке. Указывается в случаях, когда посылка разбита на несколько файлов. В случае, если файл первый в посылке, тег отсутствует Тег: NEXT_FILE_NUMBER Тип значения: xs:integer Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер следующего файла в посылке. Указывается в случаях, когда посылка разбита на несколько файлов. В случае, если файл последний в посылке, тег отсутствует Тег: PACKAGE_NUMBER Тип значения: xs:integer Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер посылки. Указывается в случаях, когда посылки нумеруются 7. СТРУКТУРА ФАЙЛОВ В соответствии со спецификацией формата .XML (www.w3.org): - XML файл должен иметь идентифицирующий тег, указывающий на то, что данный файл является файлом XML формата (первый тег XML-файла); - XML файл, а также каждый его блок должен иметь открывающий и закрывающий теги, указывающие на начало и конец содержания XML-файла (блока). В XML-файле должен быть один и только один корневой тег. В настоящем документе везде далее при описании тегов XML файлов знак + (плюс) перед тегом означает, что выделенный таким образом тег имеет вложенные теги. 7.1. Общие требования В тегах с типом значения "xs:dateTime", описывающих дату и время, в случае отсутствия значения (неопределенного) приняты следующие правила: - для тегов (полей), описывающих дату (и время) какого-либо события, - значение тега должно быть пустым или "1900-01-01Т00:00:00"; - для тегов (полей), описывающих дату (и время) начала какого-либо временного интервала (например, дата включения в справочник), - значение тега должно быть пустым или "1900-01-01Т00:00:00"; - для тегов (полей), описывающих дату (и время) окончания какого-либо временного интервала (например, дата исключения из справочника), - значение тега должно быть пустым или "2222-01-01Т00:00:00". Общее описание в табличном виде обрамления файлов экспорта: ---------------------------------------------------------------------- | N | Наименование | Обозначение | Примечания | |-----|---------------------------------|---------------|------------| |1. | Корневой раздел | <MAIN> | <*> | |-----|---------------------------------|---------------|------------| |1.1. | Версия формата | <FORMAT_GUID> | <*> | |-----|---------------------------------|---------------|------------| |1.2. | Мнемоника протокола, к которому | <PROTOCOL> | STOREDLS_ | | | принадлежит данный файл | | REESTR | |-----|---------------------------------|---------------|------------| |1.3. | Версия протокола | <VER> | | |-----|---------------------------------|---------------|------------| |1.4. | Создано программой | <CREATE_BY> | | |-----|---------------------------------|---------------|------------| |1.5. | Версия программы | <APP_BUILD> | <*> | |-----|---------------------------------|---------------|------------| |1.6. | Время создания | <CREATE_TIME> | <*> | |-----|---------------------------------|---------------|------------| |1.7. | Титул протокола | <TITLE> | <*> | |-----|---------------------------------|---------------|------------| |1.8. | ЭЦП отправителя | <ECP> | | |-----|---------------------------------|---------------|------------| |1.9. | Раздел описания для файлов, | <SENDINFO> | <*> | | | участвующих в документообороте | | | |-----|---------------------------------|---------------|------------| |1.10.| Передаваемая информация | <DATAMAIN> | <*> | ---------------------------------------------------------------------- -------------------------------- <*> - обязательный тег. Пример общей (заглавной) части XML-файла экспорта данных: <?xml version="1.0" encoding="windows -1251" ?> <MAIN> <FORMAT_GUID>{68a6e730-8014-4215-a680-b0f57b7fff8e}</FORMAT_GUID> <PROTOCOL>STOREDLS_REESTR</PROTOCOL> <VER>3.0</VER> <CREATE_BY>SprExport - Malibu Library</CREATE_BY> <CREATE_TIME>2005-07-21T15:51:26</CREATE_TIME> <TITLE>Реестр остатков ЛС от аптек</TITLE> <ECP></ECP> <SENDINFO> <HOST_GUID>1023101687190[2]</HOST_GUID> <SEND_GUID>{aaab74f4-aaf9-44f9-b10b-8c8fc6bdf93e}</SEND_GUID> <PACKAGE_NUMBER>7</PACKAGE_NUMBER> </SENDINFO> +<DATAMAIN> ... </MAIN> 7.2. Описание структуры XML-документа Тег: MAIN Уровень вложенности тега: 1 (корневой) Тип значения: <составной тип, имеет вложенные теги> Атрибуты для MAIN: Имя атрибута: chsm Тип значения: xs:string Описание: Контрольная сумма содержимого тега MAIN Содержимое тега MAIN: Тег: FORMAT_GUID Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Фиксированное значение тега: {68a6e730-8014-4215-a680-b0f57b7fff8e} Описание: GUID формата файлов. Всегда должен иметь значение {68а6е730-8014-4215-а680-b0f57b7fff8e} для версии 3.0 Тег: PROTOCOL Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Фиксированное значение тега: STOREDLS_REESTR Описание: Мнемоника протокола, к которому принадлежит данный файл. Должен быть STOREDLS_REESTR Тег: VER Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Фиксированное значение тега: 3.0 Описание: Номер версии формата. Данная версия 3.0 Тег: CREATE_BY Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Название программы, создавшей файл Тег: APP_BUILD Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер сборки программы, создавшей файл Тег: CREATE_TIME Уровень вложенности тега: 2 Тип значения: xs:dateTime Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Время создания экземпляра файла (например, 2004-10-10Т24:59:59) Тег: TITLE Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Наименование документа. Произвольная строка Тег: ЕСР Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Электронная цифровая подпись отправителя Тег: SENDINFO Уровень вложенности тега: 2 Тип значения: docFlowInfoType Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Блок информации для файлов, участвующих в экспортной посылке. См. раздел "Описание общих типов данных" Тег: DATAMAIN Уровень вложенности тега: 2 Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Составной, содержит блок экспортируемой информации Содержимое тега DATAMAIN: Тег: DRUGSTORE Уровень вложенности тега: 3 Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): unbounded (неограниченно) Описание: Информация об аптеке Атрибуты тега DRUGSTORE: Имя атрибута: a_ogrn Тип значения: xs:string Описание: ОГРН аптеки экспортера Имя атрибута: a_code Тип значения: xs:string Описание: Код аптеки экспортера Содержимое тега DRUGSTORE: Тег: LS Уровень вложенности тега: 4 Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): unbounded (неограниченно) Описание: Остаток ЛС Атрибуты тега LS: Имя атрибута: count Тип значения: xs:decimal Описание: Количество данного ЛС в складах АУ. Содержимое тега LS: В теге LS обязательно присутствие одного и только одного из перечисленных ниже тегов. Тег: C_PFS Уровень вложенности тега: 5 Тип значения: xs:decimal(13) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Код позиции перечня Федеральной службы Росздравнадзора. Тег: NOMK_LS Уровень вложенности тега: 5 Тип значения: xs:decimal(13) Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номенклатурный код ЛС. 8. АЛГОРИТМ РАСЧЕТА КОНТРОЛЬНОЙ СУММЫ Для расчета контрольной суммы по XML-файлу выделяется строка символов между правой угловой скобкой открывающего тега < MAIN > (не включая ее) и заканчивающаяся и левой угловой скобкой закрывающего тега </ MAIN > (не включая ее). Символы пробелов, табуляции, возврата каретки и перевода строки не сохраняются в полученной строке и не участвуют в расчете контрольной суммы. Далее по этой строке ведется подсчет контрольной суммы в соответствии с алгоритмом, указанным в пункте 8.1 настоящего документа. Полученное значение заносится в атрибут chsm. 8.1. Алгоритм расчета контрольной суммы по строке символов В расчете контрольной суммы по выделенной строке применяется алгоритм Secure Hash Algorithm (SHA) стандарта Secure Hash Standard (SHS). Алгоритм SHA (Secure Hash Algorithm) стандарта безопасного хеширования (Secure Hash Standard, SHS). В зависимости от выходного хеш-значения выделяют следующие виды SHA: SHA1 - выходное значение 160 бит; SHA256 - выходное значение 256 бит; SHA512 - выходное значение 512 бит; SHA384 - выходное значение 384 бита. Стандарт ИСО - ISO/IEC 10118-3:2004 (http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail? CSNUMBER=39876). Настоящий документ описывает стандарт SHA1. Описание реализации алгоритма SHA1 на языке C++: typedef int HASH[5]; typedef int T512[16]; typedef int T80[80]; typedef int (*LPFNHASH)(int, int, int);// Функции F1, F2, F3 const int K1 = 0x5a827999; const int K2 = 0x6ed9eba1; const int К3 = 0x8f1bbcdc; const int K4 = 0xca62c1d6; unsigned ROL(unsigned a, size_t s) { return a << s 1 (a >> (sizeof (T)*8 - s)); } int f1(int x, int y, int z) { return x&y | (~x)&z; } /\ / int f2(int x, int y, int z) { return х у z; } int f3(int x, int y, int z) { return x&y | x&z | y&z; } void FillT80(T512 M, T80 W) { size_t t; for(t = 0; t < 16; t++)W[t] = M[t]; } /\ /\ / for(; t < 80; t++)W[t] = ROL(W[t-3] W[t-8] W[t-14] W[t-16], 1); } void MainStep(T80 W, size_t t, HASH H, LPFNHASH f, int K) { int tmp = ROL(H[0], 5) + f(H[1], H[2], H[3]) + H[4] + W[t] + K; H[4] = H[3]; H[3] = H[2]; H[2] = ROL(H[1], 30); H[1] = H[0]; H[0] = tmp; } void StepSHA(T512 M, HASH Hr) { Т80 W; FillT80(M, W); size_t t; HASH H; memcpy(H, Hr, sizeof(HASH)); for(t = 0; t < 20; t++) MainStep(W, t, H, f1, K1); for(; t < 40; t++) MainStep(W, t, H, f2, K2); for(; t < 60; t++) MainStep(W, t, H, f3, K3); for(; t < 80; t++) MainStep(W, t, H, f2, K4); for(size_t i = 0; i < 5; i++) Hr[i] += H[i]; } Функции F1, F2, F3: F1(X, Y, Z) = (X /\ Y) \/ ((-|X) /\ Z) F2(X,Y,Z) = X (+) Y (+) Z F3(X,Y,Z) = (X /\ Y) \/ (X /\ Z) \/ (Y /\ Z) ROL(X,Y) - циклический сдвиг Х влево на Y разрядов, где: /\ - логическое "И"; \/ - логическое "Или"; -+ - логическое "Не"; (+) - логическое "Исключающее или". Перед запуском алгоритма хеш-значение должно инициализироваться следующими константами: const HASH HASHFIRST = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0}; Замечание: тип int хранит байты в обратном порядке. В приведенном примере минимальной единицей памяти является 32-битный блок, поэтому способ хранения на диске неважен. При побайтовой обработке это следует учитывать. Приложение N 3.6 к Методическим рекомендациям по организации информационного взаимодействия между участниками лекарственного обеспечения отдельных категорий граждан при обязательном медицинском страховании (с изменениями и дополнениями) от 21 марта 2006 года СПЕЦИФИКАЦИЯ ПРОТОКОЛА ЭКСПОРТА-ИМПОРТА СВОДНЫХ РЕЕСТРОВ МЕДИЦИНСКИХ УСЛУГ И ПЕРСОНАЛЬНЫХ ДАННЫХ О ПАЦИЕНТАХ ПЕРЕЧЕНЬ СОКРАЩЕНИЙ И УСЛОВНЫХ ОБОЗНАЧЕНИЙ ТФОМС Территориальный фонд обязательного медицинского страхования ЦОД Центр обработки данных ЛПУ Лечебно-профилактическое учреждение ФО Фармацевтическая организация СМО Страховая медицинская организация АУ Аптечное учреждение ТО ПФР Территориальное отделение пенсионного фонда России ТО УЗ Территориальный орган управления здравоохранения ВР Врачи СНИЛС Страховой номер индивидуального лицевого счета в системе персонифицированного учета ПФ РФ РМУ Сводный реестр медицинских услуг и персональных данных о пациентах БД База данных СУБД Система управления БД 1. ОБЩИЕ ПОЛОЖЕНИЯ Настоящая спецификация описывает обязательные правила (протокол) экспорта/импорта сводных реестров медицинских услуг и персональных данных о пациентах, формат передачи данных и рекомендуемые методики при реализации указанного протокола. 2. ТЕРМИНЫ И ПОНЯТИЯ Сводный реестр медицинских услуг и персональных данных о пациентах - XML файл с данными об оказанных в лечебном учреждении медицинских услугах. Структура РМУ определяется далее в настоящем документе. Экспортер - сторона, передающая собственные данные в соответствии с настоящей спецификацией для другой стороны. Импортер - сторона, принимающая и использующая в своих целях данные, переданные другой стороной. 3. ВЕРСИИ ПРОТОКОЛА Настоящая спецификация определяет протокол экспорта/импорта сводных реестров медицинских услуг и персональных данных о пациентах версии 3.0. В последующем возможно внесение изменений в описываемый протокол. Изменения протокола формируют соответствующую новую версию протокола. Каждый XML-файл по данному протоколу должен нести внутри себя информацию о версии протокола. 4. ВЗАИМОДЕЙСТВИЕ СТОРОН Обмен данными (экспорт/импорт) между ЛПУ и ЦОД осуществляется на файловом уровне, данные информационного обмена формируются, хранятся и обрабатываются ППО импортера и ППО экспортера в виде файлов XML формата. Файлы XML формата содержат структурированный набор блоков информации. Каждый блок информации обозначается соответствующим предопределенным набором тегов. Занесение полученной информации в БД, контроль версии протокола, корректность переданной информации осуществляется ПО импортера. Экспортер данных обязан формировать XML-файлы в соответствии с настоящим протоколом. Экспортер несет ответственность за полноту, достоверность и актуальность передаваемых данных. На импортирующую сторону возлагается ответственность за выполнение всех требуемых проверок по целостности принятых данных. ППО экспортера формирует XML файл РМУ по данным локальной БД в лечебно-профилактическом учреждении. ППО импортера принимает РМУ в виде XML файла, анализирует его на предмет соответствия настоящей спецификации, формирует перечень предупреждений и перечень критичных ошибок по РМУ (дефектную ведомость), разносит полученные данные в экземпляр БД. 4.1. Регулярные обновления Целью обмена информацией является обновление данных по оказанным медицинским услугам и персональным данным пациентов в БД импортера. Регулярные данные, РМУ, должен формироваться и передаваться экспортером с периодичностью, установленной Регламентом информационного взаимодействия между участниками территориальной информационной системы дополнительного лекарственного обеспечения отдельных категорий граждан. 5. ОБЯЗАТЕЛЬНЫЕ ПРАВИЛА Настоящая спецификация предусматривает следующий набор обязательных правил при экспорте/импорте сводных реестров медицинских услуг и персональных данных о пациентах. 5.1. Общие правила представления данных в XML формате Здесь и далее используются определения и спецификации, разработанные The World Wide Web Consortium (W3C) (http://www.w3.org). Структура XML файлов протоколов и других документов описывается с помощью схем (XML Schema), спецификация которых описана (http://www. w3.org/2001/XMLSchema). Схема для каждого вида документа (XML файла) представляется в виде XSD файла. Для всех документов (файлов XML) применяется следующая базовая схема: Тег корневого файла <MAIN chsm=````>. Корневой тег содержит атрибут "chsm" - значение контрольной суммы. Алгоритм расчета контрольной суммы описан в п. 8 данного документа. Тег (обязательный) с идентификатором формата <FORMAT_GUID>, в котором указывается GUID, соответствующий формату. Тег (обязательный) <PROTOCOL>, в котором указывается мнемоника протокола. Тег (обязательный) <VER>, в котором указывается версия формата. Тег <CREATE_BY> (необязательный) содержит наименование программы, создавшей экземпляр файла. Тег <APP_BUILD> (необязательный) содержит номер сборки (версии) программы, создавшей экземпляр файла. Тег <CREATE_TIME> (обязательный) содержит дату и время создания файла. Тег <TITLE> (необязательный) содержит строку со смысловым обозначением формата файла. Тег <ЕСР> (необязательный) содержит строку с электронной подписью отправителя. Раздел SENDINFO (тег <SENDINFO>, обязательный) типа docFlowInfoType (определение приведено ниже). Все остальные данные включаются в теге <DATAMAIN>, структура которого определяется конкретным форматом. 5.2. Правила формирования посылок Тег SENDINFO с информацией о посылке экспорта/импорта является обязательным. В теге <HOST_GUID> должен быть указан GUID экспортера. GUID экспортера представляет собой символьный идентификатор участника ДЛО, уникальный в пределах территориальной информационной системы дополнительного лекарственного обеспечения отдельных категорий граждан. При обработке файла необходимо провести проверку допустимости приема файла данного протокола от данного экспортера. В качестве GUID хоста в системе используется ОГРН учреждения экспортера. В случае, если у одного учреждения присутствует несколько хостов издателей, например разные отделения одного лечебно-профилактического учреждения, для уникальности к ОГРН в квадратных или круглых добавляется номер хоста (отделения ЛПУ) внутри данного учреждения. Например: <H0ST_GUID>1023101687190[2]</HOST_GUID>. Посылки от одного экспортера должны последовательно нумероваться, и номер посылки указываться в теге <PACKAGE_NUMBER>. ПО экспортера должно исключить возможность формирования двух разных посылок с одним номером от одного экспортера. ПО, осуществляющее импорт посылок, должно контролировать последовательность обработки посылок и исключить возможность нарушения порядка обработки посылок одного экспортера. Для каждой вновь создаваемой посылки экспортер должен определить новый GUID посылки, который должен быть отражен в теге <SEND_GUID>, а также сохранен для последующего использования. ПО, осуществляющее импорт посылок обязано контролировать уникальность импорта посылок и исключить возможность обработки посылок с одинаковым GUID. В качестве GUID (Global Unique Identifier) посылки должен использоваться Глобальный Уникальный Идентификатор, используемый в операционной системе Microsoft Windows. GUID представляет собой уникальное псевдослучайное 128-битное значение, которое теоретически не должно повториться. Алгоритм генерации GUID основан на аппаратной части компьютера (параметры BIOS, частота процессора, номер сетевой карты и т.д.) и использует случайные показания внутреннего таймера. Эту запись можно определить в виде строки следующего формата: `{хххххххх-хххх-хххх-хххх-хххххххххххх}` В каждой посылке необходимо указывать GUID предыдущей посылки в теге <PREV_SEND_GUID>. При обработке файла необходимо обеспечивать правило, по которому посылки должны обрабатываться последовательно, т.е. значение тега <PREV_SEND_GUID> должно соответствовать предыдущей принятой посылке. Для первой посылки от экспортера тег <PREV_SEND_GUID> имеет пустое значение. В случае, когда посылка разбивается на несколько файлов, в ней необходимо указывать теги <FILE_NUMBER>, <PREV_FILE_NUMBER>, <NEXT_FILE_NUMBER>, номер текущего файла, предыдущего и последующего. Все файлы посылки имеют сквозную (в рамках посылки) нумерацию. При обработке многофайловой посылки необходимо соблюсти последовательность обработки файлов. 5.3. Формирование XML-файла РМУ При формировании XML файла ПО экспортера данных обязано выдержать все требования настоящей спецификации по структуре файла и соответствию его XSD-схеме. После полного формирования файла ППО экспортера обязано проверить сформированный файл на соответствие XSD-схеме. Все данные при формировании файла должны приводиться к форматам, определенным в пункте 6 настоящего документа. Расчет контрольной суммы производится в соответствии с пунктом 8 настоящего документа. 5.4. Контроль версии протокола При приеме РМУ ППО импортера в первую очередь должно провести проверку версии протокола, указанной в принимаемом XML файле. XML файлы без указания версии протокола не должны приниматься ППО импортера. ППО импортера также не должно принимать к обработке XML-файлы с неизвестной ему версией протокола экспорта/импорта выписанных рецептов. Перед обработкой данных реестра необходимо выполнить проверку на существование лечебно-профилактического учреждения, от которого получен файл обновления данных. В случае отсутствия информации о лечебно-профилактическом учреждении посылка отвергается. 5.5. Контроль структуры файлов Следующим шагом при приемке РМУ должна быть проверка полученного XML-файла на соответствие определенной для версии протокола XSD-схеме. При каком-либо несоответствии ППО импортера должно отвергнуть файл в целом и не пытаться осуществлять импорт полученных данных. Для ППО импортера рекомендуется формировать файл обнаруженных ошибок в полученном XML-файле для разбора возможных конфликтных ситуаций. 5.6. Проверка контрольной суммы До начала исполнения импорта ППО импортера обязано рассчитать контрольную сумму по обрабатываемому XML-файлу в соответствии с алгоритмом, указанным в пункте 8 настоящего документа. Рассчитанная контрольная сумма сравнивается с контрольной суммой, указанной в атрибуте chsm головного тега <MAIN> XML-файла. При несоответствии рассчитанной и указанной контрольных сумм файл должен считаться дефектным и не приниматься к дальнейшей обработке. 6. ФОРМАТЫ ДАННЫХ При записи данных в XML файлах, используются типы данных (форматы представления), описанных в спецификации W3.ORG (http://www.w3.org /2001/XMLSchema). Используются простые базовые типы, производные (путем введения ограничений) от простых типов и комплексные типы. При создании XML файлов необходимо использовать следующие форматы данных: 6.1. Форматы применяемых простых типов ---------------------------------------------------------------------- | XSD Тип | Тип данных | Описание | |------------|-------------|-----------------------------------------| | xs:string | Строка | Произвольная строка | |------------|-------------|-----------------------------------------| | xs:integer | Целое число | -ХХХХХХХХХХ и +ХХХХХХХХХХ (32 бита) | |------------|-------------|-----------------------------------------| | xs:decimal | Дробное | "YYYYY.XXX", где YYYY - целая часть, | | | число | XXX - дробная, разделитель целой и | | | | дробной части "." /точка/ | |------------|-------------|-----------------------------------------| | xs:double | Вещественное| Разделитель целой и дробной части "." | | | | /точка/ | |------------|-------------|-----------------------------------------| | xs:date | Дата | "ГГГГ-ММ-ДД", например, 2004-09-12 | |------------|-------------|-----------------------------------------| | xs:dateTime| Дата+время | "ГГГГ-ММ-ДДТЧЧ:ММ:СС" разделитель даты | | | | и времени - латинская Т, например, | | | | 2004-12-31Т23:55:57 | |------------|-------------|-----------------------------------------| | xs:long | Целое число | -ХХХХХХХХХХ и +ХХХХХХХХХХ (64 бита) | ---------------------------------------------------------------------- 6.2. Производные типы Производный тип: rесТуре Базовый тип: xs:string Возможные значения для типа: - значение: "I" - значение: "U" - значение: "D" Описание: Тип передаваемой записи. Используется для указания причины, по которой передается запись. I - новая запись, U - измененная запись, D - удаленная запись Производный тип: date0 Базовый тип: xs:string Формат: ГГГГ-ММ-ДД, где ГГГГ - год (допустимые значения от 0000 до 3333) ММ - месяц (допустимые значения от 00 до 12) ДД - месяц (допустимые значения от 00 до 31) Описание: Специальный формат даты. Допустимо в полях год, месяц или день сохранять значение 0. Интерпретируется данная ситуация как отсутствие информации об одном из полей 6.3. Составные типы Составной тип: docFlowInfoType Описание: Раздел информации для файлов, участвующих в посылке экспорта/импорта Вложенные теги: Тег: HOST_GUID Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: GUID хоста экспортера. Определяется для каждого экспортера как константа Тег: TARGET_HOST_GUID Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: GUID хоста импортера, которому предназначена эта посылка Тег: SEND_GUID Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: GUID посылки. Создается новый для каждого экземпляра посылки Тег: PREV_SEND_GUID Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: GUID предыдущей посылки Тег: FILE_NUMBER Тип значения: xs:integer Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер файла в посылке. Указывается в случаях, когда посылка разбита на несколько файлов. Нумерация производится, начиная с 1. 1, 2, 3 и т.д. Тег: PREV_FILE_NUMBER Тип значения: xs:integer Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер предыдущего файла в посылке. Указывается в случаях, когда посылка разбита на несколько файлов. В случае, если файл первый в посылке, тег отсутствует Тег: NEXT_FILE_NUMBER Тип значения: xs:integer Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер следующего файла в посылке. Указывается в случаях, когда посылка разбита на несколько файлов. В случае, если файл последний в посылке, тег отсутствует Тег: PACKAGE_NUMBER Тип значения: xs:integer Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер посылки. Указывается в случаях, когда посылки нумеруются 7. СТРУКТУРА ФАЙЛОВ В соответствии со спецификацией формата .XML (www.w3.org): - XML файл должен иметь идентифицирующий тег, указывающий на то, что данный файл является файлом XML формата (первый тег XML-файла); - XML файл, а также каждый его блок должен иметь открывающий и закрывающий теги, указывающие на начало и конец содержания XML-файла (блока). В XML-файле должен быть один и только один корневой тег. В настоящем документе везде далее при описании тегов XML файлов знак + (плюс) перед тегом означает, что выделенный таким образом тег имеет вложенные теги. 7.1. Общие требования Реализация функции обновления данных в качестве экспорта информации предназначена для предоставления импортеру информации об оказанных в лечебном учреждении медицинских услугах и персональных данных о пациентах. В тегах с типом значения "xs:dateTime", описывающих дату и время, в случае отсутствия значения (неопределенного) приняты следующие правила: - для тегов (полей), описывающих дату (и время) какого либо события, - значение тега должно быть пустым или "1900-01-01Т00:00:00"; - для тегов (полей), описывающих дату (и время) начала какого либо временного интервала (например, дата включения в справочник), - значение тега должно быть пустым или "1900-01-01Т00:00:00"; - для тегов (полей), описывающих дату (и время) окончания какого либо временного интервала (например, дата исключения из справочника), - значение тега должно быть пустым или "2222-01-01Т00:00:00". Описание в табличном виде обрамления для всех типов файлов экспорта: ---------------------------------------------------------------------- | N | Наименование | Обозначение | Примечания | |-----|----------------------------------|--------------|------------| |1. | Корневой раздел | <MAIN> | * | |-----|----------------------------------|--------------|------------| |1.1. | Версия формата | <FORMAT_GUID>| * | |-----|----------------------------------|--------------|------------| |1.2. | Мнемоника протокола, к которому | <PROTOCOL> | PERSONDLO | | | принадлежит данный файл | | _REESTR | |-----|----------------------------------|--------------|------------| |1.3. | Версия протокола | <VER> | | |-----|----------------------------------|--------------|------------| |1.4. | Создано программой | <CREATE_BY> | | |-----|----------------------------------|--------------|------------| |1.5. | Версия программы | <APP_BUILD> | * | |-----|----------------------------------|--------------|------------| |1.6. | Время создания | <CREATE_TIME>| * | |-----|----------------------------------|--------------|------------| |1.7. | Титул протокола | <TITLE> | * | |-----|----------------------------------|--------------|------------| |1.8. | Электронная подпись экспортера | <ЕСР> | * | |-----|----------------------------------|--------------|------------| |1.9. | Раздел описания для файлов, | <SENDINFO> | * | | | участвующих в посылке экспорта/ | | | | | импорта | | | |-----|----------------------------------|--------------|------------| |1.10.| Передаваемая информация | <DATAMAIN> | * | ---------------------------------------------------------------------- Пример общей (заглавной) части XML-файла экспорта данных: <?xml version="1.0" encoding="windows-1251"?> <MAIN chsm="89C3795DED7B711A4EE54E87C3338420AA1B23FE"> <FORMAT_GUID> {F6C98B0D-0AA5-4f54-BF0A-12DAD355C1DE}</FORMAT_GUID> <PROTOCOL> PERSONDLO_REESTR </PROTOCOL> <VER>1.0</VER> <CREATE_BY>SprExport - Malibu Library</CREATE_BY> <CREATE_TIME>2005-07-21T17:33:02</CREATE_TIME> <TITLE>Сводный реестр медицинских услуг и персональных данных пациентов</ТITLE> <ЕСР></ЕСР> <SENDINFO> <HOST_GUID>1023101681745[2]</HOST_GUID> <SEND_GUID>{4d484dfa-aa11-428d-8759-fac4ba3ad155}</SEND_GUID> <PACKAGE_NUMBER>23</PACKAGE_NUMBER> </SENDINFO> +<DATAMAIN> ... </MAIN> 7.2. Описание структуры XML-документа Тег: MAIN Уровень вложенности тега: 1 (корневой) Тип значения: <составной тип, имеет вложенные теги> Атрибуты для MAIN: Имя атрибута: chsm Тип значения: xs:string Описание: Контрольная сумма содержимого тtга MAIN Содержимое тега MAIN: Тег: FORMAT_GUID Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Фиксированное значение тега: {F6C98B0D-0AA5-4f54-BF0A-12DAD355C1DE} Описание: GUID формата файлов. Для данного протокола должен иметь значение {F6C98B0D-0AA5-4f54-BF0A-12DAD355C1DE} Тег: PROTOCOL Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Фиксированное значение тега: PERSONDL_REESTR Описание: Мнемоника протокола, к которому принадлежит данный файл. Для данного протокола должен иметь значение "PERSONDLO_REESTR" Тег: VER Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Фиксированное значение тега: 3.0 Описание: Номер версии формата протокола. Данная версия 3.0 Тег: CREATE_BY Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Название программы, создавшей файл Тег: APP_BUILD Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Номер сборки программы, создавшей файл Тег: CREATE_TIME Уровень вложенности тега: 2 Тип значения: xs:dateTime Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Время создания экземпляра файла (например, 2004-10-10Т24:59:59) Тег: TITLE Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Наименование документа. Произвольная строка. Например, "Сводный реестр медицинских услуг и персональных данных о льготниках" Тег: ЕСР Уровень вложенности тега: 2 Тип значения: xs:string Тег должен быть указан минимум (раз): 0 (необязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Электронная цифровая подпись отправителя Тег: SENDINFO Уровень вложенности тега: 2 Тип значения: docFlowInfoType Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Раздел информации для файлов, участвующих в экспорте / импорте. См. раздел "Описание общих типов данных" Тег: DATAMAIN Уровень вложенности тега: 2 Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Основной раздел. Включает все передаваемые протоколом данные Содержимое тега DATAMAIN: Тег: DOCUMENTS Уровень вложенности тега: 3 Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) |