В этой статье я поделюсь нашим опытом внедрения в медицинской информационной системе документа «Сведения о результатах диспансеризации или профилактического медицинского осмотра» (форма 141/у) в формате CDA. Материал будет полезен коллегам, которые отвечают за передачу данных по диспансеризации и профилактическим осмотрам в РЭМД, а также за настройку групп здоровья, статусов диспансерного наблюдения и витальных параметров.
1. Зачем нужен этот CDA и чем он отличается от других
Документ с кодом 141 по классификатору «Виды медицинской документации» предназначен для фиксации итогов диспансеризации или профилактического медицинского осмотра. Он формируется на основе заключения ответственного врача после завершения всех этапов осмотра. В отличие от протокола консультации или санаторно-курортной карты, здесь ключевыми являются не жалобы и анамнез, а группа здоровья, статус диспансерного наблюдения и витальные параметры (рост, вес, ИМТ, давление, пульс, уровень холестерина и глюкозы). Шаблон CDA имеет OID 1.2.643.5.1.13.13.14.141.9.1 (Редакция 1).
Мы настроили этот документ в нашей МИС и столкнулись с рядом нюансов, о которых расскажу по порядку.
2. Настройка типа действия: два режима работы
Главная особенность – документ может использоваться как для диспансеризации, так и для профилактического осмотра. В зависимости от этого немного отличаются требования.
Для обоих вариантов мы создали тип действия с Кодом для отчётов = OtherDocuments (хотя в руководстве упоминается InfResDisp, но в нашей системе сработало и так). Вид услуги выставили в Первичный осмотр/Повторный осмотр – это важно для правильной классификации.
На вкладке Идентификация мы добавили две записи:
- по справочнику
1.2.643.2.69.1.1.1.195.Cdaс идентификатором 100 (для XML), - по справочнику
195.Pdfс идентификатором 54 (для PDF, а для профилактического осмотра несовершеннолетних – 51).
Но самое интересное – для диспансеризации мы дополнительно указали в типе действия Код ЕГИСЗ = 10 и сделали отдельный плоский код InfResDisp. Без этого РЭМД не принимал документы по диспансеризации. Для профилактических осмотров такие коды не нужны.
Также мы настроили счётчик CDA_ID для свойства «Идентификатор документа» – стандартная практика.
3. Какие свойства мы добавили в тип действия
В отличие от многих других CDA, здесь нет обязательных полей типа «жалобы» или «анамнез». Все витальные параметры – опциональные. Мы добавили следующие свойства (каждому указали параметр «Секция CDA»):
| Название свойства | Код секции | Тип | Примечание |
|---|---|---|---|
| Рост | HEIGHT | Integer | см |
| Масса тела | WEIGHT | Integer | кг |
| Индекс массы тела | IMT | Double | кг/м² |
| Пульс | PULSE | Integer | 1/мин |
| Артериальное давление систолическое | PRESSURES | Integer | мм.рт.ст. |
| Артериальное давление диастолическое | PRESSURED | Integer | мм.рт.ст. |
| Уровень общего холестерина в крови | UOH | Double | ммоль/л |
| Уровень глюкозы в крови натощак | UGK | Double | ммоль/л |
Все они необязательные (penalty=0), но мы рекомендуем врачам заполнять хотя бы основные (рост, вес, давление), иначе документ будет слишком «пустым».
4. Источник оплаты и прочие обязательные настройки
Как и в других CDA, мы настроили блок participant typeCode="IND" с выбором источника оплаты (ОМС, ДМС, средства пациента, бюджет МО). Для ОМС – обязательная проверка наличия полиса и страховой компании.
Также проверили, что у нашей организации настроена идентификация по справочнику MDR308 (OID 1.2.643.5.1.13.2.1.1.178). У типа действия добавили идентификацию по справочнику n3.medDocumentType.Cda. У исполнителя (врача, заполнившего заключение) должность должна быть идентифицирована по справочнику 1.2.643.5.1.13.13.11.1002.
5. Региональный идентификатор пациента (MPI)
Мы используем стандартный вызов сервиса extendedmse:
{: from library.Utils import forceString}
{: clientGlobalIdNetrika = readUrl("http://"+forceString(dbServerName)+"/extendedmse/api?fromtemplate=1&clientid="+forceString(client.id), timeout=50)}
Для Санкт-Петербурга (код КЛАДР 78) у нас отдельное правило, но в основном шаблоне для этого CDA мы используем общую логику: extension="{if: defaultKLADR[:2]=='78'}{currentOrganisation.identification.byCode[u'MDR308'][26:]}.17.1.{client.id}{else:}{clientGlobalIdNetrika}{end:}".
Не забудьте проверить, что в глобальных настройках есть ExtendedMseUrl и в конфигурации ИЭМК прописаны gDefaultMpiUrl и gMpiToken.
6. Важные проверки в шаблоне печати
Мы добавили в HTML-шаблон несколько критических проверок, без которых документ может быть отклонён РЭМД.
Проверка наличия даты выдачи документа, удостоверяющего личность – если дата не заполнена, показываем предупреждение и предлагаем прервать формирование (но можно продолжить на свой страх и риск).
Проверка наличия СНИЛС – аналогично, без СНИЛС документ не примут.
Проверка полиса старого образца – если у пациента полис ОМС старого образца (тип 1), мы выводим диалог с напоминанием, что нужно указать дату окончания действия полиса. Это не формальное требование валидации, но без этой даты РЭМД может отклонить документ. Мы сделали неблокирующее предупреждение.
Также мы проверяем, что документ имеет состояние «Закончено» (action.status != 2), и что в случае обслуживания указан хотя бы один диагноз.
7. Особенности для диспансеризации и профилактического осмотра
Здесь важный момент, который мы выяснили опытным путём.
Диспансеризация – данные передаются только после закрытия случая. То есть событие (case) должно быть переведено в статус «Закрыто». Кроме того, на вкладке «Стандарт» (МЭС) обязательно должен быть выбран элемент из группы с кодом ДиспанС. Без этого РЭМД не идентифицирует случай как диспансеризацию. В типе действия для диспансеризации мы дополнительно указали Код ЕГИСЗ = 10 и плоский код InfResDisp.
Профилактический осмотр – данные могут передаваться и из открытых случаев. Это позволяет формировать документ сразу после завершения осмотра, не дожидаясь закрытия всего случая. Для профилактических осмотров не требуется специального МЭС и кода ЕГИСЗ.
В XML-шаблоне мы используем один и тот же код, но в зависимости от типа события система сама определяет, какие поля заполнять (например, для диспансеризации мы проверяем наличие МЭС с кодом ДиспанС).
8. Группа здоровья и статус диспансерного наблюдения
Эти данные мы берём из статистического талона (вкладка «Стат.учет»). В настройках события мы добавили поля:
- Группа здоровья – значения I, II, III, IIIа, IIIб, IV, V.
- Диспансерное наблюдение – «состоит», «взят», «снят».
В XML-секции MEDEXAMINFO мы маппим эти значения в коды федеральных справочников.
Для группы здоровья используем справочник 1.2.643.5.1.13.13.99.2.766 «Группы здоровья». Маппинг:
- I группа → код
1 - II группа → код
2 - IIIа группа → код
3 - IIIб группа → код
4 - III группа (без буквы) → код
5 - IV группа → код
6 - V группа → код
7
Если группа здоровья не указана, по умолчанию ставим I группу (код 1).
Для статуса диспансерного наблюдения используем справочник 1.2.643.5.1.13.13.11.1047:
- «Состоит» → код
1 - «Взят» → код
2 - «Снят» → код
3
Если статус не указан, мы не передаём этот элемент (ставим nullFlavor="NI").
Важно: статус диспансерного наблюдения мы привязываем к основному диагнозу (тип 1 или 2). Если в событии несколько основных диагнозов, берём первый.
9. Витальные параметры – секция VITALPARAM
В секцию VITALPARAM мы выводим заполненные свойства: рост, вес, индекс массы тела, пульс, давление, холестерин, глюкозу. Для каждого параметра в XML мы создаём элемент <entry> с кодированием по справочнику витальных параметров (1.2.643.5.1.13.13.99.2.262).
Особое внимание – референтные интервалы. Мы добавили их для ИМТ (норма < 25 кг/м²), пульса (< 90 1/мин), давления (систолическое < 140, диастолическое < 90 мм.рт.ст.), холестерина (< 5,0 ммоль/л), глюкозы (< 6,1 ммоль/л). Это не строгое требование, но мы посчитали полезным для врачей, чтобы они видели отклонения.
Для роста и массы тела референтные интервалы не указываем – они индивидуальны.
В человекочитаемой части (<text>) мы выводим значения в виде таблицы с указанием норм и даты измерения. Если параметр не заполнен, строка не выводится.
10. Диагнозы – секция DGN
Диагнозы мы берём из статистического талона: основной (тип 1 или 2) и сопутствующие (тип 9). В XML для каждого диагноза создаём элемент <entry> с видом нозологической единицы (1 – основное, 3 – сопутствующее). Обязательно передаём текстовое описание и код МКБ-10 (справочник 1.2.643.5.1.13.13.11.1005).
В коде мы также проверяем наличие специфических кодов МКБ для факторов риска (R03.0, E78, Е66) – это нужно для некоторых региональных отчётов, но не является обязательным для валидации РЭМД.
11. Что может пойти не так: наши грабли
- Отсутствие МЭС для диспансеризации – документ не принимался. Мы добавили в тип действия проверку: если это диспансеризация, то обязательно должен быть выбран МЭС из группы «ДиспанС».
- Неправильный код группы здоровья – маппинг IIIа и IIIб в коды 3 и 4, а III без буквы – в 5. Сначала мы перепутали, и РЭМД ругался.
- Дата выдачи документа – часто забывают заполнить в карточке пациента. Мы сделали предупреждение, но не блокируем – иногда документ нужно сформировать срочно, а паспортные данные ещё не внесены.
- Полис старого образца – врачи не указывали дату окончания. Наше предупреждение помогло снизить количество ошибок.
- Закрытый случай для диспансеризации – несколько раз пытались выгрузить документ из незакрытого случая. Пришлось добавить проверку статуса случая в шаблон.
Настройка CDA «Сведения о результатах диспансеризации или профилактического медицинского осмотра» оказалась не самой сложной, но потребовала внимания к двум режимам работы (диспансеризация vs профосмотр), правильному маппингу групп здоровья и статусов наблюдения, а также добавлению референтных интервалов для витальных параметров. Особенно важно не забыть про МЭС и закрытый случай для диспансеризации – это частая ошибка. Надеюсь, наш опыт поможет вам быстрее и безболезненнее внедрить этот документ.


