Для почтовой рассылки приобретена одна лицензия, установлена на ЦБД. В связи с этим, все почтовые сообщения отправляются только с ЦБД.
Сам модуль почтовой рассылки установлен на сервере 192.168.2.10, как и сервер отчетов, который формирует протоколы и другие отчеты в формате PDF.
Текст письма и заголовок формируется отдельно настроенной процедурой при формировании (оптравки) письма непосредственно.
Текст рассылки исследования
Текст процедуры
CREATEORALTERPROCEDUREUSER$MAIL_LAB_PROTOCOL
(
MAILLOGID INTEGER,
PROTOCOLID INTEGER=NULL)RETURNS(
SPRESULT INTEGER,
SPCOMMENT VARCHAR(255),
MAILHEADER TTEXT255,
MAILTEXT TTEXT4096
)ASDECLARE pcode TYPEOFCOLUMN clients.pcode;
DECLARE pol TYPEOFCOLUMN clients.pol;
DECLARE name ttext255;
BEGINIF(ProtocolID ISNULL)THENSELECT protocolid FROM mail_log m
WHERE m.mailid= :MAILLOGID
INTO ProtocolID;
IF(ProtocolID ISNULL)THENBEGIN
SPRESULT =1;
SPCOMMENT ='Переданы не все параметры';
suspend;
exit;
ENDSELECT pcode FROM treatplace tp WHERE tp.protocolid= :ProtocolID
INTO :pcode;
SELECT pol, firstname||' '||midname FROM clients c
WHERE c.pcode= :pcode
INTO :pol, :name;
IF(pol =1)THEN
name ='Уважаемый '||name;
ELSEIF(pol =2)THEN
name ='Уважаемая '||name;
ELSE name ='';
MailHeader ='Лаборатория ЗАО МЦК. Результаты анализов '||ProtocolID;
MailText ='<html>'||'<p><font size="-1"><b>Сообщение от автоматической системы доставки результатов. </b></font><br><br>'||'<font size="+1"><center><b>'||name||'</b></center></font><br>'||'По Вашей заявке мы высылаем результаты анализов на указанный Вами адрес электронной почты. Результаты исследований содержатся во вложенном файле формата Adobe(R) PDF компании Adobe Systems.* Для его просмотра на компьютере рекомендуем воспользоваться программами семейства Adobe(R) Acrobat(R).<br><br> <font color="#606060">Спасибо, что доверяете нам заботу о Вашем здоровье!<br>Искренне Ваш, коллектив ЗАО "МЦК".<br>тел.: +7 (495) 725-31-43 (многоканальный)<br>сайт: <a href="http://www.mckolomen.ru/">www.mckolomen.ru</a></font></p><hr color=silver><p><font color="gray">'||name||', в случае, если Вы заметите неточности или технически не корректную информацию, просим Вас сообщить по телефону +7 (495) 725-31-43 или обратным письмом на данный адрес.</font></p><p><font size="+1" color="silver"><b>*</b></font><font color="silver"> Доводим до Вашего сведения, что формат Adobe(R) PDF выбран нами, поскольку является стандартом Международной организации по стандартизации ISO 32000 и de facto признается во всем мире эталоном в области электронного документооборота, что позволяет гарантировать качество и достоверность передаваемой Вам информации. Обращаем также ваше внимание на то, что ответственность за возможные последствия установки и использования любого программного обеспечения для работы с файлами формата PDF целиком лежит на его разработчике, а так же на лице(ах) непосредственно производившем его установку на Вашем компьютере. ЗАО "МЦК" не принимает претензии по данным вопросам.</font></p><p><font color="silver"><b>ЗАКЛЮЧЕНИЕ О КОНФИДЕНЦИАЛЬНОСТИ.</b><br> Данное электронное сообщение, включая вложения, содержит конфиденциальную информацию, защищенную законодательством РФ. Оно предназначено исключительно адресату. Всем прочим лицам доступ к данному сообщению, включая вложения, запрещен. Несанкционированное его использование, распространение, публикация, воспроизведение или любые действия либо бездействие, повлекшее за собой это, запрещены и могут преследоваться по закону.</font></p></html>';
SPRESULT =0;
SPCOMMENT ='Текст и заголовок письма успешно сформированы';
suspend;
END
Триггер
Запись о необходимости рассылки протокола, формируется при создании самого протокола на филиальной БД триггером. Контроль отправки осуществляется тем же триггером, работающем на ЦБД.
Текст триггера
CREATEORALTERTRIGGERUSER$TREATPLACE_MAILSEND FOR TREATPLACE
active after INSERTORUPDATEPOSITION5ASDECLARE cmail TYPEOFCOLUMN clients.clmail;
DECLARE rmail TYPEOFCOLUMN clients.refuseclmail;
DECLARE ismain TYPEOFCOLUMN filials.ismain;
DECLARE dtsend TIMESTAMP;
DECLARE rt INT;
BEGIN/* формируем рассылку по email
1. для протоколов workplacedoc.viewinweb = 1 (отображать на сайте)
2. протокол подписан и это лаб протокол
1. отсутствует признак "протокол картинкой" из справочника услуг
3. отсутствует галка clients.REFUSECLMAIL = 0 (отказ от почтовой отправки протоколов ИБ)
4. введен email пациента
сообщение инициализируется со статусом null, через 6 часов отправляется на почту (статус = 0)
все действия с письмом выполняются в ЦБД, при загрузке протоколов
дополнительно проверяется статус услуг у всего заказ-наряда
*/SELECTCOALESCE(ismain,0)FROM repl$getgrpid g
LEFTJOIN filials f ON f.grpid=g.repl$grpid
INTO :ismain;
IF(ismain =1)THENBEGIN-- ЦБД часть - планируемUPDATE mail_log m
SET MAILSTATUS =0WHERE MAILSTATUS ISNULLAND MAILTYPEID =990000001AND((SELECTMIN(astatus)FROM treatsch ts WHERE ts.treatcode=m.treatcode AND ts.cancid ISNULL)=2OR(SELECTCOUNT(*)FROM treatsch ts WHERE ts.treatcode=m.treatcode AND ts.cancid ISNULL)=0)AND(CREATEDATE < dateadd(-6HOURTOCURRENT_TIMESTAMP)ORCOALESCE((SELECTCOALESCE(cito,0)FROM clreferrals r WHERE r.rtreatcode=m.treatcode),0)=1);
ENDELSEBEGIN-- филиальная часть - формируем-- подписан и отсутствует спец.признак /* картинка */ /* лаб протокол */IF(NEW.pstate=1ANDCOALESCE(OLD.pstate,0)=0AND(NEW.placeid IN(990000181,990000376)ORNEW.placeid=9ANDNOTEXISTS(SELECT*FROM treatsch ts
JOIN recpropvalues r ON r.recid=ts.schid
AND rectype=31AND recpropid=990000006AND propvalueint=1WHERE ts.treatcode=NEW.treatcode)))THENBEGIN-- можно рассылать и нет еще такого протоколаIF(EXISTS(SELECT*FROM workplacedoc wp WHERE wp.placeid=NEW.placeid AND wp.viewinweb=1)ANDNOTEXISTS(SELECT*FROM mail_log m WHERE m.protocolid=NEW.protocolid AND m.pcode=NEW.pcode ))THENBEGINSELECTCOALESCE(clmail,''),COALESCE(refuseclmail,1)FROM clients c WHERE c.pcode=NEW.pcode
INTO :cmail, :rmail;
-- совпадают данные по emailIF(rmail=0ANDCHAR_LENGTH(cmail)>=8ANDPOSITION('@'IN cmail)>1)THENBEGINSELECTMAX(ws.runtime),MIN(printdate)FROM treatlab lt
LEFTJOIN treatsch ts ON ts.treatcode=NEW.treatcode
LEFTJOIN wschema ws ON ws.schid=ts.schid
WHERE lt.treatcode=NEW.treatcode
INTO rt, dtsend;
rt =COALESCE(NULLIF(rt,0),1);
IF(EXTRACT(HOURFROM dtsend)>14)THEN
rt = rt+1;
dtsend = dateadd(rt DAYTO dtsend);
INSERTINTO mail_log(MAILTYPEID,MAILSTATUS,MAILADDRESS,CREATEDATE,
MAILHEADER,MAILTEXT,
ERRORTEXT,
UID,MODIFYDATE,
PCODE,TREATCODE,PROTOCOLID,MAILTYPE,PROTOCOLUID)VALUES(990000001,NULL, :cmail,CURRENT_TIMESTAMP,'Лаборатория ЗАО МЦК','Результаты анализов '||NEW.protocolid,'Планируемая дата отправки '||CAST(:dtsend ASDATE),
rdb$get_context('USER_SESSION','USER_ID'),CURRENT_TIMESTAMP,NEW.pcode,NEW.treatcode,NEW.protocolid,1,990000083);
ENDENDENDENDEND
Соглашение на рассылку
В связи с тем, что пациент может указать не корректный адрес или администратор может ошибиться при наборе, а также для контроля разрешения на отправку рассылки сделана отчетная форма в картотеке пациентов, которая дается на подпись пациенту для разрешения рассылки, с указанием адреса для проверки.
Настройки в карточке регистрации
Для настройки в карточке регистрации данных для рассылки, необходимо заполнить 2 поля:
«E-mail» - текстовое поле на вкладке «Контакты»
«Отказ от почтовой рассылки» - признак.
Если пациент хочет получать рассылку. признак должен быть не активен
Отчет по отправке
Для контроля отправленных данных по сформированных результатам исследований, также есть отчетная форма в картотеке пациентов, которая по таблице почтовых сообщений (MAIL_LOG) выводит все сформированные сообщения для данного пациента со статусом отправки.