Advertisement
Guest User

Untitled

a guest
May 26th, 2016
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 107.85 KB | None | 0 0
  1. <?xml version="1.0" encoding="windows-1251" ?>
  2. - <hl7>
  3. - <!-- Версия настроек
  4. -->
  5. <version>1</version>
  6. - <!-- Шаблон для обработки исходящих ответов
  7. -->
  8. - <events>
  9. - <!-- Записи ЭМК
  10. -->
  11. - <event desc="Ответ на запрос записи ЭМК">
  12. <code>MOTCONSU_QUERY</code>
  13. </event>
  14. - <!-- Направления
  15. -->
  16. - <event desc="Ответ на запрос по направлениям пациента">
  17. <code>PATDIRECS_QUERY</code>
  18. </event>
  19. - <event desc="Ответ на запрос по расписаниям для направления пациента">
  20. <code>PATDIREC_SUBJ_QUERY</code>
  21. </event>
  22. - <event desc="Линковка записи в расписании с направлением">
  23. <code>LINK_PATDIREC_PLANNING</code>
  24. </event>
  25. - <!-- Врачи
  26. -->
  27. - <event desc="Ответ на запрос по врачу">
  28. <code>MEDECINS_QUERY</code>
  29. </event>
  30. - <event desc="Ответ на запрос врача по расписанию">
  31. <code>MEDECINS_PL_QUERY</code>
  32. </event>
  33. - <event desc="Ответ на запрос фотографии врача">
  34. <code>MEDECINS_PHOTO_QUERY</code>
  35. </event>
  36. - <!-- Расписание
  37. -->
  38. - <event desc="Ответ на запрос врача и расписаний по специальности">
  39. <code>MEDSPEC_QUERY</code>
  40. </event>
  41. - <event desc="Ответ на запрос по расписаниям врача">
  42. <code>MEDECINS_PLANNING_QUERY</code>
  43. </event>
  44. - <event desc="Ответ на запрос списка моделей расписаний">
  45. <code>PLANNING_PARAMS_QUERY</code>
  46. </event>
  47. - <event desc="Ответ на запрос списка расписаний по модели">
  48. <code>PLANNING_SUBJ_QUERY</code>
  49. </event>
  50. - <event desc="Ответ на запрос параметров сетки расписания">
  51. <code>PLANNING_DAY_PARAMS_QUERY</code>
  52. </event>
  53. - <event desc="Ответ на запрос списка видов приема по расписанию">
  54. <code>PLANNING_EXAMS_QUERY</code>
  55. </event>
  56. - <event desc="Ответ на запрос списка записей на прием по расписанию">
  57. <code>PLANNING_RECORDS_QUERY</code>
  58. </event>
  59. - <event desc="Ответ на запрос списка записей на прием по пациенту за период">
  60. <code>PLANNING_PATIENT_RECORDS_QUERY</code>
  61. </event>
  62. - <event desc="Запрос списка дней в расписании и количества свободных слотов в каждом из дней">
  63. <code>PLANNING_SUBJ_DAYS_QUERY</code>
  64. </event>
  65. - <event desc="Запрос списка слотов в расписании (для своих записей будет возвращаться planning_iD)">
  66. <code>PLANNING_SUBJ_SLOTS_QUERY</code>
  67. </event>
  68. - <event desc="Проверка возможности записи в клинику">
  69. <code>CHECK_PLANNING</code>
  70. </event>
  71. - <event desc="Проверка прикрепления пациента к клинике">
  72. <code>CHECK_PATIENT_CLINK</code>
  73. </event>
  74. - <event desc="Регистрация вызова на дом">
  75. <code>CALL_HOME_VISIT</code>
  76. </event>
  77. - <event desc="Проверка возможности создания новой записи на прием">
  78. <code>CHECK_PLANNING_ADD_VISIT</code>
  79. </event>
  80. - <event desc="Подтверждение создания новой записи на прием">
  81. <code>PLANNING_ADD_VISIT</code>
  82. </event>
  83. - <event desc="Запрос на распечатку талона на прием к врачу">
  84. <code>VISIT_REPORT</code>
  85. </event>
  86. - <event desc="Подтверждение отмены записи на прием">
  87. <code>PLANNING_CANCEL_VISIT</code>
  88. </event>
  89. - <!-- Система сообщений
  90. -->
  91. - <event desc="Ответ на запрос по списку сообщений (по теме)">
  92. <code>MESSAGES_QUERY</code>
  93. </event>
  94. - <event desc="создание нового сообщения">
  95. <code>NEW_MESSAGE</code>
  96. </event>
  97. - <!-- Портал гос.услуг
  98. -->
  99. - <event desc="Проверка наличия в клинике заданных параметров (услуга, врач, специализация) getHospitals">
  100. <code>CHECK_HOSPITAL</code>
  101. </event>
  102. - <event desc="Возвращает список услуг, доступных пациенту getMedServices">
  103. <code>GET_SERV_LIST</code>
  104. </event>
  105. - <event desc="Возвращает информацию по услуге (условия оплаты и оказания) getMedServiceInfo">
  106. <code>GET_SERV_INFO</code>
  107. </event>
  108. - <event desc="Возвращает список врачей по коду услуги getDoctors">
  109. <code>GET_MEDECINS</code>
  110. </event>
  111. - <event desc="Возвращает информацию о враче getDoctorInfo">
  112. <code>GET_MEDECIN_INFO</code>
  113. </event>
  114. - <event desc="Возвращает информацию о ближайших датах, на которые возможна запись на прием getDate">
  115. <code>GET_MEDECIN_PLANNING_DATES</code>
  116. </event>
  117. - <event desc="Возвращает информацию о свободных временных интервалах на конкретную дату, на которые возможна запись на прием getTime">
  118. <code>GET_MEDECIN_PLANNING_TIMESLOTS</code>
  119. </event>
  120. - <event desc="Создание записи на прием CreateOrder">
  121. <code>CREATE_ORDER</code>
  122. </event>
  123. - <event desc="Отмена записи на прием CancelOrder">
  124. <code>CANCEL_ORDER</code>
  125. </event>
  126. </events>
  127. - <sections>
  128. - <COMMON>
  129. <segments />
  130. </COMMON>
  131. - <ACK_COMMON>
  132. <parent>COMMON</parent>
  133. - <segments>
  134. - <ACK_INFO>
  135. <MESSAGE_ID>{P_MESSAGE_ID}</MESSAGE_ID>
  136. <CODE>{ACK_RESULT}</CODE>
  137. <COMMENT>{ERR_CODE}</COMMENT>
  138. </ACK_INFO>
  139. - <QUERY_INFO>
  140. <PID>{P_PID}</PID>
  141. <PID_PIN>{P_PID_PIN}</PID_PIN>
  142. <CLINIC_CODE>{P_CLINIC_CODE}</CLINIC_CODE>
  143. <LANG_CODE>{P_LANG_CODE}</LANG_CODE>
  144. </QUERY_INFO>
  145. </segments>
  146. - <queries>
  147. - <query>
  148. <order>1</order>
  149. <type>open</type>
  150. <text>declare @err_code varchar(200), @ack_result varchar(10) set @err_code = '' set @ack_result = 'AA' declare @clinic_id int, @clinic_code varchar(100) set @clinic_id = null set @clinic_code = :P_CLINIC_CODE select top 1 @clinic_id = fm_org_id from fm_org where org_type = 'I' and mobimed_clinic_code = @clinic_code if @clinic_id is null begin set @ack_result = 'AE' set @err_code = 'Мед.учреждение не найдено по коду "' + isnull(@clinic_code, '') + '"' end select @ack_result as ACK_RESULT, @err_code as ERR_CODE, @clinic_id as CLINIC_ID</text>
  151. </query>
  152. </queries>
  153. </ACK_COMMON>
  154. - <ACK_COMMON1>
  155. <parent>COMMON</parent>
  156. - <segments>
  157. - <ACK_INFO>
  158. <MESSAGE_ID>{P_MESSAGE_ID}</MESSAGE_ID>
  159. <CODE>{ACK_RESULT}</CODE>
  160. <COMMENT>{ERR_CODE}</COMMENT>
  161. </ACK_INFO>
  162. - <QUERY_INFO>
  163. <PID>{P_PID}</PID>
  164. <PID_PIN>{P_PID_PIN}</PID_PIN>
  165. <CLINIC_CODE>{P_CLINIC_CODE}</CLINIC_CODE>
  166. <LANG_CODE>{P_LANG_CODE}</LANG_CODE>
  167. </QUERY_INFO>
  168. </segments>
  169. - <queries>
  170. - <query>
  171. <order>1</order>
  172. <type>open</type>
  173. <text>declare @err_code varchar(200), @ack_result varchar(10) set @err_code = '' set @ack_result = 'AA' declare @clinic_id int, @clinic_code varchar(100) set @clinic_id = null set @clinic_code = :P_CLINIC_CODE select top 1 @clinic_id = fm_org_id from fm_org where org_type = 'I' and mobimed_clinic_code = @clinic_code select @ack_result as ACK_RESULT, @err_code as ERR_CODE, isnull(@clinic_id, 0) as CLINIC_ID</text>
  174. </query>
  175. </queries>
  176. </ACK_COMMON1>
  177. - <ACK_PID_COMMON>
  178. <parent>COMMON</parent>
  179. - <segments>
  180. - <ACK_INFO>
  181. <MESSAGE_ID>{P_MESSAGE_ID}</MESSAGE_ID>
  182. <CODE>{ACK_RESULT}</CODE>
  183. <COMMENT>{ERR_CODE}</COMMENT>
  184. </ACK_INFO>
  185. - <QUERY_INFO>
  186. <PID>{P_PID}</PID>
  187. <PID_PIN>{P_PID_PIN}</PID_PIN>
  188. <CLINIC_CODE>{P_CLINIC_CODE}</CLINIC_CODE>
  189. <LANG_CODE>{P_LANG_CODE}</LANG_CODE>
  190. </QUERY_INFO>
  191. </segments>
  192. - <queries>
  193. - <query>
  194. <order>1</order>
  195. <type>open</type>
  196. <text>declare @pid int, @result_pid int, @result_fio varchar(200), @err_code varchar(200), @ack_result varchar(10) declare @clinic_id int, @clinic_code varchar(100) set @pid = 0 set @clinic_id = null set @clinic_code = :P_CLINIC_CODE select top 1 @clinic_id = fm_org_id from fm_org where org_type = 'I' and mobimed_clinic_code = @clinic_code if @clinic_id is null begin set @ack_result = 'AE' set @err_code = 'Мед.учреждение не найдено по коду "' + isnull(@clinic_code, '') + '"' end else if isnull(:P_PID, '') != '' begin -- Для идентификации пациента по другим полям можно указать нужные поля при вызове процедуры -- процедура вернет реальный ID пациента, который будет использоваться дальше exec pl_GetPatientID 'MMK', :P_PID, '', :P_PID_PIN, @result_pid output, @pid output, @result_fio output if @result_pid = 1 begin set @ack_result = 'AE' set @err_code = 'Пациент не найден в базе данных мед.учреждения' set @pid = 0 end else if @result_pid = 2 begin set @ack_result = 'AE' set @err_code = 'Указанный PIN код не соответствует пациенту' set @pid = 0 end else begin set @ack_result = 'AA' set @err_code = '' end end else begin set @ack_result = 'AE' set @err_code = 'Не заданы атрибуты поиска пациента' set @pid = 0 end select @pid as IN_PID, @ack_result as ACK_RESULT, @err_code as ERR_CODE, @clinic_id as CLINIC_ID</text>
  197. </query>
  198. </queries>
  199. </ACK_PID_COMMON>
  200. - <MOTCONSU_QUERY>
  201. <parent>ACK_PID_COMMON</parent>
  202. - <segments>
  203. - <QUERY_INFO>
  204. <MOTCONSU_ID>{P_MOTCONSU_ID}</MOTCONSU_ID>
  205. </QUERY_INFO>
  206. - <PATIENT_INFO>
  207. <EXTERNAL_ID>{EXTERNAL_ID}</EXTERNAL_ID>
  208. </PATIENT_INFO>
  209. - <MOTCONSU_INFO>
  210. <XML_DATA>{BIN_XML_DATA}</XML_DATA>
  211. <APPROVED>{APPROVED}</APPROVED>
  212. <CANCEL_MEDECIN>{CANCEL_MEDECIN}</CANCEL_MEDECIN>
  213. <CANCEL_DATE_TIME>{CANCEL_DATE_TIME}</CANCEL_DATE_TIME>
  214. </MOTCONSU_INFO>
  215. </segments>
  216. - <queries>
  217. - <query>
  218. <order>3</order>
  219. <type>open</type>
  220. <text>declare @bin_xml bit, @motconsu_hml_history_id int select top 1 @bin_xml = case when mx.XML_DATA is not null then 1 else 0 end, @motconsu_hml_history_id = mx.MOTCONSU_XML_HISTORY_ID from motconsu m inner loop join patients p on m.PATIENTS_ID = p.PATIENTS_ID inner loop join MOTCONSU_XML_HISTORY mx on mx.MOTCONSU_ID = m.MOTCONSU_ID and mx.PUBLISHED = 1 --and m.REC_STATUS = 'A' left outer loop join medecins med_cancel on med_cancel.medecins_id = m.MEDECINS_CANCEL_ID where m.MOTCONSU_ID = :P_MOTCONSU_ID and p.PATIENTS_ID = :IN_PID order by mx.KRN_CREATE_DATE desc if isnull(@bin_xml, 0) = 1 select p.MMK as EXTERNAL_ID, mx.XML_DATA as BIN_XML_DATA, case when m.REC_STATUS = 'A' then 1 else 0 end as APPROVED, m.CANCEL_DATE_TIME, isnull(med_cancel.nom, '') + ' ' + isnull(med_cancel.prenom, '') as CANCEL_MEDECIN from MOTCONSU_XML_HISTORY mx inner loop join motconsu m on mx.MOTCONSU_ID = m.MOTCONSU_ID and mx.PUBLISHED = 1 --and m.REC_STATUS = 'A' inner loop join patients p on m.PATIENTS_ID = p.PATIENTS_ID left outer loop join medecins med_cancel on med_cancel.medecins_id = m.MEDECINS_CANCEL_ID where mx.MOTCONSU_XML_HISTORY_ID = @motconsu_hml_history_id else select p.MMK as EXTERNAL_ID, mx.XML_DATA1 as BIN_XML_DATA, case when m.REC_STATUS = 'A' then 1 else 0 end as APPROVED, m.CANCEL_DATE_TIME, isnull(med_cancel.nom, '') + ' ' + isnull(med_cancel.prenom, '') as CANCEL_MEDECIN from MOTCONSU_XML_HISTORY mx inner loop join motconsu m on mx.MOTCONSU_ID = m.MOTCONSU_ID and mx.PUBLISHED = 1 --and m.REC_STATUS = 'A' inner loop join patients p on m.PATIENTS_ID = p.PATIENTS_ID left outer loop join medecins med_cancel on med_cancel.medecins_id = m.MEDECINS_CANCEL_ID where mx.MOTCONSU_XML_HISTORY_ID = @motconsu_hml_history_id</text>
  221. </query>
  222. </queries>
  223. </MOTCONSU_QUERY>
  224. - <PATDIRECS_QUERY>
  225. <parent>ACK_PID_COMMON</parent>
  226. - <segments>
  227. - <PATDIRECS query="patdirec_query">
  228. <PATDIREC_ID>{PATDIREC_ID}</PATDIREC_ID>
  229. <PATDIREC_NAME>{PATDIREC_NAME}</PATDIREC_NAME>
  230. <DIR_CNT>{DIR_CNT}</DIR_CNT>
  231. <ANSW_CNT>{ANSW_CNT}</ANSW_CNT>
  232. <CANCEL_CNT>{CANCEL_CNT}</CANCEL_CNT>
  233. <PLANNING_CNT>{PLANNING_CNT}</PLANNING_CNT>
  234. <NOT_PLANNING_CNT>{NOT_PLANNING_CNT}</NOT_PLANNING_CNT>
  235. <BEGIN_DATE>{BEGIN_DATE}</BEGIN_DATE>
  236. <PL_EXAM_ID>{PL_EXAM_ID}</PL_EXAM_ID>
  237. <PL_EXAM_NAME>{PL_EXAM_NAME}</PL_EXAM_NAME>
  238. </PATDIRECS>
  239. </segments>
  240. - <queries>
  241. - <query>
  242. <order>3</order>
  243. <name>patdirec_query</name>
  244. <type>open</type>
  245. <text>if isnull(:IN_PID, 0) = 0 or isnull(:CLINIC_ID, 0) = 0 select 0 as empty_patient else BEGIN select p.patdirec_id, pl.name as patdirec_name, p.dir_state, p.begin_date_time as begin_date, isnull(p.quantity, 0) as dir_cnt, isnull(p.quantity_done, 0) as answ_cnt, isnull(p.quantity_cancel, 0) as cancel_cnt, isnull(count(da.dir_answ_id), 0) as planning_cnt, isnull(p.quantity, 0) - isnull(p.quantity_done, 0) - isnull(count(da.dir_answ_id), 0) as not_planning_cnt, pl.pl_exam_id, pl.name as pl_exam_name from patdirec p inner loop join pl_exam pl on pl.pl_exam_id = p.pl_exam_id and isnull(pl.archive, 0) = 0 inner loop join pl_ex_gr on pl_ex_gr.pl_ex_gr_id = pl.pl_ex_gr_id and pl_ex_gr.type = 0 left outer loop join dir_answ da on da.patdirec_id = p.patdirec_id and da.answ_state = 0 and da.planning_id is null where p.patients_id = :IN_PID and p.dir_state = 1 and isnull(p.fm_intorg_id, :CLINIC_ID) = :CLINIC_ID group by p.patdirec_id, pl.name, p.dir_state, p.begin_date_time, p.quantity, p.quantity_done, p.quantity_cancel, pl.pl_exam_id order by p.begin_date_time END</text>
  246. </query>
  247. </queries>
  248. </PATDIRECS_QUERY>
  249. - <PATDIREC_SUBJ_QUERY>
  250. <parent>ACK_PID_COMMON</parent>
  251. - <xml>
  252. <group>1</group>
  253. </xml>
  254. - <segments>
  255. - <QUERY_INFO>
  256. <PATDIREC_ID>{P_PATDIREC_ID}</PATDIREC_ID>
  257. </QUERY_INFO>
  258. - <MEDECINS_PLANS query="plan_query">
  259. <PL_SUBJ_ID group="1">{PL_SUBJ_ID}</PL_SUBJ_ID>
  260. <PL_SUBJ_NAME>{PL_SUBJ_NAME}</PL_SUBJ_NAME>
  261. <PL_SUBJ_SPEC_ID>{PL_SUBJ_SPEC_ID}</PL_SUBJ_SPEC_ID>
  262. <PL_SUBJ_SPEC>{PL_SUBJ_SPEC}</PL_SUBJ_SPEC>
  263. <WEB_ACCESS>{WEB_ACCESS}</WEB_ACCESS>
  264. - <PL_PARAMS>
  265. <PL_PARAM_ID group="1">{PL_PARAM_ID}</PL_PARAM_ID>
  266. <PL_PARAM_NAME>{PL_PARAM_NAME}</PL_PARAM_NAME>
  267. </PL_PARAMS>
  268. </MEDECINS_PLANS>
  269. </segments>
  270. - <queries>
  271. - <query>
  272. <order>3</order>
  273. <name>plan_query</name>
  274. <type>open</type>
  275. <text>if isnull(:IN_PID, 0) = 0 or isnull(:CLINIC_ID, 0) = 0 select 0 as empty_patient else BEGIN select pl.pl_subj_id, case when isnull(pl.web_name, '') = '' then pl.name else pl.web_name end as pl_subj_name, pl.specialisation_id as pl_subj_spec_id, pl_s.name as pl_subj_spec, pl.web_access, p.pl_param_id, case when isnull(p.web_name, '') = '' then p.nom else p.web_name end as pl_param_name from patdirec inner loop join pl_exam on pl_exam.pl_exam_id = patdirec.pl_exam_id and isnull(pl_exam.archive, 0) = 0 inner loop join pl_subj_exam on pl_subj_exam.pl_exam_id = pl_exam.pl_exam_id inner loop join pl_subj pl on pl.pl_subj_id = pl_subj_exam.pl_subj_id and isnull(pl.archive, 0) = 0 and pl.fm_intorg_id = :CLINIC_ID inner loop join pl_subj_param sp on sp.pl_subj_id = pl.pl_subj_id inner loop join pl_param p on p.pl_param_id = sp.pl_param_id and p.web_access = 1 and isnull(p.archive, 0) = 0 and isnull(p.fm_intorg_id, :CLINIC_ID) = :CLINIC_ID left outer loop join specialisation pl_s on pl_s.specialisation_id = pl.specialisation_id left outer loop join medecins med on med.medecins_id = pl.medecins_id where patdirec.patdirec_id = isnull(:P_PATDIREC_ID, 0) and isnull(med.archive, 0) = 0 order by pl_s.name END</text>
  276. </query>
  277. </queries>
  278. </PATDIREC_SUBJ_QUERY>
  279. - <LINK_PATDIREC_PLANNING>
  280. <parent>ACK_PID_COMMON</parent>
  281. - <segments>
  282. - <QUERY_INFO>
  283. <PATDIREC_ID>{P_PATDIREC_ID}</PATDIREC_ID>
  284. <PLANNING_ID>{P_PLANNING_ID}</PLANNING_ID>
  285. </QUERY_INFO>
  286. </segments>
  287. - <queries>
  288. - <query>
  289. <order>3</order>
  290. <type>open</type>
  291. <text>if isnull(:IN_PID, 0) = 0 or isnull(:CLINIC_ID, 0) = 0 select 0 as empty_patient else BEGIN declare @dir_cnt int, @answ_cnt int set @dir_cnt = 0 select @dir_cnt = isnull(p.quantity, 0), @answ_cnt = isnull(count(da.dir_answ_id), 0) from patdirec p left outer loop join dir_answ da on da.patdirec_id = p.patdirec_id where p.patdirec_id = isnull(:P_PATDIREC_ID, 0) group by p.quantity declare @date_cons datetime set @date_cons = 0 select @date_cons = date_cons from planning where planning_id = isnull(:P_PLANNING_ID, 0) if @date_cons = 0 begin select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Не найдена запись на прием' as ERR_CODE end else if @dir_cnt > 0 begin declare @answ_id int set @answ_id = 0 select top 1 @answ_id = dir_answ_id from dir_answ where patdirec_id = :P_PATDIREC_ID and answ_state = 0 and planning_id is null order by plane_date if @answ_id > 0 begin update dir_answ set planning_id = :P_PLANNING_ID, plane_date = @date_cons where dir_answ_id = @answ_id update planning set dir_answ_linked = 1 where planning_id = :P_PLANNING_ID end else if @dir_cnt > @answ_cnt begin declare @newid int exec up_get_id 'dir_answ', 1, @newid output insert dir_answ (DIR_ANSW_ID, PATDIREC_ID, ANSW_STATE, PLANE_DATE, PLANNING_ID) values (@newid, :P_PATDIREC_ID, 0, @date_cons, :P_PLANNING_ID) update planning set dir_answ_linked = 1 where planning_id = :P_PLANNING_ID end else begin select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Все посещения по направлению уже запланированы' as ERR_CODE end end else select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Направление не найдено' as ERR_CODE END</text>
  292. </query>
  293. </queries>
  294. </LINK_PATDIREC_PLANNING>
  295. - <MEDECINS_QUERY>
  296. <parent>ACK_COMMON</parent>
  297. - <segments>
  298. - <QUERY_INFO>
  299. <MEDECINS_ID>{P_MEDECINS_ID}</MEDECINS_ID>
  300. </QUERY_INFO>
  301. - <MEDECINS_INFO>
  302. <NOM>{NOM}</NOM>
  303. <PRENOM>{PRENOM}</PRENOM>
  304. <PHOTO>{BIN_PHOTO}</PHOTO>
  305. <EDUCATION>{EDUCATION}</EDUCATION>
  306. <DEGREE>{DEGREE}</DEGREE>
  307. <SPECIALIZATION>{SPECIALIZATION}</SPECIALIZATION>
  308. <EXPERIENCE>{EXPERIENCE}</EXPERIENCE>
  309. <CONFERENCES>{CONFERENCES}</CONFERENCES>
  310. <HOBBIES>{HOBBIES}</HOBBIES>
  311. <DESCRIPTION>{DESCRIPTION}</DESCRIPTION>
  312. </MEDECINS_INFO>
  313. </segments>
  314. - <queries>
  315. - <query>
  316. <order>3</order>
  317. <type>open</type>
  318. <text>declare @clinic_code varchar(100) set @clinic_code = isnull(:P_CLINIC_CODE, '') if isnull(:CLINIC_ID, 0) = 0 select 0 as empty_patient else if not exists(select m.medecins_id from medecins m left outer loop join meddep on meddep.medecins_id = m.medecins_id left outer loop join fm_dep on meddep.fm_dep_id = fm_dep.fm_dep_id where m.medecins_id = :P_MEDECINS_ID and fm_dep.main_org_id = :CLINIC_ID) begin select 'AE' as ACK_RESULT, 'Врач не найден в указанном филиале "' + @clinic_code + '"' as ERR_CODE end else select m.nom, m.prenom, mi.education, mi.degree, mi.specialization, mi.experience, mi.conferences, mi.hobbies, mi.description, /* mi.photo */ NULL as BIN_PHOTO from medecins m left outer join medecins_info mi on mi.medecins_id = m.medecins_id where m.medecins_id = :P_MEDECINS_ID</text>
  319. </query>
  320. </queries>
  321. </MEDECINS_QUERY>
  322. - <MEDECINS_PL_QUERY>
  323. <parent>ACK_COMMON</parent>
  324. - <segments>
  325. - <QUERY_INFO>
  326. <PL_PARAM_ID>{P_PL_PARAM_ID}</PL_PARAM_ID>
  327. <PL_SUBJ_ID>{P_PL_SUBJ_ID}</PL_SUBJ_ID>
  328. </QUERY_INFO>
  329. - <MEDECINS_INFO query="medecins_pl_query">
  330. <MEDECINS_ID>{MEDECINS_ID}</MEDECINS_ID>
  331. <MED_PL_PARAM_ID>{MED_PL_PARAM_ID}</MED_PL_PARAM_ID>
  332. <MED_PL_SUBJ_ID>{MED_PL_SUBJ_ID}</MED_PL_SUBJ_ID>
  333. <NOM>{NOM}</NOM>
  334. <PRENOM>{PRENOM}</PRENOM>
  335. <PHOTO>{BIN_PHOTO}</PHOTO>
  336. <EDUCATION>{EDUCATION}</EDUCATION>
  337. <DEGREE>{DEGREE}</DEGREE>
  338. <SPECIALIZATION>{SPECIALIZATION}</SPECIALIZATION>
  339. <EXPERIENCE>{EXPERIENCE}</EXPERIENCE>
  340. <CONFERENCES>{CONFERENCES}</CONFERENCES>
  341. <HOBBIES>{HOBBIES}</HOBBIES>
  342. <DESCRIPTION>{DESCRIPTION}</DESCRIPTION>
  343. </MEDECINS_INFO>
  344. </segments>
  345. - <queries>
  346. - <query>
  347. <order>3</order>
  348. <type>open</type>
  349. <name>medecins_pl_query</name>
  350. <text>declare @clinic_code varchar(100), @pl_param_id int, @pl_subj_id int set @clinic_code = isnull(:P_CLINIC_CODE, '') set @pl_param_id = isnull(:P_PL_PARAM_ID, 0) set @pl_subj_id = isnull(:P_PL_SUBJ_ID, 0) if isnull(:CLINIC_ID, 0) = 0 select 0 as empty_patient else BEGIN if @pl_subj_id = 0 and @pl_param_id = 0 begin set @pl_subj_id = -1 set @pl_param_id = -1 select 'AE' as ACK_RESULT, 'Не указаны модель или расписание приема' as ERR_CODE end if @pl_param_id > 0 and not exists(select p.pl_param_id from pl_param p where p.pl_param_id = @pl_param_id and isnull(p.fm_intorg_id, :CLINIC_ID) = :CLINIC_ID) begin set @pl_param_id = -1 select 'AE' as ACK_RESULT, 'Модель расписания не найдена в указанном филиале "' + @clinic_code + '"' as ERR_CODE end if @pl_subj_id > 0 and not exists(select pl.pl_subj_id from pl_subj pl where pl.pl_subj_id = @pl_subj_id and pl.fm_intorg_id = :CLINIC_ID) begin set @pl_subj_id = -1 select 'AE' as ACK_RESULT, 'Расписание не найдено в указанном филиале "' + @clinic_code + '"' as ERR_CODE end if @pl_param_id != -1 and @pl_subj_id != -1 begin select m.medecins_id, p.pl_param_id as med_pl_param_id, pl.pl_subj_id as med_pl_subj_id, m.nom, m.prenom, mi.education, mi.degree, mi.specialization, mi.experience, mi.conferences, mi.hobbies, mi.description, /* mi.photo */ NULL as BIN_PHOTO from pl_param p inner loop join pl_subj_param sp on p.pl_param_id = sp.pl_param_id inner loop join pl_subj pl on sp.pl_subj_id = pl.pl_subj_id and pl.web_access = 1 and isnull(pl.archive, 0) = 0 and pl.fm_intorg_id = :CLINIC_ID inner loop join medecins m on m.medecins_id = pl.medecins_id left outer loop join medecins_info mi on mi.medecins_id = m.medecins_id where (0 = @pl_param_id or p.pl_param_id = @pl_param_id) and (0 = @pl_subj_id or pl.pl_subj_id = @pl_subj_id) and p.web_access = 1 and isnull(m.archive, 0) = 0 and isnull(p.fm_intorg_id, :CLINIC_ID) = :CLINIC_ID order by m.nom end END</text>
  351. </query>
  352. </queries>
  353. </MEDECINS_PL_QUERY>
  354. - <MEDECINS_PHOTO_QUERY>
  355. <parent>ACK_COMMON</parent>
  356. - <segments>
  357. - <QUERY_INFO>
  358. <MEDECINS_ID>{P_MEDECINS_ID}</MEDECINS_ID>
  359. </QUERY_INFO>
  360. - <MEDECINS_INFO>
  361. <PHOTO>{BIN_PHOTO}</PHOTO>
  362. </MEDECINS_INFO>
  363. </segments>
  364. - <queries>
  365. - <query>
  366. <order>3</order>
  367. <type>open</type>
  368. <text>select mi.photo as BIN_PHOTO from medecins m left outer join medecins_info mi on mi.medecins_id = m.medecins_id where m.medecins_id = :P_MEDECINS_ID</text>
  369. </query>
  370. </queries>
  371. </MEDECINS_PHOTO_QUERY>
  372. - <MEDSPEC_QUERY>
  373. <parent>ACK_COMMON1</parent>
  374. - <xml>
  375. <group>1</group>
  376. </xml>
  377. - <segments>
  378. - <QUERY_INFO>
  379. <MEDECIN_NOM>{P_MEDECIN_NOM}</MEDECIN_NOM>
  380. <SPEC_NAME>{P_SPEC_NAME}</SPEC_NAME>
  381. <WEB_ACCESS>{P_WEB_ACCESS}</WEB_ACCESS>
  382. <CITY_CODE>{P_CITY_CODE}</CITY_CODE>
  383. <MEDECINS_IDS type="string">{P_MEDECINS_IDS}</MEDECINS_IDS>
  384. </QUERY_INFO>
  385. - <MEDECINS_INFO query="medecins_plan_query">
  386. <MEDECINS_ID group="1">{MEDECINS_ID}</MEDECINS_ID>
  387. <NOM>{NOM}</NOM>
  388. <PRENOM>{PRENOM}</PRENOM>
  389. <DEGREE>{DEGREE}</DEGREE>
  390. <EXPERIENCE>{EXPERIENCE}</EXPERIENCE>
  391. - <MEDSPECS>
  392. <SPEC_ID group="1">{SPEC_ID}</SPEC_ID>
  393. <SPEC_NAME>{SPEC_NAME}</SPEC_NAME>
  394. </MEDSPECS>
  395. - <MEDECINS_PLANS>
  396. <PL_SUBJ_ID group="1">{PL_SUBJ_ID}</PL_SUBJ_ID>
  397. <PL_SUBJ_NAME>{PL_SUBJ_NAME}</PL_SUBJ_NAME>
  398. <PL_SUBJ_SPEC_ID>{PL_SUBJ_SPEC_ID}</PL_SUBJ_SPEC_ID>
  399. <PL_SUBJ_SPEC>{PL_SUBJ_SPEC}</PL_SUBJ_SPEC>
  400. <WEB_ACCESS>{WEB_ACCESS}</WEB_ACCESS>
  401. - <PL_PARAMS>
  402. <PL_PARAM_ID group="1">{PL_PARAM_ID}</PL_PARAM_ID>
  403. <PL_PARAM_NAME>{PL_PARAM_NAME}</PL_PARAM_NAME>
  404. </PL_PARAMS>
  405. </MEDECINS_PLANS>
  406. </MEDECINS_INFO>
  407. </segments>
  408. - <queries>
  409. - <query>
  410. <order>3</order>
  411. <name>medecins_plan_query</name>
  412. <type>open</type>
  413. <text>declare @spec_name varchar(100), @medecin_fio varchar(100), @only_webaccess int set @spec_name = isnull(:P_SPEC_NAME, '') set @medecin_fio = isnull(:P_MEDECIN_NOM, '') if @medecin_fio = '' and @spec_name = '' and 0 = 1 -- временно для отладки отключен контроль заполненности параметров select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Не заданы атрибуты поиска врачей' as ERR_CODE else BEGIN set @spec_name = '%' + @spec_name + '%' set @medecin_fio = '%' + @medecin_fio + '%' set @only_webaccess = isnull(:P_WEB_ACCESS, 0) declare @buf_table table (medecins_id int) insert into @buf_table select distinct m.medecins_id from medecins m inner loop join pl_subj pl on pl.medecins_id = m.medecins_id and isnull(pl.archive, 0) = 0 and (@only_webaccess = 0 or pl.web_access = 1) and pl.fm_intorg_id = :CLINIC_ID inner loop join pl_subj_param sp on sp.pl_subj_id = pl.pl_subj_id inner loop join pl_param p on p.pl_param_id = sp.pl_param_id and isnull(p.archive, 0) = 0 and (@only_webaccess = 0 or p.web_access = 1) and isnull(p.fm_intorg_id, :CLINIC_ID) = :CLINIC_ID left outer loop join meddep md on md.medecins_id = m.medecins_id and isnull(md.archive, 0) = 0 left outer loop join fm_dep on fm_dep.fm_dep_id = md.fm_dep_id left outer loop join specialisation s on s.specialisation_id = md.specialisation_id where :CLINIC_ID > 0 and isnull(s.name, '') like @spec_name and m.nom like @medecin_fio and isnull(m.archive, 0) = 0 and fm_dep.main_org_id = :CLINIC_ID select m.medecins_id, m.nom, m.prenom, mi.degree, mi.experience, s.specialisation_id as spec_id, s.name as spec_name, pl.pl_subj_id, case when isnull(pl.web_name, '') = '' then pl.name else pl.web_name end as pl_subj_name, pl.specialisation_id as pl_subj_spec_id, pl_s.name as pl_subj_spec, pl.web_access, p.pl_param_id, case when isnull(p.web_name, '') = '' then p.nom else p.web_name end as pl_param_name from @buf_table buf inner loop join medecins m on m.medecins_id = buf.medecins_id and isnull(m.archive, 0) = 0 inner loop join pl_subj pl on pl.medecins_id = m.medecins_id and isnull(pl.archive, 0) = 0 and (@only_webaccess = 0 or pl.web_access = 1) and pl.fm_intorg_id = :CLINIC_ID inner loop join pl_subj_param sp on sp.pl_subj_id = pl.pl_subj_id inner loop join pl_param p on p.pl_param_id = sp.pl_param_id and isnull(p.archive, 0) = 0 and (@only_webaccess = 0 or p.web_access = 1) and isnull(p.fm_intorg_id, :CLINIC_ID) = :CLINIC_ID left outer loop join medecins_info mi on mi.medecins_id = m.medecins_id left outer loop join meddep md on md.medecins_id = m.medecins_id and isnull(md.archive, 0) = 0 left outer loop join fm_dep on fm_dep.fm_dep_id = md.fm_dep_id left outer loop join specialisation s on s.specialisation_id = md.specialisation_id left outer loop join specialisation pl_s on pl_s.specialisation_id = pl.specialisation_id where :CLINIC_ID > 0 and isnull(pl_s.name, '') like @spec_name and fm_dep.main_org_id = :CLINIC_ID order by m.nom, m.prenom, m.medecins_id, pl_s.name END</text>
  414. </query>
  415. </queries>
  416. </MEDSPEC_QUERY>
  417. - <MEDECINS_PLANNING_QUERY>
  418. <parent>ACK_COMMON</parent>
  419. - <xml>
  420. <group>1</group>
  421. </xml>
  422. - <segments>
  423. - <QUERY_INFO>
  424. <MEDECINS_ID>{P_MEDECINS_ID}</MEDECINS_ID>
  425. <SPEC_ID>{P_SPEC_ID}</SPEC_ID>
  426. <WEB_ACCESS>{P_WEB_ACCESS}</WEB_ACCESS>
  427. </QUERY_INFO>
  428. - <MEDECINS_PLANS query="medecins_plan_query">
  429. <PL_SUBJ_ID group="1">{PL_SUBJ_ID}</PL_SUBJ_ID>
  430. <PL_SUBJ_NAME>{PL_SUBJ_NAME}</PL_SUBJ_NAME>
  431. <PL_SUBJ_SPEC_ID>{PL_SUBJ_SPEC_ID}</PL_SUBJ_SPEC_ID>
  432. <PL_SUBJ_SPEC>{PL_SUBJ_SPEC}</PL_SUBJ_SPEC>
  433. <PL_SUBJ_TIME>{PL_SUBJ_TIME}</PL_SUBJ_TIME>
  434. <WEB_ACCESS>{WEB_ACCESS}</WEB_ACCESS>
  435. - <PL_PARAMS>
  436. <PL_PARAM_ID group="1">{PL_PARAM_ID}</PL_PARAM_ID>
  437. <PL_PARAM_NAME>{PL_PARAM_NAME}</PL_PARAM_NAME>
  438. </PL_PARAMS>
  439. </MEDECINS_PLANS>
  440. </segments>
  441. - <queries>
  442. - <query>
  443. <order>3</order>
  444. <name>medecins_plan_query</name>
  445. <type>open</type>
  446. <text>declare @spec_id int, @medecins_id int, @only_webaccess int set @medecins_id = isnull(:P_MEDECINS_ID, 0) set @spec_id = isnull(:P_SPEC_ID, 0) set @only_webaccess = isnull(:P_WEB_ACCESS, 0) declare @clinic_code varchar(100) set @clinic_code = isnull(:P_CLINIC_CODE, '') if @medecins_id = 0 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Не задана переменная с ID врача' as ERR_CODE else if isnull(:CLINIC_ID, 0) = 0 select 0 as empty_patient else if not exists(select m.medecins_id from medecins m left outer loop join meddep on meddep.medecins_id = m.medecins_id left outer loop join fm_dep on meddep.fm_dep_id = fm_dep.fm_dep_id where m.medecins_id = @medecins_id and fm_dep.main_org_id = :CLINIC_ID) begin select 'AE' as ACK_RESULT, 'Врач не найден в указанном филиале "' + @clinic_code + '"' as ERR_CODE end else BEGIN select pl.pl_subj_id, case when isnull(pl.web_name, '') = '' then pl.name else pl.web_name end as pl_subj_name, pl.specialisation_id as pl_subj_spec_id, pl_s.name as pl_subj_spec, pl.web_access, p.pl_param_id, case when isnull(p.web_name, '') = '' then p.nom else p.web_name end as pl_param_name, dbo.pl_GetSubjDayParamText(pl.pl_subj_id, getdate()) as pl_subj_time from medecins m inner loop join pl_subj pl on pl.medecins_id = m.medecins_id and isnull(pl.archive, 0) = 0 and (@only_webaccess = 0 or pl.web_access = 1) and pl.fm_intorg_id = :CLINIC_ID inner loop join pl_subj_param sp on sp.pl_subj_id = pl.pl_subj_id inner loop join pl_param p on p.pl_param_id = sp.pl_param_id and p.web_access = 1 and isnull(p.archive, 0) = 0 and (@only_webaccess = 0 or p.web_access = 1) and isnull(p.fm_intorg_id, :CLINIC_ID) = :CLINIC_ID left outer loop join specialisation pl_s on pl_s.specialisation_id = pl.specialisation_id where m.medecins_id = @medecins_id and (0 = @spec_id or pl.specialisation_id = @spec_id) order by pl_s.name END</text>
  447. </query>
  448. </queries>
  449. </MEDECINS_PLANNING_QUERY>
  450. - <PLANNING_PARAMS_QUERY>
  451. <parent>ACK_COMMON</parent>
  452. - <segments>
  453. - <QUERY_INFO>
  454. <PL_PARAMS_ID>{P_PL_PARAMS_ID}</PL_PARAMS_ID>
  455. <WEB_USER>{P_WEB_USER}</WEB_USER>
  456. <SNILS>{P_SNILS}</SNILS>
  457. <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
  458. </QUERY_INFO>
  459. <CLINK_INFO query="clink_info_query">{CLINK_INFO}</CLINK_INFO>
  460. - <PL_PARAMS query="pl_params_query">
  461. <PL_PARAM_ID>{PL_PARAM_ID}</PL_PARAM_ID>
  462. <PL_PARAM_NAME>{PL_PARAM_NAME}</PL_PARAM_NAME>
  463. <TIME_FROM>{TIME_FROM}</TIME_FROM>
  464. <TIME_TO>{TIME_TO}</TIME_TO>
  465. <INTERVAL>{INTERVAL}</INTERVAL>
  466. </PL_PARAMS>
  467. </segments>
  468. - <queries>
  469. - <query>
  470. <order>2</order>
  471. <name>clink_info_query</name>
  472. <type>open</type>
  473. <text>declare @pid int, @result_pid int, @result_fio varchar(200) declare @snils varchar(20), @oms_police varchar(60) set @snils = dbo.TrimNumericCode(isnull(cast(:P_SNILS as varchar(20)), '')) set @oms_police = isnull(cast(:P_OMS_POLICE as varchar(60)), '') set @pid = 0 if isnull(:P_PID, '') != '' exec pl_GetPatientID 'MMK', :P_PID, '', :P_PID_PIN, @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @oms_police != '' exec pl_GetPatientID 'OMS_POLICE', @oms_police, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @snils != '' exec pl_GetPatientID 'SYS_SNILS', @snils, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) > 0 select dbo.GetMobimedClinkInfo(@pid) as CLINK_INFO else select '' as CLINK_INFO</text>
  474. </query>
  475. - <query>
  476. <order>3</order>
  477. <name>pl_params_query</name>
  478. <type>open</type>
  479. <text>declare @pl_params_id int set @pl_params_id = isnull(:P_PL_PARAMS_ID, 0) if isnull(:CLINIC_ID, 0) = 0 select 0 as empty_patient else select p.pl_param_id, case when isnull(p.web_name, '') = '' then p.nom else p.web_name end as pl_param_name, dbo.pl_fPlanTimeToTime( p.debut_tranche ) as time_from, dbo.pl_fPlanTimeToTime( p.fin_tranche ) as time_to, dbo.pl_fPlanTimeToTime( p.duree_tranche ) as interval, count(pl.pl_subj_id) from pl_param p join pl_subj_param sp on p.pl_param_id = sp.pl_param_id join pl_subj pl on sp.pl_subj_id = pl.pl_subj_id and pl.web_access = 1 and isnull(pl.archive, 0) = 0 and pl.fm_intorg_id = :CLINIC_ID where (0 = @pl_params_id or p.pl_param_id = @pl_params_id) and p.web_access = 1 and isnull(p.archive, 0) = 0 and isnull(p.fm_intorg_id, :CLINIC_ID) = :CLINIC_ID group by p.pl_param_id, p.web_name, p.nom, p.debut_tranche, p.fin_tranche, p.duree_tranche having count(pl.pl_subj_id) > 0 order by pl_param_name</text>
  480. </query>
  481. </queries>
  482. </PLANNING_PARAMS_QUERY>
  483. - <PLANNING_SUBJ_QUERY>
  484. <parent>ACK_COMMON</parent>
  485. - <segments>
  486. - <QUERY_INFO>
  487. <PL_PARAMS_ID>{P_PL_PARAMS_ID}</PL_PARAMS_ID>
  488. </QUERY_INFO>
  489. - <PL_SUBJ query="subj_query">
  490. <PL_SUBJ_ID>{PL_SUBJ_ID}</PL_SUBJ_ID>
  491. <PL_SUBJ_NAME>{PL_SUBJ_NAME}</PL_SUBJ_NAME>
  492. </PL_SUBJ>
  493. </segments>
  494. - <queries>
  495. - <query>
  496. <order>3</order>
  497. <name>subj_query</name>
  498. <type>open</type>
  499. <text>declare @clinic_code varchar(100) set @clinic_code = isnull(:P_CLINIC_CODE, '') if isnull(:P_PL_PARAMS_ID, 0) = 0 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Не задан ID модели для поиска расписаний' as ERR_CODE else if isnull(:CLINIC_ID, 0) = 0 select 0 as empty_patient else if not exists(select p.pl_param_id from pl_param p where p.pl_param_id = :P_PL_PARAMS_ID and isnull(p.fm_intorg_id, :CLINIC_ID) = :CLINIC_ID) begin select 'AE' as ACK_RESULT, 'Модель расписания не найдена в указанном филиале "' + @clinic_code + '"' as ERR_CODE end else BEGIN select pl.pl_subj_id, case when isnull(pl.web_name, '') = '' then pl.name else pl.web_name end as pl_subj_name from pl_param p join pl_subj_param sp on p.pl_param_id = sp.pl_param_id join pl_subj pl on sp.pl_subj_id = pl.pl_subj_id and pl.web_access = 1 and isnull(pl.archive, 0) = 0 and pl.fm_intorg_id = :CLINIC_ID left outer loop join medecins med on med.medecins_id = pl.medecins_id where p.pl_param_id = :P_PL_PARAMS_ID and p.web_access = 1 and isnull(med.archive, 0) = 0 and isnull(p.fm_intorg_id, :CLINIC_ID) = :CLINIC_ID order by sp.SUBJ_ORDER END</text>
  500. </query>
  501. </queries>
  502. </PLANNING_SUBJ_QUERY>
  503. - <PLANNING_DAY_PARAMS_QUERY>
  504. <parent>ACK_COMMON</parent>
  505. - <segments>
  506. - <QUERY_INFO>
  507. <PL_PARAMS_ID>{P_PL_PARAMS_ID}</PL_PARAMS_ID>
  508. <PL_SUBJ_ID>{P_PL_SUBJ_ID}</PL_SUBJ_ID>
  509. <PL_DATE>{P_PL_DATE}</PL_DATE>
  510. </QUERY_INFO>
  511. - <DAY_PARAMS query="subj_query">
  512. <PL_SUBJ_ID>{PL_SUBJ_ID}</PL_SUBJ_ID>
  513. <TIME_FROM>{TIME_FROM}</TIME_FROM>
  514. <TIME_TO>{TIME_TO}</TIME_TO>
  515. <INTERVAL>{INTERVAL}</INTERVAL>
  516. </DAY_PARAMS>
  517. </segments>
  518. - <queries>
  519. - <query>
  520. <order>3</order>
  521. <name>subj_query</name>
  522. <type>open</type>
  523. <text>declare @clinic_code varchar(100), @WebMedecin int declare @QuoteLimited bit, @QuoteLimit int, @QuoteCnt int, @period_allow_create int declare @pl_param_id int, @pl_subj_id int, @P_PL_DATE datetime, @subj_order int, @cur_date datetime set @clinic_code = isnull(:P_CLINIC_CODE, '') set @WebMedecin = null select @WebMedecin = medecins_id from medecins where nom = 'WEB' set @pl_param_id = :P_PL_PARAMS_ID set @P_PL_DATE = :P_PL_DATE set @pl_subj_id = :P_PL_SUBJ_ID set @cur_date = round(cast(getdate() as float), 0, 1) if isnull(:CLINIC_ID, 0) = 0 select 0 as empty_patient else if isnull(@P_PL_DATE, 0) = 0 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Не задан дата для поиска параметров сетки расписания' as ERR_CODE else if isnull(@WebMedecin, 0) = 0 select 'AE' as ACK_RESULT, 'Не найден пользователь, ассоциированный с web пользователями [NOM=WEB]' as ERR_CODE else if isnull(@pl_subj_id, 0) = 0 BEGIN if isnull(@pl_param_id, 0) = 0 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Не задана модель для списка расписаний' as ERR_CODE else if not exists(select p.pl_param_id from pl_param p where p.pl_param_id = @pl_param_id and isnull(p.fm_intorg_id, :CLINIC_ID) = :CLINIC_ID) begin select 'AE' as ACK_RESULT, 'Модель расписания не найдена в указанном филиале "' + @clinic_code + '"' as ERR_CODE end else BEGIN declare @tmp_table table (pl_subj_id int, time_from datetime, time_to datetime, interval datetime, subj_order int) declare cur cursor local forward_only for select distinct pl.pl_subj_id, coalesce(pl.MaxConsPerDay_WEB, 0), isnull(pl.period_allow_create, 0), sp.subj_order from pl_param p join pl_subj_param sp on p.pl_param_id = sp.pl_param_id join pl_subj pl on sp.pl_subj_id = pl.pl_subj_id and pl.web_access = 1 and isnull(pl.archive, 0) = 0 and pl.fm_intorg_id = :CLINIC_ID left outer loop join medecins med on med.medecins_id = pl.medecins_id where p.pl_param_id = @pl_param_id and p.web_access = 1 and isnull(med.archive, 0) = 0 and isnull(p.fm_intorg_id, :CLINIC_ID) = :CLINIC_ID open cur FETCH NEXT FROM cur INTO @pl_subj_id, @QuoteLimit, @period_allow_create, @subj_order WHILE @@FETCH_STATUS = 0 BEGIN set @QuoteLimited = 0 /* Клиент Холмрок попросил сделать отображение сетки без учета квот if @period_allow_create > 0 and (@P_PL_DATE > @cur_date + @period_allow_create) set @QuoteLimited = 1 else set @QuoteLimited = 0 if (@QuoteLimit > 0) and (@QuoteLimited = 0) begin set @QuoteCnt = null select @QuoteCnt = count(planning_id) from planning where pl_subj_id = @pl_subj_id and DATE_CONS between @P_PL_DATE and (@P_PL_DATE + 1 - 0.0001) and medecins_creator_id = @WebMedecin and isnull(cancelled, 0) = 0 and isnull(status, 0) = 0 if isnull(@QuoteCnt, 0) >= @QuoteLimit set @QuoteLimited = 1 end */ if @QuoteLimited = 0 begin insert into @tmp_table (pl_subj_id, time_from, time_to, interval, subj_order) select @pl_subj_id, DayStart, DayEnd, DayInterval, @subj_order from dbo.pl_GetSubjDayParamFunc(@pl_subj_id, @P_PL_DATE, 0, 0) where ActiveDay = 1 end FETCH NEXT FROM cur INTO @pl_subj_id, @QuoteLimit, @period_allow_create, @subj_order END close cur DEALLOCATE cur select * from @tmp_table order by subj_order, pl_subj_id END END else if not exists(select pl.pl_subj_id from pl_subj pl where pl.pl_subj_id = @pl_subj_id and pl.fm_intorg_id = :CLINIC_ID) begin select 'AE' as ACK_RESULT, 'Расписание не найдено в указанном филиале "' + @clinic_code + '"' as ERR_CODE end else BEGIN set @QuoteLimited = 0 set @QuoteLimit = NULL set @period_allow_create = 0 select @QuoteLimit = coalesce(pl.MaxConsPerDay_WEB, 0), @period_allow_create = pl.period_allow_create from pl_subj pl where pl.pl_subj_id = @pl_subj_id /* Клиент Холмрок попросил сделать отображение сетки без учета квот if @period_allow_create > 0 and (@P_PL_DATE > @cur_date + @period_allow_create) set @QuoteLimited = 1 else set @QuoteLimited = 0 if (@QuoteLimit > 0) and (@QuoteLimited = 0) begin set @QuoteCnt = null select @QuoteCnt = count(planning_id) from planning where pl_subj_id = @pl_subj_id and DATE_CONS between @P_PL_DATE and (@P_PL_DATE + 1 - 0.0001) and medecins_creator_id = @WebMedecin and isnull(cancelled, 0) = 0 and isnull(status, 0) = 0 if isnull(@QuoteCnt, 0) >= @QuoteLimit set @QuoteLimited = 1 end */ if @QuoteLimited = 0 begin select @pl_subj_id as pl_subj_id, DayStart as time_from, DayEnd as time_to, DayInterval as interval from dbo.pl_GetSubjDayParamFunc(@pl_subj_id, @P_PL_DATE, 0, 0) where ActiveDay = 1 end else select 0 as empty_patient END</text>
  524. </query>
  525. </queries>
  526. </PLANNING_DAY_PARAMS_QUERY>
  527. - <PLANNING_EXAMS_QUERY>
  528. <parent>ACK_COMMON</parent>
  529. - <segments>
  530. - <QUERY_INFO>
  531. <PL_SUBJ_ID>{P_PL_SUBJ_ID}</PL_SUBJ_ID>
  532. </QUERY_INFO>
  533. - <PL_EXAM query="exam_query">
  534. <PL_EXAM_ID>{PL_EXAM_ID}</PL_EXAM_ID>
  535. <PL_EXAM_NAME>{PL_EXAM_NAME}</PL_EXAM_NAME>
  536. <DURATION>{DURATION}</DURATION>
  537. </PL_EXAM>
  538. </segments>
  539. - <queries>
  540. - <query>
  541. <order>3</order>
  542. <name>exam_query</name>
  543. <type>open</type>
  544. <text>declare @clinic_code varchar(100) set @clinic_code = isnull(:P_CLINIC_CODE, '') if isnull(:P_PL_SUBJ_ID, 0) = 0 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Не задан ID расписания для поиска доступных приемов' as ERR_CODE else if isnull(:CLINIC_ID, 0) = 0 select 0 as empty_patient else if not exists(select pl.pl_subj_id from pl_subj pl where pl.pl_subj_id = :P_PL_SUBJ_ID and pl.fm_intorg_id = :CLINIC_ID) begin select 'AE' as ACK_RESULT, 'Расписание не найдено в указанном филиале "' + @clinic_code + '"' as ERR_CODE end else BEGIN select e.pl_exam_id, case when isnull(e.web_name, '') = '' then e.name else e.web_name end as pl_exam_name, e.duree as duration, e.exam_order from pl_subj_exam s join pl_exam e on s.pl_exam_id = e.pl_exam_id and isnull(e.archive, 0) = 0 where s.pl_subj_id = :P_PL_SUBJ_ID and isnull(e.web_access, 0) = 1 and isnull(e.DUREE, 0) > 0 order by e.exam_order END</text>
  545. </query>
  546. </queries>
  547. </PLANNING_EXAMS_QUERY>
  548. - <PLANNING_RECORDS_QUERY>
  549. <parent>ACK_COMMON</parent>
  550. - <segments>
  551. - <QUERY_INFO>
  552. <WEB_USER>{P_WEB_USER}</WEB_USER>
  553. <PL_SUBJ_ID>{P_PL_SUBJ_ID}</PL_SUBJ_ID>
  554. <PL_DATE>{P_PL_DATE}</PL_DATE>
  555. </QUERY_INFO>
  556. - <PLANNING_RECORDS query="planning_query">
  557. <PLANNING_ID>{PLANNING_ID}</PLANNING_ID>
  558. <REC_TYPE>{REC_TYPE}</REC_TYPE>
  559. <EXAM_NAME>{EXAM_NAME}</EXAM_NAME>
  560. <START_TIME>{START_TIME}</START_TIME>
  561. <END_TIME>{END_TIME}</END_TIME>
  562. <CANCELLED>{CANCELLED}</CANCELLED>
  563. <CANCEL_MOTIVE>{CANCEL_MOTIVE}</CANCEL_MOTIVE>
  564. <COMMENTAIRE>{COMMENTAIRE}</COMMENTAIRE>
  565. <NOT_ACCEPTED>{NOT_ACCEPTED}</NOT_ACCEPTED>
  566. </PLANNING_RECORDS>
  567. </segments>
  568. - <queries>
  569. - <query>
  570. <order>3</order>
  571. <name>planning_query</name>
  572. <type>open</type>
  573. <text>declare @pid int, @result_pid int, @result_fio varchar(200) if isnull(:P_PID, '') != '' begin exec pl_GetPatientID 'MMK', :P_PID, '', :P_PID_PIN, @result_pid output, @pid output, @result_fio output if @result_pid = 1 begin set @pid = -1 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Пациент не найден в базе данных мед.учреждения' as ERR_CODE end else if @result_pid = 2 begin set @pid = -1 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Указанный PIN код не соответствует пациенту' as ERR_CODE end end else set @pid = -123456 declare @clinic_code varchar(100) set @clinic_code = isnull(:P_CLINIC_CODE, '') declare @web_user varchar(60) set @web_user = isnull(:P_WEB_USER, 'XXX') if isnull(@pid, -1) != -1 BEGIN if isnull(:P_PL_SUBJ_ID, 0) = 0 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Не задан ID расписания для получения списка запланированных приемов' as ERR_CODE else if isnull(:CLINIC_ID, 0) = 0 select 0 as empty_patient else if not exists(select pl.pl_subj_id from pl_subj pl where pl.pl_subj_id = :P_PL_SUBJ_ID and pl.fm_intorg_id = :CLINIC_ID) begin select 'AE' as ACK_RESULT, 'Расписание не найдено в указанном филиале "' + @clinic_code + '"' as ERR_CODE end else if :P_PL_DATE is null select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Не задана дата для получения списка запланированных приемов по расписанию' as ERR_CODE else BEGIN declare @d datetime, @pl_subj_id int set @d = :P_PL_DATE set @pl_subj_id = :P_PL_SUBJ_ID select p.planning_id, gr.etype as rec_type, pl_exam.name as exam_name, gr.d1 as start_time, gr.d2 as end_time, p.cancelled, p.reason_cancel as cancel_motive, p.commentaire, isnull(p.NOT_ACCEPTED, 0) as NOT_ACCEPTED from dbo.pl_getmedecingridfunc(@pl_subj_id, @d, 0, 0, 0) gr left outer loop join planning p on p.planning_id = gr.recid and gr.etype = 1 and (p.patients_id = @pid or p.web_user = @web_user) left outer loop join pl_exam on p.pl_exam_id = pl_exam.pl_exam_id END END</text>
  574. </query>
  575. </queries>
  576. </PLANNING_RECORDS_QUERY>
  577. - <PLANNING_PATIENT_RECORDS_QUERY>
  578. <parent>ACK_PID_COMMON</parent>
  579. - <segments>
  580. - <QUERY_INFO>
  581. <PL_DATE_FROM>{P_PL_DATE_FROM}</PL_DATE_FROM>
  582. <PL_DATE_TO>{P_PL_DATE_TO}</PL_DATE_TO>
  583. <INCLUDE_CANCELLED>{P_INCLUDE_CANCELLED}</INCLUDE_CANCELLED>
  584. </QUERY_INFO>
  585. - <PLANNING_RECORDS query="planning_query">
  586. <PLANNING_ID>{PLANNING_ID}</PLANNING_ID>
  587. <EXAM_NAME>{EXAM_NAME}</EXAM_NAME>
  588. <START_TIME>{START_TIME}</START_TIME>
  589. <END_TIME>{END_TIME}</END_TIME>
  590. <CANCELLED>{CANCELLED}</CANCELLED>
  591. <CANCEL_MOTIVE>{CANCEL_MOTIVE}</CANCEL_MOTIVE>
  592. <COMMENTAIRE>{COMMENTAIRE}</COMMENTAIRE>
  593. <PL_SUBJ_ID>{PL_SUBJ_ID}</PL_SUBJ_ID>
  594. <PL_SUBJ_NAME>{PL_SUBJ_NAME}</PL_SUBJ_NAME>
  595. </PLANNING_RECORDS>
  596. </segments>
  597. - <queries>
  598. - <query>
  599. <order>3</order>
  600. <name>planning_query</name>
  601. <type>open</type>
  602. <text>if isnull(:IN_PID, 0) = 0 select 0 as empty_patient else BEGIN declare @d_from datetime, @d_to datetime, @pid int set @d_from = :P_PL_DATE_FROM set @d_to = :P_PL_DATE_TO set @pid = :IN_PID select p.planning_id, pl_exam.name as exam_name, p.pl_subj_id, pl_subj.name as pl_subj_name, p.date_start as start_time, p.date_end as end_time, p.cancelled, p.reason_cancel as cancel_motive, p.commentaire from planning p inner loop join pl_subj on pl_subj.pl_subj_id = p.pl_subj_id and pl_subj.fm_intorg_id = :CLINIC_ID inner loop join pl_exam on p.pl_exam_id = pl_exam.pl_exam_id where p.patients_id = @pid and p.date_cons between @d_from and @d_to and isnull(p.status, 0) = 0 and (isnull(p.cancelled, 0) = 0 or isnull(:P_INCLUDE_CANCELLED, 0) = 1) END</text>
  603. </query>
  604. </queries>
  605. </PLANNING_PATIENT_RECORDS_QUERY>
  606. - <PLANNING_SUBJ_DAYS_QUERY>
  607. <parent>ACK_COMMON</parent>
  608. - <segments>
  609. - <QUERY_RESULT>
  610. - <DAY query="days_query">
  611. <DAY_DATE>{DAY_DATE}</DAY_DATE>
  612. <FREE_SLOTS>{FREE_SLOTS}</FREE_SLOTS>
  613. </DAY>
  614. </QUERY_RESULT>
  615. </segments>
  616. - <queries>
  617. - <query>
  618. <order>2</order>
  619. <name>days_query</name>
  620. <type>open</type>
  621. <text>declare @pl_subj_id int, @date_from datetime, @date_to datetime set @pl_subj_id = isnull(:P_PL_SUBJ_ID, 0) set @date_from = :P_DATE_FROM set @date_from = convert(datetime,convert(varchar(8),isnull(@date_from, getdate()),112),112) set @date_to = :P_DATE_TO set @date_to = convert(datetime,convert(varchar(8),isnull(@date_to, @date_from),112),112) if @date_to > @date_from + 31 set @date_to = @date_from + 31 select convert(datetime,convert(varchar(8),isnull(d1, getdate()),112),112) as DAY_DATE, count(case when EType = 0 then 1 else 0 end) as FREE_SLOTS from dbo.pl_GetMedecinGridFunc2(@pl_subj_id, @date_from, @date_to, 0) group by convert(datetime,convert(varchar(8),isnull(d1, getdate()),112),112)</text>
  622. </query>
  623. </queries>
  624. </PLANNING_SUBJ_DAYS_QUERY>
  625. - <PLANNING_SUBJ_SLOTS_QUERY>
  626. <parent>ACK_COMMON</parent>
  627. - <segments>
  628. - <QUERY_RESULT>
  629. - <SLOT query="slots_query">
  630. <DATETIME_START>{DATETIME_START}</DATETIME_START>
  631. <DATETIME_END>{DATETIME_END}</DATETIME_END>
  632. <IS_FREE>{IS_FREE}</IS_FREE>
  633. <PLANNING_ID>{PLANNING_ID}</PLANNING_ID>
  634. </SLOT>
  635. </QUERY_RESULT>
  636. </segments>
  637. - <queries>
  638. - <query>
  639. <order>2</order>
  640. <name>slots_query</name>
  641. <type>open</type>
  642. <text>declare @pl_subj_id int, @date_from datetime, @date_to datetime, @web_user varchar(100) set @pl_subj_id = isnull(:P_PL_SUBJ_ID, 0) set @web_user = isnull(:P_WEB_USER, 'unknown') set @date_from = :P_DATE_FROM set @date_from = convert(datetime,convert(varchar(8),isnull(@date_from, getdate()),112),112) set @date_to = :P_DATE_TO set @date_to = convert(datetime,convert(varchar(8),isnull(@date_to, @date_from),112),112) if @date_to > @date_from + 7 set @date_to = @date_from + 7 select gr.D1 as DATETIME_START, gr.D2 as DATETIME_END, case when gr.EType = 0 then 1 else 0 end as IS_FREE, p.planning_id as PLANNING_ID from dbo.pl_GetMedecinGridFunc2(@pl_subj_id, @date_from, @date_to, 0) gr left outer loop join planning p on p.planning_id = gr.recid and gr.EType = 1 and p.web_user = @web_user order by gr.D1</text>
  643. </query>
  644. </queries>
  645. </PLANNING_SUBJ_SLOTS_QUERY>
  646. - <CHECK_PLANNING>
  647. <parent>ACK_COMMON</parent>
  648. <segments />
  649. - <queries>
  650. - <query>
  651. <order>3</order>
  652. <type>open</type>
  653. <text>select null</text>
  654. </query>
  655. </queries>
  656. </CHECK_PLANNING>
  657. - <CHECK_PATIENT_CLINK>
  658. <parent>ACK_COMMON</parent>
  659. - <segments>
  660. - <QUERY_INFO>
  661. <WEB_USER>{P_WEB_USER}</WEB_USER>
  662. <SNILS>{P_SNILS}</SNILS>
  663. <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
  664. </QUERY_INFO>
  665. </segments>
  666. - <queries>
  667. - <query>
  668. <order>3</order>
  669. <type>open</type>
  670. <text>declare @pid int, @result_pid int, @result_fio varchar(200) declare @check_result int, @cur_date datetime, @count_clink int declare @clinic_code varchar(100) set @clinic_code = isnull(:P_CLINIC_CODE, '') set @cur_date = round(cast(getdate() as float), 0, 1) set @check_result = 1 if @check_result = 1 and isnull(:CLINIC_ID, 0) = 0 begin set @check_result = 0 select 0 as empty_patient end declare @snils varchar(20), @oms_police varchar(60) set @snils = dbo.TrimNumericCode(isnull(cast(:P_SNILS as varchar(20)), '')) set @oms_police = isnull(cast(:P_OMS_POLICE as varchar(60)), '') if @check_result = 1 begin set @pid = 0 if isnull(:P_PID, '') != '' exec pl_GetPatientID 'MMK', :P_PID, '', :P_PID_PIN, @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @oms_police != '' exec pl_GetPatientID 'OMS_POLICE', @oms_police, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @snils != '' exec pl_GetPatientID 'SYS_SNILS', @snils, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 begin set @check_result = 0 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Пациент не найден в базе данных мед.учреждения' as ERR_CODE end end if @check_result = 1 and isnull(@pid, 0) != 0 begin set @count_clink = 0 select top 1 @count_clink = fm_clink_patients.fm_clink_patients_id from fm_clink_patients fm_clink_patients join fm_clink fm_clink on fm_clink.fm_clink_id = fm_clink_patients.fm_clink_id join fm_contr fm_contr on fm_contr.fm_contr_id = fm_clink.fm_contr_id join fm_clink_patients_org fm_clink_patients_org on fm_clink_patients.fm_clink_patients_id = fm_clink_patients_org.fm_clink_patients_id and fm_clink_patients_org.fm_org_id = :CLINIC_ID where fm_contr.suspended = 0 and fm_clink.cancel = 0 and fm_clink_patients.cancel = 0 and fm_clink_patients.date_from <= @cur_date and isnull(fm_clink_patients.date_to, @cur_date) >= @cur_date and isnull(fm_clink_patients.date_cancel, @cur_date + 1) > @cur_date and fm_clink_patients.patients_id = isnull(@pid, -1) if isnull(@count_clink, 0) = 0 begin set @check_result = 0 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Вы не прикреплены к выбранному мед.учреждению' as ERR_CODE end end if @check_result = 1 select 'AA' as ACK_RESULT</text>
  671. </query>
  672. </queries>
  673. </CHECK_PATIENT_CLINK>
  674. - <CALL_HOME_VISIT>
  675. <parent>ACK_COMMON</parent>
  676. - <segments>
  677. - <QUERY_INFO>
  678. <WEB_USER>{P_WEB_USER}</WEB_USER>
  679. <SNILS>{P_SNILS}</SNILS>
  680. <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
  681. - <ADDRESS>
  682. <REGION_CODE>{P_REGION_CODE}</REGION_CODE>
  683. <REGION>{P_REGION}</REGION>
  684. <CITY_CODE>{P_CITY_CODE}</CITY_CODE>
  685. <CITY>{P_CITY}</CITY>
  686. <STREET_CODE>{P_STREET_CODE}</STREET_CODE>
  687. <STREET>{P_STREET}</STREET>
  688. <HOUSE>{P_HOUSE}</HOUSE>
  689. <HOUSE_LITERA>{P_HOUSE_LITERA}</HOUSE_LITERA>
  690. <HOUSE_BUILDING>{P_HOUSE_BUILDING}</HOUSE_BUILDING>
  691. <HOUSE_STROENIE>{P_HOUSE_STROENIE}</HOUSE_STROENIE>
  692. <FLAT>{P_FLAT}</FLAT>
  693. <ADDRESS_NOTE>{P_ADDRESS_NOTE}</ADDRESS_NOTE>
  694. </ADDRESS>
  695. <NOTE>{P_NOTE}</NOTE>
  696. <PHONE>{P_PHONE}</PHONE>
  697. </QUERY_INFO>
  698. </segments>
  699. - <queries>
  700. - <query>
  701. <order>3</order>
  702. <type>open</type>
  703. <text>declare @pid int, @result_pid int, @result_fio varchar(200) declare @check_result int, @cur_date datetime, @count_clink int declare @P_REGION_CODE varchar(20), @P_REGION varchar(100), @P_CITY_CODE varchar(20), @P_CITY varchar(100), @P_STREET_CODE varchar(20), @P_STREET varchar(100), @P_HOUSE varchar(4), @P_HOUSE_LITERA varchar(2), @P_HOUSE_BUILDING varchar(3), @P_HOUSE_STROENIE varchar(3), @P_FLAT varchar(4), @P_ADDRESS_NOTE varchar(255), @P_NOTE varchar(255), @P_PHONE varchar(20) set @P_REGION_CODE = isnull(:P_REGION_CODE, '') set @P_REGION = isnull(:P_REGION, '') set @P_CITY_CODE = isnull(:P_CITY_CODE, '') set @P_CITY = isnull(:P_CITY, '') set @P_STREET_CODE = isnull(:P_STREET_CODE, '') set @P_STREET = isnull(:P_STREET, '') set @P_HOUSE = isnull(:P_HOUSE, '') set @P_HOUSE_LITERA = isnull(:P_HOUSE_LITERA, '') set @P_HOUSE_BUILDING = isnull(:P_HOUSE_BUILDING, '') set @P_HOUSE_STROENIE = isnull(:P_HOUSE_STROENIE, '') set @P_FLAT = isnull(:P_FLAT, '') set @P_ADDRESS_NOTE = isnull(:P_ADDRESS_NOTE, '') set @P_NOTE = isnull(:P_NOTE, '') set @P_PHONE = isnull(:P_PHONE, '') declare @clinic_code varchar(100) set @clinic_code = isnull(:P_CLINIC_CODE, '') set @cur_date = round(cast(getdate() as float), 0, 1) set @check_result = 1 if @check_result = 1 and isnull(:CLINIC_ID, 0) = 0 begin set @check_result = 0 select 0 as empty_patient end if @check_result = 1 and exists(select prm_value from fm_params where prm_name = 'lock_mobimed_record' and prm_value = '1') begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Запись в клинику временно заблокирована.' as ERR_CODE end declare @snils varchar(20), @oms_police varchar(60) set @snils = dbo.TrimNumericCode(isnull(cast(:P_SNILS as varchar(20)), '')) set @oms_police = isnull(cast(:P_OMS_POLICE as varchar(60)), '') if @check_result = 1 begin set @pid = 0 if isnull(:P_PID, '') != '' exec pl_GetPatientID 'MMK', :P_PID, '', :P_PID_PIN, @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @oms_police != '' exec pl_GetPatientID 'OMS_POLICE', @oms_police, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @snils != '' exec pl_GetPatientID 'SYS_SNILS', @snils, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 begin set @check_result = 0 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Пациент не найден в базе данных мед.учреждения' as ERR_CODE end end if @check_result = 1 begin declare @newid int exec up_get_id 'VYZOV', 1, @newid output declare @ADR_GOROD_ID int, @ADR_OBLAST_ID int, @ADR_STREET_ID int select @ADR_GOROD_ID = g.ADR_GOROD_ID, @ADR_OBLAST_ID = g.ADR_OBLAST_ID, @ADR_STREET_ID = s.ADR_STREET_ID from ADR_STREET s join ADR_GOROD g on g.ADR_GOROD_ID = s.ADR_GOROD_ID where s.CODE = @P_STREET_CODE insert VYZOV (ID, DATA, PATIENTS_ID, STATUS, NAS_PUNKT, NAS_PUNKT_TEXT, ULICA, ULICA_TEXT, DOM, LITERA, BUILDING, STROENIE, KVARTIRA, ADDRESS_NOTE, ISTOCHNIK, ZALOBY, ZALOBY_NOTE, TELEFON) values (@newid, getdate(), @pid, 0, @ADR_GOROD_ID, @P_CITY, @ADR_STREET_ID, @P_STREET, @P_HOUSE, @P_HOUSE_LITERA, @P_HOUSE_BUILDING, @P_HOUSE_STROENIE, @P_FLAT, @P_ADDRESS_NOTE, 1, NULL, @P_NOTE, @P_PHONE) end if @check_result = 1 select 'AA' as ACK_RESULT</text>
  704. </query>
  705. </queries>
  706. </CALL_HOME_VISIT>
  707. - <CHECK_PLANNING_ADD_VISIT>
  708. <parent>ACK_COMMON</parent>
  709. - <segments>
  710. - <QUERY_INFO>
  711. <WEB_USER>{P_WEB_USER}</WEB_USER>
  712. <SNILS>{P_SNILS}</SNILS>
  713. <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
  714. <PL_SUBJ_ID>{P_PL_SUBJ_ID}</PL_SUBJ_ID>
  715. <PL_EXAM_ID>{P_PL_EXAM_ID}</PL_EXAM_ID>
  716. <DATE_VISIT>{P_DATE_VISIT}</DATE_VISIT>
  717. </QUERY_INFO>
  718. - <RESULT_CHECK>
  719. <PATIENTS_ID>{PATIENTS_ID}</PATIENTS_ID>
  720. <PATIENTS_NOM>{PATIENTS_NOM}</PATIENTS_NOM>
  721. <PATIENTS_PRENOM>{PATIENTS_PRENOM}</PATIENTS_PRENOM>
  722. <PATIENTS_PATRONYME>{PATIENTS_PATRONYME}</PATIENTS_PATRONYME>
  723. </RESULT_CHECK>
  724. </segments>
  725. - <queries>
  726. - <query>
  727. <order>3</order>
  728. <type>open</type>
  729. <text>declare @pid int, @result_pid int, @result_fio varchar(200) declare @check_result int, @cur_date datetime, @count_clink int declare @clinic_code varchar(100) set @clinic_code = isnull(:P_CLINIC_CODE, '') set @cur_date = round(cast(getdate() as float), 0, 1) set @check_result = 1 if @check_result = 1 and isnull(:CLINIC_ID, 0) = 0 begin set @check_result = 0 select 0 as empty_patient end if @check_result = 1 and not exists(select pl.pl_subj_id from pl_subj pl where pl.pl_subj_id = :P_PL_SUBJ_ID and pl.fm_intorg_id = :CLINIC_ID) begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Расписание не найдено в указанном филиале "' + @clinic_code + '"' as ERR_CODE end if @check_result = 1 and datediff(mi, getdate(), isnull(:P_DATE_VISIT, 0)) < 15 begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Вы не можете записаться на прием задним числом' as ERR_CODE end if @check_result = 1 and isnull(:P_DATE_VISIT, 0) > 0 begin declare @forbid_after_date datetime, @period_allow_create int set @forbid_after_date = null set @period_allow_create = null select @forbid_after_date = forbid_after_date, @period_allow_create = period_allow_create from pl_subj where pl_subj_id = :P_PL_SUBJ_ID if @check_result = 1 and isnull(@forbid_after_date, 0) > 0 and @forbid_after_date < isnull(:P_DATE_VISIT, 0) begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Запись на прием в это расписание возможна только до "' + convert(varchar(10), @forbid_after_date, 104) + '".' as ERR_CODE end if @check_result = 1 and isnull(@period_allow_create, 0) > 0 and @cur_date + @period_allow_create + 1 < isnull(:P_DATE_VISIT, 0) begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Запись на прием в это расписание возможна только на ' + cast(@period_allow_create as varchar(5)) + ' дн. вперед.' as ERR_CODE end end declare @snils varchar(20), @oms_police varchar(60) set @snils = dbo.TrimNumericCode(isnull(cast(:P_SNILS as varchar(20)), '')) set @oms_police = isnull(cast(:P_OMS_POLICE as varchar(60)), '') if @check_result = 1 begin set @pid = 0 if isnull(:P_PID, '') != '' exec pl_GetPatientID 'MMK', :P_PID, '', :P_PID_PIN, @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @oms_police != '' exec pl_GetPatientID 'OMS_POLICE', @oms_police, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @snils != '' exec pl_GetPatientID 'SYS_SNILS', @snils, '', '', @result_pid output, @pid output, @result_fio output end if @check_result = 1 and isnull(@pid, 0) != 0 and exists(select patients_id from patients where patients_id = @pid and isnull(WEB_PLANNING_LOCKED, 0) = 1) begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Для Вас заблокирована онлайн запись на прием. Обратитесь в мед.учреждение для выяснения обстоятельств блокировки записи на прием' as ERR_CODE end if @check_result = 1 and exists(select pl_subj_id from pl_subj where pl_subj_id = :P_PL_SUBJ_ID and isnull(web_only_by_clink, 0) = 1) begin set @count_clink = 0 select top 1 @count_clink = fm_clink_patients.fm_clink_patients_id from fm_clink_patients fm_clink_patients join fm_clink fm_clink on fm_clink.fm_clink_id = fm_clink_patients.fm_clink_id join fm_contr fm_contr on fm_contr.fm_contr_id = fm_clink.fm_contr_id join fm_clink_patients_org fm_clink_patients_org on fm_clink_patients.fm_clink_patients_id = fm_clink_patients_org.fm_clink_patients_id and fm_clink_patients_org.fm_org_id = :CLINIC_ID where fm_contr.suspended = 0 and fm_clink.cancel = 0 and fm_clink_patients.cancel = 0 and fm_clink_patients.date_from <= @cur_date and isnull(fm_clink_patients.date_to, @cur_date) >= @cur_date and isnull(fm_clink_patients.date_cancel, @cur_date + 1) > @cur_date and fm_clink_patients.patients_id = isnull(@pid, -1) if isnull(@count_clink, 0) = 0 begin set @check_result = 0 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Для записи на прием в это расписание Вам необходимо действующее прикрепление к мед.учреждению' as ERR_CODE end end if @check_result = 1 begin if isnull(@pid, 0) != 0 select 'AA' as ACK_RESULT, PATIENTS_ID, NOM as PATIENTS_NOM, PRENOM as PATIENTS_PRENOM, PATRONYME as PATIENTS_PATRONYME from patients where patients_id = @pid else select 'AA' as ACK_RESULT end</text>
  730. </query>
  731. </queries>
  732. </CHECK_PLANNING_ADD_VISIT>
  733. - <PLANNING_ADD_VISIT>
  734. <parent>ACK_COMMON</parent>
  735. - <segments>
  736. - <QUERY_INFO>
  737. <WEB_USER>{P_WEB_USER}</WEB_USER>
  738. <SNILS>{P_SNILS}</SNILS>
  739. <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
  740. <PL_SUBJ_ID>{P_PL_SUBJ_ID}</PL_SUBJ_ID>
  741. <PL_EXAM_ID>{P_PL_EXAM_ID}</PL_EXAM_ID>
  742. <DATE_VISIT>{P_DATE_VISIT}</DATE_VISIT>
  743. <COMMENT_VISIT>{P_COMMENT_VISIT}</COMMENT_VISIT>
  744. <FIO>{P_FIO}</FIO>
  745. <PAT_NOM>{P_PAT_NOM}</PAT_NOM>
  746. <PAT_PRENOM>{P_PAT_PRENOM}</PAT_PRENOM>
  747. <PAT_PATRONYME>{P_PAT_PATRONYME}</PAT_PATRONYME>
  748. <PHONE>{P_PHONE}</PHONE>
  749. </QUERY_INFO>
  750. - <PLANNING_VISIT>
  751. <PLANNING_ID>{PLANNING_ID}</PLANNING_ID>
  752. <NEED_ACCEPT_RECORD>{NEED_ACCEPT_RECORD}</NEED_ACCEPT_RECORD>
  753. </PLANNING_VISIT>
  754. </segments>
  755. - <queries>
  756. - <query>
  757. <order>3</order>
  758. <type>open</type>
  759. <text>declare @pid int, @result_pid int, @result_fio varchar(200), @WebMedecin int declare @p_nom varchar(60), @p_prenom varchar(60), @p_patronyme varchar(60) declare @clinic_code varchar(100) declare @phone_number varchar(100) declare @WEB_USER varchar(60) set @phone_number = isnull(cast(:P_PHONE as varchar(100)), '') set @clinic_code = isnull(:P_CLINIC_CODE, '') set @result_fio = isnull(cast(:P_FIO as varchar(200)), '') set @WEB_USER = isnull(cast(:P_WEB_USER as varchar(60)), '') set @p_nom = isnull(cast(:P_PAT_NOM as varchar(60)), '') set @p_prenom = isnull(cast(:P_PAT_PRENOM as varchar(60)), '') set @p_patronyme = isnull(cast(:P_PAT_PATRONYME as varchar(60)), '') declare @snils varchar(20), @oms_police varchar(60) set @snils = dbo.TrimNumericCode(isnull(cast(:P_SNILS as varchar(20)), '')) set @oms_police = isnull(cast(:P_OMS_POLICE as varchar(60)), '') set @WebMedecin = null select @WebMedecin = medecins_id from medecins where nom = 'WEB' if isnull(@WebMedecin, 0) = 0 select 'AE' as ACK_RESULT, 'Не найден пользователь, ассоциированный с web пользователями [NOM=WEB]' as ERR_CODE else if exists(select prm_value from fm_params where prm_name = 'lock_mobimed_record' and prm_value = '1') select 'AE' as ACK_RESULT, 'Запись в клинику временно заблокирована.' as ERR_CODE else if isnull(:CLINIC_ID, 0) = 0 select 0 as empty_patient else if not exists(select pl.pl_subj_id from pl_subj pl where pl.pl_subj_id = :P_PL_SUBJ_ID and pl.fm_intorg_id = :CLINIC_ID) begin select 'AE' as ACK_RESULT, 'Расписание не найдено в указанном филиале "' + @clinic_code + '"' as ERR_CODE end else if isnull(:P_PID, '') != '' begin exec pl_GetPatientID 'MMK', :P_PID, '', :P_PID_PIN, @result_pid output, @pid output, @result_fio output if @result_pid = 1 begin set @pid = -1 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Пациент не найден в базе данных мед.учреждения' as ERR_CODE end else if @result_pid = 2 begin set @pid = -1 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Указанный PIN код не соответствует пациенту' as ERR_CODE end end else begin set @result_pid = 0 set @pid = 0 if isnull(@pid, 0) = 0 and @oms_police != '' exec pl_GetPatientID 'OMS_POLICE', @oms_police, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @snils != '' exec pl_GetPatientID 'SYS_SNILS', @snils, '', '', @result_pid output, @pid output, @result_fio output if @result_pid != 0 begin set @pid = 0 /* Если раскоментировать этот блок, то анонимная запись будет заблокирована (пациент не найден по СНИЛС, ОМС) if @result_pid = 1 begin set @pid = -1 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Пациент не найден в базе данных мед.учреждения' as ERR_CODE end */ end if isnull(@pid, 0) = 0 begin if @result_fio = '' and isnull(@p_nom, '') = '' begin set @pid = -1 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Для анонимной записи должна быть указана Фамилия, Имя, Отчество' as ERR_CODE end if @phone_number = '' begin set @pid = -1 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Для анонимной записи должен быть указан телефон' as ERR_CODE end end end if isnull(@pid, -1) != -1 BEGIN if datediff(mi, getdate(), isnull(:P_DATE_VISIT, 0)) < 15 select 'AE' as ACK_RESULT, 'Вы не можете записаться на прием задним числом' as ERR_CODE else BEGIN declare @AddVisitResult varchar(2048), @PLANNING_ID int, @Comment varchar(2048) set @Comment = 'Телефон: ' + @phone_number + char(13) + char(10) + 'Повод обращения: ' + isnull(cast(:P_COMMENT_VISIT as varchar(2048)), '') if isnull(@p_nom, '') = '' set @p_nom = @result_fio exec dbo.pl_AddVisit @pid, :P_PL_SUBJ_ID, :P_PL_EXAM_ID, @Comment, :P_DATE_VISIT, @AddVisitResult output, @PLANNING_ID output, @p_nom, @p_prenom, @p_patronyme, 1, @WEB_USER, 'WEB' if isnull(@PLANNING_ID, 0) = 0 select @PLANNING_ID as PLANNING_ID, 'AE' as ACK_RESULT, @AddVisitResult as ERR_CODE else select PLANNING_ID as PLANNING_ID, isnull(NOT_ACCEPTED, 0) as NEED_ACCEPT_RECORD from planning where PLANNING_ID = @PLANNING_ID END END</text>
  760. </query>
  761. </queries>
  762. </PLANNING_ADD_VISIT>
  763. - <VISIT_REPORT>
  764. <parent>ACK_COMMON</parent>
  765. - <segments>
  766. - <QUERY_INFO>
  767. <WEB_USER>{P_WEB_USER}</WEB_USER>
  768. <SNILS>{P_SNILS}</SNILS>
  769. <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
  770. <PLANNING_ID>{P_PLANNING_ID}</PLANNING_ID>
  771. </QUERY_INFO>
  772. - <REPORT_INFO>
  773. <VISIT_NUMBER>{VISIT_NUMBER}</VISIT_NUMBER>
  774. <VISIT_DATE>{VISIT_DATE}</VISIT_DATE>
  775. <PATIENT_FIO>{PATIENT_FIO}</PATIENT_FIO>
  776. <MEDECIN_FIO>{MEDECIN_FIO}</MEDECIN_FIO>
  777. <MEDECIN_SPEC>{MEDECIN_SPEC}</MEDECIN_SPEC>
  778. <EXAM_CODE>{EXAM_CODE}</EXAM_CODE>
  779. <EXAM_NAME>{EXAM_NAME}</EXAM_NAME>
  780. <CABINET>{CABINET}</CABINET>
  781. <VISIT_CREATE_DATE>{VISIT_CREATE_DATE}</VISIT_CREATE_DATE>
  782. <PLANNING_ID>{PLANNING_ID}</PLANNING_ID>
  783. <PATIENT_ID>{PATIENT_ID}</PATIENT_ID>
  784. </REPORT_INFO>
  785. </segments>
  786. - <queries>
  787. - <query>
  788. <order>3</order>
  789. <type>open</type>
  790. <text>declare @pid int, @result_pid int, @result_fio varchar(200) declare @check_result int declare @planning_id int set @check_result = 1 if @check_result = 1 and isnull(:CLINIC_ID, 0) = 0 begin set @check_result = 0 select 0 as empty_patient end set @planning_id = isnull(:P_PLANNING_ID, 0) if @check_result = 1 and @planning_id = 0 begin set @check_result = 0 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Не передан параметр с идентификатором приема [PLANNING_ID]' as ERR_CODE end declare @snils varchar(20), @oms_police varchar(60) set @snils = dbo.TrimNumericCode(isnull(cast(:P_SNILS as varchar(20)), '')) set @oms_police = isnull(cast(:P_OMS_POLICE as varchar(60)), '') if @check_result = 1 begin set @pid = 0 if isnull(:P_PID, '') != '' exec pl_GetPatientID 'MMK', :P_PID, '', :P_PID_PIN, @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @oms_police != '' exec pl_GetPatientID 'OMS_POLICE', @oms_police, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @snils != '' exec pl_GetPatientID 'SYS_SNILS', @snils, '', '', @result_pid output, @pid output, @result_fio output end if @check_result = 1 begin if not exists (select pl.planning_id from planning pl inner join pl_subj on pl_subj.pl_subj_id = pl.pl_subj_id where pl.planning_id = @planning_id and isnull(pl.status, 0) = 0 and isnull(pl.cancelled, 0) = 0 and (isnull(pl.web_user, '') = :P_WEB_USER or pl.patients_id = @pid)) begin set @check_result = 0 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Запись на прием к врачу не найдена в базе мед.учреждения. Возможно запись на прием была отменена.' as ERR_CODE end else begin select pl.planning_id as PLANNING_ID, '000-000-' + cast(pl.planning_id as varchar(10)) as VISIT_NUMBER, pl.date_start as VISIT_DATE, case when p.patients_id is null then isnull(pl.nom, '') + ' ' + isnull(pl.prenom, '') + ' ' + isnull(pl.patronyme, '') else p.fio end as PATIENT_FIO, isnull(m.nom, '') + ' ' + isnull(m.prenom, '') as MEDECIN_FIO, ms.name as MEDECIN_SPEC, pl_exam.code as EXAM_CODE, isnull(pl_exam.name, pl_exam.code) as EXAM_NAME, pl.LIEU as CABINET, pl.create_date_time as VISIT_CREATE_DATE, pl.patients_id as PATIENT_ID from planning pl inner join pl_subj on pl_subj.pl_subj_id = pl.pl_subj_id left outer join patients p on p.patients_id = pl.patients_id left outer join medecins m on m.medecins_id = pl_subj.medecins_id left outer join specialisation ms on ms.specialisation_id = pl_subj.specialisation_id left outer join pl_exam on pl_exam.pl_exam_id = pl.pl_exam_id where pl.planning_id = @planning_id end end</text>
  791. </query>
  792. </queries>
  793. </VISIT_REPORT>
  794. - <PLANNING_CANCEL_VISIT>
  795. <parent>ACK_COMMON</parent>
  796. - <segments>
  797. - <QUERY_INFO>
  798. <WEB_USER>{P_WEB_USER}</WEB_USER>
  799. <SNILS>{P_SNILS}</SNILS>
  800. <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
  801. <PLANNING_ID>{P_PLANNING_ID}</PLANNING_ID>
  802. <CANCEL_COMMENT>{P_CANCEL_COMMENT}</CANCEL_COMMENT>
  803. </QUERY_INFO>
  804. </segments>
  805. - <queries>
  806. - <query>
  807. <order>3</order>
  808. <type>open</type>
  809. - <text>
  810. declare @pid int, @result_pid int, @result_fio varchar(200) declare @snils varchar(20), @oms_police varchar(60) declare @WEB_USER varchar(60), @pl_web_user varchar(60) set @WEB_USER = isnull(:P_WEB_USER, '') set @snils = dbo.TrimNumericCode(isnull(cast(:P_SNILS as varchar(20)), '')) set @oms_police = isnull(cast(:P_OMS_POLICE as varchar(60)), '') if exists(select prm_value from fm_params where prm_name = 'lock_mobimed_record' and prm_value = '1') begin set @pid = -1 select 'AE' as ACK_RESULT, 'Запись в клинику временно заблокирована.' as ERR_CODE end else if isnull(:P_PID, '') != '' begin exec pl_GetPatientID 'MMK', :P_PID, '', :P_PID_PIN, @result_pid output, @pid output, @result_fio output if @result_pid = 1 begin set @pid = -1 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Пациент не найден в базе данных мед.учреждения' as ERR_CODE end else if @result_pid = 2 begin set @pid = -1 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Указанный PIN код не соответствует пациенту' as ERR_CODE end end else begin set @result_pid = 0 set @pid = 0 if isnull(@pid, 0) = 0 and @oms_police != '' exec pl_GetPatientID 'OMS_POLICE', @oms_police, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @snils != '' exec pl_GetPatientID 'SYS_SNILS', @snils, '', '', @result_pid output, @pid output, @result_fio output if @result_pid != 0 set @pid = 0 end if isnull(:CLINIC_ID, 0) = 0 or @pid = -1 select 0 as empty_patient else BEGIN declare @planning_id int, @WebMedecin int, @pl_id int, @pl_pid int set @WebMedecin = null select @WebMedecin = medecins_id from medecins where nom = 'WEB' if isnull(@WebMedecin, 0) = 0 select 'AE' as ACK_RESULT, 'Не найден пользователь, ассоциированный с web пользователями [NOM=WEB]' as ERR_CODE else begin set @planning_id = isnull(:P_PLANNING_ID, 0) set @pl_id = 0 select @pl_id = pl.planning_id, @pl_pid = pl.patients_id, @pl_web_user = pl.web_user from planning pl where pl.planning_id = @planning_id if isnull(@pl_id, 0) = 0 select 'AE' as ACK_RESULT, 'Отменяемая запись на прием не найдена в базе данных' as ERR_CODE if isnull(@pid, 0) != isnull(@pl_pid, 0) and isnull(@WEB_USER, '') != isnull(@pl_web_user, '') select 'AE' as ACK_RESULT, 'Отменяемая запись на прием не принадлежит текущему пациенту' as ERR_CODE else begin update PLANNING set CANCELLED = 1, REASON_CANCEL = :P_CANCEL_COMMENT, MEDECINS_MODIFY_ID = @WebMedecin, MODIFY_DATE_TIME = GetDate(), DATE_CANCEL = GetDate() where PLANNING_ID = @planning_id
  811. - <!-- Нужно хоть что то вернуть, чтобы не было ошибки!!!!
  812. -->
  813. select 0 as empty_patient end end END
  814. </text>
  815. </query>
  816. </queries>
  817. </PLANNING_CANCEL_VISIT>
  818. - <MESSAGES_QUERY>
  819. <parent>ACK_PID_COMMON</parent>
  820. - <segments>
  821. - <QUERY_INFO>
  822. <MSG_THEME_ID>{P_MSG_THEME_ID}</MSG_THEME_ID>
  823. </QUERY_INFO>
  824. - <MSG_INFO query="msg_list">
  825. <MSG_ID>{MSG_ID}</MSG_ID>
  826. <MSG_THEME_ID>{MSG_THEME_ID}</MSG_THEME_ID>
  827. <MSG_ANSWER_ID>{MSG_ANSWER_ID}</MSG_ANSWER_ID>
  828. <MEDECINS_ID>{MEDECINS_ID}</MEDECINS_ID>
  829. <MEDECINS_NOM>{MEDECINS_NOM}</MEDECINS_NOM>
  830. <MSG_SUBJECT>{MSG_SUBJECT}</MSG_SUBJECT>
  831. <MSG_TEXT>{MSG_TEXT}</MSG_TEXT>
  832. </MSG_INFO>
  833. </segments>
  834. - <queries>
  835. - <query>
  836. <order>3</order>
  837. <type>open</type>
  838. <name>msg_list</name>
  839. <text>if isnull(:IN_PID, 0) = 0 select 0 as empty_patient else if isnull(:P_MSG_THEME_ID, 0) = 0 select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Не задан ID темы для поиска сообщений' as ERR_CODE else BEGIN select m.MSG_MESSAGES_ID as MSG_ID, m.MSG_MESSAGES_ID as MSG_THEME_ID, m.SOURCE as MSG_ANSWER_ID, m.SENDER_ID as MEDECINS_ID, m.SUBJECT as MSG_SUBJECT, m.BODY_PLAIN as MSG_TEXT, (select top 1 mm.nom + ' ' + mm.prenom from MSG_RECEIVING mrr join medecins mm on mm.medecins_id = mrr.[USER_ID] where mrr.MESSAGES_ID = m .MSG_MESSAGES_ID) as MEDECINS_NOM from MSG_MESSAGES m inner join PATIENTS P on P.PATIENTS_ID = m.RESOURCE_ID where m.MSG_MESSAGES_ID = :P_MSG_THEME_ID and m.CATEGORY = 1 and P.PATIENTS_ID = :IN_PID union all select m.MSG_MESSAGES_ID as MSG_ID, m.[ROOT] as MSG_THEME_ID, m.SOURCE as MSG_ANSWER_ID, m.SENDER_ID as MEDECINS_ID, m.SUBJECT as MSG_SUBJECT, m.BODY_PLAIN as MSG_TEXT, (select top 1 mm.nom + ' ' + mm.prenom from MSG_RECEIVING mrr join medecins mm on mm.medecins_id = mrr.[USER_ID] where mrr.MESSAGES_ID = m .MSG_MESSAGES_ID) as MEDECINS_NOM from MSG_MESSAGES m inner join PATIENTS P on P.PATIENTS_ID = m.RESOURCE_ID left outer join MSG_MESSAGES mr on mr.MSG_MESSAGES_ID = m.[ROOT] where m.[ROOT] = :P_MSG_THEME_ID and m.CATEGORY = 1 and P.PATIENTS_ID = :IN_PID END</text>
  840. </query>
  841. </queries>
  842. </MESSAGES_QUERY>
  843. - <NEW_MESSAGE>
  844. <parent>ACK_PID_COMMON</parent>
  845. - <segments>
  846. - <MSG_INFO>
  847. <MSG_THEME_ID>{P_MSG_THEME_ID}</MSG_THEME_ID>
  848. <MSG_ANSWER_ID>{P_MSG_ANSWER_ID}</MSG_ANSWER_ID>
  849. <MEDECINS_ID>{P_MEDECINS_ID}</MEDECINS_ID>
  850. <MSG_SUBJECT>{P_MSG_SUBJECT}</MSG_SUBJECT>
  851. <MSG_TEXT>{P_MSG_TEXT}</MSG_TEXT>
  852. </MSG_INFO>
  853. </segments>
  854. - <queries>
  855. - <query>
  856. <order>3</order>
  857. <type>open</type>
  858. <text>if isnull(:IN_PID, 0) = 0 select 0 as empty_patient else if not exists(select MSG_MESSAGES_ID from MSG_MESSAGES where MSG_MESSAGES_ID = isnull(:P_MSG_ANSWER_ID, 0)) select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Не найдено исходное сообщение для входящего сообщения пациента [' + cast( :P_MSG_ANSWER_ID as varchar(10)) + ']' as ERR_CODE else if not exists(select MSG_MESSAGES_ID from MSG_MESSAGES where MSG_MESSAGES_ID = isnull(:P_MSG_THEME_ID, 0)) select 'AE' as ACK_RESULT, 'ОШИБКА!!!!, Не найдена тема входящего сообщения пациента [' + cast(:P_MSG_THEME_ID as varchar(10)) + ']' as ERR_CODE else BEGIN declare @date_to datetime set @date_to = getdate() + 60 exec [dbo].[SendMessage] 1, -- тип отправителя 0 врач, 1 пациент NULL, -- отправитель для типов 0,1; может быть NULL (письмо от пациента) '', -- строковый адрес отправителя для типов 2,3, или '' 1, -- категория (0=обычное, 1=По пациенту) :IN_PID -- (если Category=1, то ID пациента, для Category=0 этот параметр игнорируется) 0, -- тип получателя 0..3 :P_MEDECINS_ID, -- Получатель (ID либо из таблицы врачей, либо из таблицы постов); может быть NULL (письмо пациенту) '', -- строковый адрес получателя для типов 2,3, или '' :P_MSG_SUBJECT, -- Тема сообщения :P_MSG_TEXT, -- Текст сообщения 0, -- Важность (0=Обычная, 1=Повышенная) @date_to, -- Дата, до которой существует сообщение. :P_MSG_ANSWER_ID, -- Ид предыдущего сообщения в цепочке сообщений ("ответ на") :P_MSG_THEME_ID -- Ид корневого сообщения в цепочке сообщений END</text>
  859. </query>
  860. </queries>
  861. </NEW_MESSAGE>
  862. - <CHECK_HOSPITAL>
  863. <parent>ACK_COMMON1</parent>
  864. - <segments>
  865. - <QUERY_INFO>
  866. <MEDECIN_SNILS>{P_MEDECIN_SNILS}</MEDECIN_SNILS>
  867. <SPEC_NAME>{P_SPEC_NAME}</SPEC_NAME>
  868. <SERV_CODE>{P_SERV_CODE}</SERV_CODE>
  869. <PATIENTS_SNILS>{P_PATIENTS_SNILS}</PATIENTS_SNILS>
  870. <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
  871. - <!-- 'cach' - за наличные, 'dms' по ДМС прикреплению, 'oms' - по ОМС прикреплению
  872. -->
  873. <SERV_PAY_TYPE>{P_SERV_PAY_TYPE}</SERV_PAY_TYPE>
  874. </QUERY_INFO>
  875. - <RESULT_INFO>
  876. <MEDECIN_SNILS_OK>{MEDECIN_SNILS_OK}</MEDECIN_SNILS_OK>
  877. <SPEC_NAME_OK>{SPEC_NAME_OK}</SPEC_NAME_OK>
  878. <SERV_CODE_OK>{SERV_CODE_OK}</SERV_CODE_OK>
  879. </RESULT_INFO>
  880. </segments>
  881. - <queries>
  882. - <query>
  883. <order>3</order>
  884. <type>open</type>
  885. <text>declare @P_MEDECIN_SNILS varchar(60), @P_SPEC_NAME varchar(60), @P_SERV_CODE varchar(60) declare @check_result bit, @curdate datetime, @pid int, @result_pid int, @result_fio varchar(100), @CLINIC_ID int declare @snils varchar(20), @oms_police varchar(60) declare @P_SERV_PAY_TYPE varchar(20) declare @MEDECIN_SNILS_OK bit, @SPEC_NAME_OK bit, @SERV_CODE_OK bit set @check_result = 1 set @curdate = getdate() set @P_MEDECIN_SNILS = dbo.TrimNumericCode(isnull(:P_MEDECIN_SNILS, '')) set @P_SPEC_NAME = isnull(:P_SPEC_NAME, '') set @CLINIC_ID = :CLINIC_ID set @P_SERV_PAY_TYPE = isnull(:P_SERV_PAY_TYPE , 'cach, dms, oms') set @snils = dbo.TrimNumericCode(isnull(cast(:P_PATIENTS_SNILS as varchar(20)), '')) set @oms_police = isnull(cast(:P_OMS_POLICE as varchar(60)), '') set @MEDECIN_SNILS_OK = 0 set @SPEC_NAME_OK = 0 set @SERV_CODE_OK = 0 declare @PP_SERV_CODE varchar(60) set @PP_SERV_CODE = isnull(:P_SERV_CODE, '') set @P_SERV_CODE = '' if @PP_SERV_CODE != '' begin select @P_SERV_CODE = minzdrav_code from fm_serv where minzdrav_code like '_' + @PP_SERV_CODE if isnull(@P_SERV_CODE, '') = '' begin select 'AE' as ACK_RESULT, 'Услуга не найдена по коду "' + @PP_SERV_CODE + '"' as ERR_CODE set @check_result = 0 end end if isnull(@P_SERV_CODE, '') != '' begin set @pid = 0 if isnull(@pid, 0) = 0 and @oms_police != '' exec pl_GetPatientID 'OMS_POLICE', @oms_police, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @snils != '' exec pl_GetPatientID 'SYS_SNILS', @snils, '', '', @result_pid output, @pid output, @result_fio output if exists(select fm_serv.fm_serv_id from fm_serv join pl_exam e on e.fm_serv_id = fm_serv.fm_serv_id and isnull(e.archive, 0) = 0 join pl_subj_exam pl_e on pl_e.pl_exam_id = e.pl_exam_id join pl_subj pl on pl.pl_subj_id = pl_e.pl_subj_id and isnull(pl.archive, 0) = 0 and pl.fm_intorg_id = @CLINIC_ID where minzdrav_code = @P_SERV_CODE and isnull(state, 'A') = 'A' and (date_from <= @curdate or date_from is null) and (date_to >= @curdate or date_to is null) ) and dbo.check_serv_paytype(@P_SERV_CODE, @pid, @CLINIC_ID, @P_SERV_PAY_TYPE) = 1 set @SERV_CODE_OK = 1 end if @P_MEDECIN_SNILS != '' if exists(select medecins_id from medecins where sys_snils = @P_MEDECIN_SNILS) set @MEDECIN_SNILS_OK = 1 if @P_SPEC_NAME != '' begin if exists(select top 1 sp.specialisation_id from pl_subj pl join specialisation sp on sp.specialisation_id = pl.specialisation_id where isnull(pl.web_access, 0) = 1 and isnull(pl.archive, 0) = 0 and pl.fm_intorg_id = @CLINIC_ID and sp.name like @P_SPEC_NAME + '%') set @SPEC_NAME_OK = 1 end select @SERV_CODE_OK as SERV_CODE_OK, @MEDECIN_SNILS_OK as MEDECIN_SNILS_OK, @SPEC_NAME_OK as SPEC_NAME_OK</text>
  886. </query>
  887. </queries>
  888. </CHECK_HOSPITAL>
  889. - <GET_SERV_LIST>
  890. <parent>ACK_COMMON1</parent>
  891. - <segments>
  892. - <QUERY_INFO>
  893. <SNILS>{P_SNILS}</SNILS>
  894. <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
  895. - <!-- 'cach' - за наличные, 'dms' по ДМС прикреплению, 'oms' - по ОМС прикреплению
  896. -->
  897. <SERV_PAY_TYPE>{P_SERV_PAY_TYPE}</SERV_PAY_TYPE>
  898. </QUERY_INFO>
  899. - <SERV_LIST query="serv_query">
  900. <SERV_CODE>{SERV_CODE}</SERV_CODE>
  901. </SERV_LIST>
  902. </segments>
  903. - <queries>
  904. - <query>
  905. <order>3</order>
  906. <name>serv_query</name>
  907. <type>open</type>
  908. <text>declare @check_result bit, @curdate datetime, @pid int, @result_pid int, @result_fio varchar(100), @CLINIC_ID int declare @snils varchar(20), @oms_police varchar(60) declare @P_SERV_PAY_TYPE varchar(20) declare @CASH_PRICE_TYPE int, @CASH_DEVISE int, @C1 varchar(1), @C2 varchar(1), @C3 varchar(1) set @check_result = 1 set @curdate = getdate() set @CLINIC_ID = :CLINIC_ID set @P_SERV_PAY_TYPE = isnull(:P_SERV_PAY_TYPE , 'cach, dms, oms') set @snils = dbo.TrimNumericCode(isnull(cast(:P_SNILS as varchar(20)), '')) set @oms_police = isnull(cast(:P_OMS_POLICE as varchar(60)), '') if @check_result = 1 begin set @pid = 0 if isnull(@pid, 0) = 0 and @oms_police != '' exec pl_GetPatientID 'OMS_POLICE', @oms_police, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @snils != '' exec pl_GetPatientID 'SYS_SNILS', @snils, '', '', @result_pid output, @pid output, @result_fio output end if @check_result = 1 BEGIN if CHARINDEX('cach', @P_SERV_PAY_TYPE) != 0 or CHARINDEX('cash', @P_SERV_PAY_TYPE) != 0 begin select @cash_price_type = cast(prm_value as int) from fm_params where prm_name = 'cash_price' select @cash_devise = cast(prm_value as int) from fm_params where prm_name = 'cash_devise' select distinct fm_serv.minzdrav_code as serv_code from fm_serv fm_serv join fm_servprice fm_servprice on fm_serv.fm_serv_id = fm_servprice.fm_serv_id join pl_exam e on e.fm_serv_id = fm_serv.fm_serv_id and isnull(e.archive, 0) = 0 join pl_subj_exam pl_e on pl_e.pl_exam_id = e.pl_exam_id join pl_subj pl on pl.pl_subj_id = pl_e.pl_subj_id and isnull(pl.archive, 0) = 0 and pl.fm_intorg_id = @CLINIC_ID where isnull(fm_serv.state, 'A') = 'A' and (fm_serv.date_from <= @curdate or fm_serv.date_from is null) and (fm_serv.date_to >= @curdate or fm_serv.date_to is null) and fm_servprice.date_from <= @curdate and fm_servprice.fm_pricetype_id = @cash_price_type and fm_servprice.fm_devise_id = @cash_devise end else if @pid != 0 and (CHARINDEX('dms', @P_SERV_PAY_TYPE) != 0 or CHARINDEX('oms', @P_SERV_PAY_TYPE) != 0) begin set @C1 = 'X' set @C2 = 'X' set @C3 = 'X' if CHARINDEX('dms', @P_SERV_PAY_TYPE) != 0 set @C1 = 'D' if CHARINDEX('oms', @P_SERV_PAY_TYPE) != 0 set @C2 = 'O' select distinct fm_serv.minzdrav_code as serv_code from fm_clink_patients cp join fm_clink_patients_org fm_clink_patients_org on cp.fm_clink_patients_id = fm_clink_patients_org.fm_clink_patients_id and fm_clink_patients_org.fm_org_id = @CLINIC_ID join fm_clink cl on cl.fm_clink_id = cp.fm_clink_id join fm_contr c on c.fm_contr_id = cl.fm_contr_id and c.INSURANCE_TYPE in (@C1, @C2, @C3) join fm_prog_serv ps on ps.fm_clink_id = cl.fm_clink_id and isnull(ps.cancel, 0) = 0 join fm_serv fm_serv on fm_serv.fm_serv_id = ps.fm_serv_id join pl_exam e on e.fm_serv_id = fm_serv.fm_serv_id and isnull(e.archive, 0) = 0 join pl_subj_exam pl_e on pl_e.pl_exam_id = e.pl_exam_id join pl_subj pl on pl.pl_subj_id = pl_e.pl_subj_id and isnull(pl.archive, 0) = 0 and pl.fm_intorg_id = @CLINIC_ID where c.suspended = 0 and cl.cancel = 0 and cp.cancel = 0 and cp.date_from <= @curdate and isnull(cp.date_to, @curdate) >= @curdate and isnull(cp.date_cancel, @curdate + 1) > @curdate and cp.patients_id = isnull(@pid, -1) and isnull(fm_serv.state, 'A') = 'A' and (fm_serv.date_from <= @curdate or fm_serv.date_from is null) and (fm_serv.date_to >= @curdate or fm_serv.date_to is null) union select distinct fm_serv.minzdrav_code as serv_code from fm_clink_patients cp join fm_clink_patients_org fm_clink_patients_org on cp.fm_clink_patients_id = fm_clink_patients_org.fm_clink_patients_id and fm_clink_patients_org.fm_org_id = @CLINIC_ID join fm_clink cl on cl.fm_clink_id = cp.fm_clink_id join fm_contr c on c.fm_contr_id = cl.fm_contr_id and c.INSURANCE_TYPE in (@C1, @C2, @C3) join fm_clink_prog cps on cps.fm_clink_id = cl.fm_clink_id and isnull(cps.cancel, 0) = 0 join fm_prog_serv ps on ps.fm_prog_id = cps.fm_prog_id and isnull(ps.cancel, 0) = 0 join fm_serv fm_serv on fm_serv.fm_serv_id = ps.fm_serv_id join pl_exam e on e.fm_serv_id = fm_serv.fm_serv_id and isnull(e.archive, 0) = 0 join pl_subj_exam pl_e on pl_e.pl_exam_id = e.pl_exam_id join pl_subj pl on pl.pl_subj_id = pl_e.pl_subj_id and isnull(pl.archive, 0) = 0 and pl.fm_intorg_id = @CLINIC_ID where c.suspended = 0 and cl.cancel = 0 and cp.cancel = 0 and cp.date_from <= @curdate and isnull(cp.date_to, @curdate) >= @curdate and isnull(cp.date_cancel, @curdate + 1) > @curdate and cp.patients_id = isnull(@pid, -1) and isnull(fm_serv.state, 'A') = 'A' and (fm_serv.date_from <= @curdate or fm_serv.date_from is null) and (fm_serv.date_to >= @curdate or fm_serv.date_to is null) end END ELSE select 0 as empty_patient</text>
  909. </query>
  910. </queries>
  911. </GET_SERV_LIST>
  912. - <GET_SERV_INFO>
  913. <parent>ACK_COMMON1</parent>
  914. - <segments>
  915. - <QUERY_INFO>
  916. <SERV_CODE>{P_SERV_CODE}</SERV_CODE>
  917. </QUERY_INFO>
  918. - <SERV_INFO>
  919. <SERV_NAME>{SERV_NAME}</SERV_NAME>
  920. <SERV_PRICE>{SERV_PRICE}</SERV_PRICE>
  921. </SERV_INFO>
  922. </segments>
  923. - <queries>
  924. - <query>
  925. <order>3</order>
  926. <type>open</type>
  927. <text>declare @check_result bit, @curdate datetime, @CLINIC_ID int declare @P_SERV_CODE varchar(60) declare @CASH_PRICE_TYPE int, @CASH_DEVISE int set @check_result = 1 set @curdate = getdate() set @CLINIC_ID = :CLINIC_ID declare @PP_SERV_CODE varchar(60) set @PP_SERV_CODE = isnull(:P_SERV_CODE, '') set @P_SERV_CODE = '' select @P_SERV_CODE = minzdrav_code from fm_serv where minzdrav_code like '_' + @PP_SERV_CODE if isnull(@P_SERV_CODE, '') = '' begin select 'AE' as ACK_RESULT, 'Услуга не найдена по коду "' + @PP_SERV_CODE + '"' as ERR_CODE set @check_result = 0 end if @check_result = 1 begin select @cash_price_type = cast(prm_value as int) from fm_params where prm_name = 'cash_price' select @cash_devise = cast(prm_value as int) from fm_params where prm_name = 'cash_devise' select top 1 fm_serv.label as SERV_NAME, fm_servprice.price as SERV_PRICE from fm_serv fm_serv join fm_servprice fm_servprice on fm_serv.fm_serv_id = fm_servprice.fm_serv_id where fm_serv.minzdrav_code = @P_SERV_CODE and isnull(fm_serv.state, 'A') = 'A' and (fm_serv.date_from <= @curdate or fm_serv.date_from is null) and (fm_serv.date_to >= @curdate or fm_serv.date_to is null) and fm_servprice.date_from <= @curdate and fm_servprice.fm_pricetype_id = @cash_price_type and fm_servprice.fm_devise_id = @cash_devise order by fm_servprice.date_from desc end ELSE select 0 as empty_patient</text>
  928. </query>
  929. </queries>
  930. </GET_SERV_INFO>
  931. - <GET_MEDECINS>
  932. <parent>ACK_COMMON1</parent>
  933. - <segments>
  934. - <QUERY_INFO>
  935. <SERV_CODE>{P_SERV_CODE}</SERV_CODE>
  936. <SNILS>{P_SNILS}</SNILS>
  937. <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
  938. - <!-- 'cach' - за наличные, 'dms' по ДМС прикреплению, 'oms' - по ОМС прикреплению
  939. -->
  940. <SERV_PAY_TYPE>{P_SERV_PAY_TYPE}</SERV_PAY_TYPE>
  941. </QUERY_INFO>
  942. - <MEDECINS_LIST query="medecins_query">
  943. <SNILS>{SNILS}</SNILS>
  944. <FIO>{FIO}</FIO>
  945. </MEDECINS_LIST>
  946. </segments>
  947. - <queries>
  948. - <query>
  949. <order>3</order>
  950. <name>medecins_query</name>
  951. <type>open</type>
  952. <text>declare @check_result bit, @curdate datetime, @pid int, @result_pid int, @result_fio varchar(100), @CLINIC_ID int declare @snils varchar(20), @oms_police varchar(60) declare @P_SERV_PAY_TYPE varchar(20), @P_SERV_CODE varchar(20) set @check_result = 1 set @curdate = getdate() set @CLINIC_ID = :CLINIC_ID set @P_SERV_PAY_TYPE = isnull(:P_SERV_PAY_TYPE , 'cach, dms, oms') set @snils = dbo.TrimNumericCode(isnull(cast(:P_SNILS as varchar(20)), '')) set @oms_police = isnull(cast(:P_OMS_POLICE as varchar(60)), '') declare @PP_SERV_CODE varchar(60) set @PP_SERV_CODE = isnull(:P_SERV_CODE, '') set @P_SERV_CODE = '' select @P_SERV_CODE = minzdrav_code from fm_serv where minzdrav_code like '_' + @PP_SERV_CODE if isnull(@P_SERV_CODE, '') = '' begin select 'AE' as ACK_RESULT, 'Услуга не найдена по коду "' + @PP_SERV_CODE + '"' as ERR_CODE set @check_result = 0 end if @check_result = 1 begin set @pid = 0 if isnull(@pid, 0) = 0 and @oms_police != '' exec pl_GetPatientID 'OMS_POLICE', @oms_police, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @snils != '' exec pl_GetPatientID 'SYS_SNILS', @snils, '', '', @result_pid output, @pid output, @result_fio output end /* if @check_result = 1 set @check_result = dbo.check_serv_paytype(@P_SERV_CODE, @pid, @CLINIC_ID, @P_SERV_PAY_TYPE) */ if @check_result = 1 begin select distinct m.SNILS, m.NOM + ' ' + m.PRENOM as FIO from fm_serv join pl_exam pl_e on pl_e.fm_serv_id = fm_serv.fm_serv_id join pl_subj_exam se on se.pl_exam_id = pl_e.pl_exam_id join pl_subj pl_s on se.pl_subj_id = pl_s.pl_subj_id join medecins m on m.medecins_id = pl_s.medecins_id where fm_serv.minzdrav_code = @P_SERV_CODE and isnull(m.archive, 0) = 0 end if @check_result = 0 select 0 as empty_patient</text>
  953. </query>
  954. </queries>
  955. </GET_MEDECINS>
  956. - <GET_MEDECIN_INFO>
  957. <parent>ACK_COMMON1</parent>
  958. - <segments>
  959. - <QUERY_INFO>
  960. <MEDECIN_SNILS>{P_MEDECIN_SNILS}</MEDECIN_SNILS>
  961. </QUERY_INFO>
  962. - <MEDECINS_INFO>
  963. <NOM>{NOM}</NOM>
  964. <PRENOM>{PRENOM}</PRENOM>
  965. <PHOTO>{BIN_PHOTO}</PHOTO>
  966. <EDUCATION>{EDUCATION}</EDUCATION>
  967. <DEGREE>{DEGREE}</DEGREE>
  968. <SPECIALIZATION>{SPECIALIZATION}</SPECIALIZATION>
  969. <EXPERIENCE>{EXPERIENCE}</EXPERIENCE>
  970. <CONFERENCES>{CONFERENCES}</CONFERENCES>
  971. <HOBBIES>{HOBBIES}</HOBBIES>
  972. <DESCRIPTION>{DESCRIPTION}</DESCRIPTION>
  973. <SCHEDULE_TEXT>{SCHEDULE_TEXT}</SCHEDULE_TEXT>
  974. </MEDECINS_INFO>
  975. </segments>
  976. - <queries>
  977. - <query>
  978. <order>3</order>
  979. <type>open</type>
  980. <text>declare @check_result bit, @curdate datetime, @CLINIC_ID int declare @P_MEDECIN_SNILS varchar(60) set @check_result = 1 set @curdate = getdate() set @CLINIC_ID = :CLINIC_ID set @P_MEDECIN_SNILS = dbo.TrimNumericCode(isnull(:P_MEDECIN_SNILS, '')) if @P_MEDECIN_SNILS = '' begin select 'AE' as ACK_RESULT, 'Не задан СНИЛС врача для поиска' as ERR_CODE set @check_result = 0 end if @check_result = 1 begin select m.nom, m.prenom, mi.education, mi.degree, mi.specialization, mi.experience, mi.conferences, mi.hobbies, mi.description, /* mi.photo */ NULL as BIN_PHOTO, dbo.pl_GetSubjDayParamText(pl_subj.pl_subj_id, @curdate) as SCHEDULE_TEXT from medecins m left outer join medecins_info mi on mi.medecins_id = m.medecins_id left outer loop join pl_subj on pl_subj.medecins_id = m.medecins_id and isnull(pl_subj.archive, 0) = 0 and pl_subj.fm_intorg_id = @CLINIC_ID where m.sys_snils = @P_MEDECIN_SNILS and isnull(m.archive, 0) = 0 end if @check_result = 0 select 0 as empty_patient</text>
  981. </query>
  982. </queries>
  983. </GET_MEDECIN_INFO>
  984. - <GET_MEDECIN_PLANNING_DATES>
  985. <parent>ACK_COMMON1</parent>
  986. - <segments>
  987. - <QUERY_INFO>
  988. <SERV_CODE>{P_SERV_CODE}</SERV_CODE>
  989. <SNILS>{P_SNILS}</SNILS>
  990. <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
  991. - <!-- 'cach' - за наличные, 'dms' по ДМС прикреплению, 'oms' - по ОМС прикреплению
  992. -->
  993. <SERV_PAY_TYPE>{P_SERV_PAY_TYPE}</SERV_PAY_TYPE>
  994. <MEDECIN_SNILS>{P_MEDECIN_SNILS}</MEDECIN_SNILS>
  995. </QUERY_INFO>
  996. - <DATE_LIST query="dates_query">
  997. <FREE_DATE>{FREE_DATE}</FREE_DATE>
  998. </DATE_LIST>
  999. </segments>
  1000. - <queries>
  1001. - <query>
  1002. <order>3</order>
  1003. <name>dates_query</name>
  1004. <type>open</type>
  1005. <text>declare @WebMedecin int declare @QuoteLimited bit, @QuoteLimit int, @QuoteCnt int declare @pl_subj_id int, @P_PL_DATE datetime, @PL_DATE datetime, @P_DAY_COUNT int declare @PERIOD_ALLOW_CREATE int declare @check_result bit, @result_pid int, @pid int, @result_fio varchar(100), @CLINIC_ID int declare @P_MEDECIN_SNILS varchar(20), @snils varchar(20), @oms_police varchar(60) declare @P_SERV_PAY_TYPE varchar(20), @P_SERV_CODE varchar(20) set @check_result = 1 set @P_PL_DATE = cast(round(cast(GetDate() as float), 0, 1) as datetime) set @P_DAY_COUNT = 30 set @CLINIC_ID = :CLINIC_ID set @P_SERV_PAY_TYPE = isnull(:P_SERV_PAY_TYPE , 'cach, dms, oms') set @snils = dbo.TrimNumericCode(isnull(cast(:P_SNILS as varchar(20)), '')) set @oms_police = isnull(cast(:P_OMS_POLICE as varchar(60)), '') set @P_MEDECIN_SNILS = dbo.TrimNumericCode(isnull(:P_MEDECIN_SNILS, '')) declare @PP_SERV_CODE varchar(60) set @PP_SERV_CODE = isnull(:P_SERV_CODE, '') set @P_SERV_CODE = '' select @P_SERV_CODE = minzdrav_code from fm_serv where minzdrav_code like '_' + @PP_SERV_CODE if isnull(@P_SERV_CODE, '') = '' begin select 'AE' as ACK_RESULT, 'Услуга не найдена по коду "' + @PP_SERV_CODE + '"' as ERR_CODE set @check_result = 0 end if @check_result = 1 begin set @WebMedecin = null select top 1 @WebMedecin = medecins_id from medecins where nom = 'WEB' if isnull(@WebMedecin, 0) = 0 begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Не найден пользователь, ассоциированный с web пользователями [NOM=WEB]' as ERR_CODE end end if @check_result = 1 begin set @pl_subj_id = NULL select top 1 @pl_subj_id = pl_s.pl_subj_id from pl_subj pl_s inner join medecins m on m.medecins_id = pl_s.medecins_id inner join pl_subj_exam se on se.pl_subj_id = pl_s.pl_subj_id inner join pl_exam pl_e on se.pl_exam_id = pl_e.pl_exam_id inner join fm_serv fm_serv on pl_e.fm_serv_id = fm_serv.fm_serv_id where fm_serv.minzdrav_code = @P_SERV_CODE and m.sys_snils = @P_MEDECIN_SNILS if isnull(@pl_subj_id, 0) = 0 begin select 'AE' as ACK_RESULT, 'Не найдено расписание приема по коду услуги и СНИЛС врача' as ERR_CODE set @check_result = 0 end end if @check_result = 1 BEGIN set @PERIOD_ALLOW_CREATE = 0 set @QuoteLimit = 0 select @QuoteLimit = coalesce(MaxConsPerDay_WEB, MaxConsPerDay_Infokiosk, 0), @PERIOD_ALLOW_CREATE = PERIOD_ALLOW_CREATE from pl_subj where pl_subj_id = @pl_subj_id set @QuoteLimit = isnull(@QuoteLimit, 0) set @PERIOD_ALLOW_CREATE = isnull(@PERIOD_ALLOW_CREATE, 0) set @PL_DATE = cast(round(cast(GetDate() as float), 0, 1) as datetime) if @PERIOD_ALLOW_CREATE > 0 begin if @P_PL_DATE + @P_DAY_COUNT > @PL_DATE + @PERIOD_ALLOW_CREATE set @P_DAY_COUNT = cast(@PL_DATE - @P_PL_DATE + @PERIOD_ALLOW_CREATE as int) end declare @tmp_table table (day_date datetime, day_time_from datetime, day_time_to datetime) set @P_DAY_COUNT = @P_DAY_COUNT + 1 set @PL_DATE = @P_PL_DATE while @PL_DATE < @P_PL_DATE + @P_DAY_COUNT BEGIN set @QuoteLimited = 0 if @QuoteLimit > 0 begin set @QuoteCnt = null select @QuoteCnt = count(planning_id) from planning where pl_subj_id = @pl_subj_id and DATE_CONS between @PL_DATE and (@PL_DATE + 1 - 0.0001) and isnull(cancelled, 0) = 0 and isnull(status, 0) = 0 and medecins_creator_id = @WebMedecin if isnull(@QuoteCnt, 0) >= @QuoteLimit set @QuoteLimited = 1 end if @QuoteLimited = 0 begin insert into @tmp_table (day_date, day_time_from, day_time_to) select @PL_DATE, DayStart, DayEnd from dbo.pl_GetSubjDayParamFunc(@pl_subj_id, @PL_DATE, 0, 0) where ActiveDay = 1 end set @PL_DATE = @PL_DATE + 1 END select distinct day_date as FREE_DATE from @tmp_table END ELSE select 0 as empty_patient</text>
  1006. </query>
  1007. </queries>
  1008. </GET_MEDECIN_PLANNING_DATES>
  1009. - <GET_MEDECIN_PLANNING_TIMESLOTS>
  1010. <parent>ACK_COMMON1</parent>
  1011. - <segments>
  1012. - <QUERY_INFO>
  1013. <SERV_CODE>{P_SERV_CODE}</SERV_CODE>
  1014. <SNILS>{P_SNILS}</SNILS>
  1015. <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
  1016. - <!-- 'cach' - за наличные, 'dms' по ДМС прикреплению, 'oms' - по ОМС прикреплению
  1017. -->
  1018. <SERV_PAY_TYPE>{P_SERV_PAY_TYPE}</SERV_PAY_TYPE>
  1019. <MEDECIN_SNILS>{P_MEDECIN_SNILS}</MEDECIN_SNILS>
  1020. <VISIT_DATE>{P_VISIT_DATE}</VISIT_DATE>
  1021. </QUERY_INFO>
  1022. - <TIMESLOTS query="times_query">
  1023. <FREE_TIME>{FREE_TIME}</FREE_TIME>
  1024. </TIMESLOTS>
  1025. </segments>
  1026. - <queries>
  1027. - <query>
  1028. <order>3</order>
  1029. <name>times_query</name>
  1030. <type>open</type>
  1031. <text>declare @WebMedecin int declare @QuoteLimited bit, @QuoteLimit int, @QuoteCnt int declare @pl_subj_id int, @P_PL_DATE datetime declare @check_result bit, @result_pid int, @pid int, @result_fio varchar(100), @CLINIC_ID int declare @P_MEDECIN_SNILS varchar(20), @snils varchar(20), @oms_police varchar(60) declare @P_SERV_PAY_TYPE varchar(20), @P_SERV_CODE varchar(20) set @check_result = 1 set @P_PL_DATE = :P_VISIT_DATE set @P_PL_DATE = cast(round(cast(@P_PL_DATE as float), 0, 1) as datetime) set @CLINIC_ID = :CLINIC_ID set @P_SERV_PAY_TYPE = isnull(:P_SERV_PAY_TYPE , 'cach, dms, oms') set @snils = dbo.TrimNumericCode(isnull(cast(:P_SNILS as varchar(20)), '')) set @oms_police = isnull(cast(:P_OMS_POLICE as varchar(60)), '') set @P_MEDECIN_SNILS = dbo.TrimNumericCode(isnull(:P_MEDECIN_SNILS, '')) declare @PP_SERV_CODE varchar(60) set @PP_SERV_CODE = isnull(:P_SERV_CODE, '') set @P_SERV_CODE = '' select @P_SERV_CODE = minzdrav_code from fm_serv where minzdrav_code like '_' + @PP_SERV_CODE if isnull(@P_SERV_CODE, '') = '' begin select 'AE' as ACK_RESULT, 'Услуга не найдена по коду "' + @PP_SERV_CODE + '"' as ERR_CODE set @check_result = 0 end if @check_result = 1 begin set @WebMedecin = null select top 1 @WebMedecin = medecins_id from medecins where nom = 'WEB' if isnull(@WebMedecin, 0) = 0 begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Не найден пользователь, ассоциированный с web пользователями [NOM=WEB]' as ERR_CODE end end if @check_result = 1 begin set @pl_subj_id = NULL select top 1 @pl_subj_id = pl_s.pl_subj_id from pl_subj pl_s inner join medecins m on m.medecins_id = pl_s.medecins_id inner join pl_subj_exam se on se.pl_subj_id = pl_s.pl_subj_id inner join pl_exam pl_e on se.pl_exam_id = pl_e.pl_exam_id inner join fm_serv fm_serv on pl_e.fm_serv_id = fm_serv.fm_serv_id where fm_serv.minzdrav_code = @P_SERV_CODE and m.sys_snils = @P_MEDECIN_SNILS if isnull(@pl_subj_id, 0) = 0 begin select 'AE' as ACK_RESULT, 'Не найдено расписание приема по коду услуги и СНИЛС врача' as ERR_CODE set @check_result = 0 end end if @check_result = 1 BEGIN set @QuoteLimit = 0 select @QuoteLimit = coalesce(MaxConsPerDay_WEB, MaxConsPerDay_Infokiosk, 0) from pl_subj where pl_subj_id = @pl_subj_id set @QuoteLimit = isnull(@QuoteLimit, 0) set @QuoteLimited = 0 if @QuoteLimit > 0 begin set @QuoteCnt = null select @QuoteCnt = count(planning_id) from planning where pl_subj_id = @pl_subj_id and DATE_CONS between @P_PL_DATE and (@P_PL_DATE + 1 - 0.0001) and isnull(cancelled, 0) = 0 and isnull(status, 0) = 0 and medecins_creator_id = @WebMedecin if isnull(@QuoteCnt, 0) >= @QuoteLimit set @QuoteLimited = 1 end if @QuoteLimited = 0 begin select D1 as FREE_TIME, D2 as FREE_TIME_TO from dbo.pl_GetMedecinGridFunc2(@pl_subj_id, @P_PL_DATE, @P_PL_DATE, 0) gr where gr.EType = 0 end else set @check_result = 0 END ELSE select 0 as empty_patient</text>
  1032. </query>
  1033. </queries>
  1034. </GET_MEDECIN_PLANNING_TIMESLOTS>
  1035. - <CREATE_ORDER>
  1036. <parent>ACK_COMMON1</parent>
  1037. - <segments>
  1038. - <QUERY_INFO>
  1039. <SNILS>{P_SNILS}</SNILS>
  1040. <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
  1041. - <!-- 'cach' - за наличные, 'dms' по ДМС прикреплению, 'oms' - по ОМС прикреплению
  1042. -->
  1043. <SERV_PAY_TYPE>{P_SERV_PAY_TYPE}</SERV_PAY_TYPE>
  1044. <SERV_CODE>{P_SERV_CODE}</SERV_CODE>
  1045. <MEDECIN_SNILS>{P_MEDECIN_SNILS}</MEDECIN_SNILS>
  1046. <VISIT_DATE_TIME>{P_VISIT_DATE_TIME}</VISIT_DATE_TIME>
  1047. <PHONE>{P_PHONE}</PHONE>
  1048. </QUERY_INFO>
  1049. <RESULT_TEXT>{RESULT_TEXT}</RESULT_TEXT>
  1050. - <REPORT_INFO>
  1051. <VISIT_NUMBER>{VISIT_NUMBER}</VISIT_NUMBER>
  1052. <VISIT_DATE>{VISIT_DATE}</VISIT_DATE>
  1053. <PATIENT_FIO>{PATIENT_FIO}</PATIENT_FIO>
  1054. <MEDECIN_FIO>{MEDECIN_FIO}</MEDECIN_FIO>
  1055. <MEDECIN_SPEC>{MEDECIN_SPEC}</MEDECIN_SPEC>
  1056. <EXAM_CODE>{EXAM_CODE}</EXAM_CODE>
  1057. <EXAM_NAME>{EXAM_NAME}</EXAM_NAME>
  1058. <CABINET>{CABINET}</CABINET>
  1059. <VISIT_CREATE_DATE>{VISIT_CREATE_DATE}</VISIT_CREATE_DATE>
  1060. <PLANNING_ID>{PLANNING_ID}</PLANNING_ID>
  1061. </REPORT_INFO>
  1062. </segments>
  1063. - <queries>
  1064. - <query>
  1065. <order>3</order>
  1066. <type>open</type>
  1067. <text>declare @WebMedecin int declare @QuoteLimited bit, @QuoteLimit int, @QuoteCnt int declare @pl_subj_id int, @P_PL_DATE datetime, @pl_exam_id int, @P_PHONE varchar(20) declare @p_nom varchar(100), @p_prenom varchar(100), @p_patronyme varchar(100) declare @check_result bit, @result_pid int, @pid int, @result_fio varchar(100), @CLINIC_ID int declare @P_MEDECIN_SNILS varchar(20), @snils varchar(20), @oms_police varchar(60) declare @P_SERV_PAY_TYPE varchar(20), @P_SERV_CODE varchar(20) set @check_result = 1 set @P_PL_DATE = :P_VISIT_DATE_TIME set @CLINIC_ID = :CLINIC_ID set @P_SERV_PAY_TYPE = isnull(:P_SERV_PAY_TYPE , 'cach, dms, oms') set @snils = dbo.TrimNumericCode(isnull(cast(:P_SNILS as varchar(20)), '')) set @oms_police = isnull(cast(:P_OMS_POLICE as varchar(60)), '') set @P_MEDECIN_SNILS = dbo.TrimNumericCode(isnull(:P_MEDECIN_SNILS, '')) set @P_PHONE = isnull(:P_PHONE, '') declare @PP_SERV_CODE varchar(60) set @PP_SERV_CODE = isnull(:P_SERV_CODE, '') set @P_SERV_CODE = '' select @P_SERV_CODE = minzdrav_code from fm_serv where minzdrav_code like '_' + @PP_SERV_CODE if isnull(@P_SERV_CODE, '') = '' begin select 'AE' as ACK_RESULT, 'Услуга не найдена по коду "' + @PP_SERV_CODE + '"' as ERR_CODE set @check_result = 0 end if @check_result = 1 and exists(select prm_value from fm_params where prm_name = 'lock_mobimed_record' and prm_value = '1') begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Запись в клинику временно заблокирована.' as ERR_CODE end if @check_result = 1 begin set @pid = 0 if isnull(@pid, 0) = 0 and @oms_police != '' exec pl_GetPatientID 'OMS_POLICE', @oms_police, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 and @snils != '' exec pl_GetPatientID 'SYS_SNILS', @snils, '', '', @result_pid output, @pid output, @result_fio output if isnull(@pid, 0) = 0 begin set @check_result = 0 declare @pat_find_err varchar(500) set @pat_find_err = '' if isnull(@oms_police, '') != '' set @pat_find_err = @pat_find_err + 'ОМС ' + @oms_police + '; ' if isnull(@snils, '') != '' set @pat_find_err = @pat_find_err + 'СНИЛС ' + @snils + '; ' if @pat_find_err != '' set @pat_find_err = ' (' + @pat_find_err + ')' set @pat_find_err = 'ОШИБКА!!!!, Пациент не найден в базе данных мед.учреждения' + @pat_find_err select 'AE' as ACK_RESULT, @pat_find_err as ERR_CODE end end if @check_result = 1 begin set @WebMedecin = null select top 1 @WebMedecin = medecins_id from medecins where nom = 'WEB' if isnull(@WebMedecin, 0) = 0 begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Не найден пользователь, ассоциированный с web пользователями [NOM=WEB]' as ERR_CODE end end if @check_result = 1 begin set @pl_subj_id = NULL set @pl_exam_id = NULL select top 1 @pl_subj_id = pl_s.pl_subj_id, @pl_exam_id = pl_e.pl_exam_id from pl_subj pl_s inner join medecins m on m.medecins_id = pl_s.medecins_id inner join pl_subj_exam se on se.pl_subj_id = pl_s.pl_subj_id inner join pl_exam pl_e on se.pl_exam_id = pl_e.pl_exam_id inner join fm_serv fm_serv on pl_e.fm_serv_id = fm_serv.fm_serv_id where fm_serv.minzdrav_code = @P_SERV_CODE and m.sys_snils = @P_MEDECIN_SNILS if isnull(@pl_subj_id, 0) = 0 or isnull(@pl_exam_id, 0) = 0 begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Не найдено расписание врача [' + @P_MEDECIN_SNILS + '] с доступной услугой [' + @P_SERV_CODE + ']' as ERR_CODE end end if @check_result = 1 BEGIN if datediff(mi, getdate(), isnull(@P_PL_DATE, 0)) < 15 select 'AE' as ACK_RESULT, 'Вы не можете записаться на прием задним числом' as ERR_CODE else BEGIN declare @AddVisitResult varchar(2048), @PLANNING_ID int, @Comment varchar(2048) set @Comment = 'Телефон: ' + @P_PHONE if isnull(@p_nom, '') = '' set @p_nom = @result_fio exec dbo.pl_AddVisit @pid, @pl_subj_id, @pl_exam_id, @Comment, @P_PL_DATE, @AddVisitResult output, @PLANNING_ID output, @p_nom, @p_prenom, @p_patronyme, 1, @WebMedecin, 'WEB' if isnull(@PLANNING_ID, 0) = 0 select @PLANNING_ID as PLANNING_ID, 'AE' as ACK_RESULT, @AddVisitResult as ERR_CODE else begin select pl.PLANNING_ID as PLANNING_ID, isnull(pl.NOT_ACCEPTED, 0) as NEED_ACCEPT_RECORD, case when isnull(pl.NOT_ACCEPTED, 0) = 1 then 'Предварительная запись на прием создана. Ожидайте звонка с подтверждением из регистратуры.' else 'Предварительная запись на прием создана успешно.' end as RESULT_TEXT, '000-000-' + cast(pl.planning_id as varchar(10)) as VISIT_NUMBER, pl.date_start as VISIT_DATE, case when p.patients_id is null then isnull(pl.nom, '') + ' ' + isnull(pl.prenom, '') + ' ' + isnull(pl.patronyme, '') else p.fio end as PATIENT_FIO, isnull(m.nom, '') + ' ' + isnull(m.prenom, '') as MEDECIN_FIO, ms.name as MEDECIN_SPEC, pl_exam.code as EXAM_CODE, isnull(pl_exam.name, pl_exam.code) as EXAM_NAME, pl.LIEU as CABINET, pl.create_date_time as VISIT_CREATE_DATE, pl.patients_id as PATIENT_ID from planning pl inner join pl_subj on pl_subj.pl_subj_id = pl.pl_subj_id left outer join patients p on p.patients_id = pl.patients_id left outer join medecins m on m.medecins_id = pl_subj.medecins_id left outer join specialisation ms on ms.specialisation_id = pl_subj.specialisation_id left outer join pl_exam on pl_exam.pl_exam_id = pl.pl_exam_id where pl.planning_id = @planning_id end END END ELSE select 0 as empty_patient</text>
  1068. </query>
  1069. </queries>
  1070. </CREATE_ORDER>
  1071. - <CANCEL_ORDER>
  1072. <parent>ACK_COMMON1</parent>
  1073. - <segments>
  1074. - <QUERY_INFO>
  1075. <VISIT_NUMBER>{P_VISIT_NUMBER}</VISIT_NUMBER>
  1076. </QUERY_INFO>
  1077. <RESULT_TEXT>{RESULT_TEXT}</RESULT_TEXT>
  1078. </segments>
  1079. - <queries>
  1080. - <query>
  1081. <order>3</order>
  1082. <type>open</type>
  1083. <text>declare @check_result int declare @planning_id int, @pl_id int, @WebMedecin int declare @p_visit_number varchar(60), @result_text varchar(100) set @check_result = 1 if isnull(:CLINIC_ID, 0) = 0 set @check_result = 0 set @p_visit_number = isnull(:P_VISIT_NUMBER, '') if @check_result = 1 and @p_visit_number = '' begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Не передан номер отменяемого визита к врачу.' as ERR_CODE end if @check_result = 1 and exists(select prm_value from fm_params where prm_name = 'lock_mobimed_record' and prm_value = '1') begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Запись в клинику временно заблокирована.' as ERR_CODE end if @check_result = 1 begin set @WebMedecin = null select @WebMedecin = medecins_id from medecins where nom = 'WEB' if isnull(@WebMedecin, 0) = 0 begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Не найден пользователь, ассоциированный с web пользователями [NOM=WEB]' as ERR_CODE end end if @check_result = 1 begin set @planning_id = substring(@p_visit_number, len('000-000-') + 1, 60) set @pl_id = null select @pl_id = pl.planning_id from planning pl where pl.planning_id = @planning_id if isnull(@pl_id, 0) = 0 begin set @check_result = 0 select 'AE' as ACK_RESULT, 'Отменяемая запись на прием не найдена в базе данных [' + + ']' as ERR_CODE end end if @check_result = 1 begin set @result_text = 'Запись отменена владельцем через портал гос.услуг' update PLANNING set CANCELLED = 1, REASON_CANCEL = @result_text, MEDECINS_MODIFY_ID = @WebMedecin, MODIFY_DATE_TIME = GetDate(), DATE_CANCEL = GetDate() where PLANNING_ID = @planning_id select @result_text as RESULT_TEXT end if check_result = 0 select 0 as empty_patient</text>
  1084. </query>
  1085. </queries>
  1086. </CANCEL_ORDER>
  1087. </sections>
  1088. </hl7>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement