Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE PACKAGE IMP70_PKG_KONVE
- IS
- --Процедура добавления записи в лог импорта
- PROCEDURE LG
- (
- pnLOG_IDENT IN NUMBER,
- ppsLOG_CODE IN VARCHAR2,
- ppsLOG_TEXT IN VARCHAR2,
- ppsINFO1 IN VARCHAR2 DEFAULT NULL,
- ppsINFO2 IN VARCHAR2 DEFAULT NULL,
- ppsINFO3 IN VARCHAR2 DEFAULT NULL
- );
- --функция перекодировки кода района из файла импорта в код МИС
- FUNCTION GET_RAIONCODE_BY_KODRAI
- (
- psKOD_RAI IN VARCHAR2
- ) RETURN VARCHAR2;
- --функция проверки наличия пациента в D_AGENTS
- PROCEDURE GET_AGENT_ID
- (
- psFIO IN VARCHAR2,
- pdBIRTHDATE IN DATE,
- psSNILS IN VARCHAR2,
- pnAGENTS_ID OUT NUMBER,
- psERROR_CODE OUT VARCHAR2
- );
- --функция проверки наличия пациента в D_AGENTS
- PROCEDURE GET_GEOTYPE_CODE_NASP
- (
- pnLPU IN NUMBER,
- psNASP IN VARCHAR2,
- pnCITY OUT NUMBER,
- psERROR_CODE OUT VARCHAR2
- );
- --Функция выделения из ФИО фамилии, имени, отчества
- FUNCTION GET_PART_FIO
- (
- psFIO IN VARCHAR2, -- ФИО
- psPART_NAME IN VARCHAR2 -- какуй часть ФИО необходимо получить (FIRSTNAME - имя, SURNAME - фамилия, LASTNAME - отчество)
- ) RETURN VARCHAR2;
- --Функция конвертации пола лица в числовой вид
- FUNCTION CONVERT_POL_TO_NUMBER
- (
- psPOL IN VARCHAR2 -- пол лица
- ) RETURN NUMBER;
- --Функция получения улицы из адреса
- FUNCTION GET_STREET_FROM_ADRESS
- (
- psADRESS IN VARCHAR2 -- адрес пациента
- ) RETURN VARCHAR2;
- --Функция получения номера дома из адреса (символы между первым символом '-' и предыдущим пробелом)
- FUNCTION GET_HOUSE_FROM_ADRESS
- (
- psADRESS IN VARCHAR2 -- адрес пациента
- ) RETURN VARCHAR2;
- --Функция получения литеры дома из адреса
- FUNCTION GET_LETTER_FROM_HOUSE
- (
- psHOUSE IN VARCHAR2 -- номер дома, возможно содержащий литеру
- ) RETURN VARCHAR2;
- --Функция получения квартиры из адреса (цифры после первого символа '-')
- FUNCTION GET_FLAT_FROM_ADRESS
- (
- psADRESS IN VARCHAR2
- ) RETURN VARCHAR2;
- --Процедура получения данных инвалидности из строки файла
- PROCEDURE GET_INABILITY_DATA
- (
- psINABILITY IN VARCHAR2,
- pnINABILITY_GROUP OUT NUMBER,
- pdINABILITY_DATE OUT DATE
- );
- --Процедура для импорта данных из файла TUBKONVE.dbf через таблицу импорта IMP70_TUBKONVE
- PROCEDURE IMP70_P_TUBKONVE
- (
- pnLPU IN NUMBER,
- pnLOG_IDENT OUT NUMBER,
- pnERR_IGNORE IN NUMBER DEFAULT 0
- );
- --Процедура для импорта данных из файла UMEKONVE.dbf через таблицу импорта IMP70_UMEKONVE
- PROCEDURE IMP70_P_UMEKONVE
- (
- pnLPU IN NUMBER,
- pnLOG_IDENT OUT NUMBER,
- pnERR_IGNORE IN NUMBER DEFAULT 0
- );
- --Процедура для импорта данных из файла HPKONVE.dbf через таблицу импорта IMP70_HPKONVE
- PROCEDURE IMP70_P_HPKONVE
- (
- pnLPU IN NUMBER,
- pnLOG_IDENT OUT NUMBER,
- pnERR_IGNORE IN NUMBER DEFAULT 0
- );
- --Процедура для импорта данных из файла GR0KONVE.dbf через таблицу импорта IMP70_GR0KONVE
- PROCEDURE IMP70_P_GR0KONVE
- (
- pnLPU IN NUMBER,
- pnLOG_IDENT OUT NUMBER,
- pnERR_IGNORE IN NUMBER DEFAULT 0
- );
- END IMP70_PKG_KONVE;
- /
- CREATE OR REPLACE PACKAGE BODY IMP70_PKG_KONVE
- IS
- nNOS_REG_TYPES_TUB CONSTANT D_NOS_REGISTR_TYPES.T_CODE%TYPE := 12;
- -- тип нозологического регистра "ТуберкулезБП"
- nAO_TYPE_CITY CONSTANT D_ADDROBJECTS.AO_CODE%TYPE := 3;
- -- тип адресного объекта "Город"
- nAO_TYPE_NASP CONSTANT D_ADDROBJECTS.AO_CODE%TYPE := 4;
- -- тип адресного объекта "Населенный пункт"
- nAO_TYPE_STREET CONSTANT D_ADDROBJECTS.AO_CODE%TYPE := 5;
- -- тип адресного объекта "Улица"
- nDTUB_CHEMO_OUT_UMER CONSTANT D_DTUB_CHEMO_OUT.CO_CODE%TYPE := 3;
- -- исход курса химиотерапии "Умер"
- -----------------------------------------------------------------------------------------------------------------------------
- --Процедура добавления записи в лог импорта
- PROCEDURE LG
- (
- pnLOG_IDENT IN NUMBER,
- 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;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --функция перекодировки кода района из файла импорта в код МИС
- FUNCTION GET_RAIONCODE_BY_KODRAI
- (
- psKOD_RAI IN VARCHAR2
- ) RETURN VARCHAR2
- IS
- sRAION_CODE D_RAIONS.R_CODE%TYPE;
- BEGIN
- SELECT vkr.MIS_CODE
- INTO sRAION_CODE
- FROM IMP70_V_KONVE_RAION vkr
- WHERE UPPER(vkr.FILE_CODE) = UPPER(psKOD_RAI)
- AND ROWNUM = 1;
- RETURN sRAION_CODE;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- RETURN NULL;
- END GET_RAIONCODE_BY_KODRAI;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --функция проверки наличия пациента в 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(a.SURNAME||a.FIRSTNAME||a.LASTNAME) = UPPER(regexp_replace(psFIO,'\s',''))
- AND a.BIRTHDATE = pdBIRTHDATE
- AND (a.SNILS = regexp_replace(psSNILS,'\D','')
- OR psSNILS IS NULL
- OR UPPER(psSNILS) = 'НЕТ');
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- pnAGENTS_ID := NULL;
- psERROR_CODE := 'NDF_AGENTS';
- WHEN TOO_MANY_ROWS THEN
- pnAGENTS_ID := NULL;
- psERROR_CODE := 'TMR_AGENTS';
- END GET_AGENT_ID;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --функция проверки наличия пациента в D_AGENTS
- PROCEDURE GET_GEOTYPE_CODE_NASP
- (
- pnLPU IN NUMBER,
- psNASP IN VARCHAR2,
- pnCITY OUT NUMBER,
- psERROR_CODE OUT VARCHAR2
- )
- IS
- BEGIN
- SELECT g.ID
- INTO pnCITY
- FROM D_GEOGRAFY g
- WHERE UPPER(REPLACE(g.GEONAME,' ','')) = UPPER(REPLACE(psNASP,' ',''))
- AND g.geoloctype IN (SELECT gt.id
- FROM D_GEOGRAFYTYPES gt
- WHERE LOWER(gt.code) = (SELECT LOWER(vgn.GEOTYPE_CODE)
- FROM IMP70_V_KONVE_GEOTYPE_NASP vgn
- WHERE UPPER(REPLACE(vgn.NASP_NAME,' ','')) = UPPER(REPLACE(psNASP,' ',''))
- AND ROWNUM = 1)
- AND gt.VERSION = D_PKG_VERSIONS.GET_VERSION_BY_LPU(0,pnLPU,'GEOGRAFYTYPES')
- AND gt.AO_TYPE IN (nAO_TYPE_CITY,nAO_TYPE_NASP)
- );
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- pnCITY := NULL;
- psERROR_CODE := 'NDF_GEOGRAFY';
- WHEN TOO_MANY_ROWS THEN
- pnCITY := NULL;
- psERROR_CODE := 'TMR_GEOGRAFY';
- END GET_GEOTYPE_CODE_NASP;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --Функция выделения из ФИО фамилии, имени, отчества
- FUNCTION GET_PART_FIO
- (
- psFIO IN VARCHAR2, -- ФИО
- psPART_NAME IN VARCHAR2 -- какуй часть ФИО необходимо получить (FIRSTNAME - имя, SURNAME - фамилия, LASTNAME - отчество)
- ) RETURN VARCHAR2
- IS
- sPART_VALUE D_PKG_STD.tSTR;
- BEGIN
- CASE WHEN UPPER(psPART_NAME) = 'FIRSTNAME' THEN sPART_VALUE := REGEXP_SUBSTR(psFIO,'(\S*)',1,3);
- WHEN UPPER(psPART_NAME) = 'SURNAME' THEN sPART_VALUE := REGEXP_SUBSTR(psFIO,'(\S*)',1,1);
- WHEN UPPER(psPART_NAME) = 'LASTNAME' THEN sPART_VALUE := REGEXP_SUBSTR(psFIO,'(\S*)',1,5);
- END CASE;
- RETURN sPART_VALUE;
- END GET_PART_FIO;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --Функция конвертации пола лица в числовой вид
- FUNCTION CONVERT_POL_TO_NUMBER
- (
- psPOL IN VARCHAR2 -- пол лица
- ) RETURN NUMBER
- IS
- nPOL NUMBER;
- BEGIN
- CASE WHEN LOWER(psPOL) = 'м' THEN nPOL := 1;
- WHEN LOWER(psPOL) = 'ж' THEN nPOL := 0;
- END CASE;
- RETURN nPOL;
- END CONVERT_POL_TO_NUMBER;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --Функция получения улицы из адреса
- FUNCTION GET_STREET_FROM_ADRESS
- (
- psADRESS IN VARCHAR2 -- адрес пациента
- ) RETURN VARCHAR2
- IS
- sSTREET D_PKG_STD.tSTR;
- BEGIN
- sSTREET := SUBSTR(psADRESS,1, (CASE WHEN INSTR(psADRESS,'-')=0 THEN LENGTH(psADRESS)+1 ELSE INSTR(psADRESS,'-') END)-1);
- sSTREET := RTRIM(sSTREET,'0123456789/');
- --проверим, нет ли запятых в названии улицы
- --если есть, то удалим всё до неё вместе с ней
- IF INSTR(sSTREET,',') > 0 THEN
- sSTREET := SUBSTR(sSTREET, INSTR(sSTREET,',',-1)+1);
- END IF;
- RETURN TRIM(sSTREET);
- END GET_STREET_FROM_ADRESS;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --Функция получения номера дома из адреса (символы между первым символом '-' и предыдущим пробелом)
- FUNCTION GET_HOUSE_FROM_ADRESS
- (
- psADRESS IN VARCHAR2 -- адрес пациента
- ) RETURN VARCHAR2
- IS
- sHOUSE D_PKG_STD.tSTR;
- BEGIN
- --проверим, есть ли цифры в адресе
- IF regexp_instr(psADRESS,'\d+') <> 0 THEN
- WITH first_adres AS (SELECT SUBSTR(psADRESS,1, (CASE WHEN INSTR(psADRESS,'-')=0 THEN LENGTH(psADRESS)+1 ELSE INSTR(psADRESS,'-') END)-1) adres
- FROM dual)
- SELECT SUBSTR(adres, INSTR(adres,' ',-1)+1)
- INTO sHOUSE
- FROM first_adres;
- --если в доме не осталось цифр, значит это не номер дома
- IF regexp_instr(sHOUSE,'\d+') = 0 THEN
- sHOUSE := NULL;
- END IF;
- END IF;
- RETURN sHOUSE;
- END GET_HOUSE_FROM_ADRESS;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --Функция получения литеры дома из адреса
- FUNCTION GET_LETTER_FROM_HOUSE
- (
- psHOUSE IN VARCHAR2 -- номер дома, возможно содержащий литеру
- ) RETURN VARCHAR2
- IS
- sHOUSELIT D_PKG_STD.tSTR;
- BEGIN
- --получим литеру дома, если она есть
- IF regexp_instr(psHOUSE,'\d+') <> 0 THEN
- sHOUSELIT := TRIM(both ' ' FROM regexp_substr(psHOUSE,'(\D*)$'));
- sHOUSELIT := SUBSTR(sHOUSELIT,1,1); -- литерой может быть только 1 символ
- END IF;
- RETURN sHOUSELIT;
- END GET_LETTER_FROM_HOUSE;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --Функция получения квартиры из адреса (цифры после первого символа '-')
- FUNCTION GET_FLAT_FROM_ADRESS
- (
- psADRESS IN VARCHAR2
- ) RETURN VARCHAR2
- IS
- sFLAT D_PKG_STD.tSTR;
- BEGIN
- WITH first_adres AS (SELECT SUBSTR(psADRESS,NULLIF(INSTR(psADRESS,'-'),0)+1) adres
- FROM dual)
- SELECT regexp_substr(adres,'(\d*)')
- INTO sFLAT
- FROM first_adres;
- RETURN sFLAT;
- END GET_FLAT_FROM_ADRESS;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --Процедура получения данных инвалидности из строки файла
- PROCEDURE GET_INABILITY_DATA
- (
- psINABILITY IN VARCHAR2,
- pnINABILITY_GROUP OUT NUMBER,
- pdINABILITY_DATE OUT DATE
- )
- IS
- sINABILITY_GROUP D_PKG_STD.tSTR;
- BEGIN
- pnINABILITY_GROUP := NULL;
- pdINABILITY_DATE := NULL;
- --получим группу инвалидности
- sINABILITY_GROUP := SUBSTR(psINABILITY,1,INSTR(psINABILITY,' ')-1);
- CASE WHEN sINABILITY_GROUP = 'I' THEN pnINABILITY_GROUP := 1;
- WHEN sINABILITY_GROUP = 'II' THEN pnINABILITY_GROUP := 2;
- WHEN sINABILITY_GROUP = 'III' THEN pnINABILITY_GROUP := 3;
- ELSE pnINABILITY_GROUP := NULL;
- END CASE;
- --получим дату начала инфвалидности
- pdINABILITY_DATE := TO_DATE(regexp_substr(psINABILITY,'(\d\d)/(\d\d)/(\d{4}?)'),'DD/MM/YYYY');
- IF pdINABILITY_DATE IS NULL THEN
- pdINABILITY_DATE := TO_DATE(regexp_substr(psINABILITY,'(\d\d)/(\d\d)/(\d{4}?)'),'DD.MM.YYYY');
- END IF;
- END GET_INABILITY_DATA;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --Процедура для импорта данных из файла TUBKONVE.dbf через таблицу импорта IMP70_TUBKONVE
- PROCEDURE IMP70_P_TUBKONVE
- (
- pnLPU IN NUMBER,
- pnLOG_IDENT OUT NUMBER,
- pnERR_IGNORE IN NUMBER DEFAULT 0
- )
- IS
- nVER_AGENT_ADDRS D_PKG_STD.tREF; -- идентификатор версии для раздела AGENT_ADDRS
- nVER_GEOGRAFY D_PKG_STD.tREF; -- идентификатор версии для раздела GEOGRAFY
- nVER_NOS_REGISTR_TYPES D_PKG_STD.tREF; -- идентификатор версии для раздела NOS_REGISTR_TYPES
- nVER_NOS_REGISTRS D_PKG_STD.tREF; -- идентификатор версии для раздела NOS_REGISTRS
- nVER_NR_CLS_CONTINGENTS D_PKG_STD.tREF; -- идентификатор версии для раздела NR_CLS_CONTINGENTS
- nVER_NR_PATIENT_DATA D_PKG_STD.tREF; -- идентификатор версии для раздела NR_PATIENT_DATA
- nVER_MKB10 D_PKG_STD.tREF; -- идентификатор версии для раздела nVER_MKB10
- nVER_SOCIALSTATES D_PKG_STD.tREF; -- идентификатор версии для раздела SOCIALSTATES
- nVER_NR_PATIENTS D_PKG_STD.tREF; -- идентификатор версии для раздела NR_PATIENTS
- nVER_RTUB_CASES D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASES
- nVER_DTUB_PAT_GROUP D_PKG_STD.tREF; -- идентификатор версии для раздела DTUB_PAT_GROUP
- nVER_PATIENTS_DGROUP D_PKG_STD.tREF; -- идентификатор версии для раздела PATIENTS_DGROUP
- nVER_RTUB_CASE_DGNS D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASE_DGNS
- nVER_DTUB_CLINIC_FORMS D_PKG_STD.tREF; -- идентификатор версии для раздела DTUB_CLINIC_FORMS
- nVER_DTUB_DETECT_METHODS D_PKG_STD.tREF; -- идентификатор версии для раздела DTUB_DETECT_METHODS
- nVER_RTUB_CASE_DISP D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASE_DISP
- nVER_RTUB_CASE_DISP_DATA D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASE_DISP_DATA
- nVER_AGENT_COMP_DISEASES D_PKG_STD.tREF; -- идентификатор версии для раздела AGENT_COMP_DISEASES
- nVER_COMP_DISEASES D_PKG_STD.tREF; -- идентификатор версии для раздела COMP_DISEASES
- nVER_REGISTER_PURPOSES D_PKG_STD.tREF; -- идентификатор версии для раздела REGISTER_PURPOSES
- nVER_LPUDICT D_PKG_STD.tREF; -- идентификатор версии для раздела LPUDICT
- nVER_SITES D_PKG_STD.tREF; -- идентификатор версии для раздела SITES
- nVER_AGENT_GR_RENTGENOGR D_PKG_STD.tREF; -- идентификатор версии для раздела AGENT_GR_RENTGENOGR
- nVER_GR_RENTGENOGRAPH D_PKG_STD.tREF; -- идентификатор версии для раздела GR_RENTGENOGRAPH
- nVER_AGENT_DETR_EFFECTS D_PKG_STD.tREF; -- идентификатор версии для раздела AGENT_DETR_EFFECTS
- nVER_DETRIMENTAL_EFFECTS D_PKG_STD.tREF; -- идентификатор версии для раздела DETRIMENTAL_EFFECTS
- nVER_RTUB_CASE_CHEMO D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASE_CHEMO
- nVER_DTUB_CHEMO_MODES D_PKG_STD.tREF; -- идентификатор версии для раздела DTUB_CHEMO_MODES
- nVER_DTUB_CHEMO_OUT D_PKG_STD.tREF; -- идентификатор версии для раздела DTUB_CHEMO_OUT
- nVER_RTUB_CASE_DETECTION D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASE_DETECTION
- nVER_NR_CLS_PATH_DISCOVER D_PKG_STD.tREF; -- идентификатор версии для раздела NR_CLS_PATH_DISCOVER
- nVER_NR_LPUDICT D_PKG_STD.tREF; -- идентификатор версии для раздела NR_LPUDICT
- nVER_ANTHROP D_PKG_STD.tREF; -- идентификатор версии для раздела ANTHROP
- nVER_AGENT_DECRETIV_GROUPS D_PKG_STD.tREF; -- идентификатор версии для раздела AGENT_DECRETIV_GROUPS
- nVER_DECRETIV_GROUPS D_PKG_STD.tREF; -- идентификатор версии для раздела DECRETIV_GROUPS
- nVER_AGENT_INABILITIES D_PKG_STD.tREF; -- идентификатор версии для раздела AGENT_INABILITIES
- nVER_NR_CLS_PLACE_DETECTION D_PKG_STD.tREF; -- идентификатор версии для раздела NR_CLS_PLACE_DETECTION
- nCAT_ROOT D_PKG_STD.tREF; -- идентификатор корневого каталога для разделов
- nCAT_AGENTS D_PKG_STD.tREF; -- идентификатор каталога для раздела AGENTS
- nCAT_PERSMEDCARD D_PKG_STD.tREF; -- идентификатор каталога для раздела PERSMEDCARD
- nAGENTS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENTS
- nAGENT_ADDRS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_ADDRS
- nAGENT_CONSITUTIONS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_CONSITUTIONS
- nAGENT_CONSITUTION_SPS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_CONSITUTION_SPS
- nNR_PATIENT_DATA_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_NR_PATIENT_DATA
- nAGENT_SOCIAL_STATES_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_SOCIAL_STATES
- nRTUB_CASES_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASES
- nRTUB_CASE_DGNS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASE_DGNS
- nRTUB_CASE_DISP_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASE_DISP
- nRTUB_CASE_DISP_DATA_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASE_DISP_DATA
- nAGENT_COMP_DISEASES_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_COMP_DISEASES
- nAGENT_REGISTRATION_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_REGISTRATION
- nAGENT_GR_RENTGENOGR_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_GR_RENTGENOGR
- nAGENT_DECRETIV_GROUPS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_DECRETIV_GROUPS
- nAGENT_INABILITIES_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_INABILITIES
- nAGENT_DETR_EFFECTS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_DETR_EFFECTS
- nPERSMEDCARD_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_PERSMEDCARD
- nRTUB_CASE_DETECTION_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASE_DETECTION
- nRTUB_CASE_CHEMO_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASE_CHEMO
- nNR_PATIENT_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_NR_PATIENT
- nERROR D_PKG_STD.tREF := 0;-- кол-во ошибок импорта
- sERROR_CODE D_PKG_STD.tSTR; -- код ошибки
- sAGN_CODE D_AGENTS.AGN_CODE%TYPE;
- -- код контрагента в таблице D_AGENTS
- nCITY D_PKG_STD.tREF; -- идентификатор населенного пункта
- nSTREET D_PKG_STD.tREF; -- идентификатор улицы
- sHOUSE D_PKG_STD.tSTR; -- номер дома в адресе
- sHOUSELIT D_PKG_STD.tSTR; -- литера дома в адресе
- sFLAT D_PKG_STD.tSTR; -- номер квартиры в адресе
- nRAION D_PKG_STD.tREF; -- идентификатор района из адреса
- nRAION_CODE D_PKG_STD.tSTR; -- код района
- sTUBNASP_TMP D_PKG_STD.tSTR; -- временная переменная для хранения названия нас пункта из файла
- nANTHROP D_PKG_STD.tREF; -- идентификатор записи D_ANTHROP
- nNOS_REGISTR_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_NOS_REGISTR
- nNR_CONTINGENT D_PKG_STD.tREF; -- идентификатор записи в таблице D_NR_CLS_CONTINGENTS
- nSOCIAL_STATES_ID D_PKG_STD.tREF; -- идентификатор записи социального положения D_SOCIALSTATES
- nSOCIAL_CATEGORIES D_PKG_STD.tREF; -- идентификатор записи социальной категории D_SOCIALCATEGORIES
- nLPUDICT_ID D_PKG_STD.tREF; -- идентификатор записи D_LPUDICT
- nPAT_GROUP D_PKG_STD.tREF; -- идентификатор записи D_DTUB_PAT_GROUP
- nFROM_GROUP D_PKG_STD.tREF; -- идентификатор записи D_PATIENTS_DGROUP
- nMKB D_PKG_STD.tREF; -- идентификатор записи D_MKB10
- nCLINIC_FORM D_PKG_STD.tREF; -- идентификатор записи D_DTUB_CLINIC_FORMS
- nDETECT_METHOD D_PKG_STD.tREF; -- идентификатор записи D_DTUB_DETECT_METHODS
- nDGROUP D_PKG_STD.tREF; -- идентификатор записи D_PATIENTS_DGROUP
- nCOMP_DISEASE D_PKG_STD.tREF; -- идентификатор записи D_COMP_DISEASES
- nREGISTER_PURPOSE D_PKG_STD.tREF; -- идентификатор записи D_REGISTER_PURPOSES
- nLPU_REG D_PKG_STD.tREF; -- идентификатор записи D_LPUDICT
- nLPU_SITE D_PKG_STD.tREF; -- идентификатор записи D_SITES
- nGR_RENTGENOGRAPH D_PKG_STD.tREF; -- идентификатор записи D_GR_RENTGENOGRAPH
- nDECRETIV_GROUP D_PKG_STD.tREF; -- идентификатор записи D_DECRETIV_GROUP
- nINABILITY_GROUP D_PKG_STD.tREF; -- группа инвалидности
- dINABILITY_BEGIN_DATE DATE; -- дата начала инвалидности
- nDETR_EFFECT D_PKG_STD.tREF; -- идентификатор записи D_DETRIMENTAL_EFFECTS
- nDETECT_PLACE D_PKG_STD.tREF; -- идентификатор записи D_NR_CLS_PLACE_DETECTION
- nDISCOVER_PATH D_PKG_STD.tREF; -- идентификатор записи D_NR_CLS_PATH_DISCOVER
- nCHEMO_MODE D_PKG_STD.tREF; -- идентификатор записи D_DTUB_CHEMO_MODES
- nCHEMO_OUT D_PKG_STD.tREF; -- идентификатор записи D_DTUB_CHEMO_OUT
- dAGENT_BIRTHDATE D_AGENTS.BIRTHDATE%TYPE;
- BEGIN
- D_PKG_IMP_LOG.INIT('IMP70_TUBKONVE', pnLPU, pnLOG_IDENT, 0);
- lg(pnLOG_IDENT,'START_IMP','Начало импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
- --блок получения версий для разделов
- nVER_AGENT_ADDRS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_ADDRS');
- nVER_GEOGRAFY := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'GEOGRAFY');
- nVER_NOS_REGISTR_TYPES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTR_TYPES');
- nVER_NOS_REGISTRS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTRS');
- nVER_NR_CLS_CONTINGENTS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_CLS_CONTINGENTS');
- nVER_NR_PATIENT_DATA := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_PATIENT_DATA');
- nVER_MKB10 := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'MKB10');
- nVER_SOCIALSTATES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'SOCIALSTATES');
- nVER_NR_PATIENTS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_PATIENTS');
- nVER_RTUB_CASES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASES');
- nVER_DTUB_PAT_GROUP := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_PAT_GROUP');
- nVER_PATIENTS_DGROUP := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'PATIENTS_DGROUP');
- nVER_RTUB_CASE_DGNS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DGNS');
- nVER_DTUB_CLINIC_FORMS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_CLINIC_FORMS');
- nVER_DTUB_DETECT_METHODS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_DETECT_METHODS');
- nVER_RTUB_CASE_DISP := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DISP');
- nVER_RTUB_CASE_DISP_DATA := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DISP_DATA');
- nVER_AGENT_COMP_DISEASES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_COMP_DISEASES');
- nVER_COMP_DISEASES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'COMP_DISEASES');
- nVER_REGISTER_PURPOSES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'REGISTER_PURPOSES');
- nVER_LPUDICT := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'LPUDICT');
- nVER_SITES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'SITES');
- nVER_AGENT_GR_RENTGENOGR := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_GR_RENTGENOGR');
- nVER_GR_RENTGENOGRAPH := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'GR_RENTGENOGRAPH');
- nVER_AGENT_DETR_EFFECTS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_DETR_EFFECTS');
- nVER_DETRIMENTAL_EFFECTS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DETRIMENTAL_EFFECTS');
- nVER_RTUB_CASE_CHEMO := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_CHEMO');
- nVER_DTUB_CHEMO_MODES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_CHEMO_MODES');
- nVER_DTUB_CHEMO_OUT := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_CHEMO_OUT');
- nVER_RTUB_CASE_DETECTION := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DETECTION');
- nVER_NR_CLS_PATH_DISCOVER := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_CLS_PATH_DISCOVER');
- nVER_NR_LPUDICT := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_LPUDICT');
- nVER_ANTHROP := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'ANTHROP');
- nVER_AGENT_DECRETIV_GROUPS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_DECRETIV_GROUPS');
- nVER_DECRETIV_GROUPS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DECRETIV_GROUPS');
- nVER_AGENT_INABILITIES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_INABILITIES');
- nVER_NR_CLS_PLACE_DETECTION := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_CLS_PLACE_DETECTION');
- --блок получения каталогов для разделов
- D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'AGENTS', 'Пациенты Томск Фтиз', nCAT_AGENTS);
- IF nCAT_AGENTS IS NULL THEN
- D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'AGENTS',nCAT_ROOT);
- D_PKG_CATALOGS.ADD(nCAT_AGENTS,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
- END IF;
- D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'PERSMEDCARD', 'Пациенты Томск Фтиз', nCAT_PERSMEDCARD);
- IF nCAT_PERSMEDCARD IS NULL THEN
- D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'PERSMEDCARD',nCAT_ROOT);
- D_PKG_CATALOGS.ADD(nCAT_PERSMEDCARD,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
- END IF;
- --по заданному ЛПУ получим 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(pnLOG_IDENT,'NFD_LPUDICT','Не определно заданное ЛПУ: '||pnLPU);
- END;
- --Цикл по всем записям таблицы IMP70_TUBKONVE с импортируемыми данными
- IF nERROR = 0 OR pnERR_IGNORE = 1 THEN
- FOR cr IN (SELECT *
- FROM IMP70_TUBKONVE)
- LOOP
- nAGENTS_ID := NULL;
- nAGENT_ADDRS_ID := NULL;
- nAGENT_CONSITUTIONS_ID := NULL;
- nAGENT_CONSITUTION_SPS_ID := NULL;
- nNR_PATIENT_DATA_ID := NULL;
- nAGENT_SOCIAL_STATES_ID := NULL;
- nRTUB_CASES_ID := NULL;
- nRTUB_CASE_DGNS_ID := NULL;
- nRTUB_CASE_DISP_ID := NULL;
- nRTUB_CASE_DISP_DATA_ID := NULL;
- nAGENT_COMP_DISEASES_ID := NULL;
- nAGENT_REGISTRATION_ID := NULL;
- nAGENT_GR_RENTGENOGR_ID := NULL;
- nAGENT_DECRETIV_GROUPS_ID := NULL;
- nAGENT_INABILITIES_ID := NULL;
- nAGENT_DETR_EFFECTS_ID := NULL;
- nPERSMEDCARD_ID := NULL;
- nRTUB_CASE_DETECTION_ID := NULL;
- nRTUB_CASE_CHEMO_ID := NULL;
- nNR_PATIENT_ID := NULL;
- sAGN_CODE := NULL;
- nCITY := NULL;
- nSTREET := NULL;
- sHOUSE := NULL;
- sHOUSELIT := NULL;
- nRAION := NULL;
- nRAION_CODE := NULL;
- nNOS_REGISTR_ID := NULL;
- nNR_CONTINGENT := NULL;
- nSOCIAL_STATES_ID := NULL;
- nSOCIAL_CATEGORIES := NULL;
- nPAT_GROUP := NULL;
- nFROM_GROUP := NULL;
- nMKB := NULL;
- nCLINIC_FORM := NULL;
- nDETECT_METHOD := NULL;
- nDGROUP := NULL;
- nCOMP_DISEASE := NULL;
- nREGISTER_PURPOSE := NULL;
- nLPU_REG := NULL;
- nLPU_SITE := NULL;
- nGR_RENTGENOGRAPH := NULL;
- nDECRETIV_GROUP := NULL;
- nINABILITY_GROUP := NULL;
- dINABILITY_BEGIN_DATE := NULL;
- nDETR_EFFECT := NULL;
- nDETECT_PLACE := NULL;
- nDISCOVER_PATH := NULL;
- nCHEMO_MODE := NULL;
- nCHEMO_OUT := NULL;
- dAGENT_BIRTHDATE := NULL;
- --проверим нет ли в таблице D_AGENTS такого контрагента
- GET_AGENT_ID(psFIO => cr.FIO,
- pdBIRTHDATE => cr.TUB_DATRO,
- psSNILS => cr.TUB_PREDLE,
- pnAGENTS_ID => nAGENTS_ID,
- psERROR_CODE => sERROR_CODE);
- IF nAGENTS_ID IS NOT NULL THEN
- dAGENT_BIRTHDATE := cr.TUB_DATRO;
- ELSE
- dAGENT_BIRTHDATE := NULL;
- IF sERROR_CODE = 'TMR_AGENTS' THEN
- lg(pnLOG_IDENT,'TMR_AGENTS','Найдено несколько пациентов: ФИО - '||cr.FIO||', Дата рожд.- '||TO_CHAR(cr.TUB_DATRO,'dd.mm.yyyy')||', СНИЛС - '||cr.TUB_PREDLE);
- continue;
- END IF;
- END IF;
- --если контрагент не найден, то создадим его
- IF nAGENTS_ID IS NULL THEN
- ----------------------------------------
- --1. блок обработки данных в разделе AGENTS
- ----------------------------------------
- sAGN_CODE := D_PKG_AGENTS.GEN_CODE(pnLPU);
- dAGENT_BIRTHDATE := cr.TUB_DATRO;
- BEGIN
- D_PKG_AGENTS.ADD(pnD_INSERT_ID => nAGENTS_ID,
- pnLPU => pnLPU,
- pnCID => nCAT_AGENTS,
- psAGN_CODE => sAGN_CODE,
- psAGN_NAME => sAGN_CODE||' '||cr.FIO,
- pnAGN_TYPE => 1,
- pnAGN_INN => NULL,
- pnAGN_KPP => NULL,
- psNOTE => cr.TUB_PRIM,
- psFIRSTNAME => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'FIRSTNAME'),
- psSURNAME => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'SURNAME'),
- psLASTNAME => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'LASTNAME'),
- pdBIRTHDATE => cr.TUB_DATRO,
- pnSEX => IMP70_PKG_KONVE.CONVERT_POL_TO_NUMBER(cr.TUB_POL),
- pnEDUCATION => NULL,
- pnOKVED => NULL,
- pnIS_EMPLOYER => 0,
- psSNILS => regexp_replace(cr.TUB_PREDLE,'\D',''), -- в базе храним без разделителей (только цифры)
- psAGN_OGRN => NULL,
- psAGN_OKPO => NULL,
- pdDEATHDATE => NULL,
- pnIS_UNKNOWN => NULL,
- pnDEATHDOCTYPE => NULL,
- pdDEATHDOCDATE => NULL,
- psDEATHDOCNUM => NULL,
- pnAGN_OKFS => NULL,
- psENP => NULL,
- psBIRTHPLACE => NULL,
- pnDECLINE_FIO => NULL,
- pnNATION => NULL,
- pnIS_HOME => 0,
- pnGEST_AGE_MOTHER => NULL,
- pnIS_ANONYM => 0,
- psDEATHPLACE => NULL,
- pnFULL_CLASSES => NULL,
- pnACCURACY_DATE_DEATH => NULL,
- pnACCURACY_DATE_BIRTH => NULL,
- pnIND_ENTERP => NULL,
- psAGN_OGRN_IND => NULL,
- pnCONVICT_AMOUNT => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENTS','Ошибка добавления пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- --если контрагент создан успешно или найден в системе, то загрузим остальные данные при их отсутствии
- IF nAGENTS_ID IS NOT NULL THEN
- ----------------------------------------
- --2.1 блок обработки данных в разделе AGENT_ADDRS
- ----------------------------------------
- BEGIN
- SELECT aa.ID
- INTO nAGENT_ADDRS_ID
- FROM D_AGENT_ADDRS aa
- WHERE aa.PID = nAGENTS_ID
- AND aa.VERSION = nVER_AGENT_ADDRS
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получим населенный пункт
- IMP70_PKG_KONVE.GET_GEOTYPE_CODE_NASP(pnLPU,cr.TUB_NASP,nCITY,sERROR_CODE);
- IF nCITY IS NULL THEN
- IF sERROR_CODE = 'TMR_GEOGRAFY' THEN
- lg(pnLOG_IDENT,'TMR_GEOGRAFY','Найдено несколько населенных пунктов: '||cr.TUB_NASP||'(пациент - '||cr.FIO||')');
- ELSIF sERROR_CODE = 'NDF_GEOGRAFY' THEN
- lg(pnLOG_IDENT,'','Не определен населенный пункт: '||cr.TUB_NASP||'(пациент - '||cr.FIO||')');
- END IF;
- END IF;
- --Получение района
- IF cr.TUB_RAI IS NOT NULL THEN
- nRAION_CODE := GET_RAIONCODE_BY_KODRAI(cr.TUB_RAI);
- BEGIN
- SELECT r.ID
- INTO nRAION
- FROM D_RAIONS r
- WHERE LOWER(r.R_CODE) = LOWER(nRAION_CODE)
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- nRAION := NULL;
- lg(pnLOG_IDENT,'NDF_RAIONS','Не определён район: '||cr.TUB_RAI||'(пациент - '||cr.FIO||')');
- END;
- END IF;
- --получим улицу (текст до первого символа '-' без последних цифр)
- IF UPPER(cr.TUB_ADR) = 'БОМЖ' THEN
- nSTREET := NULL;
- ELSE
- BEGIN
- SELECT g.ID
- INTO nSTREET
- FROM D_GEOGRAFY g
- join D_GEOGRAFYTYPES gt
- ON gt.ID = g.GEOLOCTYPE
- AND gt.AO_TYPE IN (nAO_TYPE_NASP,nAO_TYPE_STREET)
- WHERE g.version = nVER_GEOGRAFY
- AND UPPER(g.GEONAME) = UPPER(IMP70_PKG_KONVE.GET_STREET_FROM_ADRESS(cr.TUB_ADR))
- AND g.PID = nCITY
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- nSTREET := NULL;
- lg(pnLOG_IDENT,'NDF_GEOGRAFY','Не определена улица в адресе '||cr.TUB_ADR||' для нас пункта '||cr.TUB_NASP||' (пациент - '||cr.FIO||')');
- END;
- END IF;
- --получим номер дома из адреса (символы между первым символом '-' и предыдущим пробелом)
- sHOUSE := IMP70_PKG_KONVE.GET_HOUSE_FROM_ADRESS(cr.TUB_ADR);
- --получим литеру дома, если она есть
- sHOUSELIT := IMP70_PKG_KONVE.GET_LETTER_FROM_HOUSE(sHOUSE);
- IF sHOUSELIT IS NOT NULL THEN
- sHOUSE := REPLACE(sHOUSE,sHOUSELIT,'');
- END IF;
- --получим квартиру (цифры после первого символа '-')
- sFLAT := IMP70_PKG_KONVE.GET_FLAT_FROM_ADRESS(cr.TUB_ADR);
- --непосредственно добавление записи в D_AGENT_ADDRS
- BEGIN
- D_PKG_AGENT_ADDRS.ADD(pnD_INSERT_ID => nAGENT_ADDRS_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnSTREET => nSTREET,
- psHOUSE => sHOUSE,
- psHOUSELIT => sHOUSELIT,
- pnBLOCK => NULL,
- pnFLAT => sFLAT,
- psFLATLIT => NULL,
- psADDR_INDEX => NULL,
- pnIS_MAIN => (CASE WHEN LOWER(cr.TUB_PROJIV)='пост.жит.' THEN 1 ELSE 0 END),
- pnIS_REAL => (CASE WHEN LOWER(cr.TUB_PROJIV) IN ('пост.жит.','жит.др.тер','ин.гражд.') THEN 1 WHEN UPPER(cr.TUB_PROJIV)='БОМЖ' THEN 0 ELSE 0 END),
- pnIS_REG => 1,
- pnIS_TEMPREG => (CASE WHEN LOWER(cr.TUB_PROJIV) IN ('жит.др.тер','ин.гражд.') THEN 1 WHEN UPPER(cr.TUB_PROJIV)='БОМЖ' THEN 0 ELSE 0 END),
- pnIS_JUR => 0,
- pnIS_POST => 0,
- pnIS_BIRTH => 0,
- pnRAION => nRAION,
- pdBEGIN_DATE => cr.TUB_DATUCH,
- pdEND_DATE => NULL,
- psMANUAL_INPUT => NULL,
- pnIS_CITIZEN => (CASE WHEN cr.TUB_GIT = 'гор' THEN 1 WHEN cr.TUB_GIT = 'сел' THEN 0 ELSE NULL END),
- psFLAT => sFLAT,
- psADDROBJ => NULL,
- psFIAS_HOUSE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENTS_ADDRS','Ошибка добавления адреса пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.3 блок обработки данных в разделе AGENT_CONSITUTIONS
- ----------------------------------------
- nAGENT_CONSITUTIONS_ID := D_PKG_AGENT_CONSITUTIONS.GET_ACTUAL_ON_DATE(pnAGENT => nAGENTS_ID,
- pdDATE => SYSDATE,
- psFIELD => 'ID',
- pnNOT_NULL => 1);
- IF nAGENT_CONSITUTIONS_ID IS NULL THEN
- BEGIN
- D_PKG_AGENT_CONSITUTIONS.ADD(pnD_INSERT_ID => nAGENT_CONSITUTIONS_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pdMEAS_DATE => cr.TUB_DATUCH,
- pnCONSTITUTION => NULL,
- pnVISIT => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENTS_ADDRS','Ошибка добавления телосложения пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- ----------------------------------------
- --2.2 блок обработки данных в разделе AGENT_CONSITUTION_SPS
- ----------------------------------------
- IF nAGENT_CONSITUTIONS_ID IS NOT NULL THEN
- IF cr.TUB_VES IS NOT NULL THEN -- если указан вес, добавим его
- IF D_PKG_AGENT_CONSITUTION_SPS.WEIGHT(pnPID => nAGENT_CONSITUTIONS_ID, pnRAISE => 0) IS NULL THEN
- SELECT (SELECT a.ID
- FROM D_ANTHROP a
- WHERE LOWER(a.AN_CODE) = 'вес'
- AND a.VERSION = nVER_ANTHROP
- AND ROWNUM = 1
- )
- INTO nANTHROP
- FROM dual;
- BEGIN
- D_PKG_AGENT_CONSITUTION_SPS.ADD(pnD_INSERT_ID => nAGENT_CONSITUTION_SPS_ID,
- pnLPU => pnLPU,
- pnPID => nAGENT_CONSITUTIONS_ID,
- pnANTHROP => nANTHROP,
- pnA_VALUE => cr.TUB_VES,
- pnVISIT => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_CONSITUTION_SPS','Ошибка добавления веса пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- END IF;
- IF cr.TUB_ROST IS NOT NULL THEN -- если указан рост, добавим его
- IF D_PKG_AGENT_CONSITUTION_SPS.HEIGHT(pnPID => nAGENT_CONSITUTIONS_ID, pnRAISE => 0) IS NULL THEN
- SELECT (SELECT a.ID
- FROM D_ANTHROP a
- WHERE LOWER(a.AN_CODE) = 'рост'
- AND a.VERSION = nVER_ANTHROP
- AND ROWNUM = 1
- )
- INTO nANTHROP
- FROM dual;
- BEGIN
- D_PKG_AGENT_CONSITUTION_SPS.ADD(pnD_INSERT_ID => nAGENT_CONSITUTION_SPS_ID,
- pnLPU => pnLPU,
- pnPID => nAGENT_CONSITUTIONS_ID,
- pnANTHROP => nANTHROP,
- pnA_VALUE => cr.TUB_ROST,
- pnVISIT => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_CONSITUTION_SPS','Ошибка добавления роста пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- END IF;
- END IF;
- ----------------------------------------
- --2.4 блок обработки данных в разделе NR_PATIENT_DATA
- ----------------------------------------
- --получим родительскую запись для D_NR_PATIENT_DATA
- WITH N_REGISTR_TYPES AS (SELECT rt.ID
- FROM D_NOS_REGISTR_TYPES rt
- WHERE rt.T_CODE = nNOS_REG_TYPES_TUB -- ТуберкулезБП
- AND rt.VERSION = nVER_NOS_REGISTR_TYPES
- AND ROWNUM = 1),
- NR_CLS_CONT_CODES AS (SELECT (CASE WHEN LOWER(cr.TUB_PROJIV) = 'пост.жит.' THEN 1
- WHEN LOWER(cr.TUB_PROJIV) = 'жит.др.тер.' THEN 2
- WHEN (LOWER(cr.TUB_PROJIV) = 'иммигрант'
- OR
- LOWER(cr.TUB_MIGR) = 'да') THEN 3
- WHEN LOWER(cr.TUB_PROJIV) = 'ин.гражд.' THEN 8
- WHEN LOWER(cr.TUB_PROJIV) = 'из соцзащ.' THEN 9
- WHEN LOWER(cr.TUB_BOMJ) = 'да' THEN 6
- WHEN LOWER(cr.TUB_IZUIN) = 'да' THEN 4
- WHEN LOWER(cr.TUB_PENS) = 'да' THEN 10
- WHEN LOWER(cr.TUB_IZOBSH) = 'да' THEN 11
- ELSE NULL
- END) c_code
- FROM dual)
- SELECT (SELECT r.ID
- FROM D_NOS_REGISTRS r
- WHERE r.VERSION = nVER_NOS_REGISTRS
- AND r.REG_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND EXISTS(SELECT 1
- FROM D_NR_LPUDICT nld
- WHERE nld.VERSION = nVER_NR_LPUDICT
- AND nld.PID = r.ID
- AND nld.lpudict = nLPUDICT_ID)
- AND ROWNUM = 1),
- (SELECT ncc.ID
- FROM D_NR_CLS_CONTINGENTS ncc
- WHERE ncc.VERSION = nVER_NR_CLS_CONTINGENTS
- AND TRUNC(SYSDATE) BETWEEN ncc.DATE_BEGIN AND COALESCE(ncc.DATE_END,TRUNC(SYSDATE))
- AND ncc.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND ncc.C_CODE = (SELECT C_CODE FROM NR_CLS_CONT_CODES)
- AND ROWNUM = 1)
- INTO nNOS_REGISTR_ID,
- nNR_CONTINGENT
- FROM dual;
- IF nNOS_REGISTR_ID IS NULL THEN
- lg(pnLOG_IDENT,'NDF_NOS_REGISTRS','Не определен нозологический реестр для данного ЛПУ');
- ELSE
- BEGIN
- SELECT npd.ID
- INTO nNR_PATIENT_DATA_ID
- FROM D_NR_PATIENT_DATA npd
- WHERE npd.AGENT = nAGENTS_ID
- AND npd.VERSION = nVER_NR_PATIENT_DATA
- AND npd.PID = nNOS_REGISTR_ID
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_NR_PATIENT_DATA.ADD(pnD_INSERT_ID => nNR_PATIENT_DATA_ID,
- pnLPU => pnLPU,
- pnPID => nNOS_REGISTR_ID,
- pnAGENT => nAGENTS_ID,
- pnNR_CONTINGENT => nNR_CONTINGENT,
- pnIS_CITIZEN => (CASE WHEN LOWER(cr.TUB_GIT) = 'гор' THEN 1 ELSE 0 END),
- pnPROFESSION => NULL,
- pnON_NARC_DISP => NULL,
- pnDEATH_PLACE => NULL,
- pnDEATH_CAUSE => NULL,
- pnIS_AFTEREFFECT => NULL,
- pnHIV => (CASE WHEN cr.TUB_HIV IS NOT NULL THEN 1 ELSE 0 END),
- pnAUTOPSY => NULL,
- pnDEATH_ORG => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_NR_PATIENT_DATA','Ошибка добавления данных о пациенте в ноз. риеестре: '||cr.FIO||' (nNOS_REGISTR_ID='||nNOS_REGISTR_ID||'LPU='||pnLPU||', LPUDICT='||nLPUDICT_ID, SQLERRM);
- END;
- END;
- END IF;
- ----------------------------------------
- --2.5 блок обработки данных в разделе AGENT_SOCIAL_STATES
- ----------------------------------------
- nAGENT_SOCIAL_STATES_ID := D_PKG_AGENT_SOCIAL_STATES.GET_ACTUAL_ON_DATE(pnAGENT => nAGENTS_ID,
- pdDATE => COALESCE(cr.TUB_DATUCH,SYSDATE),
- psFIELD => 'ID');
- IF nAGENT_SOCIAL_STATES_ID IS NULL THEN
- --определим социальное положение по данным из файла
- IF cr.TUB_SOCKAT IS NOT NULL THEN
- SELECT (SELECT ss.ID
- FROM D_SOCIALSTATES ss
- WHERE ss.VERSION = nVER_SOCIALSTATES
- AND TRUNC(SYSDATE) BETWEEN ss.BEGIN_DATE AND COALESCE(ss.END_DATE,TRUNC(SYSDATE))
- AND ss.SOC_CODE = (SELECT vss.MIS_CODE
- FROM IMP70_V_KONVE_SOCSTATES_SOCKAT vss
- WHERE vss.FILE_CODE = cr.TUB_SOCKAT)
- AND ROWNUM = 1)
- INTO nSOCIAL_STATES_ID
- FROM dual;
- IF nSOCIAL_STATES_ID IS NULL THEN
- lg(pnLOG_IDENT,'NDF_SOCIALSTATES','Не определено социальное положение: '||cr.TUB_SOCKAT||' (пациент - '||cr.FIO||')');
- END IF;
- END IF;
- IF LOWER(cr.TUB_NERAB) = 'да' THEN
- SELECT (SELECT sc.SC_CODE
- FROM D_SOCIALCATEGORIES sc
- WHERE sc.SC_CODE = 1
- AND ROWNUM = 1)
- INTO nSOCIAL_CATEGORIES
- FROM dual;
- END IF;
- BEGIN
- D_PKG_AGENT_SOCIAL_STATES.ADD(pnD_INSERT_ID => nAGENT_SOCIAL_STATES_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnSOCIAL_STATE => nSOCIAL_STATES_ID,
- pnSOCIAL_CATEGORY => nSOCIAL_CATEGORIES,
- pdBEGIN_DATE => cr.TUB_DATUCH,
- pdEND_DATE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_SOCIAL_STATES','Ошибка добавления социального пложения пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- ----------------------------------------
- --2.19 блок обработки данных в разделе NR_PATIENTS
- ----------------------------------------
- BEGIN
- SELECT p.ID
- INTO nNR_PATIENT_ID
- FROM D_NR_PATIENTS p
- WHERE p.AGENT = nAGENTS_ID
- AND p.VERSION = nVER_NR_PATIENTS
- AND p.NOS_REGISTR = nNOS_REGISTR_ID
- AND p.REGISTR_LPU = nLPUDICT_ID
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_NR_PATIENTS.ADD(pnD_INSERT_ID => nNR_PATIENT_ID,
- pnLPU => pnLPU,
- pnAGENT => nAGENTS_ID,
- pnNOS_REGISTR => nNOS_REGISTR_ID,
- pnREGISTR_LPU => nLPUDICT_ID,
- psREGISTR_LPU_TEXT => NULL,
- pdREGISTR_DATE => cr.TUB_DATUCH,
- pnMKB => NULL,
- pnNUMB_REG => NULL,
- pdUPDATE_DATE => TRUNC(SYSDATE),
- pnFR => 0,
- psNUMB_REG_GD => NULL,
- pdREMOVE_DATE => NULL,
- pnREMOVE_REASON => NULL,
- pnREMOVE_LPU => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_NR_PATIENTS','Ошибка добавления в ноз. реестр пациента: '||cr.FIO||' (nNOS_REGISTR_ID='||nNOS_REGISTR_ID||'LPU='||pnLPU||', LPUDICT='||nLPUDICT_ID, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.6 блок обработки данных в разделе RTUB_CASES
- ----------------------------------------
- BEGIN
- SELECT rc.ID
- INTO nRTUB_CASES_ID
- FROM D_RTUB_CASES rc
- WHERE rc.AGENT = nAGENTS_ID
- AND rc.VERSION = nVER_RTUB_CASES
- AND (rc.NR_PATIENT = nNR_PATIENT_ID
- OR
- rc.NR_PATIENT IS NULL)
- AND COALESCE(cr.TUB_DATIZV,TRUNC(SYSDATE)) BETWEEN rc.CREATE_DATE AND COALESCE(rc.CLOSE_DATE,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получение данных для вставки в таблицу D_RTUB_CASES
- WITH N_REGISTR_TYPES AS (SELECT rt.ID
- FROM D_NOS_REGISTR_TYPES rt
- WHERE rt.T_CODE = nNOS_REG_TYPES_TUB -- ТуберкулезБП
- AND rt.VERSION = nVER_NOS_REGISTR_TYPES
- AND ROWNUM = 1),
- PAT_DGROUP_AGE AS (SELECT (CASE WHEN D_PKG_DAT_TOOLS.FULL_YEARS(cr.TUB_DATIZV,dAGENT_BIRTHDATE) >= 18 THEN 1
- ELSE 2
- END) age
- FROM dual)
- SELECT (SELECT dpg.ID
- FROM D_DTUB_PAT_GROUP dpg
- WHERE dpg.VERSION = nVER_DTUB_PAT_GROUP
- AND dpg.PG_CODE = (SELECT vdpg.MIS_CODE
- FROM IMP70_V_KONVE_DTUB_PAT_GROUP vdpg
- WHERE UPPER(vdpg.FILE_CODE) = UPPER(cr.TUB_TIPPAC)
- AND ROWNUM = 1)
- AND ROWNUM = 1),
- (SELECT pdg.ID
- FROM D_PATIENTS_DGROUP pdg
- WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
- AND pdg.HG_CODE = (SELECT vpg.MIS_CODE
- FROM IMP70_V_KONVE_PAT_DGROUP vpg
- WHERE UPPER(vpg.FILE_CODE) = UPPER(cr.TUB_GRU)
- AND ROWNUM = 1)
- AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND pdg.AGE = (SELECT AGE FROM PAT_DGROUP_AGE)
- AND ROWNUM = 1)
- INTO nPAT_GROUP,
- nFROM_GROUP
- FROM dual;
- BEGIN
- D_PKG_RTUB_CASES.ADD(pnD_INSERT_ID => nRTUB_CASES_ID,
- pnLPU => pnLPU,
- pnAGENT => nAGENTS_ID,
- pnNR_PATIENT => nNR_PATIENT_ID,
- pnPAT_GROUP => nPAT_GROUP,
- pnFROM_DGROUP => nFROM_GROUP,
- pnLPU_CREATE => nLPUDICT_ID,
- pdCREATE_DATE => cr.TUB_DATIZV,
- pdLAST_CHANGE_DATE => cr.TUB_DATKOR,
- pnLAST_CHANGE_EMP => NULL,
- pdCLOSE_DATE => NULL,
- pnCLOSE_EMP => NULL,
- psCLOSE_REASON => NULL,
- pnLPU_IN_CHARGE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASES','Ошибка добавления случая туберкулеза для пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.7 блок обработки данных в разделе RTUB_CASE_DGNS
- ----------------------------------------
- IF nRTUB_CASES_ID IS NOT NULL THEN
- BEGIN
- SELECT rcd.ID
- INTO nRTUB_CASE_DGNS_ID
- FROM D_RTUB_CASE_DGNS rcd
- WHERE rcd.PID = nRTUB_CASES_ID
- AND rcd.VERSION = nVER_RTUB_CASE_DGNS
- AND COALESCE(cr.TUB_DAT1TB,TRUNC(SYSDATE)) BETWEEN rcd.DATE_BEGIN AND COALESCE(rcd.DATE_END,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получим данные для вставки в таблицу D_RTUB_CASE_DGNS
- SELECT (SELECT m.ID
- FROM D_MKB10 m
- WHERE m.MKB_CODE = 'A15.0'
- AND m.VERSION = nVER_MKB10
- AND ROWNUM = 1),
- (SELECT dcf.ID
- FROM D_DTUB_CLINIC_FORMS dcf
- WHERE dcf.VERSION = nVER_DTUB_CLINIC_FORMS
- AND dcf.CLF_CODE = (SELECT vcf.MIS_CODE
- FROM IMP70_V_KONVE_CLINIC_FORMS vcf
- WHERE UPPER(vcf.FILE_CODE) = UPPER(cr.TUB_KODIAG)
- AND ROWNUM = 1)
- AND ROWNUM = 1),
- (SELECT ddm.ID
- FROM D_DTUB_DETECT_METHODS ddm
- WHERE ddm.VERSION = nVER_DTUB_DETECT_METHODS
- AND UPPER(ddm.DM_CODE) = (SELECT UPPER(vdm.MIS_CODE)
- FROM IMP70_V_KONVE_DETECT_METHODS vdm
- WHERE UPPER(REPLACE(vdm.FILE_CODE,' ','')) = UPPER(REPLACE(cr.TUB_PROF,' ',''))
- AND ROWNUM = 1)
- AND ROWNUM = 1)
- INTO nMKB,
- nCLINIC_FORM,
- nDETECT_METHOD
- FROM dual;
- IF cr.TUB_DAT1TB IS NULL THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_DGNS','Для пациента: '||cr.FIO||' не заполнено поле TUB_DAT1TB. Создание диагноза невозможно.');
- ELSE
- BEGIN
- D_PKG_RTUB_CASE_DGNS.ADD(pnD_INSERT_ID => nRTUB_CASE_DGNS_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASES_ID,
- pdDATE_BEGIN => cr.TUB_DAT1TB,
- pdDATE_END => NULL,
- pnEMPLOYER => NULL,
- psEMP_FIO => NULL,
- pnMKB_LPU => nLPUDICT_ID,
- psMKB_LPU_TEXT => NULL,
- pnMKB => nMKB,
- pnMKB_TYPE => NULL,
- psMKB_TEXT => NULL,
- pdCONFIRM_DATE => cr.TUB_DATUCH,
- pnFORM => NULL,
- pnCLINIC_FORM => nCLINIC_FORM,
- pnDESTRUCT => NULL,
- pnCOMB_INJURY => NULL,
- pnOPERATION => NULL,
- pnCOMPLICATION => NULL,
- pnDETECT_METHOD => nDETECT_METHOD,
- psDETECT_METHOD_OTHER => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_DGNS','Ошибка добавления диагноза для пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- END;
- END IF;
- ----------------------------------------
- --2.8 блок обработки данных в разделе RTUB_CASE_DISP
- ----------------------------------------
- IF nRTUB_CASES_ID IS NOT NULL THEN
- BEGIN
- SELECT rcd.ID
- INTO nRTUB_CASE_DISP_ID
- FROM D_RTUB_CASE_DISP rcd
- WHERE rcd.PID = nRTUB_CASES_ID
- AND rcd.VERSION = nVER_RTUB_CASE_DISP
- AND rcd.DISP_LPU = nLPUDICT_ID
- AND COALESCE(cr.TUB_DATUCH,TRUNC(SYSDATE)) BETWEEN rcd.DATE_IN AND COALESCE(rcd.DATE_OUT,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_RTUB_CASE_DISP.ADD(pnD_INSERT_ID => nRTUB_CASE_DISP_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASES_ID,
- pnDISP_LPU => nLPUDICT_ID,
- pnDISP_EMP => NULL,
- pdDATE_IN => cr.TUB_DATUCH,
- pdDATE_OUT => NULL,
- pnOUT_REASON => NULL,
- pnCONTROL_CARD => NULL,
- pdRECOMEND_DATE_OUT => NULL,
- pnRECOMEND_OUT_REAS => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_DISP','Ошибка добавления данных учета в ЛПУ случая туберкулеза для пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- END IF;
- ----------------------------------------
- --2.9 блок обработки данных в разделе RTUB_CASE_DISP_DATA
- ----------------------------------------
- IF nRTUB_CASE_DISP_ID IS NOT NULL THEN
- IF cr.TUB_GRUDU IS NOT NULL THEN
- BEGIN
- SELECT rcdd.ID
- INTO nRTUB_CASE_DISP_DATA_ID
- FROM D_RTUB_CASE_DISP_DATA rcdd
- WHERE rcdd.PID = nRTUB_CASE_DISP_ID
- AND rcdd.VERSION = nVER_RTUB_CASE_DISP_DATA
- AND COALESCE(cr.TUB_DATUCH,TRUNC(SYSDATE)) BETWEEN rcdd.DATE_IN AND COALESCE(rcdd.DATE_OUT,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получение данных для вставки в таблицу D_RTUB_CASE_DISP_DATA
- WITH N_REGISTR_TYPES AS (SELECT rt.ID
- FROM D_NOS_REGISTR_TYPES rt
- WHERE rt.T_CODE = nNOS_REG_TYPES_TUB -- ТуберкулезБП
- AND rt.VERSION = nVER_NOS_REGISTR_TYPES
- AND ROWNUM = 1),
- PAT_DGROUP_AGE AS (SELECT (CASE WHEN D_PKG_DAT_TOOLS.FULL_YEARS(cr.TUB_DATUCH,dAGENT_BIRTHDATE) >= 18 THEN 1
- ELSE 2
- END) age
- FROM dual)
- SELECT (SELECT pdg.ID
- FROM D_PATIENTS_DGROUP pdg
- WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
- AND UPPER(pdg.HG_CODE) = (SELECT UPPER(vpdg.MIS_CODE)
- FROM IMP70_V_KONVE_PAT_DGROUP vpdg
- WHERE vpdg.FILE_CODE = UPPER(cr.TUB_GRUDU)
- AND ROWNUM = 1)
- AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND pdg.AGE = (SELECT AGE FROM PAT_DGROUP_AGE)
- AND ROWNUM = 1)
- INTO nDGROUP
- FROM dual;
- IF nDGROUP IS NULL THEN
- lg(pnLOG_IDENT,'NDF_RTUB_CASE_DISP_DATA','Не определена Группа Д-учета TUB_GRUDU='||cr.TUB_GRUDU||' для пациента: '||cr.FIO);
- ELSE
- BEGIN
- D_PKG_RTUB_CASE_DISP_DATA.ADD(pnD_INSERT_ID => nRTUB_CASE_DISP_DATA_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASE_DISP_ID,
- pnDGROUP => nDGROUP,
- pdDATE_IN => cr.TUB_DATUCH,
- pdRECOM_DATE_OUT => NULL,
- pnRECOM_TO_DGROUP => NULL,
- pdDATE_OUT => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_DISP_DATA','Ошибка добавления Группы Д-учета для пациента : '||cr.FIO, SQLERRM);
- END;
- END IF;
- END;
- END IF;
- END IF;
- ----------------------------------------
- --2.10 блок обработки данных в разделе AGENT_COMP_DISEASES
- ----------------------------------------
- BEGIN
- SELECT acd.ID
- INTO nAGENT_COMP_DISEASES_ID
- FROM D_AGENT_COMP_DISEASES acd
- WHERE acd.PID = nAGENTS_ID
- AND acd.VERSION = nVER_AGENT_COMP_DISEASES
- AND COALESCE(cr.TUB_DATUCH,TRUNC(SYSDATE)) BETWEEN acd.DATE_BEGIN AND COALESCE(acd.DATE_END,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --создадим несколько сопуствующих заболеваний при необходимости
- FOR z IN (SELECT 'TUB_SAHD' col_name, cr.TUB_SAHD col_value FROM dual
- UNION ALL SELECT 'TUB_PSIH' col_name, cr.TUB_PSIH col_value FROM dual
- UNION ALL SELECT 'TUB_YAZV' col_name, cr.TUB_YAZV col_value FROM dual
- UNION ALL SELECT 'TUB_GEPAT' col_name, cr.TUB_GEPAT col_value FROM dual
- UNION ALL SELECT 'TUB_POCHPA' col_name, cr.TUB_POCHPA col_value FROM dual
- UNION ALL SELECT 'TUB_IBS' col_name, cr.TUB_IBS col_value FROM dual
- UNION ALL SELECT 'TUB_GIPERT' col_name, cr.TUB_GIPERT col_value FROM dual
- UNION ALL SELECT 'TUB_HNZL' col_name, cr.TUB_HNZL col_value FROM dual
- UNION ALL SELECT 'TUB_KORTS' col_name, cr.TUB_KORTS col_value FROM dual
- UNION ALL SELECT 'TUB_ONKOL' col_name, cr.TUB_ONKOL col_value FROM dual
- UNION ALL SELECT 'TUB_OPERTB' col_name, cr.TUB_OPERTB col_value FROM dual
- )
- LOOP
- nCOMP_DISEASE := NULL;
- --получение данные для вставки
- WITH COMP_DISEASES_CODES AS (SELECT (CASE WHEN z.COL_NAME = 'TUB_SAHD' AND z.COL_VALUE IS NOT NULL THEN '137'
- WHEN z.COL_NAME = 'TUB_PSIH' AND z.COL_VALUE IS NOT NULL THEN '11'
- WHEN z.COL_NAME = 'TUB_YAZV' AND z.COL_VALUE IS NOT NULL THEN 'ЯБ ДПК'
- WHEN z.COL_NAME = 'TUB_GEPAT' AND UPPER(z.COL_VALUE) = 'C' THEN 'HCV'
- WHEN z.COL_NAME = 'TUB_GEPAT' AND UPPER(z.COL_VALUE) = 'B' THEN 'HBsAg'
- WHEN z.COL_NAME = 'TUB_GEPAT' AND UPPER(z.COL_VALUE) = 'ДА' THEN 'Гепатит'
- WHEN z.COL_NAME = 'TUB_POCHPA' AND z.COL_VALUE IS NOT NULL THEN '12'
- WHEN z.COL_NAME = 'TUB_IBS' AND z.COL_VALUE IS NOT NULL THEN 'ИБС'
- WHEN z.COL_NAME = 'TUB_GIPERT' AND z.COL_VALUE IS NOT NULL THEN 'Гипертония'
- WHEN z.COL_NAME = 'TUB_HNZL' AND z.COL_VALUE IS NOT NULL THEN 'ХНЗЛ'
- WHEN z.COL_NAME = 'TUB_KORTS' AND z.COL_VALUE IS NOT NULL THEN '13'
- WHEN z.COL_NAME = 'TUB_ONKOL' AND z.COL_VALUE IS NOT NULL THEN '15'
- WHEN z.COL_NAME = 'TUB_OPERTB' AND z.COL_VALUE IS NOT NULL THEN '16'
- ELSE NULL
- END) cd_code
- FROM dual)
- SELECT (SELECT cd.ID
- FROM D_COMP_DISEASES cd
- WHERE cd.VERSION = nVER_COMP_DISEASES
- AND LOWER(cd.CD_CODE) = (SELECT LOWER(CD_CODE) FROM COMP_DISEASES_CODES)
- AND ROWNUM = 1)
- INTO nCOMP_DISEASE
- FROM dual;
- IF nCOMP_DISEASE IS NOT NULL THEN
- BEGIN
- D_PKG_AGENT_COMP_DISEASES.ADD(pnD_INSERT_ID => nAGENT_COMP_DISEASES_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnCOMP_DISEASE => nCOMP_DISEASE,
- pdDATE_BEGIN => cr.TUB_DATUCH,
- pdDATE_END => NULL,
- psNOTE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_COMP_DISEASES','Ошибка добавления сопутствующего заболевания пациента: '||cr.FIO||' (поле '||z.COL_NAME||' файла)', SQLERRM);
- END;
- END IF;
- END LOOP;
- END;
- ----------------------------------------
- --2.11 блок обработки данных в разделе AGENT_REGISTRATION
- ----------------------------------------
- IF cr.TUB_POLIK <> 0 THEN -- создаем запись только если TUB_POLIK не равно 0.
- --получение данных для вставки в таблицу
- SELECT (SELECT rp.ID
- FROM D_REGISTER_PURPOSES rp
- WHERE rp.VERSION = nVER_REGISTER_PURPOSES
- AND rp.RP_CODE = (SELECT (CASE WHEN TRUNC(MONTHS_BETWEEN(TRUNC(cr.TUB_DATUCH),dAGENT_BIRTHDATE))/12 >= 18 THEN '1'
- ELSE '2'
- END)
- FROM dual)
- AND ROWNUM = 1),
- (SELECT ld.ID
- FROM D_LPUDICT ld
- WHERE ld.VERSION = nVER_LPUDICT
- AND LOWER(ld.LPU_CODE) = (SELECT LOWER(vlc.MIS_CODE)
- FROM IMP70_V_KONVE_LPUDICT_CODES vlc
- WHERE vlc.FILE_CODE = cr.TUB_POLIK
- AND ROWNUM = 1)
- AND ROWNUM = 1)
- INTO nREGISTER_PURPOSE,
- nLPU_REG
- FROM dual;
- --проверим, нет ли прикрепления к текущему ЛПУ
- SELECT (SELECT ar.ID
- FROM D_AGENT_REGISTRATION ar
- WHERE ar.PID = nAGENTS_ID
- AND ar.LPU_REG = nLPU_REG
- AND COALESCE(cr.TUB_DATUCH,TRUNC(SYSDATE)) BETWEEN ar.BEGIN_DATE AND COALESCE(ar.END_DATE,TRUNC(SYSDATE))
- AND ROWNUM = 1)
- INTO nAGENT_REGISTRATION_ID
- FROM dual;
- IF nAGENT_REGISTRATION_ID IS NULL THEN
- --Определим участок
- IF nLPU_REG IS NULL THEN
- lg(pnLOG_IDENT,'NDF_LPUDICT','не определено ЛПУ прикрепления: TUB_POLIK = '||cr.TUB_POLIK||'(пациент - '||cr.FIO||')');
- ELSE
- BEGIN
- SELECT s.ID
- INTO nLPU_SITE
- FROM D_SITES s
- WHERE s.VERSION = nVER_SITES
- AND s.lpudict = nLPU_REG
- AND UPPER(s.SITE_NAME) LIKE '%'||UPPER(cr.TUB_UCH)||'%'
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- lg(pnLOG_IDENT,'NDF_SITES','Не определен участок '||cr.TUB_UCH||' для D_LPUDICT='||nLPU_REG||'(POLIK ='||cr.TUB_POLIK||')');
- /* -- закомментировано, так как не чем заполнить обязательное pnDIVISION
- begin
- D_PKG_SITES.ADD(pnD_INSERT_ID => nLPU_SITE,
- pnLPU => pnLPU,
- psSITE_CODE => cr.TUB_UCH,
- psSITE_NAME => cr.TUB_UCH,
- pnSITE_TYPE => null,
- pnMAX_PACIENT => null,
- pnREGISTER_PURPOSE => nREGISTER_PURPOSE,
- pnDIVISION => null,
- pnLPUDICT => nLPU_REG);
- exception
- when others then
- lg(pnLOG_IDENT,'ADD_SITES','Ошибка добавления участка: '||cr.TUB_UCH||' для D_LPUDICT='||nLPU_REG||'(TUB_POLIK ='||cr.TUB_POLIK||')',sqlerrm);
- end;
- */
- END;
- BEGIN
- D_PKG_AGENT_REGISTRATION.ADD(pnD_INSERT_ID => nAGENT_REGISTRATION_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnLPU_REG => nLPU_REG,
- pnREGISTER_PURPOSE => nREGISTER_PURPOSE,
- pdBEGIN_DATE => cr.TUB_DATUCH,
- pdEND_DATE => NULL,
- pnLPU_SITE => nLPU_SITE,
- pnREG_TYPE => NULL,
- psREG_DOC_NUMB => NULL,
- psREG_NOTE => NULL,
- pnREG_CATEGORY => NULL,
- pnDIVISION => NULL,
- pnAGENT_APPLIСATION_REG => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_REGISTRATION','Ошибка добавления регистрации пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- END IF;
- END IF;
- ----------------------------------------
- --2.12 блок обработки данных в разделе AGENT_GR_RENTGENOGR
- ----------------------------------------
- --получеим данные дл вставки в таблицу
- IF cr.TUB_SOCGR IS NOT NULL THEN
- BEGIN
- SELECT agr.ID
- INTO nAGENT_GR_RENTGENOGR_ID
- FROM D_AGENT_GR_RENTGENOGR agr
- WHERE agr.PID = nAGENTS_ID
- AND agr.VERSION = nVER_AGENT_GR_RENTGENOGR
- AND (TRUNC(SYSDATE) BETWEEN agr.BEGIN_DATE AND COALESCE(agr.END_DATE,TRUNC(SYSDATE))
- OR
- agr.BEGIN_DATE IS NULL)
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- SELECT (SELECT grf.ID
- FROM D_GR_RENTGENOGRAPH grf
- WHERE grf.VERSION = nVER_GR_RENTGENOGRAPH
- AND LOWER(grf.GRF_CODE) = (SELECT LOWER(vsgr.MIS_CODE)
- FROM IMP70_V_KONVE_SOCGR_GR_RENTGEN vsgr
- WHERE LOWER(vsgr.FILE_CODE) = LOWER(cr.TUB_SOCGR)
- AND ROWNUM = 1)
- AND ROWNUM = 1)
- INTO nGR_RENTGENOGRAPH
- FROM dual;
- IF nGR_RENTGENOGRAPH IS NULL THEN
- lg(pnLOG_IDENT,'NDF_AGENT_GR_RENTGENOGR','Не определена группа риска флюорографии '||cr.TUB_SOCGR||' для пациента: '||cr.FIO);
- ELSE
- BEGIN
- D_PKG_AGENT_GR_RENTGENOGR.ADD(pnD_INSERT_ID => nAGENT_GR_RENTGENOGR_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnGR_RENTGENOGRAPH => nGR_RENTGENOGRAPH,
- pdBEGIN_DATE => NULL,
- pdEND_DATE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_GR_RENTGENOGR','Ошибка добавления группы риска флюорографии пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- END;
- END IF;
- ----------------------------------------
- --2.13 блок обработки данных в разделе AGENT_DECRETIV_GROUPS
- ----------------------------------------
- IF cr.TUB_DEKGR <> 0 THEN
- BEGIN
- SELECT adg.ID
- INTO nAGENT_DECRETIV_GROUPS_ID
- FROM D_AGENT_DECRETIV_GROUPS adg
- WHERE adg.PID = nAGENTS_ID
- AND adg.VERSION = nVER_AGENT_DECRETIV_GROUPS
- AND (TRUNC(SYSDATE) BETWEEN adg.BEGIN_DATE AND COALESCE(adg.END_DATE,TRUNC(SYSDATE))
- OR
- adg.BEGIN_DATE IS NULL)
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получим данные для вставки в таблицу
- WITH DEC_GROUPS_CODES AS (SELECT (CASE WHEN cr.TUB_DEKGR = 11 THEN 7
- ELSE NULL
- END)
- FROM dual)
- SELECT (SELECT drg.ID
- FROM D_DECRETIV_GROUPS drg
- WHERE drg.VERSION = nVER_DECRETIV_GROUPS
- AND LOWER(drg.GRD_CODE) = (SELECT LOWER(GRD_CODE) FROM DEC_GROUPS_CODES)
- AND ROWNUM = 1)
- INTO nDECRETIV_GROUP
- FROM dual;
- BEGIN
- D_PKG_AGENT_DECRETIV_GROUPS.ADD(pnD_INSERT_ID => nAGENT_DECRETIV_GROUPS_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnDECRETIV_GROUP => nDECRETIV_GROUP,
- pdBEGIN_DATE => NULL,
- pdEND_DATE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_DECRETIV_GROUPS','Ошибка добавления декретированной группы пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- END IF;
- ----------------------------------------
- --2.14 блок обработки данных в разделе AGENT_INABILITIES
- ----------------------------------------
- BEGIN
- SELECT ain.ID
- INTO nAGENT_INABILITIES_ID
- FROM D_AGENT_INABILITIES ain
- WHERE ain.PID = nAGENTS_ID
- AND ain.VERSION = nVER_AGENT_INABILITIES
- AND TRUNC(SYSDATE) BETWEEN ain.BEGIN_DATE AND COALESCE(ain.END_DATE,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- IF cr.TUB_INVTB IS NOT NULL THEN
- GET_INABILITY_DATA(psINABILITY => cr.TUB_INVTB,
- pnINABILITY_GROUP => nINABILITY_GROUP,
- pdINABILITY_DATE => dINABILITY_BEGIN_DATE);
- BEGIN
- D_PKG_AGENT_INABILITIES.ADD(pnD_INSERT_ID => nAGENT_INABILITIES_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnINABILITY_TYPE => NULL,
- pnINABILITY_GRADE => NULL,
- pnINABILITY_GROUP => nINABILITY_GROUP,
- psINABILITY_DOC_NUMB => NULL,
- pnDISABILITY_GRADE => NULL,
- pnINABILITY_STATUS => NULL,
- pdBEGIN_DATE => dINABILITY_BEGIN_DATE,
- pdEND_DATE => NULL,
- pdDATE_LASTINSP => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_INABILITIES','Ошибка добавления данных об инвалидности пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- END;
- ----------------------------------------
- --2.15 блок обработки данных в разделе AGENT_DETR_EFFECTS
- ----------------------------------------
- IF (cr.TUB_ALK IS NOT NULL) OR (cr.TUB_NARK IS NOT NULL) OR (cr.TUB_KUREN IS NOT NULL) THEN
- BEGIN
- SELECT adef.ID
- INTO nAGENT_DETR_EFFECTS_ID
- FROM D_AGENT_DETR_EFFECTS adef
- WHERE adef.PID = nAGENTS_ID
- AND adef.VERSION = nVER_AGENT_DETR_EFFECTS
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получим данные из таблицы импорта для вставку в таблицу
- WITH DET_EFFECTS_CODES AS (SELECT (CASE WHEN cr.TUB_ALK IS NOT NULL THEN 2
- WHEN cr.TUB_NARK IS NOT NULL THEN 4
- WHEN cr.TUB_KUREN IS NOT NULL THEN 1
- ELSE NULL
- END)
- FROM dual)
- SELECT (SELECT def.ID
- FROM D_DETRIMENTAL_EFFECTS def
- WHERE def.VERSION = nVER_DETRIMENTAL_EFFECTS
- AND def.CODE = (SELECT CODE FROM DET_EFFECTS_CODES)
- AND ROWNUM = 1)
- INTO nDETR_EFFECT
- FROM dual;
- BEGIN
- D_PKG_AGENT_DETR_EFFECTS.ADD(pnD_INSERT_ID => nAGENT_DETR_EFFECTS_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnDETR_EFFECT => nDETR_EFFECT,
- pnIS_ACTUAL => 1);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_DETR_EFFECTS','Ошибка добавления наследственных заболеваний пациента: '||cr.FIO,SQLERRM);
- END;
- END;
- END IF;
- ----------------------------------------
- --2.16 блок обработки данных в разделе 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
- BEGIN
- D_PKG_PERSMEDCARD.ADD(pnD_INSERT_ID => nPERSMEDCARD_ID,
- pnLPU => pnLPU,
- pnCID => nCAT_PERSMEDCARD,
- pnAGENT => nAGENTS_ID,
- pnBLOODGROUPE => NULL,
- pnRHESUS => NULL,
- psECOLOR => NULL,
- psCARD_NUMB => cr.TUB_LIKOD,
- psNOTE => NULL,
- pnREG_DIVISION => NULL,
- pnPMC_TYPE => NULL,
- pnIA_PRINTED => 0,
- pnSMS_AGREE => 0,
- pnEMAIL_AGREE => 0,
- pdCREATEDATE => SYSDATE);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_PERSMEDCARD','Ошибка добавления карты пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.17 блок обработки данных в разделе RTUB_CASE_DETECTION
- ----------------------------------------
- IF nRTUB_CASES_ID IS NOT NULL THEN
- BEGIN
- SELECT rcd.ID
- INTO nRTUB_CASE_DETECTION_ID
- FROM D_RTUB_CASE_DETECTION rcd
- WHERE rcd.PID = nRTUB_CASES_ID
- AND rcd.VERSION = nVER_RTUB_CASE_DETECTION
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- -- получим данные из таблицы импорта для вставки в таблицу
- WITH N_REGISTR_TYPES AS (SELECT rt.ID
- FROM D_NOS_REGISTR_TYPES rt
- WHERE rt.T_CODE = nNOS_REG_TYPES_TUB -- ТуберкулезБП
- AND rt.VERSION = nVER_NOS_REGISTR_TYPES
- AND ROWNUM = 1)
- SELECT (SELECT ncpd.ID
- FROM D_NR_CLS_PLACE_DETECTION ncpd
- WHERE ncpd.VERSION = nVER_NR_CLS_PLACE_DETECTION
- AND UPPER(ncpd.PD_CODE) = (SELECT UPPER(vkpd.MIS_CODE)
- FROM IMP70_V_KONVE_PLACE_DETECTION vkpd
- WHERE UPPER(vkpd.FILE_CODE) = UPPER(cr.TUB_MESREG)
- AND ROWNUM = 1)
- AND ncpd.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND TRUNC(SYSDATE) BETWEEN ncpd.DATE_BEGIN AND COALESCE(ncpd.DATE_END,TRUNC(SYSDATE))
- AND ROWNUM = 1),
- (SELECT pd.ID
- FROM D_NR_CLS_PATH_DISCOVER pd
- WHERE pd.VERSION = nVER_NR_CLS_PATH_DISCOVER
- AND UPPER(pd.PATH_CODE) = (SELECT UPPER(vkpd.MIS_CODE)
- FROM IMP70_V_KONVE_PATH_DISCOVER vkpd
- WHERE UPPER(vkpd.FILE_CODE) = UPPER(cr.TUB_ZABVI)
- AND ROWNUM = 1)
- AND pd.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND TRUNC(SYSDATE) BETWEEN pd.DATE_BEGIN AND COALESCE(pd.DATE_END,TRUNC(SYSDATE))
- AND ROWNUM = 1)
- INTO nDETECT_PLACE,
- nDISCOVER_PATH
- FROM dual;
- BEGIN
- d_PKG_RTUB_CASE_DETECTION.ADD(pnD_INSERT_ID => nRTUB_CASE_DETECTION_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASES_ID,
- pdSYMP_DATE => NULL,
- pdFIRST_VIS_DATE => cr.TUB_DATIZV,
- pnFIRST_VISIT => NULL,
- pnDETECT_PLACE => nDETECT_PLACE,
- psDETECT_PLACE_TEXT => NULL,
- pnDETECT_LPU => NULL,
- psDETECT_LPU_TEXT => NULL,
- pnDISCOVER_PATH => nDISCOVER_PATH);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_DETECTION','Ошибка добавления выявления диагноза туберкулеза пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- END IF;
- ----------------------------------------
- --2.18 блок обработки данных в разделе RTUB_CASE_CHEMO
- ----------------------------------------
- IF nRTUB_CASES_ID IS NOT NULL THEN
- BEGIN
- SELECT rcc.ID
- INTO nRTUB_CASE_CHEMO_ID
- FROM D_RTUB_CASE_CHEMO rcc
- WHERE rcc.PID = nRTUB_CASES_ID
- AND rcc.VERSION = nVER_RTUB_CASE_CHEMO
- AND COALESCE(cr.TUB_DATLEC,TRUNC(SYSDATE)) BETWEEN rcc.DATE_BEGIN AND COALESCE(rcc.DATE_END,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получим данные из таблицы импорта для вставки
- SELECT (SELECT dcm.ID
- FROM D_DTUB_CHEMO_MODES dcm
- WHERE dcm.VERSION = nVER_DTUB_CHEMO_MODES
- AND LOWER(dcm.CM_CODE) = LOWER(cr.TUB_REJ)
- AND ROWNUM = 1),
- (SELECT dco.ID
- FROM D_DTUB_CHEMO_OUT dco
- WHERE dco.VERSION = nVER_DTUB_CHEMO_OUT
- AND dco.CO_CODE = (SELECT vkdco.MIS_CODE
- FROM IMP70_V_KONVE_DTUB_CHEMO_OUT vkdco
- WHERE UPPER(vkdco.FILE_CODE) = UPPER(cr.TUB_REZULT)
- AND ROWNUM = 1)
- AND ROWNUM = 1)
- INTO nCHEMO_MODE,
- nCHEMO_OUT
- FROM dual;
- IF nCHEMO_MODE IS NULL THEN
- lg(pnLOG_IDENT,'NDF_DTUB_CHEMO_MODES','Не определен режим химиотерапии для пациента: '||cr.FIO||' (TUB_REJ = '||cr.TUB_REJ||')');
- ELSE
- IF nRTUB_CASE_DGNS_ID IS NOT NULL THEN
- BEGIN
- D_PKG_RTUB_CASE_CHEMO.ADD(pnD_INSERT_ID => nRTUB_CASE_CHEMO_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASES_ID,
- pnDIAGNS => nRTUB_CASE_DGNS_ID,
- pdDATE_BEGIN => cr.TUB_DATLEC,
- pdDATE_END => cr.TUB_DATREZ,
- pnCHEMO_MODE => nCHEMO_MODE,
- pnCHEMO_OUT => nCHEMO_OUT,
- pnCHEMO_PLACE => 0,
- pnART => 0,
- pnCOTRIMOXAZOL => 0,
- pnIS_EMP => NULL,
- pnIS_DRUG_SENS_RSLT => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_CHEMO','Ошибка добавления химиотерапии пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- END IF;
- END;
- END IF;
- END IF; -- конец условия if nAGENTS_ID is not null ПОСЛЕ создания D_AGENTS
- END LOOP; -- конец цикла по таблиуе импорта
- END IF; -- конец условия if nERROR = 0 or pnERR_IGNORE = 1
- lg(pnLOG_IDENT,'END_IMP','Завершение импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ERROR_IMP','Ошибка - '||SQLERRM);
- D_P_EXC('Ошибка процедуры IMP70_P_TUBKONVE импорта данных из таблицы IMP70_TUBKONVE: Ошибка - '||SQLERRM);
- END IMP70_P_TUBKONVE;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --Процедура для импорта данных из файла UMEKONVE.dbf через таблицу импорта IMP70_UMEKONVE
- PROCEDURE IMP70_P_UMEKONVE
- (
- pnLPU IN NUMBER,
- pnLOG_IDENT OUT NUMBER,
- pnERR_IGNORE IN NUMBER DEFAULT 0
- )
- IS
- nVER_AGENT_ADDRS D_PKG_STD.tREF; -- идентификатор версии для раздела AGENT_ADDRS
- nVER_GEOGRAFY D_PKG_STD.tREF; -- идентификатор версии для раздела GEOGRAFY
- nVER_NOS_REGISTR_TYPES D_PKG_STD.tREF; -- идентификатор версии для раздела NOS_REGISTR_TYPES
- nVER_NOS_REGISTRS D_PKG_STD.tREF; -- идентификатор версии для раздела NOS_REGISTRS
- nVER_NR_CLS_CONTINGENTS D_PKG_STD.tREF; -- идентификатор версии для раздела NR_CLS_CONTINGENTS
- nVER_NR_PATIENT_DATA D_PKG_STD.tREF; -- идентификатор версии для раздела NR_PATIENT_DATA
- nVER_MKB10 D_PKG_STD.tREF; -- идентификатор версии для раздела nVER_MKB10
- nVER_DIRECTORIES_DATA_VER D_PKG_STD.tREF; -- идентификатор версии для раздела DIRECTORIES_DATA_VER
- nVER_SOCIALSTATES D_PKG_STD.tREF; -- идентификатор версии для раздела SOCIALSTATES
- nVER_NR_PATIENTS D_PKG_STD.tREF; -- идентификатор версии для раздела NR_PATIENTS
- nVER_RTUB_CASES D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASES
- nVER_DTUB_PAT_GROUP D_PKG_STD.tREF; -- идентификатор версии для раздела DTUB_PAT_GROUP
- nVER_PATIENTS_DGROUP D_PKG_STD.tREF; -- идентификатор версии для раздела PATIENTS_DGROUP
- nVER_RTUB_CASE_DGNS D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASE_DGNS
- nVER_DTUB_CLINIC_FORMS D_PKG_STD.tREF; -- идентификатор версии для раздела DTUB_CLINIC_FORMS
- nVER_DTUB_DETECT_METHODS D_PKG_STD.tREF; -- идентификатор версии для раздела DTUB_DETECT_METHODS
- nVER_RTUB_CASE_DISP D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASE_DISP
- nVER_RTUB_CASE_DISP_DATA D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASE_DISP_DATA
- nVER_AGENT_COMP_DISEASES D_PKG_STD.tREF; -- идентификатор версии для раздела AGENT_COMP_DISEASES
- nVER_COMP_DISEASES D_PKG_STD.tREF; -- идентификатор версии для раздела COMP_DISEASES
- nVER_REGISTER_PURPOSES D_PKG_STD.tREF; -- идентификатор версии для раздела REGISTER_PURPOSES
- nVER_LPUDICT D_PKG_STD.tREF; -- идентификатор версии для раздела LPUDICT
- nVER_SITES D_PKG_STD.tREF; -- идентификатор версии для раздела SITES
- nVER_AGENT_GR_RENTGENOGR D_PKG_STD.tREF; -- идентификатор версии для раздела AGENT_GR_RENTGENOGR
- nVER_GR_RENTGENOGRAPH D_PKG_STD.tREF; -- идентификатор версии для раздела GR_RENTGENOGRAPH
- nVER_AGENT_DETR_EFFECTS D_PKG_STD.tREF; -- идентификатор версии для раздела AGENT_DETR_EFFECTS
- nVER_DETRIMENTAL_EFFECTS D_PKG_STD.tREF; -- идентификатор версии для раздела DETRIMENTAL_EFFECTS
- nVER_RTUB_CASE_CHEMO D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASE_CHEMO
- nVER_DTUB_CHEMO_MODES D_PKG_STD.tREF; -- идентификатор версии для раздела DTUB_CHEMO_MODES
- nVER_DTUB_CHEMO_OUT D_PKG_STD.tREF; -- идентификатор версии для раздела DTUB_CHEMO_OUT
- nVER_RTUB_CASE_DETECTION D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASE_DETECTION
- nVER_NR_CLS_PATH_DISCOVER D_PKG_STD.tREF; -- идентификатор версии для раздела NR_CLS_PATH_DISCOVER
- nVER_NR_LPUDICT D_PKG_STD.tREF; -- идентификатор версии для раздела NR_LPUDICT
- nCAT_ROOT D_PKG_STD.tREF; -- идентификатор корневого каталога для разделов
- nCAT_AGENTS D_PKG_STD.tREF; -- идентификатор каталога для раздела AGENTS
- nCAT_PERSMEDCARD D_PKG_STD.tREF; -- идентификатор каталога для раздела PERSMEDCARD
- nAGENTS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENTS
- nAGENT_ADDRS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_ADDRS
- nNR_PATIENT_DATA_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_NR_PATIENT_DATA
- nAGENT_SOCIAL_STATES_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_SOCIAL_STATES
- nNR_PATIENT_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_NR_PATIENT
- nRTUB_CASES_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASES
- nRTUB_CASE_DGNS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASE_DGNS
- nRTUB_CASE_DISP_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASE_DISP
- nRTUB_CASE_DISP_DATA_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASE_DISP_DATA
- nAGENT_COMP_DISEASES_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_COMP_DISEASES
- nAGENT_REGISTRATION_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_REGISTRATION
- nAGENT_GR_RENTGENOGR_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_GR_RENTGENOGR
- nAGENT_DETR_EFFECTS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_DETR_EFFECTS
- nPERSMEDCARD_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_PERSMEDCARD
- nRTUB_CASE_CHEMO_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASE_CHEMO
- nRTUB_CASE_DETECTION_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASE_DETECTION
- nERROR D_PKG_STD.tREF := 0;-- кол-во ошибок импорта
- sERROR_CODE D_PKG_STD.tSTR; -- код ошибки
- sAGN_CODE D_AGENTS.AGN_CODE%TYPE;
- -- код контрагента в таблице D_AGENTS
- nLPUDICT_ID D_PKG_STD.tREF; -- идентификатор записи D_LPUDICT
- nCITY D_PKG_STD.tREF; -- идентификатор населенного пункта
- nSTREET D_PKG_STD.tREF; -- идентификатор улицы
- sHOUSE D_PKG_STD.tSTR; -- номер дома в адресе
- sHOUSELIT D_PKG_STD.tSTR; -- литера дома в адресе
- sFLAT D_PKG_STD.tSTR; -- номер квартиры в адресе
- nRAION D_PKG_STD.tREF; -- идентификатор района из адреса
- nRAION_CODE D_PKG_STD.tSTR; -- код района
- sNASP_TMP D_PKG_STD.tSTR; -- временная переменная для хранения названия нас пункта из файла
- nNOS_REGISTR_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_NOS_REGISTR
- nNR_CONTINGENT D_PKG_STD.tREF; -- идентификатор записи в таблице D_NR_CLS_CONTINGENTS
- nDEATH_CAUSE D_PKG_STD.tREF; -- идентификатор записи в таблице D_MKB10
- nDEATH_PLACE D_PKG_STD.tREF; -- идентификатор записи в таблице DIRECTORIES_DATA_VER
- nSOCIAL_STATES_ID D_PKG_STD.tREF; -- идентификатор записи социального положения D_SOCIALSTATES
- nSOCIAL_CATEGORIES D_PKG_STD.tREF; -- идентификатор записи социальной категории D_SOCIALCATEGORIES
- nPAT_GROUP D_PKG_STD.tREF; -- идентификатор записи D_DTUB_PAT_GROUP
- nFROM_GROUP D_PKG_STD.tREF; -- идентификатор записи D_PATIENTS_DGROUP
- nMKB D_PKG_STD.tREF; -- идентификатор записи D_MKB10
- nCLINIC_FORM D_PKG_STD.tREF; -- идентификатор записи D_DTUB_CLINIC_FORMS
- nDETECT_METHOD D_PKG_STD.tREF; -- идентификатор записи D_DTUB_DETECT_METHODS
- nDGROUP D_PKG_STD.tREF; -- идентификатор записи D_PATIENTS_DGROUP
- nCOMP_DISEASE D_PKG_STD.tREF; -- идентификатор записи D_COMP_DISEASES
- nREGISTER_PURPOSE D_PKG_STD.tREF; -- идентификатор записи D_REGISTER_PURPOSES
- nLPU_REG D_PKG_STD.tREF; -- идентификатор записи D_LPUDICT
- nLPU_SITE D_PKG_STD.tREF; -- идентификатор записи D_SITES
- nGR_RENTGENOGRAPH D_PKG_STD.tREF; -- идентификатор записи D_GR_RENTGENOGRAPH
- nDETR_EFFECT D_PKG_STD.tREF; -- идентификатор записи D_DETRIMENTAL_EFFECTS
- nCHEMO_MODE D_PKG_STD.tREF; -- идентификатор записи D_DTUB_CHEMO_MODES
- nCHEMO_OUT D_PKG_STD.tREF; -- идентификатор записи D_DTUB_CHEMO_OUT
- nDISCOVER_PATH D_PKG_STD.tREF; -- идентификатор записи D_NR_CLS_PATH_DISCOVER
- dAGENT_BIRTHDATE D_AGENTS.BIRTHDATE%TYPE;
- -- дата рождения пациента
- BEGIN
- D_PKG_IMP_LOG.INIT('IMP70_UMEKONVE', pnLPU, pnLOG_IDENT, 0);
- lg(pnLOG_IDENT,'START_IMP','Начало импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
- --блок получения версий для разделов
- nVER_AGENT_ADDRS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_ADDRS');
- nVER_GEOGRAFY := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'GEOGRAFY');
- nVER_NOS_REGISTR_TYPES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTR_TYPES');
- nVER_NOS_REGISTRS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTRS');
- nVER_NR_CLS_CONTINGENTS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_CLS_CONTINGENTS');
- nVER_NR_PATIENT_DATA := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_PATIENT_DATA');
- nVER_MKB10 := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'MKB10');
- nVER_DIRECTORIES_DATA_VER := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DIRECTORIES_DATA_VER');
- nVER_SOCIALSTATES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'SOCIALSTATES');
- nVER_NR_PATIENTS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_PATIENTS');
- nVER_RTUB_CASES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASES');
- nVER_DTUB_PAT_GROUP := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_PAT_GROUP');
- nVER_PATIENTS_DGROUP := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'PATIENTS_DGROUP');
- nVER_RTUB_CASE_DGNS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DGNS');
- nVER_DTUB_CLINIC_FORMS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_CLINIC_FORMS');
- nVER_DTUB_DETECT_METHODS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_DETECT_METHODS');
- nVER_RTUB_CASE_DISP := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DISP');
- nVER_RTUB_CASE_DISP_DATA := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DISP_DATA');
- nVER_AGENT_COMP_DISEASES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_COMP_DISEASES');
- nVER_COMP_DISEASES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'COMP_DISEASES');
- nVER_REGISTER_PURPOSES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'REGISTER_PURPOSES');
- nVER_LPUDICT := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'LPUDICT');
- nVER_SITES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'SITES');
- nVER_AGENT_GR_RENTGENOGR := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_GR_RENTGENOGR');
- nVER_GR_RENTGENOGRAPH := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'GR_RENTGENOGRAPH');
- nVER_AGENT_DETR_EFFECTS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_DETR_EFFECTS');
- nVER_DETRIMENTAL_EFFECTS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DETRIMENTAL_EFFECTS');
- nVER_RTUB_CASE_CHEMO := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_CHEMO');
- nVER_DTUB_CHEMO_MODES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_CHEMO_MODES');
- nVER_DTUB_CHEMO_OUT := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_CHEMO_OUT');
- nVER_RTUB_CASE_DETECTION := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DETECTION');
- nVER_NR_CLS_PATH_DISCOVER := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_CLS_PATH_DISCOVER');
- nVER_NR_LPUDICT := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_LPUDICT');
- --блок получения каталогов для разделов
- D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'AGENTS', 'Пациенты Томск Фтиз', nCAT_AGENTS);
- IF nCAT_AGENTS IS NULL THEN
- D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'AGENTS',nCAT_ROOT);
- D_PKG_CATALOGS.ADD(nCAT_AGENTS,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
- END IF;
- D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'PERSMEDCARD', 'Пациенты Томск Фтиз', nCAT_PERSMEDCARD);
- IF nCAT_PERSMEDCARD IS NULL THEN
- D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'PERSMEDCARD',nCAT_ROOT);
- D_PKG_CATALOGS.ADD(nCAT_PERSMEDCARD,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
- END IF;
- --по заданному ЛПУ получим 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(pnLOG_IDENT,'NFD_LPUDICT','Не определно заданное ЛПУ: '||pnLPU);
- END;
- --Цикл по всем записям таблицы IMP70_UMEKONVE с импортируемыми данными
- IF nERROR = 0 OR pnERR_IGNORE = 1 THEN
- FOR cr IN (SELECT *
- FROM IMP70_UMEKONVE)
- LOOP
- nAGENTS_ID := NULL;
- nAGENT_ADDRS_ID := NULL;
- nNR_PATIENT_DATA_ID := NULL;
- nAGENT_SOCIAL_STATES_ID := NULL;
- nRTUB_CASES_ID := NULL;
- nRTUB_CASE_DGNS_ID := NULL;
- nRTUB_CASE_DISP_ID := NULL;
- nRTUB_CASE_DISP_DATA_ID := NULL;
- nAGENT_COMP_DISEASES_ID := NULL;
- nAGENT_REGISTRATION_ID := NULL;
- nAGENT_GR_RENTGENOGR_ID := NULL;
- nAGENT_DETR_EFFECTS_ID := NULL;
- nPERSMEDCARD_ID := NULL;
- nRTUB_CASE_CHEMO_ID := NULL;
- nRTUB_CASE_DETECTION_ID := NULL;
- nNR_PATIENT_ID := NULL;
- sAGN_CODE := NULL;
- nCITY := NULL;
- nSTREET := NULL;
- sHOUSE := NULL;
- sHOUSELIT := NULL;
- nRAION := NULL;
- nRAION_CODE := NULL;
- nNOS_REGISTR_ID := NULL;
- nNR_CONTINGENT := NULL;
- nDEATH_CAUSE := NULL;
- nDEATH_PLACE := NULL;
- nSOCIAL_STATES_ID := NULL;
- nSOCIAL_CATEGORIES := NULL;
- nPAT_GROUP := NULL;
- nFROM_GROUP := NULL;
- nMKB := NULL;
- nCLINIC_FORM := NULL;
- nDETECT_METHOD := NULL;
- nDGROUP := NULL;
- nCOMP_DISEASE := NULL;
- nREGISTER_PURPOSE := NULL;
- nLPU_REG := NULL;
- nLPU_SITE := NULL;
- nGR_RENTGENOGRAPH := NULL;
- nDETR_EFFECT := NULL;
- nCHEMO_MODE := NULL;
- nCHEMO_OUT := NULL;
- nDISCOVER_PATH := NULL;
- dAGENT_BIRTHDATE := NULL;
- --проверим нет ли в таблице D_AGENTS такого контрагента
- GET_AGENT_ID(psFIO => cr.FIO,
- pdBIRTHDATE => cr.DATRO,
- psSNILS => NULL,
- pnAGENTS_ID => nAGENTS_ID,
- psERROR_CODE => sERROR_CODE);
- IF nAGENTS_ID IS NOT NULL THEN
- dAGENT_BIRTHDATE := cr.DATRO;
- ELSE
- dAGENT_BIRTHDATE := NULL;
- IF sERROR_CODE = 'TMR_AGENTS' THEN
- lg(pnLOG_IDENT,'TMR_AGENTS','Найдено несколько пациентов: ФИО - '||cr.FIO||', Дата рожд.- '||TO_CHAR(cr.DATRO,'dd.mm.yyyy'));
- continue;
- END IF;
- END IF;
- --если контрагента не найден, то создадим его
- IF nAGENTS_ID IS NULL THEN
- ----------------------------------------
- --1. блок обработки данных в разделе AGENTS
- ----------------------------------------
- sAGN_CODE := D_PKG_AGENTS.GEN_CODE(pnLPU);
- dAGENT_BIRTHDATE := cr.DATRO;
- BEGIN
- D_PKG_AGENTS.ADD(pnD_INSERT_ID => nAGENTS_ID,
- pnLPU => pnLPU,
- pnCID => nCAT_AGENTS,
- psAGN_CODE => sAGN_CODE,
- psAGN_NAME => sAGN_CODE||' '||cr.FIO,
- pnAGN_TYPE => 1,
- pnAGN_INN => NULL,
- pnAGN_KPP => NULL,
- psNOTE => NULL,
- psFIRSTNAME => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'FIRSTNAME'),
- psSURNAME => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'SURNAME'),
- psLASTNAME => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'LASTNAME'),
- pdBIRTHDATE => cr.DATRO,
- pnSEX => IMP70_PKG_KONVE.CONVERT_POL_TO_NUMBER(cr.POL),
- pnEDUCATION => NULL,
- pnOKVED => NULL,
- pnIS_EMPLOYER => 0,
- psSNILS => NULL,
- psAGN_OGRN => NULL,
- psAGN_OKPO => NULL,
- pdDEATHDATE => cr.DATSME,
- pnIS_UNKNOWN => NULL,
- pnDEATHDOCTYPE => NULL,
- pdDEATHDOCDATE => cr.DATOTCH,
- psDEATHDOCNUM => cr.NOMSVID,
- pnAGN_OKFS => NULL,
- psENP => NULL,
- psBIRTHPLACE => NULL,
- pnDECLINE_FIO => NULL,
- pnNATION => NULL,
- pnIS_HOME => 0,
- pnGEST_AGE_MOTHER => NULL,
- pnIS_ANONYM => 0,
- psDEATHPLACE => NULL,
- pnFULL_CLASSES => NULL,
- pnACCURACY_DATE_DEATH => NULL,
- pnACCURACY_DATE_BIRTH => NULL,
- pnIND_ENTERP => NULL,
- psAGN_OGRN_IND => NULL,
- pnCONVICT_AMOUNT => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENTS','Ошибка добавления пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- --если контрагент создан успешно или найден в системе, то загрузим остальные данные при их отсутствии
- IF nAGENTS_ID IS NOT NULL THEN
- ----------------------------------------
- --2.1 блок обработки данных в разделе AGENT_ADDRS
- ----------------------------------------
- BEGIN
- SELECT aa.ID
- INTO nAGENT_ADDRS_ID
- FROM D_AGENT_ADDRS aa
- WHERE aa.PID = nAGENTS_ID
- AND aa.VERSION = nVER_AGENT_ADDRS
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получим населенный пункт
- IMP70_PKG_KONVE.GET_GEOTYPE_CODE_NASP(pnLPU,cr.NASP,nCITY,sERROR_CODE);
- IF nCITY IS NULL THEN
- IF sERROR_CODE = 'TMR_GEOGRAFY' THEN
- lg(pnLOG_IDENT,'TMR_GEOGRAFY','Найдено несколько населенных пунктов: '||cr.NASP||'(пациент - '||cr.FIO||')');
- ELSIF sERROR_CODE = 'NDF_GEOGRAFY' THEN
- lg(pnLOG_IDENT,'','Не определен населенный пункт: '||cr.NASP||'(пациент - '||cr.FIO||')');
- END IF;
- END IF;
- --Получение района
- IF cr.RAI IS NOT NULL THEN
- nRAION_CODE := GET_RAIONCODE_BY_KODRAI(cr.RAI);
- BEGIN
- SELECT r.ID
- INTO nRAION
- FROM D_RAIONS r
- WHERE LOWER(r.R_CODE) = LOWER(nRAION_CODE)
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- nRAION := NULL;
- lg(pnLOG_IDENT,'NDF_RAIONS','Не определён район: '||cr.RAI||'(пациент - '||cr.FIO||')');
- END;
- END IF;
- --получим улицу (текст до первого символа '-' без последних цифр)
- IF UPPER(cr.ADR) = 'БОМЖ' THEN
- nSTREET := NULL;
- ELSE
- BEGIN
- SELECT g.ID
- INTO nSTREET
- FROM D_GEOGRAFY g
- join D_GEOGRAFYTYPES gt
- ON gt.ID = g.GEOLOCTYPE
- AND gt.AO_TYPE IN (nAO_TYPE_NASP,nAO_TYPE_STREET)
- WHERE g.version = nVER_GEOGRAFY
- AND UPPER(g.GEONAME) = UPPER(IMP70_PKG_KONVE.GET_STREET_FROM_ADRESS(cr.ADR))
- AND g.PID = nCITY
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- nSTREET := NULL;
- lg(pnLOG_IDENT,'NDF_GEOGRAFY','Не определена улица в адресе '||cr.ADR||' для нас пункта '||cr.NASP||' (пациент - '||cr.FIO||')');
- END;
- END IF;
- --получим номер дома из адреса (символы между первым символом '-' и предыдущим пробелом)
- sHOUSE := IMP70_PKG_KONVE.GET_HOUSE_FROM_ADRESS(cr.ADR);
- --получим литеру дома, если она есть
- sHOUSELIT := IMP70_PKG_KONVE.GET_LETTER_FROM_HOUSE(sHOUSE);
- IF sHOUSELIT IS NOT NULL THEN
- sHOUSE := REPLACE(sHOUSE,sHOUSELIT,'');
- END IF;
- --получим квартиру (цифры после первого символа '-')
- sFLAT := IMP70_PKG_KONVE.GET_FLAT_FROM_ADRESS(cr.ADR);
- --непосредственно добавление записи в D_AGENT_ADDRS
- BEGIN
- D_PKG_AGENT_ADDRS.ADD(pnD_INSERT_ID => nAGENT_ADDRS_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnSTREET => nSTREET,
- psHOUSE => sHOUSE,
- psHOUSELIT => sHOUSELIT,
- pnBLOCK => NULL,
- pnFLAT => sFLAT,
- psFLATLIT => NULL,
- psADDR_INDEX => NULL,
- pnIS_MAIN => (CASE WHEN LOWER(cr.PROJIV)='пост.жит.' THEN 1 ELSE 0 END),
- pnIS_REAL => (CASE WHEN LOWER(cr.PROJIV) IN ('пост.жит.','жит.др.тер','ин.гражд.') THEN 1 WHEN UPPER(cr.PROJIV)='БОМЖ' THEN 0 ELSE 0 END),
- pnIS_REG => 1,
- pnIS_TEMPREG => (CASE WHEN LOWER(cr.PROJIV) IN ('жит.др.тер','ин.гражд.') THEN 1 WHEN UPPER(cr.PROJIV)='БОМЖ' THEN 0 ELSE 0 END),
- pnIS_JUR => 0,
- pnIS_POST => 0,
- pnIS_BIRTH => 0,
- pnRAION => nRAION,
- pdBEGIN_DATE => cr.DATUCH,
- pdEND_DATE => NULL,
- psMANUAL_INPUT => NULL,
- pnIS_CITIZEN => (CASE WHEN cr.GIT = 'гор' THEN 1 WHEN cr.GIT = 'сел' THEN 0 ELSE NULL END),
- psFLAT => sFLAT,
- psADDROBJ => NULL,
- psFIAS_HOUSE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENTS_ADDRS','Ошибка добавления адреса пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.2 блок обработки данных в разделе NR_PATIENT_DATA
- ----------------------------------------
- --получим родительскую запись для D_NR_PATIENT_DATA
- WITH N_REGISTR_TYPES AS (SELECT rt.ID
- FROM D_NOS_REGISTR_TYPES rt
- WHERE rt.T_CODE = nNOS_REG_TYPES_TUB -- ТуберкулезБП
- AND rt.VERSION = nVER_NOS_REGISTR_TYPES
- AND ROWNUM = 1),
- NR_CLS_CONT_CODES AS (SELECT (CASE WHEN LOWER(cr.COCKAT) = 'пост.жит.' THEN 1
- WHEN LOWER(cr.COCKAT) = 'жит.др.тер.' THEN 2
- WHEN LOWER(cr.COCKAT) = 'мигрант' THEN 3
- WHEN LOWER(cr.MIGR) = 'да' THEN 3
- WHEN LOWER(cr.COCKAT) = 'ин.гражд.' THEN 8
- WHEN LOWER(cr.COCKAT) = 'бомж' THEN 6
- WHEN LOWER(cr.BOMJ) = 'да' THEN 6
- WHEN UPPER(cr.COCKAT) = 'ИЗ МЗ' THEN 4
- WHEN LOWER(cr.IZUIN) = 'да' THEN 4
- WHEN UPPER(cr.COCKAT) = 'ИЗ СИЗО' THEN 5
- WHEN UPPER(cr.COCKAT) = 'ПЕРЕВЕДЕН' THEN 12
- WHEN UPPER(cr.COCKAT) = 'ИЗ ОПБ' THEN 13
- WHEN UPPER(cr.COCKAT) = 'ИЗ МЗ(АКТ)' THEN 14
- WHEN LOWER(cr.PROJIV) = 'пост.жит.' THEN 1
- WHEN LOWER(cr.PROJIV) = 'жит.др.тер.' THEN 2
- WHEN LOWER(cr.PROJIV) = 'иммигрант' THEN 3
- WHEN LOWER(cr.PROJIV) = 'ин.гражд.' THEN 8
- WHEN LOWER(cr.PROJIV) = 'из соцзащ.' THEN 9
- WHEN LOWER(cr.PENS) = 'да' THEN 10
- ELSE NULL
- END) c_code
- FROM dual),
- DIR_DATA_VER_CODES AS (SELECT (CASE WHEN UPPER(cr.MESSME) IN ('ТО','МТО1','МТО2','ОАИР','Д/Д','ХО','ДНСТ','СТДО','ТПБ') THEN 'в стационаре'
- WHEN UPPER(cr.MESSME) IN ('СЕТД','ОЛС','УИН','СИЗО') THEN 'в другом месте'
- WHEN UPPER(cr.MESSME) IN ('ДОМА') THEN 'дома'
- WHEN UPPER(cr.MESSME) IN ('ДР-Е') THEN 'неизвестно'
- ELSE NULL
- END) dd_name
- FROM dual)
- SELECT (SELECT r.ID
- FROM D_NOS_REGISTRS r
- WHERE r.VERSION = nVER_NOS_REGISTRS
- AND r.REG_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND EXISTS(SELECT 1
- FROM D_NR_LPUDICT nld
- WHERE nld.VERSION = nVER_NR_LPUDICT
- AND nld.PID = r.ID
- AND nld.lpudict = nLPUDICT_ID)
- AND ROWNUM = 1),
- (SELECT ncc.ID
- FROM D_NR_CLS_CONTINGENTS ncc
- WHERE ncc.VERSION = nVER_NR_CLS_CONTINGENTS
- AND TRUNC(SYSDATE) BETWEEN ncc.DATE_BEGIN AND COALESCE(ncc.DATE_END,TRUNC(SYSDATE))
- AND ncc.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND ncc.C_CODE = (SELECT C_CODE FROM NR_CLS_CONT_CODES)
- AND ROWNUM = 1),
- (SELECT mkb.ID
- FROM D_MKB10 mkb
- WHERE mkb.VERSION = nVER_MKB10
- AND UPPER(mkb.mkb_code) = UPPER(cr.KODIAGPA)
- AND ROWNUM = 1),
- (SELECT ddv.ID
- FROM D_DIRECTORIES_DATA_VER ddv
- WHERE ddv.VERSION = nVER_DIRECTORIES_DATA_VER
- AND LOWER(ddv.DD_CODE) = (SELECT LOWER(DD_CODE) FROM DIR_DATA_VER_CODES)
- AND ROWNUM = 1)
- INTO nNOS_REGISTR_ID,
- nNR_CONTINGENT,
- nDEATH_CAUSE,
- nDEATH_PLACE
- FROM dual;
- IF nNOS_REGISTR_ID IS NULL THEN
- lg(pnLOG_IDENT,'NDF_NOS_REGISTRS','Не определен нозологический реестр для данного ЛПУ');
- ELSE
- BEGIN
- SELECT npd.ID
- INTO nNR_PATIENT_DATA_ID
- FROM D_NR_PATIENT_DATA npd
- WHERE npd.AGENT = nAGENTS_ID
- AND npd.VERSION = nVER_NR_PATIENT_DATA
- AND npd.PID = nNOS_REGISTR_ID
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_NR_PATIENT_DATA.ADD(pnD_INSERT_ID => nNR_PATIENT_DATA_ID,
- pnLPU => pnLPU,
- pnPID => nNOS_REGISTR_ID,
- pnAGENT => nAGENTS_ID,
- pnNR_CONTINGENT => nNR_CONTINGENT,
- pnIS_CITIZEN => (CASE WHEN LOWER(cr.GIT) = 'гор' THEN 1 ELSE 0 END),
- pnPROFESSION => NULL,
- pnON_NARC_DISP => NULL,
- pnDEATH_PLACE => nDEATH_PLACE,
- pnDEATH_CAUSE => nDEATH_CAUSE,
- pnIS_AFTEREFFECT => (CASE WHEN UPPER(cr.PRISME) = 'ТВС' THEN 1 ELSE 0 END),
- pnHIV => (CASE WHEN cr.HIV IS NOT NULL THEN 1 ELSE 0 END),
- pnAUTOPSY => (CASE WHEN UPPER(cr.VSKR) = 'ТВС' THEN 1 ELSE 0 END),
- pnDEATH_ORG => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_NR_PATIENT_DATA','Ошибка добавления данных о пациенте в ноз. риеестре: '||cr.FIO, SQLERRM);
- END;
- END;
- END IF;
- ----------------------------------------
- --2.3 блок обработки данных в разделе AGENT_SOCIAL_STATES
- ----------------------------------------
- nAGENT_SOCIAL_STATES_ID := D_PKG_AGENT_SOCIAL_STATES.GET_ACTUAL_ON_DATE(pnAGENT => nAGENTS_ID,
- pdDATE => COALESCE(cr.DATUCH,SYSDATE),
- psFIELD => 'ID');
- IF nAGENT_SOCIAL_STATES_ID IS NULL THEN
- --определим социальное положение по данным из файла
- IF cr.SOCKAT IS NOT NULL THEN
- SELECT (SELECT ss.ID
- FROM D_SOCIALSTATES ss
- WHERE ss.VERSION = nVER_SOCIALSTATES
- AND TRUNC(SYSDATE) BETWEEN ss.BEGIN_DATE AND COALESCE(ss.END_DATE,TRUNC(SYSDATE))
- AND ss.SOC_CODE = (SELECT vss.MIS_CODE
- FROM IMP70_V_KONVE_SOCSTATES_SOCKAT vss
- WHERE vss.FILE_CODE = cr.SOCKAT)
- AND ROWNUM = 1)
- INTO nSOCIAL_STATES_ID
- FROM dual;
- IF nSOCIAL_STATES_ID IS NULL THEN
- lg(pnLOG_IDENT,'NDF_SOCIALSTATES','Не определено социальное положение: '||cr.SOCKAT||' (пациент - '||cr.FIO||')');
- END IF;
- END IF;
- IF LOWER(cr.NERAB) = 'да' THEN
- SELECT (SELECT sc.SC_CODE
- FROM D_SOCIALCATEGORIES sc
- WHERE sc.SC_CODE = 1
- AND ROWNUM = 1)
- INTO nSOCIAL_CATEGORIES
- FROM dual;
- END IF;
- BEGIN
- D_PKG_AGENT_SOCIAL_STATES.ADD(pnD_INSERT_ID => nAGENT_SOCIAL_STATES_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnSOCIAL_STATE => nSOCIAL_STATES_ID,
- pnSOCIAL_CATEGORY => nSOCIAL_CATEGORIES,
- pdBEGIN_DATE => cr.DATUCH,
- pdEND_DATE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_SOCIAL_STATES','Ошибка добавления социального пложения пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- ----------------------------------------
- --2.18 блок обработки данных в разделе NR_PATIENTS
- ----------------------------------------
- BEGIN
- SELECT p.ID
- INTO nNR_PATIENT_ID
- FROM D_NR_PATIENTS p
- WHERE p.AGENT = nAGENTS_ID
- AND p.VERSION = nVER_NR_PATIENTS
- AND p.NOS_REGISTR = nNOS_REGISTR_ID
- AND p.REGISTR_LPU = nLPUDICT_ID
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_NR_PATIENTS.ADD(pnD_INSERT_ID => nNR_PATIENT_ID,
- pnLPU => pnLPU,
- pnAGENT => nAGENTS_ID,
- pnNOS_REGISTR => nNOS_REGISTR_ID,
- pnREGISTR_LPU => nLPUDICT_ID,
- psREGISTR_LPU_TEXT => NULL,
- pdREGISTR_DATE => cr.DATUCH,
- pnMKB => NULL,
- pnNUMB_REG => NULL,
- pdUPDATE_DATE => TRUNC(SYSDATE),
- pnFR => 0,
- psNUMB_REG_GD => NULL,
- pdREMOVE_DATE => NULL,
- pnREMOVE_REASON => NULL,
- pnREMOVE_LPU => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_NR_PATIENTS','Ошибка добавления в ноз. реестр пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.4 блок обработки данных в разделе RTUB_CASES
- ----------------------------------------
- BEGIN
- SELECT rc.ID
- INTO nRTUB_CASES_ID
- FROM D_RTUB_CASES rc
- WHERE rc.AGENT = nAGENTS_ID
- AND rc.VERSION = nVER_RTUB_CASES
- AND (rc.NR_PATIENT = nNR_PATIENT_ID
- OR
- rc.NR_PATIENT IS NULL)
- AND COALESCE(cr.DATUCH,TRUNC(SYSDATE)) BETWEEN rc.CREATE_DATE AND COALESCE(rc.CLOSE_DATE,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получение данных для вставки в таблицу D_RTUB_CASES
- WITH N_REGISTR_TYPES AS (SELECT rt.ID
- FROM D_NOS_REGISTR_TYPES rt
- WHERE rt.T_CODE = nNOS_REG_TYPES_TUB -- ТуберкулезБП
- AND rt.VERSION = nVER_NOS_REGISTR_TYPES
- AND ROWNUM = 1),
- PAT_DGROUP_AGE AS (SELECT (CASE WHEN D_PKG_DAT_TOOLS.FULL_YEARS(cr.DATUCH,dAGENT_BIRTHDATE) >= 18 THEN 1
- ELSE 2
- END) age
- FROM dual)
- SELECT (SELECT dpg.ID
- FROM D_DTUB_PAT_GROUP dpg
- WHERE dpg.VERSION = nVER_DTUB_PAT_GROUP
- AND dpg.PG_CODE = (SELECT vdpg.MIS_CODE
- FROM IMP70_V_KONVE_DTUB_PAT_GROUP vdpg
- WHERE UPPER(vdpg.FILE_CODE) = UPPER(cr.TIPPAC)
- AND ROWNUM = 1)
- AND ROWNUM = 1),
- (SELECT pdg.ID
- FROM D_PATIENTS_DGROUP pdg
- WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
- AND pdg.HG_CODE = (SELECT vpg.MIS_CODE
- FROM IMP70_V_KONVE_PAT_DGROUP vpg
- WHERE UPPER(vpg.FILE_CODE) = UPPER(cr.GRU)
- AND ROWNUM = 1)
- AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND pdg.AGE = (SELECT AGE FROM PAT_DGROUP_AGE)
- AND ROWNUM = 1)
- INTO nPAT_GROUP,
- nFROM_GROUP
- FROM dual;
- BEGIN
- D_PKG_RTUB_CASES.ADD(pnD_INSERT_ID => nRTUB_CASES_ID,
- pnLPU => pnLPU,
- pnAGENT => nAGENTS_ID,
- pnNR_PATIENT => nNR_PATIENT_ID,
- pnPAT_GROUP => nPAT_GROUP,
- pnFROM_DGROUP => nFROM_GROUP,
- pnLPU_CREATE => nLPUDICT_ID,
- pdCREATE_DATE => cr.DATUCH,
- pdLAST_CHANGE_DATE => cr.DATKOR,
- pnLAST_CHANGE_EMP => NULL,
- pdCLOSE_DATE => NULL,
- pnCLOSE_EMP => NULL,
- psCLOSE_REASON => NULL,
- pnLPU_IN_CHARGE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASES','Ошибка добавления случая туберкулеза для пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.5 блок обработки данных в разделе RTUB_CASE_DGNS
- ----------------------------------------
- IF nRTUB_CASES_ID IS NOT NULL THEN
- BEGIN
- SELECT rcd.ID
- INTO nRTUB_CASE_DGNS_ID
- FROM D_RTUB_CASE_DGNS rcd
- WHERE rcd.PID = nRTUB_CASES_ID
- AND rcd.VERSION = nVER_RTUB_CASE_DGNS
- AND COALESCE(cr.DATUCH,TRUNC(SYSDATE)) BETWEEN rcd.DATE_BEGIN AND COALESCE(rcd.DATE_END,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получим данные для вставки в таблицу D_RTUB_CASE_DGNS
- SELECT (SELECT m.ID
- FROM D_MKB10 m
- WHERE m.MKB_CODE = 'A15.0'
- AND m.VERSION = nVER_MKB10
- AND ROWNUM = 1),
- (SELECT dcf.ID
- FROM D_DTUB_CLINIC_FORMS dcf
- WHERE dcf.VERSION = nVER_DTUB_CLINIC_FORMS
- AND dcf.CLF_CODE = (SELECT vcf.MIS_CODE
- FROM IMP70_V_KONVE_CLINIC_FORMS vcf
- WHERE UPPER(vcf.FILE_CODE) = UPPER(cr.KODIAG)
- AND ROWNUM = 1)
- AND ROWNUM = 1),
- (SELECT ddm.ID
- FROM D_DTUB_DETECT_METHODS ddm
- WHERE ddm.VERSION = nVER_DTUB_DETECT_METHODS
- AND UPPER(ddm.DM_CODE) = (SELECT UPPER(vdm.MIS_CODE)
- FROM IMP70_V_KONVE_DETECT_METHODS vdm
- WHERE UPPER(REPLACE(vdm.FILE_CODE,' ','')) = UPPER(REPLACE(cr.PROF,' ',''))
- AND ROWNUM = 1)
- AND ROWNUM = 1)
- INTO nMKB,
- nCLINIC_FORM,
- nDETECT_METHOD
- FROM dual;
- IF cr.DATUCH IS NULL THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_DGNS','Для пациента: '||cr.FIO||' не заполнено поле DATUCH. Создание диагноза невозможно.');
- ELSE
- BEGIN
- D_PKG_RTUB_CASE_DGNS.ADD(pnD_INSERT_ID => nRTUB_CASE_DGNS_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASES_ID,
- pdDATE_BEGIN => cr.DATUCH,
- pdDATE_END => NULL,
- pnEMPLOYER => NULL,
- psEMP_FIO => NULL,
- pnMKB_LPU => nLPUDICT_ID,
- psMKB_LPU_TEXT => NULL,
- pnMKB => nMKB,
- pnMKB_TYPE => NULL,
- psMKB_TEXT => NULL,
- pdCONFIRM_DATE => cr.DATUCH,
- pnFORM => NULL,
- pnCLINIC_FORM => nCLINIC_FORM,
- pnDESTRUCT => NULL,
- pnCOMB_INJURY => NULL,
- pnOPERATION => NULL,
- pnCOMPLICATION => NULL,
- pnDETECT_METHOD => nDETECT_METHOD,
- psDETECT_METHOD_OTHER => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_DGNS','Ошибка добавления диагноза для пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- END;
- END IF;
- ----------------------------------------
- --2.6 блок обработки данных в разделе RTUB_CASE_DISP
- ----------------------------------------
- IF nRTUB_CASES_ID IS NOT NULL THEN
- BEGIN
- SELECT rcd.ID
- INTO nRTUB_CASE_DISP_ID
- FROM D_RTUB_CASE_DISP rcd
- WHERE rcd.PID = nRTUB_CASES_ID
- AND rcd.VERSION = nVER_RTUB_CASE_DISP
- AND rcd.DISP_LPU = nLPUDICT_ID
- AND COALESCE(cr.DATUCH,TRUNC(SYSDATE)) BETWEEN rcd.DATE_IN AND COALESCE(rcd.DATE_OUT,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_RTUB_CASE_DISP.ADD(pnD_INSERT_ID => nRTUB_CASE_DISP_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASES_ID,
- pnDISP_LPU => nLPUDICT_ID,
- pnDISP_EMP => NULL,
- pdDATE_IN => cr.DATUCH,
- pdDATE_OUT => NULL,
- pnOUT_REASON => NULL,
- pnCONTROL_CARD => NULL,
- pdRECOMEND_DATE_OUT => NULL,
- pnRECOMEND_OUT_REAS => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_DISP','Ошибка добавления данных учета в ЛПУ случая туберкулеза для пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- END IF;
- ----------------------------------------
- --2.7 блок обработки данных в разделе RTUB_CASE_DISP_DATA
- ----------------------------------------
- IF nRTUB_CASE_DISP_ID IS NOT NULL THEN
- IF cr.GRU IS NOT NULL THEN
- BEGIN
- SELECT rcdd.ID
- INTO nRTUB_CASE_DISP_DATA_ID
- FROM D_RTUB_CASE_DISP_DATA rcdd
- WHERE rcdd.PID = nRTUB_CASE_DISP_ID
- AND rcdd.VERSION = nVER_RTUB_CASE_DISP_DATA
- AND COALESCE(cr.DATUCH,TRUNC(SYSDATE)) BETWEEN rcdd.DATE_IN AND COALESCE(rcdd.DATE_OUT,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получение данных для вставки в таблицу D_RTUB_CASE_DISP_DATA
- WITH N_REGISTR_TYPES AS (SELECT rt.ID
- FROM D_NOS_REGISTR_TYPES rt
- WHERE rt.T_CODE = nNOS_REG_TYPES_TUB -- ТуберкулезБП
- AND rt.VERSION = nVER_NOS_REGISTR_TYPES
- AND ROWNUM = 1),
- PAT_DGROUP_AGE AS (SELECT (CASE WHEN D_PKG_DAT_TOOLS.FULL_YEARS(cr.DATUCH,dAGENT_BIRTHDATE) >= 18 THEN 1
- ELSE 2
- END) age
- FROM dual)
- SELECT (SELECT pdg.ID
- FROM D_PATIENTS_DGROUP pdg
- WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
- AND UPPER(pdg.HG_CODE) = (SELECT UPPER(vpdg.MIS_CODE)
- FROM IMP70_V_KONVE_PAT_DGROUP vpdg
- WHERE vpdg.FILE_CODE = UPPER(cr.GRU)
- AND ROWNUM = 1)
- AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND pdg.AGE = (SELECT AGE FROM PAT_DGROUP_AGE)
- AND ROWNUM = 1)
- INTO nDGROUP
- FROM dual;
- IF nDGROUP IS NULL THEN
- lg(pnLOG_IDENT,'NDF_RTUB_CASE_DISP_DATA','Не определена Группа Д-учета GRU='||cr.GRU||' для пациента: '||cr.FIO);
- ELSE
- BEGIN
- D_PKG_RTUB_CASE_DISP_DATA.ADD(pnD_INSERT_ID => nRTUB_CASE_DISP_DATA_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASE_DISP_ID,
- pnDGROUP => nDGROUP,
- pdDATE_IN => cr.DATUCH,
- pdRECOM_DATE_OUT => NULL,
- pnRECOM_TO_DGROUP => NULL,
- pdDATE_OUT => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_DISP_DATA','Ошибка добавления Группы Д-учета для пациента : '||cr.FIO, SQLERRM);
- END;
- END IF;
- END;
- END IF;
- END IF;
- ----------------------------------------
- --2.8 блок обработки данных в разделе AGENT_COMP_DISEASES
- ----------------------------------------
- BEGIN
- SELECT acd.ID
- INTO nAGENT_COMP_DISEASES_ID
- FROM D_AGENT_COMP_DISEASES acd
- WHERE acd.PID = nAGENTS_ID
- AND acd.VERSION = nVER_AGENT_COMP_DISEASES
- AND COALESCE(cr.DATUCH,TRUNC(SYSDATE)) BETWEEN acd.DATE_BEGIN AND COALESCE(acd.DATE_END,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --создадим несколько сопуствующих заболеваний при необходимости
- FOR z IN (SELECT 'SAHD' col_name, cr.SAHD col_value FROM dual
- UNION ALL SELECT 'PSIH' col_name, cr.PSIH col_value FROM dual
- UNION ALL SELECT 'YAZV' col_name, cr.YAZV col_value FROM dual
- UNION ALL SELECT 'GEPAT' col_name, cr.GEPAT col_value FROM dual
- UNION ALL SELECT 'POCHPA' col_name, cr.POCHPA col_value FROM dual
- UNION ALL SELECT 'IBS' col_name, cr.IBS col_value FROM dual
- UNION ALL SELECT 'GIPERT' col_name, cr.GIPERT col_value FROM dual
- UNION ALL SELECT 'HNZL' col_name, cr.HNZL col_value FROM dual
- UNION ALL SELECT 'KORTS' col_name, cr.KORTS col_value FROM dual
- UNION ALL SELECT 'ONKOL' col_name, cr.ONKOL col_value FROM dual
- UNION ALL SELECT 'OPERTB' col_name, cr.OPERTB col_value FROM dual
- )
- LOOP
- nCOMP_DISEASE := NULL;
- --получение данные для вставки
- WITH COMP_DISEASES_CODES AS (SELECT (CASE WHEN z.COL_NAME = 'SAHD' AND z.COL_VALUE IS NOT NULL THEN '137'
- WHEN z.COL_NAME = 'PSIH' AND z.COL_VALUE IS NOT NULL THEN '11'
- WHEN z.COL_NAME = 'YAZV' AND z.COL_VALUE IS NOT NULL THEN 'ЯБ ДПК'
- WHEN z.COL_NAME = 'GEPAT' AND UPPER(z.COL_VALUE) = 'C' THEN 'HCV'
- WHEN z.COL_NAME = 'GEPAT' AND UPPER(z.COL_VALUE) = 'B' THEN 'HBsAg'
- WHEN z.COL_NAME = 'GEPAT' AND UPPER(z.COL_VALUE) = 'ДА' THEN 'Гепатит'
- WHEN z.COL_NAME = 'POCHPA' AND z.COL_VALUE IS NOT NULL THEN '12'
- WHEN z.COL_NAME = 'IBS' AND z.COL_VALUE IS NOT NULL THEN 'ИБС'
- WHEN z.COL_NAME = 'GIPERT' AND z.COL_VALUE IS NOT NULL THEN 'Гипертония'
- WHEN z.COL_NAME = 'HNZL' AND z.COL_VALUE IS NOT NULL THEN 'ХНЗЛ'
- WHEN z.COL_NAME = 'KORTS' AND z.COL_VALUE IS NOT NULL THEN '13'
- WHEN z.COL_NAME = 'ONKOL' AND z.COL_VALUE IS NOT NULL THEN '15'
- WHEN z.COL_NAME = 'OPERTB' AND z.COL_VALUE IS NOT NULL THEN '16'
- ELSE NULL
- END) cd_code
- FROM dual)
- SELECT (SELECT cd.ID
- FROM D_COMP_DISEASES cd
- WHERE cd.VERSION = nVER_COMP_DISEASES
- AND LOWER(cd.CD_CODE) = (SELECT LOWER(CD_CODE) FROM COMP_DISEASES_CODES)
- AND ROWNUM = 1)
- INTO nCOMP_DISEASE
- FROM dual;
- IF nCOMP_DISEASE IS NOT NULL THEN
- BEGIN
- D_PKG_AGENT_COMP_DISEASES.ADD(pnD_INSERT_ID => nAGENT_COMP_DISEASES_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnCOMP_DISEASE => nCOMP_DISEASE,
- pdDATE_BEGIN => cr.DATUCH,
- pdDATE_END => NULL,
- psNOTE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_COMP_DISEASES','Ошибка добавления сопутствующего заболевания пациента: '||cr.FIO||' (поле '||z.COL_NAME||' файла)', SQLERRM);
- END;
- END IF;
- END LOOP;
- END;
- ----------------------------------------
- --2.9 блок обработки данных в разделе AGENT_REGISTRATION
- ----------------------------------------
- IF cr.POLIK <> 0 THEN -- создаем запись только если POLIK не равно 0.
- --получение данных для вставки в таблицу
- SELECT (SELECT rp.ID
- FROM D_REGISTER_PURPOSES rp
- WHERE rp.VERSION = nVER_REGISTER_PURPOSES
- AND rp.RP_CODE = (SELECT (CASE WHEN TRUNC(MONTHS_BETWEEN(TRUNC(cr.DATUCH),dAGENT_BIRTHDATE))/12 >= 18 THEN '1'
- ELSE '2'
- END)
- FROM dual)
- AND ROWNUM = 1),
- (SELECT ld.ID
- FROM D_LPUDICT ld
- WHERE ld.VERSION = nVER_LPUDICT
- AND LOWER(ld.LPU_CODE) = (SELECT LOWER(vlc.MIS_CODE)
- FROM IMP70_V_KONVE_LPUDICT_CODES vlc
- WHERE vlc.FILE_CODE = cr.POLIK
- AND ROWNUM = 1)
- AND ROWNUM = 1)
- INTO nREGISTER_PURPOSE,
- nLPU_REG
- FROM dual;
- --проверим, нет ли прикрепления к текущему ЛПУ
- SELECT (SELECT ar.ID
- FROM D_AGENT_REGISTRATION ar
- WHERE ar.PID = nAGENTS_ID
- AND ar.LPU_REG = nLPU_REG
- AND COALESCE(cr.DATUCH,TRUNC(SYSDATE)) BETWEEN ar.BEGIN_DATE AND COALESCE(ar.END_DATE,TRUNC(SYSDATE))
- AND ROWNUM = 1)
- INTO nAGENT_REGISTRATION_ID
- FROM dual;
- IF nAGENT_REGISTRATION_ID IS NULL THEN
- --Определим участок
- IF nLPU_REG IS NULL THEN
- lg(pnLOG_IDENT,'NDF_LPUDICT','Не определено ЛПУ прикрепления: POLIK = '||cr.POLIK||'(пациент - '||cr.FIO||')');
- ELSE
- BEGIN
- SELECT s.ID
- INTO nLPU_SITE
- FROM D_SITES s
- WHERE s.VERSION = nVER_SITES
- AND s.lpudict = nLPU_REG
- AND UPPER(s.SITE_NAME) LIKE '%'||UPPER(cr.UCH)||'%'
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --Если участок не найден, то необходимо его создать
- lg(pnLOG_IDENT,'NDF_SITES','Не определен участок '||cr.UCH||' для D_LPUDICT='||nLPU_REG||'(POLIK ='||cr.POLIK||')');
- /* -- закомментировано, так как не чем заполнить обязательное pnDIVISION
- begin
- D_PKG_SITES.ADD(pnD_INSERT_ID => nLPU_SITE,
- pnLPU => pnLPU,
- psSITE_CODE => cr.UCH,
- psSITE_NAME => cr.UCH,
- pnSITE_TYPE => null,
- pnMAX_PACIENT => null,
- pnREGISTER_PURPOSE => nREGISTER_PURPOSE,
- pnDIVISION => null,
- pnLPUDICT => nLPU_REG);
- exception
- when others then
- lg(pnLOG_IDENT,'ADD_SITES','Ошибка добавления участка: '||cr.UCH||' для D_LPUDICT='||nLPU_REG||'(POLIK ='||cr.POLIK||')',sqlerrm);
- end;
- */
- END;
- BEGIN
- D_PKG_AGENT_REGISTRATION.ADD(pnD_INSERT_ID => nAGENT_REGISTRATION_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnLPU_REG => nLPU_REG,
- pnREGISTER_PURPOSE => nREGISTER_PURPOSE,
- pdBEGIN_DATE => cr.DATUCH,
- pdEND_DATE => NULL,
- pnLPU_SITE => nLPU_SITE,
- pnREG_TYPE => NULL,
- psREG_DOC_NUMB => NULL,
- psREG_NOTE => NULL,
- pnREG_CATEGORY => NULL,
- pnDIVISION => NULL,
- pnAGENT_APPLIСATION_REG => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_REGISTRATION','Ошибка добавления регистрации пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- END IF;
- END IF;
- ----------------------------------------
- --2.10 блок обработки данных в разделе AGENT_GR_RENTGENOGR
- ----------------------------------------
- --получим данные для вставки в таблицу
- IF cr.SOCGR IS NOT NULL THEN
- BEGIN
- SELECT agr.ID
- INTO nAGENT_GR_RENTGENOGR_ID
- FROM D_AGENT_GR_RENTGENOGR agr
- WHERE agr.PID = nAGENTS_ID
- AND agr.VERSION = nVER_AGENT_GR_RENTGENOGR
- AND (TRUNC(SYSDATE) BETWEEN agr.BEGIN_DATE AND COALESCE(agr.END_DATE,TRUNC(SYSDATE))
- OR
- agr.BEGIN_DATE IS NULL)
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- SELECT (SELECT grf.ID
- FROM D_GR_RENTGENOGRAPH grf
- WHERE grf.VERSION = nVER_GR_RENTGENOGRAPH
- AND LOWER(grf.GRF_CODE) = (SELECT LOWER(vsgr.MIS_CODE)
- FROM IMP70_V_KONVE_SOCGR_GR_RENTGEN vsgr
- WHERE LOWER(vsgr.FILE_CODE) = LOWER(cr.SOCGR)
- AND ROWNUM = 1)
- AND ROWNUM = 1)
- INTO nGR_RENTGENOGRAPH
- FROM dual;
- IF nGR_RENTGENOGRAPH IS NULL THEN
- lg(pnLOG_IDENT,'NDF_AGENT_GR_RENTGENOGR','Не определена группа риска флюорографии '||cr.SOCGR||' для пациента: '||cr.FIO);
- ELSE
- BEGIN
- D_PKG_AGENT_GR_RENTGENOGR.ADD(pnD_INSERT_ID => nAGENT_GR_RENTGENOGR_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnGR_RENTGENOGRAPH => nGR_RENTGENOGRAPH,
- pdBEGIN_DATE => NULL,
- pdEND_DATE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_GR_RENTGENOGR','Ошибка добавления группы риска флюорографии пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- END;
- END IF;
- ----------------------------------------
- --2.11 блок обработки данных в разделе AGENT_DETR_EFFECTS
- ----------------------------------------
- IF (cr.ALK IS NOT NULL) OR (cr.NARK IS NOT NULL) OR (cr.KUREN IS NOT NULL) THEN
- BEGIN
- SELECT adef.ID
- INTO nAGENT_DETR_EFFECTS_ID
- FROM D_AGENT_DETR_EFFECTS adef
- WHERE adef.PID = nAGENTS_ID
- AND adef.VERSION = nVER_AGENT_DETR_EFFECTS
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получим данные из таблицы импорта для вставку в таблицу
- WITH DET_EFFECTS_CODES AS (SELECT (CASE WHEN cr.ALK IS NOT NULL THEN 2
- WHEN cr.NARK IS NOT NULL THEN 4
- WHEN cr.KUREN IS NOT NULL THEN 1
- ELSE NULL
- END)
- FROM dual)
- SELECT (SELECT def.ID
- FROM D_DETRIMENTAL_EFFECTS def
- WHERE def.VERSION = nVER_DETRIMENTAL_EFFECTS
- AND def.CODE = (SELECT CODE FROM DET_EFFECTS_CODES)
- AND ROWNUM = 1)
- INTO nDETR_EFFECT
- FROM dual;
- BEGIN
- D_PKG_AGENT_DETR_EFFECTS.ADD(pnD_INSERT_ID => nAGENT_DETR_EFFECTS_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnDETR_EFFECT => nDETR_EFFECT,
- pnIS_ACTUAL => 1);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENT_DETR_EFFECTS','Ошибка добавления наследственных заболеваний пациента: '||cr.FIO,SQLERRM);
- END;
- END;
- END IF;
- ----------------------------------------
- --2.14 блок обработки данных в разделе 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
- BEGIN
- D_PKG_PERSMEDCARD.ADD(pnD_INSERT_ID => nPERSMEDCARD_ID,
- pnLPU => pnLPU,
- pnCID => nCAT_PERSMEDCARD,
- pnAGENT => nAGENTS_ID,
- pnBLOODGROUPE => NULL,
- pnRHESUS => NULL,
- psECOLOR => NULL,
- psCARD_NUMB => cr.LIKOD,
- psNOTE => NULL,
- pnREG_DIVISION => NULL,
- pnPMC_TYPE => NULL,
- pnIA_PRINTED => 0,
- pnSMS_AGREE => 0,
- pnEMAIL_AGREE => 0,
- pdCREATEDATE => SYSDATE);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_PERSMEDCARD','Ошибка добавления карты пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.16 блок обработки данных в разделе RTUB_CASE_CHEMO
- ----------------------------------------
- IF nRTUB_CASES_ID IS NOT NULL THEN
- BEGIN
- SELECT rcc.ID
- INTO nRTUB_CASE_CHEMO_ID
- FROM D_RTUB_CASE_CHEMO rcc
- WHERE rcc.PID = nRTUB_CASES_ID
- AND rcc.VERSION = nVER_RTUB_CASE_CHEMO
- AND COALESCE(cr.DATLEC,TRUNC(SYSDATE)) BETWEEN rcc.DATE_BEGIN AND COALESCE(rcc.DATE_END,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получим данные из таблицы импорта для вставки
- SELECT (SELECT dcm.ID
- FROM D_DTUB_CHEMO_MODES dcm
- WHERE dcm.VERSION = nVER_DTUB_CHEMO_MODES
- AND LOWER(dcm.CM_CODE) = LOWER(cr.REJ)
- AND ROWNUM = 1),
- (SELECT dco.ID
- FROM D_DTUB_CHEMO_OUT dco
- WHERE dco.VERSION = nVER_DTUB_CHEMO_OUT
- AND dco.CO_CODE = nDTUB_CHEMO_OUT_UMER
- AND ROWNUM = 1)
- INTO nCHEMO_MODE,
- nCHEMO_OUT
- FROM dual;
- IF nCHEMO_MODE IS NULL THEN
- lg(pnLOG_IDENT,'NDF_DTUB_CHEMO_MODES','Не определен режим химиотерапии для пациента: '||cr.FIO||' (REJ = '||cr.REJ||')');
- ELSE
- IF nRTUB_CASE_DGNS_ID IS NOT NULL THEN
- BEGIN
- D_PKG_RTUB_CASE_CHEMO.ADD(pnD_INSERT_ID => nRTUB_CASE_CHEMO_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASES_ID,
- pnDIAGNS => nRTUB_CASE_DGNS_ID,
- pdDATE_BEGIN => cr.DATLEC,
- pdDATE_END => cr.DATSME,
- pnCHEMO_MODE => nCHEMO_MODE,
- pnCHEMO_OUT => nCHEMO_OUT,
- pnCHEMO_PLACE => 0,
- pnART => 0,
- pnCOTRIMOXAZOL => 0,
- pnIS_EMP => NULL,
- pnIS_DRUG_SENS_RSLT => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_CHEMO','Ошибка добавления химиотерапии пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- END IF;
- END;
- END IF;
- ----------------------------------------
- --2.17 блок обработки данных в разделе RTUB_CASE_DETECTION
- ----------------------------------------
- IF nRTUB_CASES_ID IS NOT NULL THEN
- BEGIN
- SELECT rcd.ID
- INTO nRTUB_CASE_DETECTION_ID
- FROM D_RTUB_CASE_DETECTION rcd
- WHERE rcd.PID = nRTUB_CASES_ID
- AND rcd.VERSION = nVER_RTUB_CASE_DETECTION
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- -- получим данные из таблицы импорта для вставки в таблицу
- WITH N_REGISTR_TYPES AS (SELECT rt.ID
- FROM D_NOS_REGISTR_TYPES rt
- WHERE rt.T_CODE = nNOS_REG_TYPES_TUB -- ТуберкулезБП
- AND rt.VERSION = nVER_NOS_REGISTR_TYPES
- AND ROWNUM = 1)
- SELECT (SELECT pd.ID
- FROM D_NR_CLS_PATH_DISCOVER pd
- WHERE pd.VERSION = nVER_NR_CLS_PATH_DISCOVER
- AND UPPER(pd.PATH_CODE) = (SELECT UPPER(vkpd.MIS_CODE)
- FROM IMP70_V_KONVE_PATH_DISCOVER vkpd
- WHERE UPPER(vkpd.FILE_CODE) = UPPER(cr.ZABVI)
- AND ROWNUM = 1)
- AND pd.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND TRUNC(SYSDATE) BETWEEN pd.DATE_BEGIN AND COALESCE(pd.DATE_END,TRUNC(SYSDATE))
- AND ROWNUM = 1)
- INTO nDISCOVER_PATH
- FROM dual;
- BEGIN
- d_PKG_RTUB_CASE_DETECTION.ADD(pnD_INSERT_ID => nRTUB_CASE_DETECTION_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASES_ID,
- pdSYMP_DATE => NULL,
- pdFIRST_VIS_DATE => NULL,
- pnFIRST_VISIT => NULL,
- pnDETECT_PLACE => NULL,
- psDETECT_PLACE_TEXT => NULL,
- pnDETECT_LPU => NULL,
- psDETECT_LPU_TEXT => NULL,
- pnDISCOVER_PATH => nDISCOVER_PATH);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_DETECTION','Ошибка добавления выявления диагноза туберкулеза пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- END IF;
- END IF; -- конец условия if nAGENTS_ID is not null ПОСЛЕ создания D_AGENTS
- END LOOP; -- конец цикла по таблице импорта
- END IF; -- конец условия if nERROR = 0 or pnERR_IGNORE = 1
- lg(pnLOG_IDENT,'END_IMP','Завершение импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ERROR_IMP','Ошибка - '||SQLERRM);
- D_P_EXC('Ошибка процедуры IMP70_P_UMEKONVE импорта данных из таблицы IMP70_UMEKONVE: Ошибка - '||SQLERRM);
- END IMP70_P_UMEKONVE;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --Процедура для импорта данных из файла HPKONVE.dbf через таблицу импорта IMP70_HPKONVE
- PROCEDURE IMP70_P_HPKONVE
- (
- pnLPU IN NUMBER,
- pnLOG_IDENT OUT NUMBER,
- pnERR_IGNORE IN NUMBER DEFAULT 0
- )
- IS
- nVER_AGENT_ADDRS D_PKG_STD.tREF; -- идентификатор версии для раздела AGENT_ADDRS
- nVER_GEOGRAFY D_PKG_STD.tREF; -- идентификатор версии для раздела GEOGRAFY
- nVER_NOS_REGISTR_TYPES D_PKG_STD.tREF; -- идентификатор версии для раздела NOS_REGISTR_TYPES
- nVER_NOS_REGISTRS D_PKG_STD.tREF; -- идентификатор версии для раздела NOS_REGISTRS
- nVER_NR_PATIENTS D_PKG_STD.tREF; -- идентификатор версии для раздела NR_PATIENTS
- nVER_RTUB_CASES D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASES
- nVER_NR_LPUDICT D_PKG_STD.tREF; -- идентификатор версии для раздела NR_LPUDICT
- nVER_RTUB_CASE_RSRCH D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASE_RSRCH
- nVER_DTUB_DETECT_METHODS D_PKG_STD.tREF; -- идентификатор версии для раздела DTUB_DETECT_METHODS
- nVER_LABMED_BIOMATERIAL D_PKG_STD.tREF; -- идентификатор версии для раздела LABMED_BIOMATERIAL
- nVER_DTUB_RSRCH_RESULTS D_PKG_STD.tREF; -- идентификатор версии для раздела DTUB_RSRCH_RESULTS
- nCAT_ROOT D_PKG_STD.tREF; -- идентификатор корневого каталога для разделов
- nCAT_AGENTS D_PKG_STD.tREF; -- идентификатор каталога для раздела AGENTS
- nCAT_PERSMEDCARD D_PKG_STD.tREF; -- идентификатор каталога для раздела PERSMEDCARD
- nLPUDICT_ID D_PKG_STD.tREF; -- идентификатор записи D_LPUDICT
- nAGENTS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENTS
- nAGENT_ADDRS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_ADDRS
- nPERSMEDCARD_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_PERSMEDCARD
- nNOS_REGISTR_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_NOS_REGISTR
- nRTUB_CASES_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASES
- nNR_PATIENT_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_NR_PATIENT
- nRTUB_CASE_RSRCH_ID D_PKG_STD.tREF; -- идентификатор записи в таблице RTUB_CASE_RSRCH
- nRTUB_RSRCH_RSLT_BACT_ID D_PKG_STD.tREF; -- идентификатор записи в таблице RTUB_RSRCH_RSLT_BACT
- nERROR D_PKG_STD.tREF := 0;-- кол-во ошибок импорта
- sERROR_CODE D_PKG_STD.tSTR; -- код ошибки
- sAGN_CODE D_AGENTS.AGN_CODE%TYPE;
- -- код контрагента в таблице D_AGENTS
- nCITY D_PKG_STD.tREF; -- идентификатор населенного пункта
- nSTREET D_PKG_STD.tREF; -- идентификатор улицы
- sHOUSE D_PKG_STD.tSTR; -- номер дома в адресе
- sHOUSELIT D_PKG_STD.tSTR; -- литера дома в адресе
- sFLAT D_PKG_STD.tSTR; -- номер квартиры в адресе
- nRAION D_PKG_STD.tREF; -- идентификатор района из адреса
- nRAION_CODE D_PKG_STD.tSTR; -- код района
- sTUBNASP_TMP D_PKG_STD.tSTR; -- временная переменная для хранения названия нас пункта из файла
- dAGENT_BIRTHDATE D_AGENTS.BIRTHDATE%TYPE;
- -- дата рождения пациента
- nDETECT_METHOD D_PKG_STD.tREF; -- идентификатор метода исследования
- nBIOMATERIAL D_PKG_STD.tREF; -- идентификатор биоматериала
- nRSRCH_RESULT D_PKG_STD.tREF; -- идентификатор результата исследования
- BEGIN
- D_PKG_IMP_LOG.INIT('IMP70_HPKONVE', pnLPU, pnLOG_IDENT, 0);
- lg(pnLOG_IDENT,'START_IMP','Начало импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
- nVER_AGENT_ADDRS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_ADDRS');
- nVER_GEOGRAFY := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'GEOGRAFY');
- nVER_NOS_REGISTR_TYPES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTR_TYPES');
- nVER_NOS_REGISTRS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTRS');
- nVER_NR_PATIENTS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_PATIENTS');
- nVER_RTUB_CASES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASES');
- nVER_NR_LPUDICT := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_LPUDICT');
- nVER_RTUB_CASE_RSRCH := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_RSRCH');
- nVER_DTUB_DETECT_METHODS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_DETECT_METHODS');
- nVER_LABMED_BIOMATERIAL := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'LABMED_BIOMATERIAL');
- nVER_DTUB_RSRCH_RESULTS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_RSRCH_RESULTS');
- --блок получения каталогов для разделов
- D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'AGENTS', 'Пациенты Томск Фтиз', nCAT_AGENTS);
- IF nCAT_AGENTS IS NULL THEN
- D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'AGENTS',nCAT_ROOT);
- D_PKG_CATALOGS.ADD(nCAT_AGENTS,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
- END IF;
- D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'PERSMEDCARD', 'Пациенты Томск Фтиз', nCAT_PERSMEDCARD);
- IF nCAT_PERSMEDCARD IS NULL THEN
- D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'PERSMEDCARD',nCAT_ROOT);
- D_PKG_CATALOGS.ADD(nCAT_PERSMEDCARD,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
- END IF;
- --по заданному ЛПУ получим 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(pnLOG_IDENT,'NFD_LPUDICT','Не определно заданное ЛПУ: '||pnLPU);
- END;
- --Цикл по всем записям таблицы IMP70_TUBKONVE с импортируемыми данными
- IF nERROR = 0 OR pnERR_IGNORE = 1 THEN
- FOR cr IN (SELECT *
- FROM IMP70_HPKONVE)
- LOOP
- nAGENTS_ID := NULL;
- nAGENT_ADDRS_ID := NULL;
- nRTUB_CASES_ID := NULL;
- nPERSMEDCARD_ID := NULL;
- nNR_PATIENT_ID := NULL;
- nNOS_REGISTR_ID := NULL;
- nRTUB_CASE_RSRCH_ID := NULL;
- nRTUB_RSRCH_RSLT_BACT_ID := NULL;
- sAGN_CODE := NULL;
- nCITY := NULL;
- nSTREET := NULL;
- sHOUSE := NULL;
- sHOUSELIT := NULL;
- nRAION := NULL;
- nRAION_CODE := NULL;
- dAGENT_BIRTHDATE := NULL;
- nDETECT_METHOD := NULL;
- --проверим нет ли в таблице D_AGENTS такого контрагента
- GET_AGENT_ID(psFIO => cr.FIO,
- pdBIRTHDATE => cr.DATRO,
- psSNILS => NULL,
- pnAGENTS_ID => nAGENTS_ID,
- psERROR_CODE => sERROR_CODE);
- IF nAGENTS_ID IS NOT NULL THEN
- dAGENT_BIRTHDATE := cr.DATRO;
- ELSE
- dAGENT_BIRTHDATE := NULL;
- IF sERROR_CODE = 'TMR_AGENTS' THEN
- lg(pnLOG_IDENT,'TMR_AGENTS','Найдено несколько пациентов: ФИО - '||cr.FIO||', Дата рожд.- '||TO_CHAR(cr.DATRO,'dd.mm.yyyy'));
- continue;
- END IF;
- END IF;
- --если контрагент не найден, то создадим его
- IF nAGENTS_ID IS NULL THEN
- ----------------------------------------
- --1. блок обработки данных в разделе AGENTS
- ----------------------------------------
- sAGN_CODE := D_PKG_AGENTS.GEN_CODE(pnLPU);
- dAGENT_BIRTHDATE := cr.DATRO;
- BEGIN
- D_PKG_AGENTS.ADD(pnD_INSERT_ID => nAGENTS_ID,
- pnLPU => pnLPU,
- pnCID => nCAT_AGENTS,
- psAGN_CODE => sAGN_CODE,
- psAGN_NAME => sAGN_CODE||' '||cr.FIO,
- pnAGN_TYPE => 1,
- pnAGN_INN => NULL,
- pnAGN_KPP => NULL,
- psNOTE => NULL,
- psFIRSTNAME => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'FIRSTNAME'),
- psSURNAME => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'SURNAME'),
- psLASTNAME => IMP70_PKG_KONVE.GET_PART_FIO(cr.FIO,'LASTNAME'),
- pdBIRTHDATE => cr.DATRO,
- pnSEX => IMP70_PKG_KONVE.CONVERT_POL_TO_NUMBER(cr.POL),
- pnEDUCATION => NULL,
- pnOKVED => NULL,
- pnIS_EMPLOYER => 0,
- psSNILS => NULL,
- psAGN_OGRN => NULL,
- psAGN_OKPO => NULL,
- pdDEATHDATE => NULL,
- pnIS_UNKNOWN => NULL,
- pnDEATHDOCTYPE => NULL,
- pdDEATHDOCDATE => NULL,
- psDEATHDOCNUM => NULL,
- pnAGN_OKFS => NULL,
- psENP => NULL,
- psBIRTHPLACE => NULL,
- pnDECLINE_FIO => NULL,
- pnNATION => NULL,
- pnIS_HOME => 0,
- pnGEST_AGE_MOTHER => NULL,
- pnIS_ANONYM => 0,
- psDEATHPLACE => NULL,
- pnFULL_CLASSES => NULL,
- pnACCURACY_DATE_DEATH => NULL,
- pnACCURACY_DATE_BIRTH => NULL,
- pnIND_ENTERP => NULL,
- psAGN_OGRN_IND => NULL,
- pnCONVICT_AMOUNT => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENTS','Ошибка добавления пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- --если контрагент создан успешно или найден в системе, то загрузим остальные данные при их отсутствии
- IF nAGENTS_ID IS NOT NULL THEN
- ----------------------------------------
- --2.1 блок обработки данных в разделе AGENT_ADDRS
- ----------------------------------------
- BEGIN
- SELECT aa.ID
- INTO nAGENT_ADDRS_ID
- FROM D_AGENT_ADDRS aa
- WHERE aa.PID = nAGENTS_ID
- AND aa.VERSION = nVER_AGENT_ADDRS
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получим населенный пункт
- IMP70_PKG_KONVE.GET_GEOTYPE_CODE_NASP(pnLPU,cr.NASP,nCITY,sERROR_CODE);
- IF nCITY IS NULL THEN
- IF sERROR_CODE = 'TMR_GEOGRAFY' THEN
- lg(pnLOG_IDENT,'TMR_GEOGRAFY','Найдено несколько населенных пунктов: '||cr.NASP||'(пациент - '||cr.FIO||')');
- ELSIF sERROR_CODE = 'NDF_GEOGRAFY' THEN
- lg(pnLOG_IDENT,'','Не определен населенный пункт: '||cr.NASP||'(пациент - '||cr.FIO||')');
- END IF;
- END IF;
- --Получение района
- IF cr.KORAI IS NOT NULL THEN
- nRAION_CODE := GET_RAIONCODE_BY_KODRAI(cr.KORAI);
- BEGIN
- SELECT r.ID
- INTO nRAION
- FROM D_RAIONS r
- WHERE LOWER(r.R_CODE) = LOWER(nRAION_CODE)
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- nRAION := NULL;
- lg(pnLOG_IDENT,'NDF_RAIONS','Не определён район: '||cr.KORAI||'(пациент - '||cr.FIO||')');
- END;
- END IF;
- --получим улицу (текст до первого символа '-' без последних цифр)
- IF UPPER(cr.ADR) = 'БОМЖ' THEN
- nSTREET := NULL;
- ELSE
- BEGIN
- SELECT g.ID
- INTO nSTREET
- FROM D_GEOGRAFY g
- join D_GEOGRAFYTYPES gt
- ON gt.ID = g.GEOLOCTYPE
- AND gt.AO_TYPE IN (nAO_TYPE_NASP,nAO_TYPE_STREET)
- WHERE g.version = nVER_GEOGRAFY
- AND UPPER(g.GEONAME) = UPPER(IMP70_PKG_KONVE.GET_STREET_FROM_ADRESS(cr.ADR))
- AND g.PID = nCITY
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- nSTREET := NULL;
- lg(pnLOG_IDENT,'NDF_GEOGRAFY','Не определена улица в адресе '||cr.ADR||' для нас пункта '||cr.NASP||' (пациент - '||cr.FIO||')');
- END;
- END IF;
- --получим номер дома из адреса (символы между первым символом '-' и предыдущим пробелом)
- sHOUSE := IMP70_PKG_KONVE.GET_HOUSE_FROM_ADRESS(cr.ADR);
- --получим литеру дома, если она есть
- sHOUSELIT := IMP70_PKG_KONVE.GET_LETTER_FROM_HOUSE(sHOUSE);
- IF sHOUSELIT IS NOT NULL THEN
- sHOUSE := REPLACE(sHOUSE,sHOUSELIT,'');
- END IF;
- --получим квартиру (цифры после первого символа '-')
- sFLAT := IMP70_PKG_KONVE.GET_FLAT_FROM_ADRESS(cr.ADR);
- --непосредственно добавление записи в D_AGENT_ADDRS
- BEGIN
- D_PKG_AGENT_ADDRS.ADD(pnD_INSERT_ID => nAGENT_ADDRS_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnSTREET => nSTREET,
- psHOUSE => sHOUSE,
- psHOUSELIT => sHOUSELIT,
- pnBLOCK => NULL,
- pnFLAT => sFLAT,
- psFLATLIT => NULL,
- psADDR_INDEX => NULL,
- pnIS_MAIN => 1,
- pnIS_REAL => 1,
- pnIS_REG => 1,
- pnIS_TEMPREG => 0,
- pnIS_JUR => 0,
- pnIS_POST => 0,
- pnIS_BIRTH => 0,
- pnRAION => nRAION,
- pdBEGIN_DATE => cr.DATREG,
- pdEND_DATE => NULL,
- psMANUAL_INPUT => NULL,
- pnIS_CITIZEN => (CASE WHEN cr.GIT = 'гор' THEN 1 WHEN cr.GIT = 'сел' THEN 0 ELSE NULL END),
- psFLAT => sFLAT,
- psADDROBJ => NULL,
- psFIAS_HOUSE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENTS_ADDRS','Ошибка добавления адреса пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.2 блок обработки данных в разделе 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
- BEGIN
- D_PKG_PERSMEDCARD.ADD(pnD_INSERT_ID => nPERSMEDCARD_ID,
- pnLPU => pnLPU,
- pnCID => nCAT_PERSMEDCARD,
- pnAGENT => nAGENTS_ID,
- pnBLOODGROUPE => NULL,
- pnRHESUS => NULL,
- psECOLOR => NULL,
- psCARD_NUMB => cr.BLIKOD,
- psNOTE => NULL,
- pnREG_DIVISION => NULL,
- pnPMC_TYPE => NULL,
- pnIA_PRINTED => 0,
- pnSMS_AGREE => 0,
- pnEMAIL_AGREE => 0,
- pdCREATEDATE => SYSDATE);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_PERSMEDCARD','Ошибка добавления карты пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.6 блок обработки данных в разделе NR_PATIENTS
- ----------------------------------------
- --получим данные для вставки в таблицу
- WITH N_REGISTR_TYPES AS (SELECT rt.ID
- FROM D_NOS_REGISTR_TYPES rt
- WHERE rt.T_CODE = nNOS_REG_TYPES_TUB -- ТуберкулезБП
- AND rt.VERSION = nVER_NOS_REGISTR_TYPES
- AND ROWNUM = 1)
- SELECT (SELECT r.ID
- FROM D_NOS_REGISTRS r
- WHERE r.VERSION = nVER_NOS_REGISTRS
- AND r.REG_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND EXISTS(SELECT 1
- FROM D_NR_LPUDICT nld
- WHERE nld.VERSION = nVER_NR_LPUDICT
- AND nld.PID = r.ID
- AND nld.lpudict = nLPUDICT_ID)
- AND ROWNUM = 1)
- INTO nNOS_REGISTR_ID
- FROM dual;
- --если такой записи ещё нет, то создадим её
- BEGIN
- SELECT p.ID
- INTO nNR_PATIENT_ID
- FROM D_NR_PATIENTS p
- WHERE p.AGENT = nAGENTS_ID
- AND p.VERSION = nVER_NR_PATIENTS
- AND p.NOS_REGISTR = nNOS_REGISTR_ID
- AND p.REGISTR_LPU = nLPUDICT_ID
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_NR_PATIENTS.ADD(pnD_INSERT_ID => nNR_PATIENT_ID,
- pnLPU => pnLPU,
- pnAGENT => nAGENTS_ID,
- pnNOS_REGISTR => nNOS_REGISTR_ID,
- pnREGISTR_LPU => nLPUDICT_ID,
- psREGISTR_LPU_TEXT => NULL,
- pdREGISTR_DATE => cr.DATREG,
- pnMKB => NULL,
- pnNUMB_REG => NULL,
- pdUPDATE_DATE => TRUNC(SYSDATE),
- pnFR => 0,
- psNUMB_REG_GD => NULL,
- pdREMOVE_DATE => NULL,
- pnREMOVE_REASON => NULL,
- pnREMOVE_LPU => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_NR_PATIENTS','Ошибка добавления в ноз. реестр пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.3 блок обработки данных в разделе RTUB_CASES
- ----------------------------------------
- BEGIN
- SELECT rc.ID
- INTO nRTUB_CASES_ID
- FROM D_RTUB_CASES rc
- WHERE rc.AGENT = nAGENTS_ID
- AND rc.VERSION = nVER_RTUB_CASES
- AND (rc.NR_PATIENT = nNR_PATIENT_ID
- OR
- rc.NR_PATIENT IS NULL)
- AND COALESCE(cr.DATB20,TRUNC(SYSDATE)) BETWEEN rc.CREATE_DATE AND COALESCE(rc.CLOSE_DATE,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_RTUB_CASES.ADD(pnD_INSERT_ID => nRTUB_CASES_ID,
- pnLPU => pnLPU,
- pnAGENT => nAGENTS_ID,
- pnNR_PATIENT => nNR_PATIENT_ID,
- pnPAT_GROUP => NULL,
- pnFROM_DGROUP => NULL,
- pnLPU_CREATE => nLPUDICT_ID,
- pdCREATE_DATE => cr.DATB20,
- pdLAST_CHANGE_DATE => cr.DATKOR,
- pnLAST_CHANGE_EMP => NULL,
- pdCLOSE_DATE => NULL,
- pnCLOSE_EMP => NULL,
- psCLOSE_REASON => NULL,
- pnLPU_IN_CHARGE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASES','Ошибка добавления случая туберкулеза для пациента: '||cr.FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.4 блок обработки данных в разделе RTUB_CASE_RSRCH
- ----------------------------------------
- IF nRTUB_CASES_ID IS NOT NULL THEN
- BEGIN
- SELECT rcr.ID
- INTO nRTUB_CASE_RSRCH_ID
- FROM D_RTUB_CASE_RSRCH rcr
- WHERE rcr.PID = nRTUB_CASES_ID
- AND rcr.VERSION = nVER_RTUB_CASE_RSRCH
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- SELECT (SELECT lb.ID
- FROM D_LABMED_BIOMATERIAL lb
- WHERE lb.VERSION = nVER_LABMED_BIOMATERIAL
- AND LOWER(lb.BM_NAME) = 'мокрота'
- AND ROWNUM = 1)
- INTO nBIOMATERIAL
- FROM dual;
- --создадим записи для двух исследований
- FOR z IN (SELECT 1 str_num, 1 dm_code, cr.DATMIC1 date_study, cr.REZMIC1 result_study FROM dual
- UNION ALL
- SELECT 2 str_num, 3 dm_code, cr.DATPOS1 date_study, cr.REZPOS1 result_study FROM dual
- )
- LOOP
- nRTUB_CASE_RSRCH_ID := NULL;
- nRTUB_RSRCH_RSLT_BACT_ID := NULL;
- nDETECT_METHOD := NULL;
- IF z.DATE_STUDY IS NOT NULL THEN
- SELECT (SELECT ddm.ID
- FROM D_DTUB_DETECT_METHODS ddm
- WHERE ddm.VERSION = nVER_DTUB_DETECT_METHODS
- AND ddm.DM_CODE = z.DM_CODE
- AND ROWNUM = 1)
- INTO nDETECT_METHOD
- FROM dual;
- BEGIN
- D_PKG_RTUB_CASE_RSRCH.ADD(pnD_INSERT_ID => nRTUB_CASE_RSRCH_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASES_ID,
- pnDETECT_METHOD => nDETECT_METHOD,
- pnRSRCH_KIND => 1,
- pnDIRECT_LPU => nLPUDICT_ID,
- psLAB_CODE => TO_CHAR(z.STR_NUM),
- pdCOLLECT_DATE => z.DATE_STUDY,
- pdFILL_DATE => z.DATE_STUDY);
- IF nRTUB_CASE_RSRCH_ID IS NOT NULL AND z.RESULT_STUDY IS NOT NULL THEN
- ----------------------------------------
- --2.5 блок обработки данных в разделе RTUB_RSRCH_RSLT_BACT
- ----------------------------------------
- --получим результат идентификатор результата исследования
- nRSRCH_RESULT := NULL;
- SELECT (SELECT drr.ID
- FROM D_DTUB_RSRCH_RESULTS drr
- WHERE drr.VERSION = nVER_DTUB_RSRCH_RESULTS
- AND UPPER(drr.NAME) = UPPER(z.RESULT_STUDY)
- AND ROWNUM = 1)
- INTO nRSRCH_RESULT
- FROM dual;
- IF nRSRCH_RESULT IS NULL THEN
- lg(pnLOG_IDENT,'NDF_DTUB_RSRCH_RESULTS','не определен результат исследования '||z.RESULT_STUDY||' для пациента: '||cr.FIO);
- ELSE
- BEGIN
- D_PKG_RTUB_RSRCH_RSLT_BACT.ADD(pnD_INSERT_ID => nRTUB_RSRCH_RSLT_BACT_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASE_RSRCH_ID,
- pnBIOMATERIAL => nBIOMATERIAL,
- pnRSRCH_RESULT => nRSRCH_RESULT,
- psRESULT_STR => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_RSRCH_RSLT_BACT','Ошибка добавления случая туберкулеза: Результаты исследования для пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- END IF;
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_RSRCH','Ошибка добавления случая туберкулеза: Лабораторные исследования для пациента: '||cr.FIO, SQLERRM);
- END;
- END IF;
- END LOOP;
- END;
- END IF; -- конец условия nRTUB_CASES_ID is not null раздела 2.4
- END IF; -- конец условия if nAGENTS_ID is not null ПОСЛЕ создания D_AGENTS
- END LOOP; -- конец цикла по таблице импорта
- END IF; -- конец условия if nERROR = 0 or pnERR_IGNORE = 1
- lg(pnLOG_IDENT,'END_IMP','Завершение импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ERROR_IMP','Ошибка - '||SQLERRM);
- D_P_EXC('Ошибка процедуры IMP70_P_HPKONVE импорта данных из таблицы IMP70_HPKONVE: Ошибка - '||SQLERRM);
- END IMP70_P_HPKONVE;
- -----------------------------------------------------------------------------------------------------------------------------
- -----------------------------------------------------------------------------------------------------------------------------
- --Процедура для импорта данных из файла GR0KONVE.dbf через таблицу импорта IMP70_GR0KONVE
- PROCEDURE IMP70_P_GR0KONVE
- (
- pnLPU IN NUMBER,
- pnLOG_IDENT OUT NUMBER,
- pnERR_IGNORE IN NUMBER DEFAULT 0
- )
- IS
- nVER_AGENT_ADDRS D_PKG_STD.tREF; -- идентификатор версии для раздела AGENT_ADDRS
- nVER_GEOGRAFY D_PKG_STD.tREF; -- идентификатор версии для раздела GEOGRAFY
- nVER_NOS_REGISTR_TYPES D_PKG_STD.tREF; -- идентификатор версии для раздела NOS_REGISTR_TYPES
- nVER_NOS_REGISTRS D_PKG_STD.tREF; -- идентификатор версии для раздела NOS_REGISTRS
- nVER_NR_PATIENTS D_PKG_STD.tREF; -- идентификатор версии для раздела NR_PATIENTS
- nVER_RTUB_CASES D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASES
- nVER_NR_LPUDICT D_PKG_STD.tREF; -- идентификатор версии для раздела NR_LPUDICT
- nVER_DTUB_PAT_GROUP D_PKG_STD.tREF; -- идентификатор версии для раздела DTUB_PAT_GROUP
- nVER_PATIENTS_DGROUP D_PKG_STD.tREF; -- идентификатор версии для раздела PATIENTS_DGROUP
- nVER_RTUB_CASE_DISP D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASE_DISP
- nVER_RTUB_CASE_DISP_DATA D_PKG_STD.tREF; -- идентификатор версии для раздела RTUB_CASE_DISP_DATA
- nCAT_ROOT D_PKG_STD.tREF; -- идентификатор корневого каталога для разделов
- sERROR_CODE D_PKG_STD.tSTR; -- код ошибки
- nCAT_AGENTS D_PKG_STD.tREF; -- идентификатор каталога для раздела AGENTS
- nLPUDICT_ID D_PKG_STD.tREF; -- идентификатор записи D_LPUDICT
- nAGENTS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENTS
- nAGENT_ADDRS_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_ADDRS
- nNOS_REGISTR_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_NOS_REGISTR
- nRTUB_CASES_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASES
- nNR_PATIENT_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_NR_PATIENT
- nRTUB_CASE_DISP_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASE_DISP
- nRTUB_CASE_DISP_DATA_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_RTUB_CASE_DISP_DATA
- nAGENT_REGISTRATION_ID D_PKG_STD.tREF; -- идентификатор записи в таблице D_AGENT_REGISTRATION
- nERROR D_PKG_STD.tREF := 0;-- кол-во ошибок импорта
- sAGN_CODE D_AGENTS.AGN_CODE%TYPE;
- -- код контрагента в таблице D_AGENTS
- nCITY D_PKG_STD.tREF; -- идентификатор населенного пункта
- nSTREET D_PKG_STD.tREF; -- идентификатор улицы
- sHOUSE D_PKG_STD.tSTR; -- номер дома в адресе
- sHOUSELIT D_PKG_STD.tSTR; -- литера дома в адресе
- sFLAT D_PKG_STD.tSTR; -- номер квартиры в адресе
- nRAION D_PKG_STD.tREF; -- идентификатор района из адреса
- nRAION_CODE D_PKG_STD.tSTR; -- код района
- sTUBNASP_TMP D_PKG_STD.tSTR; -- временная переменная для хранения названия нас пункта из файла
- dAGENT_BIRTHDATE D_AGENTS.BIRTHDATE%TYPE;
- -- дата рождения пациента
- nPAT_GROUP D_PKG_STD.tREF; -- идентификатор записи D_DTUB_PAT_GROUP
- nFROM_GROUP D_PKG_STD.tREF; -- идентификатор записи D_PATIENTS_DGROUP
- nDGROUP D_PKG_STD.tREF; -- идентификатор записи D_PATIENTS_DGROUP
- nRECOM_TO_DGROUP D_PKG_STD.tREF; -- идентификатор записи D_PATIENTS_DGROUP
- nREGISTER_PURPOSE D_PKG_STD.tREF; -- идентификатор записи D_REGISTER_PURPOSES
- nLPU_REG D_PKG_STD.tREF; -- идентификатор записи D_LPUDICT
- nLPU_SITE D_PKG_STD.tREF; -- идентификатор записи D_SITES
- BEGIN
- D_PKG_IMP_LOG.INIT('IMP70_GR0KONVE', pnLPU, pnLOG_IDENT, 0);
- lg(pnLOG_IDENT,'START_IMP','Начало импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
- --блок получения версий для разделов
- nVER_AGENT_ADDRS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'AGENT_ADDRS');
- nVER_GEOGRAFY := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'GEOGRAFY');
- nVER_NOS_REGISTR_TYPES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTR_TYPES');
- nVER_NOS_REGISTRS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NOS_REGISTRS');
- nVER_NR_PATIENTS := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_PATIENTS');
- nVER_RTUB_CASES := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASES');
- nVER_NR_LPUDICT := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'NR_LPUDICT');
- nVER_DTUB_PAT_GROUP := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'DTUB_PAT_GROUP');
- nVER_PATIENTS_DGROUP := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'PATIENTS_DGROUP');
- nVER_RTUB_CASE_DISP := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DISP');
- nVER_RTUB_CASE_DISP_DATA := D_PKG_VERSIONS.GET_VERSION_BY_LPU(1,pnLPU,'RTUB_CASE_DISP_DATA');
- --блок получения каталогов для разделов
- D_PKG_CATALOGS.GET_ID_BY_NAME(0, pnLPU, 'AGENTS', 'Пациенты Томск Фтиз', nCAT_AGENTS);
- IF nCAT_AGENTS IS NULL THEN
- D_PKG_CATALOGS.FIND_ROOT_CATALOG(1,pnLPU,'AGENTS',nCAT_ROOT);
- D_PKG_CATALOGS.ADD(nCAT_AGENTS,pnLPU,nCAT_ROOT,'Пациенты Томск Фтиз');
- END IF;
- --по заданному ЛПУ получим 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(pnLOG_IDENT,'NFD_LPUDICT','Не определно заданное ЛПУ: '||pnLPU);
- END;
- --Цикл по всем записям таблицы IMP70_GR0KONVE с импортируемыми данными
- IF nERROR = 0 OR pnERR_IGNORE = 1 THEN
- FOR cr IN (SELECT *
- FROM IMP70_GR0KONVE)
- LOOP
- nAGENTS_ID := NULL;
- nAGENT_ADDRS_ID := NULL;
- nRTUB_CASES_ID := NULL;
- nNR_PATIENT_ID := NULL;
- nNOS_REGISTR_ID := NULL;
- nRTUB_CASE_DISP_ID := NULL;
- nRTUB_CASE_DISP_DATA_ID := NULL;
- nAGENT_REGISTRATION_ID := NULL;
- sAGN_CODE := NULL;
- nCITY := NULL;
- nSTREET := NULL;
- sHOUSE := NULL;
- sHOUSELIT := NULL;
- nRAION := NULL;
- nRAION_CODE := NULL;
- dAGENT_BIRTHDATE := NULL;
- nPAT_GROUP := NULL;
- nFROM_GROUP := NULL;
- nRECOM_TO_DGROUP := NULL;
- nDGROUP := NULL;
- nREGISTER_PURPOSE := NULL;
- nLPU_REG := NULL;
- nLPU_SITE := NULL;
- --проверим нет ли в таблице D_AGENTS такого контрагента
- GET_AGENT_ID(psFIO => cr.TUB_FIO,
- pdBIRTHDATE => cr.TUB_DATRO,
- psSNILS => NULL,
- pnAGENTS_ID => nAGENTS_ID,
- psERROR_CODE => sERROR_CODE);
- IF nAGENTS_ID IS NOT NULL THEN
- dAGENT_BIRTHDATE := cr.TUB_DATRO;
- ELSE
- dAGENT_BIRTHDATE := NULL;
- IF sERROR_CODE = 'TMR_AGENTS' THEN
- lg(pnLOG_IDENT,'TMR_AGENTS','Найдено несколько пациентов: ФИО - '||cr.TUB_FIO||', Дата рожд.- '||TO_CHAR(cr.TUB_DATRO,'dd.mm.yyyy'));
- continue;
- END IF;
- END IF;
- --если контрагент не найден, то создадим его
- IF nAGENTS_ID IS NULL THEN
- ----------------------------------------
- --1. блок обработки данных в разделе AGENTS
- ----------------------------------------
- sAGN_CODE := D_PKG_AGENTS.GEN_CODE(pnLPU);
- dAGENT_BIRTHDATE := cr.TUB_DATRO;
- BEGIN
- D_PKG_AGENTS.ADD(pnD_INSERT_ID => nAGENTS_ID,
- pnLPU => pnLPU,
- pnCID => nCAT_AGENTS,
- psAGN_CODE => sAGN_CODE,
- psAGN_NAME => sAGN_CODE||' '||cr.TUB_FIO,
- pnAGN_TYPE => 1,
- pnAGN_INN => NULL,
- pnAGN_KPP => NULL,
- psNOTE => NULL,
- psFIRSTNAME => IMP70_PKG_KONVE.GET_PART_FIO(cr.TUB_FIO,'FIRSTNAME'),
- psSURNAME => IMP70_PKG_KONVE.GET_PART_FIO(cr.TUB_FIO,'SURNAME'),
- psLASTNAME => IMP70_PKG_KONVE.GET_PART_FIO(cr.TUB_FIO,'LASTNAME'),
- pdBIRTHDATE => cr.TUB_DATRO,
- pnSEX => IMP70_PKG_KONVE.CONVERT_POL_TO_NUMBER(cr.TUB_POL),
- pnEDUCATION => NULL,
- pnOKVED => NULL,
- pnIS_EMPLOYER => 0,
- psSNILS => NULL,
- psAGN_OGRN => NULL,
- psAGN_OKPO => NULL,
- pdDEATHDATE => NULL,
- pnIS_UNKNOWN => NULL,
- pnDEATHDOCTYPE => NULL,
- pdDEATHDOCDATE => NULL,
- psDEATHDOCNUM => NULL,
- pnAGN_OKFS => NULL,
- psENP => NULL,
- psBIRTHPLACE => NULL,
- pnDECLINE_FIO => NULL,
- pnNATION => NULL,
- pnIS_HOME => 0,
- pnGEST_AGE_MOTHER => NULL,
- pnIS_ANONYM => 0,
- psDEATHPLACE => NULL,
- pnFULL_CLASSES => NULL,
- pnACCURACY_DATE_DEATH => NULL,
- pnACCURACY_DATE_BIRTH => NULL,
- pnIND_ENTERP => NULL,
- psAGN_OGRN_IND => NULL,
- pnCONVICT_AMOUNT => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENTS','Ошибка добавления пациента: '||cr.TUB_FIO, SQLERRM);
- END;
- END IF;
- --если контрагент создан успешно или найден в системе, то загрузим остальные данные при их отсутствии
- IF nAGENTS_ID IS NOT NULL THEN
- ----------------------------------------
- --2.1 блок обработки данных в разделе AGENT_ADDRS
- ----------------------------------------
- BEGIN
- SELECT aa.ID
- INTO nAGENT_ADDRS_ID
- FROM D_AGENT_ADDRS aa
- WHERE aa.PID = nAGENTS_ID
- AND aa.VERSION = nVER_AGENT_ADDRS
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получим населенный пункт
- IMP70_PKG_KONVE.GET_GEOTYPE_CODE_NASP(pnLPU,cr.TUB_NASP,nCITY,sERROR_CODE);
- IF nCITY IS NULL THEN
- IF sERROR_CODE = 'TMR_GEOGRAFY' THEN
- lg(pnLOG_IDENT,'TMR_GEOGRAFY','Найдено несколько населенных пунктов: '||cr.TUB_NASP||'(пациент - '||cr.TUB_FIO||')');
- ELSIF sERROR_CODE = 'NDF_GEOGRAFY' THEN
- lg(pnLOG_IDENT,'','Не определен населенный пункт: '||cr.TUB_NASP||'(пациент - '||cr.TUB_FIO||')');
- END IF;
- END IF;
- --Получение района
- IF cr.TUB_RAI IS NOT NULL THEN
- nRAION_CODE := GET_RAIONCODE_BY_KODRAI(cr.TUB_RAI);
- BEGIN
- SELECT r.ID
- INTO nRAION
- FROM D_RAIONS r
- WHERE LOWER(r.R_CODE) = LOWER(nRAION_CODE)
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- nRAION := NULL;
- lg(pnLOG_IDENT,'NDF_RAIONS','Не определён район: '||cr.TUB_RAI||'(пациент - '||cr.TUB_FIO||')');
- END;
- END IF;
- --получим улицу (текст до первого символа '-' без последних цифр)
- IF UPPER(cr.TUB_ADR) = 'БОМЖ' THEN
- nSTREET := NULL;
- ELSE
- BEGIN
- SELECT g.ID
- INTO nSTREET
- FROM D_GEOGRAFY g
- join D_GEOGRAFYTYPES gt
- ON gt.ID = g.GEOLOCTYPE
- AND gt.AO_TYPE IN (nAO_TYPE_NASP,nAO_TYPE_STREET)
- WHERE g.version = nVER_GEOGRAFY
- AND UPPER(g.GEONAME) = UPPER(IMP70_PKG_KONVE.GET_STREET_FROM_ADRESS(cr.TUB_ADR))
- AND g.PID = nCITY
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- nSTREET := NULL;
- lg(pnLOG_IDENT,'NDF_GEOGRAFY','Не определена улица в адресе '||cr.TUB_ADR||' для нас пункта '||cr.TUB_NASP||' (пациент - '||cr.TUB_FIO||')');
- END;
- END IF;
- --получим номер дома из адреса (символы между первым символом '-' и предыдущим пробелом)
- sHOUSE := IMP70_PKG_KONVE.GET_HOUSE_FROM_ADRESS(cr.TUB_ADR);
- --получим литеру дома, если она есть
- sHOUSELIT := IMP70_PKG_KONVE.GET_LETTER_FROM_HOUSE(sHOUSE);
- IF sHOUSELIT IS NOT NULL THEN
- sHOUSE := REPLACE(sHOUSE,sHOUSELIT,'');
- END IF;
- --получим квартиру (цифры после первого символа '-')
- sFLAT := IMP70_PKG_KONVE.GET_FLAT_FROM_ADRESS(cr.TUB_ADR);
- --непосредственно добавление записи в D_AGENT_ADDRS
- BEGIN
- D_PKG_AGENT_ADDRS.ADD(pnD_INSERT_ID => nAGENT_ADDRS_ID,
- pnLPU => pnLPU,
- pnPID => nAGENTS_ID,
- pnSTREET => nSTREET,
- psHOUSE => sHOUSE,
- psHOUSELIT => sHOUSELIT,
- pnBLOCK => NULL,
- pnFLAT => sFLAT,
- psFLATLIT => NULL,
- psADDR_INDEX => NULL,
- pnIS_MAIN => 1,
- pnIS_REAL => 1,
- pnIS_REG => 1,
- pnIS_TEMPREG => 0,
- pnIS_JUR => 0,
- pnIS_POST => 0,
- pnIS_BIRTH => 0,
- pnRAION => nRAION,
- pdBEGIN_DATE => cr.TUB_DATGRU,
- pdEND_DATE => NULL,
- psMANUAL_INPUT => NULL,
- pnIS_CITIZEN => (CASE WHEN cr.TUB_GIT = 'гор' THEN 1 WHEN cr.TUB_GIT = 'сел' THEN 0 ELSE NULL END),
- psFLAT => sFLAT,
- psADDROBJ => NULL,
- psFIAS_HOUSE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_AGENTS_ADDRS','Ошибка добавления адреса пациента: '||cr.TUB_FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.5 блок обработки данных в разделе NR_PATIENTS
- ----------------------------------------
- --получим данные для вставки в таблицу
- WITH N_REGISTR_TYPES AS (SELECT rt.ID
- FROM D_NOS_REGISTR_TYPES rt
- WHERE rt.T_CODE = nNOS_REG_TYPES_TUB -- ТуберкулезБП
- AND rt.VERSION = nVER_NOS_REGISTR_TYPES
- AND ROWNUM = 1)
- SELECT (SELECT r.ID
- FROM D_NOS_REGISTRS r
- WHERE r.VERSION = nVER_NOS_REGISTRS
- AND r.REG_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND EXISTS(SELECT 1
- FROM D_NR_LPUDICT nld
- WHERE nld.VERSION = nVER_NR_LPUDICT
- AND nld.PID = r.ID
- AND nld.lpudict = nLPUDICT_ID)
- AND ROWNUM = 1)
- INTO nNOS_REGISTR_ID
- FROM dual;
- --если такой записи ещё нет, то создадим её
- BEGIN
- SELECT p.ID
- INTO nNR_PATIENT_ID
- FROM D_NR_PATIENTS p
- WHERE p.AGENT = nAGENTS_ID
- AND p.VERSION = nVER_NR_PATIENTS
- AND p.NOS_REGISTR = nNOS_REGISTR_ID
- AND p.REGISTR_LPU = nLPUDICT_ID
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_NR_PATIENTS.ADD(pnD_INSERT_ID => nNR_PATIENT_ID,
- pnLPU => pnLPU,
- pnAGENT => nAGENTS_ID,
- pnNOS_REGISTR => nNOS_REGISTR_ID,
- pnREGISTR_LPU => nLPUDICT_ID,
- psREGISTR_LPU_TEXT => NULL,
- pdREGISTR_DATE => cr.TUB_DATGRU,
- pnMKB => NULL,
- pnNUMB_REG => NULL,
- pdUPDATE_DATE => TRUNC(SYSDATE),
- pnFR => 0,
- psNUMB_REG_GD => NULL,
- pdREMOVE_DATE => NULL,
- pnREMOVE_REASON => NULL,
- pnREMOVE_LPU => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_NR_PATIENTS','Ошибка добавления в ноз. реестр пациента: '||cr.TUB_FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.2 блок обработки данных в разделе RTUB_CASES
- ----------------------------------------
- BEGIN
- SELECT rc.ID
- INTO nRTUB_CASES_ID
- FROM D_RTUB_CASES rc
- WHERE rc.AGENT = nAGENTS_ID
- AND rc.VERSION = nVER_RTUB_CASES
- AND (rc.NR_PATIENT = nNR_PATIENT_ID
- OR
- rc.NR_PATIENT IS NULL)
- AND COALESCE(cr.TUB_DATGRU,TRUNC(SYSDATE)) BETWEEN rc.CREATE_DATE AND COALESCE(rc.CLOSE_DATE,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получение данных для вставки в таблицу D_RTUB_CASES
- WITH N_REGISTR_TYPES AS (SELECT rt.ID
- FROM D_NOS_REGISTR_TYPES rt
- WHERE rt.T_CODE = nNOS_REG_TYPES_TUB -- ТуберкулезБП
- AND rt.VERSION = nVER_NOS_REGISTR_TYPES
- AND ROWNUM = 1),
- PAT_DGROUP_AGE AS (SELECT (CASE WHEN D_PKG_DAT_TOOLS.FULL_YEARS(cr.TUB_DATGRU,dAGENT_BIRTHDATE) >= 18 THEN 1
- ELSE 2
- END) age
- FROM dual)
- SELECT (SELECT dpg.ID
- FROM D_DTUB_PAT_GROUP dpg
- WHERE dpg.VERSION = nVER_DTUB_PAT_GROUP
- AND dpg.PG_CODE = (SELECT vdpg.MIS_CODE
- FROM IMP70_V_KONVE_DTUB_PAT_GROUP vdpg
- WHERE UPPER(vdpg.FILE_CODE) = UPPER(cr.TUB_TIPPAC)
- AND ROWNUM = 1)
- AND ROWNUM = 1),
- (SELECT pdg.ID
- FROM D_PATIENTS_DGROUP pdg
- WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
- AND pdg.PDG_CODE = (SELECT vpg.MIS_CODE
- FROM IMP70_V_KONVE_PAT_DGROUP vpg
- WHERE UPPER(vpg.FILE_CODE) = UPPER(cr.TUB_GRUDU)
- AND ROWNUM = 1)
- AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND pdg.AGE = (SELECT AGE FROM PAT_DGROUP_AGE)
- AND ROWNUM = 1)
- INTO nPAT_GROUP,
- nFROM_GROUP
- FROM dual;
- BEGIN
- D_PKG_RTUB_CASES.ADD(pnD_INSERT_ID => nRTUB_CASES_ID,
- pnLPU => pnLPU,
- pnAGENT => nAGENTS_ID,
- pnNR_PATIENT => nNR_PATIENT_ID,
- pnPAT_GROUP => nPAT_GROUP,
- pnFROM_DGROUP => nFROM_GROUP,
- pnLPU_CREATE => nLPUDICT_ID,
- pdCREATE_DATE => cr.TUB_DATGRU,
- pdLAST_CHANGE_DATE => cr.TUB_DATKOR,
- pnLAST_CHANGE_EMP => NULL,
- pdCLOSE_DATE => NULL,
- pnCLOSE_EMP => NULL,
- psCLOSE_REASON => NULL,
- pnLPU_IN_CHARGE => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASES','Ошибка добавления случая туберкулеза для пациента: '||cr.TUB_FIO, SQLERRM);
- END;
- END;
- ----------------------------------------
- --2.6 блок обработки данных в разделе RTUB_CASE_DISP
- ----------------------------------------
- IF nRTUB_CASES_ID IS NOT NULL THEN
- BEGIN
- SELECT rcd.ID
- INTO nRTUB_CASE_DISP_ID
- FROM D_RTUB_CASE_DISP rcd
- WHERE rcd.PID = nRTUB_CASES_ID
- AND rcd.VERSION = nVER_RTUB_CASE_DISP
- AND rcd.DISP_LPU = nLPUDICT_ID
- AND COALESCE(cr.TUB_DATGRU,TRUNC(SYSDATE)) BETWEEN rcd.DATE_IN AND COALESCE(rcd.DATE_OUT,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- BEGIN
- D_PKG_RTUB_CASE_DISP.ADD(pnD_INSERT_ID => nRTUB_CASE_DISP_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASES_ID,
- pnDISP_LPU => nLPUDICT_ID,
- pnDISP_EMP => NULL,
- pdDATE_IN => cr.TUB_DATGRU,
- pdDATE_OUT => NULL,
- pnOUT_REASON => NULL,
- pnCONTROL_CARD => NULL,
- pdRECOMEND_DATE_OUT => NULL,
- pnRECOMEND_OUT_REAS => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_DISP','Ошибка добавления данных учета в ЛПУ случая туберкулеза для пациента: '||cr.TUB_FIO, SQLERRM);
- END;
- END;
- END IF;
- ----------------------------------------
- --2.3 блок обработки данных в разделе RTUB_CASE_DISP_DATA
- ----------------------------------------
- IF nRTUB_CASE_DISP_ID IS NOT NULL THEN
- IF cr.TUB_GRUDU IS NOT NULL THEN
- BEGIN
- SELECT rcdd.ID
- INTO nRTUB_CASE_DISP_DATA_ID
- FROM D_RTUB_CASE_DISP_DATA rcdd
- WHERE rcdd.PID = nRTUB_CASE_DISP_ID
- AND rcdd.VERSION = nVER_RTUB_CASE_DISP_DATA
- AND COALESCE(cr.TUB_DATGRU,TRUNC(SYSDATE)) BETWEEN rcdd.DATE_IN AND COALESCE(rcdd.DATE_OUT,TRUNC(SYSDATE))
- AND ROWNUM = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- --получение данных для вставки в таблицу D_RTUB_CASE_DISP_DATA
- WITH N_REGISTR_TYPES AS (SELECT rt.ID
- FROM D_NOS_REGISTR_TYPES rt
- WHERE rt.T_CODE = nNOS_REG_TYPES_TUB -- ТуберкулезБП
- AND rt.VERSION = nVER_NOS_REGISTR_TYPES
- AND ROWNUM = 1),
- PAT_DGROUP_AGE AS (SELECT (CASE WHEN D_PKG_DAT_TOOLS.FULL_YEARS(cr.TUB_DATGRU,dAGENT_BIRTHDATE) >= 18 THEN 1
- ELSE 2
- END) age
- FROM dual)
- SELECT (SELECT pdg.ID
- FROM D_PATIENTS_DGROUP pdg
- WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
- AND UPPER(pdg.PDG_CODE) = (SELECT UPPER(vpdg.MIS_CODE)
- FROM IMP70_V_KONVE_PAT_DGROUP vpdg
- WHERE vpdg.FILE_CODE = UPPER(cr.TUB_GRUDU)
- AND ROWNUM = 1)
- AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND pdg.AGE = (SELECT AGE FROM PAT_DGROUP_AGE)
- AND ROWNUM = 1),
- (SELECT pdg.ID
- FROM D_PATIENTS_DGROUP pdg
- WHERE pdg.VERSION = nVER_PATIENTS_DGROUP
- AND UPPER(pdg.PDG_CODE) = (SELECT UPPER(vpdg.MIS_CODE)
- FROM IMP70_V_KONVE_PAT_DGROUP vpdg
- WHERE vpdg.FILE_CODE = UPPER(cr.TUB_KUDA)
- AND ROWNUM = 1)
- AND pdg.NR_TYPE = (SELECT ID FROM N_REGISTR_TYPES)
- AND pdg.AGE = (SELECT AGE FROM PAT_DGROUP_AGE)
- AND ROWNUM = 1)
- INTO nDGROUP,
- nRECOM_TO_DGROUP
- FROM dual;
- IF nDGROUP IS NULL THEN
- lg(pnLOG_IDENT,'NDF_RTUB_CASE_DISP_DATA','Не определена Группа Д-учета TUB_GRUDU='||cr.TUB_GRUDU||' для пациента: '||cr.TUB_FIO);
- ELSE
- BEGIN
- D_PKG_RTUB_CASE_DISP_DATA.ADD(pnD_INSERT_ID => nRTUB_CASE_DISP_DATA_ID,
- pnLPU => pnLPU,
- pnPID => nRTUB_CASE_DISP_ID,
- pnDGROUP => nDGROUP,
- pdDATE_IN => cr.TUB_DATGRU,
- pdRECOM_DATE_OUT => cr.TUB_DATKUD,
- pnRECOM_TO_DGROUP => nRECOM_TO_DGROUP,
- pdDATE_OUT => NULL);
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ADD_RTUB_CASE_DISP_DATA','Ошибка добавления Группы Д-учета для пациента : '||cr.TUB_FIO, SQLERRM);
- END;
- END IF;
- END;
- END IF;
- END IF;
- END IF; -- конец условия if nAGENTS_ID is not null ПОСЛЕ создания D_AGENTS
- END LOOP; -- конец цикла по таблице импорта
- END IF; -- конец условия if nERROR = 0 or pnERR_IGNORE = 1
- lg(pnLOG_IDENT,'END_IMP','Завершение импорта в '||TO_CHAR(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));
- EXCEPTION
- WHEN OTHERS THEN
- lg(pnLOG_IDENT,'ERROR_IMP','Ошибка - '||SQLERRM);
- D_P_EXC('Ошибка процедуры IMP70_P_GR0KONVE импорта данных из таблицы IMP70_GR0KONVE: Ошибка - '||SQLERRM);
- END IMP70_P_GR0KONVE;
- -----------------------------------------------------------------------------------------------------------------------------
- END IMP70_PKG_KONVE;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement