Для методов получения информации по данным беременной и ребенка входная информация является одинаковой:
- СНИЛС (необязательный)
- Фамилия
- Имя
- Отчество
- Дата рождения
- Код ДУЛ
- Наименование ДУЛ
- Серия ДУЛ
- Номер ДУЛ
- Дата выдачи ДУЛ
1. Поиск карт пациента
Для поиска карт пациента все данные нормализуются, чтобы искать через *_Find поля.
Поиск карт пациента происходит в БД МИП по входным данным запроса:
1) Если есть СНИЛС, то ищем по набору данных ФИО + ДР + СНИЛС:
DECLARE @@ss varchar(11) = @0 DECLARE @@fio varchar(200) = @1 DECLARE @@birthday datetime = @2 SELECT DISTINCT j.SourceGuid FROM oms_mn_Ident id WITH(NOLOCK) JOIN oms_mn_Journal j WITH(NOLOCK) ON id.rf_mn_personid = j.rf_mn_personid JOIN oms_mn_Person p WITH(NOLOCK) ON id.rf_mn_PersonID = p.mn_PersonID WHERE 1=1 AND id.SS_Find = @@ss AND p.FIO_Find = @@fio AND p.BithDayDate = @@birthday
2) Если нет СНИЛС, либо не нашли по такому набору параметров, то ищем по набору ФИО + ДР + ДУЛ:
DECLARE @@dul varchar(20) = @0 DECLARE @@fio varchar(200) = @1 DECLARE @@birthday datetime = @2 SELECT DISTINCT j.SourceGuid FROM oms_mn_DocIdent di WITH(NOLOCK) JOIN oms_mn_Journal j WITH(NOLOCK) ON di.rf_mn_PersonID = j.rf_mn_PersonID JOIN Oms_TypeDoc td WITH(NOLOCK) ON di.rf_TypeDocID = td.TYPEDOCID JOIN oms_mn_Person p WITH(NOLOCK) ON di.rf_mn_PersonID = p.mn_PersonID WHERE 1=1 AND di.SNDOC_FIND = @@dul AND p.FIO_Find = @@fio AND p.BithDayDate = @@birthday
3) Если не нашли по набору параметров из п. 2, пытаемся найти по ФИО + ДР и пустыми серией и номером документа:
DECLARE @@fio varchar(200) = @0 DECLARE @@birthday datetime = @1 SELECT DISTINCT j.SourceGuid FROM oms_mn_Person p WITH(NOLOCK) JOIN oms_mn_Journal j WITH(NOLOCK) on j.rf_mn_PersonID = p.mn_PersonID WHERE 1 = 1 AND p.FIO_Find = @@fio AND p.BithDayDate = @@birthday AND DocIdent_Series = '' AND DocIdent_Number = ''
4) Если по набору данных из п. 3 не было найдено информации о пациенте, сервис возвращает ответ со статусом 404 и сообщением: "По указанным данным не найдена информация о беременной" или "По указанным данным не найдена информация о ребенке" в зависимости от запроса.
2.1) Поиск подтверждения необходимости выплат для беременной
Для беременной поиск заключается в поиске карты беременной (МКБ), в которой установлена отметка о необходимости выплаты (поля rf_atc_milkFoodPaymentId и FoodPaymentDate). Поиск выполняется в БД ЦОД ИЭМК по идентификаторам карт, которые мы нашли ранее:
select fp.Code as FoodPaymentStatus, mk.FoodPaymentDate, mk.DateOpen, mk.FirstGestationalAge, DATEADD(DAY, 279 - (FirstGestationalAge*7), mk.DateOpen) as [PlannedBirthDate] from hlt_mkp_Card mk WITH(NOLOCK) JOIN hlt_atc_MilkFoodPayment fp WITH(NOLOCK) on mk.rf_atc_MilkFoodPaymentID = fp.atc_MilkFoodPaymentID WHERE 1 = 1 AND mk.DateClose > GETDATE() AND mk.rf_MKABGUID in (@0)
Далее полученными данными заполняется модель, и отдаётся в виде ответа метода Получение информации по выплатам по данным беременной.
2.2) Поиск подтверждения необходимости выплат для ребёнка
Для ребёнка поиск заключается в поиске МКАБ, в которой установлена отметка о необходимости выплаты (поля rf_atc_milkFoodPaymentId, rf_atc_milkFoodTypeId, FoodPaymentDate)
SELECT TOP 1 mkab.DATE_BD as [Birthday], mft.Code as [FoodTypeCode], mft.Name as [FoodTypeName], mfp.Code as [FoodPaymentCode], mkab.FoodPaymentDate as [FoodPaymentDate] FROM hlt_MKAB mkab WITH(NOLOCK) JOIN hlt_atc_MilkFoodPayment mfp WITH(NOLOCK) on mkab.rf_atc_MilkFoodPaymentID = mfp.atc_MilkFoodPaymentID JOIN hlt_atc_MilkFoodType mft WITH(NOLOCK) on mkab.rf_atc_MilkFoodTypeID = mft.atc_MilkFoodTypeID WHERE 1=1 AND mkab.FoodPaymentDate != '1900-01-01T00:00:00.000' AND mkab.UGUID in (@0)
Далее полученными данными заполняется модель, и отдаётся в виде ответа метода Получение информации по выплатам по данным ребенка .