Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE PROCEDURE IMP70_P_ISKUS_AMB_TALONS
- (
- pnLPU IN NUMBER,
- pnLOG_IDENT OUT NUMBER,
- pnERR_IGNORE IN NUMBER DEFAULT 0
- )
- IS
- nDISEAS_TYPES_POLIK CONSTANT D_DISEASECASE_TYPES.DCT_CODE%TYPE := 0;
- -- тип случая заболевания "поликлиника"
- nFD_PRVD_CONDITS_POLIK CONSTANT D_FD_PRVD_CONDITS.ID%TYPE := 3;
- -- условие оказания "поликлиника"
- sVIS_TEMPL_CODE_FTIZ CONSTANT D_VISIT_TEMPLATES.VT_CODE%TYPE := 'ftiz2-mini';
- -- шаблон приема "прием фтизиатра3"
- sCONTEXT_EMPLOYER D_PKG_STD.tSTR; -- контекстная переменная EMPLOYER
- nVER_VISITPURPOSES D_PKG_STD.tREF; -- идентификатор версии для раздела VISITPURPOSES
- nVER_VISITRESULTS D_PKG_STD.tREF; -- идентификатор версии для раздела VISITRESULTS
- nVER_PAYMENT_KIND D_PKG_STD.tREF; -- идентификатор версии для раздела PAYMENT_KIND
- nVER_VISITPLACES D_PKG_STD.tREF; -- идентификатор версии для раздела VISITPLACES
- nVER_SERVICES D_PKG_STD.tREF; -- идентификатор версии для раздела SERVICES
- nVER_MKB D_PKG_STD.tREF; -- идентификатор версии для раздела MKB10
- nAGENTS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENTS
- nPERSMEDCARD_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_PERSMEDCARD
- nDIRECTIONS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_DIRECTIONS
- nDIRECTION_SERVICES_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_DIRECTION_SERVICES
- nDISEASECASES_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_DISEASECASES
- nVISITS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_VISITS
- nVIS_DIAGNOSISES_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_VIS_DIAGNOSISES
- nAMB_TALONS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AMB_TALONS
- nAMB_TALON_VISITS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AMB_TALON_VISITS
- nAMB_TALON_MKBS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AMB_TALON_MKBS
- nLPUDICT_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_LPUDICT
- nNOMER_PP D_PKG_STD.tREF; -- номер по порядку строки испорта
- nERROR D_PKG_STD.tREF := 0;-- кол-во ошибок импорта
- sERROR_CODE D_PKG_STD.tSTR; -- код ошибки
- sCARD_NUMB D_PKG_STD.tSTR; -- номер мед карты пациента
- nVIS_PURPOSE D_PKG_STD.tREF; -- идентификатор записи D_VISITPURPOSES
- nVIS_RESULT D_PKG_STD.tREF; -- идентификатор записи D_VISITRESULTS
- nPAYMENT_KIND D_PKG_STD.tREF; -- идентификатор записи D_PAYMENT_KIND
- nVIS_PLACE D_PKG_STD.tREF; -- идентификатор записи D_VISITPLACES
- nDC_TYPE D_PKG_STD.tREF; -- тип случая заболевания
- nDC_IS_CLOSE D_PKG_STD.tREF; -- признак закрытия случая (1- закрывается, 0 - нет)
- nSERVICE D_PKG_STD.tREF; -- Услуга ЛПУ
- nEMPLOYERS D_PKG_STD.tREF; -- врач
- nUET_COUNT D_PKG_STD.tREF; -- Кол-во затраченных Условных Единиц Труда (УЕТ)
- nVISIT_TEMPLATE D_PKG_STD.tREF; -- Шаблон приема
- nMKB D_PKG_STD.tREF; -- идентификатор кода МКБ10
- sDC_CONTENT D_PKG_STD.tSTR; -- содержание случая заболевания
- --Процедура добавления записи в лог импорта
- PROCEDURE LG
- (
- ppsLOG_CODE IN VARCHAR2,
- ppsLOG_TEXT IN VARCHAR2,
- ppsINFO1 IN VARCHAR2 DEFAULT NULL,
- ppsINFO2 IN VARCHAR2 DEFAULT NULL,
- ppsINFO3 IN VARCHAR2 DEFAULT NULL
- )
- IS
- BEGIN
- D_PKG_IMP_LOG.ADD(pnLOG_IDENT, ppsLOG_CODE, ppsLOG_TEXT, ppsINFO1, ppsINFO2, ppsINFO3);
- END LG;
- --функция проверки наличия пациента в D_AGENTS
- PROCEDURE GET_AGENT_ID
- (
- psFIO IN VARCHAR2,
- pdBIRTHDATE IN DATE,
- psSNILS IN VARCHAR2,
- pnAGENTS_ID OUT NUMBER,
- psERROR_CODE OUT VARCHAR2
- )
- IS
- BEGIN
- SELECT a.ID
- INTO pnAGENTS_ID
- FROM D_AGENTS a
- WHERE UPPER(regexp_replace(a.SURNAME||a.FIRSTNAME||a.LASTNAME,'(-)*(\s)','')) = UPPER(regexp_replace(psFIO,'(-)*(\s)',''))
- AND a.BIRTHDATE = pdBIRTHDATE
- AND (a.SNILS = regexp_replace(psSNILS,'\D','')
- OR psSNILS IS NULL);
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- pnAGENTS_ID := NULL;
- psERROR_CODE := 'ERR_NDF_AGENTS';
- WHEN TOO_MANY_ROWS THEN
- pnAGENTS_ID := NULL;
- psERROR_CODE := 'ERR_TMR_AGENTS';
- END GET_AGENT_ID;
- --процедура установки контекста EMPLOYER
- PROCEDURE set_context_employer
- (
- psEMPLOYER IN VARCHAR2
- )
- IS
- BEGIN
- D_PKG_SES.SETCONTEXT('MED','EMPLOYER',psEMPLOYER);
- END;
- BEGIN
- D_PKG_IMP_LOG.INIT('IMP70_ISKUS_AMB_TALONS', pnLPU, pnLOG_IDENT, 0);
- lg('START_IMP','Начало импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
- --блок получения версий для разделов
- nVER_VISITPURPOSES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'VISITPURPOSES');
- nVER_VISITRESULTS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'VISITRESULTS');
- nVER_PAYMENT_KIND := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'PAYMENT_KIND');
- nVER_VISITPLACES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'VISITPLACES');
- nVER_SERVICES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'SERVICES');
- nVER_MKB := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'MKB10');
- --по заданному ЛПУ получим LPUDICT
- BEGIN
- SELECT l.LPUDICT
- INTO nLPUDICT_ID
- FROM D_LPU l
- WHERE l.id = pnLPU
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- nERROR := nERROR + 1;
- lg('ERR_NFD_LPUDICT','Не определно заданное ЛПУ: '||pnLPU);
- END;
- --Запомним врача, под которым делаемся импорт, чтобы в конце процедуры вернуть назад
- --так как в процессе импорта мы будем менять контекстную переменную
- --надо для того, так как D_PKG_AMB_TALONS.ADD использует контекстную переменную для определения EMPLOYERS
- sCONTEXT_EMPLOYER := D_PKG_EMPLOYERS.GET_ID(pnLPU);
- --Цикл по всем записям таблицы IMP70_TUBKONVE с импортируемыми данными
- IF nERROR = 0 OR pnERR_IGNORE = 1 THEN
- FOR cr IN (SELECT t.nomer_pp,
- t.fio,
- t.birthdate,
- t.mkb,
- t.employer,
- t.visit_date,
- t.vis_result,
- t.vis_purpos vis_purpose,
- t.paym_kind payment_kind,
- t.vis_place,
- LAG(t.FIO) over (PARTITION BY NULL ORDER BY t.FIO, t.BIRTHDATE, t.VISIT_DATE) prev_fio,
- LAG(t.BIRTHDATE) over (PARTITION BY NULL ORDER BY t.FIO, t.BIRTHDATE, t.VISIT_DATE) prev_birthdate,
- LAG(t.VIS_RESULT) over (PARTITION BY NULL ORDER BY t.FIO, t.BIRTHDATE, t.VISIT_DATE) prev_vis_result
- FROM IMP70_ISKUS_AMB_TALONS t
- ORDER BY t.FIO, t.BIRTHDATE, t.VISIT_DATE, t.VIS_RESULT nulls FIRST
- )
- LOOP
- nNOMER_PP := cr.NOMER_PP;
- nAGENTS_ID := NULL;
- nPERSMEDCARD_ID := NULL;
- nDIRECTIONS_ID := NULL;
- nDIRECTION_SERVICES_ID := NULL;
- nVISITS_ID := NULL;
- nVIS_DIAGNOSISES_ID := NULL;
- nAMB_TALON_VISITS_ID := NULL;
- nAMB_TALON_MKBS_ID := NULL;
- sCARD_NUMB := NULL;
- nDC_TYPE := NULL;
- nDC_IS_CLOSE := NULL;
- nVIS_PURPOSE := NULL;
- nVIS_RESULT := NULL;
- nPAYMENT_KIND := NULL;
- nVIS_PLACE := NULL;
- nSERVICE := NULL;
- nEMPLOYERS := NULL;
- nUET_COUNT := NULL;
- nVISIT_TEMPLATE := NULL;
- nMKB := NULL;
- sDC_CONTENT := NULL;
- --блок проверки заполнения всех обязательных полей в таблице импорта
- --если данных нет, то пишем в лог и переходим к следующей строке
- IF cr.FIO IS NULL THEN
- lg('ERR_NULL_COLUMN','Не заполнено поле ФИО в строке '||cr.NOMER_PP);
- END IF;
- IF cr.BIRTHDATE IS NULL THEN
- lg('ERR_NULL_COLUMN','Не заполнено поле Дата рождения в строке '||cr.NOMER_PP);
- END IF;
- IF cr.MKB IS NULL THEN
- lg('ERR_NULL_COLUMN','Не заполнено поле Код МКБ в строке '||cr.NOMER_PP);
- END IF;
- IF cr.EMPLOYER IS NULL THEN
- lg('ERR_NULL_COLUMN','Не заполнено поле Врач в строке '||cr.NOMER_PP);
- END IF;
- IF cr.VISIT_DATE IS NULL THEN
- lg('ERR_NULL_COLUMN','Не заполнено поле Дата посещения в строке '||cr.NOMER_PP);
- END IF;
- IF cr.VIS_PURPOSE IS NULL THEN
- lg('ERR_NULL_COLUMN','Не заполнено поле Цель посещения в строке '||cr.NOMER_PP);
- END IF;
- IF cr.PAYMENT_KIND IS NULL THEN
- lg('ERR_NULL_COLUMN','Не заполнено поле Вид оплаты в строке '||cr.NOMER_PP);
- END IF;
- IF cr.FIO IS NULL
- OR cr.BIRTHDATE IS NULL
- OR cr.MKB IS NULL
- OR cr.EMPLOYER IS NULL
- OR cr.VISIT_DATE IS NULL
- OR cr.VIS_PURPOSE IS NULL
- OR cr.PAYMENT_KIND IS NULL THEN
- continue;
- END IF;
- --------------------------------------
- --проверим нет ли в таблице D_AGENTS такого пациента
- GET_AGENT_ID(psFIO => cr.FIO,
- pdBIRTHDATE => cr.BIRTHDATE,
- psSNILS => NULL,
- pnAGENTS_ID => nAGENTS_ID,
- psERROR_CODE => sERROR_CODE);
- IF nAGENTS_ID IS NULL THEN
- IF sERROR_CODE = 'ERR_TMR_AGENTS' THEN
- lg('ERR_TMR_AGENTS','Найдено несколько пациентов: ФИО - '||cr.FIO||', Дата рожд.- '||TO_CHAR(cr.BIRTHDATE,'dd.mm.yyyy')||' (строка №'||cr.NOMER_PP||')');
- ELSIF sERROR_CODE = 'ERR_NDF_AGENTS' THEN
- lg('ERR_NDF_AGENTS','Не определен пациент: ФИО - '||cr.FIO||', Дата рожд.- '||TO_CHAR(cr.BIRTHDATE,'dd.mm.yyyy')||' (строка №'||cr.NOMER_PP||')');
- END IF;
- continue;
- END IF;
- --Если пациент найден в системе, то производим запись в остальные разделы
- --В соответствии с ТЗ новых пациентов не создаем
- IF nAGENTS_ID IS NOT NULL THEN
- ----------------------------------------
- --2 блок обработки данных в разделе D_PERSMEDCARD
- ----------------------------------------
- BEGIN
- SELECT pmc.ID
- INTO nPERSMEDCARD_ID
- FROM D_PERSMEDCARD pmc
- WHERE pmc.LPU = pnLPU
- AND pmc.AGENT = nAGENTS_ID
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- sCARD_NUMB := D_PKG_PERSMEDCARD.GET_CARD_NUMB(pnlpu => pnLPU);
- --при сортировке цикла по таблице импорта (order by t.FIO, t.BIRTHDATE, t.VISIT_DATE, t.VIS_RESULT nulls first)
- --данный блок должен вызываться только первый раз для пациента и поле cr.VISIT_DATE содержать дату самого раннего визита
- BEGIN
- D_PKG_PERSMEDCARD.ADD(pnD_INSERT_ID => nPERSMEDCARD_ID,
- pnLPU => pnLPU,
- pnCID => NULL,
- pnAGENT => nAGENTS_ID,
- pnBLOODGROUPE => NULL,
- pnRHESUS => NULL,
- psECOLOR => NULL,
- psCARD_NUMB => sCARD_NUMB,
- psNOTE => NULL,
- pnREG_DIVISION => NULL,
- pnPMC_TYPE => NULL,
- pnIA_PRINTED => 0,
- pnSMS_AGREE => 0,
- pnEMAIL_AGREE => 0,
- pdCREATEDATE => cr.VISIT_DATE);
- EXCEPTION
- WHEN OTHERS THEN
- nPERSMEDCARD_ID := NULL;
- lg(pnLOG_IDENT,'ERR_ADD_PERSMEDCARD','Ошибка добавления карты пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- IF nPERSMEDCARD_ID IS NULL THEN
- lg('ERR_NDF_PERSMEDCARD','Не определена мед карта пациента: ФИО - '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- continue;
- END IF;
- SAVEPOINT IMP70_P_ISKUS_PERSMEDCARD;
- ----------------------------------------
- --блок обработки данных для последующих вставок в таблицы
- ----------------------------------------
- --определение цели визита
- SELECT (SELECT vp.ID
- FROM D_VISITPURPOSES vp
- WHERE vp.VERSION = nVER_VISITPURPOSES
- AND LOWER(vp.VP_CODE) = (SELECT LOWER(visat.MIS_CODE)
- FROM IMP70_V_ISKUS_AMB_TALON visat
- WHERE visat.SPR_CONFORM = 'VISITPURPOSES'
- AND (visat.LPU IS NULL OR visat.LPU = pnLPU)
- AND (LOWER(TRIM(both ' ' FROM visat.FILE_CODE)) = LOWER(TRIM(both ' ' FROM cr.VIS_PURPOSE))
- OR
- (visat.FILE_CODE IS NULL AND cr.VIS_PURPOSE IS NULL)
- )
- AND ROWNUM = 1)
- AND COALESCE(cr.VISIT_DATE,TRUNC(SYSDATE)) BETWEEN vp.DATE_BEGIN AND COALESCE(vp.DATE_END,cr.VISIT_DATE,TRUNC(SYSDATE))
- AND ROWNUM = 1)
- INTO nVIS_PURPOSE
- FROM dual;
- IF nVIS_PURPOSE IS NULL THEN
- lg('ERR_NDF_VIS_PURPOSE','Не определена цель визита для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- continue;
- END IF;
- --определение результата визита
- IF cr.VIS_RESULT IS NOT NULL THEN
- SELECT (SELECT vr.ID
- FROM D_VISITRESULTS vr
- WHERE vr.VERSION = nVER_VISITRESULTS
- AND LOWER(vr.VR_CODE) = (SELECT LOWER(visat.MIS_CODE)
- FROM IMP70_V_ISKUS_AMB_TALON visat
- WHERE visat.SPR_CONFORM = 'VISITRESULTS'
- AND (visat.LPU IS NULL OR visat.LPU = pnLPU)
- AND (LOWER(TRIM(both ' ' FROM visat.FILE_CODE)) = LOWER(TRIM(both ' ' FROM cr.VIS_RESULT))
- OR
- (visat.FILE_CODE IS NULL AND cr.VIS_RESULT IS NULL)
- )
- AND ROWNUM = 1)
- AND COALESCE(cr.VISIT_DATE,TRUNC(SYSDATE)) BETWEEN vr.DATE_BEGIN AND COALESCE(vr.DATE_END,cr.VISIT_DATE,TRUNC(SYSDATE))
- AND ROWNUM = 1)
- INTO nVIS_RESULT
- FROM dual;
- IF nVIS_PURPOSE IS NULL THEN
- lg('ERR_NDF_VIS_RESULT','Не определен результат обращения для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- continue;
- END IF;
- END IF;
- --определение вида оплаты
- SELECT (SELECT pk.ID
- FROM D_PAYMENT_KIND pk
- WHERE pk.VERSION = nVER_PAYMENT_KIND
- AND LOWER(pk.PK_CODE) = (SELECT LOWER(visat.MIS_CODE)
- FROM IMP70_V_ISKUS_AMB_TALON visat
- WHERE visat.SPR_CONFORM = 'PAYMENT_KIND'
- AND (visat.LPU IS NULL OR visat.LPU = pnLPU)
- AND (LOWER(TRIM(both ' ' FROM visat.FILE_CODE)) = LOWER(TRIM(both ' ' FROM cr.PAYMENT_KIND))
- OR
- (visat.FILE_CODE IS NULL AND cr.PAYMENT_KIND IS NULL)
- )
- AND ROWNUM = 1)
- AND ROWNUM = 1)
- INTO nPAYMENT_KIND
- FROM dual;
- IF nPAYMENT_KIND IS NULL THEN
- lg('ERR_NDF_PAYMENT_KIND','Не определен вид платежа для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- continue;
- END IF;
- --определение места обслуживания
- IF cr.VIS_PLACE IS NOT NULL THEN
- SELECT (SELECT vp.ID
- FROM D_VISITPLACES vp
- WHERE vp.VERSION = nVER_VISITPLACES
- AND LOWER(vp.VP_CODE) = (SELECT LOWER(visat.MIS_CODE)
- FROM IMP70_V_ISKUS_AMB_TALON visat
- WHERE visat.SPR_CONFORM = 'VISITPLACES'
- AND (visat.LPU IS NULL OR visat.LPU = pnLPU)
- AND (LOWER(TRIM(both ' ' FROM visat.FILE_CODE)) = LOWER(TRIM(both ' ' FROM cr.VIS_PLACE))
- OR
- (visat.FILE_CODE IS NULL AND cr.VIS_PLACE IS NULL)
- )
- AND ROWNUM = 1)
- AND ROWNUM = 1)
- INTO nVIS_PLACE
- FROM dual;
- IF nVIS_PLACE IS NULL THEN
- lg('ERR_NDF_VIS_PLACE','Не определено место обслуживания для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- continue;
- END IF;
- END IF;
- --определение признака закрытия случая
- SELECT COALESCE((SELECT visat.MIS_CODE
- FROM IMP70_V_ISKUS_AMB_TALON visat
- WHERE visat.SPR_CONFORM = 'VIS_RESULTS_DC_IS_CLOSE'
- AND (visat.LPU IS NULL OR visat.LPU = pnLPU)
- AND LOWER(TRIM(both ' ' FROM visat.FILE_CODE)) = LOWER(TRIM(both ' ' FROM cr.VIS_RESULT))
- AND cr.VIS_RESULT IS NOT NULL
- AND ROWNUM = 1), '0')
- INTO nDC_IS_CLOSE
- FROM dual;
- --определение оказываемой услуги
- SELECT (SELECT s.ID
- FROM D_SERVICES s
- WHERE s.VERSION = nVER_SERVICES
- AND LOWER(s.SE_CODE) = (SELECT LOWER(visat.MIS_CODE)
- FROM IMP70_V_ISKUS_AMB_TALON visat
- WHERE visat.SPR_CONFORM = 'SERVICES'
- AND (visat.LPU IS NULL OR visat.LPU = pnLPU)
- AND (LOWER(TRIM(both ' ' FROM visat.FILE_CODE)) = LOWER(TRIM(both ' ' FROM cr.VIS_PURPOSE))
- OR
- (visat.FILE_CODE IS NULL AND cr.VIS_PURPOSE IS NULL)
- )
- AND ROWNUM = 1)
- AND ROWNUM = 1)
- INTO nSERVICE
- FROM dual;
- IF nSERVICE IS NULL THEN
- lg('ERR_NDF_SERVICES','Не определена оказываемая услуга для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- continue;
- END IF;
- --определение кода МКБ
- SELECT (SELECT m.ID
- FROM D_MKB10 m
- WHERE m.VERSION = nVER_MKB
- AND UPPER(m.MKB_CODE) = UPPER(cr.MKB)
- AND ROWNUM = 1)
- INTO nMKB
- FROM dual;
- IF nMKB IS NULL THEN
- lg('ERR_NDF_MKB10','Не определен код МКБ для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- continue;
- END IF;
- --определение шаблона приема
- SELECT (SELECT vt.ID
- FROM D_VISIT_TEMPLATES vt
- WHERE vt.LPU = pnLPU
- AND LOWER(vt.VT_CODE) = LOWER(sVIS_TEMPL_CODE_FTIZ)
- AND ROWNUM = 1)
- INTO nVISIT_TEMPLATE
- FROM dual;
- IF nVISIT_TEMPLATE IS NULL THEN
- lg('ERR_NDF_VISIT_TEMPLATE','Не определен шаблон приема для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- continue;
- END IF;
- --определение врача
- BEGIN
- SELECT e.ID
- INTO nEMPLOYERS
- FROM D_EMPLOYERS e
- join D_AGENTS a ON a.ID = e.AGENT
- WHERE e.LPU = pnLPU
- AND (LOWER(a.SURNAME) = LOWER(cr.EMPLOYER)
- OR
- LOWER(a.SURNAME) = TRIM(LOWER(SUBSTR(cr.EMPLOYER, INSTR(cr.EMPLOYER,'.')+1))) --на случай, если указано, например "фтиз. Маслянко"
- );
- EXCEPTION
- WHEN OTHERS THEN
- SELECT (SELECT LOWER(visat.MIS_CODE)
- FROM IMP70_V_ISKUS_AMB_TALON visat
- WHERE visat.SPR_CONFORM = 'EMPLOYERS'
- AND (visat.LPU IS NULL OR visat.LPU = pnLPU)
- AND LOWER(TRIM(both ' ' FROM visat.FILE_CODE)) = LOWER(TRIM(both ' ' FROM SUBSTR(cr.EMPLOYER, INSTR(cr.EMPLOYER,'.')+1))) --на случай, если указано, например "фтиз. Маслянко"
- AND ROWNUM = 1)
- INTO nEMPLOYERS
- FROM dual;
- END;
- IF nEMPLOYERS IS NULL THEN
- lg('ERR_NDF_EMPLOYERS','Не определен врач оказываемой услуги для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- continue;
- ELSE
- set_context_employer(nEMPLOYERS);
- END IF;
- ----------------------------------------
- --5 блок обработки данных в разделе D_DISEASECASES
- ----------------------------------------
- --Создаем случай только при смене пациента
- IF (cr.fio <> cr.prev_fio OR cr.birthdate <> cr.prev_birthdate)
- OR
- (cr.prev_fio IS NULL AND cr.prev_birthdate IS NULL)
- OR
- nDISEASECASES_ID IS NULL THEN
- --проверим, может быть уже есть открытыя случай, созданный на прежних этапах импорта
- BEGIN
- SELECT dc.ID
- INTO nDISEASECASES_ID
- FROM D_DISEASECASES dc
- WHERE dc.LPU = pnLPU
- AND cr.VISIT_DATE BETWEEN dc.DC_OPENDATE AND COALESCE(dc.DC_CLOSEDATE,cr.VISIT_DATE)
- AND dc.PATIENT = nPERSMEDCARD_ID
- AND dc.DC_TYPE = nDISEAS_TYPES_POLIK
- AND dc.DC_SOURCE = 0
- AND dc.DC_OPENDATE = (SELECT MAX(dc2.DC_OPENDATE)
- FROM D_DISEASECASES dc2
- WHERE dc2.LPU = pnLPU
- AND cr.VISIT_DATE BETWEEN dc2.DC_OPENDATE AND COALESCE(dc2.DC_CLOSEDATE,cr.VISIT_DATE)
- AND dc2.PATIENT = nPERSMEDCARD_ID
- AND dc2.DC_TYPE = nDISEAS_TYPES_POLIK
- AND dc2.DC_SOURCE = 0)
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --сгенерируем содержание для случая
- SELECT (SELECT TO_CHAR(cr.VISIT_DATE,'dd.mm.yyyy')||' '||m.MKB_CODE||' '||m.MKB_NAME
- FROM D_MKB10 m
- WHERE m.ID = nMKB
- AND ROWNUM = 1)
- INTO sDC_CONTENT
- FROM dual;
- BEGIN
- D_PKG_DISEASECASES.ADD(pnD_INSERT_ID => nDISEASECASES_ID,
- pnLPU => pnLPU,
- pnPATIENT => nPERSMEDCARD_ID,
- psDC_CONTENT => sDC_CONTENT,
- pdDC_OPENDATE => cr.VISIT_DATE, --при сортировке цикла по таблице импорта (order by t.FIO, t.BIRTHDATE, t.VISIT_DATE, t.VIS_RESULT nulls first) это дата первого посещения
- pnDC_TYPE => nDISEAS_TYPES_POLIK,
- pnDC_SOURCE => 0);
- EXCEPTION
- WHEN OTHERS THEN
- nDISEASECASES_ID := NULL;
- lg('ERR_ADD_DISEASECASES','Ошибка создания случая заболевания для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')', SQLERRM);
- ROLLBACK TO IMP70_P_ISKUS_PERSMEDCARD;
- continue;
- END;
- END;
- END IF;
- SAVEPOINT IMP70_P_ISKUS_DISEASECASES; --точка сохранения для отката до случая
- ----------------------------------------
- --8 блок обработки данных в разделе D_AMB_TALONS
- ----------------------------------------
- --Создаем амбулаторный талон только при смене пациента или если в рамках одно и того же пациента
- --у предыдущей записи в таблице импорта был проставлен результат обращения
- IF (cr.fio <> cr.prev_fio OR cr.birthdate <> cr.prev_birthdate)
- OR
- (cr.prev_fio IS NULL AND cr.prev_birthdate IS NULL)
- OR
- nAMB_TALONS_ID IS NULL
- OR
- (cr.fio = cr.prev_fio
- AND cr.birthdate = cr.prev_birthdate
- AND (cr.prev_vis_result IS NOT NULL OR nAMB_TALONS_ID IS NULL)
- ) THEN
- --получим данные для вставки в таблицу
- SELECT (SELECT visat.MIS_CODE
- FROM IMP70_V_ISKUS_AMB_TALON visat
- WHERE visat.SPR_CONFORM = 'AT_DC_TYPE'
- AND (visat.LPU IS NULL OR visat.LPU = pnLPU)
- AND (LOWER(TRIM(both ' ' FROM visat.FILE_CODE)) = LOWER(TRIM(both ' ' FROM cr.VIS_PURPOSE))
- OR
- (visat.FILE_CODE IS NULL AND cr.VIS_PURPOSE IS NULL)
- )
- AND ROWNUM = 1
- )
- INTO nDC_TYPE
- FROM dual;
- IF nDC_TYPE IS NULL THEN
- nAMB_TALONS_ID := NULL;
- lg('ERR_NDF_AT_DC_TYPE','Не определен тип случая для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- ROLLBACK TO IMP70_P_ISKUS_DISEASECASES;
- continue;
- END IF;
- --проверим нет ли открытого талона от прежнего импорта
- BEGIN
- SELECT AT.ID
- INTO nAMB_TALONS_ID
- FROM D_AMB_TALONS AT
- WHERE AT.LPU = pnLPU
- AND AT.PERSMEDCARD = nPERSMEDCARD_ID
- AND AT.AT_TYPE = 2
- AND AT.DISEASECASE = nDISEASECASES_ID
- AND COALESCE(AT.END_DATE,cr.VISIT_DATE) >= cr.VISIT_DATE
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_AMB_TALONS.ADD(pnD_INSERT_ID => nAMB_TALONS_ID,
- pnLPU => pnLPU,
- pnCID => NULL,
- pnPERSMEDCARD => nPERSMEDCARD_ID,
- pnAT_TYPE => 2,
- pnFIRST_REF_PURPOSE => nVIS_PURPOSE,
- pnREF_KIND => NULL,
- pdDIRECT_DATE => NULL,
- psDIRECT_NUMB => NULL,
- pnDIRECT_LPU => NULL,
- pnDISEASECASE => nDISEASECASES_ID,
- pnHOSP_MKB => NULL,
- pnHOSP_KIND => NULL,
- pnREF_RESULT => nVIS_RESULT,
- pnD_GROUP => NULL,
- pdEND_DATE => NULL, -- закроем в конце итерации цикла
- pnAT_DC_TYPE => nDC_TYPE,
- pdDEATHDATE => NULL,
- pnDEATHDOCTYPE => NULL,
- pdDEATHDOCDATE => NULL,
- psDEATHDOCNUM => NULL,
- psDEATHCERTIFY_EMP => NULL,
- pnFD_PRVD_CONDIT => nFD_PRVD_CONDITS_POLIK,
- pnKSG => NULL,
- pnDC_IS_CLOSE => 0, --закроем в конце итерации цикла
- pnIS_AUTO => 1,
- pnPC_TYPE => NULL,
- pnPC_STEP => NULL,
- pnHID => NULL,
- pnDC_DIAGNOSIS => NULL,
- pnDIRECT_SPECIALITY => NULL,
- pnPC_RESULT => NULL,
- pnPC_CLOSE_REASON => NULL,
- pnSTATE_MEK => NULL,
- pnMOBILE_BRIG => NULL,
- pnOUTER_DIRECTION => NULL,
- pnDC_TYPE => nDC_TYPE--,
- --pdDATE_REPORT => null
- );
- EXCEPTION
- WHEN OTHERS THEN
- nAMB_TALONS_ID := NULL;
- lg('ERR_ADD_AMB_TALONS','Ошибка создания амбулаторного талона для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')', SQLERRM);
- ROLLBACK TO IMP70_P_ISKUS_DISEASECASES;
- continue;
- END;
- END;
- END IF;
- SAVEPOINT IMP70_P_ISKUS_AMB_TALONS; --точка сохранения для отката до амб. талона
- ----------------------------------------
- --3 блок обработки данных в разделе D_DIRECTIONS
- ----------------------------------------
- --проверим не была ли создана запись на прежних итерациях импорта
- BEGIN
- SELECT d.ID
- INTO nDIRECTIONS_ID
- FROM D_DIRECTIONS d
- WHERE d.LPU = pnLPU
- AND d.PATIENT = nPERSMEDCARD_ID
- AND d.REG_DATE = cr.VISIT_DATE
- AND d.REG_TYPE = 0
- AND d.DIR_TYPE = 0
- AND ROWNUM = 1;
- lg('WAR_DIRECTIONS','Напрвление с такой датой для пациента уже существует: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_DIRECTIONS.ADD(pnD_INSERT_ID => nDIRECTIONS_ID,
- pnLPU => pnLPU,
- pnOUTER_DIRECTION => NULL,
- pnLPU_TO => NULL,
- psLPU_TO_HANDLE => NULL,
- pnPATIENT => nPERSMEDCARD_ID,
- pnREG_VISIT => NULL,
- psDIR_COMMENT => NULL,
- pnREG_TYPE => 0,
- pnDIR_TYPE => 0,
- pnHOSP_MKB => NULL,
- pnHOSP_KIND => NULL,
- psDIR_NUMB => NULL,
- pnSPECIALITY => NULL,
- pnEX_CAUSE_MKB => NULL,
- pnINJURE_KIND => NULL,
- pnINJURE_TIME => NULL,
- pnDIRECTION_KIND => NULL,
- pnHOSP_DEP => NULL,
- psDIR_PREF => NULL,
- pnHOSP_BED_TYPE => NULL,
- pnMES => NULL,
- pnREG_HPKPJ => NULL,
- pnHOSP_REASON => NULL,
- pnREG_DIR_SERV => NULL,
- pdREG_DATE => cr.VISIT_DATE,
- pdHOSP_PLAN_DATE => NULL,
- pdDATE_TR => NULL,
- pnHOSP_DEPDICT => NULL,
- psDOC_COMMENT => NULL,
- pnHOSP_PALAN_KIND => NULL,
- pnHOSP_TYPE => NULL,
- pdTALON_VMP_DATE => NULL,
- pnHOSP_DIRECT_TYPE => NULL,
- pnHOSP_REASON_STREETKIDS => NULL,
- pnTRANSPORTATION_KIND => NULL,
- pnHOSP_HOUR => NULL,
- pnREG_DEP => NULL,
- psHOSP_MKB_EXACT => NULL,
- pnREG_EMPLOYER => NULL,
- psTALON_VMP_NUM => NULL--,
- --pnIS_ONKO => null
- );
- EXCEPTION
- WHEN OTHERS THEN
- nDIRECTIONS_ID := NULL;
- lg('ERR_ADD_DIRECTIONS','Ошибка создания направления для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')', SQLERRM);
- ROLLBACK TO IMP70_P_ISKUS_AMB_TALONS;
- continue;
- END;
- END;
- ----------------------------------------
- --4 блок обработки данных в разделе D_DIRECTION_SERVICES
- ----------------------------------------
- --проверим не была ли создана запись на прежних итерациях импорта
- BEGIN
- SELECT ds.ID
- INTO nDIRECTION_SERVICES_ID
- FROM D_DIRECTION_SERVICES ds
- WHERE ds.LPU = pnLPU
- AND ds.PID = nDIRECTIONS_ID
- AND ds.SERVICE = nSERVICE
- AND ds.EMPLOYER_TO = nEMPLOYERS
- AND ds.REC_DATE = cr.VISIT_DATE
- AND ds.VISIT_PURPOSE = nVIS_PURPOSE
- AND ds.DISEASECASE = nDISEASECASES_ID
- AND ds.REG_TYPE = 0
- AND ds.REC_TYPE = 0
- AND ROWNUM = 1;
- lg('WAR_DIRECTION_SERVICES','Напрвление на данную услугу с такой датой для пациента уже существует: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- -- не используем стандартную процедуру, так как грузим старые данные, которые не проходят проверки
- --D_PKG_DIRECTION_SERVICES.ADD(pnD_INSERT_ID => nDIRECTION_SERVICES_ID,
- IMP70_P_ADD_DIRECTION_SERVICES(pnD_INSERT_ID => nDIRECTION_SERVICES_ID,
- pnLPU => pnLPU,
- pnPID => nDIRECTIONS_ID,
- pnHID => NULL,
- pnIS_COMBINED_PAYMENT => 0,
- pnIS_NECESSARY => 0,
- pnSERVICE => nSERVICE,
- pnEMPLOYER_TO => nEMPLOYERS,
- pnCABLAB_TO => NULL,
- pdREC_DATE => cr.VISIT_DATE,
- pnVISIT_PURPOSE => nVIS_PURPOSE,
- pnREF_KIND => NULL,
- pnVISIT_KIND => NULL,
- pnDISEASECASE => nDISEASECASES_ID,
- pnREG_TYPE => 0,
- pnSERV_STATUS => 0,
- pnIS_PRIMARY => 0,
- psS_COMMNET => NULL,
- pnHH_DEP => NULL,
- pnADD_TYPE => NULL,
- pnREC_TYPE => 0,
- pnHAS_DIAGN => NULL,
- pnSER_COUNT => 1,
- pnMP_DESCRIBE => NULL,
- pnRPID => NULL,
- pnIRID => NULL,
- pnRESERVATION => NULL,
- pnDC_DIAGNOSIS => NULL,
- pnLPU_SERVICE => NULL,
- pnREC_DURATION => NULL,
- pnTICKET_N => NULL,
- psTICKET_S => NULL,
- pnEX_SYSTEM => NULL,
- pnPURCHASE_ORDER => NULL,
- pnIS_CONFIRMED => 0,
- pnNURSE_USER_TEMPLATES => NULL,
- pdCONFIRM_DATE => cr.VISIT_DATE);
- --так как процедура ADD не дает создать направление на услугу со статусов Оказана, простовим статус дополнительно
- D_PKG_DIRECTION_SERVICES.SET_STATUS(pnID => nDIRECTION_SERVICES_ID,
- pnLPU => pnLPU,
- pnSERV_STATUS => 1,
- psSERV_STATUS_REASON => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- nDIRECTION_SERVICES_ID := NULL;
- lg('ERR_ADD_DIRECTION_SERVICES','Ошибка создания направления на услугу для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')', SQLERRM);
- ROLLBACK TO IMP70_P_ISKUS_AMB_TALONS;
- continue;
- END;
- END;
- ----------------------------------------
- --6 блок обработки данных в разделе D_VISITS
- ----------------------------------------
- --получим данные для вставку в таблицу
- WITH AT AS (SELECT AT_DATE
- FROM D_AMB_TALONS
- WHERE ID = nAMB_TALONS_ID)
- SELECT (SELECT (CASE WHEN D_PKG_DAT_TOOLS.FULL_YEARS((SELECT AT_DATE FROM AT), cr.BIRTHDATE) < 18 THEN s.UET_DOCTOR_DET
- ELSE s.UET_DOCTOR
- END)
- FROM D_SERVICES s
- WHERE s.ID = nSERVICE)
- INTO nUET_COUNT
- FROM dual;
- --проверим не была ли создана запись на прежних итерациях импорта
- BEGIN
- SELECT v.ID
- INTO nVISITS_ID
- FROM D_VISITS v
- WHERE v.PID = nDIRECTION_SERVICES_ID
- AND ROWNUM = 1;
- lg('WAR_VISITS','Посещение с такой датой для пациента уже существует: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- -- не используем стандартную процедуру, так как грузим старые данные, которые не проходят проверки
- --D_PKG_VISITS.ADD(pnD_INSERT_ID => nVISITS_ID,
- IMP70_P_ADD_VISITS(pnD_INSERT_ID => nVISITS_ID,
- pnLPU => pnLPU,
- pnPID => nDIRECTION_SERVICES_ID,
- pnEMPLOYER => nEMPLOYERS,
- pdVISIT_DATE => cr.VISIT_DATE,
- pnVISIT_PLACE => nVIS_PLACE,
- pnDGROUP => NULL,
- pnVISIT_RESULT => nVIS_RESULT,
- pnNURSE => NULL,
- pnHELPER => NULL,
- pnANESTHETIZATION => NULL,
- pnPROF_DISEASE => NULL,
- pnSER_COUNT => 1,
- pnSER_KOEFF => 1,
- pnUET_COUNT => nUET_COUNT,
- pnMINUTES => NULL,
- pnCABLAB => NULL,
- pnREF_RESULT => NULL,
- pnVISIT_TEMPLATE => nVISIT_TEMPLATE,
- pnCLOSE_DISEASECASE => NULL,
- pnMED_CARE_KIND => NULL,
- pnAPP_KIND => NULL,
- pnANEST_KIND => NULL,
- pnANEST_INDICATIONS => NULL,
- pnIS_EMERGENCY => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- nVISITS_ID := NULL;
- lg('ERR_ADD_VISITS','Ошибка создания посещения для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')', SQLERRM);
- ROLLBACK TO IMP70_P_ISKUS_AMB_TALONS;
- continue;
- END;
- END;
- ----------------------------------------
- --7 блок обработки данных в разделе D_VIS_DIAGNOSISES
- ----------------------------------------
- --проверим не была ли создана запись на прежних итерациях импорта
- BEGIN
- SELECT vd.ID
- INTO nVIS_DIAGNOSISES_ID
- FROM D_VIS_DIAGNOSISES vd
- WHERE vd.LPU = pnLPU
- AND vd.PID = nVISITS_ID
- AND vd.MKB = nMKB
- AND vd.IS_MAIN = 1
- AND ROWNUM = 1;
- lg('WAR_VIS_DIAGNOSISES','Такой диагноз данного посещения для пациента уже существует: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_VIS_DIAGNOSISES.ADD(pnD_INSERT_ID => nVIS_DIAGNOSISES_ID,
- pnLPU => pnLPU,
- pnPID => nVISITS_ID,
- pnMKB => nMKB,
- pnDISEASECHARACTER => NULL,
- pnIS_MAIN => 1,
- psORGANIZATION => NULL,
- pnINJURE_KIND => NULL,
- pnEX_CAUSE_MKB => NULL,
- psNOTE => NULL,
- pnINJURETIME => NULL,
- pnORGANIZATION_AGENT => NULL,
- pnDISEASE_STAGE => NULL,
- pnIS_ACTIVE => NULL,
- pnCL_OBSERV_CATEGORY => NULL,
- pnDGROUP => NULL,
- pnSTAGE => 1,
- pdDATE_TR => NULL,
- pnIS_CONTROL_CARD => 0,
- pnCONTROL_CARD => NULL,
- pnLOCALIZATION => NULL,
- pnRISAR_STAGE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- nVIS_DIAGNOSISES_ID := NULL;
- lg('ERR_ADD_VISITS','Ошибка создания посещения для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')', SQLERRM);
- ROLLBACK TO IMP70_P_ISKUS_AMB_TALONS;
- continue;
- END;
- END;
- ----------------------------------------
- --9 блок обработки данных в разделе D_AMB_TALON_VISITS
- ----------------------------------------
- --проверим не была ли создана запись на прежних итерациях импорта
- BEGIN
- SELECT atv.ID
- INTO nAMB_TALON_VISITS_ID
- FROM D_AMB_TALON_VISITS atv
- WHERE atv.VISIT = nVISITS_ID
- AND ROWNUM = 1;
- lg('WAR_AMB_TALON_VISITS','Такое посещение по АТ для пациента уже существует: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_AMB_TALON_VISITS.ADD(pnD_INSERT_ID => nAMB_TALON_VISITS_ID,
- pnLPU => pnLPU,
- pnPID => nAMB_TALONS_ID,
- pdVIS_DATE => cr.VISIT_DATE,
- pnVIS_EMPLOYER => nEMPLOYERS,
- pnVIS_PURPOSE => nVIS_PURPOSE,
- pnVIS_KIND => NULL,
- pnVIS_PLACE => nVIS_PLACE,
- pnVIS_IS_PRIMARY => NULL,
- pnVIS_PAYMENT_KIND => nPAYMENT_KIND,
- pnSERVICE => nSERVICE,
- pnVIS_RESULT => nVIS_RESULT,
- pnDGROUP => NULL,
- pnVIS_PROF_DISEASE => NULL,
- pnVISIT => nVISITS_ID,
- pnSER_COUNT => 1,
- pnSER_KOEFF => 1,
- pnUET_COUNT => NVL(nUET_COUNT,0),
- pnIS_AUTO => 0,
- pnROW_TYPE => 1,
- pnVIS_REF_RESULT => NULL,
- pnVIS_DEP => NULL,
- pnLPU_TO => NULL,
- pnDIR_PURPOSE => NULL,
- psNOTE => NULL,
- pnSMP_TEAM_PROFILE => NULL,
- pnTYPE => NULL,
- pnRECOMMENDATION => NULL,
- pnPHYSICAL_GROUP => NULL,
- pnIS_EMERGENCY => NULL,
- pnMED_CARE_KIND => NULL,
- pnANEST_TYPE => NULL,
- pnAPP_KIND => NULL,
- pnPC_PAT => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- nAMB_TALON_VISITS_ID := NULL;
- lg('ERR_ADD_AMB_TALON_VISITS','Ошибка создания посещения амбулаторного талона для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')', SQLERRM);
- ROLLBACK TO IMP70_P_ISKUS_AMB_TALONS;
- continue;
- END;
- END;
- ----------------------------------------
- --10 блок обработки данных в разделе D_AMB_TALON_MKBS
- ----------------------------------------
- --проверим не была ли создана запись на прежних итерациях импорта
- BEGIN
- SELECT atm.ID
- INTO nAMB_TALON_MKBS_ID
- FROM D_AMB_TALON_MKBS atm
- WHERE atm.LPU = pnLPU
- AND atm.PID = nAMB_TALONS_ID
- AND atm.EMPLOYER = nEMPLOYERS
- AND atm.MKB = nMKB
- AND atm.DIAGNOSIS = nVIS_DIAGNOSISES_ID
- AND atm.VISIT = nVISITS_ID
- AND atm.IS_MAIN = 0
- AND ROWNUM = 1;
- lg('WAR_AMB_TALON_MKBS','Данные заболевания по АТ для пациента уже существует: '||cr.FIO||' (строка №'||cr.NOMER_PP||')');
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_AMB_TALON_MKBS.ADD(pnD_INSERT_ID => nAMB_TALON_MKBS_ID,
- pnLPU => pnLPU,
- pnPID => nAMB_TALONS_ID,
- pnEMPLOYER => nEMPLOYERS,
- pnIS_MAIN => 0,
- pnMKB => nMKB,
- pnDIS_CHARACTER => NULL,
- pnIS_ACTIVE => NULL,
- pnCL_OBSERV_CATEGORY => NULL,
- pnDGROUP => NULL,
- pnINJURE_KIND => NULL,
- pnEX_CAUSE_MKB => NULL,
- pnINJURETIME => NULL,
- pnDIAGNOSIS => nVIS_DIAGNOSISES_ID,
- pnVISIT => nVISITS_ID,
- pnIS_AUTO => NULL,
- pnLOCALIZATION => NULL,
- psNOTE => NULL,
- pnVIS_PERIOD => NULL,
- pdDATE_TR => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- nAMB_TALON_MKBS_ID := NULL;
- lg('ERR_ADD_AMB_TALON_MKBS','Ошибка создания данных заболевания амбулаторного талона для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')', SQLERRM);
- ROLLBACK TO IMP70_P_ISKUS_AMB_TALONS;
- continue;
- END;
- END;
- ----------------------------------------
- --8 блок закрытия амбулаторного талона в разделе D_AMB_TALONS
- ----------------------------------------
- IF cr.VIS_RESULT IS NOT NULL
- AND nAMB_TALONS_ID IS NOT NULL THEN
- BEGIN
- D_PKG_AMB_TALONS.SET_CLOSE(pnID => nAMB_TALONS_ID,
- pnLPU => pnLPU,
- pnIS_CLOSE => 1,
- pdEND_DATE => cr.VISIT_DATE,
- pnREF_RESULT => nVIS_RESULT);
- nAMB_TALONS_ID := NULL;
- --При необходимости укажем признак закрытия случая
- IF nDC_IS_CLOSE = 1 THEN
- D_PKG_AMB_TALONS.SET_DC_CLOSE(pnID => nAMB_TALONS_ID,
- pnLPU => pnLPU,
- pnIS_CLOSE => 1);
- END IF;
- EXCEPTION
- WHEN OTHERS THEN
- lg('ERR_CLOSE_AMB_TALONS','Ошибка закрытия амбулаторного талона для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')', SQLERRM);
- ROLLBACK TO IMP70_P_ISKUS_AMB_TALONS;
- continue;
- END;
- END IF;
- ----------------------------------------
- --5 блок закрытия случая в разделе D_DISEASECASES
- ----------------------------------------
- IF nDC_IS_CLOSE = 1 THEN
- BEGIN
- D_PKG_DISEASECASES.SET_CLOSE(pnID => nDISEASECASES_ID,
- pnLPU => pnLPU,
- pnIS_CLOSE => 1,
- pdCLOSE_DATE => cr.VISIT_DATE,
- pnVISIT_CLOSE => nVISITS_ID,
- pnHAND_CLOSE => NULL);
- --Если случай закрыли, то обнулим его идентификатор (чтобы на следующих итерациях создавался новый)
- nDISEASECASES_ID := NULL;
- nAMB_TALONS_ID := NULL;
- EXCEPTION
- WHEN OTHERS THEN
- lg('ERR_CLOSE_DISEASECASES','Ошибка закрытия случая для пациента: '||cr.FIO||' (строка №'||cr.NOMER_PP||')', SQLERRM);
- ROLLBACK TO IMP70_P_ISKUS_AMB_TALONS;
- continue;
- END;
- END IF;
- END IF; -- конец условия if nAGENTS_ID is not null
- END LOOP; -- конец цикла по таблице импорта
- END IF; -- конец условия if nERROR = 0 or pnERR_IGNORE = 1
- --вернем контекстную переменную EMPLOYER, которая была до запуска импорта
- set_context_employer(sCONTEXT_EMPLOYER);
- lg('END_IMP','Завершение импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
- EXCEPTION
- WHEN OTHERS THEN
- lg('ERR_IMP','Ошибка на строке №'||nNOMER_PP||': '||SQLERRM);
- ROLLBACK;
- D_P_EXC('Ошибка процедуры IMP70_P_ISKUS_AMB_TALONS импорта данных из таблицы IMP70_ISKUS_AMB_TALONS: Ошибка - '||SQLERRM);
- END IMP70_P_ISKUS_AMB_TALONS;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement