![]() |
(812) 701-02-12
|
*
Общие принципы
Шаблон - это текст, состоящий из двух "компонент" - обычного html-я, и специальных вставок в {}. Кодировка текста может быть utf-8 или cp1251; если во вставках нужны строки, то независимо от кодировки нужно использовать префикс unicode - типа u'привет'. Вставки "равнодушны" к синтаксису окружающего html. В процессе обработки шаблона html превращается в операторы печати, вставки - в соотв. фрагменты программы на python. В случае успеха компиляции полученная программа выполняется - а результат выводится в окно просмотра.
Вставки имеют следующий синтаксис:
<ключевое слово> ::= 'if' | 'elif' | 'else' | 'for' | 'end' | ' ' ;
Поскольку в python используются отступы, а в шаблоне печати отступы не так удобны как в программе, мы добавили ключевое слово end, ключевые слова if, elif и else, for увеличивает отступ, а end уменьшает. Пустое ключевое слово { : setPageSize('A4') } приводит к генерации соотв. выражения как оператора. Вторая форма (без ключевого слова) приводит к генерации оператора печати значения выражения. Образцы применения будут дальше по тексту. <выражение> - выражение на python, его необходимость и смысл определяется ключевым словом. <формат> := 'h'|'n'| ' '; - применяется для "пост-обработки" полученного в процессе вычисления выражения значения. Если двоеточие пропущено, то формат считается пустым. • 'h': считается, что выражение содержит фрагмент не требующий обработки • ' ': производится замена символов типа '<' на '<' • 'n': в дополнение к предыдущему добавляется замена \n на
так
----
{'[1]\n[2]\n[3]\n[<]\n[bold]':h}
----
{'[1]\n[2]\n[3]\n[<]\n[bold]'}
----
{'[1]\n[2]\n[3]\n[<]\n[bold]':n}
{{begDate} - значение параметра "Дата начала" (или "На дату" для вкладки Состоят), CDateInfo {endDate} - значение параметра "Дата окончания", CDateInfo {orgStructureId} - значение параметра "Подразделение врача", COrgStructureInfo {specialityType} - значение параметра "Специальность", определение типа отбора, 0 - "Отбор по ИЛИ", 1 - "Отбор по И" {for: spec in specialityId}{spec.code} {spec.name} {end:} - значение параметра "Специальность", CSpecialityInfo {personId} - значение параметра "Врач", CPersonInfo {MKBFilter} - значение параметра "Коды диагнозов по МКБ", определение типа фильтра, 0 - "Игнор.", 1 - "Интервал", {MKBFrom} - значение параметра "Коды диагнозов по МКБ", определение первого значения диапазона, CMKBInfo {MKBTo} - значение параметра "Коды диагнозов по МКБ", определение последнего значения диапазона, CMKBInfo}}
превратится в
________________________________________
________________________________________
________________________________________
________________________________________
Параметры печати
{:documentName = (action.endDate.toString('dd.MM.yyyy') +u' '+ action.title) setDocumentName(documentName)}
Подписанный и прикрепленный документ будет иметь имя вида - "01.01.2022 Осмотр врача.pdf".
________________________________________
Поиск по тексту шаблона
Реализована возможность поиска текста в выведенном шаблоне печати. ПКМ - Найти (или Ctrl+F) - в верхней части окна шаблона появится окно для ввода запроса. Переход между найденными результатами осуществляется с помощью кнопок "Следующее" и "Предыдущее". Если больше совпадений нет - появится надпись "Поиск не дал результатов".
Данным нововведением особенно удобно пользоваться в шаблонах Логи ИЭМК, Логи УО и других подобных.
Оперативный ввод переменных (Диалоги)
dialogs (CDialogsInfo) - мастер диалогов. Содержит список диалогов, по которому можно перемещаться вперёд и назад и вводить простейшие данные. Каждый диалог имеет тип CSimplePrintDialog и содержит метод getVar(), позволяющий извлекать эти данные. Кнопка "OK" - переход к следующему диалогу. Кнопка "Отмена" - также переход к следующему диалогу, при этом считается, что в диалог введено значение по умолчанию default. Но, если при создании диалога значение default не указано, getVar() возвращает None.
Мастер диалогов содержит методы:
Методы, запускающие диалоги ввода простейших данных:
Пример 1:
{dialogs.dialString(u"Введите имя врача", "").getVar()} - отображает строку, введённую в диалоге
Пример 2:
{: dial1 = dialogs.dialString(u"Введите строку", "default string" ) }
{: str = dial1.getVar()}
{: dial2 = dialogs.dialList(u"Выберите элемент", ["first", "second", str], 1) }
{:dial2m = dialogs.dialMultiList(u"Выберите элементы", ["first", "second", str], 1) }
{: dial3 = dialogs.dialInt(u"Введите целое число", 66, 78, 3, 70) }
{: dial4 = dialogs.dialFloat(u"Введите вещественное число", -2, -1.5, 0.11, 2)}
{: dialb = dialogs.dialBool(u"Введите логическое значение", u"Я хочу продолжить", True)}
{: yes = dialb.getVar() }
{if: yes}
{: dial5 = dialogs.dialDate(u"Введите дату" ) }
{: dial6 = dialogs.dialTime(u"Введите время", '00:00' ) }
{: dat = dial5.getVar() }
{: tim = dial6.getVar() }
{end:}
{: str = dial1.getVar() }
{: value = dial2.getListValue()}
{: values = dial2m.getListValues()}
{: integ = dial3.getVar() }
{: flo = dial4.getVar() }
Выводится диалог ввода строки. Затем диалог выбора элемента из списка, в котором данная строка - третья по счёту. Затем диалог выбора нескольких элементов из такого же списка. При возвращении назад и вводе новой строки диалоги выбора из списка не изменятся - они уже созданы и запущены! Затем диалог ввода целого числа от 66 до 78 с начальным элементов 70 и шагом 3. Затем - диалог выбора вещественного числа от -2 до -1.5 с начальным элементом -2 и шагом 0.11. Затем диалог с CheckBox, рядом с которым написано "Я хочу продолжить". Если пользователь не снял CheckBox, отображается диалог ввода даты и времени. Между всеми этими диалогами можно двигаться вперёд-назад. Выбранные значения сохраняются, соответственно, в переменных str, value, values, integ, flo, yes, dat, tim.
Вывод диалогового окна подтверждения
В шаблоне печати есть возможность вывести диалоговое окно с подтверждением действия. В случае нажатия "Да" произойдет дальнейшее формирование шаблона печати. В случае нажатия "Нет" шаблон печати сформирован не будет.
Пример:
{if: currentPerson.post.identify('urn:oid:1.2.643.5.1.13.13.11.1002') not in ( '4', '5', '427', '428', '6', '7', '429', '430', '431', '432', '433', '434', '435', '436', '437', '438', '8')}
{:from PyQt4.QtGui import QMessageBox as mb }
{if: mb.critical(None, u'Проверка должности', u'ВНИМАНИЕ!\nДолжность текущего пользователя\nне соответствует требованиям ЕГИСЗ!\nВсе равно продолжить?',
mb.Yes|mb.No, mb.No) != mb.Yes }
{ exit(0) }
{end:}
{end:}
Определение числа дней в периоде дат
Для объекта типа CDateInfo (в том числе, currentDate), есть свойство date типа QDate. У QDate, в свою очередь, есть метод daysTo и workDaysTo.
Примеры:
{:from PyQt4.QtCore import QDate}
{:from library.PrintInfo import CDateInfo}
{:begDate = CDateInfo(QDate(2022, 1, 1))}
{:endDate = CDateInfo(QDate(2022, 2, 1))}
{begDate.daysTo(endDate)}
{begDate.workDaysTo(endDate)}
action.begDate.date.daysTo(action.endDate.date) - дней от начала действия до конца
event.execDate.date.daysTo(currentDate.date) - прошло со времени события
Полезные функции Python
hasattr(объект, 'имя_аттрибута')
Пример использования: {if: hasattr(diagnosis, u'MKBEx')}
Пример использования: {dir(arr[0])}
Пример использования: {amountToWords(account.sum)}
Пример использования:
{:from PyQt4.QtGui import QMessageBox}
{:buttons = QMessageBox.Yes | QMessageBox.No}
{:reply = QMessageBox.question(None, '', u'Показать окно шаблона?', buttons)}
{if: reply == QMessageBox.Yes}
<h2>Текст шаблона</h2>
{else:}
{:exit()}
{end:}
Пример использования:
{:from library.PrintTemplates import applyTemplate}
{:applyTemplate(None, 72, globals())}
В печать будет вызван шаблон с id=72 (rbPrintTemplate)
Пример использования:
{action[...].value.replace('\n', '<br>').replace(' ', ' ') :h}
Визуализация отметки об электронной подписи документа
Для визуализации отметки об электронной подписи в документе используется:
{userCertPlate():h}.
Рекомендуется использовать в связке с условием проверки соответствия СНИЛС исполнителя действия и текущего пользователя:
{if:userCertPlate() == u' '}
{action.person.post}:____________________/{action.person.shortName}
{elif: action.person.SNILS == currentPerson.SNILS}
{userCertPlate():h}
{else:}
{action.person.post}:____________________/{action.person.shortName}
{end:}
Такая конструкция позволяет решить ситуацию, когда у пользователя на рабочем месте настроен сертификат электронной подписи, но ему требуется распечатать осмотр другого пользователя.
Также существует возможность обратиться к СНИЛС непосредственно в сертификате электронной подписи:
{:from PyQt4 import QtGui}
{:from library.MSCAPI import MSCApi}
{:snils = QtGui.qApp.getUserCert(MSCApi(QtGui.qApp.getCsp())).snils()}
При острой необходимости изменить размер отметки об электронной подписи можно использовать следующее:
{:s = userCertPlate()}{s[:5] + 'width="384" height="114" ' + s[5:] :h}.
Встраивание штрих-кодов
В шаблонах печати можно использовать как одномерные - Code 39 и Code 128, так и двумерные штрих-коды - Data Matrix, PDF417 и QR-код. Одномерные у нас реализованы с привлечением подходящих шрифтов, двумерные создаются как растровые изображения.
Кодирование в base64
Cтроки имеют метод .encode(<кодировка>)
Обычные 8-битные строки можно кодировать с указанием 'base64' в качестве кодировки.
Пример:
>>> 'Hello world!'.encode('base64')
'SGVsbG8gd29ybGQh\n'
Для строк содержащих помимо латиницы еще и кириллицу в САМСОН обычно используются юникодные строки и для таких строк кодирование в base64 не определено. Поэтому сначала нужно перевести в подходящую случаю 8-битную кодировку, а потом уже - в base64.
>> u'Привет от Петрова и Бaширова!'.encode('utf-8').encode('base64')
'0J/RgNC40LLQtdGCINC+0YIg0J/QtdGC0YDQvtCy0LAg0Lgg0JFh0YjQuNGA0L7QstCwIQ==\n'
>>> u'Привет от Петрова и Бaширова!'.encode('utf-16').encode('base64')
'//4fBEAEOAQyBDUEQgQgAD4EQgQgAB8ENQRCBEAEPgQyBDAEIAA4BCAAEQRhAEgEOARABD4EMgQw\nBCEA\n'
>>> u'Привет от Петрова и Бaширова!'.encode('utf-16be').encode('base64')
'BB8EQAQ4BDIENQRCACAEPgRCACAEHwQ1BEIEQAQ+BDIEMAAgBDgAIAQRAGEESAQ4BEAEPgQyBDAA\nIQ==\n'
>>> u'Привет от Петрова и Бaширова!'.encode('utf-16le').encode('base64')
'HwRABDgEMgQ1BEIEIAA+BEIEIAAfBDUEQgRABD4EMgQwBCAAOAQgABEEYQBIBDgEQAQ+BDIEMAQh\nAA==\n'
>>> u'Привет от Петрова и Бaширова!'.encode('cp1251').encode('base64')
'z/Do4uXyIO7yIM/l8vDu4uAg6CDBYfjo8O7i4CE=\n'
>>> u'Привет от Петрова и Бaширова!'.encode('cp866').encode('base64')
'j+CooqXiIK7iII+l4uCuoqAgqCCBYeio4K6ioCE=\n'
>>> u'Привет от Петрова и Бaширова!'.encode('koi8-r').encode('base64')
'8NLJ18XUIM/UIPDF1NLP18EgySDiYdvJ0s/XwSE=\n'
>>> u'Привет от Петрова и Бaширова!'.encode('iso8859-5').encode('base64')
'v+DY0tXiIN7iIL/V4uDe0tAg2CCxYejY4N7S0CE=\n'
Обращаем внимание на переводы строк, encode('base64') по непонятной причине не только перекодирует, но ещё добавляет переводы строк - в примере с 'utf-16' их два, они обозначены как \n. Можно использовать замену переноса строк на пустые строки:
>>> u'Привет от Петрова и Баширова!'.encode('cp1251').encode('base64').replace('\n', '')
'z/Do4uXyIO7yIM/l8vDu4uAg6CDBYfjo8O7i4CE='
Подстановка данных в шаблон
Текущая дата: {currentDate}
Текущее время: {currentTime}
Текущий населенный пункт (Предпочтения): {defaultKLADR[:2]}
Текущая область (Предпочтения): {provinceKLADR[:2]}
Текущее подразделение: currentOrgStructure (COrgStructureInfo), имеет свойства:
Текущий пользователь: currentPerson (CPersonInfo)
Пациент: client (CClientInfo)
Пример печати телефона и эл.почты пациента:
{:contact1=[]}
{:contact2=[]}
{if: len(client.phones)}
{:phones = client.phones.split(', ')}
{for: phone in phones}
{:items = phone.replace(':',' ').split(' ')}
{if: items[1]==u'телефон' and items[3]!=''}
{:contact1.append(items[3])}
{end:}
{if: items[1]==u'почта' and items[3]!=''}
{:contact2.append(items[3])}
{end:}
{end:}
{end:}
Телефон: {if: contact1}{for: item in contact1}{item}, {end:}{else:}______________________{end:}
Электронная почта: {if: contact2}{for: item in contact2}{item} {end:}{else:}_________________________{end:}
Пример:
{for: contact in client.contacts}
Тип контакта: {contact[0]}
Контакт: {contact[1]}
Примечание: {contact[2]}
{end:}
Для новорождённых и маленьких пациентов
Вкладка картотека (контекст token)
Доступна печать информации из фильтров.
clientsList - Отфильтрованный список пациентов
Пример вывода списка из «Картотеки»:
{for: c in clientsList}
{c}
{end:}
Согласия пациента: (client.consents} (CClientConsentInfo)
Класс CClientConsentInfo (Данные о согласиях пациента):
При этом код:
{for: consent in client.consents}
{consent}
{end:}
в шаблоне печати выдаст все согласия пациента в виде
код_типа_согласия: значение_строкой
Квоты пациента: (client.quotas} (CClientQuotaInfo)
Класс CClientQuotaInfo (Данные о квотах пациента):
Класс "Прикрепление" CClientAttachInfo
Пример: {client.permanentAttach.org}
Пример обращения ко всем прикреплениям в карточке пациента:
{for: attach in client.getAttaches(temporary=True)} {attach} {end:}
Полис: client.policy (CClientPolicyInfo)
Для явно указания типа страхования полиса вместо client.policy следует использовать:
Адрес регистрации: {client.regAddress} (CAddressInfo)
Адрес проживания: {client.locAddress}
Определение местности
Для определения местности в шаблоне печати можно применить следующее: 6. Местность: {:incity = (str(client.regAddress.KLADRCode)[8:11] == '000')} {if: incity} городская {else:} сельская{end:}
Принадлежность адреса к региону РФ: {client.regAddress.mainRegion}, {client.locAddress.mainRegion}
"Разделение" адреса на город, улицу, дом, квартиру
{client.regAddress.town + u", " + client.regAddress.street + u", д." + client.regAddress.number + u", корп." + client.regAddress.corpus + u", кв. " + client.regAddress.flat }
Занятость: {client.work}
Идентификация: {client.identification} ( CClientIdentificationInfo )
или пустую строку
Такой же механизм можно использовать для классов COrgIdentificationInfo и CPersonIdentificationInfo.
Если не знаем кода, но знаем urn:
{for: (code, urn) in currentOrganisation.identification.byUrn.items()}
{if: urn == u'urn:oid:1.2.643.5.1.13.2.1.1.178'}
{code}
{end:}
{end:}
Второй способ получения идентификатора по urn из rbAccountingSystem
Пример получения идентификатора по справочнику должностей oid:1.2.643.5.1.13.13.11.1002:
{action.person.post.identify('urn:oid:1.2.643.5.1.13.13.11.1002')
Работает для следующих объектов и классов:
Связи пациента: {client.relations} (список)
Например. Связи:
{if: client.relations}
rel
rel.role
rel.otherRole
rel.name
rel.other
rel.code
rel.regionalCode
rel.isDirectGenetic
rel.isBackwardGenetic
rel.isDirectRepresentative
rel.isBackwardRepresentative
rel.isDirectEpidemic
rel.isBackwardEpidemic
rel.isDirectDonation
rel.isBackwardDonation
{for: rel in client.relations}
{rel}
{rel.role}
{rel.otherRole}
{rel.name}
{rel.other}
{rel.code}
{rel.regionalCode}
{rel.isDirectGenetic}
{rel.isBackwardGenetic}
{rel.isDirectRepresentative}
{rel.isBackwardRepresentative}
{rel.isDirectEpidemic}
{rel.isBackwardEpidemic}
{rel.isDirectDonation}
{rel.isBackwardDonation}
{end:}
{else:}
связей нет
{end:}
Аллергия: (CClientAllergyInfo)
{for: allergy in client.allergies}
Лекарственная непереносимость: (CClientIntoleranceMedicamentInfo)
{for: intolerance in client.intolerances}
Вредность и факторы
{if:client.work.hurts}
{for: i, hurt in enumerate(client.work.hurts)}
Вредность номер {i+1}: код: {hurt.code}, наименование: {hurt.name}, стаж: {hurt.stage}, строка: {hurt},
{if: hurt.factors}
{for: j, factor in enumerate(hurt.factors)}
фактор № {j+1}, код:{factor.code}, наименование:{factor.name}
{end:}
{else:}
факторов нет
{ end:}
{ end:}
{else:}
вредности нет
{end:}
Соц.статусы: {client.socStatuses}
client.socStatuses (CClientSocStatusInfoList) - массив соц. статусов. Элемент соц.статуса (CClientSocStatusInfo) имеет параметры:
Элемент класса соц.статуса (CSocStatusClassInfo) имеет параметры:
{if:len(client.socStatuses)}
{for: s in client.socStatuses}
{s.code} {s.name} {s} {s.identify('urn:oid:1.2.643.5.1.13.13.11.1050')}
код имя всё идентификатор по справочнику 1.2.643.5.1.13.13.11.1050
{end:}
{end:}
{if:len(client.socStatuses)}
Л
{else:}
Х
{end:}
Документ подтверждающий соц.статус:
Прививочная карта пациента.
{for: vaccination in client.vaccinations}
{end:}
Данные о событии пациента
Существует параметр clientEvents - это массив из событий. По каждому элементу массива можно получить все данные о событии
Эпидемиологичеcкий случай пацинета
Класс CClientEpidCaseInfo содержит следуюшие элементы:
В класс CClientInfo добавлено свойство epidCases.
Пример использования:
{for: case in client.epidCases}
{case.number}
{end:}
Сотрудник person (CPersonInfo)
Например: начальник подразделения в котором работает сотрудник
{person.orgStructure.chief}
{person.orgStructure.chief if person.orgStructure else None}
Класс "Кадровые перемещения сотрудника" CPersonOrderInfo
Класс "Квалификация сотрудника" (CEducationInfoList)
У person (CPersonInfo) есть параметр {educations}, с помощью которого можно получить информацию по квалификации сотрудника. Пример использования:
{for: education in event.setPerson.educations}
{education.documentType} - тип документа (CDocumentInfo)
{education.serial} - серия
{education.number} - номер
{education.date} - дата
{education.origin} - организация
{education.status} - статус
{education.validFromDate} - действительно с даты
{education.validToDate} - действительно по дату
{education.speciality} - специальность (CSpecialityInfo)
{end:}
Класс "Вид деятельности сотрудника"
{for: activity in person.activities}
{activity.code}
{activity.name}
{activity.regionalCode}
{activity.note}
{end:}
Справочник "Старые фамилии"
Для шаблонов печати реализован доступ к справочнику старых фамилий, через внешнюю учетную систему "Старые фамилии", с кодом "OldSurname". Данные указываются на вкладке Идентификация в карте сотрудника.
{getShortName(byDate=None, code='OldSurname')}
{getFullName(byDate=None, code='OldSurname')}
Параметр byDate может принимать значения:
{event.execDate} - дата выполнения события
{action.begDate} - дата начала действия
{action.endDate} - дата окончания действия
{action[u'Name'].value} - дата из свойства с именем Name
Услуга (профиль оплаты) service (CServiceInfo)
Элемент справочника, имеющий свойства code и name и, кроме того, свойства:
Посещение (визит)
visit (CVisitInfo), имеет свойства:
Вкладка визиты (контекст visitsList)
Доступна печать фильтров информации из фильтров. Пример:
Дата визита:
с {if: filterVisitBegDate}{filterVisitBegDate}{end:} {if: filterVisitBegTime}{filterVisitBegTime}{end:}
по {if: filterVisitEndDate}{filterVisitEndDate}{end:} {if: filterVisitEndTime }{filterVisitEndTime}{end:}
Подразделение исполнителя: {if: filterVisitExecSetOrgStructure}{filterVisitExecSetOrgStructure}{end:}
Специальность исполнителя: {if: filterVisitExecSetSpeciality}{filterVisitExecSetSpeciality}{end:}
Исполнитель: {if: filterVisitExecSetPerson }{filterVisitExecSetPerson}{end:}
Ассистент: {if: filterVisitAssistant }{filterVisitAssistant}{end:}
Тип финансирования: {if:filterVisitFinance }{filterVisitFinance}{end:}
Услуга: {if: filterVisitService}{filterVisitService}{end:}
Место: {if: filterVisitScene}{filterVisitScene}{end:}
Автор: {if: filterVisitCreatePersonEx}{filterVisitCreatePersonEx}{end:}
Дата создания:
с {if: filterVisitBegCreateDateEx}{filterVisitBegCreateDateEx}{end:}
по {if :filterVisitEndCreateDateEx}{filterVisitEndCreateDateEx}{end:}
Автор последнего изменения: {if: filterVisitModifyPersonEx }{filterVisitModifyPersonEx}{end:}
Дата последнего изменения:
c {if: filterVisitBegModifyDateEx }{filterVisitBegModifyDateEx}{end:}
по {if: filterVisitEndModifyDateEx}{filterVisitEndModifyDateEx}{end:}
Оплата: {if: filterVisitPayStatusCodeEx}{filterVisitPayStatusCodeEx}{end:} {if: filterVisitPayStatusFinanceEx}{filterVisitPayStatusFinanceEx}{end:}
Обращение {event} (CEventInfo)
{:delta = ED.date.toJulianDay() - event.setDate.date.toJulianDay()} {:duration = str(delta).split()[0]}
Параметры требования МЭС
{for: i, mkb in enumerate(event.mes.MKB)}
{mkb.code} - код диагноза по МКБ
{mkb.name} - наименование МКБ
{mkb.exCode} - код доп. диагноза по МКБ
{mkb.exName} - наименование доп. диагноза по МКБ
{mkb.grouping}
{mkb.blending} - сочетаемость (0-основной и дополнительный,1-основной,2-дополнительный)
{end:}
{for: i, serviceType in enumerate(event.mes.serviceTypes)}
{serviceType.groupCode} - код группировки услуг
{serviceType.groupName} - наименование группировки услуг
{serviceType.code} - код услуги
{serviceType.name} - наименование услуги
{serviceType.doctorWTU} - УЕТ врача
{serviceType.paramedicalWTU} - УЕТ средний
{serviceType.averageQnt} - среднее кол-во предоставления услуги (кратность) пациенту за период госпитализации
{serviceType.necessity} - частота предоставления услуги (потребность) в рамках настоящего стандарта
{serviceType.binding} - признак объединения услуг в единую технологическую совокупность
{serviceType.sex} - пол (0-не определено, 1-М, 2-Ж)
{serviceType.begAgeUnit} - применимо для минимального возраста (0-любой, 1-Д, 2-Н, 3-М, 4-Г)
{serviceType.minimumAge} - минимальный возраст (yy-mm-dd)
{serviceType.endAgeUnit} - применимо для максимального возраста (0-любой, 1-Д, 2-Н, 3-М, 4-Г)
{serviceType.maximumAge} - максимальный возраст (yy-mm-dd)
{serviceType.controlPeriod} - период контроля (0-Текущая дата, 1-Конец текущего года, 2-Конец предыдущего года)
{end:}
{for: i,visit in enumerate(event.mes.visitTypes)}
{visit.name} - наименование
{visit.specialityName} - наименование специальности
{visit.serviceCode} - услуга
{visit.additionalServiceCode} - дополнительный код услуги
{visit.altAdditionalServiceCode} - альтернативный доп. код
{visit.groupCode} - группировка визитов
{visit.averageQnt} - среднее кол-во визитов (кратность) за период госпитализации
{visit.sex} - пол (0-не определено, 1-М, 2-Ж)
{visit.begAgeUnit} - применимо для минимального возраста (0-любой, 1-Д, 2-Н, 3-М, 4-Г)
{visit.minimumAge} - минимальный возраст (yy-mm-dd)
{visit.endAgeUnit} - применимо для максимального возраста (0-любой, 1-Д, 2-Н, 3-М, 4-Г)
{visit.maximumAge} - максимальный возраст (yy-mm-dd)
{visit.controlPeriod} - Период контроля (0-Текущая дата, 1-Конец текущего года, 2-Конец предыдущего года)
{end:}
Вкладка Обращение (контекст печати eventsList)
На вкладке реализована возможность выводить в шаблон печати данные полей фильтра. Сейчас доступны для печати следующие поля:
{filter.eventType} - тип события
{filter.eventBegSetDate} - начальная дата периода назначения
{filter.eventBegSetTime} - начальное время периода назначения
{filter.eventEndSetDate} - конечная дата периода назначения
{filter.eventEndSetTime} - конечное время периода назначения
{filter.eventBegExecDate} - начальная дата периода выполнения
{filter.eventBegExecTime} - начальное время периода выполнения
{filter.eventEndExecDate} - конечная дата периода назначения
{filter.eventEndExecTime} - конечное время периода назначения
{filter.eventOrgStructure} - подразделение
{filter.eventSpeciality} - специальность
{filter.eventPerson} - врач.
Данных по тарифу КСГ:
{for: csg in event.csgList}
{:csg.service.prepareTariff(event.contract.id, event.client.id)}
{csg.service.tariff}
{end:}
Вызов зубной формулы (CTeethEventInfo) (для формы ввода ф.043)
Так как стоматологическая таблица для детей имеет меньше значений то, чтоб не печатать лишних пустых граф существуют следующие подстановки:
Вызов скорой помощи event (CEmergencyEventInfo)
Имеет те же свойства, что и CEventInfo и, кроме того, свойства:
Констатация смерти event
Имеет те же свойства, что и CEventInfo и, кроме того, свойства:
Диагноз (ЛУД)
Представляется экземплярами CDiagnosisInfo. У экземпляра CDiagnosisInfo есть свойства:
Диагноз (Случай обслуживания)
{event.diagnosises}. У экземпляра diagnosises есть те же свойства, что у диагноза ЛУД и, кроме того:
Журнал хранения учетных документов
Информация о текущем местонахождении учетного документа {event.documentLocation}:
Журнал отложенной записи
Контекст печати: suspendedAppointmentList.
Тип действия (статус, мероприятие, диагностика, лечение, и.т.п.)
action (CActionTypeInfo), имеет свойства:
<strongid="t917">Действие (статус, мероприятие, диагностика, лечение, и.т.п.)
action (CActionInfo), имеет те же свойства, что и CActionTypeInfo и, кроме того, свойства:
Выводит целочисленное значение от 0 до 11, соответствующее виду услуги. Расшифровка значений: 0-Прочие, 1-первичный осмотр, 2-повторный осмотр, 3-процедура/манипуляция, 4-операция, 5-исследование, 6-лечение, 7-профилактика, 8-анестезия, 9-реанимация, 10-лабораторное исследование, 11-опрос'
Свойства действия
{for: prop in action}
{prop.name}: {prop.value}/{prop.unit}/{prop.norm}
{end:}
{for: i in xrange(len(action))}
{if: i == action.currentPropertyIndex} {end:}
{i+1}) {action[i].name}: {action[i].value}/{action[i].unit}/{action[i].norm}
{if: i == action.currentPropertyIndex} {end:}
{end:}
{:l = [x for x in action if x.value]}
{for: i,prop in enumerate(l)}
{i}) {prop.name}: {prop.value}/{prop.unit}/{prop.norm}
{end:}
{for: i,prop in enumerate([x for x in action if x.value])}
{i}) {prop.name}: {prop.value}/{prop.unit}/{prop.norm}
{end:}
{for: i,a in enumerate(actions)}
{if: i == currentActionIndex}{end:}
{i}/{a.code}/{a.name}/{len(a)}
{if: i == currentActionIndex}{end:}
{end:}
{prop.value:h}
тип "Действующее вещество ЛСиИМН" (CNomenclatureActiveSubstanceInfo):
{prop.value.code} - код действующего вещества ЛСиИМН (далее - ДВ)
{prop.value.name} - наименование ДВ
{prop.value.unit} - единица измерения ДВ (CUnitInfo)
{prop.value.identify('urn справочника')} - идентификатор ДВ по справочнику с указанным urn
тип "Способ применения ЛСиИМН" (CNomenclatureUsingTypeInfo):
{prop.value.code} - код способа применения ЛСиИМН (далее - СП)
{prop.value.name} - наименование СП
{prop.value.identify('urn справочника')} - идентификатор СП по справочнику с указанным urn
КСГ, применённая в действии
Печать данных по КСГ, применённой в действии, возможна из действия или из события с помощью цикла по действиям, из форм ввода и из вкладок Обращение и Обслуживание
У действия (CActionInfo) есть параметр csg, у которого, в свою очередь, есть следующие параметры:
Биоматериал, связанный с действием
{action.takenTissueJournal} (CtakenTissueJournalInfo):
Класс «Услуги/Квотирование» - справочник Типы действий/вкладка Услуги/Квотирование:
{for: action in event.actions}
{for: quotaType in action.quotaType}
{quotaType.quotaClass}
{quotaType.quotaType.name}
{quotaType.quotaType.code}
{quotaType.financeId}
{end:}
{end:}
Печать шаблона в редакторе действия
В случае, когда из редактора действия необходимо распечатать шаблон, содержащий обращение к другим действиям события, необходимо в шаблоне заменить все "event.actions" на "actions" и добавить в начало шаблона следующий код:
{:from PyQt4 import QtGui}
{:from library.PrintInfo import CInfoContext}
{:from Events.ActionInfo import CActionInfo}
{:records = QtGui.qApp.db.getRecordList('Action', 'id', 'Action.event_id = %d' % action.event.id)}
{:context = CInfoContext()}
{:actions = [CActionInfo(context, r.value('id').toInt()[0]) for r in records]}
Вкладка Обслуживание (контекст печати actionsList)
Для шаблонов печати, использующих контекст actionsList, существует возможность вывода данных полей фильтра.
{filter.actionType.name} - тип действия
{filter.actionBegSetDate} - начальная дата периода назначения
{filter.actionEndSetDate} - конечная дата периода назначения
{filter.actionBegExecDate} - начальная дата периода выполнения
{filter.actionBegExecTime} - начальное время периода выполнения
{filter.actionEndExecDate} - конечная дата периода выполнения
{filter.actionEndExecTime} - конечное время периода выполнения
{filter.actionExecOrgStructure} - подразделение исполнителя
{filter.actionExecSpeciality} - специальность исполнителя
{filter.actionExecSetPerson} - исполнитель
{filter.actionExecSetAssistant} - ассистент
Информация о лекарстве
value (CRLSInfo), имеет свойства:
value (CLSiIMNInfo), имеет свойства:
Документ временной нетрудоспособности
tempInvalid (CTempInvalidInfo), имеет свойства:
{if: blank.annulmentReason}Аннулирован
{elif: blank.fssStatus == 'P0'}Открыт
{elif: blank.fssStatus == 'P1'}Продлен
{elif: blank.fssStatus == 'P2'}Продлен
{elif: blank.fssStatus == 'R'}Закрыт
{elif: blank.fssStatus == 'M'} отправлен на МСЭ
{else:}
{end:}
Случай подписан - {u'Да' if tempInvalid.isSigned else u'Нет'}
CTempInvalidDocumentItemInfo, имеет свойства:
Пример использования:
{for: p in tempInvalid.periods}
<div>{p.begDate} {p.endDate} - {if: p.isSigned}Подписан {p.signPerson} в {p.signDatetime} {else:}Не подписан{end:}</div>
{end:}
Информация о периодах ВУТ (CTempInvalidPeriodInfo)
{for: item in tempInvalid.periods}
{item.begDate}-дата начала периода нетрудоспособности
{item.endPerson}-врач
{item.endDate}-дата окончания периода нетрудоспособности
{item.isExternal} -флаг внешний
{item.regime} -режим
{item.chairPerson} - председатель ВК
{item.duration} - продолжительность периода в днях
{item.note} - примечание
{end:}
Список лиц по уходу «cares».
CTempInvalidDocumentCareInfo имеет свойства:
Пример вывода:
{for: item in tempInvalid.items}
{for: care in item.cares}
<div>{care.client}: {care.begDate} - {care.endDate}</div>
{end:}
{end:}
Врачебная комиссия и направление на МСЭ
medicalCommission, имеет свойства:
{for: mse in expertise}
Выполнение работ
jobTickets (CJobTicketWithActionsInfo), элемент списка CJobTicket имеет свойства:
Например:
jobTickets[i].actions[0].event.client
Вывод параметров фильтра (jobTicket_list)
Номерок на Работу
Ticket (СTicketInfo), имеет свойства:
Лист предварительной записи врача (График)
Вкладка "амбулаторный прием" контекст печати "ambQueue"
Вкладка "На дому" контекст печати "homeQueue"
В данных контекстах определены:
CQueueInfo :
Пример шаблона для вывода на печать текущего листа предварительной записи:
<html>
<body>
Врач:{person}
Дата:{date} Кабинет:{office} Время приёма:{timeRange}
№
время
отметка
пациент
примечание
{for: i,q in enumerate(queue)}
{i}
{q.time if q.time else '-/-'}
{q.checked}
{q.client if q.client else '-/-'}
{q.complaints}
{end:}
</body>
Журнал кассовых операций
(CCashOperationInfo). Контекст печати - cashOrder. Переменные:
Режим «Расчет» — «Журнал кассовых операций» контекст печати (cashBook):
{for: item in cashBook}
{item.event}
{item.client}
{item.date}
{item.cashOperation}
{item.sum}
{item.cashBox}
{end:}
Класс "Тип финансирования"
CFinanceInfo
Класс "Контракт"
CContractInfo
{for: cont in account.contract.contingent}
{cont.attachType} - Тип прикрепления (CAttachTypeInfo) (code/name)
{cont.attachOrg} - ЛПУ прикрепления
{cont.org} - Занятость (COrgInfo)
{cont.socStatusType} - Соц. Статус (CSocStatusType) (code/name)
{cont.insurer} - СМО (COrgInfo)
{cont.policyType} - Тип страхования (CRBPolicyTypeInfo) (code/name)
{cont.serviceArea} - Зона обслуживания
{cont.sex} - пол
{cont.age} - возраст
{end:}
{for: tariff in account.contract.tariffs}
{tariff.service} - Услуга (CServiceInfo)
{tariff.batch} - Группа
{tariff.price} - Цена
{tariff.vat} - НДС
{tariff.age} - Возраст
{tariff.sex} - Пол
{tariff.unit} - Единица учета (rbUnit)
{end:}
Класс "Статьи затрат"
CContractCompositionExpenseInfo
Пример:
<html>
<body>
{for: item in account.items}
<h1>{item}</h1>
<table border="1"> <tr> <th>Затрата </th>
<th>Процент </th>
<th>Сумма </th>
</tr>
{for: expense in item.tariff.compositionExpenses}
<tr>
<td>{expense.name} ({expense.code}) </td>
<td>{expense.percent}% </td>
<td>{expense.sum} </td>
</tr>
{end:}
</table>
{end:}
</body>
Класс "МЭС"
CMesInfo
Класс "Особенности выполнения МЭС"
CMesSpecificationInfo
Класс "КСГ"
Данные о КСГ можно выводить из форм ввода и контекста eventList.
{for: csg in event.csgList}
{csg.begDate} - дата начала
{csg.endDate} - дата окончалия
{csg.MKB} - код МКБ
{csg.CSGCode} - код КСГ
{csg.amount} - количество
{csg.payStatus} - статус оплаты
{end:}
Контекст "feed" (Порционник)
{recordList} - массив, каждый элемент содержит в себе:
{dietList}(СInfoList) - содержит в себе список всех возможных столов
{mealTimeList}(CInfoList) - содержит в себе список всех возможных периодов питания
{financeList}(CInfoList) - содержит в себе список всех возможных видов оплаты
{clientsCount} - число пациентов всего
{clientsWithFeed} - число пациентов с назначенным питанием
{patronsCount} - число патронов всего
{patronsWithFeed} - число патронов с назначенным питанием
{orgStructure} - текущее подразделение
{reportDate} - дата, выбранная в диалоге печати
{reportType} - тип порционника, выбираемый в диалоге печати
Печать из "Стационарного монитора"
В контексты печати передается rows, который является массивом, состоящим из CEventInfo и словаря с доп.данными (dop). Также передаются данные фильтра {filter}.
Фильтр - словарь, состоящий из:
Далее представлены контексты печати с соответствующими им доп.данными.
Вкладка "Присутствующие"
Контекст печати "mPresence".
Вкладка "Поступили"
Контекст печати "mReceived".
Вкладка "Выбыли"
Контекст печати "mLeaved".
Пример:
{for: event, dop in rows}
{event.client.fullName}
{dop.orgStructure}
{end:}
Счета
Пример использования:
{for: item in account.items}
{for: i in item.usedCoefficients}
{i[0]} - {i[1]} - {i[2]}
{end:}
{end:}
При этом: {i[0]} - группа, {i[1]} - название коэффициента, {i[2]} - значение коэффициента.
Также для одной группы присутствует дополнительный коэффициент с наименованием "__all__", значение которого соответствует значению всей группы.
Платные услуги (контекст localContract)
У localContract есть параметр payment (CEventPaymentInfo), который вытягивает следующие данные:
Пример использования: {for: payment in event.localContract.payment}
{payment.date} <-- дата платежа -->
{payment.cashOperation} <-- Кассовая операция {rbCashOperation} -->
{payment.sum} <-- Сумма платежа -->
{payment.typePayment} <-- Тип оплаты (наличный = 0, безналичный = 1) -->
{payment.settlementAccount} <-- Расчетный счет -->
{payment.bank} <-- Реквизиты банка (COrgInfo) -->
{payment.numberCreditCard} <-- Номер кредитной карты -->
{payment.cashBox} <-- идентификатор кассового аппарата --> {end:}
Журнал планирования профилактического наблюдения (контекст ProphylaxisPlanningList)
Текущая запись в журнале (CProphylaxisPlanningInfo):
Список записей (CProphylaxisPlanningInfoList):
{for: planningInfo in ProphylaxisPlanningList}
...
{end:}
{len(ProphylaxisPlanningList)}
класс "Тип планирования" (CProphylaxisPlanningTypeInfo)
Напечатать тип планирования для ProphylaxisPlanning:
{ProphylaxisPlanning.typeId}
Печать изображений
Свойства действия типа ActionProperty_Image и ActionProperty_ImageMap в качестве value возвращают CImageInfo.
с CImageInfo можно сделать: - преобразовано в строку (как сейчас) - возвращается HTML-тег <img ...>
{prop.value:h}
- получить ширину и высоту:
Size: {prop.value.width} × {prop.value.height}
- получить отмасштабированный CImageInfo:
{ prop.value.scaled(100): h}
{prop.value.scaled(width=50, height=100) :h}
Scaled имеет четыре параметра (имя=значение_по_умолчанию # примечание):
* width=None # требуемая ширина, если 0 или None то ширина меняется сообразно масштабу
* height=None # требуемая высота, если 0 или None то высота меняется сообразно масштабу
* keepAspectRatio=False # если keepAspectRatio=True, то изображение масштабируется так, чтобы вбить картинку в новый прямоугольник без искажения пропорций; иначе картинка получает новый размер и искажается
* smoothTransformation=True # если smoothTransformation=True то при масштабировании используется сглаживание, иначе - быстрые и некрасивые вставка/пропуск пикселей.
Прививочная карта пациента
Пример текста шаблона печати из прививочной карты
{for: vaccineItem in vaccineList}
{vaccineItem.vaccine.name}
{vaccineItem.vaccinationType}
{vaccineItem.datetime}
{vaccineItem.dose}
{vaccineItem.serial}
{vaccineItem.person.shortName}
{vaccineItem.reaction.name}
{vaccineItem.transitionType.name}
{vaccineItem.relegateOrg.title}
{for: infectionItem in vaccineItem.infections}
{infectionItem.infection.code}
{infectionItem.infection.name}
{end:}
{end:}
{for: medicalExemptionItem in medicalExemptionList}
{medicalExemptionItem.date}
{medicalExemptionItem.MKB}
{medicalExemptionItem.person.shortName}
{medicalExemptionItem.endDate}
{medicalExemptionItem.medicalExemptionType.name}
{for: infectionItem in medicalExemptionItem.infections}
{infectionItem.infection}
{end:}
{end:}
Режим "Диспансерное наблюдение"
Контекст печати surveillance.
Печать списка пациентов
{clientsInfo} - массив списка пациентов, можно пройти как по массиву, обратиться по индексу, элементы - CClientInfo
Печать параметров фильтров
{begDate} - значение параметра "Дата начала" (или "На дату" для вкладки Состоят), CDateInfo
{endDate} - значение параметра "Дата окончания", CDateInfo
{orgStructureId} - значение параметра "Подразделение врача", COrgStructureInfo
{specialityType} - значение параметра "Специальность", определение типа отбора, 0 - "Отбор по ИЛИ", 1 - "Отбор по И"
{for: spec in specialityId}
{spec.code} {spec.name}
{end:} - значение параметра "Специальность", CSpecialityInfo
{personId} - значение параметра "Врач", CPersonInfo
{MKBFilter} - значение параметра "Коды диагнозов по МКБ", определение типа фильтра, 0 - "Игнор.", 1 - "Интервал"
{MKBFrom} - значение параметра "Коды диагнозов по МКБ", определение первого значения диапазона, CMKBInfo
{MKBTo} - значение параметра "Коды диагнозов по МКБ", определение последнего значения диапазона, CMKBInfo
{accountingSystemId} - значение параметра "Пациент", выбор системы идентификации (может быть "не задано"), CAccountingSystemInfo
{filterClientId} - значение параметра "Пациент", информация о пациенте с выбранным идентификатором, CClientInfo
{sex} - значение параметра "Пол", пустое значение - "не задано", М, Ж
{ageFor} - значение параметра "Возраст с"
{ageTo} - значение параметра "Возраст по"
{death} - значение параметра "Летальность", условие отбора, 0 - "не учитывать", 1 - "только живые", 2 - "только умершие"
{deathBegDate} - значение параметра "Летальность", дата начала периода отбора данных
{deathEndDate} - значение параметра "Летальность", дата окончания периода отбора данных
{attachOrganisationId} - значение параметра "Прикрепление к ЛПУ", COrgInfo
{isNotAttachOrganisation} - значение параметра "Не имеет прикрепления к выбранному ЛПУ", false - имеет прикрепление к выбранному ЛПУ, true - не имеет прикрепления
к выбранному ЛПУ
{isFilterAddressOrgStructure} - значение параметра "По участку", активность фильтра, false - не отмечен, true - отмечен
{addressOrgStructureTypeId} - значение параметра "По участку", условие подбора участка, 0 - "регистрация", 1 - "проживание", 2 - "регистрация или проживание",
3 - "прикрепление", 4 - "регистрация или прикрепление", 5 - "проживание или прикрепление", 6 - "регистрация, проживание или прикрепление"
{addressOrgStructureId} - значение параметра "По участку", подразделение прикрепления, COrgStructureInfo
{isFilterAddress} - значение параметра "Адрес", активность фильтра, false - не отмечен, true - отмечен
{addressTypeId} - значение параметра "Адрес", условие подбора по типу адреса, 0 - "регистрации", 1 - "проживания"
{addressCityCode} - значение параметра "Адрес", населенный пункт, возвращается КЛАДР-код нас.пункта, если выбран нас.пункт
{addressCityName} - значение параметра "Адрес", населенный пункт, возвращается наименование нас.пункта и его тип, если выбран нас.пункт
{addressCitySOCR} - значение параметра "Адрес", населенный пункт, возвращается тип нас.пункта, если выбран нас.пункт
{addressOkatoCode} - значение параметра "Адрес", район, возвращается КЛАДР-код района, если выбран район
{addressOkatoName} - значение параметра "Адрес", район, возвращается наименование района, если выбран район
{KLADRStreetCodeList} - значение параметра "Адрес", список улиц, возвращается список КЛАДР-кодов улиц выбранного населенного пункта, если выбран нас.пункт
{addressStreetCode} - значение параметра "Адрес", улица, возвращается КЛАДР-код выбранной улицы, пусто - если улица не выбрана
{addressStreetName} - значение параметра "Адрес", улица, возвращается наименование выбранной улицы, пусто - если улица не выбрана
{addressStreetSOCR} - значение параметра "Адрес", улица, возвращается тип выбранной улицы, пусто - если улица не выбрана
{addressHouse} - значение параметра "Адрес", номер дома
{addressCorpus} - значение параметра "Адрес", номер корпуса
{addressFlat} - значение параметра "Адрес", номер квартиры
{isSocStatuses} - значение параметра "Соц.статус", активность фильтра, false - не отмечен, true - отмечен
{socStatusesBegDate} - значение параметра "Соц.статус", дата начала периода отбора, CDateInfo
{socStatusesEndDate} - значение параметра "Соц.статус", дата окончания периода отбора, CDateInfo
{socStatusesClass.code} - значение параметра "Соц.статус", код класса соц.статуса
{socStatusesClass.name} - значение параметра "Соц.статус", наименование класса соц.статуса
{socStatusesType.code} - значение параметра "Соц.статус", код типа соц.статуса
{socStatusesType.name} - значение параметра "Соц.статус", наименование типа соц.статуса
{isFilterEvent} - значение параметра "Обращения", активность фильтра, false - не отмечен, true - отмечен
{isEventVisitDiagnosis} - значение параметра "по Диспансерному наблюдению", активность фильтра, false - не отмечен, true - отмечен
{eventVisitType} - значение параметра "Обращения", условие отбора, 0 - "обращались", 1 - "не обращались"
{eventBegDate} - значение параметра "Обращения", дата начала периода отбора, CDateInfo
{eventEndDate} - значение параметра "Обращения", дата окончания периода отбора, CDateInfo
Режим "Складской учет"
Вкладка "Движение" (контекст StockMotions)
{for: item in motionsList}
{item.type} - тип документа
{item.number} - номер документа
{item.date} - дата документа
{item.reason} - основание документа
{item.reasonDate} - дата основания
{item.receiver} - подразделение-получатель
{item.supplier} - подразделение-поставщик
{item.note} - примечание
{item.client} - пациент
{item.supplierPerson} - ответственный сотрудник от подразделения-поставщика
{item.receiverPerson} - ответственный сотрудник от подразделения-получателя
{item.supplierOrgPerson} - ответственный от внешнего постащика
{item.supplierOrg} - внешний поставщик
{for: it in item.items} - информация по каждой позиции в документе
{it.price} - цена
{it.sum} - сумма
{it.qnt} - количество
{it.batch} - серия
{it.isOut} - 0, если исходный материал, 1, если результат (для документов типа "Производство")
{it.shelfTime} - годен до
{it.finance} - тип финансирования
{it.unit.code} - код ед.измерения
{it.unit.name} - наименование ед.измерения
{it.reason.code} - код причины утилизации (для документов типа "Утилизация")
{it.reason.name} - наименование причины утилизации (для документов типа "Утилизация")
{it.note} - примечание
{it.nomenclature.code} - код ЛСиИМН
{it.nomenclature.name} - ТН на русском ЛСиИМН
{it.nomenclature.RegionalCode} - региональный код ЛСиИМН
{it.nomenclature.type.code} - код типа ЛСиИМН
{it.nomenclature.type.name} - наименование типа ЛСиИМН
{it.nomenclature.internationalNonproprietaryName} - МНН на русском ЛСиИМН
{it.nomenclature.producer} - производитель ЛСиИМН
{it.nomenclature.ATC} - код по АТХ ЛСиИМН
{it.nomenclature.packSize} - объем упаковки ЛСиИМН
{it.nomenclature.mnnCode} - код по МНН ЛСиИМН
{it.nomenclature.trnCode} - код по ТРН ЛСиИМН
{it.nomenclature.dosageValue} - дозировка ЛСиИМН
{it.nomenclature.dosageUnit} - единица дозировки ЛСиИМН
{it.nomenclature.lfForm.code} - код формы выпуска ЛСиИМН
{it.nomenclature.lfForm.name} - наименование формы выпуска ЛСиИМН
{it.nomenclature.inDate} - дата включения ЛСиИМН
{it.nomenclature.exDate} - дата исключения ЛСиИМН
{it.nomenclature.completeness} - комплектность ЛСиИМН
{it.nomenclature.mnnLatin} - МНН на латинском ЛСиИМН
{it.nomenclature.originName} - ТН на латинском ЛСиИМН
{for: key in it.nomenclature.features} - характеристики ЛСиИМН
{key}
([for: data in it.nomenclature.features[key]}
{data}
{end:})
{end:}
{for: analog in it.nomenclature.analogues} - аналоги ЛСиИМН
{analog.name}
{end:}
{end:}
{end:}
{for: comp in it.nomenclature.composition} - состав ЛСиИМН
{it.idx}
{it.nomenclature.type}
{it.nomenclature.activeSubstance} (CNomenclatureActiveSubstanceInfo)
{end:}
{for: item in selectedMotionsList} - вывод информации по выделенным документам в списке
...
{end:}
{for: row in rows}
{row.sum} - сумма
{row.qnt} - количество
{row.nomenclature} - номенклатура
{row.batch} - серия
{row.isOut} - 0, если исходный материал, 1, если результат (для документов типа "Производство")
{row.note} - примечание
{row.shelfTime} - годен до
{row.finance} - тип финансирования
{row.unit} - ед.измерения
{row.price} - цена
{row.medicalAidKind} - профиль медицинской помощи
{number} - номер документа
{date} - дата документа
{supplier} - подразделение-поставщик
{supplierPerson} - ответственный сотрудник от подразделения-поставщика
{note} - примечание
{end:}
{for: row in rows}
<tr>
<td>{row.sum}</td> - сумма
<td>{row.qnt}</td> - количество
<td>{row.nomenclature}</td> - номенклатура
<td>{row.batch}</td> - серия
<td>{row.shelfTime}</td> - Годен до
<td>{row.finance}</td> - тип финансирования
<td>{row.unit}</td> - ед. учета
<td>{row.reason}</td> - причина утилизации
<td>{row.price}</td> - цена
<td>{row.medicalAidKind}</td> - вид медицинской помощи
<td>{row.disposalMethod.code}</td> - код способа утилизации
<td>{row.disposalMethod.name}</td> - наименование способа утилизации
<td>{number}</td> - Номер документа
<td>{date}</td> -Дата
<td>{time}</td> - время
<td>{supplier}</td> - Подразделение
<td>{supplierPerson}</td> - Ответственный
<td>{note}</td> - Примечания
</tr>
{end:}
{for: item in commission}
<td>{item.person} - Фамилия И.О. и специальность члена комиссии
<td>{item.postName} - Роль в комиссии (Председатель, Утверждающий, Член комиссии)
{end:}
{remainingsFilterDate} - на дату
{for: item in remainingsList}
{item.orgStructure} - подразделение
{item.nomenclature._} - аналогично it.nomenclature._ на вкладке "Движение"
{item.batch} - серия
{item.qnt} - количество
{item.shelfTime} - годен до
{item.finance} - тип финансирования
{item.unit.code} - код ед.измерения
{item.unit.name} - наименование ед. измерения
{item.sum} - сумма
{end:}
Вкладка "Мои требования" (контекст StockMyRequisitions) и "Требования ко мне" (контекст StockRequirementsToMe)
{for: item in requisitionsList}
{item.number} - номер требования
{item.date} - дата требования
{item.deadline} - срок исполнения требования
{item.receiver} - подразделение-заказчик по требованию
{item.supplier} - подразделение-поставщик по требованию
{item.note} - примечание
{agreementDate} - Дата согласования
{agreementPerson} - Кто согласовал
{agreementStatus} - Статус согласования (0-Не согласовано, 1-Согласовано, 2-Отклонено)
{agreementNote} - Примечание к согласованию
{for: it in item.items} - информация по каждой позиции в требовании
{it.nomenclature._} - аналогично it.nomenclature._ на вкладке "Движение"
{it.finance} - тип финансирования
{it.qnt} - затребованное количество
{it.satisfiedQnt} - отпущенное количество
{it.unit.code} - код ед.измерения
{it.unit.name} - наименование ед. измерения
{end:}
{end:}
{for: item in selectedRequisitionsList} - вывод информации по выделенным документам в списке
...
{end:}
{for: item in requisitionsList}
{for: motion in item.motions} - накладная по требованию (см. цикл по motionsList на вкладке "Движение")
{for: pos in motion.items} - позиция накладной (см. цикл по item.items на вкладке "Движение")
...
{end:}
{end:}
{end:}
Вкладка "Идентификация"
Вкладка идентификация присутствует в большинстве таблиц.
Используя функцию .identify можно получить идентификатор по указанному в скобках справочнику.
Пример получения идентификатора по справочнику должностей oid:1.2.643.5.1.13.13.11.1002:
{action.person.post.identify('urn:oid:1.2.643.5.1.13.13.11.1002')
Класс "Организация" COrgInfo
Текущая организация: {currentOrganisation} (COrgInfo) имеет свойства:
Теперь в COrgInfo есть два поля:
- chief (CPersonInfo)
- chiefFreeInput (строка)
А также функция formatChief(). Выводит chiefFreeInput, если нет Organisation.chief_id, а если есть, то выводит ФИО врача и должность. Функция всегда возвращает строку. Например: {currentOrganisation.formatChief()}
Вкладка "Лицензии" (контекст COrgLicenseInfo)
Окно "Планирование профилактического наблюдения"
Контекст печати surveillancePlanning
planningSurveillances(CProphylaxisPlanningInfoProxyList):
{for: planningSurveillance in planningSurveillances}
{planningSurveillance.diagnosis} (CMKBInfo) - МКБ
{planningSurveillance.dispanser} - ДН
{planningSurveillance.takenDate} - Дата взятия
{planningSurveillance.person} (CPersonInfo) - Врач
{planningSurveillance.removeDate} - Дата снятия
{planningSurveillance.removeReason} - Причина снятия
{end:}
controlSurveillances(CProphylaxisPlanningInfoProxyList):
{for: controlSurveillance in controlSurveillances}
{controlSurveillance.diagnosis} (CMKBInfo) - МКБ
{controlSurveillance.plannedDate} - Дата планирования
{controlSurveillance.begDate} - Дата начала периода
{controlSurveillance.endDate} - Дата окончания периода
{controlSurveillance.person} (CPersonInfo) - Врач
{controlSurveillance.visit.date} (CVisitInfo) - Явился
{controlSurveillance.removeDate} - Дата снятия
{controlSurveillance.removeReason} - Причина снятия
{end:}
Окно "Контрольная карта"
Открывается по кнопке "Печать" в окне "Планирование профилактического наблюдения".
Контекст печати surveillancePlanningCard
planningSurveillances(CProphylaxisPlanningInfoProxyList):
{for: planningSurveillance in planningSurveillances}
{planningSurveillance.diagnosis} (CMKBInfo) - МКБ
{planningSurveillance.dispanser} - ДН
{planningSurveillance.takenDate} - Дата взятия
{planningSurveillance.person} (CPersonInfo) - Врач
{planningSurveillance.removeDate} - Дата снятия
{planningSurveillance.removeReason} - Причина снятия
{end:}
controlSurveillances(CProphylaxisPlanningInfoProxyList):
{for: controlSurveillance in controlSurveillances}
{controlSurveillance.diagnosis} (CMKBInfo) - МКБ
{controlSurveillance.plannedDate} - Дата планирования
{controlSurveillance.begDate} - Дата начала периода
{controlSurveillance.endDate} - Дата окончания периода
{controlSurveillance.person} (CPersonInfo) - Врач
{controlSurveillance.visit.date} (CVisitInfo) - Явился
{controlSurveillance.removeDate} - Дата снятия
{controlSurveillance.removeReason} - Причина снятия
{end:}
measuresActionsSelected (CActionSelectedInfoProxyList, CActionInfo):
{for: action in measuresActionsSelected}
{action.name} - Наименование
{action.directionDate} - Назначено
{action.begDate} - Начато
{action.endDate} - Окончено
{action.person} (CPersonInfo) - Выполнил
...
{end:}
Формирование CDA документа
При необходимости после подписания и прикрепления документа также сформировать CDA документ в формате XML необходимо использовать функцию addSupplement:
{: addSupplement('xml', formatByTemplate('CDA_CERT_NOT_INF', 'CDA')) }
xml - формат документа
CDA_CERT_NOT_INF - имя соответствующего шаблона печати, по которому должен быть сформирован CDA документ
CDA - контекст соответствующего шаблона печати, по которому должен быть сформирован CDA документ