ПК «Учет пациентов центра здоровья» наименование объек та автоматизации СПЕЦИФИКАЦИЯ ИНФОРМАЦИОННОГО ВЗАИМОДЕЙСТВИЯ ПК «ЦЗ» С АППАРАТНО-ПРОГРАММНЫМИ КОМПЛЕКСАМИ. РУКОВОДСТВО ПРОГРАММИСТА ЛИСТОВ 39 АННОТАЦИЯ Настоящее Руководство программиста содержит сведения о назначении, методах, условиях применения, характеристиках, предоставляемых интерфейсах, способах обращения к COM–объектах, предназначенным для интеграции ПК «Учет пациентов центра здоровья» на программном уровне с аппаратно-программными комплексами (АПК). Документ разработан в соответствии с требованиями ГОСТ 19.504-79. СОДЕРЖАНИЕ ПЕРЕЧЕНЬ СОКРАЩЕНИЙ И УСЛОВНЫХ ОБОЗНАЧЕНИЙ ...................................................4 1. ВВЕДЕНИЕ ....................................................................................................................................5 1.1. Использование COM-объекта HCCOM .......................................................................5 1.2. Использование COM-объекта ApkCOM .....................................................................6 2. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ .........................................................................9 2.1. Назначение и условия применения COM–объекта HCCOM.....................................9 2.2. Назначение и условия применения COM–объекта ApkCOM ...................................9 3. ХАРАКТЕРИСТИКА ПРОГРАММЫ .......................................................................................11 3.1. Методы интерфейса IHcCom ......................................................................................11 Интерфейс IHcCom в нотации IDL ................................................................................. 13 Метод GetMedCardForApk ............................................................................................... 13 Метод SetResearchResult .................................................................................................. 14 Метод ActivateHcApp ....................................................................................................... 15 3.2. Методы интерфейса IApkCom ...................................................................................15 Интерфейс IApkCom в нотации IDL ............................................................................... 17 Метод InitializeApk ........................................................................................................... 17 Метод SetMedCardForApk ............................................................................................... 18 Метод InspectPatient ......................................................................................................... 18 Метод GetResearchResult ................................................................................................. 19 4. ОБРАЩЕНИЕ К ПРОГРАММЕ ................................................................................................21 4.1. Обращение к методам интерфейса IHcCom из управляемого кода .......................21 4.2. Пример использования интерфейса IHcCom из неуправляемого кода ..................22 4.3. Пример реализации интерфейса IApkCom на языке C# ..........................................22 4.4. Обращение к методам интерфейса IApkCom из управляемого кода .....................24 5. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ ....................................................................................26 ПРИЛОЖЕНИЕ 1. ТАБЛИЦЫ ИДЕНТИФИКАТОРОВ ...............................................................28 ПРИЛОЖЕНИЕ 2. ОПИСАНИЕ СТРУКТУРЫ XML-ДОКУМЕНТА ........................................30 ПЕРЕЧЕНЬ СОКРАЩЕНИЙ И УСЛОВНЫХ ОБОЗНАЧЕНИЙ (англ. Component Object — Model Объектная Модель Компонентов; произносится как [ком]) — это технологический стандарт COM от создания компании Microsoft, программного предназначенный обеспечения на для основе взаимодействующих распределённых компонентов, каждый из которых может использоваться во многих программах одновременно. (англ. Unified Modeling Language — унифицированный язык UML моделирования) объектного — язык графического моделирования в описания области для разработки программного обеспечения. (англ. eXtensible Markup Language — расширяемый язык XML разметки) — текстовый формат, хранения структурированных предназначенный данных, для для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки. АПК Аппаратно – программный комплекс БД База данных ПК «ЦЗ» Программный комплекс «Учет пациентов центра здоровья» ЦЗ Центр здоровья 1. ВВЕДЕНИЕ В данном документе описаны интерфейсы для следующих типов информационного взаимодействия ПК «Учет пациентов центра здоровья» и АПК: взаимодействие ПК «ЦЗ» и АПК с использованием COM-объекта HCCOM; взаимодействие ПК «ЦЗ» и АПК с использованием COM-объекта ApkCOM, предоставляемого разработчиком АПК. 1.1. Использование COM-объекта HCCOM Для взаимодействия с АПК в составе ПК «ЦЗ» реализован COM-объект HCCOM. Взаимодействие АПК с COM-объектом HCCOM должно осуществляться в следующем порядке: 1. Оператор осуществляет выбор пациента и обследования в ПК «ЦЗ». 2. ПК «ЦЗ» выполняет запуск АПК (поиск и активацию приложения, если процесс приложения АПК уже запущен). 3. Перед началом обследования АПК запрашивает данные о пациенте: обращается к COM-объекту HCCOM и вызывает метод экспорта медицинской карты пациента в формате XML с указанием идентификатора АПК. В случае ошибки экспорта в АПК передаётся код ошибки. 4. Оператор проводит обследование пациента в АПК. 5. После завершения обследования АПК сохраняет отчетные формы и результаты обследования, обращается к COM-объекту и отправляет результат обследования (параметры, заключение, отчеты) в ПК «ЦЗ». 6. ПК «ЦЗ» осуществляет сохранение полученных данных и передаёт АПК результат сохранения данных. В случае неудачного сохранения данных, происходит повторная передача результатов обследования из АПК в ПК «ЦЗ». 7. COM-объект HCCOM активирует приложение ПК «ЦЗ». UML-схема использования COM-объекта HCCOM приведена на рисунке (Рисунок 1). ПК "ЦЗ" АПК HCCOM Запуск АПК Запрос на интерфейс IHCCOM Интерфейс IHCCOM Блокирование ПК «ЦЗ» в ожидании результатов обследования Сохранение данных Запрос данных о пациенте Запрос данных о пациенте Медицинская карта пациента / код ошибки Медицинская карта пациента / код ошибки Передача результатов обследования Передача результатов обследования Результат сохранения данных Результат сохранения данных Активация приложения ПК "ЦЗ" Проведение обследования пациента Повторная передача результатов при неудачном сохранении данных Рисунок 1. UML-схема использования COM-объекта HCCOM Формат XML-документов, используемых для взаимодействия, описан в разделе 5 «Входные и выходные данные». 1.2. Использование COM-объекта ApkCOM COM-объект ApkCOM (название COM-объекта может быть другим и приведено в качестве примера) должен быть разработан разработчиком АПК и содержать класс, реализующий COM-интерфейс IApkCOM. Взаимодействие ПК «ЦЗ» с COM-объектом ApkCOM должно осуществляться в следующем порядке: 1. Оператор осуществляет выбор пациента и обследования в ПК «ЦЗ»; 2. ПК «ЦЗ» осуществляет запрос на COM-интерфейс IApkCOM (описание интерфейса IApkCOM приведено в разделе 3.2 данного документа). 3. ПК «ЦЗ» выполняет запуск АПК (поиск и активацию приложения, если процесс приложения АПК уже запущен). 4. Перед началом обследования ПК «ЦЗ» передает данные о пациенте в формате XML через COM-объект ApkCOM. 5. Оператор проводит обследование пациента в АПК. 6. После завершения обследования ПК «ЦЗ» обращается к COM-объекту ApkCOM и запрашивает результат обследования в формате XML. 7. ПК «ЦЗ» осуществляет сохранение полученных данных и активирует приложение. UML-схема использования COM-объекта HCCOM приведена на рисунке (Рисунок 2). ПК "ЦЗ" ApkCOM АПК Запрос на интерфейс IApkCOM Интерфейс IApkCOM Запуск АПК Запуск АПК Результат запуска АПК / код ошибки Результат запуска АПК / код ошибки Отправка данных о пациенте Отправка данных о пациенте Результат отправки данных / код ошибки Результат отправки данных / код ошибки Запуск обследования пациента Запуск обследования пациента Получение результатов обследования Получение результатов обследования Результаты обследования / код ошибки Результаты обследования / код ошибки Сохранение данных Рисунок 2. UML-схема использования COM-объекта ApkCOM Проведение обследования пациента Формат XML-документов, используемых для взаимодействия, описан в разделе 5 «Входные и выходные данные». Для обеспечения возможности использования COM-объекта ApkCOM, разработчик АПК должен выполнить следующие требования: COM-объект должен содержать класс, реализующий COM-интерфейс IApkCOM (описание интерфейса IApkCOM приведено в разделе 3.2 данного документа); вместе с COM-объектом должен поставляться bat-файл “reg.bat”, выполняющий регистрацию COM-объекта в операционной системе; вместе с COM-объектом должен поставляться конфигурационный xml-файл “config.xml”, содержащий информацию о названии COM-объекта и названии класса, реализующего COM-интерфейс IApkCOM. Данная информация необходима для использования COM-объекта ApkCOM в ПК «ЦЗ». Конфигурационный файл должен содержать следующие xml-тэги: COMName — название COM-объекта, разработанного разработчиком АПК, под которым он регистрируется в операционной системе; ClassName — название класса, реализующего COM-интерфейс IApkCOM. Пример конфигурационного файла приведён в листинге (Листинг 1). Листинг 1. Пример конфигурационного файла “config.xml” <?xml version="1.0" encoding="utf-8" ?> <COMConfig> <COMName>ApkCOM</COMName> <ClassName>ApkClass</ClassName> </COMConfig> 2. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ 2.1. Назначение и условия применения COM–объекта HCCOM. COM–объект HCCOM предназначен для обеспечения информационного взаимодействия с внешними АПК и реализует функции получения данных медицинской карты из БД ПК «ЦЗ» и сохранение результата обследования в БД ПК «ЦЗ». Областью применения COM–объекта HCCOM является программное обеспечение внешних АПК, применяемое в Центрах здоровья при проведении профилактических обследований граждан. Для функционирования COM–объекта HCCOM необходима следующая необходимо следующее минимальная конфигурация технических средств: процессор Intel-совместимый; 1024Mb RAM; объём свободного дискового пространства – 100Mb; тактовая частота процессора - 3,0 ГГц. Для функционирования COM–объекта HCCOM общесистемное программное обеспечение: MS Windows 2000 Professional SP4 / XP SP2/ XP SP 3 / Vista / Windows 7; MS .NET Framework 2.0; MS Internet Explorer 6.0 SP2. 2.2. Назначение и условия применения COM–объекта ApkCOM COM–объект ApkCOM (COM–объект внешнего АПК) предназначен для обеспечения информационного взаимодействия с ПК «ЦЗ» и должен реализовывать функции инициализации пользовательского интерфейса АПК в соответствии с переданными данными о пациенте и получения результата обследования от внешнего АПК. Областью применения COM–объекта ApkCOM является ПК «ЦЗ», применяемый в Центрах здоровья при проведении профилактических обследований. Для функционирования COM – компонента внешнего АПК необходима следующая минимальная конфигурация технических средств: процессор Intel-совместимый; 1024Mb RAM; объём свободного дискового пространства – 100Mb; тактовая частота процессора - 3,0 ГГц. Для функционирования COM–объекта ApkCOM необходимо следующее общесистемное программное обеспечение: MS Windows 2000 Professional SP4 / XP SP2/ XP SP 3 / Vista / Windows 7; MS .NET Framework 2.0; MS Internet Explorer 6.0 SP2. 3. ХАРАКТЕРИСТИКА ПРОГРАММЫ Библиотека HCCOM.dll является управляемой сборкой и может быть использована при разработке приложений на платформе .NET. Также библиотека HCCOM.dll может быть зарегистрирована в качестве традиционного COM-объекта. В этом случае вызываемая оболочка COM (COM Callable Wrapper) библиотеки предоставляет клиентам доступ ко всем интерфейсам, типам данных и возвращаемым значениям. Для удобства программиста в спецификациях интерфейсов приведены прототипы функций на языках C++ и C#. COM-интерфейс IHcCom экспортируется исполняемым модулем HCCOM.dll. COM-интерфейс IApkCom экспортируется исполняемым модулем, предоставляемым разработчиком АПК. 3.1. Методы интерфейса IHcCom В данном разделе описан интерфейс IHcCom, который используется в случае информационного взаимодействия ПК «ЦЗ» и АПК с использованием COM-объекта HCCOM. Интерфейс IHcCom предоставляет 3 метода: GetMedCardForApk — экспортирует выбранную в ПК «ЦЗ» медицинскую карту пациента в приложение АПК; SetResearchResult — импортирует результаты обследования из АПК в ПК «ЦЗ»; ActivateHcApp — активирует приложение ПК «ЦЗ». UML-схема использования COM-объекта HCCOM, с указанием используемых методов интерфейса IHcCom, приведена на рисунке (Рисунок 3). ПК "ЦЗ" АПК HCCOM Запуск АПК Запрос на интерфейс IHCCOM Интерфейс IHCCOM GetMedCardForApk GetMedCardForApk Медицинская карта пациента / код ошибки Медицинская карта пациента / код ошибки SetResearchResult SetResearchResult Результат сохранения данных Результат сохранения данных Блокирование ПК «ЦЗ» в ожидании результатов обследования Сохранение данных ActivateHcApp Проведение обследования пациента Повторная передача результатов при неудачном сохранении данных Рисунок 3. UML-схема использования COM-объекта HCCOM с указанием методов интерфейса IHcCom Все методы, в случае успешного завершения, возвращают S_OK, в случае ошибки — стандартные коды ошибок COM. Используемые типы данных: целое – 32 битное целое число (long, LONG); строка – строковый тип BSTR; IDispatch – базовый интерфейс COM; HRESULT – 32 битное целое число. В описании методов используются понятия входных и выходных параметров. «Входные» – это параметры метода, в которых передаются значения для использования внутри вызываемой функции (в стандартном случае, в вызываемый метод передаётся значение параметра (иначе говоря, параметр по значению)). «Выходные» – параметры метода, в которых возвращаются значения в вызывающую функцию (в стандартном случае, в вызываемый метод передается указатель на объект, в который необходимо вернуть значение). Интерфейс IHcCom в нотации IDL Ниже представлено описание интерфейса IHcCom в нотации Microsoft IDL. [ odl, uuid(21B8D2DA-0331-4365-9E65-A501DBCC1749), version(1.0), dual, oleautomation, custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, HCCOM.IHcCom) ] interface IHcCom : IDispatch { [id(0x60020000)] HRESULT GetMedCardForApk( [in] GUID serviceApkGuid, [out, retval] BSTR* pRetVal); [id(0x60020001)] HRESULT SetResearchResult( [in] GUID serviceApkGuid, [in] BSTR data); [id(0x60020002)] HRESULT ActivateHcApp(); }; Метод GetMedCardForApk Экспортирует выбранную в ПК «ЦЗ» медицинскую карту пациента в приложение АПК. Прототип на C++: HRESULT GetMedCardForApk(GUID serviceApkGuid, BSTR* pRetVal); Прототип на C#: string GetMedCardForApk(Guid serviceApkGuid); Входные параметры: serviceApkGuid — уникальный идентификатор обследования на АПК, согласно таблице «Таблица обследований на АПК» Приложения 1 документа «Порядок информационного взаимодействия ПК «ЦЗ» с внешними АПК». Выходные параметры: строка pRetVal — строка в формате XML, содержит медицинскую карту и показатели здоровья пациента. Структура XML-документа описана в Приложении 2 документа «Порядок информационного взаимодействия ПК «ЦЗ» с внешними АПК». Возвращаемое значение: S_OK — в случае успеха, иначе — код ошибки. Логика: Функция возвращает XML-документ с данными выбранной медицинской карты пациента и необходимыми показателями здоровья для проведения обследования на АПК. Метод SetResearchResult Импортирует результаты обследования из АПК в ПК «ЦЗ». Прототип на C++: HRESULT SetResearchResult(GUID serviceApkGuid, BSTR data); Прототип на C#: void SetResearchResult(Guid serviceApkGuid, string data); Входные параметры: serviceApkGuid — уникальный идентификатор обследования на АПК, согласно таблице «Таблица обследований на АПК» Приложения 1 документа «Порядок информационного взаимодействия ПК «ЦЗ» с внешними АПК». cтрока data — строка в формате XML, содержит медицинскую карту пациента, дополненную информацией о проведенном обследовании. Структура XMLдокумента описана в Приложении 2 документа «Порядок информационного взаимодействия ПК «ЦЗ» с внешними АПК». Возвращаемое значение: S_OK — в случае успеха, иначе — код ошибки. Логика: Функция осуществляет сохранение результатов обследования и отчетных форм в ПК «ЦЗ». Метод ActivateHcApp Функция активации приложения ПК «ЦЗ». Прототип на C++: HRESULT ActivateHcApp(); Прототип на C#: void ActivateHcApp(); Возвращаемое значение: S_OK — в случае успеха, иначе — код ошибки. Логика: После завершения обследования АПК должен вызвать функцию COM-объекта ПК «ЦЗ», для того чтобы сделать активным процесс приложения ПК «ЦЗ». 3.2. Методы интерфейса IApkCom В данном разделе описан интерфейс IApkCom COM-объекта ApkCOM. Каждый производитель АПК для взаимодействия с ПК «ЦЗ» должен представить COM-объект, реализующий интерфейс IApkCom. Интерфейс IApkCom предоставляет 4 метода: InitializeApk — инициализирует пользовательский интерфейс АПК; SetMedCardForApk — экспортирует выбранную в ПК «ЦЗ» медицинскую карту пациента в приложение АПК; InspectPatient — запускает обследование пациента в АПК; GetResearchResult — экспортирует результат обследования из АПК в ПК «ЦЗ». UML-схема использования COM-объекта ApkCOM, с указанием используемых методов интерфейса IApkCom, приведена на рисунке (Рисунок 4). ПК "ЦЗ" ApkCOM АПК Запрос на интерфейс IApkCOM Интерфейс IApkCOM InitializeApk InitializeApk Результат запуска АПК / код ошибки Результат запуска АПК / код ошибки SetMedCardForApk SetMedCardForApk Результат отправки данных / код ошибки Результат отправки данных / код ошибки InspectPatient InspectPatient GetResearchResult GetResearchResult Результаты обследования / код ошибки Результаты обследования / код ошибки Проведение обследования пациента Сохранение данных Рисунок 4. UML-схема использования COM-объекта ApkCOM с указанием методов интерфейса IApkCom Все методы, в случае успешного завершения, возвращают S_OK, в случае ошибки — стандартные коды ошибок COM. Используемые типы данных: целое – 32 битное целое число (long, LONG); строка – строковый тип BSTR; IDispatch – базовый интерфейс COM; HRESULT – 32 битное целое число. В описании методов используются понятия входных и выходных параметров. «Входные» – это параметры метода, в которых передаются значения для использования внутри вызываемой функции (в стандартном случае, в вызываемый метод передаётся значение параметра (иначе говоря, параметр по значению)). «Выходные» – параметры метода, в которых возвращаются значения в вызывающую функцию (в стандартном случае, в вызываемый метод передается указатель на объект, в который необходимо вернуть значение). Интерфейс IApkCom в нотации IDL [ odl, uuid(791EFE44-66A2-41F1-8BBA-F76523D1A0D6), version(1.0), dual, oleautomation, custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, HCCOM.IApkCom) ] interface IApkCom : IDispatch { [id(0x60020000)] HRESULT InitializeApk(); [id(0x60020001)] HRESULT SetMedCardForApk([in] BSTR data); [id(0x60020002)] HRESULT InspectPacient( [in] GUID serviceApkGuid, [in] GUID visitGuid); [id(0x60020003)] HRESULT GetResearchResult( [in] GUID serviceApkGuid, [in] GUID visitGuid, [out, retval] BSTR* pRetVal); }; Метод InitializeApk Инициализирует пользовательский интерфейс АПК. Прототип на C++: HRESULT InitializeApk(); Прототип на C#: bool InitializeApk(); Возвращаемое значение: S_OK — в случае успеха, иначе — код ошибки (в случае реализации на C# — признак успешной инициализации пользовательского интерфейса АПК). Логика: Перед проведением обследования ПК «ЦЗ» должен выполнить инициализацию приложения АПК. Метод SetMedCardForApk Экспортирует выбранную в ПК «ЦЗ» медицинскую карту пациента в приложение АПК. Прототип на C++: HRESULT SetMedCardForApk(BSTR data); Прототип на C#: void SetMedCardForApk(string data); Входные параметры: data — строка в формате XML, содержит медицинскую карту и показатели здоровья пациента. Структура XML-документа описана в Приложении 2 документа «Порядок информационного взаимодействия ПК «ЦЗ» с внешними АПК». Возвращаемое значение: S_OK — в случае успеха, иначе — код ошибки. Логика: Функция передает в приложение АПК XML-документ с данными медицинской карты пациента и необходимыми показателями здоровья для проведения обследования на АПК. Метод InspectPatient Запускает обследование пациента в АПК. Прототип на C++: HRESULT InspectPatient(GUID serviceApkGuid, GUID visitGuid); Прототип на C#: void InspectPatient(Guid serviceApkGuid, Guid visitGuid); Входные параметры: serviceApkGuid — уникальный идентификатор обследования на АПК. Должен соответствовать медицинской идентификатору карте в обследования, функции который SetMedCardForApk. передается в Идентификаторы обследований на АПК приведены в таблице «Таблица обследований на АПК» Приложения 1 документа «Порядок информационного взаимодействия ПК «ЦЗ» с внешними АПК»; visitGuid — уникальный идентификатор посещения пациентом Центра здоровья в ПК «ЦЗ». Должен соответствовать идентификатору посещения, который передается в медицинской карте в функции SetMedCardForApk. Возвращаемое значение: S_OK — в случае успеха, иначе — код ошибки. Логика: После передачи в АПК медицинской карты пациента, функция запускает обследование пациента, например, открывает соответствующую экранную форму в приложении АПК. Метод GetResearchResult Экспортирует результат обследования из АПК в ПК «ЦЗ». Прототип на C++: HRESULT GetResearchResult(GUID serviceApkGuid, GUID visitGuid, BSTR* pRetVal); Прототип на C#: string GetResearchResult(Guid serviceApkGuid, Guid visitGuid); Входные параметры: serviceApkGuid — уникальный идентификатор обследования на АПК. Должен соответствовать медицинской идентификатору карте в обследования, функции который SetMedCardForApk. передается в Идентификаторы обследований на АПК приведены в таблице «Таблица обследований на АПК» Приложения 1 документа «Порядок информационного взаимодействия ПК «ЦЗ» с внешними АПК»; visitGuid — уникальный идентификатор посещения пациентом Центра здоровья в ПК «ЦЗ». Должен соответствовать идентификатору посещения, который передается в медицинской карте в функции SetMedCardForApk. Выходные параметры: pRetVal — строка в формате XML, содержит медицинскую карту пациента, дополненную информацией о проведенном обследовании. Структура XMLдокумента описана в Приложении 2 документа «Порядок информационного взаимодействия ПК «ЦЗ» с внешними АПК». Возвращаемое значение: S_OK — в случае успеха, иначе — код ошибки. Логика: Функция осуществляет экспорт результатов обследования и отчетных форм в ПК «ЦЗ». 4. ОБРАЩЕНИЕ К ПРОГРАММЕ 4.1. Обращение к методам интерфейса IHcCom из управляемого кода Ниже приведены примеры использования методов интерфейса IHcCom на языке C#. 1. Для получения возможности обращаться к методам интерфейса IHcCom, необходимо в проекте сделать ссылку на библиотеку HCCOM.dll и создать экземпляр класса HcCom: HcCom hccom = new HcCom(); 2. Получение медицинской карты для проведения обследования: // Идентификатор, соответствующий обследованию // Биоимпендасный анализ на АПК Медасс Guid serviceApkGuid = new Guid(“A446EBFE-FEA6-466F-9EED- 5D37350D9101”); String medCard = hccom.GetMedCardForApk(serviceApkGuid); //TODO: выполнить разбор xml-документа медицинской карты и передать требуемые //параметры в АПК 3. Сохранение результата обследования в БД ПК «ЦЗ»: //TODO: провести обследование пациента и сформировать XML-документ с //результатами обследования string resultXml = …; //Результат _hccom.SetResearchResult(serviceApkGuid, resultXml); 4. Активация ПК «ЦЗ»: _hccom.ActivateHcApp(); 4.2. Пример использования интерфейса IHcCom из неуправляемого кода // инициализация объекта IHCCOM* pIHCCOM; HRESULT hRes = ::CoCreateInstance(__uuidof(UBC), NULL, CLSCTX_ALL, __uuidof(IHCCOM), (void**) &pIHCCOM); if ((S_OK != hRes) || (pIHCCOM==NULL)) { return false; } // работа с объектом if (pIHCCOM != NULL) { // Идентификатор, соответствующий обследованию GUID serviceApkGuid = … //получение медицинской карты BSTR* pMedCard; pIHCCOM-> GetMedCardForApk (serviceApkGuid, &pMedCard); //TODO: выполнить разбор xml-документа медицинской карты и передать требуемые //параметры в АПК DoJob(); //TODO: провести обследование пациента и сформировать XML-документ с //результатами обследования BSTR resultXml = … // cохранение результата обследования в БД ПК «ЦЗ» pIHCCOM-> SetResearchResult(serviceApkGuid, resultXml); //активация ПК «ЦЗ» pIHCCOM-> ActivateHcApp(); } 4.3. Пример реализации интерфейса IApkCom на языке C# using System; using System.Runtime.InteropServices; namespace HCCOM { [ClassInterface(ClassInterfaceType.None)] //для каждого объекта новый GUID [Guid("11A0D2FB-A16E-4C09-97B3-BEF2E84B2715")] public class ApkCom: IApkCom { public ApkCom() { //для COM необходим конструктор без параметров } public bool InitializeApk() { //TODO: Инициализация пользовательского интерфейса АПК // вернуть признак успешной инициализации } public void SetMedCardForApk(string data) { //TODO: выполнить разбор xml-документа медицинской карты и //передать требуемые параметры в АПК } public void InspectPacient(Guid serviceApkGuid, Guid visitGuid) { //TODO: произвести обследование пациента } public string GetResearchResult(Guid visitGuid) { //TODO: сформировать xml-документ // вернуть результат обследования } } } serviceApkGuid, Guid 4.4. Обращение к методам интерфейса IApkCom из управляемого кода Ниже приведены примеры использования методов интерфейса IApkCom на языке C#. 1. Для получения возможности обращаться к методам интерфейса IApkCom, необходимо в проекте сделать ссылку на данную библиотеку и создать экземпляр класса ApkCom: ApkCom _apkcom = new ApkCom(); 2. Передача данных о пациенте во внешний АПК //TODO: получить идентификатор посещения Guid visitGuid = …; // Идентификатор, соответствующий обследованию // Биоимпендасный анализ на АПК Медасс Guid serviceApkGuid = new Guid(“A446EBFE-FEA6-466F-9EED- 5D37350D9101”); //TODO: сформировать требуемые xml-документ медицинской карты и передать //параметры в АПК string medCardXml = …; _apkcom.SetMedCardForApk(medCardXml); 3. Инициализация пользовательского интерфейса АПК _apkcom.InitializeApk(); 4. Проведение обследования на АПК _apkcom.InspectPacient(serviceApkGuid, visitGuid); 5. Получение результата обследования string resultXml visitGuid); = _apkcom.GetResearchResult(serviceApkGuid, //TODO: реализовать //обследования разбор xml-документа и сохранение результата 5. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ XML-документы экспорта и импорта данных имеют единую структуру для всех типов информационного взаимодействия. XSD-схема XML-документов, используемых для взаимодействия, описана в приложении « Приложение 2. Описание структуры XML-ДОКУМЕНТА». Перед вызовом АПК ПК «ЦЗ» формирует XML-документ для передачи его в АПК одним из трёх описанных способов. XML-документ содержит следующую информацию: медицинская карта центра здоровья, содержащая персональные данные пациента; показатели здоровья пациента, имеющиеся в базе данных ПК «ЦЗ» (данные являются входными параметрами для АПК); обследование, результаты которого требуется получить от АПК; показатели обследования, значения, которых необходимы для учета в ПК «ЦЗ» (значения являются выходными параметрами для АПК). ПК «ЦЗ» перечисляет в XML-документе все показатели обследования, необходимые для учета. После завершения обследования АПК должен сформировать новый XML-документ на основе полученного от ПК «ЦЗ», дополнив его следующей информацией о проведенном обследовании: результат обследования (заключение) значения измеренных и рассчитанных показателей; нижняя и верхняя границы нормы показателя; относительное значение нормы показателя; отчетные формы и результаты обследования в графическом представлении. АПК должен записать полученные в результате обследования значения и результат в специальные разделы XML-документа. Для взаимодействия с ПК «ЦЗ» производителям АПК необходимо согласовать с ООО «СофТраст» используемые идентификаторы документов: идентификаторы единиц измерения, являются общими для всех АПК (приведены в таблице «Таблица показателей»); идентификаторы показателей здоровья, являются общими для всех АПК (приведены в таблице «Таблица показателей»); идентификаторы программного обследований комплекса; являются для каждого уникальными для аппаратнокаждого обследования, проводимого на АПК (приведены в таблице «Таблица обследований на АПК»); идентификаторы показателей обследования, необходимых для учета, являются уникальными для каждого обследования, проводимого на АПК (приведены в таблице «Таблица показателей обследования»). Перечень всех согласованных с производителями АПК идентификаторов находится в приложении « Приложение 1. Таблицы ИДЕНТИФИКАТОРОВ». ПРИЛОЖЕНИЕ 1. ТАБЛИЦЫ ИДЕНТИФИКАТОРОВ Таблица показателей: HealthIndexGUID (Идентификатор показателя 947AFFDE-CBCC413B-A7A17F56812D3254 179980C8-F40C4A65-BBD6D5FDD9203463 691E087C-71B64149-B32D407312D4322B 9599243E-D62047D9-9F9624725A3CAA0E HealthIndex Name (Наименова ние показателя Рост Вес Окружность бедер Окружность талии HCServiceUnitGUID (Идентификатор единицы измерения) HCServiceUnit Name (Единица измерения) HealthIndexDataT ypeGUID (Идентификатор типа значения) HealthIndexDataT ypeName (Тип значения) F47BCB15-CB2F40DC-9643B7AC76681317 315E98AF-C95344C0-B6FFE16A145873AC F47BCB15-CB2F40DC-9643B7AC76681317 F47BCB15-CB2F40DC-9643B7AC76681317 Сантиметр AC953134-0AA04527-A3279D5477AE1D58 AC953134-0AA04527-A3279D5477AE1D58 AC953134-0AA04527-A3279D5477AE1D58 AC953134-0AA04527-A3279D5477AE1D58 Числовое значение Килограмм Сантиметр Сантиметр Таблица обследований на АПК Наименование Наименование АПК обследования (HCEquipmentName) (HCServiceName) Биоимпедансный анализ АВС-01 Медасс состава тела Числовое значение Числовое значение Числовое значение Идентификатор обследования на АПК (HCServiceApkGUID) A446EBFE-FEA6-466F-9EED5D37350D9101 Таблица показателей обследования «Биоимпендансный анализ состава тела» для АПК АВС-01 Медасс: Наименование показателя обследования (HCServiceApkIndexName) Активное сопротивление на 50 кГц Активное сопротивление на 5 кГц Реактивное сопротивление на 50 кГц Жировая масса, нормированная по росту Тощая масса Активная клеточная масса Скелетно-мышечная масса Общая жидкость Соотношение талия/бедра Классификация по проценту жировой массы Индекс массы тела Доля активной клеточной массы Идентификатор показателя обследования (HCServiceApkIndexGUID) B72F31FD-AC5E-4501A3B1-2CA97B5BC779 3313A4A0-BEFA-454E91E1-2145FB4D81D5 1B8912A6-BA23-4A87A04F-56C621373374 AAD84561-BD04-484CA67A-66D3716A35F0 DC7A1E67-8BC5-4C30A2AA-CCE7E720801A EC1803F2-DA48-40458728-D447DB7FDB70 A60D9654-BAF6-43509993-E7BF027C2468 EC443F0B-E886-45DB9EE1-E97AC3E9DF95 D615F84E-F3BD-4A8C980F-945EFBA9CF18 70F89EA4-C619-40EB8310-485A7A626E71 6F61BE06-03CA-48EA90C5-AAB86B7BB9DB 942202F5-AD90-48BFB290-45D23B4F0B5F Единица измерения (ServiceUnitName) Ом Ом Ом килограмм килограмм килограмм килограмм килограмм килограмм на квадратный метр % Идентификатор единицы измерения (ServiceUnitGUID) 933C844A-9FFF-43DDB928-7921662969AB 933C844A-9FFF-43DDB928-7921662969AB 933C844A-9FFF-43DDB928-7921662969AB 315E98AF-C953-44C0B6FF-E16A145873AC 315E98AF-C953-44C0B6FF-E16A145873AC 315E98AF-C953-44C0B6FF-E16A145873AC 315E98AF-C953-44C0B6FF-E16A145873AC 315E98AF-C953-44C0B6FF-E16A145873AC 00000000-0000-00000000-000000000000 00000000-0000-00000000-000000000000 7561786A-3FC5-44B8998E-F39FB47BE890 7FFCFF0D-84B6-45C7A695-0791A297CD10 Доля скелетно-мышечной массы Удельный основной обмен Фазовый угол биоимпеданса Внеклеточная жидкость 746FA6B3-3ED7-4FFE99CB-B7D1D3666326 ACC09F4F-D953-4265924E-C442346878C5 AF00567E-52B4-4415B73A-F54CD8CED43F A0BE5BB9-8B9D-4BC98134-DC8CF75244F7 % ккал/кв.м сут. градус килограмм 7FFCFF0D-84B6-45C7A695-0791A297CD10 7DD63625-B0B6-42489DFF-890A209E156C 5F439184-7CB4-4B3B9082-0AEF62C4F98F 315E98AF-C953-44C0B6FF-E16A145873AC ПРИЛОЖЕНИЕ 2. ОПИСАНИЕ СТРУКТУРЫ XMLДОКУМЕНТА Тег: MAIN Уровень вложенности тега: 1 (корневой) Тип значения: <составной тип, имеет вложенные теги> Атрибуты для MAIN: Имя атрибута: chsm Тип значения: xs:string Описание: Контрольная сумма содержимого тэга MAIN Содержимое тега MAIN: Тег: FORMAT_GUID Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Фиксированное значение тега: C5E44A54-CC8E-4873-BF00-C3D18E8061B7 Описание: GUID формата файлов. Всегда должен иметь значение C5E44A54-CC8E-4873-BF00- C3D18E8061B7 Тег: PROTOCOL Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Мнемоника протокола, к которому принадлежит данный файл, должна иметь значение Visit. Тег: CREATE_TIME Тип значения: xs:dateTime Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Время создания экземпляра файла (например 2010-02-12T16:41:38) Тег: TITLE Тип значения: xs:string Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Наименование документа. Тег: DATAMAIN Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Раздел данных Содержимое тега DATAMAIN: Тег: DOCUMENTS Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Раздел данных. Содержимое тега DOCUMENTS: Тег: DOC_HealthCentreCard Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Медицинские карты Центра здоровья. Содержимое тега DOC_HealthCentreCard: Тег: HealthCentreCard Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (уникальный) Описание: Медицинская карта Центра здоровья. Содержимое тега HealthCentreCard: Тег Surname Name Patronymic ADDRESS N_POL S_POL SocStatus_Code SocStatus_Name Citizen_Code Citizen_Name DDENT Post UGUID EducationType SMO_Code SMO_Name DateOfBirth LPU StatusPPatient_Code StatusPPatient_Name Fam_P IM_P OT_P OKATO Описание Фамилия Имя Отчество Адрес Номер полиса ОМС Серия полиса ОМС Код соц. статуса Наименование соц.статуса Код территории проживания Наименование территории проживания Страхователь Тип значения/пример Строка Строка Строка Строка Строка Строка Идентификатор мед.карты в ЦЗ Строка формата GUID, Пример: 9C6641E9-7B09-4486-879387CB5C9FB08C Тип образования Код страховой медицинской организации Наименование страховой медицинской организации Дата рождения ЛПУ Код ОКАТО Дата в формате YYYY-MM-DDTHH:MM:SS Пример: 2010-01-27T00:00:00 SS Sex СНИЛС Пол SN_DOC Серия Номер документа, удостоверяющего личность Домашний телефон Рабочий телефон Дата начала действия полиса Phone_HOME Phone_WORK DatePolBegin DatePolEnd Дата завершения действия полиса TYPEDOC Тип документа, удостоверяющего личность Код ОКВЕД Дата выдачи полиса ОМС OKVED DatePolis StatusPolis KATL_code KATL_name Код в соответствии с таблицей: Код / Значение: 1 Мужской 2 Женский 3 Неопределенный Строка, пример: 1213 432342 Дата в формате YYYY-MM-DDTHH:MM:SS Пример: 2010-01-27T00:00:00 Дата в формате YYYY-MM-DDTHH:MM:SS Пример: 2010-01-27T00:00:00 Строка, пример: Паспорт гражданина РФ Дата в формате YYYY-MM-DDTHH:MM:SS Пример: 2010-01-27T00:00:00 Статус действия полиса ОМС Код категории льгот Наименование категории льгот INV_CODE INV_NAME Тег: DOC_HCVisit Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (обязательный) Описание: Посещения Центра здоровья. Содержимое тега DOC_HCVisit: Тег: HCVisit Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): неограниченно Описание: Посещение Центра здоровья. Содержимое тега HCVisit: Тег Описание Тип значения/пример HealthCentreCardGUID Идентификатор медицинской карты в ЦЗ HCVisitTypeGUID Тип посещения ЦЗ VisitDate Дата посещения пациентом ЦЗ UGUID Идентификатор посещения в ЦЗ Строка формата GUID Пример: 9C6641E9-7B09-4486-879387CB5C9FB08C Строка формата GUID Пример: 00000000-0000-0000-0000000000000000 Дата в формате YYYY-MM-DDTHH:MM:SS Пример: 2010-02-12T00:00:00 Строка формата GUID Пример: 10EF918A-0B9C-423D-941684F734D56AFD Тег: DOC_HealthStateIndices Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (обязательный) Описание: Показатели здоровья пациента Данные показатели получены после проведения обследований в ЦЗ и являются входными для аппаратно-программных комплексов сторонних производителей. Содержимое тега DOC_HealthStateIndices: Тег: HealthStateIndices Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): неограниченно Описание: Показатель здоровья пациента Содержимое тега HealthStateIndices: Тег HealthIndexGUID Описание Идентификатор показателя здоровья HealthIndexName Наименование показателя здоровья HealthIndexValue Значение показателя Тип значения/пример Строка формата GUID, соответствует столбцу «Идентификатор показателя» в таблице «Таблица показателей». Пример: 947AFFDE-CBCC-413B-A7A17F56812D3254 Строка, соответствует столбцу «Наименование показателя» в таблице «Таблица показателей». Пример: Рост Строка, значение в указанных единицах измерения (тег HCServiceUnitName). Пример: HealthIndexDataTypeGUID Тип данных показателя 186 Строка формата GUID, соответствует столбцу «Идентификатор типа значения» в таблице «Таблица показателей». Пример: AC953134-0AA0-4527-A3279D5477AE1D58 HCServiceUnitGUID Единица измерения HCServiceUnitName Наименование единицы измерения HCVisitGUID Идентификатор посещения Строка формата GUID, соответствует столбцу «Идентификатор единицы измерения» в таблице «Таблица показателей». Пример: F47BCB15-CB2F-40DC-9643B7AC76681317 Строка, соответствует столбцу «Единица измерения» в таблице «Таблица показателей». Пример: см Строка формата GUID Пример: 10EF918A-0B9C-423D-941684F734D56AFD Тег: DOC_HCResearch Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (обязательный) Описание: Обследования пациента Содержимое тега DOC_HCResearch: Тег: HCResearch Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): неограниченно Описание: Обследование пациента. Содержимое тега HCResearch: Тег HCServiceAPKGUID Описание Тип значения/пример Идентификатор Строка формата GUID, обследования на АПК соответствует столбцу Идентификатор обследования на АПК (HCServiceApkGUID) таблицы «Таблицы обследований на АПК» Пример: HCServiceName Наименование обследования HCEquipmentName Наименование АПК HCResearchResult Результат обследования HCVisitGUID Идентификатор посещения A446EBFE-FEA6-466F-9EED5D37350D9101 Строка, соответствует столбцу Наименование обследования (HCServiceName) таблицы «Таблицы обследований на АПК» Пример: Биоимпедансный анализ состава тела Строка, соответствует столбцу Наименование АПК (HCEquipmentName) таблицы «Таблицы обследований на АПК» Пример: АВС-01 Медасс Строка, выходной параметр, заполняется АПК после проведения обследования Строка формата GUID Пример: 10EF918A-0B9C-423D-941684F734D56AFD Тег: HCResearchIndexData_DOC Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (обязательный) Описание: Результаты проведенного обследования. Содержимое тега HCResearchIndexData_DOC: Тег: HCResearchIndexData Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): неограниченно Описание: Показатель обследования пациента. Содержимое тега HCResearchIndexData: Тег HCResearchGUID Описание Идентификатор обследования на АПК HCServiceApkIndexGUID Идентификатор показателя обследования Тип значения/пример Строка формата GUID Пример: 147BC7AE-B9A2-45CA-902B648DE65FBD09 Строка формата GUID, соответствует столбцу «Идентификатор показателя обследования» в таблице «Таблица показателей обследования». Пример: 6F61BE06-03CA-48EA-90C5AAB86B7BB9DB HCServiceApkIndexName Наименование показателя обследования на АПК ServiceUnitGuid Идентификатор единицы измерения Строка, соответствует столбцу «Наименование показателя обследования» в таблице «Таблица показателей обследования». Пример: Индекс массы тела Строка формата GUID, соответствует столбцу «Идентификатор единицы измерения» в таблице «Таблица показателей обследования». Пример: 7561786A-3FC5-44B8-998EF39FB47BE890 ServiceUnitName Наименование единицы измерения Строка соответствует столбцу «Наименование единицы измерения» в таблице «Таблица показателей обследования». Пример: килограмм на квадратный метр Value Значение показателя RelativeValue Относительное значение показателя MinNormValue Минимальное значение нормы показателя Максимальное значение нормы показателя MaxNormValue Выходной параметр, заполняется АПК после проведения обследования Выходной параметр, заполняется АПК после проведения обследования Выходной параметр, заполняется АПК после проведения обследования Выходной параметр, заполняется АПК после проведения обследования Тег: HCResearchReports_DOC Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): 1 (обязательный) Описание: Отчетные формы, полученные после проведения обследования. Содержимое тега HCResearchReports_DOC: Тег: HCResearchReport Тип значения: <составной тип, имеет вложенные теги> Тег должен быть указан минимум (раз): 1 (обязательный) Тег должен быть указан максимум (раз): неограниченно Описание: Путь к файлу сформированного отчета. Выходной параметр, заполняется АПК. Пример: D:\report1.jpg XSD-схема XML-документа. <xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemasmicrosoft-com:mapping-schema"> <xs:annotation> <xs:appinfo> <sql:relationship name="HCReaserch_HCServiceAPKIndex" parent="tmp_HCResearch" parent-key="UGUID" child="tmp_HCServiceAPKIndex" child-key="HCResearchGUID" /> <sql:relationship name="HCReaserch_HCResearchReport" parent="tmp_HCResearch" parent-key="HCServiceName" child="tmp_HCResearchReport" child-key="HCResearchReport" /> </xs:appinfo> </xs:annotation> <xs:element name="DOCUMENTS" sql:is-constant="1"> <xs:complexType> <xs:sequence> <xs:element name="DOC_HealthCentreCard" sql:is-constant="1"> <xs:complexType> <xs:sequence> <xs:element name="HealthCentreCard" sql:relation="tmp_HealthCentreCard"> <xs:complexType> <xs:sequence> <xs:element name="Surname" type="xs:string"> </xs:element> <xs:element name="Name" type="xs:string"> </xs:element> <xs:element name="Patronymic" type="xs:string"> </xs:element> <xs:element name="ADDRESS" type="xs:string"> </xs:element> <xs:element name="N_POL" type="xs:string"> </xs:element> <xs:element name="S_POL" type="xs:string"> </xs:element> <xs:element name="SocStatus_Code" type="xs:string"> </xs:element> <xs:element name="SocStatus_Name" type="xs:string"> </xs:element> <xs:element name="Citizen_Code" type="xs:string"> </xs:element> <xs:element name="Citizen_Name" type="xs:string"> </xs:element> <xs:element name="DDENT" type="xs:string"> </xs:element> <xs:element name="Post" type="xs:string"> </xs:element> <xs:element name="UGUID" type="xs:string"> </xs:element> <xs:element name="EducationType" type="xs:string"> </xs:element> <xs:element name="SMO_Code" type="xs:string"> </xs:element> <xs:element name="SMO_Name" type="xs:string"> </xs:element> <xs:element name="DateOfBirth" type="xs:dateTime"> </xs:element> <xs:element name="LPU" type="xs:string"> </xs:element> <xs:element name="StatusPPatient_Code" type="xs:string"> </xs:element> <xs:element name="StatusPPatient_Name" type="xs:string"> </xs:element> <xs:element name="Fam_P" type="xs:string"> </xs:element> <xs:element name="IM_P" type="xs:string"> </xs:element> <xs:element name="OT_P" type="xs:string"> </xs:element> <xs:element name="OKATO" type="xs:string"> </xs:element> <xs:element name="SS" type="xs:string"> </xs:element> <xs:element name="Sex" type="xs:string"> </xs:element> <xs:element name="SN_DOC" type="xs:string"> </xs:element> <xs:element name="Phone_HOME" type="xs:string"> </xs:element> <xs:element name="Phone_WORK" type="xs:string"> </xs:element> <xs:element name="DatePolBegin" type="xs:dateTime"> </xs:element> <xs:element name="DatePolEnd" type="xs:dateTime"> </xs:element> <xs:element name="TYPEDOC" type="xs:string"> </xs:element> <xs:element name="OKVED" type="xs:string"> </xs:element> <xs:element name="DatePolis" type="xs:dateTime"> </xs:element> <xs:element name="StatusPolis" type="xs:integer"> </xs:element> <xs:element name="KATL_code" type="xs:string"> </xs:element> <xs:element name="KATL_name" type="xs:string"> </xs:element> <xs:element name="INV_CODE" type="xs:string"> </xs:element> <xs:element name="INV_NAME" type="xs:string"> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="DOC_HCVisit" sql:is-constant="1"> <xs:complexType> <xs:sequence> <xs:element name="HCVisit" maxOccurs="unbounded" minOccurs="1" sql:relation="tmp_HCVisit"> <xs:complexType> <xs:sequence> <xs:element name="HealthCentreCardGUID" type="xs:string" /> <xs:element name="HCVisitTypeGUID" type="xs:string" /> <xs:element name="VisitDate" type="xs:string" /> <xs:element name="UGUID" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="DOC_HealthStateIndices" sql:is-constant="1"> <xs:complexType> <xs:sequence> <xs:element name="HealthStateIndices" maxOccurs="unbounded" minOccurs="0" sql:relation="tmp_HealthStateIndices"> <xs:complexType> <xs:sequence> <xs:element name="HealthIndexGUID" type="xs:string" /> <xs:element name="HealthIndexName" type="xs:string" /> <xs:element name="HealthIndexValue" type="xs:string" /> <xs:element name="HealthIndexDataTypeGUID" type="xs:string" /> <xs:element name="HCServiceUnitGUID" type="xs:string" /> <xs:element name="HCServiceUnitName" type="xs:string"/> <xs:element name="HCVisitGUID" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="DOC_HCResearch" sql:is-constant="1"> <xs:complexType> <xs:sequence> <xs:element name="HCResearch" maxOccurs="unbounded" minOccurs="1" sql:relation="tmp_HCResearch"> <xs:complexType> <xs:sequence> <xs:element name="HCServiceAPKGUID" type="xs:string" /> <xs:element name="UGUID" type="xs:string" /> <xs:element name="HCServiceName" type="xs:string" /> <xs:element name="HCEquipmentName" type="xs:string" /> <xs:element name="HCResearchResult" type="xs:string" /> <xs:element name="HCVisitGUID" type="xs:string" /> <xs:element name="HCResearchIndexData_DOC" sql:is-constant="1"> <xs:complexType> <xs:sequence> <xs:element name="HCResearchIndexData" maxOccurs="unbounded" sql:relation="tmp_HCServiceAPKIndex" sql:relationship="HCReaserch_HCServiceAPKIndex"> <xs:complexType> <xs:sequence> <xs:element name="HCResearchGUID" type="xs:string" /> <xs:element name="HCServiceApkIndexGUID" type="xs:string"/> <xs:element name="HCServiceApkIndexName" type="xs:string"/> <xs:element name="HCServiceUnitGUID" type="xs:string"/> <xs:element name="HCServiceUnitName" type="xs:string"/> <xs:element name="Value" type="xs:string" /> <xs:element name="RelativeValue" type="xs:string"/> <xs:element name="MinNormValue" type="xs:string"/> <xs:element name="MaxNormValue" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="HCResearchReports_DOC" sql:is-constant="1"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" name="HCResearchReport" type="xs:string" sql:relation="tmp_HCResearchReport" sql:relationship="HCReaserch_HCResearchReport"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="DOC_HCAnamnesisData" maxOccurs="1" minOccurs="0" sql:is-constant="1"> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>