Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?xml version="1.0" encoding="windows-1251" ?>
- - <hl7>
- - <!-- Версия настроек
- -->
- <version>1</version>
- - <!-- Шаблон для обработки исходящих ответов
- -->
- - <events>
- - <!-- Записи ЭМК
- -->
- - <event desc="Ответ на запрос записи ЭМК">
- <code>MOTCONSU_QUERY</code>
- </event>
- - <!-- Направления
- -->
- - <event desc="Ответ на запрос по направлениям пациента">
- <code>PATDIRECS_QUERY</code>
- </event>
- - <event desc="Ответ на запрос по расписаниям для направления пациента">
- <code>PATDIREC_SUBJ_QUERY</code>
- </event>
- - <event desc="Линковка записи в расписании с направлением">
- <code>LINK_PATDIREC_PLANNING</code>
- </event>
- - <!-- Врачи
- -->
- - <event desc="Ответ на запрос по врачу">
- <code>MEDECINS_QUERY</code>
- </event>
- - <event desc="Ответ на запрос врача по расписанию">
- <code>MEDECINS_PL_QUERY</code>
- </event>
- - <event desc="Ответ на запрос фотографии врача">
- <code>MEDECINS_PHOTO_QUERY</code>
- </event>
- - <!-- Расписание
- -->
- - <event desc="Ответ на запрос врача и расписаний по специальности">
- <code>MEDSPEC_QUERY</code>
- </event>
- - <event desc="Ответ на запрос по расписаниям врача">
- <code>MEDECINS_PLANNING_QUERY</code>
- </event>
- - <event desc="Ответ на запрос списка моделей расписаний">
- <code>PLANNING_PARAMS_QUERY</code>
- </event>
- - <event desc="Ответ на запрос списка расписаний по модели">
- <code>PLANNING_SUBJ_QUERY</code>
- </event>
- - <event desc="Ответ на запрос параметров сетки расписания">
- <code>PLANNING_DAY_PARAMS_QUERY</code>
- </event>
- - <event desc="Ответ на запрос списка видов приема по расписанию">
- <code>PLANNING_EXAMS_QUERY</code>
- </event>
- - <event desc="Ответ на запрос списка записей на прием по расписанию">
- <code>PLANNING_RECORDS_QUERY</code>
- </event>
- - <event desc="Ответ на запрос списка записей на прием по пациенту за период">
- <code>PLANNING_PATIENT_RECORDS_QUERY</code>
- </event>
- - <event desc="Запрос списка дней в расписании и количества свободных слотов в каждом из дней">
- <code>PLANNING_SUBJ_DAYS_QUERY</code>
- </event>
- - <event desc="Запрос списка слотов в расписании (для своих записей будет возвращаться planning_iD)">
- <code>PLANNING_SUBJ_SLOTS_QUERY</code>
- </event>
- - <event desc="Проверка возможности записи в клинику">
- <code>CHECK_PLANNING</code>
- </event>
- - <event desc="Проверка прикрепления пациента к клинике">
- <code>CHECK_PATIENT_CLINK</code>
- </event>
- - <event desc="Регистрация вызова на дом">
- <code>CALL_HOME_VISIT</code>
- </event>
- - <event desc="Проверка возможности создания новой записи на прием">
- <code>CHECK_PLANNING_ADD_VISIT</code>
- </event>
- - <event desc="Подтверждение создания новой записи на прием">
- <code>PLANNING_ADD_VISIT</code>
- </event>
- - <event desc="Запрос на распечатку талона на прием к врачу">
- <code>VISIT_REPORT</code>
- </event>
- - <event desc="Подтверждение отмены записи на прием">
- <code>PLANNING_CANCEL_VISIT</code>
- </event>
- - <!-- Система сообщений
- -->
- - <event desc="Ответ на запрос по списку сообщений (по теме)">
- <code>MESSAGES_QUERY</code>
- </event>
- - <event desc="создание нового сообщения">
- <code>NEW_MESSAGE</code>
- </event>
- - <!-- Портал гос.услуг
- -->
- - <event desc="Проверка наличия в клинике заданных параметров (услуга, врач, специализация) getHospitals">
- <code>CHECK_HOSPITAL</code>
- </event>
- - <event desc="Возвращает список услуг, доступных пациенту getMedServices">
- <code>GET_SERV_LIST</code>
- </event>
- - <event desc="Возвращает информацию по услуге (условия оплаты и оказания) getMedServiceInfo">
- <code>GET_SERV_INFO</code>
- </event>
- - <event desc="Возвращает список врачей по коду услуги getDoctors">
- <code>GET_MEDECINS</code>
- </event>
- - <event desc="Возвращает информацию о враче getDoctorInfo">
- <code>GET_MEDECIN_INFO</code>
- </event>
- - <event desc="Возвращает информацию о ближайших датах, на которые возможна запись на прием getDate">
- <code>GET_MEDECIN_PLANNING_DATES</code>
- </event>
- - <event desc="Возвращает информацию о свободных временных интервалах на конкретную дату, на которые возможна запись на прием getTime">
- <code>GET_MEDECIN_PLANNING_TIMESLOTS</code>
- </event>
- - <event desc="Создание записи на прием CreateOrder">
- <code>CREATE_ORDER</code>
- </event>
- - <event desc="Отмена записи на прием CancelOrder">
- <code>CANCEL_ORDER</code>
- </event>
- </events>
- - <sections>
- - <COMMON>
- <segments />
- </COMMON>
- - <ACK_COMMON>
- <parent>COMMON</parent>
- - <segments>
- - <ACK_INFO>
- <MESSAGE_ID>{P_MESSAGE_ID}</MESSAGE_ID>
- <CODE>{ACK_RESULT}</CODE>
- <COMMENT>{ERR_CODE}</COMMENT>
- </ACK_INFO>
- - <QUERY_INFO>
- <PID>{P_PID}</PID>
- <PID_PIN>{P_PID_PIN}</PID_PIN>
- <CLINIC_CODE>{P_CLINIC_CODE}</CLINIC_CODE>
- <LANG_CODE>{P_LANG_CODE}</LANG_CODE>
- </QUERY_INFO>
- </segments>
- - <queries>
- - <query>
- <order>1</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </ACK_COMMON>
- - <ACK_COMMON1>
- <parent>COMMON</parent>
- - <segments>
- - <ACK_INFO>
- <MESSAGE_ID>{P_MESSAGE_ID}</MESSAGE_ID>
- <CODE>{ACK_RESULT}</CODE>
- <COMMENT>{ERR_CODE}</COMMENT>
- </ACK_INFO>
- - <QUERY_INFO>
- <PID>{P_PID}</PID>
- <PID_PIN>{P_PID_PIN}</PID_PIN>
- <CLINIC_CODE>{P_CLINIC_CODE}</CLINIC_CODE>
- <LANG_CODE>{P_LANG_CODE}</LANG_CODE>
- </QUERY_INFO>
- </segments>
- - <queries>
- - <query>
- <order>1</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </ACK_COMMON1>
- - <ACK_PID_COMMON>
- <parent>COMMON</parent>
- - <segments>
- - <ACK_INFO>
- <MESSAGE_ID>{P_MESSAGE_ID}</MESSAGE_ID>
- <CODE>{ACK_RESULT}</CODE>
- <COMMENT>{ERR_CODE}</COMMENT>
- </ACK_INFO>
- - <QUERY_INFO>
- <PID>{P_PID}</PID>
- <PID_PIN>{P_PID_PIN}</PID_PIN>
- <CLINIC_CODE>{P_CLINIC_CODE}</CLINIC_CODE>
- <LANG_CODE>{P_LANG_CODE}</LANG_CODE>
- </QUERY_INFO>
- </segments>
- - <queries>
- - <query>
- <order>1</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </ACK_PID_COMMON>
- - <MOTCONSU_QUERY>
- <parent>ACK_PID_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <MOTCONSU_ID>{P_MOTCONSU_ID}</MOTCONSU_ID>
- </QUERY_INFO>
- - <PATIENT_INFO>
- <EXTERNAL_ID>{EXTERNAL_ID}</EXTERNAL_ID>
- </PATIENT_INFO>
- - <MOTCONSU_INFO>
- <XML_DATA>{BIN_XML_DATA}</XML_DATA>
- <APPROVED>{APPROVED}</APPROVED>
- <CANCEL_MEDECIN>{CANCEL_MEDECIN}</CANCEL_MEDECIN>
- <CANCEL_DATE_TIME>{CANCEL_DATE_TIME}</CANCEL_DATE_TIME>
- </MOTCONSU_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </MOTCONSU_QUERY>
- - <PATDIRECS_QUERY>
- <parent>ACK_PID_COMMON</parent>
- - <segments>
- - <PATDIRECS query="patdirec_query">
- <PATDIREC_ID>{PATDIREC_ID}</PATDIREC_ID>
- <PATDIREC_NAME>{PATDIREC_NAME}</PATDIREC_NAME>
- <DIR_CNT>{DIR_CNT}</DIR_CNT>
- <ANSW_CNT>{ANSW_CNT}</ANSW_CNT>
- <CANCEL_CNT>{CANCEL_CNT}</CANCEL_CNT>
- <PLANNING_CNT>{PLANNING_CNT}</PLANNING_CNT>
- <NOT_PLANNING_CNT>{NOT_PLANNING_CNT}</NOT_PLANNING_CNT>
- <BEGIN_DATE>{BEGIN_DATE}</BEGIN_DATE>
- <PL_EXAM_ID>{PL_EXAM_ID}</PL_EXAM_ID>
- <PL_EXAM_NAME>{PL_EXAM_NAME}</PL_EXAM_NAME>
- </PATDIRECS>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <name>patdirec_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </PATDIRECS_QUERY>
- - <PATDIREC_SUBJ_QUERY>
- <parent>ACK_PID_COMMON</parent>
- - <xml>
- <group>1</group>
- </xml>
- - <segments>
- - <QUERY_INFO>
- <PATDIREC_ID>{P_PATDIREC_ID}</PATDIREC_ID>
- </QUERY_INFO>
- - <MEDECINS_PLANS query="plan_query">
- <PL_SUBJ_ID group="1">{PL_SUBJ_ID}</PL_SUBJ_ID>
- <PL_SUBJ_NAME>{PL_SUBJ_NAME}</PL_SUBJ_NAME>
- <PL_SUBJ_SPEC_ID>{PL_SUBJ_SPEC_ID}</PL_SUBJ_SPEC_ID>
- <PL_SUBJ_SPEC>{PL_SUBJ_SPEC}</PL_SUBJ_SPEC>
- <WEB_ACCESS>{WEB_ACCESS}</WEB_ACCESS>
- - <PL_PARAMS>
- <PL_PARAM_ID group="1">{PL_PARAM_ID}</PL_PARAM_ID>
- <PL_PARAM_NAME>{PL_PARAM_NAME}</PL_PARAM_NAME>
- </PL_PARAMS>
- </MEDECINS_PLANS>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <name>plan_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </PATDIREC_SUBJ_QUERY>
- - <LINK_PATDIREC_PLANNING>
- <parent>ACK_PID_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <PATDIREC_ID>{P_PATDIREC_ID}</PATDIREC_ID>
- <PLANNING_ID>{P_PLANNING_ID}</PLANNING_ID>
- </QUERY_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </LINK_PATDIREC_PLANNING>
- - <MEDECINS_QUERY>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <MEDECINS_ID>{P_MEDECINS_ID}</MEDECINS_ID>
- </QUERY_INFO>
- - <MEDECINS_INFO>
- <NOM>{NOM}</NOM>
- <PRENOM>{PRENOM}</PRENOM>
- <PHOTO>{BIN_PHOTO}</PHOTO>
- <EDUCATION>{EDUCATION}</EDUCATION>
- <DEGREE>{DEGREE}</DEGREE>
- <SPECIALIZATION>{SPECIALIZATION}</SPECIALIZATION>
- <EXPERIENCE>{EXPERIENCE}</EXPERIENCE>
- <CONFERENCES>{CONFERENCES}</CONFERENCES>
- <HOBBIES>{HOBBIES}</HOBBIES>
- <DESCRIPTION>{DESCRIPTION}</DESCRIPTION>
- </MEDECINS_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </MEDECINS_QUERY>
- - <MEDECINS_PL_QUERY>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <PL_PARAM_ID>{P_PL_PARAM_ID}</PL_PARAM_ID>
- <PL_SUBJ_ID>{P_PL_SUBJ_ID}</PL_SUBJ_ID>
- </QUERY_INFO>
- - <MEDECINS_INFO query="medecins_pl_query">
- <MEDECINS_ID>{MEDECINS_ID}</MEDECINS_ID>
- <MED_PL_PARAM_ID>{MED_PL_PARAM_ID}</MED_PL_PARAM_ID>
- <MED_PL_SUBJ_ID>{MED_PL_SUBJ_ID}</MED_PL_SUBJ_ID>
- <NOM>{NOM}</NOM>
- <PRENOM>{PRENOM}</PRENOM>
- <PHOTO>{BIN_PHOTO}</PHOTO>
- <EDUCATION>{EDUCATION}</EDUCATION>
- <DEGREE>{DEGREE}</DEGREE>
- <SPECIALIZATION>{SPECIALIZATION}</SPECIALIZATION>
- <EXPERIENCE>{EXPERIENCE}</EXPERIENCE>
- <CONFERENCES>{CONFERENCES}</CONFERENCES>
- <HOBBIES>{HOBBIES}</HOBBIES>
- <DESCRIPTION>{DESCRIPTION}</DESCRIPTION>
- </MEDECINS_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <name>medecins_pl_query</name>
- <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>
- </query>
- </queries>
- </MEDECINS_PL_QUERY>
- - <MEDECINS_PHOTO_QUERY>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <MEDECINS_ID>{P_MEDECINS_ID}</MEDECINS_ID>
- </QUERY_INFO>
- - <MEDECINS_INFO>
- <PHOTO>{BIN_PHOTO}</PHOTO>
- </MEDECINS_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </MEDECINS_PHOTO_QUERY>
- - <MEDSPEC_QUERY>
- <parent>ACK_COMMON1</parent>
- - <xml>
- <group>1</group>
- </xml>
- - <segments>
- - <QUERY_INFO>
- <MEDECIN_NOM>{P_MEDECIN_NOM}</MEDECIN_NOM>
- <SPEC_NAME>{P_SPEC_NAME}</SPEC_NAME>
- <WEB_ACCESS>{P_WEB_ACCESS}</WEB_ACCESS>
- <CITY_CODE>{P_CITY_CODE}</CITY_CODE>
- <MEDECINS_IDS type="string">{P_MEDECINS_IDS}</MEDECINS_IDS>
- </QUERY_INFO>
- - <MEDECINS_INFO query="medecins_plan_query">
- <MEDECINS_ID group="1">{MEDECINS_ID}</MEDECINS_ID>
- <NOM>{NOM}</NOM>
- <PRENOM>{PRENOM}</PRENOM>
- <DEGREE>{DEGREE}</DEGREE>
- <EXPERIENCE>{EXPERIENCE}</EXPERIENCE>
- - <MEDSPECS>
- <SPEC_ID group="1">{SPEC_ID}</SPEC_ID>
- <SPEC_NAME>{SPEC_NAME}</SPEC_NAME>
- </MEDSPECS>
- - <MEDECINS_PLANS>
- <PL_SUBJ_ID group="1">{PL_SUBJ_ID}</PL_SUBJ_ID>
- <PL_SUBJ_NAME>{PL_SUBJ_NAME}</PL_SUBJ_NAME>
- <PL_SUBJ_SPEC_ID>{PL_SUBJ_SPEC_ID}</PL_SUBJ_SPEC_ID>
- <PL_SUBJ_SPEC>{PL_SUBJ_SPEC}</PL_SUBJ_SPEC>
- <WEB_ACCESS>{WEB_ACCESS}</WEB_ACCESS>
- - <PL_PARAMS>
- <PL_PARAM_ID group="1">{PL_PARAM_ID}</PL_PARAM_ID>
- <PL_PARAM_NAME>{PL_PARAM_NAME}</PL_PARAM_NAME>
- </PL_PARAMS>
- </MEDECINS_PLANS>
- </MEDECINS_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <name>medecins_plan_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </MEDSPEC_QUERY>
- - <MEDECINS_PLANNING_QUERY>
- <parent>ACK_COMMON</parent>
- - <xml>
- <group>1</group>
- </xml>
- - <segments>
- - <QUERY_INFO>
- <MEDECINS_ID>{P_MEDECINS_ID}</MEDECINS_ID>
- <SPEC_ID>{P_SPEC_ID}</SPEC_ID>
- <WEB_ACCESS>{P_WEB_ACCESS}</WEB_ACCESS>
- </QUERY_INFO>
- - <MEDECINS_PLANS query="medecins_plan_query">
- <PL_SUBJ_ID group="1">{PL_SUBJ_ID}</PL_SUBJ_ID>
- <PL_SUBJ_NAME>{PL_SUBJ_NAME}</PL_SUBJ_NAME>
- <PL_SUBJ_SPEC_ID>{PL_SUBJ_SPEC_ID}</PL_SUBJ_SPEC_ID>
- <PL_SUBJ_SPEC>{PL_SUBJ_SPEC}</PL_SUBJ_SPEC>
- <PL_SUBJ_TIME>{PL_SUBJ_TIME}</PL_SUBJ_TIME>
- <WEB_ACCESS>{WEB_ACCESS}</WEB_ACCESS>
- - <PL_PARAMS>
- <PL_PARAM_ID group="1">{PL_PARAM_ID}</PL_PARAM_ID>
- <PL_PARAM_NAME>{PL_PARAM_NAME}</PL_PARAM_NAME>
- </PL_PARAMS>
- </MEDECINS_PLANS>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <name>medecins_plan_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </MEDECINS_PLANNING_QUERY>
- - <PLANNING_PARAMS_QUERY>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <PL_PARAMS_ID>{P_PL_PARAMS_ID}</PL_PARAMS_ID>
- <WEB_USER>{P_WEB_USER}</WEB_USER>
- <SNILS>{P_SNILS}</SNILS>
- <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
- </QUERY_INFO>
- <CLINK_INFO query="clink_info_query">{CLINK_INFO}</CLINK_INFO>
- - <PL_PARAMS query="pl_params_query">
- <PL_PARAM_ID>{PL_PARAM_ID}</PL_PARAM_ID>
- <PL_PARAM_NAME>{PL_PARAM_NAME}</PL_PARAM_NAME>
- <TIME_FROM>{TIME_FROM}</TIME_FROM>
- <TIME_TO>{TIME_TO}</TIME_TO>
- <INTERVAL>{INTERVAL}</INTERVAL>
- </PL_PARAMS>
- </segments>
- - <queries>
- - <query>
- <order>2</order>
- <name>clink_info_query</name>
- <type>open</type>
- <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>
- </query>
- - <query>
- <order>3</order>
- <name>pl_params_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </PLANNING_PARAMS_QUERY>
- - <PLANNING_SUBJ_QUERY>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <PL_PARAMS_ID>{P_PL_PARAMS_ID}</PL_PARAMS_ID>
- </QUERY_INFO>
- - <PL_SUBJ query="subj_query">
- <PL_SUBJ_ID>{PL_SUBJ_ID}</PL_SUBJ_ID>
- <PL_SUBJ_NAME>{PL_SUBJ_NAME}</PL_SUBJ_NAME>
- </PL_SUBJ>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <name>subj_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </PLANNING_SUBJ_QUERY>
- - <PLANNING_DAY_PARAMS_QUERY>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <PL_PARAMS_ID>{P_PL_PARAMS_ID}</PL_PARAMS_ID>
- <PL_SUBJ_ID>{P_PL_SUBJ_ID}</PL_SUBJ_ID>
- <PL_DATE>{P_PL_DATE}</PL_DATE>
- </QUERY_INFO>
- - <DAY_PARAMS query="subj_query">
- <PL_SUBJ_ID>{PL_SUBJ_ID}</PL_SUBJ_ID>
- <TIME_FROM>{TIME_FROM}</TIME_FROM>
- <TIME_TO>{TIME_TO}</TIME_TO>
- <INTERVAL>{INTERVAL}</INTERVAL>
- </DAY_PARAMS>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <name>subj_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </PLANNING_DAY_PARAMS_QUERY>
- - <PLANNING_EXAMS_QUERY>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <PL_SUBJ_ID>{P_PL_SUBJ_ID}</PL_SUBJ_ID>
- </QUERY_INFO>
- - <PL_EXAM query="exam_query">
- <PL_EXAM_ID>{PL_EXAM_ID}</PL_EXAM_ID>
- <PL_EXAM_NAME>{PL_EXAM_NAME}</PL_EXAM_NAME>
- <DURATION>{DURATION}</DURATION>
- </PL_EXAM>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <name>exam_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </PLANNING_EXAMS_QUERY>
- - <PLANNING_RECORDS_QUERY>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <WEB_USER>{P_WEB_USER}</WEB_USER>
- <PL_SUBJ_ID>{P_PL_SUBJ_ID}</PL_SUBJ_ID>
- <PL_DATE>{P_PL_DATE}</PL_DATE>
- </QUERY_INFO>
- - <PLANNING_RECORDS query="planning_query">
- <PLANNING_ID>{PLANNING_ID}</PLANNING_ID>
- <REC_TYPE>{REC_TYPE}</REC_TYPE>
- <EXAM_NAME>{EXAM_NAME}</EXAM_NAME>
- <START_TIME>{START_TIME}</START_TIME>
- <END_TIME>{END_TIME}</END_TIME>
- <CANCELLED>{CANCELLED}</CANCELLED>
- <CANCEL_MOTIVE>{CANCEL_MOTIVE}</CANCEL_MOTIVE>
- <COMMENTAIRE>{COMMENTAIRE}</COMMENTAIRE>
- <NOT_ACCEPTED>{NOT_ACCEPTED}</NOT_ACCEPTED>
- </PLANNING_RECORDS>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <name>planning_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </PLANNING_RECORDS_QUERY>
- - <PLANNING_PATIENT_RECORDS_QUERY>
- <parent>ACK_PID_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <PL_DATE_FROM>{P_PL_DATE_FROM}</PL_DATE_FROM>
- <PL_DATE_TO>{P_PL_DATE_TO}</PL_DATE_TO>
- <INCLUDE_CANCELLED>{P_INCLUDE_CANCELLED}</INCLUDE_CANCELLED>
- </QUERY_INFO>
- - <PLANNING_RECORDS query="planning_query">
- <PLANNING_ID>{PLANNING_ID}</PLANNING_ID>
- <EXAM_NAME>{EXAM_NAME}</EXAM_NAME>
- <START_TIME>{START_TIME}</START_TIME>
- <END_TIME>{END_TIME}</END_TIME>
- <CANCELLED>{CANCELLED}</CANCELLED>
- <CANCEL_MOTIVE>{CANCEL_MOTIVE}</CANCEL_MOTIVE>
- <COMMENTAIRE>{COMMENTAIRE}</COMMENTAIRE>
- <PL_SUBJ_ID>{PL_SUBJ_ID}</PL_SUBJ_ID>
- <PL_SUBJ_NAME>{PL_SUBJ_NAME}</PL_SUBJ_NAME>
- </PLANNING_RECORDS>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <name>planning_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </PLANNING_PATIENT_RECORDS_QUERY>
- - <PLANNING_SUBJ_DAYS_QUERY>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_RESULT>
- - <DAY query="days_query">
- <DAY_DATE>{DAY_DATE}</DAY_DATE>
- <FREE_SLOTS>{FREE_SLOTS}</FREE_SLOTS>
- </DAY>
- </QUERY_RESULT>
- </segments>
- - <queries>
- - <query>
- <order>2</order>
- <name>days_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </PLANNING_SUBJ_DAYS_QUERY>
- - <PLANNING_SUBJ_SLOTS_QUERY>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_RESULT>
- - <SLOT query="slots_query">
- <DATETIME_START>{DATETIME_START}</DATETIME_START>
- <DATETIME_END>{DATETIME_END}</DATETIME_END>
- <IS_FREE>{IS_FREE}</IS_FREE>
- <PLANNING_ID>{PLANNING_ID}</PLANNING_ID>
- </SLOT>
- </QUERY_RESULT>
- </segments>
- - <queries>
- - <query>
- <order>2</order>
- <name>slots_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </PLANNING_SUBJ_SLOTS_QUERY>
- - <CHECK_PLANNING>
- <parent>ACK_COMMON</parent>
- <segments />
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <text>select null</text>
- </query>
- </queries>
- </CHECK_PLANNING>
- - <CHECK_PATIENT_CLINK>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <WEB_USER>{P_WEB_USER}</WEB_USER>
- <SNILS>{P_SNILS}</SNILS>
- <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
- </QUERY_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </CHECK_PATIENT_CLINK>
- - <CALL_HOME_VISIT>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <WEB_USER>{P_WEB_USER}</WEB_USER>
- <SNILS>{P_SNILS}</SNILS>
- <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
- - <ADDRESS>
- <REGION_CODE>{P_REGION_CODE}</REGION_CODE>
- <REGION>{P_REGION}</REGION>
- <CITY_CODE>{P_CITY_CODE}</CITY_CODE>
- <CITY>{P_CITY}</CITY>
- <STREET_CODE>{P_STREET_CODE}</STREET_CODE>
- <STREET>{P_STREET}</STREET>
- <HOUSE>{P_HOUSE}</HOUSE>
- <HOUSE_LITERA>{P_HOUSE_LITERA}</HOUSE_LITERA>
- <HOUSE_BUILDING>{P_HOUSE_BUILDING}</HOUSE_BUILDING>
- <HOUSE_STROENIE>{P_HOUSE_STROENIE}</HOUSE_STROENIE>
- <FLAT>{P_FLAT}</FLAT>
- <ADDRESS_NOTE>{P_ADDRESS_NOTE}</ADDRESS_NOTE>
- </ADDRESS>
- <NOTE>{P_NOTE}</NOTE>
- <PHONE>{P_PHONE}</PHONE>
- </QUERY_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </CALL_HOME_VISIT>
- - <CHECK_PLANNING_ADD_VISIT>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <WEB_USER>{P_WEB_USER}</WEB_USER>
- <SNILS>{P_SNILS}</SNILS>
- <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
- <PL_SUBJ_ID>{P_PL_SUBJ_ID}</PL_SUBJ_ID>
- <PL_EXAM_ID>{P_PL_EXAM_ID}</PL_EXAM_ID>
- <DATE_VISIT>{P_DATE_VISIT}</DATE_VISIT>
- </QUERY_INFO>
- - <RESULT_CHECK>
- <PATIENTS_ID>{PATIENTS_ID}</PATIENTS_ID>
- <PATIENTS_NOM>{PATIENTS_NOM}</PATIENTS_NOM>
- <PATIENTS_PRENOM>{PATIENTS_PRENOM}</PATIENTS_PRENOM>
- <PATIENTS_PATRONYME>{PATIENTS_PATRONYME}</PATIENTS_PATRONYME>
- </RESULT_CHECK>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </CHECK_PLANNING_ADD_VISIT>
- - <PLANNING_ADD_VISIT>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <WEB_USER>{P_WEB_USER}</WEB_USER>
- <SNILS>{P_SNILS}</SNILS>
- <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
- <PL_SUBJ_ID>{P_PL_SUBJ_ID}</PL_SUBJ_ID>
- <PL_EXAM_ID>{P_PL_EXAM_ID}</PL_EXAM_ID>
- <DATE_VISIT>{P_DATE_VISIT}</DATE_VISIT>
- <COMMENT_VISIT>{P_COMMENT_VISIT}</COMMENT_VISIT>
- <FIO>{P_FIO}</FIO>
- <PAT_NOM>{P_PAT_NOM}</PAT_NOM>
- <PAT_PRENOM>{P_PAT_PRENOM}</PAT_PRENOM>
- <PAT_PATRONYME>{P_PAT_PATRONYME}</PAT_PATRONYME>
- <PHONE>{P_PHONE}</PHONE>
- </QUERY_INFO>
- - <PLANNING_VISIT>
- <PLANNING_ID>{PLANNING_ID}</PLANNING_ID>
- <NEED_ACCEPT_RECORD>{NEED_ACCEPT_RECORD}</NEED_ACCEPT_RECORD>
- </PLANNING_VISIT>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </PLANNING_ADD_VISIT>
- - <VISIT_REPORT>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <WEB_USER>{P_WEB_USER}</WEB_USER>
- <SNILS>{P_SNILS}</SNILS>
- <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
- <PLANNING_ID>{P_PLANNING_ID}</PLANNING_ID>
- </QUERY_INFO>
- - <REPORT_INFO>
- <VISIT_NUMBER>{VISIT_NUMBER}</VISIT_NUMBER>
- <VISIT_DATE>{VISIT_DATE}</VISIT_DATE>
- <PATIENT_FIO>{PATIENT_FIO}</PATIENT_FIO>
- <MEDECIN_FIO>{MEDECIN_FIO}</MEDECIN_FIO>
- <MEDECIN_SPEC>{MEDECIN_SPEC}</MEDECIN_SPEC>
- <EXAM_CODE>{EXAM_CODE}</EXAM_CODE>
- <EXAM_NAME>{EXAM_NAME}</EXAM_NAME>
- <CABINET>{CABINET}</CABINET>
- <VISIT_CREATE_DATE>{VISIT_CREATE_DATE}</VISIT_CREATE_DATE>
- <PLANNING_ID>{PLANNING_ID}</PLANNING_ID>
- <PATIENT_ID>{PATIENT_ID}</PATIENT_ID>
- </REPORT_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </VISIT_REPORT>
- - <PLANNING_CANCEL_VISIT>
- <parent>ACK_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <WEB_USER>{P_WEB_USER}</WEB_USER>
- <SNILS>{P_SNILS}</SNILS>
- <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
- <PLANNING_ID>{P_PLANNING_ID}</PLANNING_ID>
- <CANCEL_COMMENT>{P_CANCEL_COMMENT}</CANCEL_COMMENT>
- </QUERY_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- - <text>
- 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
- - <!-- Нужно хоть что то вернуть, чтобы не было ошибки!!!!
- -->
- select 0 as empty_patient end end END
- </text>
- </query>
- </queries>
- </PLANNING_CANCEL_VISIT>
- - <MESSAGES_QUERY>
- <parent>ACK_PID_COMMON</parent>
- - <segments>
- - <QUERY_INFO>
- <MSG_THEME_ID>{P_MSG_THEME_ID}</MSG_THEME_ID>
- </QUERY_INFO>
- - <MSG_INFO query="msg_list">
- <MSG_ID>{MSG_ID}</MSG_ID>
- <MSG_THEME_ID>{MSG_THEME_ID}</MSG_THEME_ID>
- <MSG_ANSWER_ID>{MSG_ANSWER_ID}</MSG_ANSWER_ID>
- <MEDECINS_ID>{MEDECINS_ID}</MEDECINS_ID>
- <MEDECINS_NOM>{MEDECINS_NOM}</MEDECINS_NOM>
- <MSG_SUBJECT>{MSG_SUBJECT}</MSG_SUBJECT>
- <MSG_TEXT>{MSG_TEXT}</MSG_TEXT>
- </MSG_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <name>msg_list</name>
- <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>
- </query>
- </queries>
- </MESSAGES_QUERY>
- - <NEW_MESSAGE>
- <parent>ACK_PID_COMMON</parent>
- - <segments>
- - <MSG_INFO>
- <MSG_THEME_ID>{P_MSG_THEME_ID}</MSG_THEME_ID>
- <MSG_ANSWER_ID>{P_MSG_ANSWER_ID}</MSG_ANSWER_ID>
- <MEDECINS_ID>{P_MEDECINS_ID}</MEDECINS_ID>
- <MSG_SUBJECT>{P_MSG_SUBJECT}</MSG_SUBJECT>
- <MSG_TEXT>{P_MSG_TEXT}</MSG_TEXT>
- </MSG_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </NEW_MESSAGE>
- - <CHECK_HOSPITAL>
- <parent>ACK_COMMON1</parent>
- - <segments>
- - <QUERY_INFO>
- <MEDECIN_SNILS>{P_MEDECIN_SNILS}</MEDECIN_SNILS>
- <SPEC_NAME>{P_SPEC_NAME}</SPEC_NAME>
- <SERV_CODE>{P_SERV_CODE}</SERV_CODE>
- <PATIENTS_SNILS>{P_PATIENTS_SNILS}</PATIENTS_SNILS>
- <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
- - <!-- 'cach' - за наличные, 'dms' по ДМС прикреплению, 'oms' - по ОМС прикреплению
- -->
- <SERV_PAY_TYPE>{P_SERV_PAY_TYPE}</SERV_PAY_TYPE>
- </QUERY_INFO>
- - <RESULT_INFO>
- <MEDECIN_SNILS_OK>{MEDECIN_SNILS_OK}</MEDECIN_SNILS_OK>
- <SPEC_NAME_OK>{SPEC_NAME_OK}</SPEC_NAME_OK>
- <SERV_CODE_OK>{SERV_CODE_OK}</SERV_CODE_OK>
- </RESULT_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </CHECK_HOSPITAL>
- - <GET_SERV_LIST>
- <parent>ACK_COMMON1</parent>
- - <segments>
- - <QUERY_INFO>
- <SNILS>{P_SNILS}</SNILS>
- <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
- - <!-- 'cach' - за наличные, 'dms' по ДМС прикреплению, 'oms' - по ОМС прикреплению
- -->
- <SERV_PAY_TYPE>{P_SERV_PAY_TYPE}</SERV_PAY_TYPE>
- </QUERY_INFO>
- - <SERV_LIST query="serv_query">
- <SERV_CODE>{SERV_CODE}</SERV_CODE>
- </SERV_LIST>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <name>serv_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </GET_SERV_LIST>
- - <GET_SERV_INFO>
- <parent>ACK_COMMON1</parent>
- - <segments>
- - <QUERY_INFO>
- <SERV_CODE>{P_SERV_CODE}</SERV_CODE>
- </QUERY_INFO>
- - <SERV_INFO>
- <SERV_NAME>{SERV_NAME}</SERV_NAME>
- <SERV_PRICE>{SERV_PRICE}</SERV_PRICE>
- </SERV_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </GET_SERV_INFO>
- - <GET_MEDECINS>
- <parent>ACK_COMMON1</parent>
- - <segments>
- - <QUERY_INFO>
- <SERV_CODE>{P_SERV_CODE}</SERV_CODE>
- <SNILS>{P_SNILS}</SNILS>
- <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
- - <!-- 'cach' - за наличные, 'dms' по ДМС прикреплению, 'oms' - по ОМС прикреплению
- -->
- <SERV_PAY_TYPE>{P_SERV_PAY_TYPE}</SERV_PAY_TYPE>
- </QUERY_INFO>
- - <MEDECINS_LIST query="medecins_query">
- <SNILS>{SNILS}</SNILS>
- <FIO>{FIO}</FIO>
- </MEDECINS_LIST>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <name>medecins_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </GET_MEDECINS>
- - <GET_MEDECIN_INFO>
- <parent>ACK_COMMON1</parent>
- - <segments>
- - <QUERY_INFO>
- <MEDECIN_SNILS>{P_MEDECIN_SNILS}</MEDECIN_SNILS>
- </QUERY_INFO>
- - <MEDECINS_INFO>
- <NOM>{NOM}</NOM>
- <PRENOM>{PRENOM}</PRENOM>
- <PHOTO>{BIN_PHOTO}</PHOTO>
- <EDUCATION>{EDUCATION}</EDUCATION>
- <DEGREE>{DEGREE}</DEGREE>
- <SPECIALIZATION>{SPECIALIZATION}</SPECIALIZATION>
- <EXPERIENCE>{EXPERIENCE}</EXPERIENCE>
- <CONFERENCES>{CONFERENCES}</CONFERENCES>
- <HOBBIES>{HOBBIES}</HOBBIES>
- <DESCRIPTION>{DESCRIPTION}</DESCRIPTION>
- <SCHEDULE_TEXT>{SCHEDULE_TEXT}</SCHEDULE_TEXT>
- </MEDECINS_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </GET_MEDECIN_INFO>
- - <GET_MEDECIN_PLANNING_DATES>
- <parent>ACK_COMMON1</parent>
- - <segments>
- - <QUERY_INFO>
- <SERV_CODE>{P_SERV_CODE}</SERV_CODE>
- <SNILS>{P_SNILS}</SNILS>
- <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
- - <!-- 'cach' - за наличные, 'dms' по ДМС прикреплению, 'oms' - по ОМС прикреплению
- -->
- <SERV_PAY_TYPE>{P_SERV_PAY_TYPE}</SERV_PAY_TYPE>
- <MEDECIN_SNILS>{P_MEDECIN_SNILS}</MEDECIN_SNILS>
- </QUERY_INFO>
- - <DATE_LIST query="dates_query">
- <FREE_DATE>{FREE_DATE}</FREE_DATE>
- </DATE_LIST>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <name>dates_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </GET_MEDECIN_PLANNING_DATES>
- - <GET_MEDECIN_PLANNING_TIMESLOTS>
- <parent>ACK_COMMON1</parent>
- - <segments>
- - <QUERY_INFO>
- <SERV_CODE>{P_SERV_CODE}</SERV_CODE>
- <SNILS>{P_SNILS}</SNILS>
- <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
- - <!-- 'cach' - за наличные, 'dms' по ДМС прикреплению, 'oms' - по ОМС прикреплению
- -->
- <SERV_PAY_TYPE>{P_SERV_PAY_TYPE}</SERV_PAY_TYPE>
- <MEDECIN_SNILS>{P_MEDECIN_SNILS}</MEDECIN_SNILS>
- <VISIT_DATE>{P_VISIT_DATE}</VISIT_DATE>
- </QUERY_INFO>
- - <TIMESLOTS query="times_query">
- <FREE_TIME>{FREE_TIME}</FREE_TIME>
- </TIMESLOTS>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <name>times_query</name>
- <type>open</type>
- <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>
- </query>
- </queries>
- </GET_MEDECIN_PLANNING_TIMESLOTS>
- - <CREATE_ORDER>
- <parent>ACK_COMMON1</parent>
- - <segments>
- - <QUERY_INFO>
- <SNILS>{P_SNILS}</SNILS>
- <OMS_POLICE>{P_OMS_POLICE}</OMS_POLICE>
- - <!-- 'cach' - за наличные, 'dms' по ДМС прикреплению, 'oms' - по ОМС прикреплению
- -->
- <SERV_PAY_TYPE>{P_SERV_PAY_TYPE}</SERV_PAY_TYPE>
- <SERV_CODE>{P_SERV_CODE}</SERV_CODE>
- <MEDECIN_SNILS>{P_MEDECIN_SNILS}</MEDECIN_SNILS>
- <VISIT_DATE_TIME>{P_VISIT_DATE_TIME}</VISIT_DATE_TIME>
- <PHONE>{P_PHONE}</PHONE>
- </QUERY_INFO>
- <RESULT_TEXT>{RESULT_TEXT}</RESULT_TEXT>
- - <REPORT_INFO>
- <VISIT_NUMBER>{VISIT_NUMBER}</VISIT_NUMBER>
- <VISIT_DATE>{VISIT_DATE}</VISIT_DATE>
- <PATIENT_FIO>{PATIENT_FIO}</PATIENT_FIO>
- <MEDECIN_FIO>{MEDECIN_FIO}</MEDECIN_FIO>
- <MEDECIN_SPEC>{MEDECIN_SPEC}</MEDECIN_SPEC>
- <EXAM_CODE>{EXAM_CODE}</EXAM_CODE>
- <EXAM_NAME>{EXAM_NAME}</EXAM_NAME>
- <CABINET>{CABINET}</CABINET>
- <VISIT_CREATE_DATE>{VISIT_CREATE_DATE}</VISIT_CREATE_DATE>
- <PLANNING_ID>{PLANNING_ID}</PLANNING_ID>
- </REPORT_INFO>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </CREATE_ORDER>
- - <CANCEL_ORDER>
- <parent>ACK_COMMON1</parent>
- - <segments>
- - <QUERY_INFO>
- <VISIT_NUMBER>{P_VISIT_NUMBER}</VISIT_NUMBER>
- </QUERY_INFO>
- <RESULT_TEXT>{RESULT_TEXT}</RESULT_TEXT>
- </segments>
- - <queries>
- - <query>
- <order>3</order>
- <type>open</type>
- <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>
- </query>
- </queries>
- </CANCEL_ORDER>
- </sections>
- </hl7>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement